Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Valido ingreso coordenada a una matriz, en C

Estas en el tema de Valido ingreso coordenada a una matriz, en C en el foro de C/C++ en Foros del Web. la idea es que no se pueda ingresar dos o mas veces la misma coordena. la aplicacion funciona asi, se genera de forma aleatoria una ...
  #1 (permalink)  
Antiguo 04/11/2013, 12:34
 
Fecha de Ingreso: octubre-2011
Mensajes: 153
Antigüedad: 13 años
Puntos: 7
Valido ingreso coordenada a una matriz, en C

la idea es que no se pueda ingresar dos o mas veces la misma coordena.

la aplicacion funciona asi, se genera de forma aleatoria una matriz de 5 x 5, luego se le pide al usuario seleccione un item de la matriz, para ello el usuario ingresa de forma separado la fila y la columna, esto lo tiene que hace muchas veces, pero solo puede seleccionar una sola vez una coordenada.

por ejemplo:

ingrese fila: 2
ingrese columna: 1

si ingresa esa misma coodenada otra ves, no tendria que dejarlo pasar.

como se puede hacer ?

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main(){
  6.     srand(time(NULL));
  7.     int f;
  8.     int c;
  9.     float apu = 0;
  10.     int mat[5][5], i, j;   
  11.    
  12.     for (i=0;i<5;i++){
  13.         for (j=0;j<5;j++){
  14.            
  15.             mat[i][j]=rand()%10;
  16.         }      
  17.     }
  18.    
  19.     printf("\nIngrese fila : ");
  20.     scanf("%d",&f);
  21.     printf("\nIngrese Columna : ");
  22.     scanf("%d",&c);
  23.     printf("[%d]",mat[f][c]);
  24.     int au = mat[f][c];
  25.    
  26.     return 0;  
  27. }
__________________
Mi mail: [email protected]
  #2 (permalink)  
Antiguo 04/11/2013, 15:21
 
Fecha de Ingreso: agosto-2012
Mensajes: 601
Antigüedad: 12 años, 2 meses
Puntos: 83
Respuesta: Valido ingreso coordenada a una matriz, en C

Tienes dos opciones: usar un flag de estado para cada celda o crear una nueva lista de coordenadas que en vez de guardar el valor guarden el flag de estado; es mas facil hacerlo todo en uno.

Primero declaras las definiciones:

Código C:
Ver original
  1. #define FILS    3
  2. #define COLS    3
  3. #define IVALOR  0
  4. #define IVISTO  1

Despues la matriz que ahora incluye un espacio extra para el flag de estado, y la rellenas dejando inicialmente como no visitado:

Código C:
Ver original
  1. int mat[FILS][COLS][2], i, j;
  2.  
  3. srand(time(NULL));
  4. for(i=0; i<FILS; i++) {
  5.     for (j=0; j<COLS; j++) {
  6.         mat[i][j][IVALOR] = rand()%10;//sitio para el valor
  7.         mat[i][j][IVISTO] = 0;//flag de estado, inicialmente como no visitado
  8.     }
  9. }

Ahora solo tienes que pedir coordenadas y comprovar el flag, si no está marcado como visto es que es valido, y una vez visitado lo marcas para evitar siguientes accesos

Código C:
Ver original
  1. printf("\nIngrese fila : ");
  2. scanf("%d",&f);
  3. printf("\nIngrese Columna : ");
  4. scanf("%d",&c);
  5. if(!mat[f][c][IVISTO]) {
  6.     mat[f][c][IVISTO] = 1;
  7. }

Ten en cuenta que te falta la comprovacion de error para asegurar que la fila y la columna estan en el rango valido, de lo contrario se producirá una violacion de acceso (segmentation fault).

*Nota: los defines son para clarificar el codigo, en este caso son muy evidentes y no serian necesarios pero te facilitaran el trabajo en caso que quieras modificar algun valor.

Saludos
vosk

Etiquetas: funcion, ingreso, int, matriz
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:50.