practica final casos practicos(1)

17
Caso Práctico 1. Presentación de un nombre en formatos múltiples PROBLEMA Usted está comenzando a trabajar en un problema que necesita producir nombres en varios formatos junto con el número de seguro social correspondiente. Como inicio, decide escribir un programa corto en C++ que introduce el número de seguro social y un solo nombre, y los muestra en diferentes formatos de modo que pueda estar seguro de que todas sus expresiones de cadena son correctas. ENTRADA El número de seguro social y el nombre en tres partes, en el archivo name.dat, cada una separada por uno o más espacios en blanco. SALIDA El nombre se escribirá en cuatro formatos distintos en el archivo name.out: 1. Nombre, segundo nombre, apellido, número de seguro social 2. Apellido, nombre, segundo nombre, número de seguro social 3. Apellido, nombre, inicial del segundo nombre, número de seguro social 4. Nombre, inicial del segundo nombre, apellido

Upload: javier-alberto-martinez-guadarrama

Post on 20-Dec-2015

20 views

Category:

Documents


5 download

DESCRIPTION

Practica Final Casos Practicos(1)

TRANSCRIPT

Page 1: Practica Final Casos Practicos(1)

Caso Práctico 1. Presentación de un nombre en formatos

múltiples

PROBLEMA

Usted está comenzando a trabajar en un problema que necesita producir nombres en varios

formatos junto con el número de seguro social correspondiente. Como inicio, decide escribir un

programa corto en C++ que introduce el número de seguro social y un solo nombre, y los muestra

en diferentes formatos de modo que pueda estar seguro de que todas sus expresiones de cadena

son correctas.

ENTRADA El número de seguro social y el nombre en tres partes, en el archivo name.dat, cada una

separada por uno o más espacios en blanco.

SALIDA El nombre se escribirá en cuatro formatos distintos en el archivo name.out:

1. Nombre, segundo nombre, apellido, número de seguro social

2. Apellido, nombre, segundo nombre, número de seguro social

3. Apellido, nombre, inicial del segundo nombre, número de seguro social

4. Nombre, inicial del segundo nombre, apellido

Page 2: Practica Final Casos Practicos(1)

ANÁLISIS

Fácilmente podría escribir el número de seguro social y el nombre en los cuatro formatos como

literales de cadena en el código, pero el propósito de este ejercicio es desarrollar y probar las

expresiones en cadena que necesita para un problema más grande. El enunciado del problema no

dice en qué orden se introducen las partes del nombre en el archivo, pero dice que van separadas

por espacios en blanco. Se supone que el orden es nombre, segundo nombre o inicial y apellido.

Debido a que los datos están en un archivo, no necesita solicitar los valores. Una vez que ya tiene

el número de seguro social y el nombre, sólo los escribe en los distintos formatos.

SUPOSICIÓN El orden del nombre en el archivo es nombre, segundo nombre y apellido.

El paso “Obtener el número de seguro social” se puede ejecutar de modo directo mediante lectura

hacia la variable de cadena. Así, no se requiere expansión en el nivel 1 del diseño.

¿Hay algún problema al leer el segundo nombre si hay en su lugar una inicial en vez del segundo

nombre? En realidad no. Sólo se supone que se introduce el segundo nombre y se extrae la inicial

de éste cuando la necesita para los formatos tercero y cuarto. Si se introdujo la inicial para el

segundo nombre, entonces las formas de salida tercera y cuarta serán las mismas. ¿Qué hay

acerca de la puntuación en la salida? Si el apellido viene primero, debe ir seguido de una coma, y

la inicial del segundo nombre debe ir seguida de un punto. Así, si se introduce la inicial en vez del

segundo nombre, debe ir seguida de un punto. Esto se debe agregar a las suposiciones.

SUPOSICIÓN El orden del nombre es: nombre, segundo nombre y apellido, y si se introduce la

inicial del segundo nombre en lugar del segundo nombre, debe ir seguida de un punto.

Page 3: Practica Final Casos Practicos(1)

Lo único que falta definir es la inicial del segundo nombre. Se puede usar el método substr para

tener acceso al primer carácter en el segundo nombre.

Page 4: Practica Final Casos Practicos(1)

Caso Práctico 2: Costo total de hipoteca (parte 1)

PROBLEMA

Sus padres están pensando en refinanciar su hipoteca y le piden ayuda con los cálculos. Ahora que

está aprendiendo C++, comprende que puede ahorrarse el trabajo de teclear en la calculadora si

escribe un programa que realice los cálculos de manera automática.

ANÁLISIS

En el caso práctico del capítulo 1, se dijo que con frecuencia hay pasos obvios en casi cualquier

problema de este tipo:

1. Obtener los datos.

2. Calcular los resultados.

3. Producir los resultados.

Los datos necesarios en este programa son la cantidad de dinero por ahorrar, el número de años

para el préstamo y la tasa de interés. De estos tres valores, se puede calcular el pago mensual.

Aunque es posible resolver este problema con lápiz y papel, también podría escribir un programa

para resolverlo. Por ahora puede hacer constantes los valores de datos y después, cuando aprenda

cómo introducir valores, puede reescribir el programa.

Después de intercambiar ideas con sus padres, encuentra que deben $50 000 y tienen

exactamente 7 años para pagar la deuda. La última cotización de su institución de crédito es por

una tasa de interés de 5.24 sin costos de finiquito.

Page 5: Practica Final Casos Practicos(1)

Usted recuerda vagamente haber visto la fórmula para determinar pagos por medio del interés

compuesto, pero no la recuerda, así que decide buscar en Internet.

En realidad esto parece más fácil de hacer en una computadora que en una calculadora. Dos

valores tomados para la potencia número de pagos parece desalentador. Por fortuna, el archivo

de encabezado <cmath> de C++, que se examinó antes, contiene varias funciones matemáticas

que incluyen la función de potencia. Antes de introducir los valores en la fórmula, es necesario

calcular dos valores intermedios: la tasa de interés mensual y el número de pagos.

Ahora todo lo que queda es imprimir la respuesta en un formato claro y conciso.

Del algoritmo se pueden crear tablas de constantes y variables como ayuda para escribir las

declaraciones del programa.

A continuación se muestra una pantalla de la salida.

Page 6: Practica Final Casos Practicos(1)

Caso Práctico 3: Costo total de hipoteca (parte 2)

PROBLEMA

En el caso práctico anterior usted escribió un programa de calculadora para sus padres con el fi n

de ayudarlos a decidir si refinanciaban su hipoteca. Este ejercicio lo hizo pensar. Todos los

anuncios, desde automóviles hasta aparatos para amueblar las casas, afirman que usted paga

“sólo tanto al mes”. ¿Cuánto está pagando en realidad por una casa o cualquier producto

comprado a plazos? Decide insertar su calculadora en un programa que le dice cuánto en realidad

está pagando sin importar lo que esté financiando. Puesto que ahora sabe usar los ciclos, decide

hacer el proceso dentro de un ciclo, para que el usuario pueda ver cómo un cambio en la tasa de

interés o duración del contrato afecta lo que paga en realidad.

ENTRADA

La calculadora permite que el usuario introduzca los distintos valores. Estos valores se introducen

al programa.

Cantidad total del préstamo (flotante)

Tasa de interés anual (flotante)

Número de años (entero)

SALIDA

Page 7: Practica Final Casos Practicos(1)

Los valores de entrada se imprimen por eco en una tabla que también muestra la cantidad pagada

realmente al término del préstamo.

ANÁLISIS

Este programa es un ciclo simple controlado por suceso, dentro del cual se pide al usuario que

introduzca la cantidad prestada, la tasa de interés y el número de años. Usted decide usar aquí un

ciclo controlado por centinela, con un valor negativo para la cantidad prestada como el centinela.

Esta decisión requiere que usted use una lectura principal, leer la primera cantidad prestada fuera

del ciclo y las siguientes cantidades prestadas al final del ciclo.

Page 8: Practica Final Casos Practicos(1)

Esto parece un diseño muy complicado para un problema tan simple. ¿En realidad es necesario

representar cada módulo como una función de C++? La respuesta depende de su propio estilo.

Algunos módulos tal vez no deben ser funciones; por ejemplo, OpenOutputFile y CloseOutputFile.

Los módulos de operación de archivo son sólo una línea de código cada uno, así que no es

necesario encapsularlos en una función de C++. Si el problema expresa que los nombres de los

archivos de entrada o salida, o ambos, se leerán desde el teclado, entonces este proceso sería

parte del módulo de apertura, lo cual permite representar el módulo en una función.

Page 9: Practica Final Casos Practicos(1)

Si los otros módulos se ejecutan como funciones es una cuestión de estilo. Como se dijo, la

pregunta es si usar una función o no hace que el programa sea más fácil de entender. La expresión

“más fácil de entender” está abierta a interpretación individual. Aquí se elige hacer las funciones

PrintHeading y PrintResults, pero no los otros módulos. En el ejercicio 1 de seguimiento de caso

práctico se pide que ejecute los otros módulos como funciones y determine cuál es más fácil de

entender para usted.

Caso Práctico 4: Perfil de Salud

PROBLEMA

Su abuela ha regresado del consultorio del médico y está confundida respecto a los números que

él usó para evaluar su salud. La enfermera la pesó, le tomó la tensión arterial, anotó su nivel de

colesterol tomado del examen de laboratorio, le pidió que se sentara y le dijo que no tardaría el

médico. Después de media hora entró el médico, examinó su gráfica, sonrió y le dijo que estaba

bien. Al revisar el informe que le entregaron a su abuela, usted comprende que podría haber un

mercado para un programa que explique esta información a los pacientes médicos. Usted tiene un

proyecto programado en su clase de ingeniería de software, de modo que decide escribir un

programa que haga exactamente eso. Antes de que pueda expresar la entrada y la salida de este

programa, necesita hacer una investigación en la red. Encuentra que hay dos partes importantes

para una lectura de colesterol: HDL (bueno) y LDL (malo). La relación de los dos es también

importante. Encuentra varias referencias que proveen interpretaciones para un intervalo de

valores de entrada. La interpretación de su peso depende de la relación entre su peso y su

estatura representado por el índice de masa corporal (IMC). Grandioso, usted ya cuenta con un

programa para calcular el IMC. La tensión arterial está conformada por dos valores: sistólico y

diastólico. Al hablar de tensión arterial, las lecturas están dadas, por lo común, como “algo” sobre

“algo”, tal como 120/80. El primer valor es la tensión sistólica y el segundo es la tensión diastólica.

Ahora, ya tiene información suficiente para determinar la entrada para su programa.

ENTRADA

Nombre del paciente, HDL, LDL, peso en libras, estatura en pulgadas, tensión sistólica y tensión

diastólica.

Page 10: Practica Final Casos Practicos(1)

SALIDA

El nombre del paciente y una interpretación de las lecturas de colesterol, peso y tensión arterial se

escriben en el archivo “Perfil”.

DISCUSIÓN

La descomposición de este problema en tareas es muy directa. Los datos se solicitan, se

introducen y se evalúan. La única pregunta es si se introducen todos los datos a la vez y se evalúan

o se pide que cada módulo de evaluación introduzca sus propios datos. El principio de ocultación

de información sugiere que se inserten los datos dentro de las funciones que evalúan los datos.

Aquí están las interpretaciones que encontró en Internet en relación con el colesterol.

Page 11: Practica Final Casos Practicos(1)

Por fortuna, ya tiene una calculadora de IMC que simplemente puede convertir en una función (al

eliminar las sugerencias de alimento). ¿Qué hay acerca de las lecturas de tensión arterial? De

nuevo, aquí tiene lo que halló en la red al respecto.

Page 12: Practica Final Casos Practicos(1)

El nombre se ha agregado a la lista de parámetros para que el usuario pueda solicitar datos

específicos del paciente. Las dos primeras líneas y las última línea pueden ser traducidas

directamente en C++.

El algoritmo para evaluar el IMC está en el capítulo 5 y la forma de evaluar la tensión arterial es

idéntica, así que se deja la escritura de su diseño como ejercicio 1 del seguimiento de caso

práctico.

¿Qué módulos deben ser funciones y cuáles deben ser codificados en línea? Obtener nombre

(GetName) debe ser obviamente una función de devolución de valor; evaluar colesterol

(EvaluateCholesterol), evaluar índice de masa corporal (EvaluateBMI) y evaluar la tensión arterial

(EvaluateBloodPressure) deben ser funciones void. La pregunta es si los módulos evaluar entrada

(EvaluateInput) deben ser codificados como funciones separadas. Si este programa se fuera a

codificar en un lenguaje que permitiera insertar una función dentro de una función, el buen estilo

sugeriría elaborar funciones separadas de los módulos EvaluateInput. Sin embargo, C++ no

permite anidar funciones. Los módulos EvaluateInput tendrían que codifi carse al mismo nivel que

Page 13: Practica Final Casos Practicos(1)

las funciones que los llaman. Así, estos módulos se deben codifi car en línea. Otra razón para

proceder así es que EvaluateCholesterol, EvaluateBMI y EvaluateBloodPressure son funciones muy

unidas con un propósito e interfaz claramente expresados.

Caso Práctico 5. Calcular estadísticas de

examen

PROBLEMA

Usted es el evaluador en su clase de Política. El maestro le

ha pedido que prepare la siguiente estadística para el

último examen: promedio de calificación, calificación

máxima, calificación mínima, cantidad de calificaciones

arriba del promedio, y cantidad de calificaciones debajo del

promedio. Puesto que se trata del primer examen, usted

decide escribir un programa para calcular estas estadísticas,

de modo que pueda usar el programa también para el resto

de los exámenes.

ANÁLISIS

Vamos a abstraer este problema del contexto dado para

asomarnos a las tareas de manera aislada.

Hay tres cosas separadas que se deben hacer con este

problema: calcular un promedio de valores en un archivo, buscar el valor mínimo y el valor

máximo en un archivo, y comparar cada valor con el promedio. Existen diferentes planteamientos

para la solución de este problema. En el siguiente capítulo examinaremos una técnica de solución

Page 14: Practica Final Casos Practicos(1)

de problemas completamente distinta; sin embargo, aquí basamos nuestra solución sobre el

hecho de que los valores en la lista son entre 0 y 100.

Usamos un array donde los índices tienen un contenido semántico: cada índice representa una

calificación. La analogía a mano es marcar 101 líneas en una hoja de papel y numerar (o etiquetar)

las líneas de 0 a 100. Cada número de línea representa una posible calificación. Conforme se lee

una calificación, se asienta el símbolo # en la línea cuyo número es el mismo que la calificación.

Después de registrar cada calificación de este modo, se realiza la suma de las calificaciones,

sumando los productos de cada calificación (número de línea) multiplicado por el número de

símbolos # en esta línea. El número de calificaciones se puede calcular ya durante la lectura o

cuando se calcula la suma.

Para calcular la calificación más baja, empiece viendo la línea número 0 y vea hacia delante; el

número de línea de la primera línea con un símbolo # es la calificación más baja. Para calcular la

calificación más alta, empiece a ver hacia atrás desde la línea número 100, y el número de línea de

la primera línea que contenga un símbolo # es la calificación más alta. Para determinar cuántas

calificaciones están arriba del promedio, empiece en la línea cuyo número es el promedio de

calificación más 1, y cuente los símbolos # en las líneas desde ahí hasta la línea 100. Para

determinar cuántas calificaciones están debajo del promedio, sume los símbolos # desde la línea

cuyo número es el promedio truncado hasta la línea 0.

El equivalente de la estructura de datos de su hoja de papel es un array de enteros declarado a ser

de un tamaño de 101. El índice es el número de línea;

El componente corresponde a donde se asientan los símbolos # (incremente el componente) cada

vez que ocurra la calificación que corresponde al índice.

ENTRADA

Archivo cuyo nombre es introducido desde el teclado y que contenga calificaciones del examen.

SALIDA

Page 15: Practica Final Casos Practicos(1)

Archivo cuyo nombre es introducido desde el teclado y que muestra las siguientes estadísticas,

correctamente etiquetada

Número de califi caciones Califi cación promedio Califi cación más baja Califi cación más alta Número de califi caciones arriba del promedio Número de califi caciones abajo del promedio

Podemos utilizar las mismas funciones para abrir archivos, que hemos usado en otros programas.

Sin embargo, es necesario cambiar el encabezado impreso en la salida.

Page 16: Practica Final Casos Practicos(1)
Page 17: Practica Final Casos Practicos(1)