Programación General > Pascal

 Ayuda Para Un Principiante (tp 7.0)

(1/2) > >>

Brownstone:
Buen la cosa es q recien empiezo a programar, y en la facultad ya me mandan hacer un problema muy complejo  :(

Para q se den una idea les muestro el enunciado

Aca esta lo q tengo por ahora


--- Código: Text ---Program TPEstructuras;Uses    CRT, LSL;Type    tclave= string [14];    tclavecita= integer;    tfecha= string [10];    RegPas= Record          clave: tclavecita;          fecha: tfecha;          cod_op: char;    end;    RegV= Record          clave: tclave;          vuelo: string [6];          fecha: tfecha;          cap: integer;          dest: string [30];          pas: tlista of regPas;    end;    RegP= Record          fechaP: tfecha;          vueloP: string [6];          Dnip: integer;          Cod_op: char;    end; Var   rta: char;   factual: string;   LV: tlista of regV;   LP: tlista of regPas;   ArchV: file of regV;   ArchP: file of regP   Error: boolean; Procedure FechaActual(Var factual: string);Beginwriteln ('Ingrese la fecha de hoy (dd/mm/aaaa)');readln (factual);end; Procedure CListas(Var Error: boolean, Var LV: tlista of regV)Var   d: regV;   h: regPas;   xv: regV;   xp: regP;   exito: boolean; Beginopen(ArchV)read(ArchV, xv);Lcrear(lv);While not eof(ArchV) and not Lllena(LV) doBegin      d.clave:= xv.fecha+xv.vuelo      Lbuscarordenado(LV, d.clave, exito)      If exito then         writeln ('Vuelo repetido, error en la carga');      else          d.vuelo:= xv.vuelo;          d.fecha:= xv.fecha;          d.cap:= xv.capacidad;          d.dest:= xv.destino;          lcrear(d.pas)          Linsertarorden(lv, d, 'A');      end;      read(ArchP, xv);end;If not eof(ArchV) then   writeln ('Error de memoria')   Error:= true;else    open(ArchP);    read(ArchP, xp);    while not eof(ArchP) and not Lllena(lv.pas) do    Begin          d.clave:= xp.fecha+xp.vuelo;          Lbuscarordenado(lv, d.clave, exito);          if not exito then             writeln ('Error en datos, vuelo inexistente');          else              if (xp.cod_op='V') or (xp.cod_op='R') and (fdifdias(factual, xp.fecha))>2) then                 linfo(lv, d);                 h.clave:= xp.dnip;                 h.fecha:= xp.fechap;                 h.cod_op= xp.cod_op;                 linsertarordenado(d.pas, h, 'A');                 lmodificar(lv, d);              else                  linfo(lv, d);                  d.cap:= d.cap+1;                  lmodificar(lv, d);              end;          end;          read(ArchP, xp);          end;          if not eof(ArchP) then             writeln ('Error de memoria');             Error:= true;          end;          close(ArchP);          close(ArchP);    end; Procedure Reserva(Var lv: tlista of regV, factual: tfecha);Var   vuelo: string   fecha: tfecha;   dni: integer;   d: regV;   e: regPas; Beginwriteln ('Ingrese el vuelo');readln (vuelo);writeln ('Ingrese fecha de vuelo');readln (fecha);convertirtfecha(fecha, tfecha);if ((fdifdias(factual, fecha)>15) or (fdifdias(factual, fecha)<3)) then   writeln ('No puede reservar con menos de 15 dias de anticipaci¢n, ni a menos de 3 dias del vuelo');else    writeln ('Ingrese DNI del pasajero');    readln (dni);    d.clave:= vuelo+fecha;    lbuscarordenado(lv, d.clave, existe);                         if existe then                            linfo(lv, d);                            if lv.capacidad>0 then                               lbuscar_ordenado(lv, dni, existe);                               if not existe then                                  lv.capacidad:= lv.capacidad-1;                                  e.clave:= dni;                                  e.fecha:= fecha;                                  e.cod_op; r;                                  lmodificar(lv, e);                               else                                   writeln ('El pasajero ya ha reservado pasaje en este vuelo');                               end;                            else;                                 writeln ('No hay mas lugar en el vuelo solicitado');                            end;                            else                                writeln ('Codigo de vuelo o fecha incorrecta');                            end;end;end; Procedure venta(lp: tlista de regV, factual: tfecha);Var   d:regV;   e: regP; Beginwriteln ('Ingrese el vuelo');readln (vuelo);writeln ('Ingrese fecha de vuelo');readln (fecha);convertirtfecha(fecha, tfecha);if (fecha<factual) then   writeln ('La fecha de vuelo es anterior a la fecha actual');else    writeln ('Ingrese dni del pasajero');    readln (dni);    d.clave:= vuelo + fecha;    lbuscarodenado(lv, d.clave, existe);    if existe then       if lv.capacidad>0 then          l.info(lv, d);          lbuscarordenado(lv, dni, existe);          if not existe then             lv.capacidad:= lv.capacidad + 1             e.clave:= dni;             e.fecha:= fecha;             e.cod_op:= v;             lmodificar(lv, e);          else              writeln ('El pasajero ya tiene un ticket a su nombre en este vuelo');          end;       else           writeln ('No hay mas lugar en este vuelo');       end;    else        writeln ('Codigo de vuelo o fecha incorrecto');    end;end;end; Procedure alta(lv: tlista of regV, factual: tfecha);Var   cod_v; string;   fecha_v: string;   dest: string;   ok: boolean;   x: regV;   cap: integer; Beginwriteln('Ingrese codigo de vuelo');readln(cod_v);wrtieln('Ingrese fecha del vuelo');fconvertirtfecha(fecha_v, tfechavalida, ok);if ok then   if (fecha_v<factual) then      wrtieln ('La fecha de vuelo es invalida');   else       x.clave:= cod_v+fecha_v;       x.vuelo:=cod_v;       x.fecha:=fecha_v;       repeat             wrtieln ('Ingrese capacidad');             readln(cap);       until (cap>0);       x.cap:= cap;       writeln ('Ingrese destino');       readln(dest);       x.destino:= dest;       lcrear(lp);       linsertarordenado(lv, x, 'A');   end;else    wrtieln ('Fecha invalida');end;end; Procedure Baja(lv: tlista of regV);Var   vuelo: string;   fvuelo: string;   fecha: tfecha;   clave: tclave;   error: boolean;   existe: boolean; Beginwriteln('Ingrese numero de vuelo');readln (vuelo);Repeat      writeln ('Ingrese fecha de vuelo');      readln (fvuelo);      Fconvertirflegibletfecha(fvuelo, fecha, error);until ok;clave:= vuelo+fecha;Lbuscarorden(lv, clave, existe);if existe then   Lborraractual(lv)else    writeln ('Numero de vuelo o fecha incorrectos');end; Procedure ListaVuelo (Var lv: tlista of regV);Var   auxvuelos: regV, fechaL: string, ok: boolean; Beginif not Lvacia(lv) then   Lleerppio(lv);   Linfo(lv, auxvuelos);   writeln ('Vuelo', auxvuelos.vuelo,'Fecha' fconvertirfechalegible(auxvuelos.fecha, fechaL, ok);   wrtieln ('Capacidad', auxvuelos.cap, 'Destino', auxvuelos.destino);Lsig(lv, auxvuelo);while not Lfin(lv) do      Begin      writeln ('Vuelo', auxvuelos.vuelo,'Fecha' fconvertirfechalegible(auxvuelos.fecha, fechaL, ok);   wrtieln ('Capacidad', auxvuelos.cap, 'Destino', auxvuelos.destino);Lsig(lv, auxvuelo);end;end;end; Procedure ListaPasajeros(Var lv: tlista of regV);Var   vuelo: string;   fvuelo: string;   fecha: tfecha;   ok: boolean;   clave: tclave;   auxvuelos: regV;   auxpas: regPas;   exito: boolean; Beginwrtieln ('Ingrese el vuelo que desea listar');readln (vuelo);Repeat      writeln ('Ingrese fecha del vuelo');      readln (fvuelo);      FconvertirFlegibleatfecha(fvuelo, fecha, ok);until ok;clave:= vuelo+fecha;Lbuscarorden(lv, clave, exito);if exito then   Linfo(lv, auxvuelos);   if not Lvacia(auxvuelos.pas) then      Lleerppio(auxvuelos.pas);      Linfo(auxvuelos.pas, auxpas);      wrtieln ('Dni del pasajero', auxvuelos.clave);      wrtieln ('Codigo de operacion', auxvuelos.cod_op);      Lsig(auxvuelos.pas, auxpas);      while not Lfin(auxvuelos.pas) do      Begin           Linfo(auxvuelos.pas, auxpas);           wrtieln ('Dni del pasajero', auxvuelos.clave);           wrtieln ('Codigo de operacion', auxvuelos.cod_op);           Lsig(auxvuelos.pas, auxpas);      end;   end;else    writeln ('Nro de vuelo o fecha invalida');end;end; Beginclrscr;FechaActual(factual);Clistas(Error, LV);clrscr;Repeat      writeln ('1. Reserva');      writeln ('2. Pago');      writeln ('3. Alta');      writeln ('4. Baja');      writeln ('5. Lista de pasajeros');      writeln ('6. Lista de vuelos');      writeln ('0. Salir');      readln (rta);Until (rta='0') or (rta='1') or (rta='2') or (rta='3') or (rta='4') or (rta='5') or (rta='6');while (rta<>'0') doBegin      case rta of           '1': Reserva(lv, factual);           '2': Venta(lp, factual);           '3': Alta(lv, factual);           '4': Baja(lv);           '5': ListaVuelo(lv);           '6': ListaPasajeros(lv);      end;      readkey;      if (rta<>'0') then      Begin         clrscr;         Repeat               writeln ('1. Reserva');               writeln ('2. Pago');               writeln ('3. Alta');               writeln ('4. Baja');               writeln ('5. Lista de pasajeros');               writeln ('6. Lista de vuelos');               writeln ('0. Salir');               readln (rta);         Until (rta='0') or (rta='1') or (rta='2') or (rta='3') or (rta='4') or (rta='5') or (rta='6');      end;end;readkey;end. 
Seria un menu basico de opciones...
La estructura seria tener una lista dentro de lista para los vuelos y pasajeros... pero tengo varios errores q me tiran

asi q les pido 2 cosas nomas :)

1) No entiendo por q me tira este error


--- Código: Text ---pas: tlista of regPas; 
cuando introdusco cualquier linea de este caracter, pascal me tira error... algo como Error 85: ";" missing...
(Estoy seguro q es esa linea, por q hice programas mas simples, y apenas agrego esa linea deja de compilar y tira error)

2) Si tienen alguna sugerencia sobre como puedo encarar mejor... o simplemente corregirme si el procedimiento funciona o no (ahora no lo puedo probar por q no me compila :()

Agradezco cualquier ayuda!

Saiyan1:

--- Citar ---1) No entiendo por q me tira este error

CODE
pas: tlista of regPas;


cuando introdusco cualquier linea de este caracter, pascal me tira error... algo como Error 85: ";" missing...
--- Fin de la cita ---

1) Antes de postear, tendrías que haber leido que no se hacen tareas por estos foros...
2) Generalmente no contesto con esta mala predisposición, pero explico porque lo hago asi en esta oportunidad.


A mi entender no tenes ni idea de programar en PASCAL, o al menos de ese programa que estás mostrando, porque ni siquiera entendes el mensaje de error más simple que tiene TURBO PASCAL 7.0 que es el número 85, que simplemente es que te falta ingresar un ";".

Antes de postear acordate de leer las reglas, pero por sobre todo 2 cosas simples:
* no tareas
* preguntar algo específico que no sepas...

Todo bien loco, la gente de acá ayuda muchísimo, y a mi me jode que molestes con cosas que ni siquiera sabes que son...

Por ahi estoy equivocado... y si estoy equivocado y me lo probás.. pido las disculpas correspondientes... pero me parece que no.


Saludos

Enko:
yo lo que no logro entender es como alguien que "escribió" tantas lineas usando arrays, records, etc... tenga algun problema de tipo, "no me compila!!!"

Por lo menos deberías indicar donde sale el error así es más facil ayudarte. :rolleyes:
De lo contrario, se complica bastante, más para los que no siempre tienen compilador a mano.

Saludos

PD: el error se debe a que TurboPascal, con la configuracion default no deja trabajar con arrays abiertos. Estoy seguro que había una forma para permitir que haga eso, pero mis intentos de recordar y encontrar donde está esa opcion quedaron frustrados hace un par de meses cuando alguien tenía la misma duda.

Saiyan1:
CHAN!

... no me salen tan sutiles como a vos Enko.. :P

Brownstone:
Saiyan si te fijas no estoy pidiendo q me hagan la tarea... y si entiendo el mensaje de pascal ";"

El error de compilacion q mas me jode ahora como ya puse proviene de la linea
A: tlista of regV;... y es aca donde me tira el errior de ";"

La linea esta exactamente como la veo en el libro de Turbo Pascal 7.0, sin embargo me tira error... y se q esta mal por q hice otro programa con Record mas simple, y apenas agrego este tipo de variable tlista of reg me tira el mismo error

gracias Enko por respuesta, pero no entiendo q significa  :huh:

pd: yo no "escribi" tantas lineas... yo las escribi

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa