problema resuelto con estructuras y acoplamiento de datos básicos en c++

Post on 19-Jun-2015

185 Views

Category:

Documents

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++, Prof. Gonzalo Müller, gmullerb@mail.com, Facultad de Ingeniería, UCV

TRANSCRIPT

Prof. Gonzalo Müller

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

#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

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

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

gmullerb@mail.com

{

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

}

top related