Lenguaje C , Ejercicio calcular edad

Veo interesante , crear un apartado dedicado a la programación en C en el blog.

No solo por su utilidad a la hora de crear aplicaciones, sino también como foro de debate a la hora de plantear ejercicios y su debida resolución, para el entendimiento del lenguaje.

Para programa en C es necesario tener conocimiento sobre la sintaxis de  este lenguaje , pero esta característica no es lo único necesario.

1º Necesitaremos un Compilador y un Linkeador, cualidades que emplean diferentes programas en una sola aplicación , ademas … muchas disponibles gratuitamente y son validas para lenguaje C y C++.
Os recomiendo este Dev-C++. cuya pagina web es http://www.bloodshed.net/

2º Un libro sobre programación  C, o un manual en pdf /ebook.

            Os recomiendo este: http://www.sisoft.ucm.es/Manuales/Lenguaje_C.pdf
            Que distribuye los servicios informaticos de la UCM
             (Universidad Complutense de Madrid)

           *Yo utilizo el libro de Luis Joyanes
           “C, algoritmos ,programación y estructuras de datos”de la editorial  SCHAUM (muy  recomendado).

3º Lápiz , Papel y paciencia.

Ejercicio: (Calcular edad):

Escribir un programa que recibiendo como entrada 2 datos de fecha en formato dia (1 a 31) , mes (1 a 12) , y año (entero de cuatro dígitos) siendo fecha de nacimiento y fecha actual dichos datos ,calcule la edad en formato “Años” , siendo el calculo para una edad adulta,  y en “Meses / Días” si tuviera menos de 1 año ,en caso de calcular la edad de un bebé.

==========================================================

Propongo el mio, como ejercicio resuelto:


#include (stdio.h) 
#include (stdlib.h)
#include (conio2.h)
//crear tabla datos "fecha"
typedef struct {
        int dia;
        int mes;
        int anyo;
        }fecha;
int main(int argc, char *argv[])
{
    //variables
   
    int Edad;
    int error=0;
    fecha Fnacimiento;
    fecha Factual;
    fecha Fedad;
 //pantalla presentacion
//ESTRUCTURA VISIBLE - PEDIR FECHAS
    clrscr ();
    gotoxy (2,2);
    printf ("Introducir - Fecha de Nacimiento :");
    gotoxy (2,4);
    printf ("Introducir - Fecha Actual : \n\n\n\n\n\n");

    //Pedir fecha de nacimiento en Fecha de Nacimiento
             gotoxy (37,2);
             scanf (" %d" ,&Fnacimiento.dia);
             gotoxy (39,2);
             printf ("/");
             gotoxy (40,2);
             scanf (" %d" ,&Fnacimiento.mes);
             gotoxy (42,2);
             printf ("/");
             gotoxy (43,2);
             scanf (" %d" ,&Fnacimiento.anyo);
             //comprobar que este sea correcta la introduccion
             if (Fnacimiento.mes12)
                             error=1;
            else if (Fnacimiento.dia31)
                             error=1;
                             else
                            //comprobar dia en mes de 30 dias
                              switch (Fnacimiento.mes) {
                               case 4:
                               case 6:
                               case 9:
                               case 11:     
                               if (Fnacimiento.dia>30)
                                   error=1;
                                   break;
                             //comprobar Febrero
                                         case 2:
                                         if (Fnacimiento.dia>28)
                                          error=1;
                                          break;
                                          }
  
  //Pedir fecha de actual en Fecha de Actual
             gotoxy (30,4);
             scanf (" %d" ,&Factual.dia);
             gotoxy (32,4);
             printf ("/");
             gotoxy (33,4);
             scanf (" %d" ,&Factual.mes);
             gotoxy (35,4);
             printf ("/");
             gotoxy (36,4);
             scanf (" %d" ,&Factual.anyo);
             //comprobar que este sea correcta la introduccion
             if (Factual.mes12)
                             error=1;
            else if (Factual.dia31)
                             error=1;
                             else
                             
                             //comprobar dia en mes de 30 dias
                              switch (Factual.mes) {
                               case 4:
                               case 6:
                               case 9:
                               case 11:     
                               if (Factual.dia>30)
                                   error=1;
                                   break;
                             //comprobar Febrero
                                         case 2:
                                         if (Factual.dia>28)
                                          error=1;
                                          break;
                                          }
//FIN ESTRUCTURA VISIBLE PEDIR FECHAS
      
    Fedad.dia=Factual.dia-Fnacimiento.dia;
    Fedad.mes=Factual.mes-Fnacimiento.mes;
    Fedad.anyo=Factual.anyo-Fnacimiento.anyo;
 

//si es un Bebe ...años menor1



if (Factual.anyo-Fnacimiento.anyo==0) {
       if (Factual.dia-Fnacimiento.dia<0); 
                       switch (Fnacimiento.mes){
                                     case '4':
                                     case '6':
                                     case '9':
                                     case '11':
                                     Fedad.mes--,Fedad.dia=Fedad.dia+30;
                                     break;
                                     case '2':
                                     Fedad.mes--,Fedad.dia=Fedad.dia+28;
                                     break;
                                     }
                                      (Fedad.mes--,(Fedad.dia=Fedad.dia+31));
              
      printf ("\n La edad es ...: %d Meses / %d Dias \n" ,Fedad.mes,Fedad.dia);
      }else 
      printf ("\n La edad es ...: %d  Anyos  \n ",Factual.anyo-Fnacimiento.anyo);

  system("PAUSE");
  return 0;
}
  

3 comentarios to “Lenguaje C , Ejercicio calcular edad”

  1. Rixolo Says:

    Para completarlo 100% correctamente , abría que añadirle la función año Bisiesto.
    Que se compone de comprobar que el mes de febrero del año que introducimos si es de 28 o 29 dias , dependiendo de si es bisiesto o no.

    Un año es bisiesto si es divisible entre 4, excepto el último de cada siglo (aquel divisible por 100), salvo que este último sea divisible por 400.

    Saludos!

  2. Rixolo Says:

    La función Bisiesto quedaría algo asi:

    //funcion bisiesto

    int Bisiesto(int anyo)
    {
    int error=0;
    if ( ((anyo%4==0) && (anyo%100!=0) || (anyo%400==0) )
    error=0;
    else
    error=1;
    return error;
    }

  3. Rixolo Says:

    Ya le he encontrado algunos “flecos” por definir mejor , para perfeccionarlo y así poder usarlo mas adelante o incluso convertirlo en “libreria” propia, tipo (calculafechas.h)para poder usar mas adelante esta función,”calcular edad”.

    Uno de esos “flecos” por ejemplo , es que depende de algunas fechas introducidas , si coincide se da el caso que el programa muestra… X años, X meses y 31 dias…
    Para corregirlo , debo añadirle la función de:” si resultado dias es “==31”, “dias==0 ,meses++”.

    Saludos!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: