Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 24 Noviembre 2013, 01:41 am



Título: desbordamiento de arreglos
Publicado por: m@o_614 en 24 Noviembre 2013, 01:41 am
Saludos, si tengo una matriz en C, en la cual tengo que posicionarme en alguna de las casillas( le pido la fila y la columna al usuario), y despues a apartir de esa casilla quiero moverme x numero de celdas en el eje de las filas y x numero de celdas en el eje de las columnas, ¿Cual es a manera correcta de validar que la nueva posicion en la que me encuentro es una celda valida para que no se desborde el arreglo???,podria ser algo como esto?

Código
  1. void verificarCelda(char **arreglo,int filaInicial,int columnaInicial)
  2. {
  3.    if(arreglo[filaInicial + 2][columnaInicial - 1] != -1)
  4.       printf("Celda valida");
  5. }
  6.  


Título: Re: desbordamiento de arreglos
Publicado por: xiruko en 24 Noviembre 2013, 15:37 pm
Código
  1. int VerificarCelda(int total_filas, int total_columnas, int fila, int col, int x)
  2. {
  3.     if (fila+x<total_filas && col+x<total_columnas) return 1;
  4.     return 0;
  5. }

Donde total_filas y total_columnas son las dimensiones de la matriz, fila y col son la fila y columna donde se encuentra actualmente el usuario y x son el numero de filas y columnas que se mueve. Si devuelve 1 es que la nueva posición es correcta y 0 en caso contrario.

Saludos.


Título: Re: desbordamiento de arreglos
Publicado por: rir3760 en 24 Noviembre 2013, 17:25 pm
Ya que el resultado de los operadores relacionales y lógicos es uno si se cumple la condición y cero en caso contrario puedes reducir la función a:
Código
  1. int VerificarCelda(int total_filas, int total_columnas, int fila, int col, int x)
  2. {
  3.   return  fila + x < total_filas && col + x < total_columnas;
  4. }

Un saludo