Buenas gente, no he conseguido nada todavia, me gustaria hacer el programa partiendo de lo mas sencillo a lo mas complicado, lo primero que estoy haciendo es que me pida el alta de un vehiculo, y lo almacene en un registro que apunte a otro registro, pero no me sale bien y no entiendo el porque, aqui os dejo el codigo que puse, aber si me podeis hechar una manilla que ando un poco jodio,Gracias:
PROGRAM practica21(input,output);
CONST
LONGMATRICULA=7;
NUMCARMARCA=15;
NUMCARMODELO=20;
PRIMERANIO=1980;
ULTIMOANIO=2007;
LONGDNI=9;
TYPE
TMatricula=string[LONGMATRICULA];
TMarca=string[NUMCARMARCA];
TModelo=string[NUMCARMODELO];
TColor=(Rojo,Blanco,Negro,Amarillo,Azul,Verde);
TAnio=PRIMERANIO..ULTIMOANIO;
TDni=string[LONGDNI];
TVehiculo=RECORD
matricula:TMatricula;
marca:TMarca;
modelo:TModelo;
color:TColor;
año:TAnio;
dni:TDni;
END;
TPtrNodo=^TNodo;
TNodo=RECORD
vehiculo:TVehiculo;
sig:TPtrNodo;
END;
TArchivoVehiculos=FILE OF TVehiculo;
VAR
n:integer;
car:TPtrNodo;
PROCEDURE leerC(VAR coche:TVehiculo);
VAR
n:char;
cont:integer;
BEGIN
cont:=0;
REPEAT
writeln('De que color es tu coche?');
writeln('(1):Rojo,(2):Blanco,(3):Negro,(4):Amarillo,(5):Azul,(6):Verde');
readln(n);
WITH coche DO BEGIN
CASE n OF
'1':BEGIN color:=Rojo;cont:=0;END;
'2':BEGIN color:=Blanco;cont:=0;END;
'3':BEGIN color:=Negro;cont:=0;END;
'4':BEGIN color:=Amarillo;cont:=0;END;
'5':BEGIN color:=Azul;cont:=0;END;
'6':BEGIN color:=Verde;cont:=0;END
ELSE BEGIN
writeln('No has introducido un numero valido');cont:=1;END;
END;
END;
UNTIL cont=0;
END;
PROCEDURE leerV(VAR coche:TVehiculo);
BEGIN
WITH coche DO BEGIN
writeln('Dame tu matricula');
readln(matricula);
writeln('Dame tu marca');
readln(marca);
writeln('Dame tu modelo');
readln(modelo);
leerC(coche);
writeln('Dame tu año');
readln(año);
writeln('Dame tu dni');
readln(dni);
writeln;
END;{WITH}
END;
PROCEDURE menu;
BEGIN
writeln('1.-Alta vehiculo');
writeln('2.-Baja vehiculo');
writeln('3.-Listado vehiculos autorizados');
writeln('4.-Listado vehiculos aparcados');
writeln('5.-Acceso Vehiculo');
writeln('6.-Salida Vehiculo');
writeln('7.-Fin de dia');
writeln('8.-Carga inicio de dia');
writeln('9.-A¤adir Datos');
writeln;
END;
PROCEDURE altaC(VAR puntero:TPtrNodo);
VAR
aux:TPtrNodo;
BEGIN
new(aux);
WHILE puntero^.vehiculo.matricula<>'' DO
puntero:=puntero^.sig;
leerV(aux^.vehiculo);
aux^.sig:=NIL;
puntero^.sig:=aux;
END;
PROCEDURE escribirC(coche:TVehiculo);
BEGIN
WITH coche DO BEGIN
writeln(matricula);
writeln(marca);
writeln(modelo);
writeln(año);
writeln(dni);
writeln;
END;
END;
PROCEDURE sacarP(puntero:TPtrNodo);
VAR
aux:TPtrNodo;
BEGIN
new(aux);
aux^.sig:=puntero;
WHILE aux<>NIL DO BEGIN
escribirC(aux^.vehiculo);
readln;
aux:=aux^.sig;END;
dispose(aux);
readln
END;
BEGIN
car:=NIL;
REPEAT
new(car);
menu;
readln(n);
CASE n OF
1:BEGIN altaC(car);END;
2:BEGIN sacarP(car);END;
3:BEGIN END;
4:BEGIN END;
5:BEGIN END;
6:BEGIN END;
7:BEGIN END;
8:BEGIN END;
9:BEGIN END;
END;
UNTIL (n=10);
END.
"
utilizo el segundo caso para mostrar mi puntero haber si lo he conseguido, necesito ayuda porque la aplicacion se vuelve loca y no me saca lo que yo quiero,un Saludo!
PROGRAM practica21(input,output);
CONST
LONGMATRICULA=7;
NUMCARMARCA=15;
NUMCARMODELO=20;
PRIMERANIO=1980;
ULTIMOANIO=2007;
LONGDNI=9;
TYPE
TMatricula=string[LONGMATRICULA];
TMarca=string[NUMCARMARCA];
TModelo=string[NUMCARMODELO];
TColor=(Rojo,Blanco,Negro,Amarillo,Azul,Verde);
TAnio=PRIMERANIO..ULTIMOANIO;
TDni=string[LONGDNI];
TVehiculo=RECORD
matricula:TMatricula;
marca:TMarca;
modelo:TModelo;
color:TColor;
año:TAnio;
dni:TDni;
END;
TPtrNodo=^TNodo;
TNodo=RECORD
vehiculo:TVehiculo;
sig:TPtrNodo;
END;
TArchivoVehiculos=FILE OF TVehiculo;
VAR
n:integer;
car:TPtrNodo;
PROCEDURE leerC(VAR coche:TVehiculo);
VAR
n:char;
cont:integer;
BEGIN
cont:=0;
REPEAT
writeln('De que color es tu coche?');
writeln('(1):Rojo,(2):Blanco,(3):Negro,(4):Amarillo,(5):Azul,(6):Verde');
readln(n);
WITH coche DO BEGIN
CASE n OF
'1':BEGIN color:=Rojo;cont:=0;END;
'2':BEGIN color:=Blanco;cont:=0;END;
'3':BEGIN color:=Negro;cont:=0;END;
'4':BEGIN color:=Amarillo;cont:=0;END;
'5':BEGIN color:=Azul;cont:=0;END;
'6':BEGIN color:=Verde;cont:=0;END
ELSE BEGIN
writeln('No has introducido un numero valido');cont:=1;END;
END;
END;
UNTIL cont=0;
END;
PROCEDURE leerV(VAR coche:TVehiculo);
BEGIN
WITH coche DO BEGIN
writeln('Dame tu matricula');
readln(matricula);
writeln('Dame tu marca');
readln(marca);
writeln('Dame tu modelo');
readln(modelo);
leerC(coche);
writeln('Dame tu año');
readln(año);
writeln('Dame tu dni');
readln(dni);
writeln;
END;{WITH}
END;
PROCEDURE menu;
BEGIN
writeln('1.-Alta vehiculo');
writeln('2.-Baja vehiculo');
writeln('3.-Listado vehiculos autorizados');
writeln('4.-Listado vehiculos aparcados');
writeln('5.-Acceso Vehiculo');
writeln('6.-Salida Vehiculo');
writeln('7.-Fin de dia');
writeln('8.-Carga inicio de dia');
writeln('9.-A¤adir Datos');
writeln;
END;
PROCEDURE altaC(VAR puntero:TPtrNodo);
VAR
aux:TPtrNodo;
BEGIN
new(aux);
WHILE puntero^.vehiculo.matricula<>'' DO
puntero:=puntero^.sig;
leerV(aux^.vehiculo);
aux^.sig:=NIL;
puntero^.sig:=aux;
END;
PROCEDURE escribirC(coche:TVehiculo);
BEGIN
WITH coche DO BEGIN
writeln(matricula);
writeln(marca);
writeln(modelo);
writeln(año);
writeln(dni);
writeln;
END;
END;
PROCEDURE sacarP(puntero:TPtrNodo);
VAR
aux:TPtrNodo;
BEGIN
new(aux);
aux^.sig:=puntero;
WHILE aux<>NIL DO BEGIN
escribirC(aux^.vehiculo);
readln;
aux:=aux^.sig;END;
dispose(aux);
readln
END;
BEGIN
car:=NIL;
REPEAT
new(car);
menu;
readln(n);
CASE n OF
1:BEGIN altaC(car);END;
2:BEGIN sacarP(car);END;
3:BEGIN END;
4:BEGIN END;
5:BEGIN END;
6:BEGIN END;
7:BEGIN END;
8:BEGIN END;
9:BEGIN END;
END;
UNTIL (n=10);
END.
"
utilizo el segundo caso para mostrar mi puntero haber si lo he conseguido, necesito ayuda porque la aplicacion se vuelve loca y no me saca lo que yo quiero,un Saludo!