Programación General > C/C++
optimizar este codigo
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
[#] Página Siguiente
Ir a la versión completa