Autor
|
Tema: Duda básica en C++ (Leído 6,062 veces)
|
dorkam
Desconectado
Mensajes: 4
|
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 #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
Mensajes: 1.211
|
Las fechas como las introduces exactamente? Si usas una estructura fecha se me ocurre que uses la clase vector: #include <vector> struct Fecha { int Dia; int Mes; int Anyo; }; //... vector<Fecha> fechas; Fecha Auxiliar; char Respuesta; do { cout<<endl<<endl<<"Introduce un dia para la fecha: "; cin>>Auxiliar.Dia; cout<<"Introduce un mes para la fecha: "; cin>>Auxiliar.Mes; cout<<"Introduce un anyo para la fecha: "; cin>>Auxiliar.Anyo; fechas.push_back(Auxiliar); // Anyado la fecha al vector cout<<"Quiere introducir una nueva fecha? (s/n) "; cin>>Repuesta } 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: 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
|
|
|
|
dorkam
Desconectado
Mensajes: 4
|
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
Mensajes: 1.314
|
.............................................................................. 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:Introduzca dia mes anyo (0 para salir): Dia :12 Mes :3 Anyo :2012 Dia 12 mes 3 y anyo 2012 Datos correctos Introduzca dia mes anyo (0 para salir): Dia :28 Mes :2 Anyo :2000 Dia 28 mes 2 y anyo 2000 Datos correctos Introduzca dia mes anyo (0 para salir): Dia :31 Mes :2 Anyo :2013 Dia 31 mes 2 y anyo 2013 Datos incorrectos Introduzca dia mes anyo (0 para salir): Dia :0 Process returned 0 (0x0) execution time :
#include <iostream> using namespace std; int main() { int a, b, c; do { cout << "Introduzca dia mes anyo (0 para salir):"<<endl; cout <<"Dia :"; cin >> a ; if (a==0) break; cout <<"Mes :"; cin >> b ; cout <<"Anyo :"; cin >> c ; if ((b == 1 || b == 3 || b == 5 || b == 7 || b == 8 || b == 10 || b == 12) && (a > 0 && a <= 31)) { cout << "Dia "<< a<< " mes "<< b<< " y anyo "<< c<< " Datos correctos" << endl; } else { if ((b == 4 || b == 6 || b == 9 || b == 11) && (a > 0 && a <= 30)) { cout << "Dia "<< a<< " mes "<< b<< " y anyo "<< c<< " Datos correctos" << endl; } else { if (b == 2 && a > 0 && a <= 28) { cout << "Dia "<< a<< " mes "<< b<< " y anyo "<< c<< " Datos correctos" << endl; } else { if ((b == 2 && a == 29) && (((c % 4 == 0) && (c % 100 != 0)) || ((c % 4 == 0) && (c % 100 == 0) && (c % 400 == 0)))) { cout << "Dia "<< a<< " mes "<< b<< " y anyo "<< c<< " Datos correctos" << endl; } else { cout << " Dia "<< a<< " mes "<< b<< " y anyo "<< c<< " Datos incorrectos" << endl; } } } } }while (a!=0); return 0; }
Saluditos! .... ..
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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: #include <iostream> using std::cin; using std::cout; using std::endl; #include <string> using std::string; using std::getline; int main() { string linea; while (getline(cin, linea)){ // Algun proceso ... cout << linea << endl; } return 0; }
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
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
¡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! .... .. Creo que lo que pretende es: #include <iostream> #include <sstream> using namespace std; int main() { string linea; stringstream Nuevo; int dia; int mes; int anyo; while (getline(cin, linea)) { Nuevo.str(string(linea)); // Metemos la linea en el stream Nuevo>>dia; Nuevo>>mes; Nuevo>>anyo; cout << dia << " "<<mes<<" "<<anyo<<endl; } return 0; }
PD: Feliz día de Canarias
|
|
« Última modificación: 6 Junio 2013, 17:56 pm por amchacon »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
¡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: 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: Nuevo.str(linea); // Metemos la linea en el stream
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
duda basica
PHP
|
cuerty
|
3
|
2,582
|
17 Agosto 2008, 05:53 am
por coolfrog
|
|
|
Duda muy básica
PHP
|
HJ ~
|
3
|
2,854
|
28 Diciembre 2009, 01:00 am
por jdc
|
|
|
Duda básica
Redes
|
leogtz
|
9
|
5,289
|
1 Marzo 2011, 11:58 am
por madpitbull_99
|
|
|
Duda basica con C#
.NET (C#, VB.NET, ASP)
|
spinaca
|
3
|
1,927
|
7 Julio 2014, 16:45 pm
por plexo
|
|
|
Duda muy básica
Scripting
|
jeanbkn
|
2
|
1,613
|
7 Febrero 2015, 17:45 pm
por Eleкtro
|
|