Hola Taringa, hoy les traigo un programa en pascal que hicimos en clases...quizas alguno que estudia informatica le sirva este codigo que esta hecho enteramente en pascal ya que es el lenguaje que usamos para resolver los ejercisios, aclaro que a este codigo se lo puede pasar a cualquier otro lenguaje, lo que importa aca es la logica del programa, ya que muchos diran seguramente que pascal ya no se usa, pero la verdad es que para aprender esta bueno por la sintaxis que tiene y por eso se lo usa en la UNSa para eneseñar a programar....

Antes que nada voy a dejar el ejercisio propuesto para que se entienda lo que se hizo:

Ejercicio 4: Escribir un programa con un menú que permita:

a) Crear un archivo Alumnos.dat con información de los Alumnos de 1er año:
• DNI
• Nombre
• Domicilio
• Nota Introducción a la Matemática
• Nota Elementos de Computación
• Nota Introducción a la Programación
• Nota ALGA
• Nota Análisis Matemático I.

Donde la LU (libreta universitaria) es la clave de acceso y se corresponde con el nro
de registro.

b) Agregar los datos de un nuevo alumno.

c) Mostrar los datos del alumno con LU: 6.

d) Modificar el domicilio del alumno con DNI 31.123.456

e) Obtener el promedio de notas de todos los alumnos en Introducción a la
Programación.

f) Eliminar el registro del alumno con LU: 12.

g) Generar un archivo de nombre AlumnosProgramacion que contenga solo el DNI
Nombre y Domicilio de los alumnos que aprobaron Introducción a la Programación

h) Generar un archivo índice (Alumnos.Ind) para permitir el acceso directo al archivo
ALUMNOS por el campo DNI.

i) Una vez creados ambos archivos: (Alumnos.dat y Alumnos.ind)
• Modificar la Nota de ALGA del alumno con DNI = 17.522.312.
• Agregar los datos de un nuevo alumno.
• Eliminar los registros de los alumnos que no aprobaron todas las materias.



La verdad es que se zarparon con este ejercisio los profes!!!
En total el codigo de este programa tiene 360 y pico de lineas, si lo quieren ejecutar copien el codigo, pegen el codigo en dev-pascal, turbo pascal, free pascal o lo que usen y ejecuten (nota: primero hay que realizar la carga del archivo que sale en el menu)



program alumnos_unsa;
uses crt;
type
alumnos=record
dni:integer;
nombre:string;
domicilio:string;
notmatematicas:0..100;
notelementos:0..100;
notprogramacion:0..100;
notalga:0..100;
notanalisis:0..100;
end;
programacion=record
dni:integer;
nombre:string;
domicilio:string;
end;
indice=record
numreg:integer;
dni:integer;
end;

vector=array[1..1000] of indice;

archivo=file of alumnos; archivo2= file of programacion; archivo3=file of indice;
var
f:archivo; opc:integer; f2:archivo2; v:vector; f3:archivo3; n:integer;

procedure asignacion(var a:archivo);
begin
assign(a,'Alumnos.dat');
end;

procedure carga(var a:archivo);
var
reg:alumnos; op:char;
begin
rewrite(a);
repeat
clrscr;
writeln(' Ingrese los datos: ');
writeln(' ****************** ');
writeln;
writeln(' Ingrese DNI: ');readln(reg.dni);
writeln(' Ingrese nombre: ');readln(reg.nombre);
writeln(' Ingrese domicilio: ');readln(reg.domicilio);
writeln(' Ingrese nota Matematicas: ');readln(reg.notmatematicas);
writeln(' Ingrese nota Elementos: ');readln(reg.notelementos);
writeln(' Ingrese nota Programacion: ');readln(reg.notprogramacion);
writeln(' Ingrese nota ALGA: ');readln(reg.notalga);
writeln(' Ingrese nota Analisis: ');readln(reg.notanalisis);
writeln;
write(a,reg);
writeln(' Desea agregar mas datos? S/N ');
readln(op);
until upcase(op)='N';
close(a);
end;
procedure mostrar(var a:archivo);
var
reg:alumnos;
begin
reset(a);
while not eof(a) do
begin
read(a,reg);
writeln(' ****************** ');
writeln(' DNI: ',reg.dni);
writeln(' Nombre: ',reg.nombre);
writeln(' Domicilio: ',reg.domicilio);
writeln(' Nota Matematicas: ',reg.notmatematicas);
writeln(' Nota Elementos: ',reg.notelementos);
writeln(' Nota Programacion: ',reg.notprogramacion);
writeln(' Nota ALGA: ',reg.notalga);
writeln(' Nota Analisis ',reg.notanalisis);
writeln;
end;
close(a);
end;
procedure agregar(var a:archivo);
var reg:alumnos; pos:integer;
begin
reset(a);
pos:=filesize(a);
seek(a,(pos-1));
read(a,reg);
writeln(' Ingrese los datos: ');
writeln(' ****************** ');
writeln;
writeln(' Ingrese DNI: ');readln(reg.dni);
writeln(' Ingrese nombre: ');readln(reg.nombre);
writeln(' Ingrese domicilio: ');readln(reg.domicilio);
writeln(' Ingrese nota Matematicas: ');readln(reg.notmatematicas);
writeln(' Ingrese nota Elementos: ');readln(reg.notelementos);
writeln(' Ingrese nota Programacion: ');readln(reg.notprogramacion);
writeln(' Ingrese nota ALGA: ');readln(reg.notalga);
writeln(' Ingrese nota Analisis: ');readln(reg.notanalisis);
writeln;
write(a,reg);
close(a);
end;
procedure mostrar_libreta(var a:archivo);
var reg:alumnos; lu:integer;
begin
clrscr;
reset (a);
writeln(' Ingrese LU a buscar: '); readln(lu);
if (lu>=0) and (lu< filesize(a)) then
begin
seek(a,lu);
read(a, reg);
writeln(' ****************** ');
writeln(' DNI: ',reg.dni);
writeln(' Nombre: ',reg.nombre);
writeln(' Domicilio: ',reg.domicilio);
writeln(' Nota Matematicas: ',reg.notmatematicas);
writeln(' Nota Elementos: ',reg.notelementos);
writeln(' Nota Programacion: ',reg.notprogramacion);
writeln(' Nota ALGA: ',reg.notalga);
writeln(' Nota Analisis ',reg.notanalisis);
end
else
writeln(' No se encontro LU!!! ');

close(a);
end;
procedure modificar_dni(var a:archivo);
var reg:alumnos; dni,b,pos,dninuevo:integer;
begin
reset(a); b:=0;
writeln(' Ingrese DNI que quiere modificar: '); readln(dni);
while (not eof(a)) and (b=0) do
begin
read(a,reg);
if reg.dni=dni then
begin
pos:=filepos(a);
b:=1;
end
else
b:=0;
end;
if b=1 then
begin
writeln(' Ingrese el nuevo DNI: ');readln(dninuevo);
seek(a,(pos-1));
reg.dni:=dninuevo;
write(a,reg);
end
else
writeln(' No se encontro el DNI !!! ');
close(a);
end;

procedure promedio( var a:archivo);
var reg:alumnos; prom:real; c:integer;
begin
clrscr;
reset(a); prom:=0; c:=0;
while not eof(a) do
begin
read(a,reg);
prom:=prom+reg.notprogramacion;
c:=c+1;
end;
prom:=prom/c;
writeln(' La nota Promedio de todos los alumnos de Programacion es: ');
writeln(' ---- ');
writeln(' ',prom:2:2);
writeln(' ---- ');
writeln;
close(a);
end;
procedure asignacion2(var a2:archivo2); {asigno el nombre de archivo de alumnos programacion}
begin
assign(a2,'AlumnosProgramacion.dat');

end;

procedure archivoprogramacion(var a:archivo; var a2:archivo2);
var reg:alumnos;
reg2:programacion;
begin
reset (a); rewrite(a2);
while not eof(a) do
begin
read(a,reg);
if reg.notprogramacion>=40 then
begin

reg2.dni:=reg.dni;
reg2.nombre:=reg.nombre;
reg2.domicilio:=reg.domicilio;
write(a2,reg2);
end;
end;
close(a);
close(a2);
end;

procedure mostrar_archivo2(var a2:archivo2);
var reg2:programacion;
begin
reset (a2);
writeln(' El Archivo de Programacion contiene los siguientes datos: ');
while not eof(a2) do
begin
read(a2,reg2);writeln;
writeln(' DNI: ',reg2.dni);
writeln(' Nombre: ',reg2.nombre);
writeln(' Domicilio: ',reg2.domicilio);
writeln(' ********** ');
end;

close(a2);
end;
procedure bajafisica(var a:archivo);
var
reg:alumnos; dni:integer; g:archivo;
begin
writeln(' Ingrese N° DNI para dar de baja: '); readln(dni);
reset(a);
assign(g,'Copia.dat');
rewrite(g);
while not eof (a) do
begin
read(a,reg);
if reg.dni<>dni then
write(g,reg);
end;
close(a);
close(g);
erase(f);
rename(g,'Alumnos.dat');
end;

procedure bajalogica(var a:archivo);
var
reg:alumnos; nom:string; pos,b:integer;
begin
b:=0;
writeln(' Ingrese el nombre del Alumno: ');
readln(nom);
reset(a);
while (not eof (a)) and (b=0) do
begin
read(a,reg);
if nom=reg.nombre then
begin
pos:=filepos(a)-1;
b:=1;
end;
end;
if b=1 then
begin
seek(a,pos);
reg.nombre:='*';
write(a,reg);
end
else
writeln(' No fue encontrado el Alumno ',nom);
close(a);
end;
procedure vectorindice(var a:archivo; var v:vector; var n:integer);
var
reg:alumnos; i,k,j:integer;
aux:indice;
begin
reset(a); i:=0;
while not eof(a) do
begin
i:=i+1;
read(a,reg);
v.numreg:= filepos(a)-1;
v.dni:=reg.dni;
{cargo el vector indice}
end;
close(a);

for j:=1 to (i-1) do
begin
for k:=(j+1) to i do
begin
if v[j].dni > v[k].dni then
begin
aux:=v[j];
v[j]:=v[k];
v[k]:=aux;
end;
end;
end;
writeln(' el vector es: ');
for j:=1 to i do
begin
writeln(' numero registro: ',v[j].numreg);
writeln(' dni: ',v[j].dni);
end;
n:=i;
end;

procedure asignacionf3(var a3:archivo3);
begin
assign(a3,'alumnos.ind');
end;

procedure archivoindice(var v:vector; var a3:archivo3; n:integer);
var i:integer;
reg:indice;
begin
rewrite(a3);
for i:=1 to n do {cargo el nuevo archivo indice}
begin
reg.numreg:=v.numreg;
reg.dni:=v.dni;
write(a3,reg);
end;
close (a3);
reset(a3);
writeln(' El Archivo indice es: ');
while not eof (a3) do
begin
read(a3,reg);
writeln(' Numero de registro: ',reg.numreg); {muestro el archivo indice}
writeln(' Dni: ',reg.dni);
end;
close(a3);
end;
procedure modificarnotaALGA(var a3:archivo3; var a:archivo);
var
reg3:indice; reg:alumnos; pos,nota,dni:integer;
begin
writeln(' Ingrese DNI del Alumno: ');
readln(dni); pos:=0;
reset(a);reset(a3);
while not eof(a3) do
begin
read(a3,reg3);
if reg3.dni=dni then
pos:=reg3.numreg;
end;
if pos<>0 then
begin
writeln(' La posicon es: ',pos);
seek(a,pos);
read(a,reg);
writeln(' Ingrese nueva nota de ALGA '); readln(nota);
reg.notalga:=nota;
seek(a,pos);
write(a,reg);
end
else
writeln(' No existe el DNI !!! ');

close(a);
close(a3);
end;

procedure bajafisica_desaprobados(var a:archivo);
var
b:archivo; reg:alumnos;
begin
assign(b,'nuevo.dat'); rewrite(b);
reset(a);
while not eof(a) do
begin
read(a,reg);
if (reg.notmatematicas>=40) and (reg.notelementos>=40) and (reg.notprogramacion>=40) and(reg.notalga>=40) and (reg.notanalisis>=40)
then
write(b,reg);
end;
close(a);
close(b);
erase(a);
rename(b,'Alumnos.dat');
end;

begin
{programa principal con menu}
asignacion(f);
asignacion2(f2);
archivoprogramacion(f,f2);
vectorindice(f,v,n);
asignacionf3(f3);
repeat
writeln(' _________________ ');
writeln(' Seleccione Opcion:');
writeln(' _________________ ');
writeln(' 1: Cargar ');
writeln(' 2: Mostrar ');
writeln(' 3: Agregar Alumno ');
writeln(' 4: Buscar por LU ');
writeln(' 5: Modificar DNI ');
writeln(' 6: Promedio ');
writeln(' 7: Mostrar Archivo de Programacion ');
writeln(' 8: Baja Fisica ');
writeln(' 9: Baja Logica ');
writeln(' 10: Archivo Indice ');
writeln(' 11: Modificar nota de ALGA ');
writeln(' 12: Depurar Archivo (elimina los que desaprobaron todas las materias) ');
writeln(' 0: Salir ');
readln(opc);
case opc of
1:carga(f);
2:mostrar(f);
3:begin
agregar(f);
vectorindice(f,v,n);
archivoindice(v,f3,n);
end;
4:mostrar_libreta(f);
5:modificar_dni(f);
6:promedio(f);
7:mostrar_archivo2(f2);
8:bajafisica(f);
9:bajalogica(f);
10:archivoindice(v,f3,n);
11:modificarnotaALGA(f3,f);
12:begin
bajafisica_desaprobados(f);
vectorindice(f,v,n);
archivoindice(v,f3,n);
end;
end;
until opc=0;

end.


Espero que les haya gustado y que le sea util a los que estan con la materia programacion y sobre todo a los que estan usando un compilador en pascal....saludos gente y dejen su comentario!!!