Autor
|
Tema: Ayuda con Programa Pascal (Leído 4,144 veces)
|
dennis094
Desconectado
Mensajes: 185
Embrace your dreams, protect your honor
|
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
Mensajes: 185
Embrace your dreams, protect your honor
|
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
Mensajes: 375
|
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
Mensajes: 185
Embrace your dreams, protect your honor
|
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
Mensajes: 185
Embrace your dreams, protect your honor
|
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: 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
Mensajes: 2
|
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
|
|
|
|
|
|