• Viernes 19 de Septiembre de 2025, 04:12

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.


Mensajes - thot_ohm

Páginas: 1 [2]
26
Pascal / Re: Ordenación Alfabética De Un Archivo
« en: Martes 28 de Junio de 2005, 23:59 »
Perro Enko, con eso de la ordenación burbuja me dejaste más frito de lo que estaba. Investigué en Google un poquito y ví varios ejemplos de ordenación con el método de la burbuja, que aunque no me ha quedado muy claro, lo que sí he visto es que tengo que tener los datos en un array (en mi caso sería uno bidimensional).

Lo que se me ocurre es vaciar los resultados del filtro aplicado en el archivo al array (el cual imagino, deberá ser del tipo string) y aplicar el método burbuja a este array.

Ahora bien, ¿como escribo en al arraylos datos del archivo filtrado? Me explico, en el procedimiento MostrarEMM, una vez que leo el archivo en la variable Datos empiezo a aplicar el mencionado filtro a punta de condicionales y directamente, muestro por pantalla el resultado. ¿En este punto es que tengo que cambiar la orden y ponerlo a que me lo escriba en el array? ¿Que instrucción utilizo para ésto? ¿Algo así?: write[f,c] donde f y c son unas variables que indican la fila y columna donde se va a escribir el registro.

Disculpen a éste ignorante fastidioso jejeje  :losiento:

27
Pascal / Ordenación Alfabética De Un Archivo
« en: Lunes 27 de Junio de 2005, 23:34 »
Hola de nuevo:

Enko, amablemente (y eficientemente), me ha ayudado en el desarrollo de éste código. Cuando pensaba que ya no iba a necesitar más ayuda y que ya era todo un experto B)  :comp: , se me presentó otro problema :blink:  :whistling: . Me explico:

El código lee unas entradas por teclado, las guarda en un archivo y luego debe mostrar por pantalla algunos de los registros guardados (en base a ciertos criterios) y ordenarlos alfabéticamente por el nombre.

Ok. La parte de mostrar los que cumplen ciertos criterios está lista, no hay problema en eso. Ahora, lo de ordenar alfabéticamente, me ha enredado la vida. Tuve la idea de vaciar inicialmente el resultado de la lectura en base a ciertos criterios (filtro) en un array bidimensional  :blink:  y luego aplicar un algoritmo de ordenación que encontré posteado en este mismo foro (siempre el bueno de Enko).

Confieso que lo del array bidimensional lo conozco en la teoría, mas no en la práctica. Puedo intuir y creo saber como manejarlo  :unsure: .  Ahora bien, ¿Es ésta la mejor técnica?

Por otro lado me vuelvo un ocho intentando aplicar el algoritmo de Enko a ésta teoría.

Help me please!!

Adjunto el archivo .pas con mi código y el código copiado de éste mismo foro (gracias Enko).

Código: Text
  1.  
  2. program DemoOrd;
  3.  
  4. uses CRT;
  5.  
  6. var
  7.   {Variables para la primera parte del demo}
  8.   PosLetra          : integer;
  9.   {para la segunda parte del demo}
  10.   Palabra1,Palabra2 : string;
  11.   Ord1, Ord2        : integer;
  12.  
  13.  
  14. begin
  15.    ClrScr;
  16.    PosLetra := Ord('a');
  17.    WriteLn(PosLetra);
  18.    PosLetra := Ord('z');
  19.    WriteLn(PosLetra);
  20.    ReadKey;
  21.   ClrScr;
  22.  
  23.   {Fin Primera Parte del Demo}
  24.  
  25.   Write('Ingese una palabra cualquiera: ');
  26.   ReadLn(Palabra1);
  27.   Write('Ingese una palabra cualquiera que empieze con una letra distinta: ');
  28.   ReadLn(Palabra2);
  29.   Ord1 := Ord(Palabra1[1]); {Seria la primera letra de la palabra}
  30.   Ord2 := Ord(Palabra2[1]); {Seria la primera letra de la segunda palabra}
  31.   WriteLn('A continuacion se escribiran las palabras ordenadas alfabeticamente');
  32.   WriteLn('');
  33.   WriteLn('Presione una tecla');
  34.   ClrScr;
  35.  
  36.   if Ord1 < Ord2 then
  37.      begin
  38.         WriteLn(Palabra1);
  39.         WriteLn(Palabra2);
  40.      end
  41.   else if Ord2 < Ord1 then
  42.      begin
  43.         WriteLn(Palabra2);
  44.         WriteLn(Palabra1);
  45.      end
  46.   else if Ord1 = Ord2 then
  47.      begin
  48.         Writeln('Se suponia que tenian que empezar con letras distintas');
  49.      end;
  50.   readkey;
  51. end.
  52.  
  53.  

28
Visual FoxPro / Re: Un Manual Para Los Principiantes
« en: Sábado 18 de Junio de 2005, 15:39 »
Gracias compañero. Ya lo recibí. Ahora mismo me pongo a leerlo. Estamos a la orden para cualquier cosa.

29
Pascal / Re: Archivos
« en: Jueves 16 de Junio de 2005, 21:58 »
Modifiqué la rutina original por la sugerencia que me dabas, quedó ésto:

Código: Text
  1.  
  2. procedure mostrararchivo; {Muestra los datos almacenados en el archivo}
  3.   var
  4.     c,l: integer;
  5.  
  6.   begin
  7.   abrearchivo;
  8.   l:= 5;
  9.     while not (Eof (Archivo)) do
  10.       begin
  11.       ClrScr;
  12.       read (Archivo,Datos);
  13.       with datos do
  14.         begin
  15.         c:= 5;
  16.         gotoxy(c,l);
  17.         write ('Nombre: ', Nombre);
  18.         c:= c + 20;
  19.         gotoxy(c,l);
  20.         write ('Edad: ', Edad);
  21.         c:= c + 8;
  22.         gotoxy(c,l);
  23.         write ('Grado: ', Grado);
  24.         c:= c + 10;
  25.         gotoxy(c,l);
  26.         write ('Promedio: ', Prom:0:2);
  27.         l:= l + 1;
  28.         end
  29.       end;
  30.   readln;
  31.   close (archivo);
  32.   end;
  33.  
  34.  

El error persiste. Me explico. No muestra nada en pantalla. Qué estoy haciendo mal? Estoy más perdido que un pinguino en el desierto. Sugieranme una línea de acción please!!!

30
Visual FoxPro / Re: Un Manual Para Los Principiantes
« en: Jueves 16 de Junio de 2005, 21:32 »
Yo también soy autodidacta y me devoro cuanto manual pasa por mis manos. Si puedes enviamelo a thot_ohm@yahoo.com.

mil gracias

31
Pascal / Re: Archivos
« en: Jueves 16 de Junio de 2005, 15:51 »
Vamos por partes (siguiendo tu rutina):

1.- Assign(Archivo,Ruta): Esto lo hago en el procedimiento abrearchivo. ¿Es correcto hacerlo así? Me explico, al hacerlo en una rutina aparte, ¿la orden assign es válida cuando regresa al procedimiento origen?

2.- Reset(Archivo): Igualmente, se realiza en el procedimiento abrearchivo. La pregunta sería la misma que en 1.

Lo demás de esa rutina esta perfectly clear. Thanx.

En cuanto a lo del problema con el promedio,pues me quedé asi:  :blink: . Yo lo he probado para adelante y para atrás y me ha funcionado. No sé si tenga que ver, pero estoy compilando con FreePascal.

Probé con el ejemplo que tu dices (el de introducirle un unico valor 2) y el resultado me da un 2.00 tan grande como la copa de un pino jejeje (es un decir).

En éste foro, uno si se siente que forma parte de algo. Gracias por eso y por la ayuda (aunque sean repetitivas las gracias, un servidor siempre estará agradecido).

32
Pascal / Archivos
« en: Jueves 16 de Junio de 2005, 00:18 »
De nuevo yo trancado en éste bendito programa!!!

Ya tengo listas mis rutinas para leer y almacenar datos.

Ahora estoy intentando crear una rutina que me muestre los datos que están en el archivo por pantalla (tengo que hacer que salgan en orden alfabético y que cumplan ciertos parámetros, pero vayamos por partes). Hice esta rutina:

Código: Text
  1.  
  2. procedure mostrararchivo; {Muestra los datos almacenados en el archivo}
  3.   var
  4.     c,l: integer;
  5.  
  6.   begin
  7.   abrearchivo;
  8.   l:= 5;
  9.   with Datos do
  10.     begin
  11.     while not (Eof (Archivo)) do
  12.       begin
  13.       ClrScr;
  14.       read (Archivo,Datos);
  15.       c:= 5;
  16.       gotoxy(c,l);
  17.       write ('Nombre: ');
  18.       write (nombre);
  19.       c:= c + 20;
  20.       gotoxy(c,l);
  21.       write ('Edad: ');
  22.       write (edad);
  23.       c:= c + 8;
  24.       gotoxy(c,l);
  25.       write ('Grado: ');
  26.       write (grado);
  27.       c:= c + 10;
  28.       gotoxy(c,l);
  29.       write ('Promedio: ');
  30.       write (prom :0 :2);
  31.       c:= c + 15;
  32.       l:= l + 1;
  33.       end
  34.     end;
  35.   close (archivo);
  36.   readln;
  37.   end;
  38.  
  39.  

Datos es una variable donde guardo los datos almacenados en el archivo (adjunto el archivo .pas completo para quien le quiera echar un vistazo).

Ahora bien, ésta rutina, aparentemente no hace nada porque no me muestra nada en pantalla.

Las dudas:

Está bien estructurada la rutina?
Será que no estoy guardando adecuadamente en el archivo?

Agradecido de antemano por la ayuda.

33
Pascal / Re: Calcular Edad A Partir De Fechas.
« en: Miércoles 15 de Junio de 2005, 16:44 »
Le dí para arriba y le dí para abajo y al final la que funcionó fue ésta:

Código: Text
  1.  
  2.   if (Actual.Mes > Nacimiento.Mes) then
  3.    Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  4.  
  5.   if (Actual.Mes < Nacimiento.Mes) then
  6.    Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  7.  
  8.   if (Nacimiento.Mes = Actual.Mes) then
  9.    if (Actual.Dia >= Nacimiento.Dia) then
  10.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  11.    else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  12.  
  13.  

Así se quedará jejeje. Gracias.

34
Pascal / Re: Calcular Promedio
« en: Miércoles 15 de Junio de 2005, 14:57 »
Citar
No se recomieda usar pormedio para valores mayores a 7 porque el promedio es preciso con series +/- inferiores a 7. Si son mayores a 7 hay que usar promedio con parametro Student "t" que es un poco m'as complicado.

Con razón recomendaban eso jejeje. Yo por dármelas de arrecho me volví un ocho. O sea como decimos en Venezuela: Por hacer una gracia me salió una morisqueta  :rolleyes: .

En cuanto a lo de la notación científica mil gracias, eso era lo que necesitaba.

35
Pascal / Re: Calcular Edad A Partir De Fechas.
« en: Miércoles 15 de Junio de 2005, 14:43 »
Citar
Si el mes actual es mayor que el mes del nacimiento es porque no cumplió los años y hay que restarle un 1

Si el mes actual es mayor al mes de nacimiento es porque SÍ cumplió años. Esto es lo que me tiene frikie. En ese caso quedaría así (digo yo  :unsure: ):

Código: Text
  1.  
  2. if (Actual.Mes > Nacimiento.Mes) then
  3.  Datos.Edad:= Actual.Anio - Nacimiento.Anio
  4. else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  5.  Datos.Edad:= Actual.Anio - Nacimiento.Anio -1
  6. else
  7.  Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  8.  
  9.  

Ahora bien, en ésta parte del código:
Código: Text
  1.  
  2. else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  3.  Datos.Edad:= Actual.Anio - Nacimiento.Anio -1
  4.  
  5.  
evalúa que si el mes de nacimiento es igual al actual y el día de nacimiento es MAYOR o IGUAL al actual le reste -1 a la resta del año actual menos el año de nacimiento. Es decir, que no ha cumplido años. Pero sí habría cumplido años si éste condicional es cierto  :blink: , por lo que no habría que restarle 1.

Si seguimos con la parte final del condicional:
Código: Text
  1.  
  2. else
  3.  Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  4.  
  5.  
se está evaluando que si no se cumple (que el mes de nacimiento sea igual al mes actual y que el dia actual sea mayor o igualal día de nacimiento) no le reste 1. Es decir que sí habría cumplido años ¿?.

¿No es esto incorrecto?

Tal como acabo de analizar el código, tal como estaba estaría bien:
Código: Text
  1.  
  2. if (Actual.Mes > Nacimiento.Mes) then
  3.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  4.  else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  5.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  6.  else
  7.      Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  8.  
  9.  

Ahora bien, que te parece si anidamos otro condicional. Algo así:
Código: Text
  1.  
  2. if (Actual.Mes > Nacimiento.Mes) then
  3.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  4.  else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  5.      Datos.Edad:= Actual.Anio - Nacimiento.Anio
  6.  else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia < Nacimiento.Dia) then
  7.      Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1
  8.  else if (Nacimiento.Mes < Actual.Mes) then
  9.      Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1
  10.  
  11.  

Voy a correrlo y posteo los resultados a ver si funcionó.

No me canso de darte las gracias por la ayuda. Y disculpa el fastidio  :(

36
Pascal / Re: Calcular Edad A Partir De Fechas.
« en: Martes 14 de Junio de 2005, 16:27 »
Gracias Enko, pero el error persiste cuando trato de calcular la edad de alguien que haya nacido el día anterior o el posterior a la fecha actual.

Por ejemplo, calculo la edad de alguien nacido el 13/06/1985 me dice que tiene 20 años y si le pongo a calcular de alguien nacido el 15/06/1985 dice que tiene 19 años.

Tu código es más limpio que el mío y lo he seguido mentalmente para revisarle la lógica y lo veo perfecto (a no ser que sea mi lógica la que está mal  :blink: ).

Te envío adjunto a éste mensaje el código del programa completo por si lo quieres compilar y probarlo tu mismo a ver si yo estoy haciendo algo mal.

De nuevo gracias!

Código: Text
  1.  
  2. program corocoras;
  3.  
  4. uses dos, crt;
  5.  
  6. type
  7.   TFecha = record
  8.     Anio: word;
  9.     Mes: word;
  10.     Dia: word;
  11.   end;
  12.  
  13.   TDatos = record
  14.     Nombre: string;
  15.     Edad: integer;
  16.     Grado: byte;
  17.     Prom: real;
  18.   end;
  19.  
  20. var
  21.   Datos: TDatos;
  22.   Archivo: File of TDatos;
  23.  
  24. procedure calculaedad;
  25.   var
  26.     dds: word;
  27.     Nacimiento, Actual: TFecha;
  28.  
  29.   begin
  30.   getdate(Actual.Anio, Actual.Mes, Actual.Dia, dds);
  31.   writeln ('La fecha actual es: ', Actual.Dia, '/', Actual.Mes, '/', Actual.Anio);
  32.   write ('D¡a: ');
  33.   readln (Nacimiento.Dia);
  34.   write ('Mes: ');
  35.   readln (Nacimiento.Mes);
  36.   write ('A¤o: ');
  37.   readln (Nacimiento.Anio);
  38.  
  39.   if (Actual.Mes > Nacimiento.Mes) then
  40.     Datos.Edad:= Actual.Anio - Nacimiento.Anio
  41.   else if (Nacimiento.Mes = Actual.Mes) and (Actual.Dia >= Nacimiento.Dia) then
  42.     Datos.Edad:= Actual.Anio - Nacimiento.Anio
  43.   else
  44.      Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  45.  
  46.   {if (Actual.Mes > Nacimiento.Mes) then
  47.     Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  48.  
  49.   if (Actual.Mes < Nacimiento.Mes) then
  50.     Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  51.  
  52.   if (Nacimiento.Mes = Actual.Mes) then
  53.     if (Actual.Dia >= Nacimiento.Dia) then
  54.       Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1
  55.     else Datos.Edad:= Actual.Anio - Nacimiento.Anio;}
  56.   end;
  57.  
  58. procedure obtenernotas;
  59.  
  60.   var
  61.     i: byte;
  62.     key: char;
  63.     Notas: Array[1..10] of real;
  64.     SumNotas: real;
  65.   begin
  66.   i:= 0;
  67.   repeat
  68.     i:= i + 1;
  69.     write ('Intoduzca la nota: ');
  70.     readln (Notas[i]);
  71.     SumNotas:= SumNotas + Notas[i];
  72.     write ('¨Desea introducir otra nota? (s/n): ');
  73.     readln (key);
  74.     if i = 10 then write ('Ya se tienen 10 notas del alumno');
  75.   until (key = 'n') or (key = 'N') or (i = 10);
  76.   Datos.Prom:= SumNotas / i;
  77.   write ('El promedio es ', Datos.Prom);
  78.   readln;
  79.   end;
  80.  
  81. procedure obtenerdatos;
  82.   begin
  83.   clrscr;
  84.   write ('Introduzca el nombre: ');
  85.   readln (Datos.Nombre);
  86.   writeln ('Fecha de nacimiento: ');
  87.   calculaedad;
  88.   write ('Grado: ');
  89.   readln (Datos.Grado);
  90.   write ('Notas: ');
  91.   obtenernotas;
  92.   end;
  93.  
  94. procedure almacenardatos;
  95.   begin
  96.   end;
  97.  
  98. begin
  99.   obtenerdatos;
  100.   almacenardatos;
  101.   writeln ('Nombre: ' ,Datos.Nombre);
  102.   writeln ('Edad: ' ,Datos.Edad);
  103.   writeln ('Grado: ' ,Datos.Grado);
  104.   writeln ('Notas: ' ,Datos.Prom);
  105.   readln;
  106. end.
  107.  
  108.  

37
Pascal / Calcular Promedio
« en: Martes 14 de Junio de 2005, 16:01 »
Hola de nuevo.

Siguiendo con el desarrollo del programa, tengo que calcular el promedio de unas notas. En las especificaciones que me dieron en la Universidad me dicen que se recomienda que no sean mayor a 7 notas. De todas maneras yo quiero hacer que calcule el promedio de n notas (por hacer el programa más flexible).

Para seguir con el planteamiento del problema acá está el código que hice:

Código: Text
  1.  
  2. var
  3.     i: byte;
  4.     key: char;
  5.     Notas: Array[1..10] of real;
  6.     SumNotas: real;
  7.   begin
  8.   i:= 0;
  9.   repeat
  10.     i:= i + 1;
  11.     write ('Intoduzca la nota: ');
  12.     readln (Notas[i]);
  13.     SumNotas:= SumNotas + Notas[i];
  14.     write ('¨Desea introducir otra nota? (s/n): ');
  15.     readln (key);
  16.     if i = 10 then write ('Ya se tienen 10 notas del alumno');
  17.   until (key = 'n') or (key = 'N') or (i = 10);
  18.   Datos.Prom:= SumNotas / i;
  19.   write ('El promedio es ', Datos.Prom);
  20.   readln;
  21.   end;
  22.  
  23.  

Datos.Prom es una variable declarada en la cabecera del programa (este código es nada más el procedimiento en discusión).

Inicialmente, había hecho
Código: Text
  1.  
  2. Notas: Array[1..n] of real;
  3.  
  4.  
Pero cuando compilo me da un error que la variable es demasiado larga (¿?). Le dí una longitud al arreglo de 10 para no estancarme ahí y seguir con el procedimiento.

Yo sé que se puede hacer
Código: Text
  1.  
  2. NOtas: Array[1..MaxNotas] of real;
  3.  
  4.  
Donde MaxNotas es una constante con un valor "x".

Mi pregunta es: ¿Puedo darle al arreglo una longitud declarada por una variable? Es decir ¿Puede el arreglo tener una longitud variable?

Otra cosa: Cuando muestro el promedio por pantalla aparece en notación científica. ¿Como se hace para especificar el número de decimales que queremos que aparezcan?

Gracias por la ayuda.

38
Pascal / Re: Calcular Edad A Partir De Fechas.
« en: Lunes 13 de Junio de 2005, 17:34 »
Creo que ya dí con lo que era. Mira a ver:

Código: Text
  1.  
  2.   if (Actual.Mes > Nacimiento.Mes) then
  3.     Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  4.  
  5.   if (Actual.Mes < Nacimiento.Mes) then
  6.     Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  7.  
  8.   if (Nacimiento.Mes = Actual.Mes) then
  9.     if (Actual.Dia >= Nacimiento.Dia) then
  10.       Datos.Edad:= Actual.Anio - Nacimiento.Anio
  11.     else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  12.  
  13.  

Sugerencias bien recibidas...

39
Pascal / Re: Calcular Edad A Partir De Fechas.
« en: Lunes 13 de Junio de 2005, 17:21 »
Hola de nuevo!!

Tengo un problemita. Por dármelas de "galán_programador_superarrecho"  B) le dije a mi novia para que ingresara su fecha para que le calculara la edad (estupideces de uno...) y resultó que le salió 19 años cuando ella tiene 20 (nació el 01 de Mayo de 1985).

Me puse a revisar a fondo la rutina y me di cuenta que éste condicional
Código: Text
  1.  
  2. if (Nacimiento.Mes >= Actual.Mes) and (Nacimiento.Dia >= Actual.Dia) then
  3.     Datos.Edad:= Actual.Anio - Nacimiento.Anio
  4.   else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  5.  
  6.  
sólo es verdadero cuando el mes Y el día de nacimiento son mayores o iguales al mes y día actuales. Ahora bien, se puede dar el caso que el mes de nacimiento sea mayor (o incluso igual) al mes actual pero que el día de nacimiento sea menor al día actual (como sucede en éste caso), por lo que el condicional se evaluaría falso ejecutando esta parte del código
Código: Text
  1.  
  2. else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  3.  
  4.  
siendo ésto incorrecto por haber cumplido ésta persona años ya.

Por ejemplo (que sé que está medio enredado): Hoy es 13 de Junio de 2005, mi novia nació el 01 de Mayo de 1985. El mes actual, efectivamente, es mayor que el mes de nacimiento, pero el día de nacimiento es menor. El if es falso y se ejecuta el else.

Modifiqué un poco tu rutina he hice este:
Código: Text
  1.  
  2. if (Nacimiento.Mes > Actual.Mes) then
  3.   Datos.Edad:= Actual.Anio - Nacimiento.Anio;
  4.  
  5. if (Nacimiento.Mes < Actual.Mes) then
  6.   Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  7.  
  8. if (Nacimiento.Mes = Actual.Mes) then
  9.   if (Nacimiento.Dia >= Actual.Dia) then
  10.     Datos.Edad:= Actual.Anio - Nacimiento.Anio
  11.   else Datos.Edad:= Actual.Anio - Nacimiento.Anio - 1;
  12.  
  13.  

Lo he revisado y lo veo "lógicamente" bien. Pero, obviamente debe haber algún error ya que el error persiste; sigue diciendo que tiene 19 años en vez de 20.

Ayudame a ver que es lo que estoy haciendo mal...

¿¿¿O es que mi novia me engañó en la edad???  :blink: jajaja

40
Pascal / Re: Una preguntita que no tiene nada que ver c++
« en: Viernes 10 de Junio de 2005, 23:02 »
Respondí tu pregunta en la otra discusión que posteaste.

41
Pascal / Re: Una preguntita que no tiene nada que ver c++
« en: Viernes 10 de Junio de 2005, 19:36 »
Hola!!

Yo estoy empezando a trabajar con Pascal. Pero veamos si te puedo ayudar... :blink:

Cuando estés en Pascal, para generar el .exe a partir del .pas, abres el menú compile y luego haces click en make. O simplemente, presionas F9 y de una vez te genera el .exe.

A lo mejor ya lo has hecho, pero luego no consigues el "bendito" ejecutable. Es probable que en las opciones tengas configurado como destino de los ejecutables la carpeta en la que tienes instalado Pascal (o cualquier otro incógnito directorio). Para cambiar esto: options/directories.

Puedes buscar el ejecutable, que seguramente ya esté en tu PC, con el buscador de windows a ver donde lo metió. Normalmente es el mismo nombre que el archivo .pas.

Good luck. Espero haberte ayudado.

42
Pascal / Re: Calcular Edad A Partir De Fechas.
« en: Viernes 10 de Junio de 2005, 17:01 »
Me gusta mucho más este código. Se entiende mejor (más limpio).

El que yo hice era parecido al tuyo, pero me gustó más el tuyo (honores al maestro jejeje).

En cuanto a lo de TurboPascal (TP) y FreePascal (FP), no sé cual sea mejor. Tenía el TP pero tuve que comprar un disco duro nuevo y lo perdí. FP lo veo más "amigable", me refiero a que marca con distintos colores las palabras clave y lo que son comentarios y textos a mostrar en pantalla. ¿Que opinas tú?

Sea lo que sea, no está de más tener TP. Mi mail es thot_ohm@yahoo.com, aunque creo eso lo puedes ver en mi perfil, ¿no?  <_< .

Bueno, estimado, ya no lo molesto más (por ahora jejeje). Seguramente según vaya desarrollando el programa necesitaré de nuevo tu invaluable ayuda.

Muchas gracias por todo.

43
Pascal / Re: Calcular Edad A Partir De Fechas.
« en: Jueves 9 de Junio de 2005, 23:39 »
Ok listo!!

No entendía mucho lo que hacía la función, pero a medida que la iba utilizando en el programa le iba agarrando el hilo. Acá tienes el código.

Código: Text
  1.  
  2. program CalculaEdad;
  3.  
  4. uses dos, crt;
  5.  
  6. type
  7.   TFecha = record
  8.     Anio: word;
  9.     Mes: word;
  10.     Dia: word;
  11.   end;
  12.  
  13. const
  14.   dias: array [0..6] of string =
  15.     ('Domingo','Lunes','Martes','Mi‚rcoles','Jueves',
  16.      'Viernes','S bado');
  17. var
  18.   a, m, d, dds: word;
  19.   Nacimiento, Actual: TFecha;
  20.   Edad: integer;
  21.  
  22. begin
  23.   clrscr;
  24.   getdate(a,m,d,dds);
  25.   writeln ('Hoy es ', dias[dds], ', ', d:0, '/', m:0, '/', a:0);
  26.  
  27.   writeln ('Introduzca la fecha de nacimiento:');
  28.   writeln ('D¡a:');
  29.   readln (Nacimiento.Dia);
  30.   writeln ('Mes:');
  31.   readln (Nacimiento.Mes);
  32.   writeln ('Año:');
  33.   readln (Nacimiento.Anio);
  34.  
  35.   if (Nacimiento.Mes >= m) and (Nacimiento.Dia >= d) then
  36.     Edad:= (a - Nacimiento.Anio)
  37.   else Edad:= a - Nacimiento.Anio - 1;
  38.  
  39.   writeln ('La edad es: ' ,Edad);
  40.   readln;
  41.  
  42. end.
  43.  
  44.  

Ahora bien, cree la constante 'dias' para ver como funcionaba realmente esta funcion GETDATE. Pero realmente, el saber el día de la semana es irrelevante en el programa que necesito. De hecho, la orden de mostrar el día de hoy es para saber si lo estaba haciendo bien  :huh: .Voy a probar a quitar la constante 'dias' y que sólo me tome el día, mes y año.

Por otro lado, yo tengo el FreePascal, pero no tiene ningún archivo de ayuda  :angry: . Puedo bajar estos archivos de algún sitio? Es mejor Turbo Pascal 7 que el FreePascal? y por último, donde puedo bajar el TP7?

Disculpa si ya estoy pasado de preguntón, pero tu ayuda me animó bastante a continuar.   :comp:

44
Pascal / Re: Calcular Edad A Partir De Fechas.
« en: Jueves 9 de Junio de 2005, 21:30 »
Disculpa que se me olvidaba.

¿Como hago para que la rutina obtenga la fecha del sistema?

45
Pascal / Re: Calcular Edad A Partir De Fechas.
« en: Jueves 9 de Junio de 2005, 21:28 »
Muchas gracias Enko!!!

Me ayudaste enormemente. Ya hice la rutina, te la adjunto para que la veas y me des tu opinión.

Código: Text
  1.  
  2. program CalculaEdad;
  3.  
  4. uses
  5.   crt;
  6.  
  7. type
  8.   TFecha = record
  9.     Anio: integer;
  10.     Mes: byte;
  11.     Dia: byte;
  12.   end;
  13.  
  14. var
  15.   Nacimiento, Actual: TFecha;
  16.   Edad: integer;
  17.  
  18. begin
  19.   clrscr;
  20.   Actual.Dia:= 9;
  21.   Actual.Mes:= 6;
  22.   Actual.Anio:= 2005;
  23.  
  24.   writeln ('Introduzca la fecha de nacimiento:');
  25.   writeln ('D¡a:');
  26.   readln (Nacimiento.Dia);
  27.   writeln ('Mes:');
  28.   readln (Nacimiento.Mes);
  29.   writeln ('Año:');
  30.   readln (Nacimiento.Anio);
  31.  
  32.   if (Nacimiento.Mes >= Actual.Mes) and (Nacimiento.Dia >= Actual.Dia) then
  33.     Edad:= (Actual.Anio - Nacimiento.Anio)
  34.   else Edad:= Actual.Anio - Nacimiento.Anio - 1;
  35.  
  36.   writeln ('La edad es: ' ,Edad);
  37.   readln;
  38.  
  39. end.
  40.  
  41.  

De nuevo mil gracias por el recibimiento y la ayuda.

46
Pascal / Calcular Edad A Partir De Fechas.
« en: Jueves 9 de Junio de 2005, 15:31 »
Hola a todos.

Estoy iniciandome en el mundo de la programación, por lo que espero que no se rían mucho si pregunto algo que ya esté trillado.  :unsure:

En la universidad me pidieron hacer un programa (en Pascal), que entre otras cosas, necesita calcular la edad de una persona a partir de la fecha de nacimiento. Intuitivamente: edad:= fechaactual - fechanacimiento (digo yo...  <_< ). Confieso mi total fracaso a la hora de diseñar una rutina que haga esto. Estoy seguro que debe haber una rutina "estandar" que ejecute esta acción.

Pueden ayudarme a conseguirla??

Por otro lado ¿hay que declarar algún tipo de dato para que el computador lea la fecha adecuadmente?

De antemano gracias por recibir en el grupo a este aprendiz de programador.

Mil gracias!!!

Páginas: 1 [2]