• Jueves 28 de Marzo de 2024, 17:19

Autor Tema:  Ayuda Para Un Principiante (tp 7.0)  (Leído 2626 veces)

Brownstone

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Ayuda Para Un Principiante (tp 7.0)
« en: Viernes 10 de Noviembre de 2006, 03:27 »
0
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!
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Saiyan1

  • Miembro activo
  • **
  • Mensajes: 54
    • Ver Perfil
    • http://www.anaprog.com.ar
Re: Ayuda Para Un Principiante (tp 7.0)
« Respuesta #1 en: Viernes 10 de Noviembre de 2006, 14:41 »
0
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...

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
----------------------
Gustavo Insaurralde
Foro de Analista Programador

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Ayuda Para Un Principiante (tp 7.0)
« Respuesta #2 en: Viernes 10 de Noviembre de 2006, 14:54 »
0
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

  • Miembro activo
  • **
  • Mensajes: 54
    • Ver Perfil
    • http://www.anaprog.com.ar
Re: Ayuda Para Un Principiante (tp 7.0)
« Respuesta #3 en: Viernes 10 de Noviembre de 2006, 15:01 »
0
CHAN!

... no me salen tan sutiles como a vos Enko.. :P
----------------------
Gustavo Insaurralde
Foro de Analista Programador

Brownstone

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ayuda Para Un Principiante (tp 7.0)
« Respuesta #4 en: Viernes 10 de Noviembre de 2006, 16:06 »
0
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

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Ayuda Para Un Principiante (tp 7.0)
« Respuesta #5 en: Viernes 10 de Noviembre de 2006, 16:24 »
0
la cosa es que vos pusiste algo como:
Código: Text
  1.  
  2. vector: array of integer;
  3.  
  4.  
eso es array abierto, como ya te dije antes, no compila si no cambias una opcion que no  logro recordar donde está.
Solucion facil:
Código: Text
  1.  
  2. vector: array[1..100] of integer;
  3.  
  4.  

Brownstone

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Ayuda Para Un Principiante (tp 7.0)
« Respuesta #6 en: Viernes 10 de Noviembre de 2006, 17:30 »
0
k gracias
igual voy a tener q ver, por q mi impelentacion de tlista funciona con punteros no con array  ;)

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Ayuda Para Un Principiante (tp 7.0)
« Respuesta #7 en: Viernes 10 de Noviembre de 2006, 17:36 »
0
Cita de: "Brownstone"
k gracias
igual voy a tener q ver, por q mi impelentacion de tlista funciona con punteros no con array  ;)
entonces, ¿para que es?
Citar
array of
si es una lista?