Matriz

Iniciado por Yoldy, 9 Mayo 2017, 03:06 AM

0 Miembros y 2 Visitantes están viendo este tema.

Yoldy

Hola, necesito de su ayuda, quiero imprimir pares de caracteres para toda la tabla, de forma aleatoria.

como

? # ¡ x
x ? # ¡
0 - + *
+ 0 - *

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h> //incluye srand() y rand()
#include <conio.h>
#include <time.h> //incluye time()

char a[4][4]; //tamaño de la matriz
char cartas[]={'#','%','@','*','!','<','x'};
int total=sizeof(cartas);

int main()
{
   srand(time(0));//numeros Aleatorios en funcion del tiempo
   for (int i=0;i<4;i++)//para desplazarse por las columnas
   {
       for (int j=0;j<4;j++)//para desplazarse por las filas
       {
           a[i][j]=cartas[rand()%total];
           printf("\t%c",a[i][j]);//imprime elemento de la matriz en pantalla
       }
     printf("\n\n");
   }
  getchar();
}

engel lex

mi recomendación es que hagas otro array que reciba las 2 elementos que quieres usar...


tambien puede reorganizar tu array y solo usas los 2 primeros
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.

MAFUS

No entiendo la pregunta.
¿Quieres encontrar dos caracteres iguales que haya en la tabla?

Yoldy

OK, me refiero a que quiero mostrar pares de caracteres para llenar mi tabla, de forma aleatoria.

engel lex

Cita de: Yoldy en  9 Mayo 2017, 12:22 PM
OK, me refiero a que quiero mostrar pares de caracteres para llenar mi tabla, de forma aleatoria.


? # ¡ x
x ? # ¡
0 - + *
+ 0 - *


no entiendo lo de pares... ya te perdí.... ahí no veo los pares aclarados ni nada...
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.

MAFUS

#5
Ya entiendo, creo. La tabla debe tener dos unidades del mismo carácter en cualquier posición. Es decir: habrá un número tal de caracteres diferentes como la mitad de casillas de dicha tabla.
Pues deberás encontrar una forma de marcar los caracteres que han salido dos veces, para no incluirlos más.
Para darte ideas: usar una estructura que guarde el carácter y cuantas veces ha salido; usar un array adicional con correspondencia al de caracteres que indique cuantas veces ha salido un carácter; usar una lista enlazada donde se eliminen los caracteres que han salido dos veces.


CalgaryCorpus

Al arreglo cartas le falta 1 elemento, la matriz de 4x4 = 16 caracteres, y cartas tiene tamano 7.

Una idea alternativa es que modifiques el arreglo de cartas, eligiendo aleatoriamente desde el, y llevando al final o al inicio la carta elegida, y recorrerlo 2 veces. Con eso, no requieres memoria adicional, ninguna estructura de datos extra, y llevar donde vas en 1 indice adicional.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

MAFUS

¿Podrías hacer un ejemplo de eso?

CalgaryCorpus

O(1) espacio
O(n) operaciones, n el tamaño del arreglo de cartas, la mitad de la matriz

Verlo ejecutándose aquí: http://goo.gl/KLHE8S

Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

char a[4][4];
char cartas[] = {'#','%','@','*','!','<','x', '+'};
int total=sizeof(cartas);

int main()
{
    int mover_a = total*2-1;
    srand(time(0));
    for (int i=0; i < 4; i++) {
        for (int j=0; j < 4; j++) {
            int hacia = mover_a % total;
            int desde = rand() % (hacia + 1);

            a[i][j] = cartas[desde];
            cartas[desde] = cartas[hacia];
            cartas[hacia] = a[i][j];

            printf("\t%c ",a[i][j]);

            mover_a--;
        }
      printf("\n\n");
    }
}
Aqui mi perfil en LinkedIn, invitame un cafe aqui

MAFUS

Entiendo y es interesante. El array cambia en cada iteración, es muy aleatorio.
Aunque el segundo elemento del par solo puede volver a salir cuando han terminado de salir todos los símbolos, nunca podría generarse un patrón como el del ejemplo del enunciado.
Aunque, ahora que lo veo, los dos estamos equivocados XD