computacion 323-2

22

Click here to load reader

Upload: lisbeth-suarez

Post on 24-Dec-2015

11 views

Category:

Documents


0 download

DESCRIPTION

computacion una

TRANSCRIPT

SOLUCIN ANALITICA DEL PROBLEMA

La empresa de productos lcteos Vida y Salud, se ha dado la tarea de la elaboracin de un sistema automatizado donde se registren los datos resultantes de la aplicacin de las encuestas y que el mismo arroje los resultados obtenidos en forma clara y precisa.

DIALOGO

El problema consiste en elaborar un sistema automatizado donde se registren los datos resultantes de la aplicacin de las encuestas y que el mismo arroje los resultados obtenidos en forma clara y precisa.

Men mantenimiento (Para opciones de registro y actualizacin de los datos de cadaestudiante) con las opciones siguientes: Incluir, Consultar, Modificar, eliminar, Reporte y Salida.Datos de entrada: se toma como entrada.Descripcin del Producto. Total de Personas Encuestadas Siglas correspondientes al Producto. Estrato SocioEconmico. Edad. Sexo. Fecha de la Muestra Estadstica Cantidad de personas que eligen el producto.

Proceso: se validan los datos de entrada, de manera que solo se graban los datos validos segn el criterio preestablecido. Se diseara un programa en turbo pascal 7.0 para usando arreglos de registros, se graben y muestren los resultados requeridos.Datos de salida: men que permita incluir, consultar, modificar, eliminar, y salir del sistema.Un men que permita ordenar el tipo de registro de la muestra por tipo de producto.Men de opcin de reporte que genera un cuadro de resumen que presenta la siguiente informacin estadstica: Cantidad de personas pertenecientes al grupo: Edad Juvenil, Sexo Femenino, clase A. Cantidad de personas pertenecientes al grupo: Edad Juvenil, Sexo Masculino clase B. Cantidad de personas pertenecientes al grupo: Edad Juvenil, Sexo Femenino, clase C. Cantidad de personas pertenecientes al grupo: Adultos, Sexo Femenino, clase A. Cantidad de personas que prefieren al grupo: Adultos, Sexo Masculino, clase A. Cantidad de personas que prefieren al grupo: Adultos, Sexo Femenino, clase B. Cantidad de personas pertenecientes al grupo: Adultos, Sexo Masculino clase C. Cantidad de personas pertenecientes al grupo: Adultos, Sexo Femenino, clase C. Cantidad de personas pertenecientes al grupo: Adulto Mayor, Sexo Femenino, clase A. Cantidad de personas pertenecientes al grupo: Adulto Mayor, Sexo Masculino clase B. Cantidad de personas pertenecientes al grupo: Adulto Mayor, Sexo Femenino, clase C.

Etapa 2: especificaciones.

Pre-condiciones: tipo del Producto. Criterio de validez. No puede tener nmeros al principio y al final. Ej 1Leche Descremada (LD) y Leche Descremada. (LD)1.Cantidad de personas pertenecientes al grupo: Edad Juvenil, Sexo Femenino, clase A. criterio de validez: no puede ser letras. Cantidad de personas pertenecientes al grupo: Edad Juvenil, Sexo Masculino clase B. criterio de validez: no puede ser letras.Cantidad de personas pertenecientes al grupo: Edad Juvenil, Sexo Femenino, clase C. criterio de validez: no puede ser letras.Cantidad de personas pertenecientes al grupo: Adultos, Sexo Femenino, clase A. criterio de validez: no puede ser letras Cantidad de personas que prefieren al grupo: Adultos, Sexo Masculino, claseA. criterio de validez: no puede ser letras Cantidad de personas que prefieren al grupo: Adultos, Sexo Femenino, claseB. criterio de validez: no puede ser letrasCantidad de personas pertenecientes al grupo: Adultos, Sexo Masculino clase C.Criterio de validez: no puede ser letrasCantidad de personas pertenecientes al grupo: Adultos, Sexo Femenino, clase C. criterio de validez: no puede ser letras.Cantidad de personas pertenecientes al grupo: Adulto Mayor, SexoFemenino, clase A. criterio de validez: no puede ser letrasCantidad de personas pertenecientes al grupo: Adulto Mayor, SexoMasculino clase B. criterio de validez: no puede ser letrasCantidad de personas pertenecientes al grupo: Adulto Mayor, Sexo Femenino, clase C. criterio de validez: no puede ser letras.

Post-condiciones: Entradas datos vlidos. Solo los datos se graban. Entradas reporte estadstico. Aparecen un cuadro de resumen de la informacin estadstico.

Etapa 3: la particin. El problema global se dividir en base a las opciones del men principal y submens:

Ingresar Consultar Modificar Eliminar Salir del men principal Emitir reporte informacin estadstico. Cada una de estas opciones, incluyendo los mens, es diseada en base a los procedimientos, que responden al concepto de la programacin estructurada.1. Ingresar (por primera vez y subsiguientes): se leer la Descripcin del Producto que se ingresar luego total de personas encuestadas, siglas correspondientes al producto, extracto socio-econmico, edad, sexo, fecha de muestra y cantidad de personas que eligen el producto.2. Modifica (un tipo de producto): se pregunta producto desea modificar ingresando con precisin la descripcin del producto.3. Eliminar (borrar datos del sistema).4. Salida del sistema: el programa finaliza y se cierra la ventana respectiva, volviendo al men principal.5. Ordenar: el registro de la muestra por tipo de producto.6. Reporte estadstico: referente a la encuesta aplicada al producto leche descremada (LD).Etapa 4: definicin de abstraccionesEn turbo pascal 7.0 se utilizan los siguientes comandos:Lectura (read, readnl) y escritura(write, writeln) de datos.Limpieza de pantalla (clscr), ubicacin del cursor (gotoxy), leer una tecla cualquiera (readkey).Ciclos repetitivos como mientras_hacer (while..do).Ciclos selectivos como si _ entonces si-no (ifthenelse) se ejecuta si la condicin a que hace referencia el si es verdadero.

Etapa 6:

Esta etapa corresponde al objetivo 7.

Etapa 7: presentacin.Los comentarios se aaden entre llaves []. Esto se aade normalmente al seudocdigo del programa en su realizacin (objetivo 6 y 8).

Objetivo 6: programacin estructurada.Declaracin de datos y tipos.

Algoritmo en seudocdigo. Programa producto_lcteos.Comienzo [declaracin de las variables]Max: 200; Productos: array[1..4] of string[2] = ('LD','LE','YG','HE'); estratos: array['A'..'C'] of string[3] = ('CLA','CLB','CLC'); edades : array[1..3] of string[3] = ('EJ','AD','ADM'); sexo : array[1..2] of char = ('F','M');tipo datosreg = record total : integer; eligen : integer; fin; datosencuesta = record prod : string[2]; sigl : string[3]; estr : string[3]; sex : char; fech : string[12]; fin; regfinal = record datoencu : array[1..max] of datosencuesta; regd : datosreg; fin; var encut : regfinal; cont : integer;

Procedimiento incluir datos [validacin de datos] var [Declaracin de variables] tec:char; di,me: string [2; repetir borrar pantalla; escribir ('***** Datos Encuestado *****'); with da do begin escribir (elija el producto); escribir(1= leche descremada); escribir(2= leche entera); escribir(3= yogur); escribir(4= helados); repetir tec := readkey; until tec in['1','2','3','4']; case tec of '1' : prod := copy(Productos[1],1,2); '2' : prod := copy(Productos[2],1,2); '3' : prod := copy(Productos[3],1,2); '4' : prod := copy(Productos[4],1,2); fin borrar pantalla; escribir('***** Datos Encuestado *****'); escribir('>'); escribir('A = Clase Alta y Media Alta'); escribir('B = Clase Media Tpica'); escribir('C = Clase Media Baja'); repetir tec := upcase(readkey); until tec in['A','B','C']; case tec of 'A' : sigl := copy(estratos['A'],1,3); 'B' : sigl := copy(estratos['B'],1,3); 'C' : sigl := copy(estratos['C'],1,3); Fin; repetir escribir('***** Datos Encuestado *****'); escribir('>'); escribir('J = Juvenil'); escribir('A = Adulto'); escribir('M = Adulto Mayor'); repetir tec := upcase(readkey); until tec in['J','A','M']; case tec of 'J' : estr := copy(edades[1],1,2); 'A' : estr := copy(edades[2],1,2); 'M' : estr := copy(edades[3],1,3); fin; borrar pantalla; escribir('***** Datos Encuestado *****'); escribir('>'); escribir('M = Masculino'); escribir('F = Femenino'); repetir tec := upcase(readkey); until tec in['M','F']; case tec of 'M' : estr := copy(sexo[1],1,1); 'F' : estr := copy(sexo[2],1,1); fin; borrar pantalla; escribir('***** Datos Encuestado *****'); fin; encut.datoencu[cont] := da; cont := cont + 1; si cont > 200 entonce cont := 200; escribir('Desea Entrar Mas Encuestados [S/N]'); repetir tec := upcase(readkey); until tec in['S','N']; until tec = 'N'; encut.regd.total := cont - 1; clrscr; escribir('***** Datos Encuestado *****'); escribir('El Prodecto Encuestado Fue'); escribir('1 = Leche Descremada'); escribir('2 = Leche Entera'); escribir('3 = Yogur'); escribir('4 = Helados'); repetir tec := readkey; until tec in['1','2','3','4']; case tec of '1' : encut.regd.eligen := 1; '2' : encut.regd.eligen := 2; '3' : encut.regd.eligen := 3; '4' : encut.regd.eligen := 4; fin; fin;

procedimiento de ordenar;[ ordenar el registro de la muestra por tipo de producto]. var tempo : datosencuesta; h, t : integer; begin for t := 1 to cont - 1 do for h := cont - 1 downto t + 1 do si encut.datoencu[t].prod > encut.datoencu[h].prod entonce begin tempo := encut.datoencu[t]; encut.datoencu[t] := encut.datoencu[h]; encut.datoencu[h] := tempo; fin; fin;

procedimiento de consulta; var consu : string[2]; h : integer; te : char; begin borrar pantalla; ir_xy(10,2);escribir('*** Consultas ***'); ir_xy(2,4);escribir('>'); ir_xy(2,6);escribir(' 1 = LD'); ir_xy(2,7);escribir(' 2 = LE'); ir_xy(2,8);escribir(' 3 = YG'); ir_xy(2,9);escribir(' 4 = HE'); repetir te := readkey; until te in['1','2','3','4']; case te of '1' : consu := copy(Productos[1],1,2); '2' : consu := copy(Productos[2],1,2); '3' : consu := copy(Productos[3],1,2); '4' : consu := copy(Productos[4],1,2); fin; borrar; for h := 1 to cont - 1 do begin si encut.datoencu[h].prod = consu entonce begin escribir('*** Consultas ***'); escribir; escribir(encut.datoencu[h].prod); escribir(encut.datoencu[h].sigl); escribir(encut.datoencu[h].estr); escribir(encut.datoencu[h].sex); escribir(encut.datoencu[h].fech); escribir; escribir(' Pulse Una Tecla'); borrar pantalla; fin; fin; fin;

procedimiento modificar; var tes : char; nume, u, w : integer; modi : array[1..50] of integer; tomo : string[2]; cambi : string[12]; begin borrar pantalla; ir_xy(10,2);escribir('***** Modificar Datos *****'); ir_xy(2,4);escribir('Poducto 1 = LD'); ir_xy(2,5);escribir('Poducto 2 = LE'); ir_xy(2,6);escribir('Poducto 3 = YG'); ir_xy(2,7);escribir('Poducto 4 = HE'); ir_xy(2,9);escribir('>>> Elija Producto A Modificar '); repetir tes := readkey; until tes in['1','2','3','4','5']; borrar pantalla; case tes of '1' : begin ir_xy(2,4);escribir(encut.datoencu[ord(tes) - 48].prod); nume := 1; fin; '2' : begin ir_xy(2,4);escribir(encut.datoencu[ord(tes) - 48].sigl); nume := 2; fin; '3' : begin ir_xy(2,4);escribir(encut.datoencu[ord(tes) - 48].estr); nume := 3; fin; '4' : begin ir_xy(2,4);escribir(encut.datoencu[ord(tes) - 48].sex); nume := 4; fin; '5' : begin ir_xy(2,4);escribir(encut.datoencu[ord(tes) - 48].fech); nume := 5; fin; fin; with encut.datoencu[ord(tes) - 48] do begin si nume = 1 entonce begin ir_xy(2,3);escribir('>'); ir_xy(2,5);escribir ('1 = Leche Descremada'); ir_xy(2,6);escribir('2 = Leche Entera'); ir_xy(2,7);escribir ('3 = Yogur'); gotoxy(2,8);escribir('4 = Helados'); repetir tes := readkey; until tes in['1','2','3','4']; case tes of '1' : cambi := copy(Productos[1],1,2); '2' : cambi := copy(Productos[2],1,2); '3' : cambi := copy(Productos[3],1,2); '4' : cambi := copy(Productos[4],1,2); fin; cambi[0] := chr(2); fin; si nume = 2 entonce begin ir_xy(2,3);escribir('>'); ir_xy(2,5);escribir('A = Clase Alta y Media Alta'); ir_xy(2,6);escribir('B = Clase Media Tipica'); ir_xy(2,7);escribir('C = Clase Media Baja'); repetir tes := upcase(readkey); until tes in['A','B','C']; case tes of 'A' : cambi := copy(estratos['A'],1,3); 'B' : cambi := copy(estratos['B'],1,3); 'C' : cambi := copy(estratos['C'],1,3); fin; fin; si nume = 3 entonce begin ir_xy(2,3);escribir('>'); ir_xy(2,5);escribir('J = Juvenil'); ir_xy(2,6);escribir('A = Adulto'); ir_xy(2,7);escribir('M = Adulto Mayor'); repetir tes := upcase(readkey); until tes in['J','A','M']; case tes of 'J' : cambi := copy(edades[1],1,2); 'A' : cambi := copy(edades[2],1,2); 'M' : cambi := copy(edades[3],1,3); fin; cambi[0] := chr(3); fin; si nume = 4 entonce begin ir_xy(2,3);write('>'); ir_xy(2,5);write('M = Masculino'); ir_xy(2,6);write('F = Femenino'); repetir tes := upcase(readkey); until tes in['M','F']; case tes of 'M' : cambi := copy(sexo[1],1,1); 'F' : cambi := copy(sexo[2],1,1); fin; cambi[0] := chr(1); fin; si nume = 5 entonce begin ir_xy(2,3);write('>'); ir_xy(2,5);write('Dia/Mes/Ao : '); ir_xy(16,5);readln(cambi); fin; fin; ir_xy(10,9);write('Acepta El Cambio [S/N]'); repetir tes := upcase(readkey); until tes in['S','N']; si tes = 'S' entonce begin case nume of 1 : encut.datoencu[ord(tes) - 48].prod := copy(cambi,1,length(cambi)); 2 : encut.datoencu[ord(tes) - 48].sigl := copy(cambi,1,length(cambi)); 3 : encut.datoencu[ord(tes) - 48].estr := copy(cambi,1,length(cambi)); 4 : encut.datoencu[ord(tes) - 48].sex := cambi[1]; 5 : encut.datoencu[ord(tes) - 48].fech := copy(cambi,1,length(cambi)); fin; fin;fin;

procedure eliminar; var tes : char; p, z : integer; ele : string[2]; posi : array[1..200] of integer; tempo : regfinal; begin borrar pantalla; ir_xy(10,2);write('***** Eliminacion De Datos *****'); ir_xy(2,4);write('Poducto 1 = LD'); ir_xy(2,5);write('Poducto 2 = LE'); ir_xy(2,6);write('Poducto 3 = YG'); ir_xy(2,7);write('Poducto 4 = HE'); ir_xy(2,9);write('>>> Elija Producto A Eliminar '); readkey; fin;

procedimiento menu; {PROCEDIMIENTO DE MENU PRINCIPAL} var tecla : char; sal : boolean; begin sal := false; repeat borrar pantalla; textcolor(3); ir_xy(20,3); escribir('*** Menu General ***'); ir_xy(20,5); escribir('[I]ncluir'); ir_xy(20,6); escribir('[C]consultar'); ir_xy(20,7); escribir('[M]modificar'); ir_xy(20,8); escribir('[E]liminar'); ir_xy(20,9); escribir('[R]reportes'); ir_xy(20,10); escribir('[S]salir del Sistema'); textcolor(10); ir_xy(21,5); escribir('I'); ir_xy(21,6); escribir('C'); ir_xy(21,7); escribir('M'); ir_xy(21,8); escribir('E'); ir_xy(21,9); escrbir('R'); ir_xy(21,10); escribir('S'); textcolor(7); ir_xy(20,12); escribir('>'); repetir tecla := upcase(readkey); until tecla in['I','C','M','E','R','S']; borrar pantalla; case tecla of 'I' : begin incluir(encut.datoencu[cont]); ordenaarray; fin; 'C' : consulta; 'M' : modificar; 'E' : eliminar; 'R' : reporte; 'S' : sal := verdadero; fin; until sal = verdadero; fin;begin cont := 1; menu; fin.

Objetivo 7 prueba de robustez y verificacin

Recordemos los conceptos de correccin, robustez, amigabilidad.

Un programa es correcto si, para cualquier entrada que satisfagan la precondicin, termina generando una salida que satisface sus pos condiciones.

Se dice que un programa es robusto si rene las dos condiciones siguientes: Es correcto Para todas las entradas que no satisfacen las precondiciones, el programa termina y produce una salida que refleja el hecho de que ha ocurrido un error en la entrada.

Se dice que un programa es amigable si rene los requisitos siguientes: Es correcto Para todas que no se ajusten a las precondiciones, el programa indica el tipo de error de entrada y concede al usuario la oportunidad de corregirlo y continuar.Para verificar la correccin del programa, previamente se escribe en lenguaje PASCAL y con una tabla que estn dentro de las precondiciones. En este caso, se demuestra que el programa es correcto.En el enunciado del trabajo practico se muestra la necesidad de validar los datos de entrada, por lo tanto, en la elaboracin del seudocdigo se toma en cuenta los criterios de validez.El algoritmo demuestra ser correcto, debido a los rangos de validez numrica, es robusto, ya que detecta datos fuera del rango, y muestra una informacin al usuario que lo hace amigable.

Objetivo 8 programa codificado.

El lenguaje est escrito en lenguaje TURBO PASCAL versin 7.0 y se entrega grabado en un cd contentivo de los archivos necesarios para su correcto funcionamiento.