• Domingo 15 de Diciembre de 2024, 03:53

Autor Tema:  optimizar este codigo  (Leído 2206 veces)

luchojimenez

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
optimizar este codigo
« en: Domingo 27 de Junio de 2010, 22:45 »
0
la verdad  que  navegando por  ahi  hice  un salpicon de  lo  que  encontre  en la web  sobre  el problema d e las  fechas ,este  codigo lo que trata  de  hacer  es decir la edad  en base  ala fecha d e nacimiento, yo utilice  la  fecha  del sistema  como referencia para  sacar la edad(utilice la libreria time.h) , pero  todavia tengo un inconveniente  cuando  la persona  tiene  menos  de  un año quiero que la edad  en meses  sea  limpia  pero todavia he  tenido dificultades , la verdad es  que  el problema  le  invertido bastante  tiempo, me gustaria que  me echaran una manito para darle  el toque  final
Código: C++
  1.  
  2.  
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #include<time.h>
  6. #include<stdio.h>
  7. #include <iostream>
  8.  
  9. using namespace std;
  10.  
  11. struct Time
  12. {
  13.  int d,m,y;
  14. };
  15.  
  16. struct Time horalocal()
  17. {
  18.  struct Time mt;
  19.  struct tm *local;
  20.  time_t t;
  21.  t=time(NULL);
  22.  local=localtime(&t);
  23.  mt.d=local->tm_mday;
  24.  mt.m=local->tm_mon+1;
  25.  mt.y=local->tm_year+1900;
  26.  return mt;
  27. }
  28.  
  29.  
  30. float fechanac(struct Time t)
  31. {
  32.  struct Time h;
  33.  float year;
  34.  
  35.  
  36.  h=horalocal();
  37.  year=h.y-t.y;
  38.  if(h.y-t.y>1)
  39.  {
  40.  if(h.m < t.m)
  41.   year--;
  42.  
  43.  else if(h.m == t.m && h.d < t.d)
  44.   year--;
  45.    
  46. }
  47. else if((h.y-t.y>0)&&(h.y-t.y<=1))
  48. {
  49. if(h.m>t.m)
  50.  
  51. {year=h.m - t.m;
  52. cout<<"ntienes "<<year<<" mesesn";}
  53. else if(t.m>h.m)
  54.  
  55. {year=t.m-h.m;
  56. cout<<"ntienes "<<year<<" mesesn";
  57. }
  58.  
  59. }
  60.  return year;
  61.  
  62. }
  63. void nombre()
  64. {
  65.      system("color 75");
  66.      cout<<"nnn";
  67.      cout<<"                        ==========================="<<endl;
  68.      cout<<"                        =      Programa  Para     ="<<endl;
  69.      cout<<"                        =           Saber         ="<<endl;
  70.      cout<<"                        =          LA Edad        ="<<endl;
  71.      cout<<"                        ==========================="<<endl;
  72.      cout<<"                      By Powered Luis Alfonso Jimenez"<<"nnnn"<<endl;
  73.      system("PAUSE");
  74.      system("cls");    
  75.  }
  76. int main()
  77. {
  78.  char res;
  79.  do
  80.  {
  81.  nombre();
  82.  system("color 74");
  83.  struct Time fech;
  84.  cout<<"nnintroduce el dia en que naciste"<<endl;
  85.  cout<<"==================================="<<endl;    
  86.  cin>>fech.d ;
  87.  cout<<"ahora el mes   (un numero 1-12)"<<endl;
  88.  cout<<"==================================="<<endl;
  89.  cin>>fech.m ;
  90.  cout<<"ahora el anio"<<endl;
  91.  cout<<"==================================="<<endl;
  92.  cin>>fech.y;
  93.    if(fechanac(fech)<1)
  94.    {cout<<"nnTienes "<<fechanac(fech)<<"  meses........nnn"<<endl;}
  95.  if((fechanac(fech)>0)&&(fechanac(fech)<30))
  96.  {cout<<"nnTienes "<<fechanac(fech)<<"  años........nnn"<<endl;}
  97.  else if((fechanac(fech)>30)&&(fechanac(fech)<40))
  98.  {cout<<"nnTienes "<<fechanac(fech)<<"  años..... y estas en el tercer escalon picarooooon...nnn"<<endl;}
  99.  else if((fechanac(fech)>=40)&&(fechanac(fech)<=50))
  100.  {cout<<"nnTienes "<<fechanac(fech)<<"  anios..... y estas en el cuarto escalon picarooooon...n...Todo lo que sube tienen caer jajajajannn"<<endl;}
  101.  else if(fechanac(fech)>=50)
  102.  {cout<<"nnTienes "<<fechanac(fech)<<"  anios..... y estas en la tercera edad picarooooon...n...Perdona que te lo diga pero hueles  camajonnnn"<<endl;}
  103.  getchar();
  104.  cout<<"nnnnn Si deseas continuar into S/N"<<endl;
  105.  cin>>res;
  106.   system("pause");
  107.   system("cls");
  108. }
  109.  while((res=='s')||(res=='S'));
  110.  
  111.  
  112.  return 0;
  113. }
  114.  
  115.  
  116.  

czealt

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: optimizar este codigo
« Respuesta #1 en: Martes 29 de Junio de 2010, 04:06 »
0
Hola, le hice algunos cambios a tu codigo: :comp:
Código: C++
  1.  
  2. #include <cstring> // en C++ equivale a string.h
  3. #include <cstdlib>
  4. #include <ctime>
  5. #include <cstdio>
  6. #include <iostream>
  7.  
  8. using namespace std;
  9.  
  10. struct Time
  11. {
  12.   int d,m,y;
  13. };
  14.  
  15. struct Time horalocal()
  16. {
  17.   struct Time mt;
  18.   struct tm *local;
  19.   time_t t;
  20.   t=time(NULL);
  21.   local=localtime(&t);
  22.   mt.d=local->tm_mday;
  23.   mt.m=local->tm_mon+1;
  24.   mt.y=local->tm_year+1900;
  25.   return mt;
  26. }
  27.  
  28. enum{ANIOS,MESES}; // tipos de valores devueltos por fechanac()
  29. int val_dev;    // almacena el tipo de valor devuelto por fechanac()
  30. float fechanac(struct Time t)
  31. {
  32.   struct Time h;
  33.   float year;
  34.  
  35.   val_dev=ANIOS;
  36.   h=horalocal();
  37.   year=h.y-t.y;
  38.   if(year>1)
  39.   {
  40.     if(h.m < t.m)
  41.       year--;
  42.     else if(h.m == t.m && h.d < t.d)
  43.       year--;
  44.   }
  45.   else if((year>=0)&&(year<=1))
  46.   {
  47.     // calculo de los meses transcurridos
  48.     int meses=h.m-t.m;
  49.     if(year==1)
  50.       meses+=12;
  51.     if(meses<12)
  52.     {
  53.       year=meses;
  54.       val_dev=MESES;
  55.     }
  56.   }
  57.   return year;
  58. }
  59.  
  60. void nombre()
  61. {
  62.   system("color 75");
  63.   cout<<"nnn";
  64.   cout<<"                        ==========================="<<endl;
  65.   cout<<"                        =      Programa  Para     ="<<endl;
  66.   cout<<"                        =           Saber         ="<<endl;
  67.   cout<<"                        =          LA Edad        ="<<endl;
  68.   cout<<"                        ==========================="<<endl;
  69.   cout<<"                      By Powered Luis Alfonso Jimenez"<<"nnnn"<<endl;
  70.   system("PAUSE");
  71.   system("cls");    
  72. }
  73.  
  74. int main()
  75. {
  76.   char res;
  77.   do
  78.   {
  79.     nombre();
  80.     system("color 74");
  81.     struct Time fech;
  82.     cout<<"nnintroduce el dia en que naciste"<<endl;
  83.     cout<<"==================================="<<endl;    
  84.     cin>>fech.d ;
  85.     cout<<"ahora el mes   (un numero 1-12)"<<endl;
  86.     cout<<"==================================="<<endl;
  87.     cin>>fech.m ;
  88.     cout<<"ahora el anio"<<endl;
  89.     cout<<"==================================="<<endl;
  90.     cin>>fech.y;
  91.     float edad=fechanac(fech);
  92.     if(val_dev==MESES)
  93.     {
  94.       cout<<"nnTienes "<<edad<<"  meses........nnn"<<endl;
  95.     }
  96.     else
  97.     {
  98.       cout<<"nnTienes "<<edad<<"  años........";
  99.       if((edad>0)&&(edad<30))
  100.       {
  101.         cout<<"........nnn"<<endl;
  102.       }
  103.       else if((edad>=30)&&(edad<40))
  104.       {
  105.         cout<<" y estas en el tercer escalon picarooooon...nnn"<<endl;
  106.       }
  107.       else if((edad>=40)&&(edad<=50))
  108.       {
  109.         cout<<" y estas en el cuarto escalon picarooooon...n...Todo lo que sube tienen caer jajajajannn"<<endl;
  110.       }
  111.       else if(edad>=50)
  112.       {
  113.         cout<<" y estas en la tercera edad picarooooon...n...Perdona que te lo diga pero hueles  camajonnnn"<<endl;
  114.       }
  115.     }
  116.     getchar();
  117.     cout<<"nnnnn Si deseas continuar into S/N"<<endl;
  118.     cin>>res;
  119.     system("pause");
  120.     system("cls");
  121.   }
  122.   while((res=='s')||(res=='S'));
  123.  
  124.   return 0;
  125. }
  126.  
  127.  

...y creo que ahora ya funciona bien :beer:

luchojimenez

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Re: optimizar este codigo
« Respuesta #2 en: Martes 29 de Junio de 2010, 16:48 »
0
hombre gracias  hermano, eso de las  librerias  no me  lo sabia

luchojimenez

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Re: optimizar este codigo
« Respuesta #3 en: Martes 29 de Junio de 2010, 16:50 »
0
hermano me podria explicar lo que  hizo  con ese  enum{ANIOS,MESES} y  Ese int val_dev

czealt

  • Miembro activo
  • **
  • Mensajes: 28
    • Ver Perfil
Re: optimizar este codigo
« Respuesta #4 en: Miércoles 30 de Junio de 2010, 01:25 »
0
La palabra reservada enum se usa para definir datos del tipo enumerado. Como por ejemplo:

Código: C
  1.  
  2. enum DIA{ Domingo, Lunes, Martes, Miercoles, Jueves, Viernes, Sabado};
  3.  
  4. enum {FALSE, TRUE};
  5.  
  6. enum {NUM1=3, NUM2, NUM3};
  7.  
  8. /*
  9. En el primer caso el compilador asigna por defecto el valor 0 a Domingo, 1 a Lunes, y asi sucesivamente. Lo mismo en el segundo caso. En el tercer ejemplo se asigna el valor 3, 4 y 5 a NUM1, NUM2 Y NUM3 respectivamente. */
  10.  
  11.  

En C las constantes definidas con enum son de tipo int, por consiguiente estas constantes pueden utilizarse en cualquier lugar donde se utilizaria un valor de tipo int, por ejemplo:

Código: C
  1.  
  2. int dia=Lunes;
  3.  
  4.  

Espero haber resuelto tus dudas.  :good:

Saludos.

luchojimenez

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Re: optimizar este codigo
« Respuesta #5 en: Jueves 1 de Julio de 2010, 00:32 »
0
osea  hermano  que  con enum es posible  almacenar una variable  no importa  si esta,esta dentro de  funcion y no se ve  afectada  al parametrizar  y referenciar  la funcion,es posible atraves de  enum devolver mas de  una valor en una funcion de tipo int o float ,chanfle todos los  dias  se aprende algo, estoy adentrandome en este lenguaje  y todos los  dias  aprendo algo nuevo , muchas gracias  hermano por tener  la disponibilidad

luchojimenez

  • Miembro activo
  • **
  • Mensajes: 56
    • Ver Perfil
Re: optimizar este codigo
« Respuesta #6 en: Jueves 1 de Julio de 2010, 00:47 »
0
en ultima enum es  como  un arreglo donde los  nombres seria los nombres  de variables y  el arreglo si no se dice lo contrario comenzaria 0 has ta donde le indiquemos en este caso enum{anios,meses} a anio le correspondia el 0 y  a meses  el 1 es como declarar variables   y asignar valores al tiempo  ,pero como mas  adelante  se le asigna  un valor  variable  toma el  valor variable, meses, pero antes  dijimos que si tm <12 entonces year=meses

douglasloza

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
librería <ctime>
« Respuesta #7 en: Jueves 22 de Julio de 2010, 05:26 »
0
Hola!
Soy relativamente nuevo en la programación en C++, utilizando el Dev-C++... y pues me han pedido que haga un programa que muestre un calendario y estube indagando sobre el tema y al parecer necesito de la librería <ctime> la funcion mktime... pero no tengo ni idea de como utilizarla, he buscado codigos, tutos, ejemplos, etc, etc y no he encontrado nada productivo, bueno productivo si, pero no le entiendo, si alguien me pudiera ayudar se lo agradecería mucho!!
slds!   ;)