C++ QR Code

Iniciado por lukaszg_15, 27 Marzo 2014, 20:39 PM

0 Miembros y 1 Visitante están viendo este tema.

lukaszg_15

Estaudiando c++ me he encontrado con un problema que desconocia que se podia hacer es este :

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.

eferion

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.

lukaszg_15

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 (cpp) [Seleccionar]
#include<iostream>
#include<iomanip>
#include<stdlib.h>
#include<time.h>
using namespace std;

int main ( )
{
    int qr[21];
    int num,c;
    srand(time(NULL));
    for(int i=0;i<=21;i++){
    for(int c=0;c<=21;c++)
    {
        num=rand()%(1+1);
        cout<<"QR["<< i << "]["<< c <<"]["<< num <<"]"<<endl;}}
system("pause");
return 0;
}

engel lex

-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...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

lukaszg_15

#4
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 (cpp) [Seleccionar]
#include<iostream>

using namespace std;

int main ( )
{
   
   char qr[21][21];
   int num,c,i;
     

   srand(time(NULL));
   for(i=0;i < 21;i++){
   for(c=0;c < 21;c++)
   {
 
    num=rand()%(2);
    qr[i][c] == num;
     
       
 cout<<"QR["<< i << "]["<< c <<"] = ["<< num <<"]" <<endl;
    }}
 
   
   
system("pause");
return 0;
}

ivancea96

#5
Código (cpp) [Seleccionar]
#include<iostream>

using namespace std;

int main ( )
{

   char qr[21][21];
   int num,c,i;


   srand(time(NULL));
   for(i=0;i < 21;i++){
   for(c=0;c < 21;c++)
   {
    num=rand()%(2);
    qr[i][c] == num;

    cout<<"QR["<< i << "]["<< c <<"] = ["<< (char)(num==0?'*':num==1?' ':num) <<"]" <<endl;
    }}
system("pause");
return 0;
}


(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
(char)(num==0?'*':' ')
Para que sea seguro que solo imprime asterisco y espacio.

lukaszg_15

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.

eferion

Y que tal con un array??


int main ( )
{
    char *chars = " *";

    char qr[21][21];
    int num,c,i;


    srand(time(NULL));
    for(i=0;i < 21;i++){
    for(c=0;c < 21;c++)
    {
     num=rand()%(2);
     qr[i][c] == num;

     cout<<"QR["<< i << "]["<< c <<"] = ["<< chars[ num ] <<"]" <<endl;
     }}
system("pause");
return 0;
}

engel lex

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 (cpp) [Seleccionar]
#include<iostream>

using

namespace std;

int main ( ) {

    char qr[21][21];
    int num, c, i;
    cout << ' ';
    for(i = 0; i < 42; i++) cout << '-';
    cout << endl;
    srand(time(NULL));
    for(i = 0; i < 21; i++) {
        cout << '|';
        for(c = 0; c < 21; c++) {
            num = rand() % (2);
            qr[i][c] == num;
            if(qr[i][c]==0){
                 cout << ' ';
            }else{
                 cout << '*';
            }
            cout << ' ';
        }
        cout << '|' << endl;
    }
    cout << ' ';
    for(i = 0; i < 42; i++) cout << '-';
    cout << endl;
    system("pause");
    return 0;
}

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

lukaszg_15

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?