Вы находитесь на странице: 1из 14

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

Rectángulo más ancho, Rectángulo menos ancho,


Rectángulo más alto, Rectángulo menos alto,
N
Rectángulo con mayor área, Rectángulo con la menor
Rectángulos área, Rectángulo con la mayor diagonal, Rectángulo con
la menor diagonal, Rectángulo que sobresale por la
(x, y, ancho, alto, letra) izquierda, Rectángulo que sobresale por la derecha,
Rectángulo que sobresale por la arriba, Rectángulo que
sobresale por debajo

gmullerb@mail.com
Prof. Gonzalo Müller
UML de estructuras

RECTANGULO RESULTADOS
x: real mayorancho: RECTANGULO
y: real menorancho: RECTANGULO
letra: carácter mayorarea: RECTANGULO
ancho: real menorarea: RECTANGULO
alto: real mayordiag: RECTANGULO
área: real menordiag: RECTANGULO
diagonal: real masarr: RECTANGULO
x2: real masaba: RECTANGULO
y2: real masder: RECTANGULO
masizq: RECTANGULO

Diagrama Top - Down

Rectángulos

leerRectangulo calcularRectangulo compararRectangulo escribirRectangulo escribirResultados

Tabla de Módulos

Nombre Parámetros Retorna Tipo


leerRectangulo - rect: RECTANGULO función
calcularRectangulo rect: RECTANGULO rect: RECTANGULO función
compararRectangulo res: RESULTADOS res: RESULTADOS función
rect: RECTANGULO
escribirRectangulo rect: RECTANGULO - subrutina
escribirResultados res: RESULTADOS - subrutina

gmullerb@mail.com
Prof. Gonzalo Müller
Fase 1

Lectura y Escritura de 1 Rectángulo.

Análisis

Rectángulo Rectángulo
(x, y, ancho, alto, letra) (x, y, ancho, alto, letra)

RECTANGULO
x: real
y: real
letra: carácter
ancho: real
alto: real

Rectángulos

leerRectangulo escribirRectangulo

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;
};

gmullerb@mail.com
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);
}

gmullerb@mail.com
Prof. Gonzalo Müller
Fase 2

Lectura, Cálculo y Escritura de 1 Rectángulo.

Análisis

Rectángulo Rectángulo
(x, y, ancho, alto, letra) (x, y, ancho, alto, letra,

área, diagonal, x2, y2)

RECTANGULO
x: real
y: real
letra: carácter
ancho: real
alto: real
área: real
diagonal: real
x2: real
y2: real

Rectángulos

leerRectangulo calcularRectangulo escribirRectangulo

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>

gmullerb@mail.com
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);
}

gmullerb@mail.com
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;
}

gmullerb@mail.com
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);
gmullerb@mail.com
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;
}

gmullerb@mail.com
Prof. Gonzalo Müller
Fase 4

Lectura, Cálculo, Escritura y Comparación de N Rectángulo.

Análisis

Rectángulo más ancho, Rectángulo menos ancho,


Rectángulo más alto, Rectángulo menos alto,
N
Rectángulo con mayor área, Rectángulo con la menor
Rectángulos área, Rectángulo con la mayor diagonal, Rectángulo
con la menor diagonal, Rectángulo que sobresale por
(x, y, ancho, alto, letra) la izquierda, Rectángulo que sobresale por la derecha,
Rectángulo que sobresale por la arriba, Rectángulo
que sobresale por debajo

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

Nombre Parámetros Retorna Tipo


leerRectangulo - rect: RECTANGULO función
calcularRectangulo rect: RECTANGULO rect: RECTANGULO función
compararRectangulo res: RESULTADOS res: RESULTADOS función
rect: RECTANGULO
escribirRectangulo rect: RECTANGULO - subrutina
escribirResultados res: RESULTADOS - subrutina
gmullerb@mail.com
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;
gmullerb@mail.com
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;
}

gmullerb@mail.com
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)

gmullerb@mail.com
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);
}

gmullerb@mail.com

Вам также может понравиться