• Viernes 29 de Marzo de 2024, 12:49

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - Brownstone

Páginas: [1]
1
Pascal / Ayuda Para Un Principiante (tp 7.0)
« en: Viernes 10 de Noviembre de 2006, 03:27 »
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
  1. Program TPEstructuras;
  2. Uses
  3.     CRT, LSL;
  4. Type
  5.     tclave= string [14];
  6.     tclavecita= integer;
  7.     tfecha= string [10];
  8.     RegPas= Record
  9.           clave: tclavecita;
  10.           fecha: tfecha;
  11.           cod_op: char;
  12.     end;
  13.     RegV= Record
  14.           clave: tclave;
  15.           vuelo: string [6];
  16.           fecha: tfecha;
  17.           cap: integer;
  18.           dest: string [30];
  19.           pas: tlista of regPas;
  20.     end;
  21.     RegP= Record
  22.           fechaP: tfecha;
  23.           vueloP: string [6];
  24.           Dnip: integer;
  25.           Cod_op: char;
  26.     end;
  27.  
  28. Var
  29.    rta: char;
  30.    factual: string;
  31.    LV: tlista of regV;
  32.    LP: tlista of regPas;
  33.    ArchV: file of regV;
  34.    ArchP: file of regP
  35.    Error: boolean;
  36.  
  37. Procedure FechaActual(Var factual: string);
  38. Begin
  39. writeln ('Ingrese la fecha de hoy (dd/mm/aaaa)');
  40. readln (factual);
  41. end;
  42.  
  43. Procedure CListas(Var Error: boolean, Var LV: tlista of regV)
  44. Var
  45.    d: regV;
  46.    h: regPas;
  47.    xv: regV;
  48.    xp: regP;
  49.    exito: boolean;
  50.  
  51. Begin
  52. open(ArchV)
  53. read(ArchV, xv);
  54. Lcrear(lv);
  55. While not eof(ArchV) and not Lllena(LV) do
  56. Begin
  57.       d.clave:= xv.fecha+xv.vuelo
  58.       Lbuscarordenado(LV, d.clave, exito)
  59.       If exito then
  60.          writeln ('Vuelo repetido, error en la carga');
  61.       else
  62.           d.vuelo:= xv.vuelo;
  63.           d.fecha:= xv.fecha;
  64.           d.cap:= xv.capacidad;
  65.           d.dest:= xv.destino;
  66.           lcrear(d.pas)
  67.           Linsertarorden(lv, d, 'A');
  68.       end;
  69.       read(ArchP, xv);
  70. end;
  71. If not eof(ArchV) then
  72.    writeln ('Error de memoria')
  73.    Error:= true;
  74. else
  75.     open(ArchP);
  76.     read(ArchP, xp);
  77.     while not eof(ArchP) and not Lllena(lv.pas) do
  78.     Begin
  79.           d.clave:= xp.fecha+xp.vuelo;
  80.           Lbuscarordenado(lv, d.clave, exito);
  81.           if not exito then
  82.              writeln ('Error en datos, vuelo inexistente');
  83.           else
  84.               if (xp.cod_op='V') or (xp.cod_op='R') and (fdifdias(factual, xp.fecha))>2) then
  85.                  linfo(lv, d);
  86.                  h.clave:= xp.dnip;
  87.                  h.fecha:= xp.fechap;
  88.                  h.cod_op= xp.cod_op;
  89.                  linsertarordenado(d.pas, h, 'A');
  90.                  lmodificar(lv, d);
  91.               else
  92.                   linfo(lv, d);
  93.                   d.cap:= d.cap+1;
  94.                   lmodificar(lv, d);
  95.               end;
  96.           end;
  97.           read(ArchP, xp);
  98.           end;
  99.           if not eof(ArchP) then
  100.              writeln ('Error de memoria');
  101.              Error:= true;
  102.           end;
  103.           close(ArchP);
  104.           close(ArchP);
  105.     end;
  106.  
  107. Procedure Reserva(Var lv: tlista of regV, factual: tfecha);
  108. Var
  109.    vuelo: string
  110.    fecha: tfecha;
  111.    dni: integer;
  112.    d: regV;
  113.    e: regPas;
  114.  
  115. Begin
  116. writeln ('Ingrese el vuelo');
  117. readln (vuelo);
  118. writeln ('Ingrese fecha de vuelo');
  119. readln (fecha);
  120. convertirtfecha(fecha, tfecha);
  121. if ((fdifdias(factual, fecha)>15) or (fdifdias(factual, fecha)<3)) then
  122.    writeln ('No puede reservar con menos de 15 dias de anticipaci¢n, ni a menos de 3 dias del vuelo');
  123. else
  124.     writeln ('Ingrese DNI del pasajero');
  125.     readln (dni);
  126.     d.clave:= vuelo+fecha;
  127.     lbuscarordenado(lv, d.clave, existe);
  128.                          if existe then
  129.                             linfo(lv, d);
  130.                             if lv.capacidad>0 then
  131.                                lbuscar_ordenado(lv, dni, existe);
  132.                                if not existe then
  133.                                   lv.capacidad:= lv.capacidad-1;
  134.                                   e.clave:= dni;
  135.                                   e.fecha:= fecha;
  136.                                   e.cod_op; r;
  137.                                   lmodificar(lv, e);
  138.                                else
  139.                                    writeln ('El pasajero ya ha reservado pasaje en este vuelo');
  140.                                end;
  141.                             else;
  142.                                  writeln ('No hay mas lugar en el vuelo solicitado');
  143.                             end;
  144.                             else
  145.                                 writeln ('Codigo de vuelo o fecha incorrecta');
  146.                             end;
  147. end;
  148. end;
  149.  
  150. Procedure venta(lp: tlista de regV, factual: tfecha);
  151. Var
  152.    d:regV;
  153.    e: regP;
  154.  
  155. Begin
  156. writeln ('Ingrese el vuelo');
  157. readln (vuelo);
  158. writeln ('Ingrese fecha de vuelo');
  159. readln (fecha);
  160. convertirtfecha(fecha, tfecha);
  161. if (fecha<factual) then
  162.    writeln ('La fecha de vuelo es anterior a la fecha actual');
  163. else
  164.     writeln ('Ingrese dni del pasajero');
  165.     readln (dni);
  166.     d.clave:= vuelo + fecha;
  167.     lbuscarodenado(lv, d.clave, existe);
  168.     if existe then
  169.        if lv.capacidad>0 then
  170.           l.info(lv, d);
  171.           lbuscarordenado(lv, dni, existe);
  172.           if not existe then
  173.              lv.capacidad:= lv.capacidad + 1
  174.              e.clave:= dni;
  175.              e.fecha:= fecha;
  176.              e.cod_op:= v;
  177.              lmodificar(lv, e);
  178.           else
  179.               writeln ('El pasajero ya tiene un ticket a su nombre en este vuelo');
  180.           end;
  181.        else
  182.            writeln ('No hay mas lugar en este vuelo');
  183.        end;
  184.     else
  185.         writeln ('Codigo de vuelo o fecha incorrecto');
  186.     end;
  187. end;
  188. end;
  189.  
  190. Procedure alta(lv: tlista of regV, factual: tfecha);
  191. Var
  192.    cod_v; string;
  193.    fecha_v: string;
  194.    dest: string;
  195.    ok: boolean;
  196.    x: regV;
  197.    cap: integer;
  198.  
  199. Begin
  200. writeln('Ingrese codigo de vuelo');
  201. readln(cod_v);
  202. wrtieln('Ingrese fecha del vuelo');
  203. fconvertirtfecha(fecha_v, tfechavalida, ok);
  204. if ok then
  205.    if (fecha_v<factual) then
  206.       wrtieln ('La fecha de vuelo es invalida');
  207.    else
  208.        x.clave:= cod_v+fecha_v;
  209.        x.vuelo:=cod_v;
  210.        x.fecha:=fecha_v;
  211.        repeat
  212.              wrtieln ('Ingrese capacidad');
  213.              readln(cap);
  214.        until (cap>0);
  215.        x.cap:= cap;
  216.        writeln ('Ingrese destino');
  217.        readln(dest);
  218.        x.destino:= dest;
  219.        lcrear(lp);
  220.        linsertarordenado(lv, x, 'A');
  221.    end;
  222. else
  223.     wrtieln ('Fecha invalida');
  224. end;
  225. end;
  226.  
  227. Procedure Baja(lv: tlista of regV);
  228. Var
  229.    vuelo: string;
  230.    fvuelo: string;
  231.    fecha: tfecha;
  232.    clave: tclave;
  233.    error: boolean;
  234.    existe: boolean;
  235.  
  236. Begin
  237. writeln('Ingrese numero de vuelo');
  238. readln (vuelo);
  239. Repeat
  240.       writeln ('Ingrese fecha de vuelo');
  241.       readln (fvuelo);
  242.       Fconvertirflegibletfecha(fvuelo, fecha, error);
  243. until ok;
  244. clave:= vuelo+fecha;
  245. Lbuscarorden(lv, clave, existe);
  246. if existe then
  247.    Lborraractual(lv)
  248. else
  249.     writeln ('Numero de vuelo o fecha incorrectos');
  250. end;
  251.  
  252. Procedure ListaVuelo (Var lv: tlista of regV);
  253. Var
  254.    auxvuelos: regV, fechaL: string, ok: boolean;
  255.  
  256. Begin
  257. if not Lvacia(lv) then
  258.    Lleerppio(lv);
  259.    Linfo(lv, auxvuelos);
  260.    writeln ('Vuelo', auxvuelos.vuelo,'Fecha' fconvertirfechalegible(auxvuelos.fecha, fechaL, ok);
  261.    wrtieln ('Capacidad', auxvuelos.cap, 'Destino', auxvuelos.destino);
  262. Lsig(lv, auxvuelo);
  263. while not Lfin(lv) do
  264.       Begin
  265.       writeln ('Vuelo', auxvuelos.vuelo,'Fecha' fconvertirfechalegible(auxvuelos.fecha, fechaL, ok);
  266.    wrtieln ('Capacidad', auxvuelos.cap, 'Destino', auxvuelos.destino);
  267. Lsig(lv, auxvuelo);
  268. end;
  269. end;
  270. end;
  271.  
  272. Procedure ListaPasajeros(Var lv: tlista of regV);
  273. Var
  274.    vuelo: string;
  275.    fvuelo: string;
  276.    fecha: tfecha;
  277.    ok: boolean;
  278.    clave: tclave;
  279.    auxvuelos: regV;
  280.    auxpas: regPas;
  281.    exito: boolean;
  282.  
  283. Begin
  284. wrtieln ('Ingrese el vuelo que desea listar');
  285. readln (vuelo);
  286. Repeat
  287.       writeln ('Ingrese fecha del vuelo');
  288.       readln (fvuelo);
  289.       FconvertirFlegibleatfecha(fvuelo, fecha, ok);
  290. until ok;
  291. clave:= vuelo+fecha;
  292. Lbuscarorden(lv, clave, exito);
  293. if exito then
  294.    Linfo(lv, auxvuelos);
  295.    if not Lvacia(auxvuelos.pas) then
  296.       Lleerppio(auxvuelos.pas);
  297.       Linfo(auxvuelos.pas, auxpas);
  298.       wrtieln ('Dni del pasajero', auxvuelos.clave);
  299.       wrtieln ('Codigo de operacion', auxvuelos.cod_op);
  300.       Lsig(auxvuelos.pas, auxpas);
  301.       while not Lfin(auxvuelos.pas) do
  302.       Begin
  303.            Linfo(auxvuelos.pas, auxpas);
  304.            wrtieln ('Dni del pasajero', auxvuelos.clave);
  305.            wrtieln ('Codigo de operacion', auxvuelos.cod_op);
  306.            Lsig(auxvuelos.pas, auxpas);
  307.       end;
  308.    end;
  309. else
  310.     writeln ('Nro de vuelo o fecha invalida');
  311. end;
  312. end;
  313.  
  314. Begin
  315. clrscr;
  316. FechaActual(factual);
  317. Clistas(Error, LV);
  318. clrscr;
  319. Repeat
  320.       writeln ('1. Reserva');
  321.       writeln ('2. Pago');
  322.       writeln ('3. Alta');
  323.       writeln ('4. Baja');
  324.       writeln ('5. Lista de pasajeros');
  325.       writeln ('6. Lista de vuelos');
  326.       writeln ('0. Salir');
  327.       readln (rta);
  328. Until (rta='0') or (rta='1') or (rta='2') or (rta='3') or (rta='4') or (rta='5') or (rta='6');
  329. while (rta<>'0') do
  330. Begin
  331.       case rta of
  332.            '1': Reserva(lv, factual);
  333.            '2': Venta(lp, factual);
  334.            '3': Alta(lv, factual);
  335.            '4': Baja(lv);
  336.            '5': ListaVuelo(lv);
  337.            '6': ListaPasajeros(lv);
  338.       end;
  339.       readkey;
  340.       if (rta<>'0') then
  341.       Begin
  342.          clrscr;
  343.          Repeat
  344.                writeln ('1. Reserva');
  345.                writeln ('2. Pago');
  346.                writeln ('3. Alta');
  347.                writeln ('4. Baja');
  348.                writeln ('5. Lista de pasajeros');
  349.                writeln ('6. Lista de vuelos');
  350.                writeln ('0. Salir');
  351.                readln (rta);
  352.          Until (rta='0') or (rta='1') or (rta='2') or (rta='3') or (rta='4') or (rta='5') or (rta='6');
  353.       end;
  354. end;
  355. readkey;
  356. end.
  357.  

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
  1. pas: tlista of regPas;
  2.  

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!

Páginas: [1]