Está en la página 1de 6

Análisis Modular con Repeticiones de Número Conocido de Iteraciones

Se introducen los siguientes términos al análisis modular:

Ejemplos
Asignación Realizar la asignación de Valor Realizar la asignación de cero en totalNotas.
asignado en Variable dada. Realizar la asignación de 1 en Contador de
estudiantes.
Acumulación Realizar la acumulación del Valor Realizar la acumulación de la nota en totalNotas.
acumulado en Variable dada.
Incremento Realizar el incremento de Valor Realizar el incremento de 1 en Contador de
incrementado en Variable dada. estudiantes.
Procesar para cada estudiante (Contador de
Procesar para cada instancia (condición) estudiantes <= 20)
// Instrucciones Leer nota (entre 0.0 y 5.0, ambos inclusive).
Realizar el incremento de Valor del incremento Realizar la acumulación de la nota en
en Variable de control. totalNotas.
Repetir para la siguiente instancia Realizar el incremento de 1 en Contador de
estudiantes.
Repetir para el siguiente estudiante

EJEMPLO 1:

Una compañía dedicada a la venta de terrenos rectangulares desea un aplicativo que le permita
gestionar una cantidad conocida de terrenos y desplegar, para cada uno de ellos, el nombre del
comprador y el valor del terreno. Además, se debe calcular y mostrar el total recaudado por la venta
de estos terrenos. De cada terreno se conoce su ancho y largo, en metros. El valor del metro cuadrado
de terreno está en $ 500 000, pero si el área del terreno a vender es superior a 2000 mts cuadrados,
se aplica un descuento del 5%.

1. Proceso: principal (Conociendo el número de repeticiones).

Proceso: principal
Entradas Salidas
Tipo Identificación Tipo Identificación
Entero Cantidad de terrenos. Cadena Nombre del comprador.
Cadena Nombre del comprador. Real Valor del terreno.
Real Ancho del terreno (en mts). Real Total venta.
Real Largo del terreno (en mts).
Proceso:
Leer Cantidad de terrenos (mayor que cero).
Realizar la asignación de cero en Total venta.
Realizar la asignación de 1 en Contador.
Procesar para cada terreno (Contador <= Cantidad de terrenos)
Leer Nombre del comprador.
Leer Ancho del terreno y Largo del terreno (c/u en mts y mayor que cero).
Realizar el cálculo del Área del terreno, mediante el subproceso calcularAreaTerreno,
pasándole Ancho del terreno y Largo del terreno.
Realizar el cálculo del Valor del terreno, mediante el subproceso calcularValorTerreno,
pasándole Área del terreno.
Imprimir Nombre del comprador y Valor del terreno.
Realizar la acumulación del Valor del terreno en Total venta.
Realizar el incremento de 1 en Contador.
Repetir para el siguiente terreno
Imprimir Total venta.
Terminar.

2. Subproceso: calcularAreaTerreno

Subproceso: calcularAreaTerreno
Entradas Salidas
Tipo Identificación Tipo Identificación
Real Ancho del terreno. Real Área del terreno.
Real Largo del terreno.
Proceso:
Recibir Ancho del terreno y Largo del terreno.
Realizar el cálculo del Área del terreno, aplicando la fórmula (Ancho del terreno * Largo del
terreno).
Regresar Área del terreno.
Terminar.

3. Subproceso: calcularValorTerreno

Subproceso: calcularValorTerreno
Entradas Salidas
Tipo Identificación Tipo Identificación
Real Área del terreno. Real Valor del terreno.

Proceso:
Recibir Área del terreno.

Si Área del terreno > 2 000


Realizar el cálculo del Valor del terreno, aplicando la fórmula (Área del terreno * 500000 *
0.95).
Sino
Realizar el cálculo del Valor del terreno, aplicando la fórmula (Área del terreno * 500000).

Regresar Valor del terreno.


Terminar.
A continuación, una GUI para este aplicativo:

Implementación en C#, acorde con el Análisis Modular previo:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Microsoft.VisualBasic; // TAMBIÉN, agregar esto en Refererences

// Cali, 8 de febrero de 2016.

namespace EjemploCicloFor_2016_01
{
public partial class Form1 : Form

{
public Form1() {
InitializeComponent();
}

private void buttonSalir_Click(object sender, EventArgs e) {


Close();
}

private void buttonLimpiar_Click(object sender, EventArgs e) {


textBoxNombre1.Clear();
textBoxAncho.Clear();
textBoxLargo.Clear();
textBoxNombre2.Clear();
textBoxValorTerreno.Clear();
}

private void buttonProcesar_Click(object sender, EventArgs e) {


principal(); // Invoca (o llama) al método principal()
}

// Definición del método principal:


public void principal() {
// Declaración y lectura del número de terrenos:
int numTerrenos = int.Parse(textBoxNumTerrenos.Text);
if( numTerrenos < 1 ) Close() ; // Si numTerrenos < 1, cierre la aplicación.
textBoxNumTerrenos.ReadOnly = true; // Impedir su modificación.
double totalVta = 0.0; // Realizar la asignación de cero en totalVta.
String nombre, reporte = "Reporte de ventas:\n" ;
// Declaración de más variables locales:
double ancho, largo, area, valorTerreno;
// Procesar para cada terreno, usando el ciclo for:
for( int ctr = 1; ctr <= numTerrenos; ctr ++ ) {
// Lectura de datos para el terreno actual:
nombre = Interaction.InputBox("Digite nombres y apellidos del " +
"comprador No. " + ctr, "Nombre del comprador actual", null, 800, 30);
ancho = double.Parse(Interaction.InputBox("Digite el ancho, en mts, del "
+ "terreno No. " + ctr, "Ancho del terreno actual", null, 800, 30));
largo = double.Parse(Interaction.InputBox("Digite el largo, en mts, del "
+ "terreno No. " + ctr, "Largo del terreno actual", null, 800, 30));

// Coloque las variables de entrada en sus cajas de texto:


textBoxNombre1.Text = nombre;
textBoxAncho.Text = ancho.ToString();
textBoxLargo.Text = largo.ToString();

// Cálculo del área del terreno actual, llamando el método calcularArea,


// enviándole como argumentos su ancho y largo:
area = calcularArea(ancho, largo);
// Realizar el cálculo del valor del terreno, llamando el método
// calcularValorTerreno, enviándole como argumento el área del terreno
// actual:
valorTerreno = calcularValorTerreno(area);
// Imprimir nombre del comprador y valor del terreno, actuales:
textBoxNombre2.Text = nombre.ToUpper(); // Muéstrelo en altas.
// Muestre el valor con 2 decimales:
textBoxValorTerreno.Text = valorTerreno.ToString("F2");
// Realizar la acumulación del valor del terreno en totalVta:
totalVta += valorTerreno;

// Muestre el valor actual del contador de terrenos:


textBoxCtr.Text = ctr.ToString();

reporte += nombre.ToUpper( ) + " compró " + area + " mts2 por $ " +
valorTerreno.ToString( "F2" ) + "\n" ;

} // Llave de fin de ciclo.

// Para impedir más entradas, deshabilite el botón Procesar:


buttonProcesar.Enabled = false;

// Imprima los totales (o consolidados) DESPUÉS del ciclo:

// Imprimir totalVta:
textBoxTotalVta.Text = totalVta.ToString( "F2" ) ;

richTextBoxReporte.Text = reporte;

} // Fin del método principal()

// Definición del método que calcula el área de un terreno rectangular, a partir


// de su ancho y largo:
public double calcularArea(double anchoTerreno, double largoTerreno) {
double area = anchoTerreno * largoTerreno ;
return area;
}
// Definición del método que calcula el valor del terreno, a partir de su área:
public double calcularValorTerreno( double areaTerreno ) {
double valorTerreno ;
if( areaTerreno > 2000 ) {
valorTerreno = areaTerreno * 500000 * 0.95 ;
}
else {
valorTerreno = areaTerreno * 500000 ;
}
return valorTerreno ;
}

También podría gustarte