Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: lukaszg_15 en 27 Marzo 2014, 20:39 pm



Título: C++ QR Code
Publicado por: lukaszg_15 en 27 Marzo 2014, 20:39 pm
Estaudiando c++ me he encontrado con un problema que desconocia que se podia hacer es este :

Código:
El código QR (abreviatura de Quick Response Code) fue creado en 1994 por una filial japonesa de Toyota que fabrica componentes de automóviles. Estos códigos permiten almacenar información sobre un producto codificándola en un cuadrado de NxN con píxeles que pueden ser blancos o negros. En su formato más pequeño, los códigos tienen 21x21 píxeles (versión 1), y en la
Fundamentos de la Programación – Cuaderno de trabajo 6 4
más grande 177x177 (versión 40). Programe en C una aplicación que genere aleatoriamente códigos QR versión 1 y los muestre por pantalla utilizando, por ejemplo, asteriscos. Nota: utilice la función rand() de la biblioteca de C para generar los números aleatorios.

Sé lo que es un odigo qr pero desconozco como se hace he buscado por internet pero solo salen paginas para descargar bibliotecas o algo asi, me encantaria poder averiguar como se hace eso, si alguno sabe de alguna pagina que explique esto o si me podriais explicar el ejercicio lo agradeceria mucho.


Título: Re: C++ QR Code
Publicado por: eferion en 27 Marzo 2014, 20:53 pm
Te están pidiendo, simplemente, que generes matrices aleatorias de 21x21 con 0 y 1.

los 0 los representas con huecos y los 1 con asteriscos.


Título: Re: C++ QR Code
Publicado por: lukaszg_15 en 29 Marzo 2014, 18:21 pm
aha me quedo mas tranquilo hehe, bueno conseguí hacer esto y me sale lo que quiero pero no sé como hacer para que los 1 sean asteriscos y los 0 espacios :

Código
  1. #include<iostream>
  2. #include<iomanip>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. using namespace std;
  6.  
  7. int main ( )
  8. {
  9.    int qr[21];
  10.    int num,c;
  11.    srand(time(NULL));
  12.    for(int i=0;i<=21;i++){
  13.    for(int c=0;c<=21;c++)
  14.    {
  15.        num=rand()%(1+1);
  16.        cout<<"QR["<< i << "]["<< c <<"]["<< num <<"]"<<endl;}}
  17. system("pause");
  18. return 0;
  19. }


Título: Re: C++ QR Code
Publicado por: engel lex en 29 Marzo 2014, 19:17 pm
-error... esa matriz es de 22x22
-creas un "qr[21]" es entero (se supone que vas a guardar asteriscos y espacios)
-nunca colocas nada en qr[21]
-nunca imprimes la matriz, simplemente botas todo en vertical
-por que usas rand()%(1+1), en lugar de rand()%2?
-para que tantas librerias? solo necesitas una...


para escribir asteriscos en lugar de 1 y 0 usa if... arregla el resto...


Título: Re: C++ QR Code
Publicado por: lukaszg_15 en 30 Marzo 2014, 15:45 pm
aha he arreglado algunos errores y he hecho un par de cosas que no se si estan bien pero no tengo ni idea de como convertir un 0 o un 1 en un asterisco o espacio, os dejo como lo he editado pero no se si esta bien y si ya me imprime la matriz,

Código
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main ( )
  6. {
  7.  
  8.    char qr[21][21];
  9.    int num,c,i;
  10.  
  11.  
  12.    srand(time(NULL));
  13.    for(i=0;i < 21;i++){
  14.    for(c=0;c < 21;c++)
  15.    {
  16.  
  17.     num=rand()%(2);
  18.     qr[i][c] == num;
  19.  
  20.  
  21.  cout<<"QR["<< i << "]["<< c <<"] = ["<< num <<"]" <<endl;
  22.     }}
  23.  
  24.  
  25.  
  26. system("pause");
  27. return 0;
  28. }


Título: Re: C++ QR Code
Publicado por: ivancea96 en 30 Marzo 2014, 16:28 pm
Código
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main ( )
  6. {
  7.  
  8.    char qr[21][21];
  9.    int num,c,i;
  10.  
  11.  
  12.    srand(time(NULL));
  13.    for(i=0;i < 21;i++){
  14.    for(c=0;c < 21;c++)
  15.    {
  16.     num=rand()%(2);
  17.     qr[i][c] == num;
  18.  
  19.     cout<<"QR["<< i << "]["<< c <<"] = ["<< (char)(num==0?'*':num==1?' ':num) <<"]" <<endl;
  20.     }}
  21. system("pause");
  22. return 0;
  23. }
  24.  

Código:
(char)(num==0?'*':num==1?' ':num)

Usando esos 2 operadores ternarios encadenados, compruebas en la misma linea si es 1 o 0, e imprimes su respectivo caracter. En caso de que no sea ni 1 ni 0, imprimirá el número que sea. Eso si quieres, lo puedes cambiar a
Código:
(char)(num==0?'*':' ')
Para que sea seguro que solo imprime asterisco y espacio.


Título: Re: C++ QR Code
Publicado por: lukaszg_15 en 30 Marzo 2014, 16:58 pm
wow pedazo truco lo desconocia completamente, ahora me funciona todo perfecto y como quiero.

Muchas gracias a todos así da gusto estudiar, que aprendo mas aquí que en la uni hehe.


Título: Re: C++ QR Code
Publicado por: eferion en 30 Marzo 2014, 20:51 pm
Y que tal con un array??

Código
  1. int main ( )
  2. {
  3.    char *chars = " *";
  4.  
  5.    char qr[21][21];
  6.    int num,c,i;
  7.  
  8.  
  9.    srand(time(NULL));
  10.    for(i=0;i < 21;i++){
  11.    for(c=0;c < 21;c++)
  12.    {
  13.     num=rand()%(2);
  14.     qr[i][c] == num;
  15.  
  16.     cout<<"QR["<< i << "]["<< c <<"] = ["<< chars[ num ] <<"]" <<endl;
  17.     }}
  18. system("pause");
  19. return 0;
  20. }


Título: Re: C++ QR Code
Publicado por: engel lex en 30 Marzo 2014, 22:37 pm
lukaszg_15

yo creo que tu presentas eso con el operador "?" sin saber como se usa un if y te reprueban! XD

por cierto... por que nadie imprime en horizontal? -.- y para que guardan en un array si no lo usan? D:

aqui está formateado y todo :P

Código
  1. #include<iostream>
  2.  
  3. using
  4.  
  5. namespace std;
  6.  
  7. int main ( ) {
  8.  
  9.    char qr[21][21];
  10.    int num, c, i;
  11.    cout << ' ';
  12.    for(i = 0; i < 42; i++) cout << '-';
  13.    cout << endl;
  14.    srand(time(NULL));
  15.    for(i = 0; i < 21; i++) {
  16.        cout << '|';
  17.        for(c = 0; c < 21; c++) {
  18.            num = rand() % (2);
  19.            qr[i][c] == num;
  20.            if(qr[i][c]==0){
  21.                 cout << ' ';
  22.            }else{
  23.                 cout << '*';
  24.            }
  25.            cout << ' ';
  26.        }
  27.        cout << '|' << endl;
  28.    }
  29.    cout << ' ';
  30.    for(i = 0; i < 42; i++) cout << '-';
  31.    cout << endl;
  32.    system("pause");
  33.    return 0;
  34. }
  35.  
  36.  


Título: Re: C++ QR Code
Publicado por: lukaszg_15 en 30 Marzo 2014, 23:48 pm
teneis raozn puede que este intentando ir rapido hehe la verdad que no se como se usa y paraz que sirve el ? ahi.


Eferion si entendi tu codigo es declarar que vas a usar ' *' y luego llamarlos en el cout, me parece buena idea asi le doy mas uso a los array y queda mas bonito. Gracias por el aporte.

engel me podrias explicar como hiciste para que quede asi? la verdad me gusto muchisimo mas que en horizontal hehe, miro tu codigo pero no veo como lo hiciste para que quedase en filas y columnas,  si tienes tiempo me lo podrias explicar? y otra cosa, dices que creo array pero no lo uso, a que te refieres? yo pensaba que lo estaba usando en el for hay algo mas que desconozca?


Título: Re: C++ QR Code
Publicado por: engel lex en 30 Marzo 2014, 23:57 pm
ni si quiera yo estoy usando el array realmente... como lo hice? ve el codigo y analizalo... recomiendo que uses el debugger para ejecutarlo paso a paso y ver detalle a detalle que hace...


por que digo que no usan el array, por ejemplo aqui
Código
  1. num=rand()%(2);
  2.     qr[i][c] == num;
  3.  
  4.     cout<<"QR["<< i << "]["<< c <<"] = ["<< (char)(num==0?'*':num==1?' ':num) <<"]" <<endl;

llenas el array, pero bien gracias, el array se llena solo para ocupar espacio en la ram porque su utilidad y uso fue 0 XD

en el mio le doy una barata excusa para existir, aunque hubiera sudo lo mismo usar "num==0"

Código
  1. num = rand() % (2);
  2.            qr[i][c] == num;
  3.            if(qr[i][c]==0)


por cierto no había visto el método de eferion! está excelente! XD



Título: Re: C++ QR Code
Publicado por: leosansan en 31 Marzo 2014, 06:14 am
Recordar antes que nada que es necesario el uso de la librería cstlib para el uso de la función srand() y de la ctime para el uso de time.

No veo el uso de un array para almacenar la información QR toda vez  que el enunciado especifica "que se muestre por pantalla" tan solo:


Código
  1. #include<iostream>
  2. #include <cstdlib>
  3. #include<ctime>
  4.  
  5. using namespace std;
  6. int main ( ){
  7.  char chars[] = " *";
  8.  inti,j;
  9.  srand(time(NULL));
  10.  for(i=0;i < 21;i++){
  11.    for(j=0;j < 21;j++)
  12.        cout<<chars[rand()%(2)];
  13.    cout<<endl;
  14.  }
  15.  return 0;
  16. }

O sin el char:

Código
  1. #include<iostream>
  2. #include <cstdlib>
  3. #include<ctime>
  4.  
  5. using namespace std;
  6.  
  7. int main ( ){
  8.  int i,j;
  9.  srand(time(NULL));
  10.  for(i=0;i < 21;i++){
  11.    for(j=0;j < 21;j++)
  12.      rand()%(2)==0 ? cout<< " " : cout<<char(219);
  13.    cout<<endl;
  14.  }
  15.  return 0;
  16. }


¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)







Título: Re: C++ QR Code
Publicado por: engel lex en 31 Marzo 2014, 10:09 am
este código genera un QR más bonito :P que teóricamente con MUCHA suerte podría ser valido

-parece un QR real
-usa el array (3, tomando la idea de eferion)
-se ve bonito :P

ya queda de tu parte lukaszg_15 leerlo y analizarlo

Código
  1. #include<iostream>
  2. #include<cstdlib>
  3. #include<ctime>
  4. using namespace std;
  5.  
  6. int main() {
  7.    int qr_pos[9][9] = {
  8.        {0, 0, 0, 0, 0, 0, 0, 0, 0},
  9.        {0, 1, 1, 1, 1, 1, 1, 1, 0},
  10.        {0, 1, 0, 0, 0, 0, 0, 1, 0},
  11.        {0, 1, 0, 1, 1, 1, 0, 1, 0},
  12.        {0, 1, 0, 1, 1, 1, 0, 1, 0},
  13.        {0, 1, 0, 1, 1, 1, 0, 1, 0},
  14.        {0, 1, 0, 0, 0, 0, 0, 1, 0},
  15.        {0, 1, 1, 1, 1, 1, 1, 1, 0},
  16.        {0, 0, 0, 0, 0, 0, 0, 0, 0}
  17.    };
  18.    int qr[21][21];
  19.    int num, c, i, j;
  20.    char salida[2]={' ',(char) 219};
  21.    srand(time(NULL));
  22.    for (i = 0; i < 21; i++) {
  23.        for (j = 0; j < 21; j++) {
  24.            qr[i][j] = rand() % 2;
  25.        }
  26.    }
  27.    for (i = 0; i < 8; i++) {
  28.        for (j = 0; j < 8; j++) {
  29.            qr[i][j] = qr_pos[i+1][j+1];
  30.            qr[i][j + 13] = qr_pos[i+1][j];
  31.            qr[i+13][j] = qr_pos[i][j+1];
  32.        }
  33.    }
  34.    for(i=7; i< 14; i++){
  35.        qr[6][i] = (i+1)%2;
  36.        qr[i][6] = (i+1)%2;
  37.    }
  38.    for (i = 0; i < 21; i++) {
  39.        for (j = 0; j < 21; j++) {
  40.            cout << salida[qr[i][j]] << salida[qr[i][j]];
  41.        }
  42.        cout << endl;
  43.    }
  44. }
  45.  
  46.  


Título: Re: C++ QR Code
Publicado por: Eternal Idol en 31 Marzo 2014, 14:04 pm
ya queda de tu parte lukaszg_15 leerlo y analizarlo

Exacto; el codigo ya lo hicieron otros.


Título: Re: C++ QR Code
Publicado por: lukaszg_15 en 31 Marzo 2014, 22:16 pm
hehe gracias a todos por los aportes los tendre en cuenta, creo que el de eferion es lo  que yo deseaba y lo que mas se acerca a mi nivel,pero me gusto lo facil que lo hizo leosansan, creo que es imposible simplificarlo mas.

engel tus codigos son muy bonitos pero creo que aun me queda estudiar bastante para que a mi tambien me queden asi  :P