problema resuelto con estructuras y acoplamiento de datos básicos en c++
DESCRIPTION
Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++, Prof. Gonzalo Müller, [email protected], Facultad de Ingeniería, UCVTRANSCRIPT
Prof. Gonzalo Müller
Problema Resuelto
Construir un programa modular con acoplamiento de datos básico con estructuras en C++ para:
Dado N rectángulos cada uno identificado con una letra,
Determinar cual
� es el más ancho, menos ancho, más alto, menos alto
� tiene la mayor área, cual tiene la menor área
� tiene la mayor diagonal, cual tiene la menor diagonal
� sobresale por la izquierda, sobresale por la derecha
� sobresale por la arriba, sobresale por debajo
Realizar: DES, DTD, UMLS, TM
Análisis
Diagrama Entrada Salida
N
Rectángulos
(x, y, ancho, alto, letra)
Rectángulo más ancho, Rectángulo menos ancho,
Rectángulo más alto, Rectángulo menos alto,
Rectángulo con mayor área, Rectángulo con la menor
área, Rectángulo con la mayor diagonal, Rectángulo con
la menor diagonal, Rectángulo que sobresale por la
izquierda, Rectángulo que sobresale por la derecha,
Rectángulo que sobresale por la arriba, Rectángulo que
sobresale por debajo
Prof. Gonzalo Müller
UML de estructuras
Diagrama Top - Down
Tabla de Módulos
Nombre Parámetros Retorna Tipo
leerRectangulo - rect: RECTANGULO función
calcularRectangulo rect: RECTANGULO rect: RECTANGULO función
compararRectangulo res: RESULTADOS
rect: RECTANGULO
res: RESULTADOS
función
escribirRectangulo rect: RECTANGULO - subrutina
escribirResultados res: RESULTADOS - subrutina
RECTANGULO
x: real
y: real
letra: carácter
ancho: real
alto: real
área: real
diagonal: real
x2: real
y2: real
RESULTADOS
mayorancho: RECTANGULO
menorancho: RECTANGULO
mayorarea: RECTANGULO
menorarea: RECTANGULO
mayordiag: RECTANGULO
menordiag: RECTANGULO
masarr: RECTANGULO
masaba: RECTANGULO
masder: RECTANGULO
masizq: RECTANGULO
Rectángulos
leerRectangulo calcularRectangulo compararRectangulo escribirRectangulo escribirResultados
Prof. Gonzalo Müller
Fase 1
Lectura y Escritura de 1 Rectángulo.
Análisis
Nombre Parámetros Retorna Tipo
leerRectangulo - rect: RECTANGULO función
escribirRectangulo rect: RECTANGULO - subrutina
Código Fuente
#include <stdio.h>
#include <stdlib.h>
struct RECTANGULO
{
char letra;
float x,y;
float ancho, alto;
};
RECTANGULO
x: real
y: real
letra: carácter
ancho: real
alto: real
Rectángulo
(x, y, ancho, alto, letra)
Rectángulo
(x, y, ancho, alto, letra)
Rectángulos
leerRectangulo escribirRectangulo
Prof. Gonzalo Müller
RECTANGULO leerRectangulo();
void escribirRectangulo(RECTANGULO rect);
main()
{
RECTANGULO recta;
//
recta= leerRectangulo();
escribirRectangulo(recta);
}
RECTANGULO leerRectangulo()
{
RECTANGULO rect;
//
printf("x:");
scanf("%f", &rect.x);
printf("y:");
scanf("%f", &rect.y);
printf("Ancho:");
scanf("%f", &rect.ancho);
printf("Alto:");
scanf("%f", &rect.alto);
printf("Letra:");
scanf("%c", &rect.letra);
scanf("%c");
//
return rect;
}
void escribirRectangulo(RECTANGULO rect)
{
printf(" %c (%f,%f) Ancho:%f Alto:%f\n", rect.letra, rect.x, rect.y, rect.ancho, rect.alto);
}
Prof. Gonzalo Müller
Fase 2
Lectura, Cálculo y Escritura de 1 Rectángulo.
Análisis
RECTANGULO
x: real
y: real
letra: carácter
ancho: real
alto: real
área: real
diagonal: real
x2: real
y2: real
Nombre Parámetros Retorna Tipo
leerRectangulo - rect: RECTANGULO función
calcularRectangulo rect: RECTANGULO rect: RECTANGULO función
escribirRectangulo rect: RECTANGULO - subrutina
Código Fuente
#include <stdio.h>
Rectángulo
(x, y, ancho, alto, letra)
Rectángulo
(x, y, ancho, alto, letra,
área, diagonal, x2, y2)
Rectángulos
leerRectangulo calcularRectangulo escribirRectangulo
Prof. Gonzalo Müller
#include <stdlib.h>
#include <math.h>
struct RECTANGULO
{
char letra;
float x,y;
float x2,y2;
float ancho, alto;
double area, diagonal;
};
RECTANGULO leerRectangulo();
void escribirRectangulo(RECTANGULO rect);
RECTANGULO calcularRectangulo(RECTANGULO rect);
main()
{
RECTANGULO recta;
//
recta= leerRectangulo();
recta= calcularRectangulo(recta);
escribirRectangulo(recta);
}
RECTANGULO leerRectangulo()
{
RECTANGULO rect;
//
printf("x:");
scanf("%f", &rect.x);
printf("y:");
scanf("%f", &rect.y);
printf("Ancho:");
scanf("%f", &rect.ancho);
printf("Alto:");
scanf("%f", &rect.alto);
printf("Letra:");
scanf("%c", &rect.letra);
scanf("%c");
//
return rect;
}
void escribirRectangulo(RECTANGULO rect)
{
printf(" %c (%f,%f) Ancho:%f Alto:%f", rect.letra, rect.x, rect.y, rect.ancho, rect.alto);
printf(" (%f,%f) Area:%f Diagonal:%f\n", rect.x2, rect.y2, rect.area, rect.diagonal);
}
Prof. Gonzalo Müller
RECTANGULO calcularRectangulo(RECTANGULO rect)
{
rect.x2= rect.x + rect.ancho;
rect.y2= rect.y - rect.alto;
rect.area=rect.ancho*rect.alto;
rect.diagonal=sqrt(rect.ancho*rect.ancho + rect.alto*rect.alto);
//
return rect;
}
Prof. Gonzalo Müller
Fase 3
Lectura, Cálculo y Escritura de N Rectángulo.
Código Fuente
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct RECTANGULO
{
char letra;
float x,y;
float x2,y2;
float ancho, alto;
double area, diagonal;
};
RECTANGULO leerRectangulo();
void escribirRectangulo(RECTANGULO rect);
RECTANGULO calcularRectangulo(RECTANGULO rect);
main()
{
RECTANGULO recta;
unsigned short k, cantidad;
//
printf("Cantidad de Rectangulos:");
scanf("%hu", &cantidad);
k= 0;
do
{
printf("Rectangulo %u\n", k+1);
recta= leerRectangulo();
recta= calcularRectangulo(recta);
escribirRectangulo(recta);
k = k+1;
}
while(k < cantidad);
}
RECTANGULO leerRectangulo()
{
RECTANGULO rect;
//
printf("x:");
scanf("%f", &rect.x);
Prof. Gonzalo Müller
printf("y:");
scanf("%f", &rect.y);
printf("Ancho:");
scanf("%f", &rect.ancho);
printf("Alto:");
scanf("%f", &rect.alto);
printf("Letra:");
scanf("%c", &rect.letra);
scanf("%c");
//
return rect;
}
void escribirRectangulo(RECTANGULO rect)
{
printf(" %c (%f,%f) Ancho:%f Alto:%f", rect.letra, rect.x, rect.y, rect.ancho, rect.alto);
printf(" (%f,%f) Area:%f Diagonal:%f\n", rect.x2, rect.y2, rect.area, rect.diagonal);
}
RECTANGULO calcularRectangulo(RECTANGULO rect)
{
rect.x2= rect.x + rect.ancho;
rect.y2= rect.y - rect.alto;
rect.area=rect.ancho*rect.alto;
rect.diagonal=sqrt(rect.ancho*rect.ancho + rect.alto*rect.alto);
//
return rect;
}
Prof. Gonzalo Müller
Fase 4
Lectura, Cálculo, Escritura y Comparación de N Rectángulo.
Análisis
RESULTADOS
mayorancho: RECTANGULO
menorancho: RECTANGULO
mayorarea: RECTANGULO
menorarea: RECTANGULO
mayordiag: RECTANGULO
menordiag: RECTANGULO
masarr: RECTANGULO
masaba: RECTANGULO
masder: RECTANGULO
masizq: RECTANGULO
Nombre Parámetros Retorna Tipo
leerRectangulo - rect: RECTANGULO función
calcularRectangulo rect: RECTANGULO rect: RECTANGULO función
compararRectangulo res: RESULTADOS
rect: RECTANGULO
res: RESULTADOS
función
escribirRectangulo rect: RECTANGULO - subrutina
escribirResultados res: RESULTADOS - subrutina
N
Rectángulos
(x, y, ancho, alto, letra)
Rectángulo más ancho, Rectángulo menos ancho,
Rectángulo más alto, Rectángulo menos alto,
Rectángulo con mayor área, Rectángulo con la menor
área, Rectángulo con la mayor diagonal, Rectángulo
con la menor diagonal, Rectángulo que sobresale por
la izquierda, Rectángulo que sobresale por la derecha,
Rectángulo que sobresale por la arriba, Rectángulo
que sobresale por debajo
Rectángulos
leerRectangulo calcularRectangulo compararRectangulo escribirRectangulo escribirResultados
Prof. Gonzalo Müller
Código Fuente
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct RECTANGULO
{
char letra;
float x,y;
float x2,y2;
float ancho, alto;
double area, diagonal;
};
struct RESULTADOS
{
RECTANGULO masancho;
RECTANGULO menosancho;
RECTANGULO masalto;
RECTANGULO menosalto;
RECTANGULO masarea;
RECTANGULO menosarea;
RECTANGULO masdiagonal;
RECTANGULO menosdiagonal;
RECTANGULO masizq;
RECTANGULO masder;
RECTANGULO masarr;
RECTANGULO masaba;
};
RECTANGULO leerRectangulo();
void escribirRectangulo(RECTANGULO rect);
RECTANGULO calcularRectangulo(RECTANGULO rect);
RESULTADOS inicializarResultados();
RESULTADOS compararRectangulo(RESULTADOS res, RECTANGULO rect);
void escribirResultados(RESULTADOS res);
main()
{
RECTANGULO recta;
unsigned short k, cantidad;
RESULTADOS resultados;
//
printf("Cantidad de Rectangulos:");
scanf("%hu", &cantidad);
k= 0;
Prof. Gonzalo Müller
resultados = inicializarResultados();
do
{
printf("Rectangulo %u\n", k+1);
recta= leerRectangulo();
recta=calcularRectangulo(recta);
resultados = compararRectangulo(resultados, recta);
escribirRectangulo(recta);
k = k+1;
}
while(k < cantidad);
escribirResultados(resultados);
}
RECTANGULO leerRectangulo()
{
RECTANGULO rect;
//
printf("x:");
scanf("%f", &rect.x);
printf("y:");
scanf("%f", &rect.y);
printf("Ancho:");
scanf("%f", &rect.ancho);
printf("Alto:");
scanf("%f", &rect.alto);
printf("Letra:");
scanf("%c", &rect.letra);
scanf("%c");
//
return rect;
}
void escribirRectangulo(RECTANGULO rect)
{
printf(" %c (%f,%f) Ancho:%f Alto:%f", rect.letra, rect.x, rect.y, rect.ancho, rect.alto);
printf(" (%f,%f) Area:%f Diagonal:%f\n", rect.x2, rect.y2, rect.area, rect.diagonal);
}
RECTANGULO calcularRectangulo(RECTANGULO rect)
{
rect.x2= rect.x + rect.ancho;
rect.y2= rect.y - rect.alto;
rect.area=rect.ancho*rect.alto;
rect.diagonal=sqrt(rect.ancho*rect.ancho + rect.alto*rect.alto);
//
return rect;
}
Prof. Gonzalo Müller
RESULTADOS inicializarResultados()
{
RESULTADOS res;
//
res.masancho.ancho = -9999;
res.menosancho.ancho = 99999;
res.masalto.alto = -99999;
res.menosalto.alto = 999999;
res.masarea.area = -9999;
res.menosarea.area = 99999;
res.masdiagonal.diagonal = -99999;
res.menosdiagonal.diagonal = 99999;
res.masizq.x = 99999;
res.masder.x2 = -99999;
res.masarr.y = -99999;
res.masaba.y2 = 9999999;
//
return res;
}
RESULTADOS compararRectangulo(RESULTADOS res, RECTANGULO rect)
{
if(rect.ancho > res.masancho.ancho)
{
res.masancho = rect;
}
if(rect.ancho < res.menosancho.ancho)
{
res.menosancho = rect;
}
if(rect.alto > res.masalto.alto)
{
res.masalto = rect;
}
if(rect.alto < res.menosalto.alto)
{
res.menosalto = rect;
}
if(rect.area > res.masarea.area)
{
res.masarea = rect;
}
if(rect.area < res.menosarea.area)
{
res.menosarea = rect;
}
if(rect.diagonal > res.masdiagonal.diagonal)
{
res.masdiagonal = rect;
}
if(rect.diagonal < res.menosdiagonal.diagonal)
Prof. Gonzalo Müller
{
res.menosdiagonal = rect;
}
if(rect.x > res.masizq.x)
{
res.masizq = rect;
}
if(rect.x2 < res.masder.x2)
{
res.masder = rect;
}
if(rect.y > res.masarr.y)
{
res.masarr = rect;
}
if(rect.y2 < res.masaba.y2)
{
res.masaba = rect;
}
//
return res;
}
void escribirResultados(RESULTADOS res)
{
printf("Rectangulo Mas Ancho:");
escribirRectangulo(res.masancho);
printf("Rectangulo Menos Ancho:");
escribirRectangulo(res.menosancho);
printf("Rectangulo Mas Alto:");
escribirRectangulo(res.masalto);
printf("Rectangulo Menos Alto:");
escribirRectangulo(res.menosalto);
printf("Rectangulo Mas Area:");
escribirRectangulo(res.masarea);
printf("Rectangulo Menos Area:");
escribirRectangulo(res.menosarea);
printf("Rectangulo Mas Diagonal:");
escribirRectangulo(res.masdiagonal);
printf("Rectangulo Menos Diagonal:");
escribirRectangulo(res.menosdiagonal);
printf("Rectangulo Mas Izquierda:");
escribirRectangulo(res.masizq);
printf("Rectangulo Mas Derecha:");
escribirRectangulo(res.masder);
printf("Rectangulo Mas Arriba:");
escribirRectangulo(res.masarr);
printf("Rectangulo Mas Abajo:");
escribirRectangulo(res.masaba);
}