Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - overxfl0w13

#31
Programación C/C++ / Re: RETOS C++
1 Octubre 2012, 21:08 PM
Cita de: Stakewinner00 en  1 Octubre 2012, 21:05 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 (cpp) [Seleccionar]

#include <iostream>
#include <fstream>
using namespace std;
int numeroSudoku[100];
bool compruebaVertical();
bool compruebaCuadros();
bool compruebaHorizontal();

int main(int argc,char* argv)
{

    ifstream archivo("sudoku.txt");
    for(int x=0;x<=80 && archivo.eof() == false;x++)
    {
        archivo >> numeroSudoku[x];
    }
    if(compruebaVertical()  && compruebaHorizontal()  && compruebaHorizontal())
    {
        cout << "Sudoku Valido" << endl;
    }
    else
    {
        cout << "Sudoku Invalido" << endl;
    }
    return 0;
}

bool compruebaVertical()
{
    if(numeroSudoku[0] + numeroSudoku[9] + numeroSudoku[18] + numeroSudoku[27] + numeroSudoku[36] + numeroSudoku[45] + numeroSudoku[54] + numeroSudoku[63] + numeroSudoku[72] == 45 )
    {
        if(numeroSudoku[1] + numeroSudoku[10] + numeroSudoku[19] + numeroSudoku[28] + numeroSudoku[37] + numeroSudoku[46] + numeroSudoku[55] + numeroSudoku[64] + numeroSudoku[73] == 45 )
        {
            if(numeroSudoku[2] + numeroSudoku[11] + numeroSudoku[20] + numeroSudoku[29] + numeroSudoku[38] + numeroSudoku[47] + numeroSudoku[56] + numeroSudoku[65] + numeroSudoku[74] == 45 )
            {
                if(numeroSudoku[3] + numeroSudoku[12] + numeroSudoku[21] + numeroSudoku[30] + numeroSudoku[39] + numeroSudoku[48] + numeroSudoku[57] + numeroSudoku[66] + numeroSudoku[75] == 45 )
                {
                    if(numeroSudoku[4] + numeroSudoku[13] + numeroSudoku[22] + numeroSudoku[31] + numeroSudoku[40] + numeroSudoku[49] + numeroSudoku[58] + numeroSudoku[67] + numeroSudoku[76] == 45 )
                    {
                        if(numeroSudoku[5] + numeroSudoku[14] + numeroSudoku[23] + numeroSudoku[32] + numeroSudoku[41] + numeroSudoku[50] + numeroSudoku[59] + numeroSudoku[68] + numeroSudoku[77] == 45 )
                        {
                            if(numeroSudoku[6] + numeroSudoku[15] + numeroSudoku[24] + numeroSudoku[33] + numeroSudoku[42] + numeroSudoku[51] + numeroSudoku[60] + numeroSudoku[69] + numeroSudoku[78] == 45 )
                            {
                                if(numeroSudoku[7] + numeroSudoku[16] + numeroSudoku[25] + numeroSudoku[34] + numeroSudoku[43] + numeroSudoku[52] + numeroSudoku[61] + numeroSudoku[70] + numeroSudoku[79] == 45 )
                                {
                                    if(numeroSudoku[8] + numeroSudoku[17] + numeroSudoku[26] + numeroSudoku[35] + numeroSudoku[44] + numeroSudoku[53] + numeroSudoku[62] + numeroSudoku[71] + numeroSudoku[80] == 45 )
                                    {
                                        return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    else return false;
}

bool compruebaHorizontal()
{
    bool sudokuCorrecto = false;
    if(numeroSudoku[0] + numeroSudoku[1] + numeroSudoku[2] + numeroSudoku[3] + numeroSudoku[4] + numeroSudoku[5] + numeroSudoku[6] + numeroSudoku[7] + numeroSudoku[8] == 45 )
    {
        if(numeroSudoku[9] + numeroSudoku[10] + numeroSudoku[11] + numeroSudoku[12] + numeroSudoku[13] + numeroSudoku[14] + numeroSudoku[15] + numeroSudoku[16] + numeroSudoku[17] == 45 )
        {
            if(numeroSudoku[18] + numeroSudoku[19] + numeroSudoku[20] + numeroSudoku[21] + numeroSudoku[22] + numeroSudoku[23] + numeroSudoku[24] + numeroSudoku[25] + numeroSudoku[26] == 45 )
            {
                if(numeroSudoku[27] + numeroSudoku[28] + numeroSudoku[29] + numeroSudoku[30] + numeroSudoku[31] + numeroSudoku[32] + numeroSudoku[33] + numeroSudoku[34] + numeroSudoku[35] == 45 )
                {
                    if(numeroSudoku[36] + numeroSudoku[37] + numeroSudoku[38] + numeroSudoku[39] + numeroSudoku[40] + numeroSudoku[41] + numeroSudoku[42] + numeroSudoku[43] + numeroSudoku[44] == 45 )
                    {
                        if(numeroSudoku[45] + numeroSudoku[46] + numeroSudoku[47] + numeroSudoku[48] + numeroSudoku[49] + numeroSudoku[50] + numeroSudoku[51] + numeroSudoku[52] + numeroSudoku[53] == 45 )
                        {
                            if(numeroSudoku[54] + numeroSudoku[55] + numeroSudoku[56] + numeroSudoku[57] + numeroSudoku[58] + numeroSudoku[59] + numeroSudoku[60] + numeroSudoku[61] + numeroSudoku[62] == 45 )
                            {
                                if(numeroSudoku[63] + numeroSudoku[64] + numeroSudoku[65] + numeroSudoku[66] + numeroSudoku[67] + numeroSudoku[68] + numeroSudoku[69] + numeroSudoku[70] + numeroSudoku[71] == 45 )
                                {
                                    if(numeroSudoku[72] + numeroSudoku[73] + numeroSudoku[74] + numeroSudoku[75] + numeroSudoku[76] + numeroSudoku[77] + numeroSudoku[78] + numeroSudoku[79] + numeroSudoku[80] == 45 )
                                    {
                                        return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    else return false;
}

bool compruebaCuadros()
{
    bool sudokuCorrecto = false;
    if(numeroSudoku[0] + numeroSudoku[1] + numeroSudoku[2] + numeroSudoku[9] + numeroSudoku[10] + numeroSudoku[11] + numeroSudoku[18] + numeroSudoku[19] + numeroSudoku[20] == 45 )
    {
        if(numeroSudoku[3] + numeroSudoku[4] + numeroSudoku[5] + numeroSudoku[12] + numeroSudoku[13] + numeroSudoku[14] + numeroSudoku[21] + numeroSudoku[22] + numeroSudoku[23] == 45 )
        {
            if(numeroSudoku[6] + numeroSudoku[7] + numeroSudoku[8] + numeroSudoku[15] + numeroSudoku[16] + numeroSudoku[17] + numeroSudoku[24] + numeroSudoku[25] + numeroSudoku[26] == 45 )
            {
                if(numeroSudoku[27] + numeroSudoku[28] + numeroSudoku[29] + numeroSudoku[36] + numeroSudoku[37] + numeroSudoku[38] + numeroSudoku[45] + numeroSudoku[46] + numeroSudoku[47] == 45 )
                {
                    if(numeroSudoku[30] + numeroSudoku[31] + numeroSudoku[32] + numeroSudoku[39] + numeroSudoku[40] + numeroSudoku[41] + numeroSudoku[49] + numeroSudoku[50] + numeroSudoku[51] == 45 )
                    {
                        if(numeroSudoku[33] + numeroSudoku[34] + numeroSudoku[35] + numeroSudoku[42] + numeroSudoku[43] + numeroSudoku[44] + numeroSudoku[51] + numeroSudoku[52] + numeroSudoku[53] == 45 )
                        {
                            if(numeroSudoku[54] + numeroSudoku[55] + numeroSudoku[56] + numeroSudoku[63] + numeroSudoku[64] + numeroSudoku[65] + numeroSudoku[72] + numeroSudoku[73] + numeroSudoku[74] == 45 )
                            {
                                if(numeroSudoku[57] + numeroSudoku[58] + numeroSudoku[59] + numeroSudoku[66] + numeroSudoku[67] + numeroSudoku[68] + numeroSudoku[75] + numeroSudoku[76] + numeroSudoku[77] == 45 )
                                {
                                    if(numeroSudoku[60] + numeroSudoku[61] + numeroSudoku[62] + numeroSudoku[69] + numeroSudoku[70] + numeroSudoku[71] + numeroSudoku[78] + numeroSudoku[79] + numeroSudoku[80] == 45 )
                                    {
                                        return true;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    else return false;
}


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í:

6
3
2
7
8
1
9
4
5
...


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



Cuando tenga tiempo lo optimizaré, de momento 35 puntos más, esto engancha que te cagas  :xD
#32
Cita de: Caster en  1 Octubre 2012, 20:40 PM
Los punteros los tratan mas adelante en el libro que estoy leyendo, asi que voy a dejarlos para cuando toque, he compilado el codigo que has dejado y me da el sigueinte error:


Pero el ámbito o alcance de las variables ya se supone que lo tendrías que haber visto. He compilado los 3 códigos y no me da ningún error en ninguno de los 3 tio, mira a ver si lo has copiado bien :)
#33
Programación C/C++ / Re: Proyecto C/C++
1 Octubre 2012, 20:43 PM
Yo no tengo tiempo de conectarme al skype por culpa del tiempo que me roba la universidad, cuando necesitéis la implementación de la GUI me avisáis.
#34
Eso es básico, alcance de las variables vamos. La variable a es declarada y definida en main() por lo que es considerada como variable local si la pasas como argumento a una función, por mucho que modifiques su valor no cambiará ya que la variable que pretendes "modificar" sigue siendo local a main a pesar de tener el mismo nombre que en la otra función. Si lo que quieres es modificarla pasa la variable por referencia, ahí ya hablamos de otra cosa o si lo prefieres puedes usar punteros o los 2.

Punteros y Referencias:

Código (cpp) [Seleccionar]

#include <stdio.h>

void modificar(int &a) {
a *= 3;
printf("\n\na = %d (desde la funcion, modificando el valor)", a);
return ;
}

int main() {

int *a = new int(2);

printf("\na = %d (desde main, antes de llamar a la funcion)", *a);
modificar(*a);
printf("\n\na = %d (desde main, despues de llamar a la funcion)", *a);
getchar();
}



Punteros:

Código (cpp) [Seleccionar]

#include <stdio.h>

void modificar(int *a) {
*a *= 3;
printf("\n\na = %d (desde la funcion, modificando el valor)", *a);
return ;
}

int main() {

int *a = new int(2);
printf("\na = %d (desde main, antes de llamar a la funcion)", *a);
modificar(a);
printf("\n\na = %d (desde main, despues de llamar a la funcion)", *a);
getchar();
}



Referencia:

Código (cpp) [Seleccionar]

#include <stdio.h>

void modificar(int &a) {
a *= 3;
printf("\n\na = %d (desde la funcion, modificando el valor)", a);
return ;
}

int main() {

int a = 2;

printf("\na = %d (desde main, antes de llamar a la funcion)", a);
modificar(a);
printf("\n\na = %d (desde main, despues de llamar a la funcion)", a);
getchar();
}
#35
Programación C/C++ / Re: RETOS C++
1 Octubre 2012, 18:20 PM
Cita de: 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?

Codeblocks con MinGW
#36
Programación C/C++ / Re: RETOS C++
1 Octubre 2012, 17:56 PM
Cita de: Stakewinner00 en  1 Octubre 2012, 17:25 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
#37
Programación C/C++ / Re: RETOS C++
1 Octubre 2012, 16:47 PM
Cita de: Stakewinner00 en  1 Octubre 2012, 16:45 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 :)
#38
Programación C/C++ / Re: RETOS C++
1 Octubre 2012, 16:43 PM
Código (cpp) [Seleccionar]

#include <iostream>
int main(int argc,char* argv)
{
  ******* std::string palabra1,palabra2,palabra3,palabra4;*******
   std::cin >> palabra1 >> palabra2 >> palabra3 >> palabra4;
   if(palabra1 < palabra2 && palabra1 < palabra3 && palabra1 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra1 << std::endl;}
   else{if(palabra2 < palabra1 && palabra2 < palabra3 && palabra2 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra2 << std::endl;}
   else{if(palabra3 < palabra2 && palabra3 < palabra1 && palabra3 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra3 << std::endl;}
   else{if(palabra4 < palabra2 && palabra4 < palabra3 && palabra4 < palabra1){std::cout <<"La palabra mas pequenya es: " << palabra4 << std::endl;}}}}
   if(palabra1 == palabra2 && palabra1 == palabra3 && palabra1 == palabra4){std::cout <<"Todas las palabras son iguales" << std::endl;}
   return 0;
}


Yo los veo declarados xD. Pero bueno, los retos los llevas tú y tú mandas :)
#39
Programación C/C++ / Re: RETOS C++
1 Octubre 2012, 16:27 PM
Cita de: Stakewinner00 en  1 Octubre 2012, 16:23 PM
ahora miro el code peor no seria mejor esto;


#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
#40
Programación C/C++ / Re: RETOS C++
1 Octubre 2012, 15:47 PM
RETO 4

Código (cpp) [Seleccionar]

#include <iostream>
int main(int argc,char* argv)
{
   std::string palabra1,palabra2,palabra3,palabra4;
   std::cin >> palabra1 >> palabra2 >> palabra3 >> palabra4;
   if(palabra1 < palabra2 && palabra1 < palabra3 && palabra1 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra1 << std::endl;}
   else{if(palabra2 < palabra1 && palabra2 < palabra3 && palabra2 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra2 << std::endl;}
   else{if(palabra3 < palabra2 && palabra3 < palabra1 && palabra3 < palabra4){std::cout <<"La palabra mas pequenya es: " << palabra3 << std::endl;}
   else{if(palabra4 < palabra2 && palabra4 < palabra3 && palabra4 < palabra1){std::cout <<"La palabra mas pequenya es: " << palabra4 << std::endl;}}}}
   if(palabra1 == palabra2 && palabra1 == palabra3 && palabra1 == palabra4){std::cout <<"Todas las palabras son iguales" << std::endl;}
   return 0;
}