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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda básica en C++
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda básica en C++  (Leído 6,062 veces)
dorkam

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Duda básica en C++
« en: 6 Junio 2013, 02:55 am »

Hola, estoy empezando a aprender algo de C++, tengo que hacer un programa en el que se inserten un número INDETERMINADO de fechas y te diga si las fechas son correctas o no.

El programa que determina si la fecha es correcta o no ya lo tengo creado, el problema está en que solo está creado para leer una fecha, es decir 3 enteros, pero el programa deberia leer un numero indeterminado de fechas y mostrar el resultado de cada una de ellas.

A ver si alguien puede explicarme como solucionarlo.

Aquí les dejo el codigo para que vean lo que tengo hasta ahora

Código:
#include <iostream>
using namespace std;

int main() {
   int a, b, c;
   cin >> a >> b >> c;
if ((b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 ||
b == 12) && (a > 0 && a <= 31)) {
cout << "Correct Date" << endl;
} else {
if ((b == 4 || b == 6 || b == 9 || b == 11) &&
(a > 0 && a <= 30)) {
cout << "Correct Date" << endl;
} else {
if (b == 2 && a > 0 && a <= 28) {
cout << "Correct Date" << endl;
} else {
if ((b == 2 && a == 29) && (((c % 4 == 0) &&
(c % 100 != 0)) || ((c % 4 == 0) &&
(c % 100 == 0) && (c % 400 == 0)))) {
cout << "Correct Date" << endl;
} else {
cout << "Incorrect Date" << endl;
}
}
}


   }
   }


Gracias


« Última modificación: 6 Junio 2013, 03:13 am por dorkam » En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda básica en C++
« Respuesta #1 en: 6 Junio 2013, 03:20 am »

Las fechas como las introduces exactamente?

Si usas una estructura fecha se me ocurre que uses la clase vector:

Código
  1. #include <vector>
  2.  
  3. struct Fecha
  4. {
  5. int Dia;
  6. int Mes;
  7. int Anyo;
  8. };
  9.  
  10. //...
  11.  
  12. vector<Fecha> fechas;
  13.  
  14. Fecha Auxiliar;
  15. char Respuesta;
  16.  
  17. do
  18. {
  19.  cout<<endl<<endl<<"Introduce un dia para la fecha: ";
  20.  cin>>Auxiliar.Dia;
  21.  cout<<"Introduce un mes para la fecha: ";
  22.  cin>>Auxiliar.Mes;
  23.  cout<<"Introduce un anyo para la fecha: ";
  24.  cin>>Auxiliar.Anyo;
  25.  
  26.  fechas.push_back(Auxiliar); // Anyado la fecha al vector
  27.  
  28.  cout<<"Quiere introducir una nueva fecha? (s/n) ";
  29.  cin>>Repuesta
  30. } while (Respuesta == 'n');

El vector puede usarse como un array normal (fecha[0] para el elemento 0, fecha[1] para el elemento 1).

Puedes obtener el tamanyo del vector usando el método interno size:

Código
  1. fecha.size()

Documentación de la clase vector:
http://www.cplusplus.com/reference/vector/vector/


EDITO:

Vale ya he visto tú edite con el código. Creo que te falta un poco de nivel antes de empezar con lo que te he dicho (aun no sabes usar un for por lo que veo).

Repasate y aprendete todos los elementos del lenguaje.


« Última modificación: 6 Junio 2013, 03:22 am por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
dorkam

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Duda básica en C++
« Respuesta #2 en: 6 Junio 2013, 03:28 am »

Como digo, recien estoy empezando con esto de la programacion y este es un ejercicio judge.org en el que enviando el archivo .cpp te dice si el programa esta bien o no...

el ejercicio dice que el input seria:

30 10 2008
17 04 2012
15 08 1885
...

y segun el numero de fechas introducido debe poner de cada una si es correcta o no.

La clase vector aún no he visto nada, este ejercicio es para trabajar con los if/else pero no se como hacer que pueda tomar 1 fecha, 2 fechas o n fechas...

Gracias por la respuesta
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda básica en C++
« Respuesta #3 en: 6 Junio 2013, 09:57 am »

..............................................................................
 pero el programa deberia leer un numero indeterminado de fechas y mostrar el resultado de cada una de ellas.


Supongo que te refieres a poder introducir sucesivamente varias fechas, indicando en cada caso sin son correctas o no, ya que para guardarlas habría que hacer uso, como mínimo, de arrays y tú solo quieres if/else.

Pero para lograr tu objetivo se necesito un bucle que repita la operación de introducir datos, un for o while o do-while. Yo me he decantado por esta última opción. Además si hay un bucle debe introducirse la opción de salir.

Una salida como la que quieres podría ser:


Código
  1. Introduzca dia mes anyo (0 para salir):
  2. Dia :12
  3. Mes :3
  4. Anyo :2012
  5. Dia 12 mes 3 y anyo 2012 Datos correctos
  6. Introduzca dia mes anyo (0 para salir):
  7. Dia :28
  8. Mes :2
  9. Anyo :2000
  10. Dia 28 mes 2 y anyo 2000 Datos correctos
  11. Introduzca dia mes anyo (0 para salir):
  12. Dia :31
  13. Mes :2
  14. Anyo :2013
  15. Dia 31 mes 2 y anyo 2013 Datos incorrectos
  16. Introduzca dia mes anyo (0 para salir):
  17. Dia :0
  18.  
  19. Process returned 0 (0x0)   execution time :

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main() {
  5.   int a, b, c;
  6.   do
  7.   {
  8.    cout << "Introduzca dia mes anyo (0 para salir):"<<endl;
  9.    cout <<"Dia :"; cin >> a ;
  10.    if (a==0)
  11.        break;
  12.    cout <<"Mes :"; cin >> b ;
  13.    cout <<"Anyo :"; cin >> c ;
  14. if ((b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 ||
  15. b == 12) && (a > 0 && a <= 31)) {
  16. cout << "Dia "<< a<<  " mes "<< b<< " y anyo "<< c<< " Datos correctos" << endl;
  17. } else {
  18. if ((b == 4 || b == 6 || b == 9 || b == 11) &&
  19. (a > 0 && a <= 30)) {
  20. cout << "Dia "<< a<<  " mes "<< b<< " y anyo "<< c<< " Datos correctos" << endl;
  21. } else {
  22. if (b == 2 && a > 0 && a <= 28) {
  23. cout << "Dia "<< a<<  " mes "<< b<< " y anyo "<< c<< " Datos correctos" << endl;
  24. } else {
  25. if ((b == 2 && a == 29) && (((c % 4 == 0) &&
  26. (c % 100 != 0)) || ((c % 4 == 0) &&
  27. (c % 100 == 0) && (c % 400 == 0)))) {
  28. cout << "Dia "<< a<<  " mes "<< b<< " y anyo "<< c<< " Datos correctos" << endl;
  29. } else {
  30. cout << " Dia "<< a<<  " mes "<< b<< " y anyo "<< c<< " Datos incorrectos" << endl;
  31.  
  32. }
  33. }
  34. }
  35.  
  36.  
  37.   }
  38.   }while (a!=0);
  39.    return 0;
  40. }
  41.  

Saluditos! .... ..
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Duda básica en C++
« Respuesta #4 en: 6 Junio 2013, 15:06 pm »

Como digo, recien estoy empezando con esto de la programacion y este es un ejercicio judge.org en el que enviando el archivo .cpp te dice si el programa esta bien o no...

el ejercicio dice que el input seria:

30 10 2008
17 04 2012
15 08 1885
...

y segun el numero de fechas introducido debe poner de cada una si es correcta o no.
Debes leer linea por linea la entrada estándar. Aquí lo mas sencillo es utilizar la clase string y la función getline, un ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::string;
  8. using std::getline;
  9.  
  10. int main()
  11. {
  12.   string linea;
  13.  
  14.   while (getline(cin, linea)){
  15.      // Algun proceso ...
  16.      cout << linea << endl;
  17.   }
  18.  
  19.   return 0;
  20. }

Cada linea debes procesarla, primero extraes de esta tres enteros (por ejemplo utilizando la clase stringstream) y validas estos mediante tu función. Si cualquiera de los dos pasos falla la fecha no es valida, caso contrario lo es.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda básica en C++
« Respuesta #5 en: 6 Junio 2013, 17:15 pm »


Cada linea debes procesarla, primero extraes de esta tres enteros (por ejemplo utilizando la clase stringstream) y validas estos mediante tu función. Si cualquiera de los dos pasos falla la fecha no es valida, caso contrario lo es.


¡Uffff!, que fuerte. La idea es muy interesante, pero ¿podrías orientarme en la función a emplear para dicha extracción?. Te aseguro que la busco pero no la encuentro. Gracias de antemano.

Saluditos! .... ..

Por el día de Canarias
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda básica en C++
« Respuesta #6 en: 6 Junio 2013, 17:54 pm »

¡Uffff!, que fuerte. La idea es muy interesante, pero ¿podrías orientarme en la función a emplear para dicha extracción?. Te aseguro que la busco pero no la encuentro. Gracias de antemano.

Saluditos! .... ..

Por el día de Canarias
Creo que lo que pretende es:

Código
  1. #include <iostream>
  2. #include <sstream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    string linea;
  9.    stringstream Nuevo;
  10.    int dia;
  11.    int mes;
  12.    int anyo;
  13.  
  14.    while (getline(cin, linea))
  15.    {
  16.        Nuevo.str(string(linea)); // Metemos la linea en el stream
  17.  
  18.        Nuevo>>dia;
  19.        Nuevo>>mes;
  20.        Nuevo>>anyo;
  21.  
  22.        cout << dia << " "<<mes<<" "<<anyo<<endl;
  23.    }
  24.  
  25.    return 0;
  26. }

PD: Feliz día de Canarias  ;-)
« Última modificación: 6 Junio 2013, 17:56 pm por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda básica en C++
« Respuesta #7 en: 6 Junio 2013, 18:16 pm »

Creo que lo que pretende es:
....................................

PD: Feliz día de Canarias  ;-)

Gracias mil "maestro", nada como un ejemplo para los cortitos de vista como yo.  ;-) ;-) ;-)

¡Ya me he hecho un File con los consejitos de mi colegüita amchacon!.


Saluditos! .... ..

En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Duda básica en C++
« Respuesta #8 en: 6 Junio 2013, 18:32 pm »

¡Ya me he hecho un File con los consejitos de mi colegüita amchacon!.[/size]
¡He ascendido! Ya tengo mi propio archivo y todo  ;-)

Una anotación, en esta linea:

Código
  1. Nuevo.str(string(linea)); // Metemos la linea en el stream

Dado que linea es un string y no un char*. Se puede eliminar el constructor de string:

Código
  1. Nuevo.str(linea); // Metemos la linea en el stream
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Duda básica en C++
« Respuesta #9 en: 6 Junio 2013, 18:58 pm »


En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda basica
PHP
cuerty 3 2,582 Último mensaje 17 Agosto 2008, 05:53 am
por coolfrog
Duda muy básica
PHP
HJ ~ 3 2,854 Último mensaje 28 Diciembre 2009, 01:00 am
por jdc
Duda básica
Redes
leogtz 9 5,289 Último mensaje 1 Marzo 2011, 11:58 am
por madpitbull_99
Duda basica con C#
.NET (C#, VB.NET, ASP)
spinaca 3 1,927 Último mensaje 7 Julio 2014, 16:45 pm
por plexo
Duda muy básica
Scripting
jeanbkn 2 1,613 Último mensaje 7 Febrero 2015, 17:45 pm
por Eleкtro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines