[C] Arreglos de m*n enteros

Iniciado por GGZ, 1 Octubre 2015, 23:35 PM

0 Miembros y 1 Visitante están viendo este tema.

GGZ

Dado un arreglo de m*n enteros, escribir una función pos que tome una fila y una columna, y devuelva el entero correspondiente a esa posición, es decir interpreté el arreglo unidimensional como una matriz.

¿Cómo hago esto?


Ni siquiera se me ocurre como empezar,
¿un arreglo de m*n enteros? ¿a qué se refiere con eso?

int a[m][n]; ?

Y cómo es eso que tome unafila y una columna, realmente estoy perdido.

Saludos!
LET'S DO STUFF!!

0xFer

Citarint a[m][n]; ?
Creo que si

Un arreglo de m*n enteros es int arreglo[m*n] o int arreglo[m][n] el primero es un arreglo unidimensional el segundo una matriz.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

GGZ

Bueno, pero cómo hago para pasarle una fila y una columna, además a qué se refiere con interpreté el arreglo unidimensional como una matriz.

O sea yo le paso una fila y una columna y el me debería devolver una matriz de eso, no realmente no lo entiendo.
LET'S DO STUFF!!

A.I.

Tienes que crear un array unidimensional de m*n posiciones.

int elArray[N]; //donde N es igual a n*m

Pero tienes que hacer que para el que llama a la función lo vea como una matriz de n filas y m columnas. Es decir a la función le pasas las coordenadas de matriz (fila, columna) y te debe devolver ese elemento.

elementoArray ( elArray, fila, columna); //asi seria la llamada a la funcion

Básicamente es hacer un poco de aritmética a la hora de seleccionar la posición del array unidimensional partiendo de coordenadas bidimensionales.

GGZ

#4
/*
Dado un arreglo de m*n enteros, escribir una función pos que tome una fila y una columna, y devuelva el entero correspondiente a esa posición, es decir interpreté el arreglo unidimensional como una matriz.
*/
#include <stdio.h>

int pos(char a[], int x, int y){

printf ("Elemento correspodiente a la fila %d y columna %d: %d\n",x,y,a[x][y]);
return a[x][y];
}


int main (void){

int n,m;
int N;

printf ("Introduzca las n filas: ");
scanf ("%d",&n);
printf ("Introduzca las m columnas: ");
scanf ("%d",&m);

N=n*m;

       // ¿Cómo lo lleno con bucles?
//for

int a[N];

        /*
        ..........
        */

pos(a, 3,6);



return 0;
}


Sigo sin entenderlo del todo...
LET'S DO STUFF!!

A.I.

El que llama a la función "ve" esto

10 10 10 // Ésto es una matriz
10 99 10
10 10 10

Sin embargo la función sólo conoce ésto

10 10 10 10 99 10 10 10  //Ésto es un array unidimensional

Tienes que hacer algo para que a partir de la fila y la columna, la función pueda obtener el indice equivalente para el array.

Es decir si llamas a la función así:

pos(array, 1, 1) ;

la función debe transformar ese (1,1) que son las coordenadas del elemento en la matriz a un 4 y entonces hacer

return array[4];

Que en este caso sería el 99.

Si no sabes como rellenar un array quizá este problema te venga grande...
Haz un for de N iteraciones donde en cada una pida, genere (o lo que quieras)... un número y lo vaya asignando a posiciones consecutivas del array. Pero hazlo tras declarar el array y no antes.

0xFer

#6
Las matrices ya las conoces no?

int matriz[m][n] esa es una matriz con m*n elementos.

Si quisiera saber el elemento en la segunda fila y tercera columna el código sería asi:

matriz[1][2]

Ahora tienes que hacer que un arreglo unidimensional se comporte de esa manera.
Un arreglo unidimesional de m*n es así int unidim[m*n]

Ahora si quieres acceder a la segunda fila y tercera columna sería así unidim[(n*1) + 2 ]

El resultado sería lo mismo que en la matriz, pero lo hicimos con un arreglo unidimensional

Ahora como ya te dijeron, tienes que hacer una función que haga eso, lo que tienes está bien, pero tiene que ser con un arreglo unidimensional no con una matriz.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

GGZ

#7
Cita de: A.I. en  2 Octubre 2015, 00:25 AM
El que llama a la función "ve" esto

10 10 10 // Ésto es una matriz
10 99 10
10 10 10

Sin embargo la función sólo conoce ésto

10 10 10 10 99 10 10 10  //Ésto es un array unidimensional

Tienes que hacer algo para que a partir de la fila y la columna, la función pueda obtener el indice equivalente para el array.

Es decir si llamas a la función así:

pos(array, 1, 1) ;

la función debe transformar ese (1,1) que son las coordenadas del elemento en la matriz a un 4 y entonces hacer

return array[4];

Que en este caso sería el 99.

Si no sabes como rellenar un array quizá este problema te venga grande...
Haz un for de N iteraciones donde en cada una pida, genere (o lo que quieras)... un número y lo vaya asignando a posiciones consecutivas del array. Pero hazlo tras declarar el array y no antes.


Todavía no la saco, me parece que lo estoy pensando mal porque se me está complicando demasiado.

/*
Dado un arreglo de m*n enteros, escribir una función pos que tome una fila y una columna, y devuelva el entero correspondiente a esa posición, es decir interpreté el arreglo unidimensional como una matriz.
*/

#include <stdio.h>
/*
int pos (int a[], int fila, int columna){
// pos(a,1,1)

// 10 11
// 12 13

//array(1,2)=a[3*n+(columna-1)]=a[3*1+1]=a[4]


// pos(a,2,2) = a[4]

// 10 11 12 13

a[4];



}
*/

int main (void){
int n,m,l=0; // arrays
int i,j;
int fila,columna;
int z=10;

printf ("Introduce el numero de filas: ");
scanf ("%d",&n);
printf ("Introduce el numero de columnas: ");
scanf ("%d",&m);

/// N=n*m;

int array[n][m];
int array_u[l]; // array unidimensional.

for (i=0;i<n; i++){
for (j=0; j<m; j++){
array[i][j]=z++;
}
}

printf ("Imprimiendo elementos array ...\n");

for (i=0; i<n; i++){
for (j=0; j<m; j++){
printf ( "%d ",array[i][j]);
}
printf ("\n");

}

printf ("Ingresa el numero de fila y columna: \n");
scanf ("%d %d",&fila,&columna);

for (i=0; i<n; i++){
for (j=0; j<m; j++){
array_u[l]=array[i][j];
l++;
}
}
printf ("\n");
for (l=0; l<n*m; l++)printf ("%d ",array_u[l]); // Esto es lo que le paso a la función.

//pos(array_u,fila,columna);



return 0;
}
LET'S DO STUFF!!

ivancea96

int array_u[l]; // array unidimensional.
l = 0.
Array de 0 elementos.

GGZ

Perdón debería definirlo array_u[n*m] de todos modos ahí no es donde está el error.
Estaba mal definido estamos de acuerdo, pero el problema acá es el enunciado que no termino de entenderlo.
LET'S DO STUFF!!