Programación General > Pascal
Ayuda Para Un Principiante (tp 7.0)
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
[#] Página Siguiente
Ir a la versión completa