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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


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

Desconectado Desconectado

Mensajes: 1


Ver Perfil
MATRICES
« en: 30 Octubre 2019, 23:10 pm »

Holaa
Estuve intentando rellenar una matriz con un caracter aleatorio, necesito que este caracter se posicione aleatoriamente en una matriz 5X10 solo tres veces.
La idea es que se pueda imprimir la matriz vacía exceptuando 3 posiciones que van a ser ocupadas aleatoriamente con una 'E'.
 Es en lenguaje C y solo con bibliotecas stdio.h, stdlib.h, time.h. Espero que alguien pueda ayudarme con esto, no logro entender bien en que me estoy equivocando o quizas me faltan algo, no soy bueno con matrices.
 Muchas gracias de antemano!

Código:
int main(){
    char matriz[5][10];
    int i;
    int j;

    srand((unsigned)time(NULL));
    i = rand()%5;
    j = rand()%10;

    for(i = 0; i<5; i++){
      for(j = 0; j<10; j++){
        matriz[i][j]= 'E';
        printf("|%c",matriz[i][j]);
        }
        printf("|\n");
    }


    return 0;

}



En línea

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: MATRICES
« Respuesta #1 en: 31 Octubre 2019, 00:08 am »

Haz un ciclo de 3 vueltas y calcula i y j como lo estas haciendo y luego asigna la posicion indicada por i y j. El ciclo dentro del ciclo que tienes, eliminalo.

Lo malo que tiene esto es que es posible que se repita i y j de una iteracion a otra.
Una posible solucion es iterar hasta que el lugar indicado por i y j este vacio, por 3 veces.


En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: MATRICES
« Respuesta #2 en: 31 Octubre 2019, 00:15 am »

Lo que estás haciendo es generar dos números aleatorios: el primero en el intervalo [0,4] para la i y el segundo en el intervalo [0,9] para la j.
Luego estás haciendo un bucle para recorrer toda la matriz (empezando i y j en 0 por lo que los valores aleatorios ya los has perdido) y estás asignando una "E" a cada casilla de la matriz.

Como lo que quieres es generar 3 posiciones aleatorias y supongo que no sirve que la misma posición se repita 3 veces, deberás primero generar un valor aleatorio para i y para j, poner una "E" en esa posición y después volver a generar un valor aleatorio para cada variable y comprobar que esa posición no tenga ya una "E".

Lo primero: si no asignas ningún valor a la matriz te saldrá "basura" es decir caracteres aleatorios. Lo mejor es que inicialices toda la matriz con el mismo carácter (el que prefieras... un 0, un -, un *,... lo único importante es que sea un carácter, es decir, entre comillas simples y que no sea la E lógicamente).

Después de eso puedes hacer un bucle que se repita mientras no se hayan generado 3 posiciones aleatorias diferentes. Y eso cómo se sabe? Bueno pues en pseudocódigo sería algo así (el pseudocódigo no es lenguaje C, sirve para que entiendas el proceso que has de seguir pero una vez que lo entiendas debes implementar el mismo comportamiento en C).
Código:
INICIO
    MIENTRAS posicionesGeneradas < 3 HACER
        i := generarAleatorio(0,4) // creas una i aleatoria entre 0 y 4
        j := generarAleatorio(0,9) // creas una j aleatoria entre 0 y 9
        SI matriz[i][j] != 'E' ENTONCES // si esa posicion aleatoria no tiene una E...
            matriz[i][j] = 'E' // se la pones
            posicionesGeneradas := posicionesGeneradas + 1 // e incrementas el numero de posiciones en las que ya has puesto una E
        FIN SI
    FIN MIENTRAS
FIN
De esta manera si se genera una i y una j aleatorias pero ya habías asignado una 'E' ahí, no cuenta entonces y vuelve a calcularlo otra vez hasta que tengas 3 posiciones de la matriz con una 'E'.

EDIT: Repito, lo que está escrito en pseudocódigo no funciona si lo copias y lo pegas tal cual. La función <generarAleatorio(0,4)> por ejemplo no existe en C. Es para que entiendas lo que tienes que hacer y luego lo hagas como se hace en C (que en este caso es usando <rand() % 5>.
« Última modificación: 31 Octubre 2019, 00:16 am por YreX-DwX » En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
matrices en C#
Programación General
volterra 4 10,198 Último mensaje 18 Mayo 2010, 06:26 am
por Og.
matrices
Programación C/C++
aral90 2 2,260 Último mensaje 9 Diciembre 2011, 20:13 pm
por aral90
matrices
.NET (C#, VB.NET, ASP)
legomanticore 4 3,580 Último mensaje 14 Mayo 2012, 03:02 am
por $Edu$
matrices en c
Programación C/C++
ALONSOQ 9 4,793 Último mensaje 27 Junio 2012, 05:15 am
por twins
matrices
Programación C/C++
lorderick 3 3,080 Último mensaje 8 Septiembre 2012, 05:12 am
por CSQCasimiro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines