elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Página de elhacker.net en Google+ Google+


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Matriz
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Matriz  (Leído 1,646 veces)
CalgaryCorpus

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: Matriz
« Respuesta #10 en: 10 Mayo 2017, 03:00 »

Es completamente posible que aparezca en la salida un patron como el del enunciado.
Hay que cambiar el arreglo de cartas para que incluya el "?" y sacar la "x" que puse yo sin fijarme.


En línea

Visita mi perfil en LinkedIn: http://goo.gl/SAaM48
MAFUS


Desconectado Desconectado

Mensajes: 893



Ver Perfil
Re: Matriz
« Respuesta #11 en: 10 Mayo 2017, 07:15 »

No es por eso. En el ejemplo se toman los 4 primeros símbolos y se sitúan aleatoriamente en la primera línea. En la segunda línea se sitúan de nuevo los mismos símbolos pero con otra disposición. Después,  ya en la tercera línea se usa un juego de símbolos diferentes y se actúa como en el casp anterior.

En tu código se disponen los ocho signos a la ves y no vuelven a repetirse hasta que no hayan salido todos.

En verdad la solución es muy parecida a la que propones solo que hay que hacerlo a medio array de símbolos cada vez.


En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
CalgaryCorpus

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: Matriz
« Respuesta #12 en: 12 Mayo 2017, 11:52 »

Solo por jugar, para poder repetir los valores antes de llegar al final del arreglo cartas, se puede hacer un truco: usar la matriz final como memoria adicional y aplicar la misma idea anterior, e.g.: http://goo.gl/mOF4jJ

Aun no es como lo descrito, pero la idea se puede aplicar de multiples formas para evitar o forzar repeticiones, sin requerir de estructuras de datos adicionales o contar, la solucion funciona por construccion, como se demuestra en el codigo del link, el que copio aqui:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. char a[4][4];
  6. char cartas[] = {'#','%','@','*','!','<','?', '+'};
  7. int total=sizeof(cartas);
  8.  
  9. int main()
  10. {
  11.    for(int i = 0; i < total*2; i++) {
  12.        a[i/4][i%4] = cartas[i%8];
  13.    }
  14.  
  15.    srand(time(0));
  16.    for (int mover_a = total*2-1; mover_a >=0; mover_a--) {
  17.        int hacia = mover_a;
  18.        int desde = rand() % (hacia + 1);
  19.  
  20.        char temp = a[hacia/4][hacia%4];
  21.        a[hacia/4][hacia%4] = a[desde/4][desde%4];
  22.        a[desde/4][desde%4] = temp;
  23.  
  24.        printf("\t%c ",a[hacia/4][hacia%4]);
  25.        if(mover_a%4 == 0) printf("\n");
  26.  
  27.   }
  28.   printf("\n\n");
  29. }

Verlo ejecutando aqui; http://goo.gl/mOF4jJ
En línea

Visita mi perfil en LinkedIn: http://goo.gl/SAaM48
MAFUS


Desconectado Desconectado

Mensajes: 893



Ver Perfil
Re: Matriz
« Respuesta #13 en: 12 Mayo 2017, 17:00 »

Yo decía algo más así:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. char cartas[] = {'#', '%', '@', '*', '!', '<', 'x', '+'};
  6. int total = sizeof(cartas);
  7.  
  8. int main() {
  9.    int inicio = 0;
  10.  
  11.    srand(time(NULL));
  12.  
  13.    for (int mitad=0; mitad<2; ++mitad) {
  14.        for (int i=0; i<2; ++i) {
  15.            int longitud = total/2;
  16.  
  17.            for (int j=0; j<4; ++j) {
  18.                int deja = longitud - 1 + inicio;;
  19.                int pilla;
  20.  
  21.                do {
  22.                    pilla = rand() % longitud + inicio;
  23.                } while(j < 3 && pilla == deja);
  24.  
  25.                printf(" %c", cartas[pilla]);
  26.  
  27.                char x = cartas[deja];
  28.                cartas[deja] = cartas[pilla];
  29.                cartas[pilla] = x;
  30.                --longitud;
  31.            }
  32.            puts("");
  33.        }
  34.        inicio = total/2;
  35.    }
  36. }

Como puedes ver me he basado en tu idea.

Éste es el resultado:
Código:
# * @ %
@ % * #
! < + x
x + ! <
La primera fila y la segunda usan un conjunto de símbolo.
La tercera y la cuarta usan otro.
En línea

while(is_alive(yourself)) {
    make_true(yourself, yourdreams);
}
CalgaryCorpus

Desconectado Desconectado

Mensajes: 43


Ver Perfil
Re: Matriz
« Respuesta #14 en: 12 Mayo 2017, 22:14 »

Super bueno.

Le falta la aritmetica para los indices de la matriz (y llenarla).
Sin embargo, agregarla diluye la magia de la simplicidad inicial.
En línea

Visita mi perfil en LinkedIn: http://goo.gl/SAaM48
Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines