elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Ayuda con Programa Pascal
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con Programa Pascal  (Leído 4,144 veces)
dennis094

Desconectado Desconectado

Mensajes: 185


Embrace your dreams, protect your honor


Ver Perfil
Ayuda con Programa Pascal
« en: 8 Diciembre 2012, 16:22 pm »

Hola,
resulta que me han mandado hacer un programa en clase, pero la verdad es que tengo poca idea de como hacerlo. Abro este post para que si podeis me vayais diciendo como puedo ir haciendo el programa, NO BUSCO QUE ME DEIS EL PROGRAMA HECHO, simplemente consejos para poder hacerlo yo mismo.
El enunciado es el siguiente:

Los datos sobre los que se quiere almacenar la información son: Alumno (nombre y apellidos),
DNI, fecha de nacimiento, domicilio y teléfono. Además,
· Si el alumno se presenta por evaluación continua: fechas y notas de las PEC1 y PEC2 y las
PECL1 y PECL2, es decir fechas y calificaciones de los exámenes de teoría y de laboratorio.
· Y si el alumno se presenta a la evaluación final: fechas y notas de las PEF y PEFL. (Esta
opción es excluyente de la anterior, es decir, cada alumno se puede presentar por
evaluación continua o por final, pero no por ambas).
Las fechas y el DNI deben ser válidos. (Para simplificar, se considerará sólo DNI español con
dígitos + letra final de acuerdo al algoritmo de validación que debe averiguar el autor de la
práctica).
Hay que tener en cuenta en el desarrollo de la aplicación que no deben existir huecos en los
listados, así como que tienen que estar siempre ordenados, con esto se quiere decir que
después de que se lleve a cabo cualquier procedimiento, debe realizarse un chequeo para
ordenar la lista alfabéticamente por apellidos + nombre.
Se desea disponer de las siguientes funcionalidades que se mostrarán en un menú:
1) Alta. Ofrecerá la posibilidad de dar de alta a un alumno, con los datos necesarios y las
calificaciones de cada uno de sus exámenes. Antes de dar de alta hay que comprobar que
no existe ya en el listado, en caso de existir debe mostrar un mensaje indicándolo y dando
la información del alumno que ya estaba apuntado.
2) Baja. Mediante esta opción se llevará a cabo la eliminación del listado de alumnos
existentes, para lo cual hay que buscar en primer lugar al alumno por el primer apellido y si
existiera más de uno con el mismo apellido, por el segundo… (también cabría la posibilidad
de realizarlo por el DNI, se le tiene que preguntar al usuario si desea hacerlo por nombre y
apellidos o por DNI), si no lo encuentra mostrará un mensaje al respecto y si lo ha
encontrado pasará a eliminarlo y ordenar la lista, dado que no debe haber huecos. Si se
selecciona esta opción, lo primero que debe mostrarse es un listado de la información de
todos los alumnos, una línea por cada alumno y paginado si el total supera los que se
pueden mostrar en una pantalla.
3) Modificación. Esta opción permitirá modificar cualquier dato de cualquier alumno. La
forma de seleccionar el alumno que se quiere modificar será la misma que en el caso
anterior, por nombre y apellidos o por DNI e, igualmente, se mostrará un listado de todos
antes de preguntar cuál se desea modificar.
4) Listados. Aquí se mostrarán listados de los alumnos a partir de un menú en el que ofrecerá
varias opciones:
Departamento Ciencias de la Computación
Laboratorio de Fundamentos de la programación. Diciembre 2012 Profesor: Miguel Ángel Herranz 2
a) Listado completo ordenado por alumnos (apellidos + nombre)
b) Listado completo ordenado por notas finales. Estas notas finales se calcularán
como PEC1*20%+PECL1*5%+PEC2*30%+PECL2*45% para el caso de evaluación
continua y PEF*50%+PEFL*50% para el caso de evaluación final. (Esto no tiene por
qué ser así en la realidad, se trata sólo de un supuesto para esta práctica).
c) Listado de aprobados.
d) Listados de suspensos.
e) Volver al menú anterior.
5) Estadísticas. En este apartado se verán las estadísticas correspondientes a:
a) Porcentajes de presentados con respecto al número total de alumnos.
b) Porcentajes de aprobados con respecto al número de alumnos presentados
c) Tantos por ciento de alumnos que han sacado sobresaliente, notable, aprobado,
suspenso y no presentados.
6) Salir

Segun vaya programandolo ire subiendo trozos de mi codigo para que me podais ayudar, pero si teneis idea de como ir empezandolo os lo agradeceria.
Muchas gracias !
saludos !


En línea

dennis094

Desconectado Desconectado

Mensajes: 185


Embrace your dreams, protect your honor


Ver Perfil
Re: Ayuda con Programa Pascal
« Respuesta #1 en: 8 Diciembre 2012, 17:29 pm »

Veran, he ido empezando el codigo, y ya he encontrado mi primer problema:
para empezar estoy intentando crear un registro para poder meter los datos de los alumnos,y todo bien, menos el campo "DOMICILIO" que lo tengo declarado como string para que pueda introducir tanto letras como numeros (Ej: calle sanz nº 26).
Pero cuando ejecuto el programa, no me lee el domicilio, simplemente pasa a pedirme el telefono. Me pregunto por que no me lo lee.. aqui les dejo el codigo :)

PROGRAM PEC2;
uses crt;
TYPE
  Cadena50 = array[1..50] of Char;
  DatosAlumno=
    RECORD
      Alumno: Cadena50;
      DNI: integer ;
      FechaNacimiento: integer;
      Domicilio: string;
      Telefono: integer;
    end;
  VAR Datos: DatosAlumno;
PROCEDURE LeerDatos(VAR Datos:DatosAlumno); //Lee datos de Alumnos
begin
  write('Alumno: '); read(Datos.Alumno);
  write('DNI: '); read(Datos.DNI);
  write('Fecha de Nacimiento: '); read(Datos.FechaNacimiento);
  write('Domicilio: '); read(Datos.Domicilio);
  write('Telefono: '); read(Datos.Telefono);
  readln;
end;
PROCEDURE EscribirDatos(Datos:DatosAlumno); //Imprime datos de Alumnos
begin
  writeln('Alumno: ',Datos.Alumno);
  writeln('DNI: ',Datos.DNI);
  writeln('Fecha de Nacimiento: ',Datos.FechaNacimiento);
  writeln('Domicilio: ',Datos.Domicilio);
  writeln('Telefono: ',Datos.Telefono);
  readln;
 end;

PROCEDURE Menu;
begin
 writeln('1: ALTA');
 writeln('2: BAJA');
 writeln('3: MODIFICACION');
 writeln('4: LISTADOS');
 writeln('5: ESTADISTICAS');
 writeln('6: SALIR');
end;


BEGIN
  LeerDatos(Datos);
  clrscr;
  EscribirDatos(Datos);
  readln;

  END.   


En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Ayuda con Programa Pascal
« Respuesta #2 en: 8 Diciembre 2012, 18:23 pm »

Hace raaato que no uso Pascal.
Pero utiliza "readln" para leer los datos por favor. Quizás sea un problema con el buffer de entrada y el caracter de salto de línea :)
En línea

dennis094

Desconectado Desconectado

Mensajes: 185


Embrace your dreams, protect your honor


Ver Perfil
Re: Ayuda con Programa Pascal
« Respuesta #3 en: 8 Diciembre 2012, 19:36 pm »

No, eso da igual, simplemente lo he puesto sin el "ln" por estetica, asi lee y escribe el caracter en la misma linea, el problema es que el campo DOMICILIO quiero que pueda introducir tanto letras como numeros, pero no me lo lee =S
Gracias !
En línea

dennis094

Desconectado Desconectado

Mensajes: 185


Embrace your dreams, protect your honor


Ver Perfil
Re: Ayuda con Programa Pascal
« Respuesta #4 en: 9 Diciembre 2012, 17:37 pm »

El problema es:
quiero que al introducir yo un DNI, el programa me calcule si es un DNI correcto o no lo es, y si no lo es, que me lo vuelva a pedir hasta introducir uno correcto, para ello, he hecho que el programa (PROCEDURE COMPR_DNI) me compruebe el caracter nº 9 del DNI, y que vea si coincide con la letra que me tiene que dar el (PROCEDURE LETRADNI), si coincide el caracter 9 con la letra, que siga, y si no, que me diga que esta mal, y vuelva a pedir los datos.
"Para saber la letra del DNI se divide el numero del DNI entre 23 y el resto corresponde a una letra u otra"

**No se si sera un problema de sintaxis o de programacion, pero al compilar me dice que no existe la variable DNI del PROCEDURE LETRADNI**

aqui mi codigo:
Código:
PROGRAM PEC2;
uses crt;
CONST Num_Alumnos=2;
TYPE
Cadena50 = packed array[1..50] of Char;
DatosAlumno=
RECORD
Alumno: Cadena50;
DNI: string ;
FechaNacimiento: string;
Domicilio: string;
Telefono: integer;
end;
tDatosAlumno= array [1..Num_Alumnos] of DatosAlumno;

VAR Datos: tDatosAlumno;letra,i,opc:integer;

PROCEDURE LeerDatos(VAR Datos:tDatosAlumno); //Lee datos de Alumnos
VAR i:integer;
begin
for i:=1 to Num_Alumnos do
begin
with datos[i] do
begin
write('Alumno: '); readln(Alumno);
write('DNI: '); readln(DNI);
write('Fecha de Nacimiento (dd/mm/aaaa): '); readln(FechaNacimiento);
write('Domicilio: '); readln(Domicilio);
write('Telefono: '); readln(Telefono);
readln;
end;
end;
end;



PROCEDURE EscribirDatos(Datos:tDatosAlumno); //Imprime datos de Alumnos
VAR i:integer;
begin
for i:=1 to Num_Alumnos do
begin
with Datos[i] do
begin
writeln('Alumno: ',Alumno);
write('DNI: ',DNI);
writeln;
writeln('Fecha de Nacimiento: ',FechaNacimiento);
writeln('Domicilio: ',Domicilio);
writeln('Telefono: ',Telefono);
readln;
end;
end;
end;

PROCEDURE Menu;
begin
writeln('*Eliga una de las siguientes opciones*');
writeln;
writeln('1: ALTA');
writeln('2: BAJA');
writeln('3: MODIFICACION');
writeln('4: LISTADOS');
writeln('5: ESTADISTICAS');
writeln('6: SALIR');
end;

PROCEDURE LetraDNI(VAR Datos:tDatosAlumno;letra:integer); //Calcula la letra del DNI
CONST y=23;
Begin
  letra:= DNI mod y;
  CASE letra of
    0:write('T');
    1:write('R');
    2:write('W');
    3:write('A');
    4:write('G');
    5:write('M');
    6:write('Y');
    7:write('F');
    8:write('P');
    9:write('D');
    10:write('X');
    11:write('B');
    12:write('N');
    13:write('J');
    14:write('Z');
    15:write('S');
    16:write('Q');
    17:write('V');
    18:write('H');
    19:write('L');
    20:write('C');
    21:write('K');
    22:write('E');
end;
end;

PROCEDURE Compr_DNI(Datos:tDatosAlumno);
Begin
IF DNI[9]<> LetraDNI(Datos,letra) then
begin
  repeat
    readln(DNI);
  until
  DNI[9]=LetraDNI(Datos,letra);
end;
end;

PROCEDURE EligeMenu(opc:integer);
Begin
readln(opc);
IF opc=4 THEN LeerDatos(Datos)
ELSE writeln('**ERROR**');

end;

BEGIN
Menu;
EligeMenu(opc);
clrscr;
EscribirDatos(Datos);
readln;

END.         
« Última modificación: 10 Diciembre 2012, 23:39 pm por dennis094 » En línea

JrFx

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Ayuda con Programa Pascal
« Respuesta #5 en: 11 Octubre 2013, 19:20 pm »

hola buenas tardes necesito un gran ayuda necesito saber como hacer este programa q me piden

elaborar un programa que permita llevar el control de los examenes de una clinica para sus pacientes y para ello se requiere que manipule los siguientes archivos:

archivo 1: (secuencial): codigo paciente, resultado.
archivo 2: (secuencial):codigo paciente, codigo examen, datos personales.
archivo 3: (directo): codigo examen, datos del examen.

su programa debe estar en capacidad de agregar, modificar y eliminar datos en todos los archivos y ademas permitir consultar y elbarar 2 reportes uno con los datos de los pacientes y examenes medicos y otro que totalice los diferentes examenes por paciente y por examenes. debe tomar en cuenta que no debe existir registros repetidos para evitar confunciones y ademas los resultados de los examenes deben ser precisos para cada paciente ya que eso peude ser catastrofico para dichos pacientes y a su vez le crea un problema de credibilidad a la clinica.

necesito una gran ayuda de como hacer ese programa
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA CON PROGRAMA EN PASCAL, ES UN URGENTE
Ejercicios
juanf03 0 3,756 Último mensaje 15 Noviembre 2006, 01:25 am
por juanf03
programa pascal
Ejercicios
rudyairlines 1 4,991 Último mensaje 5 Enero 2008, 19:30 pm
por rudyairlines
Programa en pascal!!!!!!!!!!!!!!
Programación General
slipfr16 5 3,955 Último mensaje 4 Octubre 2010, 15:41 pm
por bolivianito
Programa en pascal . . .
Programación General
nige 4 3,410 Último mensaje 23 Agosto 2014, 05:39 am
por nige
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines