Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-06-2007
Avatar de Nanaky
Nanaky Nanaky is offline
Miembro
 
Registrado: jun 2007
Posts: 10
Poder: 0
Nanaky Va por buen camino
¿Alguien me ayuda a programar?

Hola buenas noches!
Soy nuevo, y la información que hay en la pagina me resulta muy útil porque soy bastante novato en Delphi (bueno, y en cualquier tipo de programacion... aunque una vez programé/copié el Arkanoid en Basic, pero eso no cuenta mucho...).

A ver si alguien es tan amable de ayudarme con un trabajo que tengo que hacer, en el cual me he quedado atascado. De este trabajo depende mi nota de informática, y que me compensen matematicas. Lo veo muy negro.

Con la siguiente premisa:

Realizar una aplicación informática que gestiones los vuelos aereos de una companyia X. El programa debe guardar de cada vuelo la siguiente información. Codigo de vuelo(3 letras y 3 numeros), aeropuerto de salida, aeropuerto de llegada, fecha y hora real de salida, fecha y hora real de llegada, si el vuelo ha sido puntual o no y el número de pasajeros transportados. Se considera que un vuelo es puntual si la diferencia entre la hora estimada y la hora real de salida y/o llegada es menor a 5 minutos.

Tengo que hacer un programa que muestre en pantalla las siguientes opciones (con case of):

1.Entrar datos
2.Modificar datos.
3. Determinar puntualidad de los vuelos y guardar la información en el campo correspondiente.
4. Dadas dos fechas, dar el porcentaje de vuelos puntuales sobre el total de vuelos entre estas fechas.

Lo que llevo hecho es lo siguiente , pero me he quedado estancado y no sé como seguir:

uses
SysUtils;

Const MAXvuelos=100;

type
t_fecha_salida= record
minuto:0..59;
hora:0..23;
dia:1..31;
mes:1..12;
anyo: 2000..2100;
end;
t_fecha_llegada= record
minuto:0..59;
hora:0..23;
dia:1..31;
mes:1..12;
anyo: 2000..2100;
end;
t_vuelo= record
cod_vuelo: string[6];
aero_salida: string[3];
aero_llegada: string[3];
pasajeros: integer;
fecha_salida: t_fecha_salida;
fecha_llegada: t_fecha_llegada;
end;
t_index=1..MAXvuelos;
t_lista_vuelos= array[1..MAXvuelos]of t_vuelo;

var
l:t_lista_vuelos;
op:integer;
i:t_index;


procedure Leer_datos;
begin
writeln('Introduzca el codigo de vuelo: ');
readln(l[i].cod_vuelo);
writeln('Introduzca el codigo del aeropuerto de salida: ');
readln(l[i].aero_salida);
writeln('Introduzca el codigo del aeropuerto de llegada: ');
readln(l[i].aero_llegada);
writeln('Introduzca la fecha de salida: ');
write('Dia: ');
readln(l[i].fecha_salida.dia);
write('Mes: ');
readln(l[i].fecha_salida.mes);
write('Anyo: ');
readln(l[i].fecha_salida.anyo);
writeln('Introduzca la fehca de llegada: ');
write('Dia: ');
readln(l[i].fecha_llegada.dia);
write('Mes: ');
readln(l[i].fecha_llegada.mes);
write('Anyo: ');
readln(l[i].fecha_llegada.anyo);
writeln;

end;
begin
repeat

writeln ('Escoja una de las siguentes opciones: ');
writeln ('--------------------------------------');
writeln ('1) Leer datos');
writeln ('2) Modificar los datos de vuelo por referencia');
writeln ('3) Conocer la puntualidad de los vuelos');
writeln ('4) Porcentajes de puntualidad segun fechas');
writeln ('0) Salir');
readln (op);
if (op>=0) and (op<=4) then
else
writeln('La opción no es correcta, escoja otra opcion.');
(*else lo he puesto como: si no es ni 0,1,2,3 o 4 , opción incorrecta. No se si esto está bién así*)
case op of

'1': Leer_datos;
'2': Modificar_datos;
'3': Puntualidad;
'4': Porcentaje;

end;
until op='0'
end.



-Aquí ya no compila. Me dice que en 'op' incompatible types:integer y char son incompatibles, pero es que yo a la variable op le he dado valor de integer.

- También quiero cambiar el procedure leer_datos, porque de esta manera, luego no se como voy a modificarlos por referencia en el siguiente subprograma.
Quiero hacerlo de la siguiente manera (adjunto pseudocódigo):

Procedimiento leer_datos (ent/sal, VAR v1 : t_lista_vuelos, nvuelos:entero);
VAR j:t_index;
Inicio_secuencia
leer (nvuelos1);
desde j:=1 hasta nvuelos1 hacer
leer v1[j].codigo_vuelo;
f_desde;
f_secuencia;


donde luego en el case of irían así v y , n vuelos.
1:leer_datos (v,nvuelos)

Lo ha explicado el profesor así, pero no lo acabo de entender.
¿Cual sería la entrada y la salida del procedure? y en el caso de nvuelos, ¿puedo luego poner un nvuelos1 sin definirlo como variable, solo poniendole un 1? lo mismo pasa con el v1 y v.

De verdad, está bién copiado.

Estoy bastante perdido.

Agradecería muchíiiiisimo que alguien me ayudase a seguir con el trabajo.
Muchas gracias por anticipado, estaré muy agradecido al que conteste, y también al que le tome interés.

Espero vuestras respuestas!

P.D. Se ha alineado solo a la izquierda, lo siento si no se diferencian mucho los saltos de linea.

Última edición por Nanaky fecha: 01-06-2007 a las 01:50:19.
Responder Con Cita
  #2  
Antiguo 01-06-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
hola nanaki vamos por partes, los integer no van entre cadenas solo se ponen los números por lo tanto debes modificar tu código:

Código Delphi [-]
     case op of
    1: Leer_datos;
    2: Modificar_datos;
    3: Puntualidad;
    4: Porcentaje;
end;
  until op=0;
end.

ahora en el otro caso estás pasando la variable nro de vuelos entonces no necesitas volver a leer cuantas veces vas a leer solo bastar con hacer algo parecido a:
Código Delphi [-]
procedure leer_datos (VAR v1 : t_lista_vuelos, nvuelos:entero);
VAR 
j: integer;
begin
   for j:=1 to nvuelos do
       readln(v1[j].codigo_vuelo);
end;
__________________
self.free;

Última edición por droguerman fecha: 01-06-2007 a las 07:09:28.
Responder Con Cita
  #3  
Antiguo 01-06-2007
Avatar de Nanaky
Nanaky Nanaky is offline
Miembro
 
Registrado: jun 2007
Posts: 10
Poder: 0
Nanaky Va por buen camino
Muchas gracias droguerman. A ver si me voy enterando.
Quieres decir que en el case en lugar de poner la opcion entre comillas:

'1': Leer_datos;
'2': Modificar_datos;
'3': Puntualidad;
'4': Porcentaje;

la, he de poner sin? Es la unica diferencia que veo.

Por otro lado, justo antes del case of:

if (op>=0) and (op<=4) then
else
writeln('La opción no es correcta, escoja otra opcion.');

(*else lo he puesto como: si no es ni 0,1,2,3 o 4 , opción incorrecta. No se si esto está bién así*)

esto que he puesto, no funciona correctamente. Cuando escojo una opcion que no sea 0, me vuelve a repetir el case, y cuando es 0 me dice que la opcion no es correcta, y el programa tampoco se cierra.

Muchas gracias por la explicación. Agradeceria todo lo que me podáis explicar. Esta tarde cuando vuelva de trabajar continuaré intentando programar. Alguna idea para el tercer y cuarto apartado?
Responder Con Cita
  #4  
Antiguo 01-06-2007
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
estas poniendo un if sin acción mejor quedaria haciendo esto
Código Delphi [-]
if (op<0) or (op>4) then
begin
  writeln('La opción no es correcta, escoja otra opcion.');
  continue; //repetir el bucle
end;

case op of
  1: Leer_datos;
  2: Modificar_datos;
  3: Puntualidad;
  4: Porcentaje;
end;
__________________
self.free;
Responder Con Cita
  #5  
Antiguo 01-06-2007
Avatar de Nanaky
Nanaky Nanaky is offline
Miembro
 
Registrado: jun 2007
Posts: 10
Poder: 0
Nanaky Va por buen camino
Vale ya me he puesto manos a la obra y he conseguido que funcione el Case of. Solo me funciona con la opcion 0 (salir) o si le doy a una opcion que no está entre 0 y 4 ( esto es lo siguiente que preguntaba, ahora ya funciona).

Lo que pasa ahora es que cuando le doy a la opcion 1 ( la unica que tengo de momento) no hace nada , ni puedo volver al menu ni cerrar el programa. A ver si alguien me ayuda .

Pongo el codigo tal cual lo tengo ahora:

Código Delphi [-]
program Algoprueba3;

{$APPTYPE CONSOLE}

uses
  SysUtils;
Const MAXvuelos=100;

type
  t_fecha_salida= record
    minuto:0..59;
    hora:0..23;
    dia:1..31;
    mes:1..12;
    anyo: 2000..2100;
  end;
  t_fecha_llegada= record
    minuto:0..59;
    hora:0..23;
    dia:1..31;
    mes:1..12;
    anyo: 2000..2100;
  end;
  t_vuelo= record
    cod_vuelo: string[6];
    aero_salida: string[3];
    aero_llegada: string[3];
    pasajeros: integer;
    fecha_salida: t_fecha_salida;
    fecha_llegada: t_fecha_llegada;
  end;
  t_index=1..MAXvuelos;
  t_lista_vuelos= array[1..MAXvuelos]of t_vuelo;

  var
  v1:t_lista_vuelos;
  nvuelos:integer;
  op:integer;
  procedure Leer_datos (VAR v1 : t_lista_vuelos; nvuelos:integer );
    VAR
      j: t_index;
      begin
        readln (nvuelos);
        for j:=1 to nvuelos do
        writeln ('Escriba el codigo de vuelo(AAA111):  ');
        readln(v1[j].cod_vuelo); (*fallo*)
        writeln ('¿Cual es el codigo del aeropuerto de salida?(AAA):  ');
        readln(v1[j].aero_salida);
        writeln ('¿Cual es el codigo del aeropuerto de llegada?(AAA):  ');
        readln(v1[j].aero_llegada);
        writeln ('¿Cuantos pasajeros hay en este vuelo?:  ');
        readln(v1[j].pasajeros);
      end;
   begin
      repeat

      writeln ('Escoja una de las siguentes opciones: ');
      writeln ('--------------------------------------');
      writeln ('1) Leer datos');
      writeln ('2) Modificar los datos de vuelo por referencia');
      writeln ('3) Conocer la puntualidad de los vuelos');
      writeln ('4) Porcentajes de puntualidad segun fechas');
      writeln ('0) Salir');
      writeln;
      readln (op);
      writeln;
        if (op<0) and (op>4) then
          begin
            writeln('La opcion no es correcta, escoja otra opcion.');
            continue;
          end;
      case op of

        1: Leer_datos (v1,nvuelos);(*fallo*)

      end;
      until op=0;
end.


y estos son los mensajes de error en las lineas que he marcado como fallo.

[Warning] Algoprueba3.dpr(46): FOR-Loop variable 'j' may be undefined after loop

[Warning] Algoprueba3.dpr(73): Variable 'nvuelos' might not have been initialized


Muchas a todos por vuestra colaboración.


No se si será que le faltan variables de entrada y/o salida al procedure.

Última edición por Nanaky fecha: 01-06-2007 a las 20:47:56.
Responder Con Cita
  #6  
Antiguo 01-06-2007
Avatar de Nanaky
Nanaky Nanaky is offline
Miembro
 
Registrado: jun 2007
Posts: 10
Poder: 0
Nanaky Va por buen camino
Si has visto, he cambiado lo que has dicho, para no poner un if sin ninguna orden, y ahora funciona, porque vuelve al menu de opciones pero no da el mensaje:La opcion no es correcta, escoja otra opcion.

lo he probado con y sin begin/end; y con y sin continue.


edito:

Ya se que pasaba, he dejado el AND que habia antes y por eso no iba. Lo he cambiado por un OR y va correctamente.
Así queda más optimizado, gracias.

A ver si me ayudáis a continuar.

Última edición por Nanaky fecha: 01-06-2007 a las 20:45:51.
Responder Con Cita
  #7  
Antiguo 01-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Vamos por partes y despacito.

El contrario de esto:
Código Delphi [-]
if (op>=0) and (op<=4) then
no es esto:
Código Delphi [-]
if (op<0) and (op>4) then
es esto:
Código Delphi [-]
if (op<0) or (op>4) then

Sigamos, aqui lo unico que haces es mandar escribir la misma frase varias veces:
Código Delphi [-]
for j:=1 to nvuelos do
        writeln ('Escriba el codigo de vuelo(AAA111):  ');
Si quieres meter mas de una instruccion dentro de un bucle vas a tener que usar begin/end
Código Delphi [-]
for j:=1 to nvuelos do
begin
        writeln ('Escriba el codigo de vuelo(AAA111):  ');
      // Las demas instrucciones
end;

Y todavía sigo sin entender porque le pasas el parámetro nvuelos al procedure, si lo primero que haces en el procedure es leer su valor por teclado
Responder Con Cita
  #8  
Antiguo 01-06-2007
Avatar de Nanaky
Nanaky Nanaky is offline
Miembro
 
Registrado: jun 2007
Posts: 10
Poder: 0
Nanaky Va por buen camino
Vale ya he arreglado lo del IF y también he hecho un bucle dentro de
for j:=1 to nvuelos do para todas las instrucciones.

Ole, ya he conseguido que me pida las opciones, por haberle quitado el read (nvuelos) como decias,
Y como yo quería determinar el nvuelos lo he puesto antes del bucle. ahora funciona las veces que yo le diga.
Pongo de nuevo el codigo tal cual lo tengo ahora, porque ahora tengo que hacer el siguiente subprograma que es modificar los datos.
Código Delphi [-]
program Algoprueba3;

{$APPTYPE CONSOLE}

uses
  SysUtils;
Const MAXvuelos=100;

type
  t_fecha= record
    minuto:0..59;
    hora:0..23;
    dia:1..31;
    mes:1..12;
    anyo: 2000..2100;
  end;
  t_vuelo= record
    cod_vuelo: string[6];
    aero_salida: string[3];
    aero_llegada: string[3];
    pasajeros: integer;
    fecha_salida: t_fecha;
    fecha_llegada: t_fecha;
  end;
  t_index=1..MAXvuelos;
  t_lista_vuelos= array[1..MAXvuelos]of t_vuelo;

  var
  v1:t_lista_vuelos;
  nvuelos:integer;
  op:integer;
  procedure Leer_datos (VAR v1 : t_lista_vuelos; nvuelos:integer );
    VAR
      j: t_index;
      begin
        writeln ('Cuantos vuelos diferentes va a introducir?: ');
        readln (nvuelos);
        for j:=1 to nvuelos do
        begin
          writeln ('Escriba el codigo de vuelo(AAA111):  ');
          readln(v1[j].cod_vuelo);
          writeln ('Cual es el codigo del aeropuerto de salida?(AAA):  ');
          readln(v1[j].aero_salida);
          writeln ('Cual es el codigo del aeropuerto de llegada?(AAA):  ');
          readln(v1[j].aero_llegada);
          writeln ('Cuantos pasajeros hay en este vuelo?:  ');
          readln(v1[j].pasajeros);
          end;
      end;
   begin
      repeat

      writeln ('Escoja una de las siguentes opciones: ');
      writeln ('--------------------------------------');
      writeln ('1) Entrar datos');
      writeln ('2) Modificar los datos de vuelo por referencia');
      writeln ('3) Conocer la puntualidad de los vuelos');
      writeln ('4) Porcentajes de puntualidad segun fechas');
      writeln ('0) Salir');
      writeln;
      readln (op);
      writeln;
        if (op<0) or (op>4) then
            writeln('La opcion no es correcta, escoja otra opcion.');

      case op of

        1: Leer_datos (v1,nvuelos);

      end;
      until op=0;

end.

Muchas gracias por todo. A partir de media noche seguiré dándole vueltas al tema a ver como puedo hacer para modificar los datos según el codigo de vuelo, la cual es la opción 2.

Espero vuestras sugerencias e ideas para el subprograma: modificar!!

P.D. Aunque funciona correctamente, me dice que es posible que la variable nvuelos no se inicialice, como puedo depurar este error?
Responder Con Cita
  #9  
Antiguo 01-06-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por Nanaky
P.D. Aunque funciona correctamente, me dice que es posible que la variable nvuelos no se inicialice, como puedo depurar este error?
Pues va a ser porque no la inicializas, aquí la estas usando:
Código Delphi [-]
  Leer_datos (v1,nvuelos);
y todavía no le has asignado ningún valor.

Además como ya te dije antes, no entiendo porque le pasas la variable si luego no la usas dentro del procedure. Si lo que intentas es utilizar el valor de nvuelos fuera del procedure, le tienes que poner "var" delante del nombre en la definición del procedure. Es decir:
Código Delphi [-]
procedure Leer_datos (VAR v1 : t_lista_vuelos;  var nvuelos:integer );
Responder Con Cita
  #10  
Antiguo 01-06-2007
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Hola, claro que manda ese mensaje, ya que nvuelos, lo pasas como parámetro al procedimiento leer_datos, pero nvuelos no tiene un valor asignado, en todo caso no es necesario que pases ese parámetro nvuelos, ya que lo tienes como variable global y lo usas tu procedimiento

saludos.
__________________
"La información tiene más valor cuando se comparte"
Responder Con Cita
  #11  
Antiguo 02-06-2007
Avatar de Nanaky
Nanaky Nanaky is offline
Miembro
 
Registrado: jun 2007
Posts: 10
Poder: 0
Nanaky Va por buen camino
Pero he probado de quitarlo del procedure y no funciona.
También lo he quitado de las variables globales y no funciona.
Solo funciona si están los dos a la vez . Eso quiere decir que algo no está bien.
A ver si alguien puede comprobar que con una sola funcionaria.

He empezado a escribir el siguiente ejercicio, el de modificar los datos. Para empezar he puesto para que muestre un listado con las referencias de los vuelos. Pero hay un problema, parece ser que solo me guarda una entrada , mas concretamente la que he entrado en segundo lugar( de 3 entradas, no he metido mas).

Pongo aqui como lo llevo. La parte de modificar no la he empezado porque además de que no se como hacerla, me ha frenado lo que acabo de explicar.

Código Delphi [-]
program Algoprueba3;

{$APPTYPE CONSOLE}

uses
  SysUtils;
Const MAXvuelos=100;

type
  t_fecha= record
    minuto:0..59;
    hora:0..23;
    dia:1..31;
    mes:1..12;
    anyo: 2000..2100;
  end;
  t_vuelo= record
    cod_vuelo: string[6];
    aero_salida: string[3];
    aero_llegada: string[3];
    pasajeros: integer;
    fecha_salida: t_fecha;
    fecha_llegada: t_fecha;
  end;
  t_index=1..MAXvuelos;
  t_lista_vuelos= array[1..MAXvuelos]of t_vuelo;

  var
  v1:t_lista_vuelos;
  nvuelos:integer;
  op:integer;

  procedure Leer_datos (VAR v1 : t_lista_vuelos; nvuelos:integer );
    VAR
      j: t_index;
      begin
        write ('Cuantos vuelos diferentes va a introducir?: ');
        readln (nvuelos);
        for j:=1 to nvuelos do
        begin
          write ('Escriba el codigo de vuelo(AAA111):  ');
          readln(v1[j].cod_vuelo);
          write ('Cual es el codigo del aeropuerto de salida?(AAA):  ');
          readln(v1[j].aero_salida);
          write ('Cual es el codigo del aeropuerto de llegada?(AAA):  ');
          readln(v1[j].aero_llegada);
          write ('Cuantos pasajeros hay en este vuelo?:  ');
          readln(v1[j].pasajeros);
          write ('Escriba la fecha y hora programada de salida del vuelo:  ');
          Write ('Dia: ');
          readln(v1[j].fecha_salida.dia);
          Write ('Mes: ');
          readln(v1[j].fecha_salida.mes);
          Write ('Anyo: ');
          readln(v1[j].fecha_salida.anyo);
          Write ('Hora: ');
          readln(v1[j].fecha_salida.hora);
          Write ('Minuto: ');
          readln(v1[j].fecha_salida.minuto);
          write ('Escriba la fecha y hora programada de llegada del vuelo:  ');
          Write ('Dia: ');
          readln(v1[j].fecha_llegada.dia);
          Write ('Mes: ');
          readln(v1[j].fecha_llegada.mes);
          Write ('Anyo: ');
          readln(v1[j].fecha_llegada.anyo);
          Write ('Hora: ');
          readln(v1[j].fecha_llegada.hora);
          Write ('Minuto: ');
          readln(v1[j].fecha_llegada.minuto);
          end;
      end;
  procedure Modificar_datos (VAR v1 : t_lista_vuelos);
    VAR
      j: t_index;

      begin
        writeln(' - Ref. de vuelo: ',v1[j].cod_vuelo);
        writeln(' - Trayecto: ', v1[j].aero_salida,'-',v1[j].aero_llegada);
        writeln(' - Fecha: Sal-',v1[j].fecha_salida.dia,'/',v1[j].fecha_salida.mes,'/',v1[j].fecha_salida.anyo);
        writeln(' - Hora: Sal ',v1[j].fecha_salida.hora,':',v1[j].fecha_salida.minuto);
        writeln(' - Fecha: Lleg-',v1[j].fecha_llegada.dia,'/',v1[j].fecha_llegada.mes,'/',v1[j].fecha_llegada.anyo);
        writeln(' - Hora: Lleg- ',v1[j].fecha_llegada.hora,':',v1[j].fecha_llegada.minuto);
        readln;
      end;

   begin
      repeat

      writeln ('Escoja una de las siguentes opciones: ');
      writeln ('--------------------------------------');
      writeln ('1) Entrar datos');
      writeln ('2) Modificar los datos de vuelo por referencia');
      writeln ('3) Conocer la puntualidad de los vuelos');
      writeln ('4) Porcentajes de puntualidad segun fechas');
      writeln ('0) Salir');
      writeln;
      readln (op);
      writeln;
        if (op<0) or (op>4) then
            writeln('La opcion no es correcta, escoja otra opcion.');

      case op of

        1: Leer_datos (v1,nvuelos);
        2: Modificar_datos(v1);

      end;
      until op=0;

end.


P.D. Sé que no está bien lo de las variables en los procedures, pero prefiero seguir avanzando si funciona, e intentar arreglar eso al final, que si no se me va a hechar el tiempo encima.

Muchas gracias por la ayuda que me estáis dando.
Responder Con Cita
  #12  
Antiguo 02-06-2007
Avatar de Nanaky
Nanaky Nanaky is offline
Miembro
 
Registrado: jun 2007
Posts: 10
Poder: 0
Nanaky Va por buen camino
Olvidaos de lo que dije antes de que nvuelos lo quería para decirle cuantos vuelos queria introducir. Lo que necesito hacer es, darle a la opcion 1, introducir datos, que los guarde en una posicion, que seguidamente vuelva al menu, y si yo quiero darle de nuevo a la opcion 1, meter otro vuelo y que lo guarde en otra posición , para que luego al listar los vuelos me aparezcan todos los que haya metido.

No lo pillo nada, esto de la informatica es muy complicado.
Responder Con Cita
  #13  
Antiguo 04-06-2007
Avatar de Nanaky
Nanaky Nanaky is offline
Miembro
 
Registrado: jun 2007
Posts: 10
Poder: 0
Nanaky Va por buen camino
Buenas a todos!

Y tengo casi todo el programa solucionado, gracias a todos y en especial a E.T. Ahora lo unico que me falta es hacer la cuarta y ultima opción. Espero que me podáis ayudar. En la última opción debo hacer lo siguiente:

"Dadas dos fechas, dar el porcentaje de vuelos puntuales sobre el total de vuelos entre estas fechas."

Donde encuentro la dificultad, es en como hacer para que utilice la informacion de puntualidad de la opción 3 entre dos fechas. ¿Como podría hacerlo?

Adjunto el codigo. Funciona correctamente.

Código Delphi [-]
uses
  SysUtils;

  type
    t_fecha= record
    minuto:0..59;
    hora:0..23;
    dia:1..31;
    mes:1..12;
    anyo: 2000..2100;
  end;

  t_vuelo= record
    cod_vuelo: string[6];
    aero_salida: string[3];
    aero_llegada: string[3];
    pasajeros: integer;
    fecha_salida,fecha_llegada: t_fecha;
    fecha_salida_real,fecha_llegada_real:t_fecha;
  end;

  var
    v1:array[1..100]of t_vuelo;
    j_v:integer;
    op:integer;

procedure Leer_datos (j:integer );
begin
  write ('Escriba el codigo de vuelo(AAA111): ');
  readln(v1[j].cod_vuelo);
  write ('Cual es el codigo del aeropuerto de salida?(AAA): ');
  readln(v1[j].aero_salida);
  write ('Cual es el codigo del aeropuerto de llegada?(AAA): ');
  readln(v1[j].aero_llegada);
  write ('Cuantos pasajeros hay en este vuelo?: ');
  readln(v1[j].pasajeros);
  write ('Escriba la fecha y hora programada de salida del vuelo: ');
  Writeln ('Dia: ');
  readln(v1[j].fecha_salida.dia);
  Write ('Mes: ');
  readln(v1[j].fecha_salida.mes);
  Write ('Anyo: ');
  readln(v1[j].fecha_salida.anyo);
  Write ('Hora: ');
  readln(v1[j].fecha_salida.hora);
  Write ('Minuto: ');
  readln(v1[j].fecha_salida.minuto);
  writeln ('Escriba la fecha y hora programada de llegada del vuelo: ');
  Write ('Dia: ');
  readln(v1[j].fecha_llegada.dia);
  Write ('Mes: ');
  readln(v1[j].fecha_llegada.mes);
  Write ('Anyo: ');
  readln(v1[j].fecha_llegada.anyo);
  Write ('Hora: ');
  readln(v1[j].fecha_llegada.hora);
  Write ('Minuto: ');
  readln(v1[j].fecha_llegada.minuto);
end;
procedure Hora_real (j:integer );
begin
writeln ('Escriba la hora real de salida del vuelo: ');
  Write ('Hora: ');
  readln(v1[j].fecha_salida_real.hora);
  Write ('Minuto: ');
  readln(v1[j].fecha_salida_real.minuto);
  writeln ('Escriba la hora real de llegada del vuelo: ');
  Write ('Hora: ');
  readln(v1[j].fecha_llegada_real.hora);
  Write ('Minuto: ');
  readln(v1[j].fecha_llegada_real.minuto);
  end;

procedure Modificar_datos ();
var j,s:integer;
begin
j:=0;
if j_v <> 0 then begin
  repeat
    inc(j);
    if j>j_v then
      j:=1;
    writeln(' - Ref. de vuelo: ',v1[j].cod_vuelo);
    writeln(' - Trayecto: ', v1[j].aero_salida,'-',v1[j].aero_llegada);
    writeln(' - Fecha: Sal-',v1[j].fecha_salida.dia,'/',v1[j].fecha_salida.mes,'/',v1[j].fecha_salida.anyo);
    writeln(' - Hora: Sal ',v1[j].fecha_salida.hora,':',v1[j].fecha_salida.minuto);
    writeln(' - Fecha: Lleg-',v1[j].fecha_llegada.dia,'/',v1[j].fecha_llegada.mes,'/',v1[j].fecha_llegada.anyo);
    writeln(' - Hora: Lleg- ',v1[j].fecha_llegada.hora,':',v1[j].fecha_llegada.minuto);
    writeln('--------------------------------------');
    writeln('');
    writeln('1) Seleccionar vuelo de la posicion actual ');
    writeln('2) Mostrar el vuelo siguiente');
    writeln('3) Volver al menu principal');
    writeln('');
    readln(s);
  until (s=1) or (s=3);
  if s<>3 then
    begin
    writeln('Introduzca ahora los nuevos datos');
    Leer_datos(j);
  end;
end
  else
    begin
      Writeln('No hay vuelos guardados que modificar');
    end;
end;

procedure Puntualidad();
var j,z,p,q,r,t:integer;

begin
j:=0;
if j_v <> 0 then begin
  repeat
    inc(j);
    if j>j_v then
      j:=1;
    writeln(' - Ref. de vuelo: ',v1[j].cod_vuelo);
    writeln(' - Hora: Sal ',v1[j].fecha_salida.hora,':',v1[j].fecha_salida.minuto);
    writeln(' - Hora: Lleg- ',v1[j].fecha_llegada.hora,':',v1[j].fecha_llegada.minuto);
    writeln('--------------------------------------');
    writeln('');
    writeln('1) Seleccionar vuelo de la posicion actual ');
    writeln('2) Mostrar el vuelo siguiente');
    writeln('3) Volver al menu principal');
    writeln('');
    readln(z);
  until (z=1) or (z=3);
  if z<>3 then
    begin
    writeln('Introduzca la hora de real de salida y de llegada del vuelo');
    Hora_real (j);

    end;
    p:=(v1[j].fecha_salida.hora)-(v1[j].fecha_salida_real.hora);
    q:=(v1[j].fecha_salida.minuto)-(v1[j].fecha_salida_real.minuto);
    r:=(v1[j].fecha_llegada.hora)-(v1[j].fecha_llegada_real.hora);
    t:=(v1[j].fecha_llegada.minuto)-(v1[j].fecha_llegada_real.minuto);

    if ((q>-5) and (q<5))and((p>-1) and (p<1)) then
      writeln ('El vuelo ha salido a la hora prevista')
    else
      writeln ('El vuelo ha salido con retraso');
    if ((r>-5) and (r<5))and((t>-1) and (t<1)) then
      writeln ('El vuelo ha llegado a la hora prevista')
    else
      writeln ('El vuelo ha llegado con retraso');
  end
  else
    begin
      Writeln('No hay vuelos guardados que modificar');
    end;
end;

begin
j_v:=0;
repeat
  writeln ('Escoja una de las siguentes opciones: ');
  writeln ('--------------------------------------');
  writeln ('1) Entrar datos');
  writeln ('2) Modificar los datos de vuelo');
  writeln ('3) Calcular la puntualidad de los vuelos');
  writeln ('4) Porcentajes de puntualidad segun fechas');
  writeln ('0) Salir');
  writeln;
  readln (op);
  writeln;
  if (op<0) or (op>5) then
  writeln('La opcion no es correcta, escoja otra opcion.');

  case op of
    1:begin
        inc(j_v);
        Leer_datos(j_v);
      end;
    2: Modificar_datos();
    3: Puntualidad();
  end;
until op=0;
end.

Muchas gracias por la ayuda.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Alguien me ayuda con la busqueda? sergiotur Tablas planas 3 06-03-2007 20:52:34
Venganza... alguien me ayuda? cirilungol Varios 18 10-02-2006 16:44:18
ALGUIEN ME AYUDA CON EDBEngineError ronson Conexión con bases de datos 10 17-02-2004 20:41:14
Alguien sabe como programar puertos paralelos con delphi 4 Ninfa Varios 2 27-08-2003 00:56:16
ayuda en programar dispositivos mdsketchboog Varios 2 05-06-2003 09:45:43


La franja horaria es GMT +2. Ahora son las 09:08:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi