Autor
|
Tema: RETOS C++ (Leído 56,094 veces)
|
ankora45
Desconectado
Mensajes: 52
|
ya esta arreglado xD era un error en las operaciones siento que el codigo sea tan largo xD pero =mente vale jaja #include <iostream> using namespace std; int main() { int mesn; int mes; int dian; int dia; cout<<"introduce el mes al que estamos "<<endl; cin>>mes; cout<<"introduce el dia en el que estamos"<<endl; cin>>dia; cout<<"introduce el mes en el que naciste "<<endl; cin>>mesn; cout<<"introduce el dia que nacistes "<<endl; cin>>dian; int mm = mesn-mes; int mmm = mes-mesn; int dd = 30*mm+dian-dia; int dd2 = 30*mm+dia-dian; int ddd = 30*mmm-dia-dian; int ddd2 = 30*mmm-dian-dia; if (mesn>mes) { if (dian>dia) { cout<<"te quedan "<<mesn-mes<<" meses o "<<dd<<" dias o "<<dd/7<<" semanas para tu cumple"<<endl; } else { cout<<"te quedan "<<mesn-mes<<" meses o "<<dd2<<" dias o "<<dd2/7<<" semanas para tu cumple"<<endl; } } else { if (dian>dia) { cout<<"te quedan "<<mes-mesn+12<<" meses o "<<ddd<<" dias o "<<ddd/7<<" semanas para tu cumple"<<endl; } else { cout<<"te quedan "<<mesn-mes+12<<" meses o "<<ddd2<<" dias o "<<ddd2/7<<" semanas para tu cumple"<<endl; } } return 0; }
espero mis pp con ilu jaja
|
|
« Última modificación: 2 Octubre 2012, 14:33 pm por Eternal Idol 7D »
|
En línea
|
Hay dos cosas infinitas en este mundo, el universo y la estupidez humana, y de la primera no estoy muy seguro
|
|
|
overxfl0w13
|
RETO 10: #include <iostream> using namespace std; int main(int argc,char* argv) { string palabra,invertida=""; cout << "Inserta la palabra a invertir" << endl; cin >> palabra; for(int x = palabra.length()-1;x>=0;x--) { invertida = invertida + palabra[x]; } cout << invertida << endl; return 0; }
RETO 1 #include <iostream> #include <string.h> using namespace std; int main() { char palabra[100]; cin.getline(palabra,100); cout << strlen(palabra) << endl; return 0; }
RETO 2 #include <fstream> #include <iostream> using namespace std; int main(int argc, char* argv) { ifstream archivo("archivo.txt"); string texto; while(!archivo.eof()) { getline(archivo,texto); cout << texto << endl; } archivo.close(); return 0; }
RETO 3 #include <iostream> using namespace std; int main(int argc, char* argv) { int numeros[3]; cout << "Inserta 4 numeros" << endl; cin >> numeros[0] >> numeros[1] >> numeros[2] >> numeros[3]; if(numeros[0] > numeros[1] && numeros[0] > numeros[2] && numeros[0] > numeros[3]) { cout << "El mayor es: " << numeros[0] << endl; } else { if(numeros[1] > numeros[0] && numeros[1] > numeros[2] && numeros[1] > numeros[3]) { cout << "El mayor es: " << numeros[1] << endl; } else { if(numeros[2] > numeros[0] && numeros[2] > numeros[1] && numeros[2] > numeros[3]) { cout << "El mayor es: " << numeros[2] << endl; } else { if(numeros[3] > numeros[0] && numeros[3] > numeros[2] && numeros[3] > numeros[1]) { cout << "El mayor es: " << numeros[3] << endl; } } } } return 0; }
RETO 11 #include <iostream> #include <time.h> using namespace std; int main(int argc,char* argv) { int mesNacimiento,diaNacimiento; time_t fecha; struct tm *datos; time(&fecha); datos = localtime(&fecha); cout << "Inserta el mes y el dia de nacimiento separados por espacio" << endl; cin >> mesNacimiento >> diaNacimiento; if((mesNacimiento - (datos->tm_mon+1)) < 0) { cout << "Los meses que quedan para tu cumplea\xA4os son: " << (mesNacimiento - (datos->tm_mon+1)) + 12 << " los dias: " << ((mesNacimiento-(datos->tm_mon+1)) + 12) * 30 << " y las semanas: " << ((mesNacimiento-(datos->tm_mon+1)) + 12) * 4 << endl; } else { cout << "Los meses que quedan para tu cumplea\xA4os son: " << mesNacimiento - (datos->tm_mon+1) << " los dias: " << (mesNacimiento-(datos->tm_mon+1)) * 30 << " y las semanas: " << (mesNacimiento-(datos->tm_mon+1)) * 4 ; } return 0; }
|
|
« Última modificación: 29 Septiembre 2012, 22:14 pm por overxfl0w13 »
|
En línea
|
[/url]
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
11. Lo he probado y me funciona. De todas formas no he probado todos los casos (es imposible, o me lo parece a mi). Si encontrais algun error en el codigo u os falla para alguna fecha avisad. ¡Saludos! ¡Ah! No he puesto muchos comentarios. Ahora repaso el codigo y añado los comentarios que crea que faltan para que el codigo sea claro o seguible. ¡Saludos! #include <iostream> #include <ctime> #define bisiesto(X) (((!((X) % 4)) && ((X) % 100)) || ((!((X) % 100)) && (!((X) % 400)))) using namespace std; class Fecha { public: Fecha(); Fecha(int dia, int mes, int anio); Fecha(const Fecha &original); bool set(int dia, int mes, int anio); bool setD(int dia); bool setM(int mes); bool setA(int anio); int getD() const; int getM() const; int getA() const; //calcula la diferencia en dias entre la fehca mayo y la menor friend unsigned long dif(Fecha &f1, Fecha &f2); //compara fechas -1 si la primera es menor 0 si son iguales y 1 si la segunda es mayor friend int cmp(Fecha &f1, Fecha &f2); private: //calcula los dias hasta el año cero (si anio < 0) o desde el año cero (si anio >= 0) long int dias() const; int dia; int mes; int anio; }; Fecha::Fecha() { //struct proporcionado por ctime para manejar fechas struct tm *fecha; //tipo de dato definido en ctime para manejar fechas time_t t; t = time(NULL); fecha = localtime(&t); dia = fecha->tm_mday; mes = fecha->tm_mon + 1; //0 <= tm_mon <= 11 anio = fecha->tm_year + 1900; //tm_year es medido desde 1900 } Fecha::Fecha(int d, int m, int a) { int dias[] = {31,28,31,30,31,30,31,31,30,31,30,31}; anio = a; if(m < 1 || m > 12) m = 1; if(m == 2) { if(d > 29) d = 1; if(d == 29 && !bisiesto(anio)) d = 1; } else if(d > dias[m - 1]) d = 1; mes = m; dia = d; } Fecha::Fecha(const Fecha &original) { this->dia = original.dia; this->mes = original.mes; this->anio = original.anio; } bool Fecha::set(int d, int m, int a) { //copia miembro a miembro (no hay problemas ya que no hay punteros) *this = Fecha(d,m,a); return true; } bool Fecha::setD(int d) { int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(d < 1) return false; if(mes == 2) { if(d > 29) return false; if(d == 29 && !bisiesto(anio)) return false; } else if(d > diasmes[mes - 1]) return false; dia = d; return true; } bool Fecha::setM(int m) { int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31}; if(m < 1 || m > 12) return false; if(m == 2) { if(dia > 29) return false; if(dia == 29 && !bisiesto(anio)) return false; } else if(dia > diasmes[m - 1]) return false; mes = m; return true; } bool Fecha::setA(int a) { if(mes == 2 && dia == 29 && !bisiesto(a)) return false; anio = a; return true; } int Fecha::getD() const { return dia; } int Fecha::getM() const { return mes; } int Fecha::getA() const { return anio; } unsigned long dif(Fecha &f1, Fecha &f2) { //si la primera fecha es menor devolvemos la diferencia evaluada en orden inverso if(cmp(f1,f2) < 0) return dif(f2,f1); return f1.dias() - f2.dias(); } long int Fecha::dias() const { int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31}; unsigned long ndias = 0; //pasamos la fecha a dias desde el año cero o hasta el año cero: ndias = 365 * anio; for(int i = 0 ; i < mes ; i++) ndias += diasmes[i]; ndias += dia; //arreglamos los bisiestos: if(anio < 0) { if(mes > 2 || (mes == 2 && dia == 29)) { for(int i = anio + 1 ; i < 0 ; i++) if(bisiesto(i)) ndias++; } else { for(int i = anio ; i < 0 ; i++) if(bisiesto(i)) ndias++; } } else { if(mes > 2) { for(int i = anio ; i >= 0 ; i--) if(bisiesto(i)) ndias++; } else { for(int i = anio - 1 ; i >= 0 ; i--) if(bisiesto(i)) ndias++; } } return ndias; } int cmp(Fecha &f1,Fecha &f2) { if(f1.anio < f2.anio) return -1; if(f1.anio > f2.anio) return 1; if(f1.mes < f2.mes) return -1; if(f1.mes > f2.mes) return 1; if(f1.dia < f2.dia) return -1; if(f1.dia > f2.dia) return 1; return 0; } void leer_datos_cumpleanios(Fecha &cumpleanios) { int dia,mes,anio; //ponemos el dia a uno para evitar errores estableciendo el mes cumpleanios.setD(1); cout << "Introducir a" << (char)164 << "o de nacimiento: "; cin >> anio; //si el primer caracter no es numerico no se leeran datos y cin dara error while(cin.fail()) { //reseteamos los flags de cin cin.clear(); //y terminamos de leer los datos de la entrada while(cin.get() != '\n'); cout << "Introducir a" << (char)164 << "o de nacimiento: "; cin >> anio; } //terminamos de leer los datos de la entrada while(cin.get() != '\n'); cumpleanios.setA(anio); do{ cout << "Introducir mes de nacimiento (1 - 12): "; cin >> mes; while(cin.fail()) { cin.clear(); while(cin.get() != '\n'); cout << "Introducir mes de nacimiento (1 - 12): "; cin >> mes; } while(cin.get() != '\n'); }while(!cumpleanios.setM(mes)); do{ cout << "Introducir dia de nacimiento: "; cin >> dia; while(cin.fail()) { cin.clear(); while(cin.get() != '\n'); cout << "Introducir dia de nacimiento: "; cin >> dia; } while(cin.get() != '\n'); }while(!cumpleanios.setD(dia)); } //se trata de ajustar los datos de la fecha de nacimiento al siguiente cumpleaños void ajustar_datos_cumpleanios(Fecha &cumpleanios) { Fecha actual; //si el mes del cumpleaños es menor que el actual, hay que pasar al año siguiente if(cumpleanios.getM() < actual.getM()) { if(cumpleanios.getM() == 2 && cumpleanios.getD() == 29 && !bisiesto(actual.getA() + 1)) { cumpleanios.set(1,3,actual.getA() + 1); } else { cumpleanios.setA(actual.getA() + 1); } } if(cumpleanios.getM() == actual.getM()) { //Si el mes del cumpleaños es el mismo que el actual y el dia es menor que el actual, hay que pasar al año siguiente if(cumpleanios.getD() < actual.getD()) //no hay problemas con bisiestos cumpleanios.setA(actual.getA() + 1); else //en otro caso aun no se ha superado la fecha de cumpleaños en el año actual cumpleanios.setA(actual.getA()); } else//en otro caso aun no se ha superado la fecha de cumpleaños en el año actual cumpleanios.setA(actual.getA()); } int main(int argc, char *argv[]) { int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31}; Fecha actual,cumpleanios; unsigned long diferencia; leer_datos_cumpleanios(cumpleanios); ajustar_datos_cumpleanios(cumpleanios); diferencia = dif(actual,cumpleanios); cout << "Faltan " ; int contador = 0; //vamos contando los meses considerando que pasa un mes al pasar tantos dias como tenga el mes que consideramos //ej: de enero a febrero 1 mes es que pasen 31 dias, de febrero a marzo 28 ... for(int i = actual.getM() - 1 ; diferencia >= diasmes[i % 12] ; i++) { diferencia -= diasmes[i % 12]; contador++; } cout << contador << " meses, " << (diferencia / 7) << " semanas y " << (diferencia % 7) \ << " dias para tu cumplea" << (char)164 << "os." << endl; cout << endl; cout << "ACLARACION RECUENTO MESES:" << endl; cout << "De enero a febrero un mes son 31 dias" << endl; cout << "De febrero a marzo un mes son 28 dias" << endl; cout << "De marzo a abril un mes son 31 dias" << endl; cout << "De abril a mayo un mes son 30 dias" << endl; cout << "..." << endl; return 0; }
|
|
« Última modificación: 30 Septiembre 2012, 03:04 am por do-while »
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
Stakewinner00
|
SI tienen más ideas de retos díganlo k ami ya se me acaban las ideas.
PD:YA actualize los puntos
|
|
|
En línea
|
|
|
|
overxfl0w13
|
Ultimo reto #include <stdio.h> #include <stdlib.h> int main() { int n; printf("Entrada: "); scanf("%d", &n); if(n > 0) { char *v = new char[2*n-1]; for(int i=0; i<2*n-1; i++) v[i] = ' '; int i=n-1, j=n-1; while(i >= 0) { v[i--] = '*'; v[j++] = '*'; printf("%s\n", v); } while(i != j) { v[++i] = ' '; v[--j] = ' '; printf("%s\n", v); } } return 0; } }
25 puntitos más bonus
|
|
« Última modificación: 29 Septiembre 2012, 23:20 pm por overxfl0w13 »
|
En línea
|
[/url]
|
|
|
do-while
Desconectado
Mensajes: 1.276
¿Habra que sacarla de paseo?
|
12. //linea de comandos nombreprograma numero //salida: un rombo de 2 * n - 1 lineas #include <cstdio> using namespace std; unsigned int absoluto(int x) { return (x < 0 ? -x : x); } int main(int argc, char *argv[]) { int n; if(argc != 2) { printf("%s numero\n",argv[0]); return -1; } for(int i = 0 ; argv[1][i] ; i++) if(argv[1][i] < '0' || argv[1][i] > '9') { printf("%s numero\n",argv[0]); return -1; } sscanf(argv[1],"%d",&n); for(int i = 0 ; i < 2 * n - 1 ; i++) { printf("%*s",absoluto(n - (i + 1)) + 1, " "); for(int j = 0 ; j < 2 * (n - 1 - (absoluto(n - 1 - i))) + 1 ; j++) printf("*"); printf("\n"); } return 0; }
PD: He corregido el de las fechas, que habia un gran error. ¡Saludos! EI: juntando mensajes.ami no me salta ningun error pero no me habre ningun archivo ya probe de crear un archivo con ese nombre y camiar el nombre pero no muestra el texto del documento
El problema dice leer el contenido de un archivo. No que haya que mostrarlo por pantalla.
|
|
« Última modificación: 2 Octubre 2012, 14:35 pm por Eternal Idol 7D »
|
En línea
|
- Doctor, confundo los números y los colores. - Vaya marrón. - ¿Marrón? ¡Por el culo te la hinco!
|
|
|
zonahurbana
Desconectado
Mensajes: 178
RS, JC.
|
Pongo el código de la 3 simplificado: #include <iostream> using namespace std; int main() { int a = 0, b = 0, c = 0, d = 0, mayor = 0; cout << "Ingresa los 4 numeros por espacio : "; cin >> a >> b >> c >> d; if ((a > b) && (a > c) && (a > d)) mayor = a; if ((b > a) && (b > c) && (b > d)) mayor = d; if ((c > b) && (c > a) && (c > d)) mayor = c; if ((d > b) && (d > c) && (d > a)) mayor = d; cout << "Numero mayor : " << mayor; cin.sync(); cin.get(); return 0; }
Mejoró más ehh xDD Pienso que podría hacerse también de este modo: #include <iostream> #define N 4 using namespace std; int main() { int nros[N]; int mayor=NULL; cout<<"\t\tMayor de "<<N<<" números.\n"<<endl; for(int x=0;x<N;x++) { cout<<"Ingrese un valor para nros["<<x<<"]: "; cin>>nros[x]; if(nros[x]>mayor)mayor=nros[x]; }cout<<"Mayor número encontrado: "<<mayor; cin.sync(); cin.get(); return 0; } Pero, ¿podrían explicarme cómo es que funcionan cin.sync(); cin.get();? Antes usaba system("pause"); pero según leí en el foro, no es recomandable. ¿cin.sync limpia el buffer?
|
|
|
En línea
|
Nunca dejar de aprender es importante, más allá del ritmo que se siga ...
|
|
|
Stakewinner00
|
zonahurbana
a.cpp:6: warning: converting NULL to non-pointer type
yo utilizaria la funcion max(); de la libreria algortihm que te estalvia algunos if.
|
|
|
En línea
|
|
|
|
overxfl0w13
|
stake, espero los puntos nuevos
|
|
« Última modificación: 30 Septiembre 2012, 13:22 pm por overxfl0w13 »
|
En línea
|
[/url]
|
|
|
dato000
Desconectado
Mensajes: 3.034
|
Si que han hecho avances por aqui, literalmente, me muero de la envidia, me entere muy tarde.
Quiero participar!!! Que retos hacen falta???
voy a resolverlos todos!! pero viendo que ya ha hecho muchos, pues sera puro ensayo y error XDDDD.
Que más falta caballeros, hoy quiero programar.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[RECOPILACION DE RETOS] VBClassic Por 79137913
Programación Visual Basic
|
79137913
|
5
|
14,457
|
21 Enero 2013, 18:58 pm
por 79137913
|
|
|
Zona de retos Scripting
« 1 2 3 »
Scripting
|
Eleкtro
|
23
|
55,633
|
20 Enero 2014, 19:16 pm
por Eleкtro
|
|
|
Retos de java
« 1 2 »
Java
|
4dr14n31t0r
|
10
|
5,734
|
22 Enero 2016, 16:06 pm
por 0xFer
|
|
|
Retos forenses en español?
Dudas Generales
|
Sapote
|
0
|
2,070
|
22 Mayo 2017, 02:58 am
por Sapote
|
|
|
Retos(1 - 15) (wardGame)
« 1 2 »
Desafíos - Wargames
|
4A45414E
|
14
|
8,174
|
10 Noviembre 2018, 03:16 am
por zonahurbana
|
|