Pascal/Turbo Pascal - PROBLEMA CON CICLO FOR

 
Vista:

PROBLEMA CON CICLO FOR

Publicado por JUan (83 intervenciones) el 16/07/2007 21:35:22
Hola que tal, el programa compila y todo, pero el problema parece ser con el ciclo for cuando obtengo los datos, ademas la escritura/lectura del archivo la debo estar haciendo mal, la idea del programa es obtener los datos, y listar, y luego por ejemplo lo cierro, los datos que ingrese van a quedar en el archivo, cuando voy al programa por segunda vez a almacenar mas registros, quiero que me liste no solo los registros que ingrese en esa sesión, sino todos los anteriores también, cuando imprimo me imprime solo el ultimo registro que ingrese, a ver si me pueden decir en que me estoy equivocando (marquenme en que parte del codigo porque sino me pierdo un poco, soy bastante noob con esto), bueno eso era todo y les agradecería si me lo corrigen, un saludo.

program crearArchivo;
uses crt;
type
str30=string[30];
Ralu=record
nombre:str30;
edad:byte;
nota:byte;
end;
Arch=file of Ralu;

Procedure abrir(var Archivo:arch);

begin
assign(archivo,'alumnos.dat');
{$i-}
reset(archivo);
{$i-}
if ioresult<>0
then
rewrite(archivo)
else
reset(archivo)
end;

Procedure ObtenerDatos(var Archivo:arch;var reg:ralu;cant:word);
var i:word;

Begin
for i:=1 to cant do
writeln('ingrese nombre');
readln(Reg.nombre);
write(archivo,reg);
writeln('ingrese edad');
readln(reg.edad);
write(archivo,reg);
writeln('Ingrese nota');
readln(reg.nota);
write(archivo,reg);
clrscr
end;

Procedure listado(var archivo:arch;reg:ralu);
var j:word;
begin
clrscr;
While not eof(archivo) do
read(Archivo,reg);
writeln(j,'-');
writeln('Nombre: ',reg.nombre);
writeln('Edad :',reg.edad);
writeln('Nota :',reg.nota);
readln
end;

Var ArchAlu:arch;
RegAlu:Ralu;
Cantidad:word;

begin
abrir(Archalu);
writeln('Cantidad de registros a agregar: ');
readln(cantidad);
ObtenerDatos(archalu,regalu,cantidad);
listado(archalu,regalu);
readln
end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:PROBLEMA CON CICLO FOR

Publicado por Diego Romero (996 intervenciones) el 17/07/2007 02:45:44
En el procedimiento listado();, después de clrscr y antes del while pon un:

reset(archivo);

Eso hará que el puntero del archivo vuelva al principio del mismo. Eso es todo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA CON CICLO FOR

Publicado por juan (83 intervenciones) el 17/07/2007 05:07:59
Estas seguro que eso es todo??, mira que sigue con fallas, por ejemplo cuando pregunta "cantidad de registros a ingresar "le pongo 3, y inmediatamente me tira

ingrese nombre
ingrese nombre
ingrese nombre

o sea repite el ingrese nombre tantas veces como número de registros quiero agregar. y aparte solo me deja agregar 1, bueno si podes reeverlo te agradeceria

P.D:soy el que te pregunto lo de ptrN es lo mismo que PtrN? ajjajajaja nos volvemos a encontrar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA CON CICLO FOR

Publicado por Diego Romero (996 intervenciones) el 17/07/2007 17:18:40
Será porque el for solo ejecuta el Write();?...

Encierra entre begin .. end; todo lo que quieras que se ejecute dentro del for.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA CON CICLO FOR

Publicado por JUan (83 intervenciones) el 18/07/2007 04:58:42
que grande diego romero, el programa ya casi lo tengo hecho, un problema unicamente, es como que se graba en el archivo N veces, y lo lista N veces, entonces yo por ejemplo ingreso "registros a ingresar:3" luego inserto mi nombre "Juan" y me lo lista 3 veces, y encima con valores cualquiera, excepto la vez número 3, que sale con el valor que le ingrese, si podes compilarlo y verlo mejor a ver cual es el problema te agradecreía un montón, fuiste de muuucha ayuda, un saludo

program crearArchivo;
uses crt;
type
str30=string[30];
Ralu=record
nombre:str30;
edad:byte;
nota:byte;
end;
Arch=file of Ralu;

Procedure abrir(var Archivo:arch);

begin
assign(archivo,'alumnos.dat');
{$i-}
reset(archivo);
{$i+}
if ioresult<>0
then
rewrite(archivo)
else
reset(archivo)
end;

Procedure ObtenerDatos(var Archivo:arch;var reg:ralu;cant:word);
var i:word;

Begin
for i:=1 to cant do
begin
writeln('ingrese nombre');
readln(Reg.nombre);
write(archivo,reg);
writeln('ingrese edad');
readln(reg.edad);
write(archivo,reg);
writeln('Ingrese nota');
readln(reg.nota);
write(archivo,reg);
end;
clrscr
end;

Procedure listado(var archivo:arch;reg:ralu);

begin
clrscr;
reset(archivo);
While not eof(archivo) do
begin
read(Archivo,reg);
writeln('Nombre: ',reg.nombre);
writeln('Edad :',reg.edad);
writeln('Nota :',reg.nota);
readln
end
end;

Var ArchAlu:arch;
RegAlu:Ralu;
Cantidad:word;

begin
abrir(Archalu);
writeln('Cantidad de registros a agregar: ');
readln(cantidad);
ObtenerDatos(archalu,regalu,cantidad);
listado(archalu,regalu);
readln
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA CON CICLO FOR

Publicado por Diego Romero (996 intervenciones) el 18/07/2007 17:39:57
Veamos...

Presta atención al procedimiento ObtenerDatos(); allí haces...

writeln('ingrese nombre');
readln(Reg.nombre);
write(archivo,reg); { crea un registro y graba el nombre }
writeln('ingrese edad');
readln(reg.edad);
write(archivo,reg); { crea un registro *nuevo* y graba el nombre y la edad }
writeln('Ingrese nota');
readln(reg.nota);
write(archivo,reg); { crea un registro *nuevo* y graba el nombre, la edad y la nota }

Mmm... creo que no es eso lo que quieres hacer, antes bien creo que lo que quieres hacer es esto:

writeln('ingrese nombre');
readln(Reg.nombre);
writeln('ingrese edad');
readln(reg.edad);
writeln('Ingrese nota');
readln(reg.nota);
write(archivo,reg); { crea un registro *nuevo* y graba el nombre, la edad y la nota }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA CON CICLO FOR

Publicado por saulo (3 intervenciones) el 25/07/2007 18:11:44
pero yo quiero hacer una linea de esta forma:

b
b
b
b con un ciclo o varios
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PROBLEMA CON CICLO FOR

Publicado por saulo (3 intervenciones) el 25/07/2007 18:14:07
lo estoy ejecutando
for c:= 1 to 80 do
begin
gotoxy(c,2f); writeln('chr(2));
pero la linea sigue saliendo recta y quiero que salga
asi
w
w
w
w
en cambio sale
xxxxxx
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar