Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Stakewinner00 en 20 Septiembre 2012, 18:20 pm



Título: RETOS C++
Publicado por: Stakewinner00 en 20 Septiembre 2012, 18:20 pm
Os quiero proponer unos cuantos retos simples de c++ para practicar. Se puede usar de todo menos buscar el resultado por internet y copiar el resultado.

La idea es que quien quiera participar que juegue y quien no y quiera aprender que pueda tomar los codigos como ejemplos

El codigo mas corto o el codigo mas rápido ganara un bónus.

El ganador no ganara nada y el perdedor tampoco y los puntos no sirven para nada.


=======================================

1-Un programa que cuente los caracteres que tiene un texto previamente introducido por el usuario (parece más fácil de lo que es)

ejemplo de entrada: "ho la" ejemplo salida:el texto tiene 5 caracteres

1 punto
____________________________________

2- Crear programa que lea el contenido de un archivo de texto.

2 puntos
________________________________
3- Un programa que diga el numero mas grande. El usuario ha de insertar 4 numeros separados por un espacio.

3 puntos

________________________________

4- Un programa que muestre la palabra mas pequeña en el orden alfabético. El usuario insertara 4 palabras

40 puntos

__________________________

5- Un creador de diccionarios para fuerza bruta

50 puntos

____________________________

6- Un programa que te apague el pc manera larga. (el programa tendra que ir haciendo los clicks como si fuera una persona)

60 puntos

__________________________

7- Un programa que te de una lista de los procesos prescindibles que mas consumen.

70 puntos

__________________________

8- Un crackeador de md5 ( a partir de un hash buscar una palabra que tenga el mismo hash).

80 puntos


__________________________

9- Un programa que corra en background y cambie el nombre de todas las ventanas que se llamen "hola" a "adios" .

75 puntos

__________________________

10- Un programa que escriba al revés las palabras. .

Entrada: hola
Salida: aloh



15 puntos
__________________________

11- Un programa que al introducirle tu data de nacimiento te diga los días, meses y semanas que faltan para tu próximo cumpleaños  

20 puntos

__________________________

12- Un programa que haga diversos rombos de 2 * n -1 lineas como en el siguiente ejemplo  

Entrada: 4
SAlida:  
    *
  ***
 *****
*******
 *****
  ***
   *

25 puntos


__________________________

13- Un programa que haga lo siguiente:  decidir si lo que se le ha dado realmente es un sudoku (comprobar que realmente tenga una unica solucion y tenga el tamaño correcto) ((idea de do-while))  

35p

PD:El formato del sudoku puede ser cualquiera siempre y cuando el progrma permita al user ingresar el sudoku por algún lado ,que no sea el codigo fuente.

__________________________

14- Un programa que genere 15200 numeros aleatorios y diga el número más grande que ha generado.  

11p

__________________________

15- Un programa que haga la serie de Fibonacci ( el programa tiene que imprimir por pantalla hasta el numero 30 en la serie de Fibonacci).  + INFO SOBRE LA SERIE:http://es.wikipedia.org/wiki/N%C3%BAmero_de_Fibonacci (http://es.wikipedia.org/wiki/N%C3%BAmero_de_Fibonacci)

11p

__________________________

15-(Similar al anterior)Crear un programa que obtenga el numero fi a partir de la serie de Fibonacci (el bucle tiene que tener un minimo de 30 ciclos) .

15p
------------------------------------------------------------------------------


RANKING

1º overxfl0w13(339p)
2º do-while (275p)
3º 0xdani (137p)
4º leosansan (115p)
5º Puntoinfinito (79p)
6º za.asi (71p))
7º ankora45 (66p)
8º werever19 (46p)
9º Dato000 (5p)
10º Ecfisa (1p)


Título: Re: RETOS C++
Publicado por: Puntoinfinito en 20 Septiembre 2012, 19:01 pm
He echo el 3ro, aun no lo he probado, supongo que algo mal estara (eso me pasa por ir siempre a lo dificil xD) Y además aun no se mucho... :)

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int a = 99999999, b= -999, x = 0, y = 0, grande = 0, var = 0, final = 0;
  8. int i = 0, z = 0;
  9.  
  10.    cout << "Ingrese el 4 numeros por espacio" << endl;
  11.    cin >> x;
  12.    cin >> y;
  13.    cin >> i;
  14.    cin >> z;
  15.    if ( x > y)
  16.    {
  17.         grande = x;
  18.    }
  19.    else
  20.    {
  21.        grande = y;
  22.    }
  23.    if (i > z)
  24.    {
  25.          var = i;
  26.    }
  27.       else
  28.    {
  29.           var = z;
  30.    }
  31.    if (grande > var)
  32.    {
  33.        grande = final;
  34.    }
  35.    else
  36.    {
  37.        var = final;
  38.    }
  39.    cout << "El mayor numero que has puesto es : " << final;
  40.    cin.get();
  41.    return 0;
  42. }


Título: Re: RETOS C++
Publicado por: x64core en 20 Septiembre 2012, 19:08 pm
propongan retos más dificiles aqui hay gente que sabe muchisimo y casi siempre se une a los retos  ::)


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 20 Septiembre 2012, 19:23 pm
propongan retos más dificiles aqui hay gente que sabe muchisimo y casi siempre se une a los retos  ::)

cuando tenga tiempo ire añadiendo estos son básicos


Título: Re: RETOS C++
Publicado por: Puntoinfinito en 20 Septiembre 2012, 19:28 pm
Para gente para mi. Estoy de acuerdo con estos retos!!. No siempre hay que poner dificiles, cuando uno esta aprendiendo estos retos son los mejores que hay!!

Pongo el código de la 3 simplificado:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int a = 0, b = 0, c = 0, d = 0, mayor = 0;
  8. cout << "Ingresa los 4 numeros por espacio : ";
  9. cin >> a >> b >> c >> d;
  10. if ((a > b) && (a > c) && (a > d))
  11. mayor = a;
  12. if ((b > a) && (b > c) && (b > d))
  13. mayor = d;
  14. if ((c > b) && (c > a) && (c > d))
  15. mayor = c;
  16. if ((d > b) && (d > c) && (d > a))
  17. mayor = d;
  18. cout << "Numero mayor : " << mayor;
  19. cin.sync();
  20. cin.get();
  21. return 0;
  22. }
  23.  

Mejoró más ehh xDD



Título: Re: RETOS C++
Publicado por: ecfisa en 20 Septiembre 2012, 19:59 pm
Hola.

Yo voy por el más fácil: El 1  ::)

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int main(int argc, char* argv[]) {
  5.  char frase[100];
  6.  int i=0;
  7.  const char *num[10] = {"cero","uno","dos","tres","cuatro","cinco",
  8.                         "seis","siete","ocho","nueve" };
  9.  printf("Frase: ");
  10.  fgets(&frase,100,stdin);
  11.  
  12.  while (frase[i]) {
  13.    if (isdigit(frase[i]))
  14.      printf("%s ",num[frase[i]-48]);
  15.    i++;
  16.  }
  17.  
  18.  getchar();
  19.  return 0;
  20. }
  21.  

Edito: Disculpas, no reparé que era C++ :-(

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(int argc, char* argv[]) {
  6.  char frase[100];
  7.  int i=0;
  8.  const char *num[10] = {"cero","uno","dos","tres","cuatro","cinco",
  9.                         "seis","siete","ocho","nueve" };
  10.  cout << "Frase: ";
  11.  cin >> frase;
  12.  
  13.  while (frase[i]) {
  14.    if (isdigit(frase[i]))
  15.      cout << num[frase[i]-48] << " ";
  16.    i++;
  17.  }
  18.  
  19.  while(cin.get()!='\n');
  20.  cin.get();
  21.  return 0;
  22. }
  23.  



Saludos.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 20 Septiembre 2012, 20:01 pm
Hola.

Yo voy por el más fácil: El 1  ::)

Código
  1. #include <stdio.h>
  2. #include <ctype.h>
  3.  
  4. int main(int argc, char* argv[]) {
  5.  char frase[100];
  6.  int i=0;
  7.  const char *num[10] = {"cero","uno","dos","tres","cuatro","cinco",
  8.                         "seis","siete","ocho","nueve" };
  9.  printf("Frase: ");
  10.  fgets(&frase,100,stdin);
  11.  
  12.  while (frase[i]) {
  13.    if (isdigit(frase[i]))
  14.      printf("%s ",num[frase[i]-48]);
  15.    i++;
  16.  }
  17.  
  18.  getchar();
  19.  return 0;
  20. }
  21.  

Saludos.

teoricamente era de c++ pero bueno si peudes hazlo con c++
ademas da error
a.c: In function `main':
a.c:10: warning: passing arg 1 of `fgets' from incompatible pointer type


Título: Re: RETOS C++
Publicado por: ecfisa en 20 Septiembre 2012, 20:20 pm
Hola Stakewinner00.

Citar
teoricamente era de c++ pero bueno si peudes hazlo con c++
Si... me había percatado de la confusión (C++) ya estaba agregando el código.

Citar
ademas da error
En realidad es una advertencia, la inclusión de '&' fue un despiste mío :(, la línea debería ser:
Código
  1. fgets(frase,100,stdin);

Un Saludo. ::)


Título: Re: RETOS C++
Publicado por: 0xDani en 20 Septiembre 2012, 20:24 pm
Estos retos son muy faciles, en realidad practicamente se lleva los puntos el que lo vea primero :silbar:


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 20 Septiembre 2012, 20:25 pm
Estos retos son muy faciles, en realidad practicamente se lleva los puntos el que lo vea primero :silbar:
ya pero como ire colocando mas retos habra un reto que valdra 30 puntos y entonces el qeu quiera ganar tendra k hacer el 100% de los retos


Título: Re: RETOS C++
Publicado por: 0xDani en 20 Septiembre 2012, 20:29 pm
ya pero como ire colocando mas retos habra un reto que valdra 30 puntos y entonces el qeu quiera ganar tendra k hacer el 100% de los retos

Me parece bien, estare pendiente :)

EI: juntando mensajes.

El reto nº 6 no me parece bien, esta orientado a windows y yo estoy en ubuntu.

EI: juntando mensajes.

Reto nº5:

Código
  1. #include <fstream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. char vars[6];
  8. vars[5]='\n';
  9. ofstream diccionario("diccionario");
  10. for(vars[0]='a'; vars[0]<'Z'; vars[0]++)
  11. {
  12.   for(vars[1]='a'; vars[1]<'Z'; vars[1]++)
  13.   {
  14.     for(vars[2]='a'; vars[2]<'Z'; vars[2]++)
  15.      {
  16.        for(vars[3]='a';vars[3]<'Z'; vars[3]++)
  17.          for(vars[4]='a';vars[4]<'Z'; vars[4]++ )
  18.           diccionario.write(vars, 6);
  19.      }
  20.   }
  21. }
  22. diccionario.close();
  23. return 0;
  24. }
  25.  

Ahora mismo no puedo probarlo, pero creo que funcionara.

Saludos.

EI: juntando mensajes.

Reto nº 2:
 
Código
  1. #include <fstream>
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char* argv[])
  7. {
  8. ifstream file(argv[1]);
  9. char buf[5];
  10. while(!file.eof())
  11. {
  12. file.read(buf, 5);
  13. cout<<buf<<endl;
  14. }
  15. file.close();
  16. return 0;
  17. }
  18.  

Lo mismo con este, ahora mismo no puedo probarlo pero creo que funcionara.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 20 Septiembre 2012, 20:59 pm
oxdai modifique un poco los puntos y el de windows lo puse generico si puede ser comprueba que funcionen bien tus codes y luego te sumo los puntos. Y si quieres cuando funcione bien te paso el k yo tenia.

EI: juntando mensajes.

ecfis de lo que se trataba es de lo siguiente

entrada

HOLA

salida

el texto tiene 4 caracteres o simplemente un 4

otro ejemplo

entrada
________

hola k tal estas

salida
________

el texto tiene 16 caracteres o un 16


Título: Re: RETOS C++
Publicado por: 0xDani en 20 Septiembre 2012, 21:20 pm
oxdai modifique un poco los puntos y el de windows lo puse generico si puede ser comprueba que funcionen bien tus codes y luego te sumo los puntos. Y si quieres cuando funcione bien te paso el k yo tenia.

Si quieres lo compruebo yo, pero no puedo ahora mismo, y ademas dado que eres tu el que administra los puntos deberias probarlos tu para comprobar que realmente funcionan no? En cuanto al de windows me parece bien :)


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 20 Septiembre 2012, 21:25 pm
Si quieres lo compruebo yo, pero no puedo ahora mismo, y ademas dado que eres tu el que administra los puntos deberias probarlos tu para comprobar que realmente funcionan no? En cuanto al de windows me parece bien :)

el k tu pusiste uno falta decir el archivo k tiene k leer y el otro no escrive nada


Título: Re: RETOS C++
Publicado por: 0xDani en 20 Septiembre 2012, 21:30 pm
el k tu pusiste uno falta decir el archivo k tiene k leer y el otro no escrive nada

En el de leer el archivo si te fijas el archivo a leer es el primer argumento.  Ahora miro el otro.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 20 Septiembre 2012, 21:41 pm
En el de leer el archivo si te fijas el archivo a leer es el primer argumento.  Ahora miro el otro.
el de leer los archivos funciona bien pero un .txt con hola imprime holaÏ■(, de todas formas lo acepto por que si que lee el archivo pero intenta arreglar eso si pudes.

Te paso por mp el k yo tenia


Título: Re: RETOS C++
Publicado por: 0xDani en 20 Septiembre 2012, 21:46 pm
el de leer los archivos funciona bien pero un .txt con hola imprime holaÏ■(, de todas formas lo acepto por que si que lee el archivo pero intenta arreglar eso si pudes.

Te paso por mp el k yo tenia

Ok, ahora cuando consiga solucionar el de fuerza bruta lo intento con el de leer el archivo.


Título: Re: RETOS C++
Publicado por: anonimo12121 en 20 Septiembre 2012, 22:03 pm
Los puntos se deberían de dar a los que hagan el código más corto!


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 20 Septiembre 2012, 22:13 pm
Los puntos se deberían de dar a los que hagan el código más corto!
buena idea


Título: Re: RETOS C++
Publicado por: ecfisa en 21 Septiembre 2012, 04:43 am
ecfis de lo que se trataba es de lo siguiente

entrada

HOLA

salida

el texto tiene 4 caracteres o simplemente un 4

otro ejemplo

entrada
________

hola k tal estas

salida
________

el texto tiene 16 caracteres o un 16


Entiendo, pero por el texto de la consigna "Un programa que diga el nombre de dígitos que tiene el texto introducido ", no interpreté que se tratase de la cantidad de caracteres de la cadena ingresada.

Entonces:
Código
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  string texto;
  7.  
  8.  cout << "Texto: ";
  9.  getline(cin, texto);
  10.  cout << "El texto tiene " << texto.length() << " caracteres.";
  11.  cin.get();
  12.  return 0;
  13. }
  14.  

Saludos.

EI: juntando mensajes.

Hola.

Para el punto 4 podría ser:

Código
  1. #include <iostream>
  2. #define MAX_PALABRAS 4
  3.  
  4. using namespace std;
  5. int main() {
  6.  string vec[MAX_PALABRAS], min;
  7.  
  8.  cout << "Ingrese " << MAX_PALABRAS << " palabras" << endl;
  9.  cout << "-----------------" << endl;
  10.  
  11.  min.assign(255,255);
  12.  for(int i = 0; i < MAX_PALABRAS; i++) {
  13.    cout << "Palabra " << i+1 << " :";
  14.    cin >> vec[i];
  15.    if (vec[i] < min)
  16.      min = vec[i];
  17.  }
  18.  cout << endl << "Primer palabra por orden alfabetico: " << min;
  19.  
  20.  while(cin.get()!='\n');
  21.  cin.get();
  22.  return 0;
  23. }
  24.  

Saludos.


Título: Re: RETOS C++
Publicado por: do-while en 21 Septiembre 2012, 12:40 pm
1.
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define DIM 100
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.    char texto[DIM],*cifras[]={"cero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
  9.    int i;
  10.  
  11.    do{
  12.        if(!fgets(texto,DIM,stdin))
  13.            return 0;
  14.  
  15.        for(i = 0 ; texto[i] ; i++)
  16.            if(texto[i] >= '0' && texto[i] <= '9')
  17.                printf("%s\n",cifras[texto[i] - '0']);
  18.  
  19.    }while(texto[strlen(texto) - 1] != '\n');
  20.  
  21.    return 0;
  22. }
  23.  

Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *agrv[])
  7. {
  8.    char *cifras[] = {"cero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
  9.    string texto;
  10.  
  11.    getline(cin,texto);
  12.  
  13.    for(int i = 0 ; i < texto.length() ; i++)
  14.        if(texto[i] >= '0' && texto[i] <= '9')
  15.            cout << cifras[texto[i] - '0'] << endl;
  16.  
  17.    return 0;
  18. }
  19.  

Y mas eficiente:
Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *agrv[])
  7. {
  8.    char *cifras[] = {"cero","uno","dos","tres","cuatro","cinco","seis","siete","ocho","nueve"};
  9.    string texto;
  10.  
  11.    getline(cin,texto);
  12.  
  13.    //no se dice nada sobre el orden
  14.    for(int i = texto.length() - 1 ; i >= 0 ; i--)
  15.        if(texto[i] >= '0' && texto[i] <= '9')
  16.            cout << cifras[texto[i] - '0'] << endl;
  17.  
  18.    return 0;
  19. }
  20.  

2. Faltan datos: ¿Nombre del fichero? ¿Tipo de fichero? (binario/texto) ¿Leer completo, por bloques de una cantidad determinada de bytes, por palabras...?

3.
Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char *argv[])
  4. {
  5.    int max, num,i;
  6.  
  7.    scanf("%d",&max);
  8.  
  9.    for(i = 1 ; i < 4 ; i++)
  10.    {
  11.        scanf("%d", &num);
  12.        if(num > max)
  13.            max = num;
  14.    }
  15.  
  16.    printf("Max: %d\n",max);
  17.  
  18.    return 0;
  19. }
  20.  

4.
Código
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.    string min, palabra;
  9.    int i;
  10.  
  11.    cin >> min;
  12.  
  13.    for(i = 1 ; i < 4 ; i++)
  14.    {
  15.        cin >> palabra;
  16.  
  17.        if(palabra < min)
  18.            min = palabra;
  19.    }
  20.  
  21.    cout << min;
  22.  
  23.    return 0;
  24. }
  25.  

5. Faltan datos: ¿Alfabeto? ¿Longitud de la clave?


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 21 Septiembre 2012, 15:09 pm
perdon  por los que se confundieron con el punto 4 fue error mio.

Estoy mirando los codigos y sumando los puntos.

do-while, en los que faltan datos es libre

ecfisa, en tu codigo falta un include despues lo añado


Título: Re: RETOS C++
Publicado por: do-while en 21 Septiembre 2012, 16:22 pm
2.
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    FILE *f;
  7.    char *contenido;
  8.    unsigned long longitud;
  9.  
  10.    f=fopen("algunfichero","rb");
  11.  
  12.    fseek(f,0,SEEK_END);
  13.  
  14.    if(!(contenido = malloc(longitud = ftell(f))))
  15.        return -1;
  16.  
  17.    fseek(f,0,SEEK_SET);
  18.  
  19.    fread(contenido,longitud,1,f);
  20.  
  21.    fclose(f);
  22.  
  23.    free(contenido);
  24.  
  25.    return 0;
  26. }
  27.  

5.
Este crashea con alfabetos de mas de 18 caracteres y longitud 6
Código
  1. /*
  2.  *  linea de comandos:
  3.  *      nombreprograma alfabeto longitud
  4.  */
  5.  
  6. #include <iostream>
  7. #include <list>
  8. #include <string>
  9. #include <cstring>
  10. #include <cstdlib>
  11.  
  12. using namespace std;
  13.  
  14. unsigned long convertir(char *s);
  15. void bruteforce(list<string> &resultado,char *alfabeto,unsigned long longitud);
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19.    list<string> resultado;
  20.    unsigned long l;
  21.  
  22.    if(argc != 3)
  23.    {
  24.        cerr << argv[0] << " alfabeto longitud" << endl;
  25.        return -1;
  26.    }
  27.  
  28.    if(!(l = strlen(argv[1])))
  29.    {
  30.        cerr << argv[0] << " alfabeto longitud" << endl;
  31.        return -1;
  32.    }
  33.  
  34.  
  35.    //eliminamos caracteres repetidos del alfabeto
  36.    for(int i = 0 ; i < strlen(argv[1]) ; i++)
  37.        if(strchr(argv[1] + i + 1 , argv[1][i]))
  38.        {
  39.            memmove(argv[1] + i ,argv[1] + i  + 1, (l--) - i );
  40.            i--;
  41.        }
  42.  
  43.    //nos aseguramos de que el segundo argumento sea numerico
  44.    for(int i = 0 ; argv[2][i] ; i++)
  45.        if(argv[2][i] < '0' || argv[2][i] > '9')
  46.        {
  47.            cerr << argv[0] << " alfabeto longitud" << endl;
  48.            return -1;
  49.        }
  50.  
  51.    bruteforce(resultado,argv[1],convertir(argv[2]));
  52.  
  53.    for(list<string>::iterator it = resultado.begin() ; it != resultado.end() ; it++)
  54.        cout << (*it) << endl;
  55.  
  56.    return 0;
  57. }
  58.  
  59. unsigned long convertir(char *s)
  60. {
  61.    unsigned long ret = 0;
  62.  
  63.    for(int i = 0 ; s[i] ; i++)
  64.    {
  65.        ret *= 10;
  66.        ret += s[i] - '0';
  67.    }
  68.  
  69.    return ret;
  70. }
  71.  
  72. void bruteforce(list<string> &resultado,char *alfabeto,unsigned long longitud)
  73. {
  74.    static string cadena;
  75.    static unsigned long posicion = 0;
  76.  
  77.    if(posicion == longitud)
  78.    {
  79.        //si hemos llegado a la ultima posicion almacenamos la variacion
  80.        resultado.push_back(cadena);
  81.        return;
  82.    }
  83.  
  84.    //si es la primera llamada damos la longitud deseada a la cadena
  85.    if(posicion == 0)
  86.        cadena.resize(longitud);
  87.  
  88.    //para cada una de los caracteres del alfabeto
  89.    for(int i = 0 ; alfabeto[i] ; i++)
  90.    {
  91.        cadena[posicion] = alfabeto[i]; //asignamos a la posicion correspondiente el caracter del alfabeto.
  92.  
  93.        //avanzamos una posicion
  94.        posicion++;
  95.  
  96.        //y calculamos el siguiente caracter
  97.        bruteforce(resultado , alfabeto , longitud);
  98.  
  99.        //volvemos a la posicion original
  100.        posicion--;
  101.    }
  102.  
  103.    //posicion termina a cero para la siguiente llamada
  104.    if(!posicion)
  105.        cadena.resize(0);
  106. }
  107.  

Alternativa:
Código
  1. /*
  2.  *  linea de comandos:
  3.  *      nombreprograma alfabeto longitud
  4.  */
  5.  
  6. #include <iostream>
  7. #include <string>
  8. #include <cstring>
  9. #include <cstdlib>
  10.  
  11. using namespace std;
  12.  
  13. unsigned long convertir(char *s);
  14. void bruteforce(char *alfabeto,unsigned long longitud);
  15.  
  16. int main(int argc, char *argv[])
  17. {
  18.    unsigned long l;
  19.  
  20.    if(argc != 3)
  21.    {
  22.        cerr << argv[0] << " alfabeto longitud" << endl;
  23.        return -1;
  24.    }
  25.  
  26.    if(!(l = strlen(argv[1])))
  27.    {
  28.        cerr << argv[0] << " alfabeto longitud" << endl;
  29.        return -1;
  30.    }
  31.  
  32.  
  33.    //eliminamos caracteres repetidos del alfabeto
  34.    for(int i = 0 ; i < strlen(argv[1]) ; i++)
  35.        if(strchr(argv[1] + i + 1 , argv[1][i]))
  36.        {
  37.            memmove(argv[1] + i ,argv[1] + i  + 1, (l--) - i );
  38.            i--;
  39.        }
  40.  
  41.    //nos aseguramos de que el segundo argumento sea numerico
  42.    for(int i = 0 ; argv[2][i] ; i++)
  43.        if(argv[2][i] < '0' || argv[2][i] > '9')
  44.        {
  45.            cerr << argv[0] << " alfabeto longitud" << endl;
  46.            return -1;
  47.        }
  48.  
  49.    bruteforce(argv[1],convertir(argv[2]));
  50.  
  51.    return 0;
  52. }
  53.  
  54. unsigned long convertir(char *s)
  55. {
  56.    unsigned long ret = 0;
  57.  
  58.    for(int i = 0 ; s[i] ; i++)
  59.    {
  60.        ret *= 10;
  61.        ret += s[i] - '0';
  62.    }
  63.  
  64.    return ret;
  65. }
  66.  
  67. void bruteforce(char *alfabeto,unsigned long longitud)
  68. {
  69.    static string cadena;
  70.    static unsigned long posicion = 0;
  71.  
  72.    if(posicion == longitud)
  73.    {
  74.        //si hemos llegado a la ultima posicion almacenamos la variacion
  75.        cout << (cadena) << endl;
  76.        return;
  77.    }
  78.  
  79.    //si es la primera llamada damos la longitud deseada a la cadena
  80.    if(posicion == 0)
  81.        cadena.resize(longitud);
  82.  
  83.    //para cada una de los caracteres del alfabeto
  84.    for(int i = 0 ; alfabeto[i] ; i++)
  85.    {
  86.        cadena[posicion] = alfabeto[i]; //asignamos a la posicion correspondiente el caracter del alfabeto.
  87.  
  88.        //avanzamos una posicion
  89.        posicion++;
  90.  
  91.        //y calculamos el siguiente caracter
  92.        bruteforce(alfabeto , longitud);
  93.  
  94.        //volvemos a la posicion original
  95.        posicion--;
  96.    }
  97.  
  98.    //posicion termina a cero para la siguiente llamada
  99.    if(!posicion)
  100.        cadena.resize(0);
  101. }
  102.  


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 21 Septiembre 2012, 16:43 pm
do-while el 2 no compila

a.cpp:14: ANSI C++ forbids implicit conversion from `void *' in assignment

el otro te subo los puntos

quien haga otro programa más rápido que el de el ganara más puntos
o si alguien lo hace más lento ganaras mas puntos tu do-while


Título: Re: RETOS C++
Publicado por: do-while en 21 Septiembre 2012, 16:48 pm
¡Buenas!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    FILE *f;
  7.    char *contenido;
  8.    unsigned long longitud;
  9.  
  10.    f=fopen("algunfichero","rb");
  11.  
  12.    fseek(f,0,SEEK_END);
  13.  
  14.    if(!(contenido = (char*) malloc(longitud = ftell(f))))
  15.        return -1;
  16.  
  17.    fseek(f,0,SEEK_SET);
  18.  
  19.    fread(contenido,longitud,1,f);
  20.  
  21.    fclose(f);
  22.  
  23.    free(contenido);
  24.  
  25.    return 0;
  26. }
  27.  

Prueba ahora, que en C++ me parece que no se puede asignar un punter void a un puntero no void. Obliga a hacer el cast.

¡Saludos!


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 21 Septiembre 2012, 16:55 pm
¡Buenas!

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    FILE *f;
  7.    char *contenido;
  8.    unsigned long longitud;
  9.  
  10.    f=fopen("algunfichero","rb");
  11.  
  12.    fseek(f,0,SEEK_END);
  13.  
  14.    if(!(contenido = (char*) malloc(longitud = ftell(f))))
  15.        return -1;
  16.  
  17.    fseek(f,0,SEEK_SET);
  18.  
  19.    fread(contenido,longitud,1,f);
  20.  
  21.    fclose(f);
  22.  
  23.    free(contenido);
  24.  
  25.    return 0;
  26. }
  27.  

Prueba ahora, que en C++ me parece que no se puede asignar un punter void a un puntero no void. Obliga a hacer el cast.

¡Saludos!

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


Título: Re: RETOS C++
Publicado por: 0xDani en 21 Septiembre 2012, 16:58 pm
El programa de do-while que es el crackeador de md5 o el generador de diccionarios? Lo digo porque ya he solucionado lo de que no escribiera en el mio.

Es simple, pero se puede hacer mas complejo.

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. char vars[6];
  6. vars[5]='\n';
  7. FILE* diccionario = fopen("diccionario", "w");
  8. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  9. {
  10.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  11.   {
  12.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  13.      {
  14.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  15.         {
  16.  
  17.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  18.           {fprintf(diccionario, "%s", vars);}
  19.         }
  20.      }
  21.   }
  22. }
  23. fclose(diccionario);
  24. return 0;
  25. }
  26.  

Es C, ahora lo subo en C++.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 21 Septiembre 2012, 16:59 pm
El programa de do-while que es el crackeador de md5 o el generador de diccionarios? Lo digo porque ya he solucionado lo de que no escribiera en el mio.

Es simple, pero se puede hacer mas complejo.

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5. char vars[6];
  6. vars[5]='\n';
  7. FILE* diccionario = fopen("diccionario", "w");
  8. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  9. {
  10.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  11.   {
  12.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  13.      {
  14.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  15.         {
  16.  
  17.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  18.           {fprintf(diccionario, "%s", vars);}
  19.         }
  20.      }
  21.   }
  22. }
  23. fclose(diccionario);
  24. return 0;
  25. }
  26.  

Es C, ahora lo subo en C++.

el suyo es el de fuerza bruta de momento dowhile va ganando haber si lo superas


Título: Re: RETOS C++
Publicado por: do-while en 21 Septiembre 2012, 17:04 pm
¡Buenas!

¿A que te refieres con un crackeador de MD5? ¿A redibir como argumento un hash y generar una cadena que de el mismo hash?


Título: Re: RETOS C++
Publicado por: 0xDani en 21 Septiembre 2012, 17:05 pm
el suyo es el de fuerza bruta de momento dowhile va ganando haber si lo superas

Ok, pero yo gano puntos o no? Se me ha adelantado por segundos :-[

Aqui esta en C++:

Código
  1. #include <fstream>
  2.  
  3. int main()
  4. {
  5. char vars[6];
  6. vars[5]='\n';
  7. ofstream diccionario.open("diccionario", ios::out);
  8. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  9. {
  10.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  11.   {
  12.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  13.      {
  14.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  15.         {
  16.  
  17.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  18.           {diccionario.write(vars, 6);}
  19.         }
  20.      }
  21.   }
  22. }
  23. diccionario.close();
  24. return 0;
  25. }


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 21 Septiembre 2012, 17:06 pm
¡Buenas!

¿A que te refieres con un crackeador de MD5? ¿A redibir como argumento un hash y generar una cadena que de el mismo hash?
si

EI: juntando mensajes.

Ok, pero yo gano puntos o no? Se me ha adelantado por segundos :-[

Aqui esta en C++:

Código
  1. #include <fstream>
  2.  
  3. int main()
  4. {
  5. char vars[6];
  6. vars[5]='\n';
  7. ofstream diccionario.open("diccionario", ios::out);
  8. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  9. {
  10.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  11.   {
  12.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  13.      {
  14.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  15.         {
  16.  
  17.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  18.           {diccionario.write(vars, 6);}
  19.         }
  20.      }
  21.   }
  22. }
  23. diccionario.close();
  24. return 0;
  25. }

el a echo el 4 tambien

ahora lo k podeis hacer es competir para que vuestro porgrama sea más rapido  por ejemplo haciendo k el script en vez de imprimir por pantalla lo guarde en un fichero y el que lo haga más rapido gana 10 puntos +

EI: juntando mensajes.

0xdani

a.cpp: In function `int main()':
a.cpp:7: parse error before `.'


Título: Re: RETOS C++
Publicado por: 0xDani en 21 Septiembre 2012, 17:24 pm
0xdani

a.cpp: In function `int main()':
a.cpp:7: parse error before `.'

Código
  1. #include <fstream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. char vars[6];
  8. vars[5]='\n';
  9. ofstream diccionario;
  10. diccionario.open("diccionario", ios::out);
  11. for(vars[0]='a'; vars[0]<'z'; vars[0]++)
  12. {
  13.   for(vars[1]='a'; vars[1]<'z'; vars[1]++)
  14.   {
  15.     for(vars[2]='a'; vars[2]<'z'; vars[2]++)
  16.      {
  17.        for(vars[3]='a';vars[3]<'z'; vars[3]++)
  18.         {
  19.  
  20.          for(vars[4]='a';vars[4]<'z'; vars[4]++)
  21.           {diccionario.write(vars, 6);}
  22.         }
  23.      }
  24.   }
  25. }
  26. diccionario.close();
  27. return 0;
  28. }
  29.  

EI: juntando mensajes.

Alguien puede probar esto? No se si las librerias crypt.h y unistd.h funcionan en windows, pero para compilar: gcc md5.c -o md5 -lcrypt.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <unistd.h>
  4. #include <crypt.h>
  5.  
  6. int main(int argc, char* argv[])
  7. {
  8.    const char salt[] = "$1$........";
  9.    char *buf, pass[30];
  10.    FILE* file = fopen(argv[1], "r");
  11.    printf("Escribe el hash: ");
  12.    fgets(pass, 30, stdin);
  13.    while(!feof(file))
  14.    {
  15.     fgets(buf, 30, file);
  16.     buf = crypt(buf, salt);
  17.     if(!strcmp(pass, buf)) break;
  18.    }
  19.    printf("Password: %s", buf);
  20.    fclose(file);
  21.    getchar();
  22.    return 0;
  23. }

Le tienes que pasar un diccionario como argumento, y escribir el hash.

Saludos.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 21 Septiembre 2012, 17:51 pm
no tnego el crypt.h por lo que no compila despues lo busco

el que haga el script de generar el diccionario mas rapido gana 10p


Título: Re: RETOS C++
Publicado por: do-while en 21 Septiembre 2012, 17:59 pm
8.

El crackeador de MD5. Compilado utilizando g++ funciona (probad con cadenas cortas y con minusculas). Supongo que podria fallar con otros compiladores o versiones de g++ distintas de la que tengo, a fin de cuentas no deja de ser un popurri de unos cuantos codigos que tenia hechos anteriormente. Mi version de g++ considera unsigned long de 32 bits y unsigned long long de 64. Tampoco se si funcionara en todos los casos, lo que si puedo asegurar es que con cadenas cortas y de minusculas funciona...

Código
  1. /*
  2.  * Linea de comandos:
  3.  *      nombreprograma hash
  4.  * Salida: Cadena cuyo hash MD5 es el que se ha recibido
  5.  *
  6.  *
  7.  * Dada una cadena MD5 devuelve una cadena de digitos hexadecimales de 32 bytes
  8.  *
  9.  *
  10.  * Considerando como conjunto de salida las cadenas de digitos hexadecimales de 32 bytes,
  11.  * MD5 sera por lo tanto suprayectiva y tendra que existir al menos una cadena de 32 bytes
  12.  * hexadecimales cuya imagen sea el valor que recibimos como parametro.
  13.  *
  14.  */
  15.  
  16. #include <cstdio>
  17. #include <cstdlib>
  18. #include <cstring>
  19. #include <string>
  20. #include <iostream>
  21.  
  22. using namespace std;
  23.  
  24. #ifndef ULL_MAX
  25.    #define ULL_MAX 0xFFFFFFFFFFFFFFFFULL
  26. #endif
  27. /*
  28.  *
  29.  * Calcula el MD5 del input y devuelve una cadena dinamica que lo contiene.
  30.  *
  31.  */
  32.  
  33. char* md5(char *input, unsigned long  long len);
  34.  
  35. /* Ajusta la cadena a una longitud multiplo de 512 - 64 bits y añade la longitud en 64 bits */
  36. unsigned long long md5_ajustar_datos(char **datos, unsigned long  long len);
  37.  
  38. unsigned long md5_extraer_submensaje(char *m , unsigned long sub , unsigned long bloque);
  39.  
  40. unsigned long md5FF(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t);
  41. unsigned long md5GG(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t);
  42. unsigned long md5HH(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t);
  43. unsigned long md5II(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t);
  44.  
  45. #define MD5_LONGITUD 32
  46.  
  47. #define md5_extraer_submensaje(m , sub , bloque) (((unsigned long*)(m))[(bloque) * 16 + (sub)])
  48.  
  49. #define md5F(X,Y,Z)(((X) & (Y)) | ((~(X)) & (Z)))
  50. #define md5G(X,Y,Z)(((X) & (Z)) | ((Y) & (~(Z))))
  51. #define md5H(X,Y,Z)((X) ^ (Y) ^ (Z))
  52. #define md5I(X,Y,Z)((Y) ^ ((X) | (~(Z))))
  53.  
  54. char* md5(char *input, unsigned long long len)
  55. {
  56.    unsigned long reg[4], aux_reg[4], bloque = 0, i, j;
  57.    unsigned long long longitud;
  58.    char *aux;
  59.  
  60.    if(!(aux = (char*) malloc(len * sizeof(char))))
  61.        return NULL;
  62.  
  63.    memmove(aux , input , len * sizeof(char));
  64.  
  65.    if(!(longitud = md5_ajustar_datos(&aux , len)))
  66.    {
  67.        free(aux);
  68.        return NULL;
  69.    }
  70.  
  71.    reg[0] = 0x67452301UL;
  72.    reg[1] = 0xEFCDAB89UL;
  73.    reg[2] = 0x98BADCFEUL;
  74.    reg[3] = 0x10325476UL;
  75.  
  76.    /* mientras haya bloques de 64 bytes (512 bits) */
  77.    while(longitud)
  78.    {
  79.        for(i = 0 ; i < 4 ; i++)
  80.            aux_reg[i] = reg[i];
  81.  
  82.        md5FF( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,0,bloque) ,7LU ,3614090360LU);
  83.        md5FF( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,1,bloque) ,12LU ,3905402710LU);
  84.        md5FF( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,2,bloque) ,17LU ,606105819LU);
  85.        md5FF( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,3,bloque) ,22LU ,3250441966LU);
  86.        md5FF( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,4,bloque) ,7LU ,4118548399LU);
  87.        md5FF( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,5,bloque) ,12LU ,1200080426LU);
  88.        md5FF( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,6,bloque) ,17LU ,2821735955LU);
  89.        md5FF( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,7,bloque) ,22LU ,4249261313LU);
  90.        md5FF( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,8,bloque) ,7LU ,1770035416LU);
  91.        md5FF( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,9,bloque) ,12LU ,2336552879LU);
  92.        md5FF( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,10,bloque) ,17LU ,4294925233LU);
  93.        md5FF( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,11,bloque) ,22LU ,2304563134LU);
  94.        md5FF( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,12,bloque) ,7LU ,1804603682LU);
  95.        md5FF( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,13,bloque) ,12LU ,4254626195LU);
  96.        md5FF( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,14,bloque) ,17LU ,2792965006LU);
  97.        md5FF( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,15,bloque) ,22LU ,1236535329LU);
  98.  
  99.        md5GG( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,1,bloque) ,5LU ,4129170786LU);
  100.        md5GG( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,6,bloque) ,9LU ,3225465664LU);
  101.        md5GG( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,11,bloque) ,14LU ,643717713LU);
  102.        md5GG( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,0,bloque) ,20LU ,3921069994LU);
  103.        md5GG( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,5,bloque) ,5LU ,3593408605LU);
  104.        md5GG( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,10,bloque) ,9LU ,38016083LU);
  105.        md5GG( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,15,bloque) ,14LU ,3634488961LU);
  106.        md5GG( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,4,bloque) ,20LU ,3889429448LU);
  107.        md5GG( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,9,bloque) ,5LU ,568446438LU);
  108.        md5GG( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,14,bloque) ,9LU ,3275163606LU);
  109.        md5GG( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,3,bloque) ,14LU ,4107603335LU);
  110.        md5GG( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,8,bloque) ,20LU ,1163531501LU);
  111.        md5GG( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,13,bloque) ,5LU ,2850285829LU);
  112.        md5GG( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,2,bloque) ,9LU ,4243563512LU);
  113.        md5GG( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,7,bloque) ,14LU ,1735328473LU);
  114.        md5GG( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,12,bloque) ,20LU ,2368359562LU);
  115.  
  116.        md5HH( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,5,bloque) ,4LU ,4294588738LU);
  117.        md5HH( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,8,bloque) ,11LU ,2272392833LU);
  118.        md5HH( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,11,bloque) ,16LU ,1839030562LU);
  119.        md5HH( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,14,bloque) ,23LU ,4259657740LU);
  120.        md5HH( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,1,bloque) ,4LU ,2763975236LU);
  121.        md5HH( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,4,bloque) ,11LU ,1272893353LU);
  122.        md5HH( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,7,bloque) ,16LU ,4139469664LU);
  123.        md5HH( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,10,bloque) ,23LU ,3200236656LU);
  124.        md5HH( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,13,bloque) ,4LU ,681279174LU);
  125.        md5HH( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,0,bloque) ,11LU ,3936430074LU);
  126.        md5HH( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,3,bloque) ,16LU ,3572445317LU);
  127.        md5HH( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,6,bloque) ,23LU ,76029189LU);
  128.        md5HH( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,9,bloque) ,4LU ,3654602809LU);
  129.        md5HH( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,12,bloque) ,11LU ,3873151461LU);
  130.        md5HH( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,15,bloque) ,16LU ,530742520LU);
  131.        md5HH( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,2,bloque) ,23LU ,3299628645LU);
  132.  
  133.        md5II( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,0,bloque) ,6LU ,4096336452LU);
  134.        md5II( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,7,bloque) ,10LU ,1126891415LU);
  135.        md5II( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,14,bloque) ,15LU ,2878612391LU);
  136.        md5II( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,5,bloque) ,21LU ,4237533241LU);
  137.        md5II( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,12,bloque) ,6LU ,1700485571LU);
  138.        md5II( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,3,bloque) ,10LU ,2399980690LU);
  139.        md5II( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,10,bloque) ,15LU ,4293915773LU);
  140.        md5II( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,1,bloque) ,21LU ,2240044497LU);
  141.        md5II( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,8,bloque) ,6LU ,1873313359LU);
  142.        md5II( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,15,bloque) ,10LU ,4264355552LU);
  143.        md5II( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,6,bloque) ,15LU ,2734768916LU);
  144.        md5II( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,13,bloque) ,21LU ,1309151649LU);
  145.        md5II( &aux_reg[0], aux_reg[1], aux_reg[2], aux_reg[3], md5_extraer_submensaje(aux,4,bloque) ,6LU ,4149444226LU);
  146.        md5II( &aux_reg[3], aux_reg[0], aux_reg[1], aux_reg[2], md5_extraer_submensaje(aux,11,bloque) ,10LU ,3174756917LU);
  147.        md5II( &aux_reg[2], aux_reg[3], aux_reg[0], aux_reg[1], md5_extraer_submensaje(aux,2,bloque) ,15LU ,718787259LU);
  148.        md5II( &aux_reg[1], aux_reg[2], aux_reg[3], aux_reg[0], md5_extraer_submensaje(aux,9,bloque) ,21LU ,3951481745LU);
  149.  
  150.  
  151.        for(i = 0 ; i < 4 ; i++)
  152.            reg[i] += aux_reg[i];
  153.  
  154.        bloque++;
  155.        longitud -= 64; /* descontamos un bloque de 64 bytes, 512 bits */
  156.    }
  157.  
  158.    free(aux);
  159.  
  160.    if(!(aux = (char*) malloc(33 * sizeof(char))))
  161.        return NULL;
  162.  
  163.    aux[0] = '\0';
  164.  
  165.    for(i = 0 ; i < 4 ; i++)
  166.        for(j = 0 ; j < 4 ; j++)
  167.            sprintf(aux,"%s%02X",aux,(unsigned char)((char*)&(reg[i]))[j]);
  168.  
  169.    return aux;
  170. }
  171.  
  172. unsigned long long md5_ajustar_datos(char **datos, unsigned long long len)
  173. {
  174.    unsigned long long new_len;
  175.    char *aux;
  176.    int c = 0;
  177.  
  178.    /* si longitud en bits es mayor que ULL_MAX */
  179.    if(len > ULL_MAX / 8)
  180.        return 0; /* devolvemos falso */
  181.  
  182.    if(64 - (len % 64) > 8)
  183.    {
  184.        if(ULL_MAX - (64 - (len % 64)) >= len)
  185.            new_len = len + (64 - (len % 64));
  186.        else
  187.            return 0;
  188.    }
  189.    else
  190.    {
  191.        if(ULL_MAX - 64 - (64 - (len % 64)) >= len)
  192.            new_len = len + 64 + (64 - (len % 64));
  193.        else
  194.            return 0;
  195.    }
  196.  
  197.    if(!(aux = (char*) realloc(*datos , new_len * sizeof(char))))
  198.        return 0;
  199.  
  200.    (*datos) = aux;
  201.  
  202.    c = 1 << 7;
  203.  
  204.    memset((*datos) + len , c , sizeof(char));
  205.    memset((*datos) + len + 1 , 0 , (new_len - len - 1) * sizeof(char));
  206.  
  207.    /* pasamos la longitud de bytes a bits */
  208.    len *= 8;
  209.  
  210.    memcpy((*datos) + new_len - 8 , &len , 8 * sizeof(char));
  211.  
  212.    return new_len;
  213. }
  214.  
  215. unsigned long md5FF(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t)
  216. {
  217.    unsigned long aux;
  218.  
  219.    aux = (*a + md5F(b, c, d) + m + t);
  220.  
  221.    *a = b + ((aux << s) | (aux >> (32 - s)));
  222.  
  223.    return *a;
  224. }
  225.  
  226. unsigned long md5GG(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t)
  227. {
  228.    unsigned long aux;
  229.  
  230.    aux = (*a + md5G(b, c, d) + m + t);
  231.  
  232.    *a = b + ((aux << s) | (aux >> (32 - s)));
  233.  
  234.    return *a;
  235. }
  236.  
  237. unsigned long md5HH(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t)
  238. {
  239.    unsigned long aux;
  240.  
  241.    aux = (*a + md5H(b, c, d) + m + t);
  242.  
  243.    *a = b + ((aux << s) | (aux >> (32 - s)));
  244.  
  245.    return *a;
  246. }
  247.  
  248. unsigned long md5II(unsigned long *a,unsigned long b,unsigned long c,unsigned long d,unsigned long m,unsigned long s,unsigned long t)
  249. {
  250.    unsigned long aux;
  251.  
  252.    aux = (*a + md5I(b, c, d) + m + t);
  253.  
  254.    *a = b + ((aux << s) | (aux >> (32 - s)));
  255.  
  256.    return *a;
  257. }
  258.  
  259.  
  260. int MD5_bruteforce(string MD5,unsigned long longitud)
  261. {
  262.    static string cadena;
  263.    static unsigned long posicion = 0;
  264.    static char* alfabeto = "abcdefghijklmnopqrstuvwxyz"; //con este alfabeto abarcamos el espacio imagen en menos iteraciones
  265.  
  266.    if(posicion == longitud)
  267.    {
  268.        //si hemos llegado a la ultima posicion almacenamos la variacion
  269.        if(string(md5((char*)cadena.c_str(), cadena.length())) == MD5)
  270.        {
  271.            cout << cadena;
  272.            return 1;
  273.        }
  274.  
  275.        return 0;
  276.    }
  277.  
  278.    //si es la primera llamada damos la longitud deseada a la cadena
  279.    if(posicion == 0)
  280.        cadena.resize(longitud);
  281.  
  282.    //para cada uno de los caracteres del alfabeto
  283.    for(int i = 0 ; alfabeto[i] ; i++)
  284.    {
  285.        cadena[posicion] = alfabeto[i]; //asignamos a la posicion correspondiente el caracter del alfabeto.
  286.  
  287.        //avanzamos una posicion
  288.        posicion++;
  289.  
  290.        //y calculamos el siguiente caracter
  291.        if(MD5_bruteforce(MD5,longitud))
  292.        {
  293.            posicion = 0;
  294.            cadena.resize(0);
  295.            return 1;
  296.        }
  297.  
  298.        //volvemos a la posicion original
  299.        posicion--;
  300.    }
  301.  
  302.    //posicion termina a cero para la siguiente llamada
  303.    if(!posicion)
  304.        cadena.resize(0);
  305.  
  306.    return 0;
  307. }
  308.  
  309. int main(int argc, char *argv[])
  310. {
  311.    string MD5;
  312.  
  313.    if(argc != 2)
  314.    {
  315.        cout << argv[0] << " MD5_hash" << endl;
  316.        return -1;
  317.    }
  318.  
  319.    if(strlen(argv[1]) != 32)
  320.    {
  321.        cout << argv[0] << " MD5_hash" << endl;
  322.        return -1;
  323.    }
  324.  
  325.    for(int i = 0 ; i < 32 ; i++)
  326.    {
  327.        argv[1][i] = toupper(argv[1][i]);
  328.  
  329.        if(!((argv[1][i] >= '0' && argv[1][i] <= '9') || (argv[1][i]>= 'A' && argv[1][i]<='Z')))
  330.        {
  331.            cout << argv[0] << " MD5_hash" << endl;
  332.            return -1;
  333.        }
  334.    }
  335.  
  336.    MD5 = argv[1];
  337.  
  338.  
  339.    if(string(md5("",0)) != MD5)
  340.    {
  341.        for(int i = 1 ; i < 32 ; i++)
  342.            if(MD5_bruteforce(MD5,i))
  343.                break;
  344.    }
  345.    else
  346.        cout <<"Cadena vacia" << endl;
  347.  
  348.    return 0;
  349. }
  350.  


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 21 Septiembre 2012, 18:17 pm
8.

El crackeador de MD5. Compilado utilizando g++ funciona (probad con cadenas cortas y con minusculas). Supongo que podria fallar con otros compiladores o versiones de g++ distintas de la que tengo, a fin de cuentas no deja de ser un popurri de unos cuantos codigos que tenia hechos anteriormente. Mi version de g++ considera unsigned long de 32 bits y unsigned long long de 64. Tampoco se si funcionara en todos los casos, lo que si puedo asegurar es que con cadenas cortas y de minusculas funciona...


ya te sume los puntos ya veo que tendre que poner retos mas dificles de momento intenta completar los que quedan que ya requieren mas tiempo


Título: Re: RETOS C++
Publicado por: ecfisa en 21 Septiembre 2012, 19:43 pm
Hola Stakewinner00.

Citar
ecfisa, en tu codigo falta un include despues lo añado

Los tres códigos que publiqué están probados y funcionan, lo que sí noto que faltan son los 41 puntos... :D

Saludos. :)


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 21 Septiembre 2012, 20:50 pm
Hola Stakewinner00.

Los tres códigos que publiqué están probados y funcionan, lo que sí noto que faltan son los 41 puntos... :D

Saludos. :)

mira un ejemplo

Código
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  string texto;
  7.  
  8.  cout << "Texto: ";
  9.  getline(cin, texto);
  10.  cout << "El texto tiene " << texto.length() << " caracteres.";
  11.  cin.get();
  12.  return 0;
  13. }

no entiendo como declaras un string si no lo has incluido, en los otros pasan cossas similares


Título: Re: RETOS C++
Publicado por: 0xDani en 21 Septiembre 2012, 21:50 pm
Ya he conseguido que funcione el crackeador:

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <crypt.h>
  6.  
  7. int main(int argc, char* argv[])
  8. {
  9.    const char salt[] = "$1$.........";
  10.    char *buf, pass[30], *hash;
  11.    hash = (char*) malloc(30);
  12.    buf = (char*) malloc(30);
  13.    FILE* file = fopen(argv[1], "r");
  14.    printf("Escribe el hash: ");
  15.    fgets(pass, 30, stdin);
  16.    while(!feof(file))
  17.    {
  18.     fgets(buf, 30, file);
  19.     hash = crypt(buf, salt);
  20.     if(!strcmp(pass, hash)) break;
  21.    }
  22.    printf("Password: %s", buf);
  23.    fclose(file);
  24.    getchar();
  25.    return 0;
  26. }


Título: Re: RETOS C++
Publicado por: ecfisa en 22 Septiembre 2012, 01:33 am
Citar
no entiendo como declaras un string si no lo has incluido, en los otros pasan cossas similares
Hola Stakewinner00.

En Builder C++ 6 funciona perfectamente tál y como lo he publicado, por otro lado las inclusiones de librerías no hacen a la esencia del algorítmo.

Tampoco tomes en serio el comentario que hice sobre los puntos, entendí los desafios como una diversion y bajo ningún motivo esperaba recompensa alguna.

Saludos. :)

EI: juntando mensajes.

Hola Stakewinner00.

Me quedé con la duda de que fuera una característica del compilador de Borland y tuviera incompatibilidad con otros, por lo que descargué Code::Blocks (GNU GCC Compiler) y probé los códigos que mencionas:
1)
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main(int argc, char* argv[]) {
  6.  char frase[100];
  7.  int i=0;
  8.  const char *num[10] = {"cero","uno","dos","tres","cuatro","cinco",
  9.                         "seis","siete","ocho","nueve" };
  10.  cout << "Frase: ";
  11.  cin >> frase;
  12.  
  13.  while (frase[i]) {
  14.    if (isdigit(frase[i]))
  15.      cout << num[frase[i]-48] << " ";
  16.    i++;
  17.  }
  18.  
  19.  while(cin.get()!='\n');
  20.  cin.get();
  21.  return 0;
  22. }
  23.  

2)
Código
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  string texto;
  7.  
  8.  cout << "Texto: ";
  9.  getline(cin, texto);
  10.  cout << "El texto tiene " << texto.length() << " caracteres.";
  11.  cin.get();
  12.  return 0;
  13. }
  14.  

3)
Código
  1. #include <iostream>
  2. #define MAX_PALABRAS 4
  3.  
  4. using namespace std;
  5. int main() {
  6.  string vec[MAX_PALABRAS], min;
  7.  
  8.  cout << "Ingrese " << MAX_PALABRAS << " palabras" << endl;
  9.  cout << "-----------------" << endl;
  10.  
  11.  min.assign(255,255);
  12.  for(int i = 0; i < MAX_PALABRAS; i++) {
  13.    cout << "Palabra " << i+1 << " :";
  14.    cin >> vec[i];
  15.    if (vec[i] < min)
  16.      min = vec[i];
  17.  }
  18.  cout << endl << "Primer palabra por orden alfabetico: " << min;
  19.  
  20.  while(cin.get()!='\n');
  21.  cin.get();
  22.  return 0;
  23. }
  24.  

Los tres se compilan y ejecuntan sin problemas...

¿ Con que compilador tuviste problemas ?

Saludos.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 22 Septiembre 2012, 09:03 am
g++ desde cmd pero da igual igualmente te sumo los puntos pero para codigos posteriores es mejor que el código sea compatible con todos los compiladores.

En el reto 2 le faltaba el #include <string> y estaba esperando que lo pusieras tu pero da igual y en el 3 lo mismo pero aparte me sale estoo

Código:
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h: In method `class basic_string<char,string_char_traits<char>,__default_all
oc_template<false,0> > & basic_string<char,string_char_traits<char>,__default_al
loc_template<false,0> >::replace<int>(char *, char *, int, int)':
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h:229:   instantiated from here
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h:453: invalid type argument of `unary *'
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h:229:   instantiated from here
C:/mingw/bin/../lib/gcc-lib/mingw32/2.95.3-6/../../../../include/g++-3/std/bastr
ing.h:460: invalid type argument of `unary *'


Título: Re: RETOS C++
Publicado por: 0xDani en 22 Septiembre 2012, 14:07 pm
Hola! Mi crackeador me ha funcionado, yo lo he probado haciendo un diccionario con dos palabras, hola y adios, le he introducido el hash MD5 de adios y la salida ha sido correcta: "Password: adios". Ahora soy yo el que esta esperando 80 puntos   :silbar:


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 22 Septiembre 2012, 15:51 pm
Hola! Mi crackeador me ha funcionado, yo lo he probado haciendo un diccionario con dos palabras, hola y adios, le he introducido el hash MD5 de adios y la salida ha sido correcta: "Password: adios". Ahora soy yo el que esta esperando 80 puntos   :silbar:

lo ideal seria en c++ pero da igual ahora miro que funcione todo bien

PD:Me peudes pasar la libreria crypt.h por que ni mi bactrack ni windows la tienen por defecto.


Título: Re: RETOS C++
Publicado por: 0xDani en 22 Septiembre 2012, 16:04 pm
lo ideal seria en c++ pero da igual ahora miro que funcione todo bien

PD:Me peudes pasar la libreria crypt.h por que ni mi bactrack ni windows la tienen por defecto.

Ok, entiendo que estes ajetreado con esto de los retos. En cuanto a la crypt.h, quiza puedas instalarla en backtrack por consola. Si no alguien que use linux podria comprobarlo, a mi me funciona.

PD: A ver si pones mas retos, que estan entretenidos ;)


Título: Re: RETOS C++
Publicado por: x64core en 23 Septiembre 2012, 02:10 am
cuando propongan retos entro  ::)

importante: reto no es "pedir" un programa, y tambien aqui no se hacen tareas de los demas, por ejemplo
antes que a alguien se le ocurra proponer como: "hacer un programa convertidor de X cosa". eso no es reto.


Título: Re: RETOS C++
Publicado por: Puntoinfinito en 23 Septiembre 2012, 16:56 pm
El reto 2

Código
  1. #include <iostream>
  2. #include <fstream.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. void ruta;
  9. cout << "\n Arrastre ruta del archivo para leer >>> ";
  10. cin >> ruta;
  11. ifstream leer_fichero (ruta);
  12. if ( ! leer_fichero)
  13. cout << endl << " El archivo no existe!!";
  14. leer_fichero.getline()
  15. cin.get();
  16. return 0;
  17. }
  18.  


Título: Re: RETOS C++
Publicado por: ankora45 en 23 Septiembre 2012, 19:38 pm
Ok, entiendo que estes ajetreado con esto de los retos. En cuanto a la crypt.h, quiza puedas instalarla en backtrack por consola. Si no alguien que use linux podria comprobarlo, a mi me funciona.

PD: A ver si pones mas retos, que estan entretenidos ;)

doy fe de que funciona yo lo probe en consola linux XD aver si yo tambien me apunto a esto de los retos

pongo el reto nº 2
Código:
#include <iostream>

using namespace std;

int main()
{
    ifstream archivo;
    char ruta[50];
    cout<<"escriba la ruta"<<endl;
    cin>>ruta;
    while (!archivo.eof)
    {
      archivo.read (ruta, sizeof(ruta));
      cout<<ruta<<endl;
    }
}


ademas tengo el reto numero 3 aunque lo hice muy extenso tambien vale xD
Código:
#include <iostream>

using namespace std;

int main()
{
    long long int num1;
    long long int num2;
    long long int num3;
    long long int num4;
    cout<<"escriba 4 numero diferentes"<<endl;
    cout<<"escribe el primer numero"<<endl;
    cin>>num1;
    cout<<"escribe el segundo numero"<<endl;
    cin>>num2;
    cout<<"escribe el tercer numero"<<endl;
    cin>>num3;
    cout<<"escribe el cuarto numero"<<endl;
    cin>>num4;
    if (num1>num2)
    {
        if (num1>num3)
        {
            if (num1>num4)
            {
                cout<<"el numero 1 es el mas grande"<<endl;
            }
        }
    }
    if (num2>num1)
    {
        if (num2>num3)
        {
            if (num2>num4)
            {
                cout<<"el numero 2 es el mas grande"<<endl;
            }
        }
    }
    if (num3>num2)
    {
        if (num3>num1)
        {
            if (num3>num4)
            {
                cout<<"el numero 3 es el mas grande"<<endl;
            }
        }
    }
    if (num4>num2)
    {
        if (num4>num3)
        {
            if (num4>num4)
            {
                cout<<"el numero 4 es el mas grande"<<endl;
            }
        }
    }

     return 0;
}


Título: Re: RETOS C++
Publicado por: 0xDani en 23 Septiembre 2012, 20:39 pm
doy fe de que funciona yo lo probe en consola linux XD aver si yo tambien me apunto a esto de los retos

pongo el reto nº 2
Código:
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char* argv[])
{
    ifstream fichero(argv[1]);
    char nombre[5];
    if (!fichero.eof())
    {
        fichero.read(nombre, 5);
        cout<<nombre<<endl;
    }
    else
    {
        cout<<"no se ha podido leer el fichero"<<endl;
    }
    fichero.close();
    return 0;
}


Ese codigo solo lee 5 caracteres del archivo. Y gracias por probar el crackeador de MD5.


Título: Re: RETOS C++
Publicado por: ankora45 en 23 Septiembre 2012, 21:11 pm
ya modifique el codigo ahora te lee el archivo


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 23 Septiembre 2012, 21:53 pm
ya actualize los puntos y añadi un reto si encuentro otros retos ya actualizare,

si alguien ve que algo falla no dude en decirlo


Título: Re: RETOS C++
Publicado por: ankora45 en 24 Septiembre 2012, 09:07 am
skaterwiner00 por que solo tengo 2 puntos si hice el reto nº2 y el nº3 deberia tener 5 puntos ademas de que los hice en c++ no?
creo que es asi xD o alomejor me ekivoco saludos


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 24 Septiembre 2012, 15:06 pm
skaterwiner00 por que solo tengo 2 puntos si hice el reto nº2 y el nº3 deberia tener 5 puntos ademas de que los hice en c++ no?
creo que es asi xD o alomejor me ekivoco saludos

probando los programs no funciono ninguno osea k te tendria qeu quitar los puntos :P ya que en el 2 solo mire si compilaba y no mire si funcionaba bien.

te dejo la salida de los dos

para el 3 me dio lo siguiente
Código:
C:\Users\David\Desktop>a
escriba 4 numero diferentes
escribe el primer numero
10
escribe el segundo numero
2
escribe el tercer numero
8
escribe el cuarto numero
19

C:\Users\David\Desktop>a
escriba 4 numero diferentes
escribe el primer numero
1
escribe el segundo numero
2
escribe el tercer numero
3
escribe el cuarto numero
4

C:\Users\David\Desktop>a
escriba 4 numero diferentes
escribe el primer numero
4
escribe el segundo numero
3
escribe el tercer numero
2
escribe el cuarto numero
1
el numero 1 es el mas grande
como ves en el 3 si el 4 numero es el mas grande no dice nada
para el dos esto
Código:
C:\Users\David\Desktop>g++ a.cpp
a.cpp: In function `int main()':
a.cpp:7: `ifstream' undeclared (first use this function)
a.cpp:7: (Each undeclared identifier is reported only once
a.cpp:7: for each function it appears in.)
a.cpp:7: parse error before `;'
a.cpp:11: `archivo' undeclared (first use this function)


Título: Re: RETOS C++
Publicado por: ankora45 en 24 Septiembre 2012, 15:27 pm
mil disculpas skatewinner00 tenia un error en el reto posteo el codigo arreglado.
si te fijas en el codigo antiguo donde pone if (4>2) dentro del bucle hay otro pues en uno ponia if (4>4) ese era el problema  :rolleyes:
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    long long int num1;
  8.    long long int num2;
  9.    long long int num3;
  10.    long long int num4;
  11.    cout<<"escriba 4 numero diferentes"<<endl;
  12.    cout<<"escribe el primer numero"<<endl;
  13.    cin>>num1;
  14.    cout<<"escribe el segundo numero"<<endl;
  15.    cin>>num2;
  16.    cout<<"escribe el tercer numero"<<endl;
  17.    cin>>num3;
  18.    cout<<"escribe el cuarto numero"<<endl;
  19.    cin>>num4;
  20.    if (num1>num2)
  21.    {
  22.        if (num1>num3)
  23.        {
  24.            if (num1>num4)
  25.            {
  26.                cout<<"el numero 1 es el mas grande"<<endl;
  27.            }
  28.        }
  29.    }
  30.    if (num2>num1)
  31.    {
  32.        if (num2>num3)
  33.        {
  34.            if (num2>num4)
  35.            {
  36.                cout<<"el numero 2 es el mas grande"<<endl;
  37.            }
  38.        }
  39.    }
  40.    if (num3>num2)
  41.    {
  42.        if (num3>num1)
  43.        {
  44.            if (num3>num4)
  45.            {
  46.                cout<<"el numero 3 es el mas grande"<<endl;
  47.            }
  48.        }
  49.    }
  50.    if (num4>num2)
  51.    {
  52.        if (num4>num3)
  53.        {
  54.            if (num4>num1)
  55.            {
  56.                cout<<"el numero 4 es el mas grande"<<endl;
  57.            }
  58.        }
  59.    }
  60.  
  61.     return 0;
  62. }
  63.  


Título: Re: RETOS C++
Publicado por: Puntoinfinito en 24 Septiembre 2012, 17:50 pm
2 -. Ahora 100% funcional :)

Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. int main () {
  6. fstream ficheroEntrada;
  7. char letra;
  8.  
  9. ficheroEntrada.open ("ficheroTexto.txt", ios::in);
  10. if (ficheroEntrada.is_open()) {
  11. while (! ficheroEntrada.eof() ) {
  12. ficheroEntrada >> letra;
  13. cout << letra << " ";
  14. }
  15. ficheroEntrada.close();
  16. }
  17. else cout << "Fichero inexistente" << endl;
  18. cin.get();
  19. return 0;


Título: Re: RETOS C++
Publicado por: ankora45 en 24 Septiembre 2012, 20:34 pm
hola he hecho el crakeador de md5 ayudandome del codigo fuente de 0xdani yo uso windows y la funcion crypt.h lo he compilado en una distribucion linux y creo qeu no me ha surgido ningun problema pero creo que con mingw se puede instal esa funcion o atraves del cmd no se seguire investigando aun asi posteo el codigo del crakeador que alguien lo pruebe porfavor XD aunque me esforce por hacerlo como puede me ayude del codigo de 0xdani bastante asi k no me sumen los puntos quiero aprender por mimismo xD y si he puesto fflush (stdin) soy novatillo xD
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. #include <crypt.h>
  6.  
  7. int main(int argc, char* argv[])
  8. {
  9.    const char saltar[] = "$$$............";
  10.    char *buffer, contrasena[40], *hash;
  11.    hash = (char*) malloc(40);
  12.    buffer = (char*) malloc(40);
  13.    FILE* file = fopen(argv[1], "r+");
  14.    printf("Escribe un hash.... ");
  15.    fgets(contrasena, 40, stdin);
  16.    if(!feof(file))
  17.    {
  18.     fgets(buffer, 40, file);
  19.     hash =crypt(buffer, saltar);
  20.     if(!strcmp(contrasena, hash));
  21.    }
  22.    printf("contraseña: %s", buffer);
  23.    fclose(file);
  24.    fflush (stdin);
  25.    printf ("\npulse intro para continuar");
  26.    getchar();
  27.    return 0;
  28. }
  29.  


Título: Re: RETOS C++
Publicado por: do-while en 24 Septiembre 2012, 21:44 pm
¡Buenas!

¿En el de las espirales que hay que hacer? ¿Calcular el numero de espirales? ¿Dibujarlas? Si es lo ultimo, ¿Que criterio hay que seguir para dibujarlas? ¿Cuantas hay que dibujar? ¿Una? ¿Todas las que se pueda?

¡Saludos!


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 24 Septiembre 2012, 21:48 pm
¡Buenas!

¿En el de las espirales que hay que hacer? ¿Calcular el numero de espirales? ¿Dibujarlas? Si es lo ultimo, ¿Que criterio hay que seguir para dibujarlas? ¿Cuantas hay que dibujar? ¿Una? ¿Todas las que se pueda?

¡Saludos!

mejor voy a poner retos mas entendibles para todos


Título: Re: RETOS C++
Publicado por: ankora45 en 25 Septiembre 2012, 16:28 pm
aqui el reto nº 10 me encapriche y al final lo saque
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.  char palabra[21];
  8.  int a;
  9.  cout<<"Teclea una palabra:"<<endl;
  10.  cin>>palabra;
  11.  a=0;
  12.  while (palabra[a++]!='\0');
  13.  {
  14.  cout<<"--------------------------------"<<endl;
  15.  cout<<palabra<<" escrita al reves es: "<<endl;
  16.    while (a>=0)
  17.    {
  18.       cout<<palabra[a--]<<endl;
  19.    }
  20.  }
  21.  return 0;
  22. }
  23.  

tambien el reto nº1
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.  char palabra[21];
  8.  int a;
  9.  cout<<"Teclea una palabra:"<<endl;
  10.  cin>>palabra;
  11.  a=0;
  12.  while (palabra[a++]!='\0');
  13.  {
  14.  cout<<palabra<<" tiene "<<a-1<<" letras"<<endl;
  15.  }
  16.  return 0;
  17. }


Título: Re: RETOS C++
Publicado por: do-while en 26 Septiembre 2012, 15:08 pm
1. b.
Código
  1. //Linea de comandos: nombre programa cadena.
  2. //Salida: Numero de caracteres.
  3.  
  4. #include <iostream>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. int main(int argc, char *argv[])
  10. {
  11.    if(argc != 2)
  12.    {
  13.        cerr << argv[0] << " cadena";
  14.        return -1;
  15.    }
  16.  
  17.    cout << string(argv[1]).length();
  18.  
  19.    return 0;
  20. }
  21.  

10.
Código
  1. // Llinea de comandos: programa cadena
  2. // Salida: La cadena invertida
  3.  
  4. #include <iostream>
  5.  
  6. using namespace std;
  7.  
  8. int main(int argc, char *argv[])
  9. {
  10.    if(argc != 2)
  11.    {
  12.        cerr << argv[0] << " cadena" << endl;
  13.        return -1;
  14.    }
  15.  
  16.    if(!(*argv[1]))
  17.        return 0;
  18.  
  19.    argv[1]++;
  20.  
  21.    main(argc,argv);
  22.  
  23.    cout << *(--argv[1]);
  24.  
  25.    return 0;
  26. }
  27.  


Título: Re: RETOS C++
Publicado por: ankora45 en 26 Septiembre 2012, 19:35 pm
arreglado el reto nº2 de leer archivos de texto posteo codes
Código
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char* argv[])
  7. {
  8.    ifstream archivo;
  9.    char ruta[50];
  10.    cout<<"escriba la ruta"<<endl;
  11.    cin>>ruta;
  12.    archivo.open(ruta);
  13.    archivo.read(ruta, sizeof(ruta));
  14.    cout<<ruta<<endl;
  15.    return 0;
  16. }
  17.  
esto es 1p mas no jaja ya que eran dos y solo me pusiste uno porque estaba mal jaja


Título: Re: RETOS C++
Publicado por: 0xDani en 26 Septiembre 2012, 19:41 pm
arreglado el reto nº2 de leer archivos de texto posteo codes
Código
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main(int argc, char* argv[])
  7. {
  8.    ifstream archivo;
  9.    char ruta[50];
  10.    cout<<"escriba la ruta"<<endl;
  11.    cin>>ruta;
  12.    archivo.open(ruta);
  13.    archivo.read(ruta, sizeof(ruta));
  14.    cout<<ruta<<endl;
  15.  
  16. }
  17.  
esto es 1p mas no jaja ya que eran dos y solo me pusiste uno porque estaba mal jaja

Tu programa no retorna? xD Justo ahora iba a postear otra manera de leer un fichero que he hecho hoy probando los mapeos de memoria. Esta en C y usa POSIX, pero creo que es un codigo interesante:

Código
  1. #include <unistd.h>
  2. #include <sys/mman.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. #include <stdio.h>
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9. int fd = open(argv[1], O_RDONLY);
  10. struct stat st;
  11. fstat(fd, &st);
  12. char *addr = mmap(0, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
  13. while(*addr!=NULL)
  14. {
  15.  printf("%c", *addr);
  16.  addr++;
  17. }
  18. _exit(0);
  19. }

Saludos.


Título: Re: RETOS C++
Publicado por: ankora45 en 26 Septiembre 2012, 20:47 pm
Gracias por el aviso ahora modifico muy interesante tu programa xD


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 26 Septiembre 2012, 21:03 pm
Hoy no tengo mucho tiempo mañana k es viernes mirare los codes, mientras comprueven que realmente funcionan


Título: Re: RETOS C++
Publicado por: 0xDani en 26 Septiembre 2012, 21:20 pm
Hoy no tengo mucho tiempo mañana k es viernes mirare los codes, mientras comprueven que realmente funcionan

Mañana es jueves xD. El mio no hace falta que lo comprobeis, ya lo tenia hecho, ademas en C++. Lo he puesto solo como aporte.


Título: Re: RETOS C++
Publicado por: Senior++ en 26 Septiembre 2012, 21:29 pm
3- Un programa que diga el numero mas grande. El usuario ha de insertar 4 numeros separados por un espacio.

Bueno por consola lo hice...

Lenguaje utilizado: C



Código:
#include <stdio.h>
int main(){
int numero1 = 122,numero2 = 15,numero3=23,numero4=12;
if ((numero1>numero2) && (numero1>numero3) && (numero1>numero4)) {
printf("El numero mas grande es:%d",numero1);
}
if ((numero2>numero1) && (numero2>numero3) && (numero2>numero4)) {
printf("El numero mas grande es:%d",numero2);
}
if ((numero3>numero1) && (numero3>numero2) && (numero3>numero4)) {
printf("El numero mas grande es:%d",numero3);
}
if ((numero4>numero1) && (numero4>numero2) && (numero4>numero3)) {
printf("El numero mas grande es:%d",numero4);
}
return 0;
}

Como se pone en color el código? :xD


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 26 Septiembre 2012, 22:57 pm
Mañana es jueves xD. El mio no hace falta que lo comprobeis, ya lo tenia hecho, ademas en C++. Lo he puesto solo como aporte.

A es verdad XD ya me arruinaste el día, bueno pues mañana jueves lo mirare que como mañana tengo examen no tengo mucho tiempo


Título: Re: RETOS C++
Publicado por: leosansan en 27 Septiembre 2012, 01:32 am
______
3- Un programa que diga el numero mas grande. El usuario ha de insertar 4 numeros separados por un espacio.
Si se toma al pie de la letra se ha de ingresar algo como "21 14 63 98", no ir ingresando los números uno a uno. ¿O no?.
En este supuesto propongo:

Código
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5.    int N1,N2,N3,N4,mayor;
  6.    char ch,cad[100]= "17 32 15 27";
  7.    /*printf ("Introduzca cuatro numeros separados por un espacio:");
  8.     gets (cad);*/
  9.    sscanf(cad, "%d%c%d%c%d%c%d",&N1, &ch ,&N2,&ch, &N3,&ch, &N4  );
  10.    printf ("%d  %d  %d  %d",N1,N2,N3,N4);
  11.    mayor=N1;
  12.    if (N2>N1) mayor =N2;
  13.    if (N3>mayor) mayor =N3;
  14.    if(N4> mayor) mayor =N4;
  15.    printf ("\nmayor=%d",mayor);
  16.    return 0;
  17. }
  18. [code]
[/code]


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 27 Septiembre 2012, 15:21 pm
Para el reto de poner  4 numeros y decir el mas grande.

Usando la libreria algorithm se puede usar una funcion llamada
max
esta funcion permite estalviarse bastante codigo y utilizar solo uan comparacion.

Para los que ya hayan echo el codigo de decir el numero más grande y su codigo tenga muchos if pueden buscar la funcion max, y les sumare 1p.



Título: Re: RETOS C++
Publicado por: leosansan en 27 Septiembre 2012, 16:11 pm
Para el reto de poner  4 numeros y decir el mas grande.
¿Viste en el anterior post la observación de introducir los cuatro a la vez separados por un espacio cada uno, como indica el enunciado?

Citar
1-Un programa que cuente los caracteres que tiene un texto previamente introducido por el usuario (parece más fácil de lo que es)
ejemplo de entrada: "ho la" ejemplo salida:el texto tiene 5 caracteres
A lo cortito:
Código
  1. #include <stdio.h>
  2. main()
  3. {
  4.    int i;
  5.    char cadena [80];
  6.    gets (cadena);
  7.    for (i=0;cadena [i]!='\0';i++)
  8.                  ;
  9.    printf ("\nEl texto tiene %d caracteres.",i);
  10.    return 0;
  11. }


Título: Re: RETOS C++
Publicado por: ankora45 en 27 Septiembre 2012, 16:21 pm
ola jeje como va lo de la suma de puntos xD aver si tienes tiempo para poder poner nuavos retos juajua a tdo esto xD cerre las advertencias del compilador de code::blocks y no se como ponerlo de new jaja


Título: Re: RETOS C++
Publicado por: 0xDani en 27 Septiembre 2012, 16:37 pm
ola jeje como va lo de la suma de puntos xD aver si tienes tiempo para poder poner nuavos retos juajua a tdo esto xD cerre las advertencias del compilador de code::blocks y no se como ponerlo de new jaja

En el menu View. Si, estarian bien nuevos retos.


Título: Re: RETOS C++
Publicado por: leosansan en 27 Septiembre 2012, 16:42 pm
2- Crear programa que lea el contenido de un archivo de texto.
Pues ahí va:
Código
  1. #include <stdio.h>
  2. main()
  3. {
  4.    FILE *fichero;
  5.    char linea [80];
  6.    fichero = fopen ("prueba2.txt" , "w");
  7.    fputs("Esto es una linea\n", fichero);
  8.    fputs("Esto es otra y esto es continuacion de lo anterior", fichero);
  9.    fclose(fichero);
  10.    fichero = fopen("prueba2.txt", "r");
  11.    if ( fichero == NULL )
  12.    printf("\nError sl sbrir el fichero\n");
  13.    else
  14.    printf("\nContenido del fichero prueba2.txt\n\n");
  15.    while ( !feof(fichero) )
  16.        {
  17.            fgets(linea, 80, fichero);
  18.            puts(linea);
  19.        }
  20.    fclose(fichero);
  21. }

EI: juntando mensajes.

10- Un programa que escriba al revés las palabras. .
Entrada: hola
Salida: aloh

Sin uso de libreria string:
Código
  1. #include <stdio.h>
  2. main()
  3. {
  4.    int i,j;
  5.    char cadena [80];
  6.    gets (cadena);
  7.    for (i=0;cadena [i]!='\0';i++)
  8.            ;
  9.    for (j=i-1;j>=0;j--)
  10.        printf ("%c",cadena [j]);
  11.    return 0;
  12. }


Título: Re: RETOS C++
Publicado por: ankora45 en 27 Septiembre 2012, 17:20 pm
Sin uso de libreria string:
Código
  1. #include <stdio.h>
  2. main()
  3. {
  4.    int i,j;
  5.    char cadena [80];
  6.    gets (cadena);
  7.    for (i=0;cadena [i]!='\0';i++)
  8.            ;
  9.    for (j=i-1;j>=0;j--)
  10.        printf ("%c",cadena [j]);
  11.    return 0;
  12. }
ola xD antes de nada he de decirte que los retos son en c++ no en c y que si los haces en c creo que te penalizan pero ya eso no se xD


Título: Re: RETOS C++
Publicado por: leosansan en 27 Septiembre 2012, 17:53 pm
ola xD antes de nada he de decirte que los retos son en c++ no en c
Una retirada a tiempo es una victoria. Sorry por el C.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 27 Septiembre 2012, 17:57 pm
Una retirada a tiempo es una victoria. Sorry por el C.

En realidad si que hiva de c++ epro si lo poneis en c no pasa nada. Lo puse en c++ por que me parecia mejor, ya que es más actual y más fácil.Pero si alguien se quiere complicar la vida no passa nada :xD


Título: Re: RETOS C++
Publicado por: ankora45 en 27 Septiembre 2012, 18:06 pm
skaterwinner si tengo mas puntos que el tercero por que sigo cuarto >_< xD


Título: Re: RETOS C++
Publicado por: Caster en 27 Septiembre 2012, 18:41 pm
Alguien podría a animarse a hacer algo parecido en C, para la gente que está aprendiendo ese lenguaje, como yo. Los códigos fáciles son una forma de repasar cosas ya aprendidas y los díficiles una forma de motivación.

Saludos.


Título: Re: RETOS C++
Publicado por: ankora45 en 27 Septiembre 2012, 19:22 pm
siempre puede hacer estos retos en c xD


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 27 Septiembre 2012, 19:51 pm
skaterwinner si tengo mas puntos que el tercero por que sigo cuarto >_< xD

Perdon :P ya lo arregle


EI: juntando mensajes.

Si se toma al pie de la letra se ha de ingresar algo como "21 14 63 98", no ir ingresando los números uno a uno. ¿O no?.
:



La idea era que el usuario ingresava 4 numeros pero sin tocar el codigo fuente.



Título: Re: RETOS C++
Publicado por: ankora45 en 27 Septiembre 2012, 21:28 pm
Hola posteo el code del reto nº11 que algien lo pruebe y me diga que yo no tengo ahora mismo codeblocks xD
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int mesn;
  8.    int mes;
  9.    int dian;
  10.    int dia;
  11.    int mest = mesn-mes;
  12.    int diat1 = dia-dian;
  13.    int diat2 = dian-dia;
  14.    int mest2 = 30*mest;
  15.    int total1 = diat1-mest2;
  16.    int total2 = diat2-mest2;
  17.    cout<<"introduce el mes al que estamos "<<endl;
  18.    cin>>mes;
  19.    cout<<"introduce el dia en el que estamos"<<endl;
  20.    cin>>dia;
  21.    cout<<"introduce el mes en el que naciste "<<endl;
  22.    cin>>mesn;
  23.    cout<<"introduce el dia que nacistes "<<endl;
  24.    cin>>dian;
  25.    if (mesn>mes)
  26.    {
  27.    if (dian>dia)
  28.       {
  29.           cout<<"te quedan "<<mesn-mes<<" meses y "<<total2<<" dias y "<<total1/7<<" semanas para tu cumple"<<endl;
  30.       }
  31.    else
  32.       {
  33.           cout<<"te quedan "<<mesn-mes<<" meses y "<<total2<<" dias y "<<total2/7<<" semanas para tu cumple"<<endl;
  34.       }
  35.    }
  36.    else
  37.    {
  38.       if (dian>dia)
  39.       {
  40.           cout<<"te quedan "<<mes-mesn+12<<" meses y "<<total2<<" dias y "<<total1/7<<" semanas para tu cumple"<<endl;
  41.       }
  42.    else
  43.       {
  44.           cout<<"te quedan "<<mesn-mes+12<<" meses y "<<total2<<" dias y "<<total2/7<<" semanas para tu cumple"<<endl;
  45.       }
  46.    }
  47.    return 0;
  48. }
  49.  


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 27 Septiembre 2012, 21:56 pm
Hola posteo el code del reto nº11 que algien lo pruebe y me diga que yo no tengo ahora mismo codeblocks xD
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int mesn;
  8.    int mes;
  9.    int dian;
  10.    int dia;
  11.    int mest = mesn-mes;
  12.    int diat1 = dia-dian;
  13.    int diat2 = dian-dia;
  14.    int mest2 = 30*mest;
  15.    int total1 = diat1-mest2;
  16.    int total2 = diat2-mest2;
  17.    cout<<"introduce el mes al que estamos "<<endl;
  18.    cin>>mes;
  19.    cout<<"introduce el dia en el que estamos"<<endl;
  20.    cin>>dia;
  21.    cout<<"introduce el mes en el que naciste "<<endl;
  22.    cin>>mesn;
  23.    cout<<"introduce el dia que nacistes "<<endl;
  24.    cin>>dian;
  25.    if (mesn>mes)
  26.    {
  27.    if (dian>dia)
  28.       {
  29.           cout<<"te quedan "<<mesn-mes<<" meses y "<<total2<<" dias y "<<total1/7<<" semanas para tu cumple"<<endl;
  30.       }
  31.    else
  32.       {
  33.           cout<<"te quedan "<<mesn-mes<<" meses y "<<total2<<" dias y "<<total2/7<<" semanas para tu cumple"<<endl;
  34.       }
  35.    }
  36.    else
  37.    {
  38.       if (dian>dia)
  39.       {
  40.           cout<<"te quedan "<<mes-mesn+12<<" meses y "<<total2<<" dias y "<<total1/7<<" semanas para tu cumple"<<endl;
  41.       }
  42.    else
  43.       {
  44.           cout<<"te quedan "<<mesn-mes+12<<" meses y "<<total2<<" dias y "<<total2/7<<" semanas para tu cumple"<<endl;
  45.       }
  46.    }
  47.    return 0;
  48. }
  49.  

lo siento pero no acava de ir bien te dejo el resultado k me dio

Código:
introduce el mes al que estamos
09
introduce el dia en el que estamos
27
introduce el mes en el que naciste
09
introduce el dia que nacistes
25
te quedan 12 meses y 1511526 dias y 215932 semanas para tu cumple

C:\Users\David\Desktop>a
introduce el mes al que estamos
09
introduce el dia en el que estamos
24
introduce el mes en el que naciste
09
introduce el dia que nacistes
25
te quedan 12 meses y 1511526 dias y -215966 semanas para tu cumple


Título: Re: RETOS C++
Publicado por: ankora45 en 28 Septiembre 2012, 16:15 pm
ya esta arreglado xD era un error en las operaciones siento que el codigo sea tan largo xD pero =mente vale jaja
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int mesn;
  8.    int mes;
  9.    int dian;
  10.    int dia;
  11.    cout<<"introduce el mes al que estamos "<<endl;
  12.    cin>>mes;
  13.    cout<<"introduce el dia en el que estamos"<<endl;
  14.    cin>>dia;
  15.    cout<<"introduce el mes en el que naciste "<<endl;
  16.    cin>>mesn;
  17.    cout<<"introduce el dia que nacistes "<<endl;
  18.    cin>>dian;
  19.    int mm = mesn-mes;
  20.    int mmm = mes-mesn;
  21.    int dd = 30*mm+dian-dia;
  22.    int dd2 = 30*mm+dia-dian;
  23.    int ddd = 30*mmm-dia-dian;
  24.    int ddd2 = 30*mmm-dian-dia;
  25.    if (mesn>mes)
  26.    {
  27.          if (dian>dia)
  28.             {
  29.                cout<<"te quedan "<<mesn-mes<<" meses o "<<dd<<" dias o "<<dd/7<<" semanas para tu cumple"<<endl;
  30.             }
  31.         else
  32.             {
  33.                cout<<"te quedan "<<mesn-mes<<" meses o "<<dd2<<" dias o "<<dd2/7<<" semanas para tu cumple"<<endl;
  34.             }
  35.    }
  36.    else
  37.    {
  38.          if (dian>dia)
  39.             {
  40.                cout<<"te quedan "<<mes-mesn+12<<" meses o "<<ddd<<" dias o "<<ddd/7<<" semanas para tu cumple"<<endl;
  41.             }
  42.         else
  43.             {
  44.                cout<<"te quedan "<<mesn-mes+12<<" meses o "<<ddd2<<" dias o "<<ddd2/7<<" semanas para tu cumple"<<endl;
  45.             }
  46.    }
  47.    return 0;
  48. }
  49.  
  50.  
espero mis pp con ilu jaja


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 29 Septiembre 2012, 14:42 pm
RETO 10:
(http://i49.tinypic.com/2rpwtuv.png)

Código
  1. #include <iostream>
  2. using namespace std;
  3. int main(int argc,char* argv)
  4. {
  5.    string palabra,invertida="";
  6.    cout << "Inserta la palabra a invertir" << endl;
  7.    cin >> palabra;
  8.    for(int x = palabra.length()-1;x>=0;x--)
  9.    {
  10.        invertida = invertida + palabra[x];
  11.    }
  12.    cout << invertida << endl;
  13.    return 0;
  14. }
  15.  


RETO 1

Código
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4. int main()
  5. {
  6.    char palabra[100];
  7.    cin.getline(palabra,100);
  8.    cout << strlen(palabra) << endl;
  9.    return 0;
  10. }
  11.  

RETO 2

Código
  1. #include <fstream>
  2. #include <iostream>
  3. using namespace std;
  4. int main(int argc, char* argv)
  5. {
  6.    ifstream archivo("archivo.txt");
  7.    string texto;
  8.    while(!archivo.eof())
  9.    {
  10.        getline(archivo,texto);
  11.        cout << texto << endl;
  12.    }
  13.    archivo.close();
  14.    return 0;
  15. }
  16.  

RETO 3
(http://i45.tinypic.com/nwk7y1.png)
Código
  1. #include <iostream>
  2. using namespace std;
  3. int main(int argc, char* argv)
  4. {
  5.    int numeros[3];
  6.    cout << "Inserta 4 numeros" << endl;
  7.    cin >> numeros[0] >> numeros[1] >> numeros[2] >> numeros[3];
  8.    if(numeros[0] > numeros[1] && numeros[0] > numeros[2] && numeros[0] > numeros[3])
  9.    {
  10.        cout << "El mayor es: " << numeros[0] << endl;
  11.    }
  12.    else
  13.    {
  14.        if(numeros[1] > numeros[0] && numeros[1] > numeros[2] && numeros[1] > numeros[3])
  15.        {
  16.            cout << "El mayor es: " << numeros[1] << endl;
  17.        }
  18.        else
  19.        {
  20.            if(numeros[2] > numeros[0] && numeros[2] > numeros[1] && numeros[2] > numeros[3])
  21.            {
  22.                cout << "El mayor es: " << numeros[2] << endl;
  23.            }
  24.            else
  25.            {
  26.                if(numeros[3] > numeros[0] && numeros[3] > numeros[2] && numeros[3] > numeros[1])
  27.                {
  28.                    cout << "El mayor es: " << numeros[3] << endl;
  29.                }
  30.            }
  31.        }
  32.    }
  33.    return 0;
  34. }

RETO 11
(http://i48.tinypic.com/2agoh9z.png)
Código
  1. #include <iostream>
  2. #include <time.h>
  3. using namespace std;
  4. int main(int argc,char* argv)
  5. {
  6.    int mesNacimiento,diaNacimiento;
  7.    time_t fecha;
  8.    struct tm *datos;
  9.    time(&fecha);
  10.    datos = localtime(&fecha);
  11.    cout << "Inserta el mes y el dia de nacimiento separados por espacio" << endl;
  12.    cin >> mesNacimiento >> diaNacimiento;
  13.    if((mesNacimiento - (datos->tm_mon+1)) < 0)
  14.    {
  15.        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;
  16.    }
  17.    else
  18.    {
  19.        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 ;
  20.    }
  21.  
  22.    return 0;
  23. }
  24.  


Título: Re: RETOS C++
Publicado por: do-while en 29 Septiembre 2012, 22:03 pm
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!

Código
  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. #define bisiesto(X) (((!((X) % 4)) && ((X) % 100)) || ((!((X) % 100)) && (!((X) % 400))))
  5.  
  6. using namespace std;
  7.  
  8. class Fecha
  9. {
  10.    public:
  11.        Fecha();
  12.        Fecha(int dia, int mes, int año);
  13.        Fecha(const Fecha &original);
  14.  
  15.        bool set(int dia, int mes, int año);
  16.        bool setD(int dia);
  17.        bool setM(int mes);
  18.        bool setA(int año);
  19.  
  20.        int getD() const;
  21.        int getM() const;
  22.        int getA() const;
  23.  
  24.        //calcula la diferencia en dias entre la fehca mayo y la menor
  25.        friend unsigned long dif(Fecha &f1, Fecha &f2);
  26.  
  27.        //compara fechas -1 si la primera es menor 0 si son iguales y 1 si la segunda es mayor
  28.        friend int cmp(Fecha &f1, Fecha &f2);
  29.  
  30.    private:
  31.  
  32.        //calcula los dias hasta el año cero (si año < 0) o desde el año cero (si año >= 0)
  33.        long int dias() const;
  34.  
  35.        int dia;
  36.        int mes;
  37.        int año;
  38. };
  39.  
  40. Fecha::Fecha()
  41. {
  42.    //struct proporcionado por ctime para manejar fechas
  43.    struct tm *fecha;
  44.  
  45.    //tipo de dato definido en ctime para manejar fechas
  46.    time_t t;
  47.  
  48.    t = time(NULL);
  49.  
  50.    fecha = localtime(&t);
  51.  
  52.    dia = fecha->tm_mday;
  53.    mes = fecha->tm_mon + 1; //0 <= tm_mon <= 11
  54.    año = fecha->tm_year + 1900; //tm_year es medido desde 1900
  55. }
  56.  
  57. Fecha::Fecha(int d, int m, int a)
  58. {
  59.    int dias[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  60.  
  61.    año = a;
  62.  
  63.    if(m < 1 || m > 12)
  64.        m = 1;
  65.  
  66.    if(m == 2)
  67.    {
  68.        if(d > 29)
  69.            d = 1;
  70.        if(d == 29 && !bisiesto(año))
  71.            d = 1;
  72.    }
  73.    else
  74.        if(d > dias[m - 1])
  75.            d = 1;
  76.  
  77.    mes = m;
  78.    dia = d;
  79. }
  80.  
  81. Fecha::Fecha(const Fecha &original)
  82. {
  83.    this->dia = original.dia;
  84.    this->mes = original.mes;
  85.    this->año = original.año;
  86. }
  87.  
  88. bool Fecha::set(int d, int m, int a)
  89. {
  90.    //copia miembro a miembro (no hay problemas ya que no hay punteros)
  91.    *this = Fecha(d,m,a);
  92.  
  93.    return true;
  94. }
  95.  
  96. bool Fecha::setD(int d)
  97. {
  98.    int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  99.  
  100.    if(d < 1)
  101.        return false;
  102.  
  103.    if(mes == 2)
  104.    {
  105.        if(d > 29)
  106.            return false;
  107.  
  108.        if(d == 29 && !bisiesto(año))
  109.            return false;
  110.    }
  111.    else
  112.        if(d > diasmes[mes - 1])
  113.            return false;
  114.  
  115.    dia = d;
  116.  
  117.    return true;
  118. }
  119.  
  120. bool Fecha::setM(int m)
  121. {
  122.    int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  123.  
  124.    if(m < 1 || m > 12)
  125.        return false;
  126.  
  127.    if(m == 2)
  128.    {
  129.        if(dia > 29)
  130.            return false;
  131.  
  132.        if(dia == 29 && !bisiesto(año))
  133.            return false;
  134.    }
  135.    else
  136.        if(dia > diasmes[m - 1])
  137.            return false;
  138.  
  139.    mes = m;
  140.  
  141.    return true;
  142. }
  143.  
  144. bool Fecha::setA(int a)
  145. {
  146.    if(mes == 2 && dia == 29 && !bisiesto(a))
  147.        return false;
  148.  
  149.    año = a;
  150.  
  151.    return true;
  152. }
  153.  
  154. int Fecha::getD() const
  155. {
  156.    return dia;
  157. }
  158.  
  159. int Fecha::getM() const
  160. {
  161.    return mes;
  162. }
  163.  
  164. int Fecha::getA() const
  165. {
  166.    return año;
  167. }
  168.  
  169. unsigned long dif(Fecha &f1, Fecha &f2)
  170. {
  171.    //si la primera fecha es menor devolvemos la diferencia evaluada en orden inverso
  172.    if(cmp(f1,f2) < 0)
  173.        return dif(f2,f1);
  174.  
  175.    return f1.dias() - f2.dias();
  176. }
  177.  
  178. long int Fecha::dias() const
  179. {
  180.    int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  181.    unsigned long ndias = 0;
  182.  
  183.    //pasamos la fecha a dias desde el año cero o hasta el año cero:
  184.    ndias = 365 * año;
  185.  
  186.    for(int i = 0 ; i < mes ; i++)
  187.        ndias += diasmes[i];
  188.  
  189.    ndias += dia;
  190.  
  191.    //arreglamos los bisiestos:
  192.    if(año < 0)
  193.    {
  194.        if(mes > 2 || (mes == 2 && dia == 29))
  195.        {
  196.            for(int i = año + 1 ; i < 0 ; i++)
  197.                if(bisiesto(i))
  198.                    ndias++;
  199.        }
  200.        else
  201.        {
  202.            for(int i = año ; i < 0 ; i++)
  203.                if(bisiesto(i))
  204.                    ndias++;
  205.        }
  206.    }
  207.    else
  208.    {
  209.        if(mes > 2)
  210.        {
  211.            for(int i = año ; i >= 0 ; i--)
  212.                if(bisiesto(i))
  213.                    ndias++;
  214.        }
  215.        else
  216.        {
  217.            for(int i = año - 1 ; i >= 0 ; i--)
  218.                if(bisiesto(i))
  219.                    ndias++;
  220.        }
  221.    }
  222.  
  223.    return ndias;
  224. }
  225.  
  226. int cmp(Fecha &f1,Fecha &f2)
  227. {
  228.    if(f1.año < f2.año)
  229.        return -1;
  230.  
  231.    if(f1.año > f2.año)
  232.        return 1;
  233.  
  234.    if(f1.mes < f2.mes)
  235.        return -1;
  236.  
  237.    if(f1.mes > f2.mes)
  238.        return 1;
  239.  
  240.    if(f1.dia < f2.dia)
  241.        return -1;
  242.  
  243.    if(f1.dia > f2.dia)
  244.        return 1;
  245.  
  246.    return 0;
  247. }
  248.  
  249. void leer_datos_cumpleanios(Fecha &cumpleanios)
  250. {
  251.    int dia,mes,año;
  252.  
  253.    //ponemos el dia a uno para evitar errores estableciendo el mes
  254.    cumpleanios.setD(1);
  255.  
  256.    cout << "Introducir a" << (char)164 << "o de nacimiento: ";
  257.    cin >> año;
  258.  
  259.    //si el primer caracter no es numerico no se leeran datos y cin dara error
  260.    while(cin.fail())
  261.    {
  262.        //reseteamos los flags de cin
  263.        cin.clear();
  264.  
  265.        //y terminamos de leer los datos de la entrada
  266.        while(cin.get() != '\n');
  267.  
  268.        cout << "Introducir a" << (char)164 << "o de nacimiento: ";
  269.        cin >> año;
  270.    }
  271.  
  272.    //terminamos de leer los datos de la entrada
  273.    while(cin.get() != '\n');
  274.  
  275.    cumpleanios.setA(año);
  276.  
  277.    do{
  278.        cout << "Introducir mes de nacimiento (1 - 12): ";
  279.        cin >> mes;
  280.  
  281.        while(cin.fail())
  282.        {
  283.            cin.clear();
  284.  
  285.            while(cin.get() != '\n');
  286.  
  287.            cout << "Introducir mes de nacimiento (1 - 12): ";
  288.            cin >> mes;
  289.        }
  290.  
  291.        while(cin.get() != '\n');
  292.  
  293.    }while(!cumpleanios.setM(mes));
  294.  
  295.    do{
  296.        cout << "Introducir dia de nacimiento: ";
  297.        cin >> dia;
  298.  
  299.        while(cin.fail())
  300.        {
  301.            cin.clear();
  302.  
  303.            while(cin.get() != '\n');
  304.  
  305.            cout << "Introducir dia de nacimiento: ";
  306.            cin >> dia;
  307.        }
  308.  
  309.        while(cin.get() != '\n');
  310.  
  311.    }while(!cumpleanios.setD(dia));
  312. }
  313.  
  314. //se trata de ajustar los datos de la fecha de nacimiento al siguiente cumpleaños
  315. void ajustar_datos_cumpleanios(Fecha &cumpleanios)
  316. {
  317.    Fecha actual;
  318.  
  319.    //si el mes del cumpleaños es menor que el actual, hay que pasar al año siguiente
  320.    if(cumpleanios.getM() < actual.getM())
  321.    {
  322.        if(cumpleanios.getM() == 2 && cumpleanios.getD() == 29 && !bisiesto(actual.getA() + 1))
  323.        {
  324.            cumpleanios.set(1,3,actual.getA() + 1);
  325.        }
  326.        else
  327.        {
  328.            cumpleanios.setA(actual.getA() + 1);
  329.        }
  330.    }
  331.    if(cumpleanios.getM() == actual.getM())
  332.    {
  333.        //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
  334.        if(cumpleanios.getD() < actual.getD()) //no hay problemas con bisiestos
  335.            cumpleanios.setA(actual.getA() + 1);
  336.        else //en otro caso aun no se ha superado la fecha de cumpleaños en el año actual
  337.            cumpleanios.setA(actual.getA());
  338.  
  339.    }
  340.    else//en otro caso aun no se ha superado la fecha de cumpleaños en el año actual
  341.        cumpleanios.setA(actual.getA());
  342.  
  343. }
  344.  
  345. int main(int argc, char *argv[])
  346. {
  347.    int diasmes[] = {31,28,31,30,31,30,31,31,30,31,30,31};
  348.    Fecha actual,cumpleanios;
  349.    unsigned long diferencia;
  350.  
  351.    leer_datos_cumpleanios(cumpleanios);
  352.    ajustar_datos_cumpleanios(cumpleanios);
  353.  
  354.    diferencia = dif(actual,cumpleanios);
  355.  
  356.    cout << "Faltan " ;
  357.  
  358.    int contador = 0;
  359.  
  360.    //vamos contando los meses considerando que pasa un mes al pasar tantos dias como tenga el mes que consideramos
  361.    //ej: de enero a febrero 1 mes es que pasen 31 dias, de febrero a marzo 28 ...
  362.    for(int i = actual.getM() - 1 ; diferencia >= diasmes[i % 12] ; i++)
  363.    {
  364.        diferencia -= diasmes[i % 12];
  365.        contador++;
  366.    }
  367.  
  368.    cout << contador << " meses, " << (diferencia / 7) << " semanas y " << (diferencia % 7) \
  369.    << " dias para tu cumplea" << (char)164 << "os." << endl;
  370.  
  371.    cout << endl;
  372.    cout << "ACLARACION RECUENTO MESES:" << endl;
  373.    cout << "De enero a febrero un mes son 31 dias" << endl;
  374.    cout << "De febrero a marzo un mes son 28 dias" << endl;
  375.    cout << "De marzo a abril un mes son 31 dias" << endl;
  376.    cout << "De abril a mayo un mes son 30 dias" << endl;
  377.    cout << "..." << endl;
  378.  
  379.    return 0;
  380. }
  381.  


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 29 Septiembre 2012, 22:45 pm
SI tienen más ideas de retos díganlo k ami ya se me acaban las ideas.

PD:YA actualize los puntos


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 29 Septiembre 2012, 23:11 pm
Ultimo reto
(http://i46.tinypic.com/hx94s4.jpg)
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main() {
  4. int n;
  5. printf("Entrada: ");
  6. scanf("%d", &n);
  7. if(n > 0)
  8. {
  9.    char *v = new char[2*n-1];
  10.    for(int i=0; i<2*n-1; i++) v[i] = ' ';
  11.    int i=n-1, j=n-1;
  12.    while(i >= 0)
  13.    {
  14.        v[i--] = '*';
  15.        v[j++] = '*';
  16.        printf("%s\n", v);
  17.    }
  18.    while(i != j)
  19.    {
  20.        v[++i] = ' ';
  21.        v[--j] = ' ';
  22.        printf("%s\n", v);
  23.    }
  24. }
  25. return 0;
  26. }
  27. }

25 puntitos más bonus ;)


Título: Re: RETOS C++
Publicado por: do-while en 29 Septiembre 2012, 23:33 pm
12.
Código
  1. //linea de comandos nombreprograma numero
  2. //salida: un rombo de 2 * n - 1 lineas
  3.  
  4. #include <cstdio>
  5.  
  6. using namespace std;
  7.  
  8. unsigned int absoluto(int x)
  9. {
  10.    return (x < 0 ? -x : x);
  11. }
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15.    int n;
  16.  
  17.    if(argc != 2)
  18.    {
  19.        printf("%s numero\n",argv[0]);
  20.        return -1;
  21.    }
  22.  
  23.    for(int i = 0 ; argv[1][i] ; i++)
  24.        if(argv[1][i] < '0' || argv[1][i] > '9')
  25.        {
  26.            printf("%s numero\n",argv[0]);
  27.            return -1;
  28.        }
  29.  
  30.    sscanf(argv[1],"%d",&n);
  31.  
  32.    for(int i = 0 ; i < 2 * n - 1 ; i++)
  33.    {
  34.        printf("%*s",absoluto(n - (i + 1)) + 1, " ");
  35.  
  36.        for(int j = 0 ; j < 2 * (n - 1 - (absoluto(n - 1 - i))) + 1 ; j++)
  37.            printf("*");
  38.  
  39.        printf("\n");
  40.    }
  41.  
  42.    return 0;
  43. }
  44.  

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.


Título: Re: RETOS C++
Publicado por: zonahurbana en 30 Septiembre 2012, 05:40 am
Pongo el código de la 3 simplificado:

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int a = 0, b = 0, c = 0, d = 0, mayor = 0;
  8. cout << "Ingresa los 4 numeros por espacio : ";
  9. cin >> a >> b >> c >> d;
  10. if ((a > b) && (a > c) && (a > d))
  11. mayor = a;
  12. if ((b > a) && (b > c) && (b > d))
  13. mayor = d;
  14. if ((c > b) && (c > a) && (c > d))
  15. mayor = c;
  16. if ((d > b) && (d > c) && (d > a))
  17. mayor = d;
  18. cout << "Numero mayor : " << mayor;
  19. cin.sync();
  20. cin.get();
  21. return 0;
  22. }
  23.  

Mejoró más ehh xDD

Pienso que podría hacerse también de este modo:
Código:
#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?


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 30 Septiembre 2012, 11:12 am
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.


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 30 Septiembre 2012, 13:18 pm
stake, espero los puntos nuevos :)


Título: Re: RETOS C++
Publicado por: dato000 en 30 Septiembre 2012, 16:01 pm
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.


Título: Re: RETOS C++
Publicado por: dato000 en 30 Septiembre 2012, 16:52 pm
Perdón por el doble post, pero son cosas diferentes.

Entiendo, pero por el texto de la consigna "Un programa que diga el nombre de dígitos que tiene el texto introducido ", no interpreté que se tratase de la cantidad de caracteres de la cadena ingresada.

Entonces:
Código
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  string texto;
  7.  
  8.  cout << "Texto: ";
  9.  getline(cin, texto);
  10.  cout << "El texto tiene " << texto.length() << " caracteres.";
  11.  cin.get();
  12.  return 0;
  13. }
  14.  

Saludos.

mi solución, me falla porque no lee espacios, y averiguando encontre que la solución de ecfisa, es la mejor...

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main() {
  6.  char palabra[100];
  7.  int contador = 0;
  8.  
  9.  
  10.  cout << "Digita la palabra:  ";
  11.  cin >> palabra;
  12.  
  13.  for (int i = 0; i < 100; i++ )
  14.  {
  15.     if ( palabra[i] !=  '\0' )
  16.        contador++;
  17.    else
  18.         break;
  19.  }
  20.  
  21.  cout << "LA PALABRA TIENE " << contador << " LETRAS";
  22.  return 0;
  23. }
  24.  

De todas maneras, lo intente XDD buenos retos. Sigo!!


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 30 Septiembre 2012, 17:00 pm
RETO 13 (Sudoku)

No consigo entender el enunciado, lo que se ha dado, ¿un sudoku?, no sé como se puede dar un sudoku, lo he interpretado como hacer un sudoku de un tamaño a elegir por el programador, he escogido 4x4 para no alargar el code.
Aquí dejo el source:

Window.hpp
Código
  1. #include <QtGui>
  2. #include<QMessageBox>
  3. class window : public QMainWindow
  4. {
  5.    Q_OBJECT
  6.  
  7.    public:
  8.  
  9.        window();
  10.        void constructWindow();
  11.  
  12.    public slots:
  13.  
  14.        void compruebaSudoku();
  15.  
  16.  
  17.    private:
  18.  
  19.        QLineEdit *numero1,*numero2,*numero3,*numero4,*numero5,*numero6,*numero7,*numero8,*numero9,*numero10,
  20.        *numero11,*numero12,*numero13,*numero14,*numero15,*numero16;
  21.        QVBoxLayout *mainLayout;
  22.        QHBoxLayout *primLayout,*segLayout,*terLayout,*cuarLayout;
  23.        QPushButton *acceptButton;
  24.        QWidget *myWindow;
  25.        QMessageBox *finalizado,*error;
  26. };
  27.  
  28.  

Window.cpp
Código
  1. #include "window.hpp"
  2.  
  3. window::window()
  4. {
  5.    numero1 = new QLineEdit;
  6.    numero2 = new QLineEdit;
  7.    numero3 = new QLineEdit;
  8.    numero4 = new QLineEdit;
  9.    numero5 = new QLineEdit;
  10.    numero6 = new QLineEdit;
  11.    numero7 = new QLineEdit;
  12.    numero8 = new QLineEdit;
  13.    numero9 = new QLineEdit;
  14.    numero10 = new QLineEdit;
  15.    numero11 = new QLineEdit;
  16.    numero12 = new QLineEdit;
  17.    numero13 = new QLineEdit;
  18.    numero14 = new QLineEdit;
  19.    numero15 = new QLineEdit;
  20.    numero16 = new QLineEdit;
  21.    mainLayout = new QVBoxLayout;
  22.    primLayout = new QHBoxLayout;
  23.    segLayout = new QHBoxLayout;
  24.    terLayout = new QHBoxLayout;
  25.    cuarLayout = new QHBoxLayout;
  26.    finalizado = new QMessageBox;
  27.    error = new QMessageBox;
  28.    finalizado->setText("Sudoku Finalizado");
  29.    error->setText("El sudoku introducido no es valido o no es correcto");
  30.    acceptButton = new QPushButton("Aceptar");
  31.    myWindow = new QWidget;
  32.    myWindow->setMaximumSize(200,200);
  33.    myWindow->setMinimumSize(200,200);
  34.    myWindow->setWindowTitle("Sudoku 4x4 Overxfl0w");
  35.    constructWindow();
  36.    QObject::connect(acceptButton,SIGNAL(clicked()),this,SLOT(compruebaSudoku()));
  37.    myWindow->show();
  38. }
  39.  
  40. void window::constructWindow()
  41. {
  42.    numero2->setText("4");
  43.    numero3->setText("2");
  44.    numero4->setText("3");
  45.    numero5->setText("3");
  46.    numero6->setText("2");
  47.    numero7->setText("1");
  48.    numero8->setText("4");
  49.    numero10->setText("3");
  50.    numero11->setText("4");
  51.    numero15->setText("3");
  52.    numero2->setReadOnly(true);
  53.    numero3->setReadOnly(true);
  54.    numero4->setReadOnly(true);
  55.    numero5->setReadOnly(true);
  56.    numero6->setReadOnly(true);
  57.    numero7->setReadOnly(true);
  58.    numero8->setReadOnly(true);
  59.    numero10->setReadOnly(true);
  60.    numero11->setReadOnly(true);
  61.    numero15->setReadOnly(true);
  62.    primLayout->addWidget(numero1);
  63.    primLayout->addWidget(numero2);
  64.    primLayout->addWidget(numero3);
  65.    primLayout->addWidget(numero4);
  66.    mainLayout->addLayout(primLayout);
  67.    segLayout->addWidget(numero5);
  68.    segLayout->addWidget(numero6);
  69.    segLayout->addWidget(numero7);
  70.    segLayout->addWidget(numero8);
  71.    mainLayout->addLayout(segLayout);
  72.    terLayout->addWidget(numero9);
  73.    terLayout->addWidget(numero10);
  74.    terLayout->addWidget(numero11);
  75.    terLayout->addWidget(numero12);
  76.    mainLayout->addLayout(terLayout);
  77.    cuarLayout->addWidget(numero13);
  78.    cuarLayout->addWidget(numero14);
  79.    cuarLayout->addWidget(numero15);
  80.    cuarLayout->addWidget(numero16);
  81.    mainLayout->addLayout(cuarLayout);
  82.    mainLayout->addWidget(acceptButton);
  83.    myWindow->setLayout(mainLayout);
  84. }
  85.  
  86. void window::compruebaSudoku()
  87. {
  88.    if(numero1->text() == "1" && numero12->text() == "1" && numero16->text() == "2" && numero14->text() == "1" && numero9->text() == "2" && numero13->text() == "4")
  89.    {
  90.        finalizado->exec();
  91.        exit(0);
  92.    }
  93.    else error->exec();
  94. }
  95.  

main.cpp
Código
  1. #include "window.hpp"
  2. int main(int argc, char *argv[])
  3. {
  4.    QApplication app(argc, argv);
  5.    window window;
  6.    return app.exec();
  7. }
  8.  

(http://i50.tinypic.com/2u9pwty.png)
(http://i48.tinypic.com/2556ufd.png)

He usado Qt si ves que no puedes compilarlo, te paso el .exe compilado en estático.


Título: Re: RETOS C++
Publicado por: zonahurbana en 1 Octubre 2012, 01:03 am
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 CodeBlocks no me muestra error. ¿Usted podría recomendarme algún IDE?
Yo nunca hice eso de inicializar como NULL a un entero. Esta vez lo hice por probar, y como no me daba error, creí que era correcto. Lo que normalmente habría hecho es no inicializar la variable mayor. Ésta adoptaría como primer valor a nros[0]; y ya luego haría las comparaciones. Pero, ¿hay alguna manera de inicializar a un entero de modo que al compararlo siempre sean mayores que él? (Es decir, de modo que cual fuere el primer valor, reemplace a lo que venía por defecto y luego se continúe normalmente el proceso de comparación)
¿Aquella librería de la que usted habla es estándar? Es que siempre están diciendome que evite incluir librería no estándares. ¿Y sobre mi pregunta de la pausa?
Gracias por responder.


Título: Re: RETOS C++
Publicado por: dato000 en 1 Octubre 2012, 01:50 am
2- Crear programa que lea el contenido de un archivo de texto.

umm lo hice a lo simple, corto y claro.

Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4.  
  5. int main () {
  6.     ifstream nuevo("prueba.txt");
  7.     char nombre[100];
  8.  
  9.     nuevo.getline(nombre, 100);
  10.     cout << nombre;
  11.  
  12.     return 0;
  13. }
  14.  


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 1 Octubre 2012, 13:20 pm
RETO 5

Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. int main(int argc,char* argv)
  5. {
  6.    char palabraGenerada[10];
  7.    ofstream archivo;
  8.    archivo.open("diccionario.txt",ofstream::app);
  9.    for(int x=97;x<=122;x++)
  10.    {
  11.        for(int y=97;y<=122;y++)
  12.        {
  13.            for(int j=97;j<=122;j++)
  14.            {
  15.                for(int z=97;z<=122;z++)
  16.                {
  17.                    for(int a=97;a<=122;a++)
  18.                    {
  19.                        for(int b=97;b<=122;b++)
  20.                        {
  21.                            for(int m=97;m<=122;m++)
  22.                            {
  23.                                for(int n=97;n<=122;n++)
  24.                                {
  25.                                    for(int p=97;p<=122;p++)
  26.                                    {
  27.                                        archivo << char(x) << char(y) << char(j) << char(z) << char(a) << char(b) << char(m) << char(n) << char(p) << "\n";
  28.                                    }
  29.                                }
  30.                            }
  31.                        }
  32.                    }
  33.                }
  34.            }
  35.        }
  36.    }
  37.    return 0;
  38. }
  39.  

RETO 6 (Windows 7)

Código
  1. #include <windows.h>
  2.  
  3. int main(int argc,char* argv)
  4. {
  5.  SetCursorPos(0, 780);
  6.  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo());
  7.  SetCursorPos(320,700);
  8.  mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, GetMessageExtraInfo());
  9.  mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, GetMessageExtraInfo());
  10.  return 0;
  11. }
  12.  

110 puntitos y espero el bonus por ser el primero en el 6 :D

Saludos


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 1 Octubre 2012, 15:02 pm
los bonues son por utilizar la funcion max o para crear un buen programa compatible con todo.

como algunos codigos de do-while

PD:Para saber si va el 6 lo tenog k probar, y me da miedo de k no salga error XDXD

PPD:Ya lo probe


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 1 Octubre 2012, 15:12 pm
los bonues son por utilizar la funcion max o para crear un buen programa compatible con todo.

como algunos codigos de do-while

PD:Para saber si va el 6 lo tenog k probar, y me da miedo de k no salga error XDXD
bonus por usar max? no era por el primero o por el codigo más corto? eso pone en el primer post pero bueno xD.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 1 Octubre 2012, 15:15 pm
bonus por usar max? no era por el primero o por el codigo más corto? eso pone en el primer post pero bueno xD.

lo del codigo mas corto si despues añadi lo de max para el numeor más grande

Código:
El codigo mas corto o el codigo mas rápido ganara un bónus.

Lo del primero no lo dice.

Cuando tenga tiempo revisare todos los códigos y comprobare cual va más rápido.

PD:Si alguien ve k le sume demasiados puntos o demasiados pocos k se queje 



Título: Re: RETOS C++
Publicado por: overxfl0w13 en 1 Octubre 2012, 15:47 pm
RETO 4

Código
  1. #include <iostream>
  2. int main(int argc,char* argv)
  3. {
  4.    std::string palabra1,palabra2,palabra3,palabra4;
  5.    std::cin >> palabra1 >> palabra2 >> palabra3 >> palabra4;
  6.    if(palabra1 < palabra2 && palabra1 < palabra3 && palabra1 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra1 << std::endl;}
  7.    else{if(palabra2 < palabra1 && palabra2 < palabra3 && palabra2 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra2 << std::endl;}
  8.    else{if(palabra3 < palabra2 && palabra3 < palabra1 && palabra3 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra3 << std::endl;}
  9.    else{if(palabra4 < palabra2 && palabra4 < palabra3 && palabra4 < palabra1){std::cout <<"La palabra mas pequenya es: " << palabra4 << std::endl;}}}}
  10.    if(palabra1 == palabra2 && palabra1 == palabra3 && palabra1 == palabra4){std::cout <<"Todas las palabras son iguales" << std::endl;}
  11.    return 0;
  12. }
  13.  


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 1 Octubre 2012, 16:23 pm
ahora miro el code peor no seria mejor esto;

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

int main () {
int a,b,c,d;
cin >> a >> b >> c >> d;

if (max(a,b)>max(c,d)) {
  cout << max(a,b) << endl;
  } else {
    cout << max(c,d) << endl;
}
}

usando max con un solo if basta para comparar los 4 numeros, seguramente hay otras formas pero esta es una.


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 1 Octubre 2012, 16:27 pm
ahora miro el code peor no seria mejor esto;

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

int main () {
int a,b,c,d;
cin >> a >> b >> c >> d;

if (max(a,b)>max(c,d)) {
  cout << max(a,b) << endl;
  } else {
    cout << max(c,d) << endl;
}
}

usando max con un solo if basta para comparar los 4 numeros, seguramente hay otras formas pero esta es una.


Si va por mi último post, el reto no es el de los números si no el de los strings y la función max de algorithm no funciona igual. Además, no veo ninguna dificultad en usar la función para que haga el trabajo por ti, es más "complicado" implementar tú la función que lleva a cabo así que no sé porque se tienen que dar más puntos por una simple llamada a función xD


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 1 Octubre 2012, 16:36 pm
no no hiva expresamente para ti.

Lo digo por que si existen funciones que te dicen el numero más grande són para usarlas.

Doy más puntos por que creo que ya que existe es importante saber utilizarlo, por que por ejemplo si tienes que comparar 9000 enteros como que con if  nunca acavaras y como yo propuse los retos para aprender creo que esta bien, de todos modos todo es discutible y negociable.

Ejemplo:En el caso de comparar 9000 enteros podriamos usar un for como do-while para tener el codigo más limpio o  la función de algorithm (max_element) que te dice el el elemento más grande.

PD:overxfl0w13 te olvidaste de declarar los strings?


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 1 Octubre 2012, 16:43 pm
Código
  1. #include <iostream>
  2. int main(int argc,char* argv)
  3. {
  4.   ******* std::string palabra1,palabra2,palabra3,palabra4;*******
  5.    std::cin >> palabra1 >> palabra2 >> palabra3 >> palabra4;
  6.    if(palabra1 < palabra2 && palabra1 < palabra3 && palabra1 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra1 << std::endl;}
  7.    else{if(palabra2 < palabra1 && palabra2 < palabra3 && palabra2 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra2 << std::endl;}
  8.    else{if(palabra3 < palabra2 && palabra3 < palabra1 && palabra3 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra3 << std::endl;}
  9.    else{if(palabra4 < palabra2 && palabra4 < palabra3 && palabra4 < palabra1){std::cout <<"La palabra mas pequenya es: " << palabra4 << std::endl;}}}}
  10.    if(palabra1 == palabra2 && palabra1 == palabra3 && palabra1 == palabra4){std::cout <<"Todas las palabras son iguales" << std::endl;}
  11.    return 0;
  12. }

Yo los veo declarados xD. Pero bueno, los retos los llevas tú y tú mandas :)


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 1 Octubre 2012, 16:45 pm
yo decia el include k sino da error
como minimo con el g++ en windows


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 1 Octubre 2012, 16:47 pm
yo decia el include k sino da error
como minimo con el g++ en windows

Da error con que? No tengo que incluir ninguna librería como string si es a lo que te refieres :)


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 1 Octubre 2012, 17:25 pm
Da error con que? No tengo que incluir ninguna librería como string si es a lo que te refieres :)

si no declaro
#include <string>

me da error de que no declare las variables


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 1 Octubre 2012, 17:56 pm
si no declaro
#include <string>

me da error de que no declare las variables

muy raro a mi no me pasa, pero bueno si quieres te escribo el código con string incluido xD


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 1 Octubre 2012, 18:05 pm
muy raro no creo que sea, al 100% de la gente que usa g++ seguro que le paso.

Tu con que compilas?


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 1 Octubre 2012, 18:20 pm
muy raro no creo que sea, al 100% de la gente que usa g++ seguro que le paso.

Tu con que compilas?

Codeblocks con MinGW


Título: Re: RETOS C++
Publicado por: leosansan en 1 Octubre 2012, 20:33 pm
Sin usar  max con un solo if basta para comparar los 4 numeros, seguramente hay otras formas pero esta es una:
Código
  1. #include <iostream>
  2.    using namespace std;
  3.  
  4. int main ()
  5. {
  6.    int a,b,c,d;
  7.    cin >> a >> b >> c >> d;
  8.    if ((a= a>b ? a:b)>(c= c>d ? c:d))
  9.        cout << a << endl;
  10.    else
  11.        cout << c << endl;
  12. }
  13.  


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 1 Octubre 2012, 21:05 pm
Código
  1. #include <iostream>
  2.    using namespace std;
  3.  
  4. int main ()
  5. {
  6.    int a,b,c,d;
  7.    cin >> a >> b >> c >> d;
  8.    if ((a= a>b ? a:b)>(c= c>d ? c:d))
  9.        cout << a << endl;
  10.    else
  11.        cout << c << endl;
  12. }
  13.  

esta forma de estructurar el if nunca lo havia visto
y a decir verdad solo entiendo la mitad.

Si me puedes explicar el ? y el a:b. que és lo que no entendi.





Título: Re: RETOS C++
Publicado por: overxfl0w13 en 1 Octubre 2012, 21:08 pm
esta forma de estructurar el if nunca lo havia visto
y a decir verdad solo entiendo la mitad.

Si me puedes explicar el ? y el a:b. que és lo que no entendi.





Operadores ternarios busca documentación sobre ellos son bastante útiles.

EI: juntando mensajes.

RETO 12:

Código
  1. #include <iostream>
  2. #include <fstream>
  3. using namespace std;
  4. int numeroSudoku[100];
  5. bool compruebaVertical();
  6. bool compruebaCuadros();
  7. bool compruebaHorizontal();
  8.  
  9. int main(int argc,char* argv)
  10. {
  11.  
  12.    ifstream archivo("sudoku.txt");
  13.    for(int x=0;x<=80 && archivo.eof() == false;x++)
  14.    {
  15.        archivo >> numeroSudoku[x];
  16.    }
  17.    if(compruebaVertical()  && compruebaHorizontal()  && compruebaHorizontal())
  18.    {
  19.        cout << "Sudoku Valido" << endl;
  20.    }
  21.    else
  22.    {
  23.        cout << "Sudoku Invalido" << endl;
  24.    }
  25.    return 0;
  26. }
  27.  
  28. bool compruebaVertical()
  29. {
  30.    if(numeroSudoku[0] + numeroSudoku[9] + numeroSudoku[18] + numeroSudoku[27] + numeroSudoku[36] + numeroSudoku[45] + numeroSudoku[54] + numeroSudoku[63] + numeroSudoku[72] == 45 )
  31.    {
  32.        if(numeroSudoku[1] + numeroSudoku[10] + numeroSudoku[19] + numeroSudoku[28] + numeroSudoku[37] + numeroSudoku[46] + numeroSudoku[55] + numeroSudoku[64] + numeroSudoku[73] == 45 )
  33.        {
  34.            if(numeroSudoku[2] + numeroSudoku[11] + numeroSudoku[20] + numeroSudoku[29] + numeroSudoku[38] + numeroSudoku[47] + numeroSudoku[56] + numeroSudoku[65] + numeroSudoku[74] == 45 )
  35.            {
  36.                if(numeroSudoku[3] + numeroSudoku[12] + numeroSudoku[21] + numeroSudoku[30] + numeroSudoku[39] + numeroSudoku[48] + numeroSudoku[57] + numeroSudoku[66] + numeroSudoku[75] == 45 )
  37.                {
  38.                    if(numeroSudoku[4] + numeroSudoku[13] + numeroSudoku[22] + numeroSudoku[31] + numeroSudoku[40] + numeroSudoku[49] + numeroSudoku[58] + numeroSudoku[67] + numeroSudoku[76] == 45 )
  39.                    {
  40.                        if(numeroSudoku[5] + numeroSudoku[14] + numeroSudoku[23] + numeroSudoku[32] + numeroSudoku[41] + numeroSudoku[50] + numeroSudoku[59] + numeroSudoku[68] + numeroSudoku[77] == 45 )
  41.                        {
  42.                            if(numeroSudoku[6] + numeroSudoku[15] + numeroSudoku[24] + numeroSudoku[33] + numeroSudoku[42] + numeroSudoku[51] + numeroSudoku[60] + numeroSudoku[69] + numeroSudoku[78] == 45 )
  43.                            {
  44.                                if(numeroSudoku[7] + numeroSudoku[16] + numeroSudoku[25] + numeroSudoku[34] + numeroSudoku[43] + numeroSudoku[52] + numeroSudoku[61] + numeroSudoku[70] + numeroSudoku[79] == 45 )
  45.                                {
  46.                                    if(numeroSudoku[8] + numeroSudoku[17] + numeroSudoku[26] + numeroSudoku[35] + numeroSudoku[44] + numeroSudoku[53] + numeroSudoku[62] + numeroSudoku[71] + numeroSudoku[80] == 45 )
  47.                                    {
  48.                                        return true;
  49.                                    }
  50.                                }
  51.                            }
  52.                        }
  53.                    }
  54.                }
  55.            }
  56.        }
  57.    }
  58.    else return false;
  59. }
  60.  
  61. bool compruebaHorizontal()
  62. {
  63.    bool sudokuCorrecto = false;
  64.    if(numeroSudoku[0] + numeroSudoku[1] + numeroSudoku[2] + numeroSudoku[3] + numeroSudoku[4] + numeroSudoku[5] + numeroSudoku[6] + numeroSudoku[7] + numeroSudoku[8] == 45 )
  65.    {
  66.        if(numeroSudoku[9] + numeroSudoku[10] + numeroSudoku[11] + numeroSudoku[12] + numeroSudoku[13] + numeroSudoku[14] + numeroSudoku[15] + numeroSudoku[16] + numeroSudoku[17] == 45 )
  67.        {
  68.            if(numeroSudoku[18] + numeroSudoku[19] + numeroSudoku[20] + numeroSudoku[21] + numeroSudoku[22] + numeroSudoku[23] + numeroSudoku[24] + numeroSudoku[25] + numeroSudoku[26] == 45 )
  69.            {
  70.                if(numeroSudoku[27] + numeroSudoku[28] + numeroSudoku[29] + numeroSudoku[30] + numeroSudoku[31] + numeroSudoku[32] + numeroSudoku[33] + numeroSudoku[34] + numeroSudoku[35] == 45 )
  71.                {
  72.                    if(numeroSudoku[36] + numeroSudoku[37] + numeroSudoku[38] + numeroSudoku[39] + numeroSudoku[40] + numeroSudoku[41] + numeroSudoku[42] + numeroSudoku[43] + numeroSudoku[44] == 45 )
  73.                    {
  74.                        if(numeroSudoku[45] + numeroSudoku[46] + numeroSudoku[47] + numeroSudoku[48] + numeroSudoku[49] + numeroSudoku[50] + numeroSudoku[51] + numeroSudoku[52] + numeroSudoku[53] == 45 )
  75.                        {
  76.                            if(numeroSudoku[54] + numeroSudoku[55] + numeroSudoku[56] + numeroSudoku[57] + numeroSudoku[58] + numeroSudoku[59] + numeroSudoku[60] + numeroSudoku[61] + numeroSudoku[62] == 45 )
  77.                            {
  78.                                if(numeroSudoku[63] + numeroSudoku[64] + numeroSudoku[65] + numeroSudoku[66] + numeroSudoku[67] + numeroSudoku[68] + numeroSudoku[69] + numeroSudoku[70] + numeroSudoku[71] == 45 )
  79.                                {
  80.                                    if(numeroSudoku[72] + numeroSudoku[73] + numeroSudoku[74] + numeroSudoku[75] + numeroSudoku[76] + numeroSudoku[77] + numeroSudoku[78] + numeroSudoku[79] + numeroSudoku[80] == 45 )
  81.                                    {
  82.                                        return true;
  83.                                    }
  84.                                }
  85.                            }
  86.                        }
  87.                    }
  88.                }
  89.            }
  90.        }
  91.    }
  92.    else return false;
  93. }
  94.  
  95. bool compruebaCuadros()
  96. {
  97.    bool sudokuCorrecto = false;
  98.    if(numeroSudoku[0] + numeroSudoku[1] + numeroSudoku[2] + numeroSudoku[9] + numeroSudoku[10] + numeroSudoku[11] + numeroSudoku[18] + numeroSudoku[19] + numeroSudoku[20] == 45 )
  99.    {
  100.        if(numeroSudoku[3] + numeroSudoku[4] + numeroSudoku[5] + numeroSudoku[12] + numeroSudoku[13] + numeroSudoku[14] + numeroSudoku[21] + numeroSudoku[22] + numeroSudoku[23] == 45 )
  101.        {
  102.            if(numeroSudoku[6] + numeroSudoku[7] + numeroSudoku[8] + numeroSudoku[15] + numeroSudoku[16] + numeroSudoku[17] + numeroSudoku[24] + numeroSudoku[25] + numeroSudoku[26] == 45 )
  103.            {
  104.                if(numeroSudoku[27] + numeroSudoku[28] + numeroSudoku[29] + numeroSudoku[36] + numeroSudoku[37] + numeroSudoku[38] + numeroSudoku[45] + numeroSudoku[46] + numeroSudoku[47] == 45 )
  105.                {
  106.                    if(numeroSudoku[30] + numeroSudoku[31] + numeroSudoku[32] + numeroSudoku[39] + numeroSudoku[40] + numeroSudoku[41] + numeroSudoku[49] + numeroSudoku[50] + numeroSudoku[51] == 45 )
  107.                    {
  108.                        if(numeroSudoku[33] + numeroSudoku[34] + numeroSudoku[35] + numeroSudoku[42] + numeroSudoku[43] + numeroSudoku[44] + numeroSudoku[51] + numeroSudoku[52] + numeroSudoku[53] == 45 )
  109.                        {
  110.                            if(numeroSudoku[54] + numeroSudoku[55] + numeroSudoku[56] + numeroSudoku[63] + numeroSudoku[64] + numeroSudoku[65] + numeroSudoku[72] + numeroSudoku[73] + numeroSudoku[74] == 45 )
  111.                            {
  112.                                if(numeroSudoku[57] + numeroSudoku[58] + numeroSudoku[59] + numeroSudoku[66] + numeroSudoku[67] + numeroSudoku[68] + numeroSudoku[75] + numeroSudoku[76] + numeroSudoku[77] == 45 )
  113.                                {
  114.                                    if(numeroSudoku[60] + numeroSudoku[61] + numeroSudoku[62] + numeroSudoku[69] + numeroSudoku[70] + numeroSudoku[71] + numeroSudoku[78] + numeroSudoku[79] + numeroSudoku[80] == 45 )
  115.                                    {
  116.                                        return true;
  117.                                    }
  118.                                }
  119.                            }
  120.                        }
  121.                    }
  122.                }
  123.            }
  124.        }
  125.    }
  126.    else return false;
  127. }
  128.  

El código no está para nada optimizado (puede ocupar menos de la mitad de lineas usando arrays multidimensionales),lo he hecho rápido antes de ir a acostarme :). El usuario introduce los valores por lineas en un archivo de texto, de izquierda a derecha del sudoku es decir siguiendo esta imagen:

http://i.msdn.microsoft.com/dynimg/IC37479.gif

Una parte del archivo de texto quedaría así:

Código:
6
3
2
7
8
1
9
4
5
...

Precisamente con el sudoku de ese gif he hecho la prueba del programa y funciona

(http://i47.tinypic.com/2ynkl1u.png)

Cuando tenga tiempo lo optimizaré, de momento 35 puntos más, esto engancha que te cagas  :xD


Título: Re: RETOS C++
Publicado por: dato000 en 2 Octubre 2012, 04:44 am
No lo hago por los puntos, sino porque no tengo nada más que hacer XDD

3- Un programa que diga el numero mas grande. El usuario ha de insertar 4 numeros separados por un espacio.

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int a[4];
  8.    int mayor=0;
  9.    cout << "digite los números, con cada espacio se registra un numero nuevo: ";
  10.    for(int i=0; i<4; i++)
  11.        cin >> a[i];
  12.  
  13.    // BARRIDO
  14.    for(int i=0; i<4; i++){
  15.        if(a[i] > mayor){
  16.            mayor = a[i];
  17.        }
  18.    }
  19.  
  20.    cout << "El mayor es: " << mayor << endl;
  21.    cin.get();
  22.    return 0;
  23. }
  24.  


Título: Re: RETOS C++
Publicado por: leosansan en 2 Octubre 2012, 14:46 pm
Tienes el problema que si introduzco cuatro números negativos el mayor es, como no, el cero ... que no forma parte de los cuatro números. Tendrías que usar la libreria limits y asignarle a menorel valor de entero que es int_MIN o algo así.
Pero insisto en algo que postee anteriormente, no se está haciendo lo que dice textualmente el enunciado:
3- Un programa que diga el numero mas grande. El usuario ha de insertar 4 numeros separados por un espacio.
Este código sí hace lo que se pide:
Código
  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. main()
  5. {
  6.    int a,b,c,d,mayor;
  7.    char ch,cad[100]/*= "17 32 15 27"*/;
  8.    cout <<"Introduzca cuatro numeros separados por un espacio:"<< endl;
  9.    gets (cad);
  10.    sscanf(cad, "%d%c%d%c%d%c%d",&a, &ch ,&b,&ch, &c,&ch, &d  );
  11.    if ((a= a>b ? a:b)>(c= c>d ? c:d))
  12.        cout << a << endl;
  13.    else
  14.        cout << "mayor = " << c << endl;
  15.    return 0;
  16. }


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 2 Octubre 2012, 15:11 pm
ya actualice los puntos,si se les ocurre algo para los retos mejor :)


Título: Re: RETOS C++
Publicado por: leosansan en 2 Octubre 2012, 18:33 pm
12- Un programa que haga diversos rombos de 2 * n -1 lineas como en el siguiente ejemplo  

Entrada: 4
SAlida:  
    *
  ***
 *****
*******
 *****
  ***
   *

25 puntos
Código
  1. #include <iostream>
  2. using namespace std;
  3. int main()
  4. {
  5. int n,fila,col;
  6. cout << "tamanyo de la piramide: "<<endl;
  7. cin >> n;
  8.    for(fila=1;fila<=n;fila++)
  9.    {
  10.        for(col=1;col<=n-fila;col++)
  11.            cout<<" ";
  12.        for(col=1;col<=2*fila-1;col++)
  13.            cout<<"*";
  14.    cout<<endl;
  15.            }
  16. /* Escritura de la parte inferior */
  17.    for(fila=n-1;fila>=1;fila--)
  18.    {
  19.        for(col=1;col<=n-fila;col++)
  20.            cout<<" ";
  21.        for(col=1;col<=2*fila-1;col++)
  22.            cout<<"*";
  23.    cout<<endl;
  24.    }
  25. }

__

EI: juntando mensajes.

1-Un programa que cuente los caracteres que tiene un texto previamente introducido por el usuario (parece más fácil de lo que es)

ejemplo de entrada: "ho la" ejemplo salida:el texto tiene 5 caracteres

1 punto
Incluyendo espacios en blanco:
Código
  1. #include <iostream>
  2. #include <stdio.h>
  3. using namespace std;
  4. main()
  5. {
  6.    int i;
  7.    char cadena [200];
  8.    gets (cadena);
  9.    for (i=0;cadena [i]!='\0';i++) ;
  10.    cout << "El texto tiene " << i << " caracteres." << endl;
  11.    return 0;
  12. }


Título: Re: RETOS C++
Publicado por: Eternal Idol en 2 Octubre 2012, 19:31 pm
Por favor no escriban dos (o mas) mensajes consecutivos.


Título: Re: RETOS C++
Publicado por: do-while en 3 Octubre 2012, 15:05 pm
SUDOKU (No se el numero de reto...)

Ya esta.

Código
  1. /*
  2.  * Linea de comandos: Nombre programa fichero
  3.  *
  4.  * El fichero debe tener el siguiente formato:
  5.  *  - 9 filas con 9 numeros separados por espacios
  6.  *  - Los numeros que vengan dados en el sudoku se escribiran en la posicion que corresponde
  7.  *  - Las casillas vacias del sudoku se indicaran con ceros
  8.  *  - Todas las filas deben acabar en un salto de linea
  9.  *  - Cuanquier linea que siga a las 9 primeras sera ignorada.
  10.  *
  11.  *
  12.  * Salida: Muestra como mucho 2 soluciones (las suficientes para que el contenido del fichero no sea un sudoku correcto)
  13.  * y sino indica que no hay solucion.
  14.  *
  15.  */
  16.  
  17.  
  18. #include <iostream>
  19. #include <cstdio>
  20. #include <cstring>
  21.  
  22. using namespace std;
  23.  
  24. class Sudoku
  25. {
  26.    public:
  27.        Sudoku();
  28.  
  29.        bool cargar(char *nombrefichero);
  30.        bool solucionar();
  31.        bool solucion_unica();
  32.        inline bool esta_solucionado(){return solucionado;};
  33.  
  34.        friend ostream& operator <<(ostream &out,Sudoku &s);
  35.  
  36.    private:
  37.  
  38.        bool correcto(int fila, int columna, int valor);
  39.        bool resolver(int fila, int columna);
  40.        bool multiples_soluciones(int fila, int columna);
  41.  
  42.        int tabla[9][9];
  43.        bool solucionado;
  44. };
  45.  
  46. Sudoku::Sudoku()
  47. {
  48.    for(int i = 0 ; i < 81 ; i++)
  49.        tabla[i / 9][i % 9] = 0;
  50.  
  51.    solucionado = false;
  52. }
  53.  
  54. bool Sudoku::cargar(char *nombrefichero)
  55. {
  56.    int i;
  57.    char fila[19]; //los 9 numeros + 8 espacios + 1 salto de linea + '\0';
  58.    FILE *f;
  59.  
  60.    if(!(f = fopen(nombrefichero,"r")))
  61.        return false;
  62.  
  63.    for(i = 0 ; i < 9 ; i++)
  64.    {
  65.        fgets(fila,19,f);
  66.  
  67.        if(strlen(fila) < 18 || fila[strlen(fila) - 1] != '\n') //formato incorrecto
  68.        {
  69.            for(int j = 0 ; j < i ; i++) //anulamos la lectura que habia hasta el momento
  70.                memset(tabla[j] , 0 , 9 * sizeof(int));
  71.  
  72.            fclose(f);
  73.  
  74.            return false;
  75.        }
  76.  
  77.        for(int j = 0 ; j < 9 ; j++)
  78.        {
  79.            if(fila[2 * i] < '0' || fila[2 * i] > '9')//Si las posiciones pares no son un numero
  80.            {
  81.                for(int k = 0 ; k < i ; k++) //anulamos la lectura que habia hasta el momento
  82.                    memset(tabla[k],0,9*sizeof(int));
  83.  
  84.                fclose(f);
  85.  
  86.                return false;
  87.            }
  88.  
  89.            if(fila[2 * i + 1] != ' ' && fila[2 * i + 1] != '\n')//Si las posiciones impares no son ni espacio ni \n
  90.            {
  91.                for(int k = 0 ; k < i ; k++) //anulamos la lectura que habia hasta el momento
  92.                    memset(tabla[k],0,9*sizeof(int));
  93.  
  94.                fclose(f);
  95.  
  96.                return false;
  97.            }
  98.        }
  99.  
  100.        //traducimos la fila para el algoritmo
  101.        for(int j = 0 ; j < 9 ; j++)
  102.            tabla[i][j] = fila[2 * j] - '0';
  103.    }
  104.  
  105.    fclose(f);
  106.  
  107.    return true;
  108. }
  109.  
  110. bool Sudoku::solucionar()
  111. {
  112.    return resolver(0,0);
  113. }
  114.  
  115. bool Sudoku::solucion_unica()
  116. {
  117.    return !multiples_soluciones(0,0);
  118. }
  119.  
  120. bool Sudoku::correcto(int fila, int columna, int valor)
  121. {
  122.    for(int i = 0 ; i < 9 ; i++)
  123.    {
  124.        if(tabla[i][columna] == valor)
  125.            return false;
  126.  
  127.        if(tabla[fila][i] == valor)
  128.            return false;
  129.  
  130.        if(tabla[3 * (fila / 3) + i / 3][3 * (columna / 3) + i % 3] == valor)
  131.            return false;
  132.    }
  133.  
  134.    return true;
  135. }
  136.  
  137. bool Sudoku::resolver(int fila, int columna)
  138. {
  139.    if(fila == 9)
  140.    {
  141.        solucionado = true;
  142.        return true;
  143.    }
  144.  
  145.    if(tabla[fila][columna] != 0) //Si tenemos un numero original
  146.    {
  147.        if(resolver((9 * fila + columna + 1) / 9, (9 * fila + columna + 1) % 9)) //pasamos a resolver la siguiente posicion
  148.            return true;
  149.    }
  150.    else
  151.    {
  152.        //probamos cada uno de los numeros
  153.        for(int i = 1 ; i <= 9 ; i++)
  154.        {
  155.            if(correcto(fila,columna,i)) //Si es corrector en la posicion dada
  156.            {
  157.                tabla[fila][columna] = i; //Marcamos la casilla con el numero
  158.  
  159.                //Y pasamos a resolver la siguiente posicion
  160.                if(resolver((9 * fila + columna + 1) / 9, (9 * fila + columna + 1) % 9))
  161.                    return true;
  162.            }
  163.        }
  164.  
  165.        tabla[fila][columna] = 0; //Volvemos a dejar vacia la posicion actual
  166.    }
  167.  
  168.    return false;
  169. }
  170.  
  171. bool Sudoku::multiples_soluciones(int fila, int columna)
  172. {
  173.    if(fila == 9)
  174.    {
  175.        if(!solucionado)
  176.        {
  177.            cout << *this << endl;
  178.            solucionado = true;
  179.            return false;
  180.        }
  181.        cout << *this << endl;
  182.        return true;
  183.    }
  184.  
  185.    if(tabla[fila][columna] != 0) //Si tenemos un numero original
  186.    {
  187.        if(multiples_soluciones((9 * fila + columna + 1) / 9, (9 * fila + columna + 1) % 9)) //pasamos a resolver la siguiente posicion
  188.            return true;
  189.    }
  190.    else
  191.    {
  192.        //probamos cada uno de los numeros
  193.        for(int i = 1 ; i <= 9 ; i++)
  194.        {
  195.            if(correcto(fila,columna,i)) //Si es corrector en la posicion dada
  196.            {
  197.                tabla[fila][columna] = i; //Marcamos la casilla con el numero
  198.  
  199.                //Y pasamos a resolver la siguiente posicion
  200.                if(multiples_soluciones((9 * fila + columna + 1) / 9, (9 * fila + columna + 1) % 9))
  201.                    return true;
  202.            }
  203.        }
  204.  
  205.        tabla[fila][columna] = 0; //Volvemos a dejar vacia la posicion actual
  206.    }
  207.  
  208.    return false;
  209. }
  210.  
  211. ostream& operator <<(ostream &out,Sudoku &s)
  212. {
  213.    for(int i = 0 ; i < 9 ; i++)
  214.    {
  215.        if(!(i % 3))
  216.            out << endl;
  217.  
  218.        for(int j = 0 ; j < 9 ; j++)
  219.        {
  220.            if(!(j % 3))
  221.                out << ' ';
  222.  
  223.            out << s.tabla[i][j] << ' ';
  224.        }
  225.  
  226.        out << endl;
  227.    }
  228.  
  229.    return out;
  230. }
  231.  
  232. int main(int argc, char *argv[])
  233. {
  234.    Sudoku sudoku;
  235.  
  236.    if(argc != 2)
  237.    {
  238.        cout << argv[0] << " fichero";
  239.        return -1;
  240.    }
  241.  
  242.    if(!sudoku.cargar(argv[1]))
  243.    {
  244.        cout << "Error en carga de fichero." << endl;
  245.        return -1;
  246.    }
  247.  
  248.    if(sudoku.solucion_unica() && sudoku.esta_solucionado())
  249.    {
  250.        cout << "El sudoku tiene una unica solucion:" << endl;
  251.    }
  252.    else if(sudoku.esta_solucionado())
  253.        cout << "El fichero no contiene un sudoku correcto. Tiene mas de una solucion." << endl;
  254.    else
  255.        cout << "El sudoku no tiene solucion." << endl;
  256.  
  257.    return 0;
  258. }
  259.  


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 3 Octubre 2012, 15:24 pm
SUDOKU (No se el numero de reto...)

El codigo no era correcto.

Lo reviso y lo vuelvo a colgar.

¡Saludos!
ok ya vi k algo raro pasaba.


Título: Re: RETOS C++
Publicado por: dato000 en 3 Octubre 2012, 16:01 pm
10- Un programa que escriba al revés las palabras.

Entrada: hola
Salida: aloh

15 puntos


Código
  1. #include <iostream>
  2. #define T 100
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    char palabra[T];
  9.    for(int i=0; i<T; i++){
  10.            palabra[i]= '\0';
  11.    }
  12.  
  13.    cout << "Ingrese la palabra: ";
  14.    cin >> palabra;
  15.  
  16.    cout << "Palabra al reves:";
  17.    for(int i=99; i>=0; i--){
  18.        if(palabra[i] != '\0')
  19.            cout << palabra[i];
  20.    }
  21.  
  22.    return 0;
  23. }
  24.  

Creo que este es el ultimo que hare... Los demás bueno, O ya han sido publicados, o simplemente no se hacerlos. Y por ejemplo, el 11 y el 12, ya se como hacerlos, los tengo por ahi, pero son inspirados en paueky, es decir, son copiados, y bah...

De todas maneras superpost!!!!! pase buen tiempo, el diccionario, el hash, y esos altos aún no se como hacerlos. Pero algún día!


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 3 Octubre 2012, 16:07 pm
dat0000

mm va más o menos bien, pero si pones un espacio ya se para. Intentalo arreglar, igualmente te doy los puntos mientras lo arreglas


Título: Re: RETOS C++
Publicado por: dato000 en 3 Octubre 2012, 16:12 pm
dat0000

mm va más o menos bien, pero si pones un espacio ya se para. Intentalo arreglar, igualmente te doy los puntos mientras lo arreglas

lo hice pensado para una sola palabra. No decia que iba a almacenar una frase  :silbar: :silbar:


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 3 Octubre 2012, 16:14 pm
lo hice pensado para una sola palabra. No decia que iba a almacenar una frase  :silbar: :silbar:

EDITO: vale me confundi de reto


Título: Re: RETOS C++
Publicado por: dato000 en 3 Octubre 2012, 17:12 pm
??? ese es el primero!! yo ese ya lo hice XD. El que deje recientemente pone la palabra al revés.


Título: Re: RETOS C++
Publicado por: leosansan en 3 Octubre 2012, 20:21 pm
[quote ]
11- Un programa que al introducirle tu data de nacimiento te diga los días, meses y semanas que faltan para tu próximo cumpleaños  [/quote]
Bueno, creo que ha salido:
Código
  1. /*Programa que al introducirle tu data de nacimiento
  2. te diga los días, meses y semanas
  3.  que faltan para tu próximo cumpleaños*/
  4.  
  5. #include <iostream>
  6. using namespace std;
  7.  
  8. int main()
  9. {
  10.    int i,dias=0,mes_cumple,mes,dia,dia_cumple,dias_mes [12]={31,29,31,30,31,30,31,31,30,31,30,31};
  11.  
  12.    cout << "DIA CUMPLE=   ";cin >>dia_cumple;
  13.    cout << "MES CUMPLE=   ";cin >>mes_cumple;
  14.    cout << "DIA ACTUAL=   ";cin >>dia;
  15.    cout << "MES ACTUAL=   ";cin >>mes;
  16.    if (mes_cumple>mes )
  17.        {
  18.            for (i=mes;i<mes_cumple-1;i++)
  19.                dias+=dias_mes [i];
  20.            dias+=dias_mes [mes-1]-dia+dia_cumple;
  21.            cout << "dias = "<<dias;
  22.  
  23.            cout << "   meses = "<<mes_cumple-mes-1;
  24.        }
  25.     else if ((mes_cumple<mes) || (mes_cumple==mes && dia_cumple<dia))
  26.        {
  27.            for (i=mes;i<12;i++)
  28.                dias+=dias_mes [i];
  29.            for (i=0;i<mes_cumple-1;i++)
  30.                dias+=dias_mes [i];
  31.            dias+=dias_mes [mes-1]-dia+dia_cumple-1;
  32.            cout << "dias = "<<dias-1;
  33.            if (mes_cumple==mes && dia_cumple<dia)
  34.                cout << "   meses = 11";
  35.            else
  36.                cout << "   meses = "<<12-mes+mes_cumple-1;
  37.        }
  38.    else if (mes_cumple==mes && dia_cumple>dia)
  39.        cout << "dias = "<<dia_cumple-dia<< "   meses =0";
  40.    cout << "   semanas =  "<<dias/7;
  41.    return 0;
  42. }
  43.  
Saludos!.


Título: Re: RETOS C++
Publicado por: ankora45 en 3 Octubre 2012, 20:59 pm
posteo codigo del reto nº12 me lo he currao jajaj
Código
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.    int numero;
  10.    int ancho;
  11.    int cola;
  12.    char con;
  13.    char so;
  14.    cout<<"especifica lo grande que sera la piramide"<<endl;
  15.    cin>>numero;
  16.    for(ancho=1;ancho<=numero;ancho++)
  17.    {
  18.        for(cola=1;cola<=numero-ancho;cola++)
  19.            cout<<" ";
  20.        for(cola=1;cola<=2*ancho-1;cola++)
  21.            cout<<"*";
  22.            cout<<endl;
  23.            }
  24.  
  25.    for(ancho=numero-1;ancho>=1;ancho--)
  26.    {
  27.        for(cola=1;cola<=numero-ancho;cola++)
  28.            cout<<" ";
  29.        for(cola=1;cola<=2*ancho-1;cola++)
  30.            cout<<"*";
  31.            cout<<endl;
  32.    }
  33.  
  34.    cout<<"¿Quiere continuar (S/N)?"<<endl;
  35.    cin>>con;
  36.    if ((con == 's') || (con == 'S'))
  37.    {
  38.        cout<<"se procedera a limpiar la pantalla, especifique el S.O bajo el que trabaja (w para windows y l para linux)"<<endl;
  39.        cin>>so;
  40.        if ((so == 'l') || (so == 'L'))
  41.        {
  42.          system("clear");
  43.          cout<<"gracias por continuar"<<endl;
  44.          main();
  45.        }
  46.        else
  47.        {
  48.          system("clear");
  49.          cout<<"gracias por continuar"<<endl;
  50.          main();
  51.        }
  52.    }
  53.    else
  54.    {
  55.        cout<<"Hasta otra"<<endl;
  56.        cout<<"pulse intro para finalizar..."<<endl;
  57.        getchar();
  58.        getchar();
  59.    }
  60.    return 0;
  61. }
  62.  


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 3 Octubre 2012, 21:22 pm
el codigo funciona bien, lo que no funciona es el suplemento que le as peusto del sistema operativo.

en los dos as puesto system("clear"). A parte de eso funciono asi k te sumo los puntos


Título: Re: RETOS C++
Publicado por: leosansan en 3 Octubre 2012, 22:31 pm
A parte de eso funciono asi k te sumo los puntos
EHHHHHH, que yo había puesto en un post anterior la solución a la pirámide y al del cumpleaños...¡¡¡¡¡ no hay puntos para mí  GRRMMMMM!!!!!!!!!!


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 3 Octubre 2012, 23:08 pm
EHHHHHH, que yo había puesto en un post anterior la solución a la pirámide y al del cumpleaños...¡¡¡¡¡ no hay puntos para mí  GRRMMMMM!!!!!!!!!!

ay te subi los puntos por lo del cumple y todo

subiste una posicion y luego bajaste otra.


Título: Re: RETOS C++
Publicado por: do-while en 3 Octubre 2012, 23:31 pm
14.
Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4.  
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9.    int max,num;
  10.  
  11.    srand(time(NULL));
  12.    max = rand();
  13.  
  14.    for(int i = 1 ; i < 15200 ; i++)
  15.        if((num = rand()) > max)
  16.            max = num;
  17.  
  18.    cout << max << endl;
  19.  
  20.    return 0;
  21. }
  22.  


Título: Re: RETOS C++
Publicado por: overxfl0w13 en 5 Octubre 2012, 20:07 pm
RETO 14:

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. using namespace std;
  5. int main(int argc, char *argv[])
  6. {
  7.    int numeroAleatorio,maximo;
  8.    srand(time(NULL));
  9.    for(int i=0;i<=15200;i++){
  10.        numeroAleatorio = rand();
  11.        if(numeroAleatorio > maximo) maximo = numeroAleatorio;
  12.    }
  13.    cout << "El aleatorio mayor es: " << maximo << endl;
  14.    return 0;
  15. }
  16.  


Título: Re: RETOS C++
Publicado por: Puntoinfinito en 9 Octubre 2012, 23:52 pm
Reto 10 -

Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. int main ()
  6. {
  7.  string a = "asdf";
  8.  cout << "Palabra a invertir\n";
  9.  cin >> a;
  10.  int i = a.length();
  11.  for (int i = a.length(); i >= 0;i--)
  12.  {
  13.    cout << a[i];
  14.  }
  15.  return 0;
  16. }


Título: Reto 1
Publicado por: werever19 en 12 Octubre 2012, 08:24 am
dejo la solucion al primero jejeje..... saludos!!!

Código:
#include <iostream>
#include <string>

using namespace std;
string letrero;
int largo;
int main(int argc, const char * argv[])
{
    cout << "inserte una frase";
    getline(cin,letrero);
    largo=letrero.size();
    cout<<largo;
   
    return 0;
}


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 12 Octubre 2012, 08:30 am
ya actualize los puntos


Título: reto 3
Publicado por: werever19 en 12 Octubre 2012, 08:50 am
dejo la solucion al 3

Código:
#include <iostream>


using namespace std;

int a, b, c, d, num_may;

int main(int argc, const char * argv[])
{
    cout << "inserte 4 numeros separados por espacios"<<endl;
    cin >>a>>b>>c>>d;
    if(a<b)
        num_may=b;
    else
        num_may=a;
    if (num_may<c)
        num_may=c;
    if (num_may<d)
        num_may=d;
    cout<<"el numero mayor es:"<<num_may<<endl;
        
        
        
    return 0;
}

EI: juntando mensajes.

dejo la solucion al reto 2.... o asi es como lo entendi..... no se si este bien XD

Código:
#include <iostream>
#include <fstream>

using namespace std;
string cadena;

int main(int argc, const char * argv[])
{
    ifstream leer("ejemplo.txt");
   
    while(!leer.eof()) {
        leer >> cadena;
        cout << cadena << endl;
    }
    leer.close();
       
    return 0;
}


Título: Re: RETOS C++
Publicado por: za.asi en 12 Octubre 2012, 15:04 pm
He hecho el numero 3:
Código:
#include <iostream>
using namespace std;

int main ()
{
    int a, b, c, d, x, y, z;
    cout << "Ingresa 4 numeros: \n";
    cin >> a >> b >> c >> d;
    if (a>b) x=a;
    else     x=b;
    if (c>d) y=c;
    else     y=d;
    if (x>y) z=x;
    else     z=y;
    cout << "El numero mas grande es: " << z;
    cin.get ();
    return 0;
}


Título: Re: RETOS C++
Publicado por: leosansan en 12 Octubre 2012, 21:48 pm
Solucion al cuatro:

Código
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. using namespace std;
  5. int main ()
  6. {
  7.    int i=1,n;
  8.    char texto1[40],texto2[40];
  9.    cout<<"Cuantas palabras desea ingresar: ";
  10.    cin >> n ;
  11.    getchar ();
  12.    cout<<"\nIntroduce la  " << i << " palabra: ";
  13.    gets(texto1);
  14.    while (i<n)
  15.    {
  16.        cout<<"\nIntroduce la  " << i+1 << " palabra: ";
  17.        gets(texto2);
  18.        if (strcmp(texto1, texto2)<0)
  19.            {
  20.                i++;continue;
  21.            }
  22.        else
  23.            strcpy (texto1,texto2);
  24.        i++;
  25.    }
  26.     cout << "\nLa palabra menor es: " << texto1 << endl;
  27.     return 0;
  28. }
  29.  


Título: Re: reto 3
Publicado por: Stakewinner00 en 12 Octubre 2012, 21:53 pm
dejo la solucion al 3

Código:
#include <iostream>
#include <fstream>

using namespace std;
string cadena;

int main(int argc, const char * argv[])
{
    ifstream leer("ejemplo.txt");
   
    while(!leer.eof()) {
        leer >> cadena;
        cout << cadena << endl;
    }
    leer.close();
       
    return 0;
}

para que vuestro código sea más compatible tendríais que poner otro include cuando useis strings #include <string> quizas con tu compilador lo compila pero con el g++ has de poner el include, y si el codigo a de ser de open source o se ha de hacer público es mejor que sea compatible al 99%

PD:Ya sume los puntos


Título: Re: RETOS C++
Publicado por: werever19 en 13 Octubre 2012, 04:28 am
para que vuestro código sea más compatible tendríais que poner otro include cuando useis strings #include <string> quizas con tu compilador lo compila pero con el g++ has de poner el include, y si el codigo a de ser de open source o se ha de hacer público es mejor que sea compatible al 99%

PD:Ya sume los puntos

Lo he compilado con g++ y no he tenido problema alguno.... pero igual gracias por el tip se me fue el include una disculpa XD


Título: Re: RETOS C++
Publicado por: leosansan en 13 Octubre 2012, 15:45 pm
Para el diccionario por fuerza bruta. Genero una clave de forma aleatoria y la descubro letra a letra:
Código
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  4. #define TAMAYO 4
  5. char busca_codigo (char c);
  6. using namespace std;
  7. int main()
  8. {
  9.    srand(time(NULL));
  10.    string codigo;
  11.    for (int j=0;j<TAMAYO;j++)
  12.        codigo [j]=rand()%(122-96) + 97;
  13.    for (int j=0;j<TAMAYO;j++)
  14.        cout <<codigo [j];
  15.    cout << endl;
  16.    for (int j=0;j<TAMAYO;j++)
  17.        busca_codigo (codigo [j]);
  18.    return 0;
  19. }
  20. char busca_codigo (char c)
  21. {
  22.    for (int i = 97; i <= 122; i++)
  23.        {
  24.            if(c==char (i))
  25.                {
  26.                    cout<< char (i);
  27.                    break;
  28.                }
  29.        }
  30. }
  31.  


Título: Re: RETOS C++
Publicado por: za.asi en 18 Octubre 2012, 01:45 am
He encontrado una solución al reto 14, el de los 15200 numeros aleatorios. Lo he provado y funciona bién, al menos en windows.

Código:
#include <iostream>
#include <algorithm>

using namespace std;

int main ()
{
    int contador,
        numg=0;
    for (contador=0; contador<15200; contador++)
    {
        int i=time (0)-contador;
        srand (i);
        int num=rand(),
            numg=max (numg, num);
    }
    cout << "El numero mas alto es: " << numg;
    return 0;
}



Título: Re: RETOS C++
Publicado por: Stakewinner00 en 18 Octubre 2012, 07:48 am
za.asi

x.cpp:11: `time' undeclared (first use this function)


Título: Re: RETOS C++
Publicado por: Puntoinfinito en 18 Octubre 2012, 08:41 am
14-
Código
  1. #include <iostream>
  2. #include <cstime.h>
  3. using namespace std;
  4. int main()
  5. {
  6. int i = 0, j = 0, x = 0;
  7. srand ( time(NULL) );
  8. cout << "Set one nomber : ";
  9. cin >> i;
  10. if (i != 0)
  11. for (int a = 0;i < 15200;i++)
  12. {
  13. rand() % i = j;
  14. if (j > max)
  15. max = x;
  16. }
  17. cout << "The best number : " << max;
  18. }


Título: Re: RETOS C++
Publicado por: za.asi en 18 Octubre 2012, 14:31 pm
za.asi

x.cpp:11: `time' undeclared (first use this function)

A mi no me sale error, con un compilador c++ debería ser suficiente con <cstdlib>, pero si no habría que agregar <ctime>.
De todos modos no se por que te sale error, se supone que <cstdlib> incluye la función time ().


Título: Re: RETOS C++
Publicado por: rir3760 en 18 Octubre 2012, 16:13 pm
El prototipo de la función "time" se encuentra en <time.h> (si el lenguaje es C++ se debe utilizar <ctime>).

Un saludo


Título: Re: RETOS C++
Publicado por: werever19 en 24 Octubre 2012, 19:55 pm
mando la solucion al 4
Citar
#include <iostream>
#include <string.h>
#include <algorithm>
#include <vector>

using namespace std;
int main(int argc, const char * argv[])
{   string x, y, w, z;
    vector<string> palabras;
    cout << "inserte 4 palabras";
    cin>>x>>y>>w>>z;
    palabras.push_back(x);
    palabras.push_back(y);
    palabras.push_back(w);
    palabras.push_back(z);
    sort(palabras.begin(), palabras.end());
    cout<<"la primera palabra en el alfabeto es: "<< "\""<<palabras[0]<<"\"";
   
    return 0;
}



Título: Re: RETOS C++
Publicado por: Stakewinner00 en 24 Octubre 2012, 20:29 pm
Actualizado

como paso tanto tiempo nose si a todos sume los que tocan,si me deje alguien que me lo diga.


Título: Re: RETOS C++
Publicado por: leosansan en 24 Octubre 2012, 21:59 pm
Actualizado

como paso tanto tiempo nose si a todos sume los que tocan,si me deje alguien que me lo diga.
Si te gusto mi solución al diccionario por fuerza bruta que está en esta página, a mí no me habrías sumado los puntos.
Anímate y pon nuevos retos y si se puede te podemos sugerir algunos.
Saludos!.


Título: Re: RETOS C++
Publicado por: Puntoinfinito en 24 Octubre 2012, 22:24 pm
Actualizame la de random numbers + esta :P

De paso el 9: (Solo en Windows)

Código
  1. #include <windows>  
  2. #include <iostream>  
  3.  
  4. using namespace std;  
  5.  
  6. int main(int argc, char *argv[])  
  7. {  
  8.    HWND Proceso;  
  9.    char aux[1000];  
  10.    aux = "hola";
  11.    cin.getline(aux,1000);  
  12.    Proceso = FindWindow(NULL, aux);
  13.    if (hwnd == 0) {
  14.    return 0;
  15.    }
  16.    aux = "adios";  
  17.    cin.getline(aux,1000);  
  18.    SetWindowText(Proceso, aux);
  19.    Proceso = 0;  
  20.    return 0;  
  21. }


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 25 Octubre 2012, 14:57 pm
Si te gusto mi solución al diccionario por fuerza bruta que está en esta página, a mí no me habrías sumado los puntos.
Anímate y pon nuevos retos y si se puede te podemos sugerir algunos.
Saludos!.


Siempre acepto sugerencias, este fin de semana pondre nuevos retos.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 27 Octubre 2012, 23:02 pm
Ya suvi un nuevo retos, si se me acude alguno más ya lo pondre.

Suerte con este ultimo.



Título: Re: RETOS C++
Publicado por: za.asi en 28 Octubre 2012, 11:19 am
Ya lo tengo, justo ayer hice algo muy parecido a esto así que solo tuve que modificarlo un poco xD

Código:
[b]Reto 15[/b]

#include <iostream>

using namespace std;

int main ()
{
    int n=0,
        n1=0,
        n2=1;
    cout << "Los 30 primeros numeros de la serie de fibonacci son: \n"
           << n << " ";
    for (int i=0; i<30; i++)
    {
        n=n1+n2;
        n2=n1;
        n1=n;
        cout << n << " ";
    }
    return 0;
}

Pd: Cuéntame el reto 14 que hice la semana pasada.

Pd2: Ahora empieza por 0.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 28 Octubre 2012, 11:30 am
ya te puse los puntos, nose por que no estabas en la lista.

cuando lo estuve haciendo hayer por la noche me costo un poco.

A otra cosa la serie creo que comienza por 0 pero da igual.


Título: Re: RETOS C++
Publicado por: za.asi en 28 Octubre 2012, 11:40 am
Que yo sepa la serie comienza por 1, porque se refiere únicamente a los números naturales, que no incluyen al 0. Igualmente no estoy seguro, hace mucho que la conozco así que no mire la info que pusiste.


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 28 Octubre 2012, 12:05 pm
ok pero en el link de la wikipedia comienza por 0.

en este link pone k se puede hacer de las dos formas http://es.wikipedia.org/wiki/N%C3%BAmero_natural (http://es.wikipedia.org/wiki/N%C3%BAmero_natural)


Título: Re: RETOS C++
Publicado por: za.asi en 28 Octubre 2012, 12:06 pm
Y por fin me salió el de escribir las palabras al revés (todavia no se usar bien los char...)

Código:
[b]Reto 10[/b]
#include <iostream>
#include <string>

using namespace std;

int main ()
{
    int i;
    string s;
    char a;
    cout << "Escribe una palabra: ";
    cin  >> s;
    for (i=s.length (); i>=0; i--)
    {
        a=s[i-1];
        cout << a;    
    }
    return 0;
}



Título: Re: RETOS C++
Publicado por: Stakewinner00 en 28 Octubre 2012, 12:20 pm
en este ultimo reto que puse tengo un problema. Y no se por k no divide bien.

el resultado que me da es el siguiente
Citar
3524578/2178309::1.61803398874998904943822708447
5702887/3524578::1.61803398874985893129974101612
9227465/5702887::1.61803398874990866929124422313
14930352/9227465::1.61803398874988957345522067044
24157817/14930352::1.61803398874989690092718319647
39088169/24157817::1.61803398874989401434731917107
63245986/39088169::1.61803398874989512457034379622
102334155/63245986::1.61803398874989468048113394616
165580141/102334155::1.61803398874989490252573887119
267914296/165580141::1.61803398874989490252573887119
433494437/267914296::1.61803398874989490252573887119
701408733/433494437::1.61803398874989490252573887119
1134903170/701408733::1.61803398874989490252573887119
1836311903/1134903170::1.61803398874989490252573887119
(EL primer numero se divide por el segundo y tendria que dar lo que hay despues de los :: ) Pero en vez de darme el resultado de mi programa si hago la division con la calculadora el resultado de  1836311903/1134903170 es 1,6180339887498948478573727131276 y no se por k en mi progrma no da lo mismo.

Y esto me paza en el decimal  15 creo.

Aqui el codigo.
Código
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. int main () {
  7.  
  8. cout.precision(30);
  9. double long n[5];
  10. n[0]=0;
  11. n[1]=0;
  12.  
  13. cout << n[0] << endl;
  14. n[2]=n[0];
  15. n[1]++;
  16. n[0]=n[1]+n[2];
  17. n[3]=n[2];
  18. for (int i=0;i!=47;i++) {
  19. cout  << n[2] << "/" << n[1] <<"::"<< n[4] << endl;
  20. n[2]=n[0];
  21. n[1]=n[3];
  22. n[3]=n[2];
  23. n[0]=n[1]+n[2];
  24. n[4]=n[2]/n[1];
  25. }
  26. }
  27.  

Nose si me explique bien.


Título: Re: RETOS C++
Publicado por: za.asi en 28 Octubre 2012, 13:21 pm
En mi código me calcula mal a partir del numero 38, me sale 24157816 cuando tendría que ser 24157817 y a partir de ahí todos mal. Alguno me podría decir si encuentra el error?
Ademas es muy raro que calcule bien todos los números anteriores y se equivoque ahí.

De paso pongo la solución al último reto, aunque lo he reducido a 40 iteraciones para que solo me de error en las 3 últimas.
A la izquierda sale el enésimo numero de fibonacci y a la derecha la división entre ese número y el anterior.

Código:
Reto 15b
#include <iostream>

using namespace std;

int main ()
{
    cout.precision (40);
    long double f=0,
          n,
          n1=1,
          n2=0;
    cout << "Los 50 primeros numeros de la serie de fibonacci son: \n";
    for (int i=0; i<50; i++)
    {
        n=n1+n2;
        n2=n1;
        n1=n;
        cout << n << " ";
        f=n1/n2;
        cout << "El numero phi es: " << f << endl;
    }
    cin  >> f;
    return 0;
}

Corregido, con long double me da correcto


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 28 Octubre 2012, 13:25 pm
en tu codigo a partir de i=17 da todo el rato el mismo resultado. si cambias el float a double long creo que el resultado te llega hasta i=42

despues pongo los puntos, k voi a comer


Título: Re: RETOS C++
Publicado por: leosansan en 28 Octubre 2012, 13:39 pm
En mi serie empieza desde 1:
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6.    long num,cont=0;
  7.    cout << "Numeros de Fibonacci:" <<  "  1 ";
  8.    long f0=0,f1=1;
  9.    while (cont<29)
  10.        {
  11.            long f2 = f0 + f1;
  12.            cout << ", " << f2;
  13.            f0 = f1;
  14.            f1 = f2;
  15.            cont++;
  16.        }
  17. }
No se entiende bien el siguiente.


Título: Re: RETOS C++
Publicado por: do-while en 2 Noviembre 2012, 17:13 pm
15.1:
Código
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. #define FI ((1 + sqrt(5)) / 2)
  7. #define fibo(n) ((unsigned long long)((pow(FI , (n)) - pow(1 - FI , (n)))/(2 * FI - 1)))
  8.  
  9. int main(int argc, char *agrv[])
  10. {
  11.    for(int i = 0 ; i < 30 ; i++)
  12.        cout << fibo(i)<< endl;
  13.  
  14.    return 0;
  15. }
  16.  

15.2:
Código
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. #define FI ((1 + sqrt(5)) / 2)
  7. #define fibo(n) ((unsigned long long)((pow(FI , (n)) - pow(1 - FI , (n)))/(2 * FI - 1)))
  8.  
  9. int main(int argc, char *agrv[])
  10. {
  11.    for(int i = 1 ; i < 31 ; i++)
  12.        cout << ((double)(fibo(i + 1))) / fibo(i)<< endl;
  13.  
  14.    return 0;
  15. }
  16.  

¡Saludos!

PD: Parece que definiendo fibo como unsigned long long, por lo menos con gcc, funciona mejor que sin hacer el cast


Título: Re: RETOS C++
Publicado por: Puntoinfinito en 8 Noviembre 2012, 20:18 pm
5- Un creador de diccionarios para fuerza bruta

50 puntos

Código
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    srand ( time(NULL) );
  9.    int lenght = 0, palabra = 0, mtr = 0;
  10.    int caracter = 0;
  11.    ofstream texto;
  12.    texto.open("diccionario.txt");
  13.    cout << "Pon la longitud de las palabras a generar >> ";
  14.    cin >> lenght;
  15.    while (palabra < 100) {
  16.    while (mtr < lenght) {
  17.    caracter = rand() % 80 + 43; // Se puede editar para cambiar los caracteres que se van a generar
  18.    mtr++;
  19.    texto << char(caracter);
  20.    }
  21.    mtr = 0;
  22.    palabra++;
  23.    texto << "\n";
  24.    }
  25.    cout << "Diccionario acabado con 100 palabras";
  26.    cin.sync();
  27.    cin.get();
  28.    return 0;
  29. }
  30.  
  31.  


Título: Re: RETOS C++
Publicado por: leosansan en 8 Noviembre 2012, 22:37 pm
15-(Similar al anterior)Crear un programa que obtenga el numero phi o aureo a partir de la serie de Fibonacci (el bucle tiene que tener un minimo de 30 ciclos) .
15p
Citar
Pues aquí está una posible solución:
Código
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    long num,cont=0;
  8.    long f0=0,f1=1;
  9.    while (cont<=30)
  10.        {
  11.            long f2 = f0 + f1;
  12.            f0 = f1;
  13.            f1 = f2;
  14.            if (cont==30) cout << (float) f1/f0;
  15.            cont++;
  16.        }
  17.   return 0;
  18. }
Saludos!. ... y puntos, puntos


Título: Re: RETOS C++
Publicado por: Stakewinner00 en 9 Noviembre 2012, 20:07 pm
Puntoinfinito el diccionario tendria que comenzar por a y acavar por zz o algo asi. Bueno da = como minimo funciona.

Si a alguien se encuentra con algun problema que se pueda poner como reto que no dude en postearlo, que yo ya no tengo ideas.