calcular funcion edad con funcion fecha de nacimiento

Iniciado por dragonlady, 10 Julio 2015, 21:40 PM

0 Miembros y 1 Visitante están viendo este tema.

dragonlady

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í:

fecha ingresoFechanacimiento()
{
    fecha fechanac;
    printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
    scanf("%d/%d/%d",&fechanac.dia,&fechanac.mes, &fechanac.año);
    return fechanac;
}


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!

crack81

te dejo este ejemplo, no es la mejor implementacion pero creo que es lo que andas buscando.


#include <stdio.h>

typedef struct Fecha_Struct{
  int dia;
  int mes;
  int año;
}Fecha;

Fecha ingresoFechanacimiento(void){
    Fecha fechanac;
    printf("\nIngrese Fecha de Nacimiento dd/mm/aaaa: ");
    scanf("%d %d %d",&fechanac.dia,&fechanac.mes, &fechanac.año);
    return fechanac;
}

void calcularEdad(void){

    Fecha f=ingresoFechanacimiento();
    int edad=2015-f.año;
    printf("su edad es %d",edad);
}

int main()
{
    calcularEdad();

    printf("\npresione una tecla para cerrar");
    getchar();
    getchar();
    return 0;
}
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

DarK_FirefoX

@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:

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.

geeke

#3
Cita de: DarK_FirefoX en 11 Julio 2015, 03:07 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 (cpp) [Seleccionar]
#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);
}


Saludos

engel lex

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 (cpp) [Seleccionar]
#include <cstdio>
#include <ctime>
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

dragonlady

Hola a todos, muchas gracias por contestar. El único que no entendí mucho fue el

Citarint 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;
}

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:

fecha calcularEdad()
{
   fecha f = ingresoFechanacimiento();
   int edad = 2015 - f.año;
   return edad;
}


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


crack81

pues si vas a retonar un int pues cambias el tipo de retorno


    int calcularEdad()
    {
        fecha f = ingresoFechanacimiento();
        int edad = 2015 - f.año;
        return edad;
    }
Si C/C++ es el padre de los lenguajes entonces ASM es dios.

dragonlady

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]|


ivancea96

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.

dragonlady

Gracias a todos, ahora si lo solucioné. Sigo con problemas de distracción.