Necesito ayuda en pascal

Iniciado por W0lFy, 20 Mayo 2007, 19:54 PM

0 Miembros y 1 Visitante están viendo este tema.

W0lFy

Se desea realizar un programa que gestione los vehículos que pueden acceder a un
parking privado. El parking es muy grande y carece de plazas señalizadas, por lo que es
imposible conocer el número máximo de vehículos que pueden acceder. De cada
vehículo se almacena la siguiente información:
• Matrícula. (Formato 9999XXX, pe: 4321BXC)
• Marca.
• Modelo.
• Color. (Curiosamente en este garaje solo entran coches rojos, blancos, negros,
amarillos, azules y verdes).
• Año matriculación.
• DNI conductor habitual. (Hasta 8 números y un carácter alfabético)
Todos estos datos se encuentran almacenados durante el día en memoria del ordenador,
utilizando para ello estructuras de datos que carezcan de límite prefijado. Sin embargo
al finalizar la jornada, el parking cierra y todos los datos de vehículos autorizados a
acceder al parking y vehículos que se encuentran dentro del parking en el momento del
cierre son guardados en ficheros, q posteriormente se cargarán al abrir el parking el día
siguiente. El sistema se controla por medio de un menú que presenta las siguientes
opciones:
1. Alta vehículo. Permite añadir los datos de un nuevo vehículo de manera que a
partir de su alta ya puedan acceder al parking. Es preciso comprobar que la
matrícula del vehículo no esté dada de alta previamente. No existe un número
máximo de vehículos autorizados.
2. Baja vehículo. Permite dar de baja un vehículo de manera que ya no podrá
acceder al aparcamiento. Para ello se solicita la matrícula del vehículo y en caso
de existir se eliminan dichos datos. No se puede dar de baja un vehículo que se
encuentra dentro del aparcamiento.
3. Listado vehículos autorizados. Nos muestra los datos de los vehículos
autorizados ordenado por matrícula.
4. Listado vehículos aparcados. Nos muestra un listado con los datos de los
vehículos que se encuentran dentro del parking ordenados por matrícula.
5. Acceso vehículo. El sistema nos preguntará la matrícula y comprobará si está
autorizado a acceder. Si no se encuentra entre los vehículos autorizados, el
vehículo no podrá acceder al parking, en caso contrario nos presentará por
pantalla toda la información referente a ese vehículo de modo que el vigilante
pueda comprobar que coinciden el resto de datos. Una vez presentada esta
información, el sistema preguntará si se permite acceder a dicho vehículo al
parking. Hay que tener en cuenta que también es necesario guardar registro de
los datos de los vehículos que están dentro del parking.
6. Salida vehículo. Se solicitará la matrícula del vehículo. Se debe comprobar que
dicho vehículo esté tanto en la lista de vehículos autorizados a entrar como en el
registro de vehículos que están dentro del parking. Una vez que el vehículo
abandona el aparcamiento deberá eliminarse su entrada de la lista de vehículos
aparcados.




El caso es que no se me dan bien los punteros ni los archivos, alguien podria explicarme como hacerlo con punteros  y  ficheros??? no encuentro la soluciony siempre se me cuelga el turbo pascal,si pueden ayudarme no me vendria mal, porque ay algo que no entiendo de los punteros y me gustsaria saberlo. Un saludo Gracias
K@NuT0

Kpax

Bueno de cajon te digo que estaras gestionando tus procesos de CargarArchivo(),GrabarArchivo(),EliminarArchivo(),InsertarDato(),EliminarDato(),EditarDato(),etc
No le veo mucha complejidad a tu problema salvo la correcta gestion por puntero que hace mas eficiente la gestion de memoria de tu programa..

para Leer tienes varios porcedimientos tales com reset(),Rewrite(),write(),Assign(),close(),write(Archivo,dato)
read(archivo,dato)
saludos
En este mundo una de dos

W0lFy

muchas gracias kpax no me vendria mal que la gente me pusiese toda la informacion que tuviese, par aayudarme. Gracias saludos
K@NuT0

W0lFy

#3
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!
K@NuT0

webarevalo

#4
Tengo la práctica hecha. Ponte en contacto conmigo en [No emails por seguridad, si quieres compartir la info ponla aquí]

Hustler001

¿Alguien tiene la practica?