Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: dragonlady en 10 Julio 2015, 21:40 pm



Título: calcular funcion edad con funcion fecha de nacimiento
Publicado por: dragonlady en 10 Julio 2015, 21:40 pm
Hola a todos, he encontrado bastante información al respecto, así que disculpas por no ser más despierta, pero no le encuentro solución por más que intente.
Tengo que calcular la edad de un usuario en una función y lo que tengo es una función que me devuelve la fecha de nacimiento del mismo.
Así:

Código
  1. fecha ingresoFechanacimiento()
  2. {
  3.    fecha fechanac;
  4.    printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
  5.    scanf("%d/%d/%d",&fechanac.dia,&fechanac.mes, &fechanac.año);
  6.    return fechanac;
  7. }
  8.  

Básicamente lo que quiero es hacer eso, otra función para mostrar la edad a partir de la función fecha de nacimiento. Pienso que quizás tendria que sacar solo el año de la función fecha de nacimiento, pero no me sale...

Desde ya, gracias!


Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: crack81 en 10 Julio 2015, 23:12 pm
te dejo este ejemplo, no es la mejor implementacion pero creo que es lo que andas buscando.


Código
  1. #include <stdio.h>
  2.  
  3. typedef struct Fecha_Struct{
  4.  int dia;
  5.  int mes;
  6.  int año;
  7. }Fecha;
  8.  
  9. Fecha ingresoFechanacimiento(void){
  10.    Fecha fechanac;
  11.    printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
  12.    scanf("%d %d %d",&fechanac.dia,&fechanac.mes, &fechanac.año);
  13.    return fechanac;
  14. }
  15.  
  16. void calcularEdad(void){
  17.  
  18.    Fecha f=ingresoFechanacimiento();
  19.    int edad=2015-f.año;
  20.    printf("su edad es %d",edad);
  21. }
  22.  
  23. int main()
  24. {
  25.    calcularEdad();
  26.  
  27.    printf("\npresione una tecla para cerrar");
  28.    getchar();
  29.    getchar();
  30.    return 0;
  31. }


Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: DarK_FirefoX en 11 Julio 2015, 03:07 am
@dragonlady, tal como te puso @crack81, la vía de saber la edad de alguien a partir de la fecha de nacimiento, es simplemente restándole a la fecha actual la fecha de nacimiento. Digo fecha, pues hay que tener en cuenta también el mes y los días, pues puedes haber nacido el 3 de septiembre de 1990 y hoy es 10 de julio de 2015. Luego la resta de 2015 - 1990 daría 25, pero todavía no habría cumplido los 25 años, así que tienes que tener en cuenta esto también.

Si tienes algún problema implementando esto, puedes preguntar y estaremos más que dispuestos a ayudarte.

Salu2s

PD: En el código que puso @crack81, además de que deberías comprobar lo de los meses y días, yo, en vez de poner:

Código
  1. int edad=2015-f.año;

Tuviera una función que me sacara del sistema la fecha actual y utilizara el año de la fecha actual en la resta.


Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: geeke en 11 Julio 2015, 06:12 am
PD: En el código que puso @crack81, además de que deberías comprobar lo de los meses y días, yo, en vez de poner:

Una solución a esto seria

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. typedef struct
  5. {
  6.    int dia;
  7.    int mes;
  8.    int año;
  9. } fecha;
  10.  
  11. int calcular_edad(fecha datos)
  12. {
  13.    time_t t = time(NULL);
  14.    struct tm tm = *localtime(&t);
  15.  
  16.    int a = ((tm.tm_year + 1900) * 100 + tm.tm_mon + 1) * 100 + tm.tm_mday;
  17.    int b = (datos.año * 100 + datos.mes) * 100 + datos.dia;
  18.  
  19.    return (a - b) / 10000;
  20. }
  21.  
  22. int main(void)
  23. {
  24.    fecha datos;
  25.  
  26.    printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
  27.    scanf("%d/%d/%d",&datos.dia,&datos.mes, &datos.año);
  28.  
  29.    printf("Su edad es %d\n", calcular_edad(datos));
  30.  
  31.    return(0);
  32. }
  33.  

Saludos


Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: engel lex en 11 Julio 2015, 07:36 am
una pequeña recomendación a los que publicaron codigo... si usan c++, usen las librerías del standard de c++ y no de c

Código
  1. #include <cstdio>
  2. #include <ctime>


Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: dragonlady en 11 Julio 2015, 15:00 pm
Hola a todos, muchas gracias por contestar. El único que no entendí mucho fue el

Citar
Código
  1. int calcular_edad(fecha datos)
  2. {
  3.    time_t t = time(NULL);
  4.    struct tm tm = *localtime(&t);
  5.  
  6.    int a = ((tm.tm_year + 1900) * 100 + tm.tm_mon + 1) * 100 + tm.tm_mday;
  7.    int b = (datos.año * 100 + datos.mes) * 100 + datos.dia;
  8.  
  9.    return (a - b) / 10000;
  10. }

Y si... me serviría más poder saber aparte del año si la persona ya cumplió o no, por eso estaría bueno involucrar mes y día, para saber la edad realmente.

Igual lo dejé sencillo con algo que por lo menos pudiese entender, y el problema es que no se bien como arreglar este error. Yo se que no puedo retornar un dato de tipo int si la funcion es de tipo fecha, pero no se como lo puedo arreglar:

Código
  1. fecha calcularEdad()
  2. {
  3.    fecha f = ingresoFechanacimiento();
  4.    int edad = 2015 - f.año;
  5.    return edad;
  6. }

error: incompatible types when assigning to type 'fecha' from type 'int'



Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: crack81 en 11 Julio 2015, 17:29 pm
pues si vas a retonar un int pues cambias el tipo de retorno


Código
  1.    int calcularEdad()
  2.    {
  3.        fecha f = ingresoFechanacimiento();
  4.        int edad = 2015 - f.año;
  5.        return edad;
  6.    }


Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: dragonlady en 11 Julio 2015, 21:39 pm
Hola! Ya intenté y no me funciona eso, me tira toda una serie de errores:


In function 'calcularEdad':|
|809|error: 'fecha' has no member named 'a'|
|809|error: stray '\361' in program|
|809|error: expected ',' or ';' before 'o'|
|808|warning: variable 'f' set but not used [-Wunused-but-set-variable]|



Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: ivancea96 en 11 Julio 2015, 22:37 pm
Código
  1. f.año

Es preferible que no uses eñes, ni acentos. En general, solo usa las letras del alfabeto inglés para nombrar campos, funciones y variables.

Y ahora, para que leas el error:

Citar
|809|error: 'fecha' has no member named 'a'|
|809|error: stray '\361' in program|
|809|error: expected ',' or ';' before 'o'|

El primero, está tomandose lo q escribiste como f.a. La ñ, es el segundo error, "stray \361". El tercer error, dice qe la "o" que hay después de la eñe, pues no tiene sentido ahí. Te dice que esperaba un ';', para acabar la instrucción.


Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: dragonlady en 12 Julio 2015, 17:00 pm
Gracias a todos, ahora si lo solucioné. Sigo con problemas de distracción.




Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: WOLFMANX en 27 Septiembre 2015, 23:58 pm
#include <stdio.h>
#include <time.h>
 
typedef struct
{
    int dia;
    int mes;
    int año;
} fecha;
 
int calcular_edad(fecha datos)
{
    time_t t = time(NULL);
    struct tm tm = *localtime(&t);
 
    int a = ((tm.tm_year + 1900) * 100 + tm.tm_mon + 1) * 100 + tm.tm_mday;
    int b = (datos.año * 100 + datos.mes) * 100 + datos.dia;
 
    return (a - b) / 10000;
}
 
int main(void)
{
    fecha datos;
 
    printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
    scanf("%d/%d/%d",&datos.dia,&datos.mes, &datos.año);
 
    printf("Su edad es %d\n", calcular_edad(datos));
 
    return(0);
}

me gustaria que me ayudaran, este codigo sirvio pero necesito solo utilizarlo con cout y cin por favor


Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: WOLFMANX en 28 Septiembre 2015, 00:00 am
GRACIAS POR EL CODIGO PERO ME AYUDAN UTILIZANDO COUT Y CIN POR FAVOR. GRACIAS

Una solución a esto seria

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. typedef struct
  5. {
  6.    int dia;
  7.    int mes;
  8.    int año;
  9. } fecha;
  10.  
  11. int calcular_edad(fecha datos)
  12. {
  13.    time_t t = time(NULL);
  14.    struct tm tm = *localtime(&t);
  15.  
  16.    int a = ((tm.tm_year + 1900) * 100 + tm.tm_mon + 1) * 100 + tm.tm_mday;
  17.    int b = (datos.año * 100 + datos.mes) * 100 + datos.dia;
  18.  
  19.    return (a - b) / 10000;
  20. }
  21.  
  22. int main(void)
  23. {
  24.    fecha datos;
  25.  
  26.    printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
  27.    scanf("%d/%d/%d",&datos.dia,&datos.mes, &datos.año);
  28.  
  29.    printf("Su edad es %d\n", calcular_edad(datos));
  30.  
  31.    return(0);
  32. }
  33.  

Saludos


Título: Re: calcular funcion edad con funcion fecha de nacimiento
Publicado por: 0xFer en 28 Septiembre 2015, 22:37 pm
GRACIAS POR EL CODIGO PERO ME AYUDAN UTILIZANDO COUT Y CIN POR FAVOR. GRACIAS

Para usar cout y cin tienes que utilizar un espacio de nombres después de los includes pon using namespace std; y también #include <iostream>

Código
  1.  
  2.   cout << "Ingresa Fecha de Nacimiento" << endl;
  3.   cout << "Dia = ";
  4.   cin >> datos.dia;
  5.   .....
  6.  
  7.   cout << "Su edad es " << calcular_edad(datos);
  8.  
  9.