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

14
Prof. Gonzalo Müller [email protected] 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

Upload: gmullerb

Post on 19-Jun-2015

185 views

Category:

Documents


2 download

DESCRIPTION

Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++, Prof. Gonzalo Müller, [email protected], Facultad de Ingeniería, UCV

TRANSCRIPT

Page 1: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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

Page 2: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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

Page 3: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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

Page 4: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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

}

Page 5: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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

Page 6: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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

}

Page 7: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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;

}

Page 8: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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

Page 9: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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;

}

Page 10: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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

Page 11: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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;

Page 12: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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;

}

Page 13: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

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)

Page 14: Problema Resuelto con Estructuras y Acoplamiento de Datos Básicos en C++

Prof. Gonzalo Müller

[email protected]

{

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

}