Foros del Web » Soporte técnico » Ayuda General »

[SOLUCIONADO] Ejercicio de Archivos PASCAL

Estas en el tema de Ejercicio de Archivos PASCAL en el foro de Ayuda General en Foros del Web. Sinceramente me cuesta demasiado pascal. y tengo que rendir un final en unas horas y no encuentro ningun ejercicio completo y sin errores que me ...
  #1 (permalink)  
Antiguo 16/12/2015, 05:19
 
Fecha de Ingreso: diciembre-2015
Ubicación: Formosa
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Ejercicio de Archivos PASCAL

Sinceramente me cuesta demasiado pascal. y tengo que rendir un final en unas horas y no encuentro ningun ejercicio completo y sin errores que me pueda ayudar.

El ejercicio que tengo como modelo de final es el siguiente:

Desarrollar un programa en pascal que permita crear y cargar un archivo de alumos para llevar un control de las notas de sus examenes parcials de la asignatura programacion 1. La estructura de los registros sera la siguiente:Nro_DNI, Apellido, Nombre, NP1, NP2:

a) Mediante un procedimiento, al que debera llamar ListadoAprobados, mostrar por pantalla el listado de los alumnos que hayan regularizado la materia, para ello, el promedio de ambas notas dbera ser igual o mayor a 7.

b) Permitir, al usuario realizar la busqueda de alumnos ingresando el numero de DNI. Mostrar los datos encontrados, en caso contrario, el siguiente mensaje "No se encuentran datos del Alumno".


Muy importante. Todo esto se graba en un archivo de datos que despues se lee. Creo que se hacia con un archivo.dat pero no me acuerdo.

Necesito ayuda urgente, por favor...
Desde ya muchas gracias
Facundo
  #2 (permalink)  
Antiguo 16/12/2015, 05:26
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Ejercicio de Archivos PASCAL

Y cual es la duda en si? Que tienes escrito? Que te falla?
__________________
Aviso: No se resuelven dudas por MP!
  #3 (permalink)  
Antiguo 16/12/2015, 05:28
 
Fecha de Ingreso: diciembre-2015
Ubicación: Formosa
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Ejercicio de Archivos PASCAL

Necesitaria el codigo. Tengo desarrollado algunas cosas como la parte de cargar y abrir el archivo. Pero necesitaria todo el codigo completo para saber si esta bien o no...Por favor, si sos tan amable me lo podrias pasar ?
  #4 (permalink)  
Antiguo 16/12/2015, 05:30
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Ejercicio de Archivos PASCAL

Porque no lo hacemos al revés? En lugar de poner nosotros el código y que tu veas si está bien o no, pon tu el código y nosotros vemos por donde está fallando y te ayudamos a que lo puedas arreglar? ;)
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 16/12/2015, 05:37
 
Fecha de Ingreso: diciembre-2015
Ubicación: Formosa
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Ejercicio de Archivos PASCAL

{A ver si esto ayuda}

program archivos;
uses
crt;
type
regdatos = record
nombre : string[80];
cedula : longint;
notas : array[1..3] of real;
end;

var
f : file of regdatos;
dato : array[1..10] of regdatos;
tex : text;
medias : array[1..10] of real;
nom : array[1..10] of string[80];

procedure entradatos;
var
h, cont : integer;
tec : char;
begin
cont := 1;
repeat
clrscr;
write(' Entre Nombre : ');
readln(dato[cont].nombre);
write(' Entre Cedula : ');
readln(dato[cont].cedula);
write(' Entre notas 1 : ');
readln(dato[cont].notas[1]);
write(' Entre notas 2 : ');
readln(dato[cont].notas[2]);
writeln;
writeln(' Dese entrar mas datos [S/N] ');
repeat
tec := upcase(readkey);
until tec in ['S','N'];
if tec = 'N' then
tec := #27
else
cont := cont + 1;
until (cont > 10) or (tec = #27);
assign(f,'Temporal.dat');
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
rewrite(f);
h := 0;
repeat
seek(f,h);
write(f,dato[h + 1]);
h := h + 1;
until h > cont;
close(f);
end
else
begin
writeln(' El archivo existe desea Anularlo por este [S/N] ');
repeat
tec := upcase(readkey);
until tec in['S','N'];
if tec in['N'] then
begin
end
else
begin
rewrite(f);
h := 0;
repeat
seek(f,h);
write(f,dato[h + 1]);
h := h + 1;
until h > cont;
close(f);
end;
end;
end;


procedure pasaloatexto;
var
i, g : longint;
begin
assign(f,'Temporal.dat');
{$I-} reset(f); {$I+}
if ioresult <> 0 then
begin
writeln(' El Archivo No Existe Pulse [Enter] ');
readln;
exit;
end
else
begin
assign(tex,'temporal.txt');
rewrite(tex);
for i := 0 to filesize(f) - 2 do
begin
seek(f,i);
read(f,dato[i + 1]);
writeln(tex,dato[i + 1].nombre);
writeln(tex,dato[i + 1].cedula);
writeln(tex,dato[i + 1].notas[1]:3:2);
writeln(tex,dato[i + 1].notas[2]:3:2);
end;
close(f);
close(tex);
writeln('Archivo De Binario A Texto');
end;
end;

procedure sacamedia;
var
p, i : integer;
nomb : string[80];
cod : longint;
n1, n2 : real;
begin
assign(tex,'temporal.txt');
{$I-} reset(tex); {$I+}
if ioresult <> 0 then
begin
writeln(' Error El Archivo No Existe Pulse [Enter]');
readln;
exit;
end
else
begin
p := 1;
while not eof(tex) do
begin
read(tex,nomb);
read(tex,cod);
read(tex,n1);
read(tex,n2);
readln(tex);
nom[p] := nomb;
medias[p] := (n1 + n2) / 2;
writeln(nom[p],' La Media Es = ',medias[p]:3:2);
p := p + 1;
if p > 10 then
p := 10;
end;
close(tex);
end;
end;

procedure menu;
var
te : char;
begin
repeat
clrscr;
writeln('****** Menu General ******');
writeln;
writeln(' 1 = Entrada De Datos');
writeln(' 2 = Archivo Binario A Texto');
writeln(' 3 = Presenta Las Medias');
writeln(' 4 = Salir');
writeln;
writeln('<<<<< Elija Opcion >>>>>');
repeat
te := readkey;
until te in[#49,#50,#51,#52];
case te of
#49 : begin clrscr; entradatos; end;
#50 : begin clrscr; pasaloatexto; writeln(' Pulse [Enter]'); readln; end;
#51 : begin clrscr; sacamedia; readln; end;
end;
until te = #52;
end;


begin
menu;
end.




Esta mal ya que me base en un ejercicio similar. Pero no tengo idea de como hacer para hacer un buscador por DNI ni tampoco como guardar los datos en el archivo. Justamente por eso estoy pidiendo ayuda desde 0 ya que esos 2 conceptos son los basicos
  #6 (permalink)  
Antiguo 16/12/2015, 05:55
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Ejercicio de Archivos PASCAL

En la parte donde sacas la media, ya accedes al fichero y lo recorres para calcularla. Simplemente tendrías que comprobar si el dni que has leído del fichero es el mismo que has de encontrar. Si lo es pues muestra los datos del alumno por pantalla o lo que te pidan, y sino sigues leyendo del fichero.
__________________
Aviso: No se resuelven dudas por MP!
  #7 (permalink)  
Antiguo 16/12/2015, 06:13
 
Fecha de Ingreso: diciembre-2015
Ubicación: Formosa
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Ejercicio de Archivos PASCAL

Cita:
Iniciado por Malenko Ver Mensaje
En la parte donde sacas la media, ya accedes al fichero y lo recorres para calcularla. Simplemente tendrías que comprobar si el dni que has leído del fichero es el mismo que has de encontrar. Si lo es pues muestra los datos del alumno por pantalla o lo que te pidan, y sino sigues leyendo del fichero.
Okey...Voy a tratar de hacerlo. Y en el tema de mostrar solamente la lista de los aprobados...como hago esa parte? se que tengo que usar un if pero nose como implementarlo bien...
  #8 (permalink)  
Antiguo 16/12/2015, 06:19
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 10 meses
Puntos: 606
Respuesta: Ejercicio de Archivos PASCAL

Es también parecido. Lees una entrada del fichero y calculas el promedio. Si es superior a 7 entonces lo muestras por pantalla. Y así hasta el final del fichero...

En realidad el bucle principal, mejor o peor hecho, ya lo tienes. Ahora solo tienes que cambiar lo que haces cada vez que lees un registro de alumno.
__________________
Aviso: No se resuelven dudas por MP!
  #9 (permalink)  
Antiguo 16/12/2015, 08:27
 
Fecha de Ingreso: diciembre-2015
Ubicación: Formosa
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Ejercicio de Archivos PASCAL

Malenko. Se que estas ocupado y aprecio que me respondas los mensajes, pero queria saber si podias corregir mi codigo. Porque probe de varias formas y no me termina cerrando...
Si no podes o no queres esta todo bien, solo pedia como forma de ayuda.
Gracias
  #10 (permalink)  
Antiguo 20/12/2015, 16:49
 
Fecha de Ingreso: diciembre-2015
Ubicación: Formosa
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Ejercicio de Archivos PASCAL

Ya que nadie me ayudó y solo me trataron de explicar asi no mas pongo la solucion que la pedi en otro foro y fueron amables en responderme bien...
Nos vemos
gracias..supongo...



program alumnos;
uses
crt;
const
archivo = 'archivo.dat';
type
elalumnos = record
Nro_DNI : longint;
Apellido : string[80];
Nombre : string[80];
NP1,NP2 : real;
end;

var
f : file of elalumnos;
alum : elalumnos;



function existearchivo : boolean;
begin
assign(f,archivo);
{$I-} reset(f); {$I+}
if ioresult <> 0 then
existearchivo := false
else
begin
existearchivo := true;
end;
end;

procedure entradadatos;
var
tec : char;
begin
clrscr;
writeln(' ****** Entrada Datos Alumno Nuevo ******');
writeln;
write(' Ingrese el DNI (Sin Puntos) : ');
readln(alum.Nro_DNI);
write(' Ingrese Apellido : ');
readln(alum.Apellido);
write(' Ingrese Nombre : ');
readln(alum.Nombre);
write(' Ingrese Nota 1 : ');
readln(alum.NP1);
write(' Ingrese Nota 2 : ');
readln(alum.NP2);
writeln;
writeln(' Se Guardar Los Datos ');
writeln;
writeln(' Datos Correctos [S/N]');
repeat
tec := upcase(readkey);
until tec in['S','N'];
if tec = 'S' then
begin
if existearchivo = true then
begin
seek(f,filesize(f));
write(f,alum);
close(f);
end
else
begin
rewrite(f);
seek(f,0);
write(f,alum);
close(f);
end;
end;
end;

procedure ListadoAprobados;
var
k : longint;
begin
if existearchivo = true then
begin
writeln(' Los Aprobados Son: ');
writeln;
for k := 0 to filesize(f) - 1 do
begin
seek(f,k);
read(f,alum);
if ((alum.np1 + alum.np2) / 2) >= 7 then
writeln(' Aprobado : ',alum.nombre,' ',alum.apellido,' ',
((alum.np1 + alum.np2) / 2):0:2);
end;
close(f);
readkey;
end
else
begin
writeln(' No se encuentran datos del Alumno [Pulse Una Tecla]');
readkey;
end;
end;

procedure busqueda_alumno;
var
ddn : longint;
vus : longint;
encon : boolean;
begin
if existearchivo = true then
begin
writeln(' Buscar Un Alumno ');
writeln;
write(' Ingrese el DNI : ');
readln(ddn);
encon := false;
for vus := 0 to filesize(f) - 1 do
begin
seek(f,vus);
read(f,alum);
if alum.Nro_DNI = ddn then
begin
encon := true;
break;
end;
end;
if encon = true then
writeln('DNI: ',alum.Nro_DNI,' Nombre: ',alum.nombre,' ',alum.apellido,' Nota 1: ',
alum.np1:0:2,' Nota 2: ',alum.np2:0:2,' Promedio = ',
((alum.np1 + alum.np2) / 2):0:2)
else
writeln(' No se encuentran datos del Alumno ');
close(f);
writeln;
writeln(' [Pulse Una Tecla]');
readkey;
end
else
begin
writeln(' No se encuentran datos del Alumno [Pulse Una Tecla]');
readkey;
end;
end;


procedure menu;
var
sal : boolean;
tecla : char;
begin
sal := false;
repeat
clrscr;
writeln(' ***** Menu General *****');
writeln;
writeln(' 1 = Ingreseo de Alumno');
writeln(' 2 = Ver Aprobados');
writeln(' 3 = Mostrar Un Alumno');
writeln(' 4 = Salir');
writeln;
writeln(' >>> Elija Opcion <<<');
repeat
tecla := readkey;
until tecla in['1','2','3','4'];
clrscr;
case tecla of
'1' : entradadatos;
'2' : ListadoAprobados;
'3' : busqueda_alumno;
'4' : sal := true;
end;
until sal = true;
end;




begin
menu;
end.
  #11 (permalink)  
Antiguo 20/12/2015, 19:06
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 23 años
Puntos: 655
Respuesta: Ejercicio de Archivos PASCAL

Cita:
Iniciado por kofu92 Ver Mensaje
Ya que nadie me ayudó y solo me trataron de explicar asi no mas pongo la solucion que la pedi en otro foro y fueron amables en responderme bien...
Nos vemos
gracias..supongo...
Disculpa pero claramente se ve que es una tarea. Si te ayudaron en otro foro dándote toda la solución sin explicarte, eso no es ayuda.

¿Qué clase de profesional o qué clase de estudiante vas a hacer si te hacen todo? Eso es ayudar a la mediocridad. Aquí se te trató de orientar.

Lo siento mucho que lo veas así y si conociera a tu profesor o tutor, tenlo por seguro que le diría te hiciera una prueba aparte con lo que copiaron a ver si realmente sabes como solucionarlo.

No confundas, orientar con "denme todo hecho" porque vas por muy mal camino.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL

Etiquetas: ejercicio, pascal
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:16.