Programa en pascal . . .

Iniciado por nige, 19 Agosto 2014, 05:49 AM

0 Miembros y 1 Visitante están viendo este tema.

nige

Muy buenas noches a todos. Debo realizar un programa en pascal bajo las siguientes condiciones:

La Clínica "La Mejor", requiere un sistema automatizado para registrar a los pacientes que son atendidos, de tal modo, que se puedan obtener datos específicos tales como: las estadísticas en atención a menores de edad, adultos mayores, tanto femenino como masculino, los ingresos recaudados mensualmente según los tipos de patologías atendidas, entre otros. Es importante destacar, que se han clasificado estas patologías en tres categorías: las tipo A, las B y las tipo C; y se deberán tomar en cuenta las siguientes especificaciones, al momento de ser atendidas en la Clínica:

•   Los pacientes deberán cancelar Bs. 500 por ingreso a la clínica.
•   Deberán pagar diariamente:
o   Bs. 550 si son atendidos por patologías tipo A.
o   Bs. 430 si se trata de las tipo B.
o   Bs. 620 si es por las tipo C.

Dicho Sistema Automatizado, debe cumplir con las siguientes pautas:

1)   Presentar un menú de mantenimiento con las opciones siguientes:
a)   Incluir
b)   Consultar
c)   Modificar
d)   Eliminar
e)   Reporte
f)   Salida

2)   Debe registrar, con la opción Incluir, los siguientes datos:
a)   Cédula de Identidad.
b)   Apellidos y Nombres.
c)   Edad.
d)   Sexo.
e)   Días de hospitalización.
f)   Tipo de patologías (A/B/C).

3)   Debe ordenar el registro de pacientes por el número de la cédula de identidad.

4)   Mostrar por pantalla, cuando se consulte a un paciente por su número de cédula de identidad, toda la información referente al mismo.

5)   Mostrar por pantalla, en la opción Modificar y en la opción Eliminar, un mensaje de confirmación, donde el usuario ratifica la acción de modificar o eliminar datos en el sistema.

6)   Las opciones Consultar, Modificar y Eliminar, harán uso de los mismos datos registrados en la opción Incluir.

7)   La opción Reporte, debe generar un listado impreso que presente la siguiente información:
a)   Ingresos recaudados por patologías tipo A.
b)   Ingresos recaudados por patologías tipo B.
c)   Ingresos recaudados por patologías tipo C.
d)   Número de pacientes atendidos menores de 18 años.
e)   Número de pacientes atendidos mayores de 65 años sexo femenino.
f)   Número de pacientes atendidos mayores de 65 años sexo masculino.

Por ahora apenas he logrado esto y no he podido avanzar más:


program Clinica_LaMejorPM;
Uses dos,crt;
Const ID=500;
      A=550;
      B=430;
      C=620;
type
tRPersona=Record
Cedula:Longint;
Nombres:String[60];
Apellidos:String[60];
Edad:Integer;
Sexo:Char;
Dias:Integer;
Patologia:Char;
end;

Homer= Array [1..7] of tRPersona;

var
   opc:Integer;
   IrA:Integer;
   IrB:Integer;
   IrC:Integer;
   Dh:Integer;
   Nom:Homer;

Procedure Incluir(var Nom:Homer);
var i:Integer;

          begin

          with Nom[i] do

          begin

              writeln('-Paciente',i,'-');
              write('Cedula:');Readln(Cedula);
              write('Nombres:');Readln(Nombres);
              write('Apellidos:');Readln(Apellidos);
              write('Edad:');Readln(Edad);
              write('Sexo:');Readln(Sexo);
              write('Dias:');Readln(Dias);
              write('Patologia:');Readln(Patologia);
          end;
          readkey;
          clrscr;
          end;

Procedure Consultar(var Nom:Homer);
var i:Integer;

          begin

          with Nom[i] do

          begin

              writeln('-Paciente',i,'-');
              writeln('Cedula:',cedula);
              writeln('Nombres:',Nombres);
              writeln('Apellidos:',Apellidos);
              writeln('Edad:',Edad);
              writeln('Sexo:',Sexo);
              writeln('Dias:',Dias);
              writeln('Patologia:',Patologia);
          end;
          readkey;
          clrscr;
          end;

Procedure Menu;
var i:Integer;

begin
clrscr;
writeln('           //MENU//      ');
writeln;
writeln('------1.INCLUIR---------');
writeln;
writeln('------2.CONSULTAR-------');
writeln;
writeln('------3.MODIFICAR-------');
writeln;
writeln('------4.ELIMINAR--------');
writeln;
writeln('------5.REPORTE---------');
writeln;
writeln('------6.SALIR-----------');
writeln;
writeln('----------------------------------');
writeln;
write('Ingrese Opcion:');
Readln (opc);
end;

Procedure Salir;

begin
clrscr;
writeln('presione <ENTER> para salir');
end;

begin
clrscr;
       Repeat
       Menu;
       Case opc of
       1: Incluir(nom);
       2: Consultar(nom);
       6: Salir;
       else
       clrscr;
       writeln('Opcion es Incorrecta');
       readkey;
       end;
       Until opc in [6];
readkey;
end.


De antemano gracias por sus respuestas . . .

ZeroVzla

Buen día,

Veo que hablas de Bs, así que me suenas de Venezuela, serás del Rivero Palacio?...

Bueno la verdad vas bien, qué se te complica exactamente?, porque si es ordenar puedes leer sobre un método que se llama burbuja, es el más fácil de implementar. todo lo demás es trivial, así como hiciste el de consultar puedes hacer el eliminar solo que al encontrar el registro liberas el espacio o colocas un registro con los datos en blanco, más fácil el modificar, partes del mismo consultar y cuando lo encuentras vas pidiendo los datos para cada valor, los almacenas en un registro local del procedure y al final preguntas si los quiere modificar, si te dice que si seteas el registro en la posición del array que ya la tienes, sino simplemente no haces nada y dejas que corra el programa ya que el registro ese temporal quedaría eliminado. Con los reportes dependiendo del que te pidan puedes tener un contador y con un ciclo tal cual haces con el de consultar vas aumentando el valor del contador cuando se de la condición dada.

Saludos.

nige

Sí amigo, soy de Vzla., pero no del Rivero Palacio sino de otra Universidad.

El problema hasta ahora, y que no me ha dejado avanzar, es que no puedo guardar datos y después consultarlos, si quieres puedes compilarlo y probarlo para que puedas observar.

Gracias por tu respuesta.

ZeroVzla

Buen día,

Creo que el problema al guardar viene por la variable I, la declaras pero nunca la inicializas ni le das un valor, por lo que cuando le dices with Nom do pueden suceder dos cosas, si al momento de indicar que una variable es un entero en Pascal se coloca su valor en 0 (no recuerdo la verdad), entonces le estas diciendo que vas a guardar los datos en la posición 0 del array Nom, lo otro es que la variable se encuentre en null(vacío/en blanco/cero/nada/oblivion/xD) en cuyo caso estás apuntando a una dirección del array inexistente por lo que los datos no se guardan y creeeo que debería darte un error en la ejecución en ése punto. La última me parece que es tu escenario.

Lo que sería bueno hacer es primero buscar cuál es la posición libre en el arreglo donde vas a guardar el registro, lo que se puede hacer de dos manera, primera!: buscar posición por posición en el array Nom hasta que encuentres una vacía, con un ciclo for o while, el que te parezca mejor, te recomiendo for; segunda!: tener una variable global entera en la cual mantengas almacenada la posición libre, de manera que si escribes en la posición 0 la libre sería la 1, lo que quiere decir que tu variable quedaría con el valor 1, si luego escribes en la 1 tu variable la colocas en 2 y así vas. La segunda opción es mucho mejor ya que no tienes que recorrer el array cada vez que vayas a escribir y es la que deberías implementar, si te revisan el código tendrás un extra allí ;-).

Un detalle, no se por qué guardar la cédula con un longint... vamos que sabemos que la cédula tiene 8 caracteres (por los menos hasta unas décadas más), por lo que te sugiero que mejor la trates como una cadena de 8 caracteres en vez de un entero.

En la consulta tienes el mismo detalle con la variable I, para la consulta con la cédula no la estas pidiendo así que primero debes pedir la cédula, guardarla en una variable local del procedimiento para luego recorrer el array hasta que encuentres un registro con dicha cédula y prosigas a mostrar todos los datos del mismo.

En el planteamiento del problema te piden ordenar el array por cédula, por lo que de nuevo te recomiendo buscar el método de ordenamiento burbuja, el cual deberás implementar luego de ingresar un nuevo registro al array. Acá hay también varias maneras de hacerlo pero lo menos complicado es como te acabo de explicar, si lo quieres más refinado entonces sería al momento de tener todos los datos ir viendo en qué posición del array debería quedar el nuevo reistro y luego acomodar los demás (rodar) para que quede ordenado.

Sé que al principio parece chino todo pero enfócate en resolver el tema del entero I y verás que ya podrás avanzar.

Saludos.

nige

Muchas gracias amigo, me enfocaré en lo que me indicas.