Programación General > C/C++

 optimizar este codigo

(1/2) > >>

luchojimenez:
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++ ---  #include <string.h> #include <stdlib.h> #include<time.h>#include<stdio.h>#include <iostream> using namespace std; struct Time {  int d,m,y; };  struct Time horalocal() {  struct Time mt;  struct tm *local;  time_t t;  t=time(NULL);  local=localtime(&t);  mt.d=local->tm_mday;  mt.m=local->tm_mon+1;  mt.y=local->tm_year+1900;  return mt; }   float fechanac(struct Time t) {  struct Time h;  float year;   h=horalocal();  year=h.y-t.y;  if(h.y-t.y>1) { if(h.m < t.m)   year--;    else if(h.m == t.m && h.d < t.d)   year--;   }else if((h.y-t.y>0)&&(h.y-t.y<=1)){if(h.m>t.m) {year=h.m - t.m;cout<<"ntienes "<<year<<" mesesn";}else if(t.m>h.m) {year=t.m-h.m;cout<<"ntienes "<<year<<" mesesn";} } return year;  } void nombre(){     system("color 75");     cout<<"nnn";     cout<<"                        ==========================="<<endl;     cout<<"                        =      Programa  Para     ="<<endl;     cout<<"                        =           Saber         ="<<endl;     cout<<"                        =          LA Edad        ="<<endl;     cout<<"                        ==========================="<<endl;     cout<<"                      By Powered Luis Alfonso Jimenez"<<"nnnn"<<endl;     system("PAUSE");      system("cls");     }int main() {  char res; do { nombre(); system("color 74"); struct Time fech; cout<<"nnintroduce el dia en que naciste"<<endl; cout<<"==================================="<<endl;     cin>>fech.d ;  cout<<"ahora el mes   (un numero 1-12)"<<endl; cout<<"==================================="<<endl;  cin>>fech.m ; cout<<"ahora el anio"<<endl; cout<<"==================================="<<endl; cin>>fech.y;   if(fechanac(fech)<1)   {cout<<"nnTienes "<<fechanac(fech)<<"  meses........nnn"<<endl;} if((fechanac(fech)>0)&&(fechanac(fech)<30)) {cout<<"nnTienes "<<fechanac(fech)<<"  años........nnn"<<endl;} else if((fechanac(fech)>30)&&(fechanac(fech)<40)) {cout<<"nnTienes "<<fechanac(fech)<<"  años..... y estas en el tercer escalon picarooooon...nnn"<<endl;} else if((fechanac(fech)>=40)&&(fechanac(fech)<=50)) {cout<<"nnTienes "<<fechanac(fech)<<"  anios..... y estas en el cuarto escalon picarooooon...n...Todo lo que sube tienen caer jajajajannn"<<endl;} else if(fechanac(fech)>=50) {cout<<"nnTienes "<<fechanac(fech)<<"  anios..... y estas en la tercera edad picarooooon...n...Perdona que te lo diga pero hueles  camajonnnn"<<endl;} getchar(); cout<<"nnnnn Si deseas continuar into S/N"<<endl; cin>>res;  system("pause");   system("cls");} while((res=='s')||(res=='S'));   return 0; }    

czealt:
Hola, le hice algunos cambios a tu codigo: :comp:

--- Código: C++ --- #include <cstring> // en C++ equivale a string.h#include <cstdlib>#include <ctime>#include <cstdio>#include <iostream> using namespace std; struct Time {   int d,m,y;};  struct Time horalocal() {   struct Time mt;   struct tm *local;   time_t t;   t=time(NULL);   local=localtime(&t);   mt.d=local->tm_mday;   mt.m=local->tm_mon+1;   mt.y=local->tm_year+1900;   return mt; }  enum{ANIOS,MESES}; // tipos de valores devueltos por fechanac()int val_dev;    // almacena el tipo de valor devuelto por fechanac()float fechanac(struct Time t) {   struct Time h;   float year;    val_dev=ANIOS;  h=horalocal();   year=h.y-t.y;   if(year>1)  {    if(h.m < t.m)       year--;    else if(h.m == t.m && h.d < t.d)       year--;  }  else if((year>=0)&&(year<=1))  {    // calculo de los meses transcurridos    int meses=h.m-t.m;    if(year==1)      meses+=12;    if(meses<12)    {      year=meses;      val_dev=MESES;    }  }  return year;} void nombre(){  system("color 75");  cout<<"nnn";  cout<<"                        ==========================="<<endl;  cout<<"                        =      Programa  Para     ="<<endl;  cout<<"                        =           Saber         ="<<endl;  cout<<"                        =          LA Edad        ="<<endl;  cout<<"                        ==========================="<<endl;  cout<<"                      By Powered Luis Alfonso Jimenez"<<"nnnn"<<endl;  system("PAUSE");   system("cls");    } int main() {   char res;  do  {    nombre();    system("color 74");    struct Time fech;    cout<<"nnintroduce el dia en que naciste"<<endl;    cout<<"==================================="<<endl;        cin>>fech.d ;     cout<<"ahora el mes   (un numero 1-12)"<<endl;    cout<<"==================================="<<endl;     cin>>fech.m ;    cout<<"ahora el anio"<<endl;    cout<<"==================================="<<endl;    cin>>fech.y;    float edad=fechanac(fech);    if(val_dev==MESES)    {      cout<<"nnTienes "<<edad<<"  meses........nnn"<<endl;    }    else    {      cout<<"nnTienes "<<edad<<"  años........";      if((edad>0)&&(edad<30))      {        cout<<"........nnn"<<endl;      }      else if((edad>=30)&&(edad<40))      {        cout<<" y estas en el tercer escalon picarooooon...nnn"<<endl;      }      else if((edad>=40)&&(edad<=50))      {        cout<<" y estas en el cuarto escalon picarooooon...n...Todo lo que sube tienen caer jajajajannn"<<endl;      }      else if(edad>=50)      {        cout<<" y estas en la tercera edad picarooooon...n...Perdona que te lo diga pero hueles  camajonnnn"<<endl;      }    }    getchar();    cout<<"nnnnn Si deseas continuar into S/N"<<endl;    cin>>res;    system("pause");    system("cls");  }  while((res=='s')||(res=='S'));    return 0; }  
...y creo que ahora ya funciona bien :beer:

luchojimenez:
hombre gracias  hermano, eso de las  librerias  no me  lo sabia

luchojimenez:
hermano me podria explicar lo que  hizo  con ese  enum{ANIOS,MESES} y  Ese int val_dev

czealt:
La palabra reservada enum se usa para definir datos del tipo enumerado. Como por ejemplo:


--- Código: C --- enum DIA{ Domingo, Lunes, Martes, Miercoles, Jueves, Viernes, Sabado}; enum {FALSE, TRUE}; enum {NUM1=3, NUM2, NUM3}; /*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. */  
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 --- int dia=Lunes;  
Espero haber resuelto tus dudas.  :good:

Saludos.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa