Está en la página 1de 15

TRABAJO PRCTICO

COMPUTACIN I (323)

Objetivo 5. Resolucin del problema planteado con la metodologa MAPS


Etapa 1 Dialogo
El problema consiste en elaborar un programa que permita al departamento de publicidad de la
empresa Dispubli, tener a tiempo y de manera rpida la informacin sobre las publicaciones que
son distribuidas por ellos.
Se deben de tomar en consideracin las siguientes especificaciones que dicta el ejercicio:
* Deben haber tres clasificaciones de publicaciones para el sistema, revistas, peridicos y libros
respectivamente
* De cada publicacin se debe guardar la informacin ya expuesta en el proyecto.
* El atributo tipos de de las publicaciones est dada por un formato definido en el planteamiento
del proyecto.
* Se debe ingresar por pantalla los datos correspondientes a cada una de las a las series de
publicaciones ya expuesta.
* Ordenar las publicaciones por cdigo, usando el mtodo burbuja.
* Generar un reporte impreso de las publicaciones atreves de la seleccin del cdigo de su
preferencia
* Generar un reporte impreso de las publicaciones atreves de la seleccin del tipo de publicacin
de su preferencia y presentar toda la informacin relativa a esta publicacin.
La entrada de los datos al programa se realizara siguiendo la secuencia del programa de la siguiente
forma:
 Se debe escoger en el men de opciones principal entre 5 opciones. Las primeras tres
corresponden al ingreso de los datos al sistema para cada tipo de publicacin. La cuarta
corresponde a la generacin del reporte por cdigo y la quinta a la generacin del reporte
por tipo de publicacin.
 Al escoger cualquiera de las primeras tres opciones se debern ingresar los datos de la
publicacin de forma secuencial hasta el ltimo. Y luego se saldr al men principal e
nuevo.
 El cdigo de cualquier publicacin debe ser mayor que cero y son de tipo entero. Los ttulos
son de tipo cadena de caracteres. Los precios son de tipo enteros. La cantidad son de tipo

entero, los tipos de publicacin, las fechas y los nombre de empresas son de tipo cadenas
de caracteres asi como tambin el idioma y el autor.
 Las salidas se dan solo en las opciones cuatro y cinco del men principal, donde segn el
cdigo o tipo de publicacin se generaran los resultados.

Etapa 2 Las especificaciones


Precondiciones
(codigo1, codigo2,, cdigon) ^ n > 0 ^ i {1,,n}: cdigo {0,,100000000}
(precio1, precio2,, precion) ^ n > 0 ^ i {1,,n}: precio {0,,100000000}
(cantidad1, cantidad2,, cantidadn) ^ n > 0 ^ i {1,,n}: cantidad {0,,100000000}
(numero1, numero2,, numeron) ^ n > 0 ^ i {1,,n}: numero {0,,100000000}
(titulo1, titulo2,,Titulon )^ n > 0 ^ i {1,,n}: titulo {secuencia de caracteres}
(tipo1, tipo2,, Tipon )^ n > 0 ^ i {1,,n}: tipo {secuencia de caracteres}
(empresa1, empresa2,, empresan )^ n > 0 ^ i {1,,n}: empresa {secuencia de caracteres}
(Fecha1, Fecha2,, Fechan )^ n > 0 ^ i {1,,n}: Fecha {secuencia de caracteres}
(Autor1, Autor2,, Autorn )^ n > 0 ^ i {1,,n}: Autor {secuencia de caracteres}
(idioma1, idioma2,, idioman )^ n > 0 ^ i {1,,n}: idioma {secuencia de caracteres}
(editorial1, editorial2,, editorialn )^ n > 0 ^ i {1,,n}: editorial {secuencia de caracteres}

Etapa 3 La Particin
El problema en cuestin se puede plantear en45 rutinas principales a saber:
a) Inicializar los arrays de registros: a travs de tres ciclos repetitivos for.
b) Presentar un men de opciones con los cinco requerimientos: para esto hacemos el uso
tpico de salida de pantalla de la librera crt write para desplegar las opciones y un
estructura de toma de decisin multiple.
c) Ingresar los datos de las publicaciones en un vector de registros y salir al men principal: de
forma secuencial.
d) Ordenar por mtodo burbuja: esto se hace a travs de dos ciclos for y una estructura de
seleccin simple.
e) Generar los reportes comparando el dato introducido por el teclado el la opcin de
reportes con cada dato de tipo o cdigo de cada posicin de cada vector.

Etapa 4 Definicin de abstracciones


Las usadas y muy comunes de pascal. Se usan contadores para aumentar el valor de una variable y
as, como su nombre lo indica, llevar un conteo de algn dato el problema. Estos se usan dentro de
un ciclo iterativo para poder incrementar o disminuir su valor. Procedimientos para leer, procesar
datos y/o escribir el resultado. Se Hace uso de sub programas para el mejor funcionamiento del
programa.
Etapa 5 Codificacin
La codificacin implica el traslado de la solucin planteada al lenguaje Pascal.

Etapa 6 Prueba y verificacin


Se han validado todas las entradas de datos as como las salidas de resultados, cumpliendo con las
precondiciones ya planteadas.

Objetivo 6. Algoritmo para la resolucin del problema

Para inicializar los vectores.


var
i:entero;
inicio
para i := 1 hasta limite hacer
vr[i].rev_codigo:=0;
para i := 1 hasta imite hacer
vp[i].per_codigo:=0;
para i := 1 hasta limite hacer
vl[i].lib_codigo:=0;
fin;

La presentacin inicial del programa.


var
i:entero;
inicio
borrapantalla;
para i:=1 hasta 80 hacer
inicio
posicion(i,1); escribe(chr(205)); {chr es una funcin que convierte un ordinal en un carcter Ascii}

posicion(i,24); escribe(chr(205));
fin;
para i:=1 hasta 24 hacer
inicio
posicion(1,i); escribe (chr(186));
posicion(80,i); escribe (chr(186));
fin;
posicion (1,1); escribir (chr(201));
posicion (80,1); escribir (chr(187));
posicion (1,24); escribir (chr(200));
posicion (80,24); escribir (chr(188));
posicion (25,2); escribir ('Universidad Nacional Abierta');
posicion (20,10); escribir ('S I S T E M A D E I N V E N T A R I O ');
posicion (21,12); escribir ('
D I S P U B L I . c a ');
escribir;
escribir;
escribir;
posicion (4,21); escribir ('Franclin ');
posicion (4,22); escribir ('C.I x.xxx.xxx');
posicion (65,22); escribir ('05-DIC-2009');
pausa;
fin;

Para el men principal.


var
opc:caracter;
incio
repetir
borrapantalla;
escribir ('
escribir;
escribir;
escribir ('
escribir ('
escribir ('
escribir ('
escribir ('
escribir ('
opc:= leerteclado;
en caso opc de

Elige una Opcion');

1 INGRESAR REVISTA');
2 INGRESAR PERIODICO');
3 INGRESAR LIBROS');
4 VER REPORTE POR CODIGO');
5 VER REPORTE POR TIPO DE PUBLICACION');
Esc PARA SALIR');

'1': procedimiento que llena datos de revistas;

'2': procedimiento que llena peridicos;


'3': procedimiento que llena datos de revistas;
'4': hacer reporte por cdigo;
'5': hacer reporte por tipo;
fin;
haste(opc =esc);
fin;

Para ingresarlos datos de forma secuencial y organizacin por mtodo burbuja.


var
i,j,fin :entero;
aux : revista; {variable de tipo registro revista}
inicio
i:=1;
fin:=0;
mientras (fin=0) hacer
inicio
si (vr[i].rev_codigo=0) entonces {para posicionarme al final del vector}
inicio
borrapantalla;
escribe('Ingrese el codigo de revista');{<<-----------DE AQUI}
lee (vr[i].rev_codigo);
{llenando un registro revista}
escribe ('Ingrese el titulo de revista');
lee (vr[i].rev_titulo);
escribe ('Ingrese el precio de la revista');
lee (vr[i].rev_precio);
escribe ('Ingrese la cantidad en existencia');
lee (vr[i].rev_cantidad);
escribe ('Ingrese el numero de revista');
lee (vr[i].rev_numero);
escribe ('Ingrese el tipo de categoria revista');
lee (vr[i].rev_tipo);
escribe ('Intgrese la fecha en que se publico');
lee (vr[i].rev_fech);
escribe ('Ingrese la empresa que lo publico');
lee(vr[i].rev_empresa); {<<------------------------------HASTA AQUI}
fin:=1;
fin;
i:=i+1;
fin;

para i := 1hasta limite-1 hacer {Metodo burbuja para ordenar por codigo}
para j := 1 hasta limite-i hacer
si (vr[j].rev_codigo > vr[j+1].rev_codigo) entonces
inicio
aux := vr[j];
vr[j] := vr[j+1];
vr[j+1] := aux;
fin;
fin;
Para hacer el reporte.
var
i,j:entero;
codigo:cadena de caracteres;
incio
borrapantalla;
escribe(' Ingrese un tipo de revista, periodico o libro bucarlo en el sistema');
lee(codigo);
borrapantalla;
para i:=1 hasta limite hacer
inicio
si(vr[i].rev_tipo = codigo) entonces
inicio
escribe ('
Titulo de Revista: ',vr[i].rev_titulo);
escribe ('
Numero: ',vr[i].rev_numero);
escribe ('
Fecha: ',vr[i].rev_fech);
escribe ('
Empresa: ',vr[i].rev_empresa);
escribe ('
Precio: ',vr[i].rev_precio);
escribe;
fin;
si (vp[i].per_tipo = codigo) entonces
inicio
escribe ('
Titulo Periodico: ',vp[i].per_titulo);
escribe ('
Fecha: ',vp[i].per_fech );
escribe ('
Empresa: ',vp[i].per_empresa);
escribe ('
Precio: ',vp[i].per_precio);
escribe;
fin;
si (vl[i].lib_tipo = codigo) entonces
inicio
escribe ('
Titulo Revista: ',vl[i].lib_titulo);
escribe ('
Autor : ',vl[i].lib_autor );

escribe ('
escribe ('
escribe ('
escribe;
fin;
fin;

Idioma: ',vl[i].lib_idioma );
Editorial: ',vl[i].lib_editorial );
Precio: ',vl[i].lib_precio);

stop;
fin;

Objetivo 7. Robustez
El men principal esta diseado dentro de una estructura repetitiva repeat seguido de una
estructura de seleccin simple para que admitiera solo las opciones fijadas en el men. En caso de
presionar cualquier otra entrada no especificada el programa hace caso omiso y dibuja el men
nuevamente.

Objetivo 8. Algoritmo en Pascal


program PROYECTO_DISPUBLI;
uses crt;
const
limite = 3;{limite de elementos de elementos en los vectores}
esc = #27; {constante que guarda el codigo de la tecla esc}
derecha = #77;{constante que guarda el codigo de la tecla flecha derecha}
izquierda = #75;{constante que guarda el codigo de la tecla flecha izquierda}

type
revista = record
{registro de revistas}
rev_codigo: integer; {campo del registro de tipo entero}
rev_titulo: string;
rev_precio: integer;
rev_cantidad:integer;
rev_Numero:integer;
rev_tipo: string;
rev_fech: string;
rev_empresa:string;
end;
periodico = record

{registro de periodico}

per_codigo:integer; {campos}
per_titulo:string;
per_precio:integer;
per_tipo : string;
per_cantidad: integer;
per_fech:string;
per_empresa :string;
end;
libro = record
{registros de libros}
lib_codigo:integer; {campos}
lib_titulo:string;
lib_precio:integer;
lib_tipo : string;
lib_cantidad: integer;
lib_autor: string;
lib_idioma:string;
lib_editorial:string;
end;

Vector1 = array [1..limite] of revista; {vector de tipo revistas}


Vector2 = array [1..limite] of periodico;{vector de tipo periodicos}
Vector3 = array [1..limite] of libro; {vector de tipo libro}
var
vr : Vector1; {variable revista}
vp : Vector2; {variable periodico}
vl : Vector3; {variable libro}
{subprogramas}

procedure inicializar; {inicializa todos los vectores en cero}


var i:integer;
begin
for i := 1 to limite do
vr[i].rev_codigo:=0;
for i := 1 to limite do
vp[i].per_codigo:=0;
for i := 1 to limite do
vl[i].lib_codigo:=0;
end;
procedure presentacion;

var
i:integer;
begin
clrscr;
textcolor(14);
for i:=1 to 80 do
begin
gotoxy(i,1); write(chr(205));
gotoxy(i,24); write(chr(205));
end;
for i:=1 to 24 do
begin
gotoxy(1,i); write(chr(186));
gotoxy(80,i); write(chr(186));
end;
gotoxy(1,1); write(chr(201));
gotoxy(80,1); write(chr(187));
gotoxy(1,24); write(chr(200));
gotoxy(80,24);write(chr(188));
gotoxy(25,2); writeln('Universidad Nacional Abierta');
gotoxy(20,10); writeln('S I S T E M A D E I N V E N T A R I O ');
gotoxy(21,12);writeln('
D I S P U B L I . c a ');
writeln;
writeln;
writeln;
gotoxy(4,21); writeln('Franclin ');
gotoxy(4,22); writeln('C.I x.xxx.xxx');
gotoxy(65,22); writeln('05-DIC-2009');
readkey;
textcolor(15);
end;

procedure llenar_revistas;
var
i,j,fin :integer;
aux : revista; {variable de tipo registro revista}
begin
i:=1;
fin:=0;
while (fin=0) do

begin
if (vr[i].rev_codigo=0) then {para posicionarme al final del vector}
begin
clrscr;
writeln('Ingrese el codigo de revista');{<<-----------DE AQUI}
readln(vr[i].rev_codigo);
{llenando un registro revista}
writeln('Ingrese el titulo de revista');
readln(vr[i].rev_titulo);
writeln('Ingrese el precio de la revista');
read(vr[i].rev_precio);
writeln('Ingrese la cantidad en existencia');
readln(vr[i].rev_cantidad);
writeln('Ingrese el numero de revista');
readln(vr[i].rev_numero);
writeln('Ingrese el tipo de categoria revista');
readln(vr[i].rev_tipo);
writeln('Intgrese la fecha en que se publico');
readln(vr[i].rev_fech);
writeln('Ingrese la empresa que lo publico');
readln(vr[i].rev_empresa); {<<------------------------------HASTA AQUI}
fin:=1;
end;
i:=i+1;
end;
for i := 1 to limite-1 do {Metodo burbuja para ordenar por codigo}
for j := 1 to limite-i do
if (vr[j].rev_codigo > vr[j+1].rev_codigo) then
begin
aux := vr[j];
vr[j] := vr[j+1];
vr[j+1] := aux;
end;
end;
procedure llenar_periodicos;
var
i,j,fin :integer;
aux : periodico;
begin
i:=1;
fin:=0;
while(fin=0) do
begin
if vp[i].per_codigo=0 then

begin
clrscr;
writeln('Ingrese el codigo de periodico');
readln(vp[i].per_codigo);
writeln('Ingrese el titulo de periodico');
readln(vp[i].per_titulo);
writeln('Ingrese el tipo de categoria del periodico');
readln(vp[i].per_tipo);
writeln('Ingrese el precio del periodico');
read(vp[i].per_precio);
writeln('Ingrese la cantidad disponible');
readln(vp[i].per_cantidad);
writeln('Ingrese la fecha en que se publico');
readln(vp[i].per_fech);
writeln('Ingrese la empresa que lo publico');
readln(vp[i].per_empresa);
fin:=1;
end;
i:=i+1;
end;
for i := 1 to limite-1 do
for j := 1 to limite-i do
if (vp[j].per_codigo > vp[j+1].per_codigo) then
begin
aux := vp[j];
vp[j] := vp[j+1];
vp[j+1] := aux;
end;
end;
procedure llenar_libros;
var
i,j,fin :integer;
aux:libro;
begin
i:=1;
fin:=0;
while(fin=0) do
begin
if vl[i].lib_codigo=0 then
begin
clrscr;
writeln('Ingrese el codigo del libro');
readln(vl[i].lib_codigo);

writeln('Ingrese el titulo del libro');


readln(vl[i].lib_titulo);
writeln('Ingrese el precio del libro');
readln(vl[i].lib_precio);
writeln('Ingrese el tipo de categoria del libro');
readln(vl[i].lib_tipo);
writeln('Ingrese la cantidad de libros disponible');
readln(vl[i].lib_cantidad);
writeln('Ingrese el autor del libro');
readln(vl[i].lib_autor);
writeln('Ingrese el idioma del libro');
readln(vl[i].lib_idioma);
writeln('Ingrese la editorial');
readln(vl[i].lib_editorial);
fin:=1;
end;
i:=i+1;
end;
for i := 1 to limite-1 do
for j := 1 to limite-i do
if (vl[j].lib_codigo > vl[j+1].lib_codigo) then
begin
aux := vl[j];
vl[j] := vl[j+1];
vl[j+1] := aux;
end;
end;
procedure reporteportipo;
var
i,j:integer;
codigo:string;
begin
clrscr;
writeln(' Ingrese un tipo de revista, periodico o libro bucarlo en el sistema');
readln(codigo);
clrscr;
for i:=1 to limite do
begin
if (vr[i].rev_tipo = codigo) then
begin

writeln('
Titulo de Revista: ',vr[i].rev_titulo);
writeln('
Numero: ',vr[i].rev_numero);
writeln('
Fecha: ',vr[i].rev_fech);
writeln('
Empresa: ',vr[i].rev_empresa);
writeln('
Precio: ',vr[i].rev_precio);
writeln;
end;
if (vp[i].per_tipo = codigo) then
begin
writeln('
Titulo Periodico: ',vp[i].per_titulo);
writeln('
Fecha: ',vp[i].per_fech );
writeln('
Empresa: ',vp[i].per_empresa);
writeln('
Precio: ',vp[i].per_precio);
writeln;
end;
if (vl[i].lib_tipo = codigo) then
begin
writeln('
Titulo Revista: ',vl[i].lib_titulo);
writeln('
Autor : ',vl[i].lib_autor );
writeln('
Idioma: ',vl[i].lib_idioma );
writeln('
Editorial: ',vl[i].lib_editorial );
writeln('
Precio: ',vl[i].lib_precio);
writeln;
end;
end;
readkey;
end;
procedure reporteporcodigo;
var
i,j:integer;
codigo:integer;
begin
clrscr;
writeln(' Ingrese un Codigo de revista, periodico o libro bucarlo en el sistema');
readln(codigo);
clrscr;
for i:=1 to limite do
begin
if (vr[i].rev_codigo = codigo) then
begin
writeln('
Titulo de Revista: ',vr[i].rev_titulo);

writeln('
Numero: ',vr[i].rev_numero);
writeln('
Fecha: ',vr[i].rev_fech);
writeln('
Empresa: ',vr[i].rev_empresa);
writeln('
Precio: ',vr[i].rev_precio);
writeln;
end;
if (vp[i].per_codigo = codigo) then
begin
writeln('
Titulo Periodico: ',vp[i].per_titulo);
writeln('
Fecha: ',vp[i].per_fech );
writeln('
Empresa: ',vp[i].per_empresa);
writeln('
Precio: ',vp[i].per_precio);
writeln;
end;
if (vl[i].lib_codigo = codigo) then
begin
writeln('
Titulo Revista: ',vl[i].lib_titulo);
writeln('
Autor : ',vl[i].lib_autor );
writeln('
Idioma: ',vl[i].lib_idioma );
writeln('
Editorial: ',vl[i].lib_editorial );
writeln('
Precio: ',vl[i].lib_precio);
writeln;
end;
end;
readkey;
end;

procedure menu_principal;
var
opc:char;
begin
repeat
clrscr;
writeln('
Elige una Opcion');
writeln;
writeln;
writeln('
1 INGRESAR REVISTA');
writeln('
2 INGRESAR PERIODICO');
writeln('
3 INGRESAR LIBROS');
writeln('
4 VER REPORTE POR CODIGO');
writeln('
5 VER REPORTE POR TIPO DE PUBLICACION');
writeln('
Esc PARA SALIR');
opc:= readkey;

case opc of
'1':llenar_revistas;
'2':llenar_periodicos;
'3':llenar_libros;
'4':reporteporcodigo;
'5':reporteportipo;
end;
until(opc =esc);
end;

BEGIN
inicializar;
presentacion;
menu_principal;
END.