elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Método de clase no funciona - Ayuda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Método de clase no funciona - Ayuda  (Leído 837 veces)
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Método de clase no funciona - Ayuda
« en: 20 Diciembre 2018, 02:11 am »

Buenas, aquí les adjunto el código que hice, la verdad es que no entiendo por qué no devuelve nada, probé dándole un valor entre 1 - 12 y según ese valor retornar "x" string. Peeeero tampoco anduvo, me ayudan por favor?

Código
  1. #include <iostream>
  2. using namespace std;
  3. struct Fecha{
  4. int dd,mm,aa;
  5. };
  6. class Fecha1{
  7. Fecha A;
  8. public:
  9. //A
  10. Fecha1(int _dd,int _mm, int _aa){
  11. A.dd=_dd; A.mm=_mm; A.aa=_aa;
  12. }
  13. //B
  14. int Ver_dd();
  15. int Ver_mm();
  16. int Ver_aa();
  17. //C
  18. int Diferencia_en_anios(Fecha1 _a);
  19. //D
  20. string Signo_zodiacal();
  21. };
  22. int Fecha1:: Ver_dd(){
  23. return A.dd;
  24. }
  25. int Fecha1:: Ver_mm(){
  26. return A.mm;
  27. }
  28. int Fecha1:: Ver_aa(){
  29. return A.aa;
  30. }
  31. int Fecha1::Diferencia_en_anios(Fecha1 _a){
  32. return _a.Ver_aa()-A.aa;
  33. }
  34. /*
  35. Acuario: 20 Enero – 18 Febrero.
  36. Piscis: 19 Febrero – 20 Marzo.
  37. Aries: 21 Marzo – 19 Abril.
  38. Tauro: 20 Abril – 20 Mayo.
  39. Géminis: 21 Mayo – 20 Junio.
  40. Cáncer: 21 Junio – 22 Julio.
  41. Leo: 23 Julio – 22 Agosto.
  42. Virgo: 23 Agosto – 22 Septiembre
  43. Libra: 23 Septiembre - 22 Octubre
  44. Escorpio: 23 Octubre - 21 Noviembre
  45. Sagitario: 22 Noviembre - 21 Diciembre
  46. Capricornio: 22 Diciembre - 19 Enero
  47. */
  48. string Fecha1::Signo_zodiacal(){
  49. string aux;
  50. switch (A.mm){
  51. case 1:
  52. if(A.dd>=20 && A.mm>=1){
  53. if(A.dd<=18 && A.mm<=2){
  54. aux= "Acuario";
  55. }
  56. }
  57. break;
  58. case 2:
  59. if(A.dd>=19 && A.mm>=2){
  60. if(A.dd<=20 && A.mm<=3){
  61. aux= "Piscis";
  62. }
  63. }
  64. break;
  65. case 3:
  66. if(A.dd>=21 && A.mm>=3){
  67. if(A.dd<=19 && A.mm<=4){
  68. aux= "Aries";
  69. }
  70. }
  71. break;
  72. case 4:
  73. if(A.dd>=20 && A.mm>=4){
  74. if(A.dd<=20 && A.mm<=5){
  75. aux= "Tauro";
  76. }
  77. }
  78. break;
  79. case 5:
  80. if(A.dd>=21 && A.mm>=5){
  81. if(A.dd<=20 && A.mm<=6){
  82. aux= "Geminis";
  83. }
  84. }
  85. break;
  86. case 6:
  87. if(A.dd>=21 && A.mm>=6){
  88. if(A.dd<=22 && A.mm<=7){
  89. aux= "Cancer";
  90. }
  91. }
  92. break;
  93. case 7:
  94. if(A.dd>=23 && A.mm>=7){
  95. if(A.dd<=22 && A.mm<=8){
  96. aux= "Leo";
  97. }
  98. }
  99. break;
  100. case 8:
  101. if(A.dd>=23 && A.mm>=8){
  102. if(A.dd<=22 && A.mm<=9){
  103. aux= "Virgo";
  104. }
  105. }
  106. break;
  107. case 9:
  108. if(A.dd>=23 && A.mm>=9){
  109. if(A.dd<=22 && A.mm<=10){
  110. aux= "Libra";
  111. }
  112. }
  113. break;
  114. case 10:
  115. if(A.dd>=23 && A.mm>=10){
  116. if(A.dd<=21 && A.mm<=11){
  117. aux= "Escorpio";
  118. }
  119. }
  120. break;
  121. case 11:
  122. if(A.dd>=22 && A.mm>=11){
  123. if(A.dd<=21 && A.mm<=12){
  124. aux= "Sagitario";
  125. }
  126. }
  127. break;
  128. case 12:
  129. if(A.dd>=22 && A.mm>=12){
  130. if(A.dd<=19 && A.mm<=1){
  131. aux= "Capricornio";
  132. }
  133. }
  134. break;
  135. }
  136. return aux;
  137. }
  138. int main(int argc, char *argv[]) {
  139. Fecha1 A(29,2,1996),B(30,5,2018);
  140. cout<<"Edad: "<<A.Diferencia_en_anios(B)<<endl;
  141. cout<<"Su signo es: "<<A.Signo_zodiacal(); //No muestra el signo......
  142. return 0;
  143. }


« Última modificación: 23 Diciembre 2018, 22:32 pm por Cero++ » En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Método de clase no funciona - Ayuda
« Respuesta #1 en: 20 Diciembre 2018, 03:48 am »

El switch está controlado por un valor de A.mm
Es superfluo hacerlo parte del if que acompaña cada opción
es imposible que el valor sea simultáneamente un valor y además cumpla las condiciones de los if.
.


« Última modificación: 20 Diciembre 2018, 08:30 am por CalgaryCorpus » En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Método de clase no funciona - Ayuda
« Respuesta #2 en: 21 Diciembre 2018, 00:49 am »

El switch está controlado por un valor de A.mm
Es superfluo hacerlo parte del if que acompaña cada opción
es imposible que el valor sea simultáneamente un valor y además cumpla las condiciones de los if.
.


Entiendo, entonces, no debería utilizar el switch? Cómo debería proceder?
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.920


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Método de clase no funciona - Ayuda
« Respuesta #3 en: 21 Diciembre 2018, 15:33 pm »

Entiendo, entonces, no debería utilizar el switch? Cómo debería proceder?

Hola!

Podrías probar quitando de los if's el valor A.mm. Con eso simplificas el código.

Por ejemplo, fíjate el switch, cuando A.mm es 1:

Tu if trata de ver si A.dd es >= a 20, pero también que A.mm sea >= 1. Esto último es True, pero redundante, ya que switch te asegura el valor de A.mm (que es 1).

Lo mismo con el segundo if.

Es más, podrías poner 1 solo if que haga las comparaciones sobre A.dd solamente.

Por ejemplo:

Código
  1. switch (A.mm){
  2. case 1:  //A.mm vale 1, osea mes = Enero
  3. if(A.dd>=20 && A.dd<=18){
  4. aux= "Acuario";
  5. }
  6. break;
  7.  

De esa forma, has simplificado el código y puede ver el error: A.dd jamás podrá ser >= que 20 y <= que 18...  ;)

Lo que deberías hacer es algo como:

Código
  1. switch (A.mm){
  2. case 1:  //A.mm vale 1, osea mes = Enero
  3. if(A.dd>=20){ //Del 20 al final es Acuario
  4. aux= "Acuario";
  5. } else { //Del 1 al 19 es Capricornio
  6. aux= "Capricornio";
  7. }
  8. break;
  9.  

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

MAFUS


Desconectado Desconectado

Mensajes: 1.492



Ver Perfil
Re: Método de clase no funciona - Ayuda
« Respuesta #4 en: 21 Diciembre 2018, 16:00 pm »

Por eso es que necesita los dos meses. En vez de quitar ese if lo que debe hacer es prescindir del switch.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.920


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Método de clase no funciona - Ayuda
« Respuesta #5 en: 21 Diciembre 2018, 16:14 pm »

Por eso es que necesita los dos meses. En vez de quitar ese if lo que debe hacer es prescindir del switch.

Mi sugerencia es en base al criterio de solución que seleccionó. Si quita el switch, va a tener que usar if's con 2 condiciones dobles (mes y año), o bien anidados; lo cual, para mí, es más engorroso.

Pero bueno, cada cual decide cuál es el método que mejor se le adapta a sus necesidades.

Saludos!

PD: No soy desarrollado en C++, sólo sé programar un poco en el mismo.
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Método de clase no funciona - Ayuda
« Respuesta #6 en: 23 Diciembre 2018, 01:01 am »

Hola!

Lo que deberías hacer es algo como:

Código
  1. switch (A.mm){
  2. case 1:  //A.mm vale 1, osea mes = Enero
  3. if(A.dd>=20){ //Del 20 al final es Acuario
  4. aux= "Acuario";
  5. } else { //Del 1 al 19 es Capricornio
  6. aux= "Capricornio";
  7. }
  8. break;
  9.  

Saludos!

Muchisimas gracias!!! Me ha funcionado! Gracias por tomarte la molestia de responder y ayudarme  ;D
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
MAFUS


Desconectado Desconectado

Mensajes: 1.492



Ver Perfil
Re: Método de clase no funciona - Ayuda
« Respuesta #7 en: 23 Diciembre 2018, 02:41 am »

Verás, por ejemplo, Virgo va desde 24 de Agosto a 22 de Septiembre. Por eso es necesario controlar día y mes.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
Cero++

Desconectado Desconectado

Mensajes: 52



Ver Perfil WWW
Re: Método de clase no funciona - Ayuda
« Respuesta #8 en: 23 Diciembre 2018, 22:32 pm »

Verás, por ejemplo, Virgo va desde 24 de Agosto a 22 de Septiembre. Por eso es necesario controlar día y mes.


Pero de hecho, me ha funcionado, aunque no lo probé con todos los signos  ;D
En línea

Código:
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]
MAFUS


Desconectado Desconectado

Mensajes: 1.492



Ver Perfil
Re: Método de clase no funciona - Ayuda
« Respuesta #9 en: 23 Diciembre 2018, 23:21 pm »

Sí, acabo de mirar bien la solución que te han dado y es muy buena.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines