es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En lenguaje C, ¿cómo verificar si la posición en M[][] es válida?

Chicos, ¿saben cuando intento acceder a la posición de esta manera:

M[-2][-1], NO FUNCIONA,

Pero, si intentamos acceder así:

int k = -2;

M[k][k+1], FUNCIONA?

Estoy haciendo una tarea y necesito verificar si la posición M es válida en base a algunos valores aleatorios I y J.

“`c
#include <stdio.h>
int main(){
int matriz[5][5];
int i, j;
int cont = 0;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
matriz[i][j] = cont+=1;
}
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%d ",matriz[i][j]);
}
printf("\n");
}

int k = -2;
//matriz[-2][-1] = 99; << no funciona
matriz[k][k+1] = 99; // << esto funciona
printf("\n%d",matriz[k][k+1]); // << esto funciona
printf("\n\n");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%d ",matriz[i][j]); //<< y esto no cambia nada en matriz
}
printf("\n");
}

}
“`</stdio.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    La razón por la que no se puede acceder a la posición M[-2][-1] es porque está fuera de los límites de la matriz. En C, los arrays se indexan a partir de 0, por lo tanto, el primer elemento está en la posición 0, el segundo en la posición 1, y así sucesivamente. Si intentas acceder a un índice que es negativo o mayor que el tamaño del array, obtendrás un comportamiento indefinido.

    Por otro lado, si usas una variable para acceder a la posición, como en el ejemplo M[k][k+1], puede funcionar siempre y cuando los valores de k y k+1 estén dentro de los límites de la matriz. En este caso, k = -2 y k+1 = -1, que son índices válidos para la matriz.

    Para verificar si una posición M[I][J] es válida basándote en algunos valores aleatorios de I y J, puedes comprobar si I y J están dentro de los límites de la matriz. En este caso, la matriz tiene un tamaño de 5×5, por lo tanto, los valores válidos para I y J son 0, 1, 2, 3 y 4. Puedes utilizar una declaración if para comprobar si los valores están dentro de los límites, de esta manera:

    if (I >= 0 && I < 5 && J >= 0 && J < 5) {
      // M[I][J] es una posición válida
    } else {
      // M[I][J] está fuera de los límites de la matriz
    }
    

    De esta manera, puedes asegurarte de no acceder a posiciones inválidas y prevenir comportamientos indefinidos o fallos.

Comments are closed.