Autor
|
Tema: [C] Arreglos de m*n enteros (Leído 4,394 veces)
|
GGZ
Desconectado
Mensajes: 144
|
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!
|
|
|
En línea
|
LET'S DO STUFF!!
|
|
|
0xFer
Desconectado
Mensajes: 400
|
int 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.
|
|
|
En línea
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
GGZ
Desconectado
Mensajes: 144
|
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.
|
|
|
En línea
|
LET'S DO STUFF!!
|
|
|
A.I.
Desconectado
Mensajes: 61
|
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.
|
|
|
En línea
|
|
|
|
GGZ
Desconectado
Mensajes: 144
|
/* 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: "); printf ("Introduzca las m columnas: "); N=n*m; // ¿Cómo lo lleno con bucles? //for int a[N]; /* .......... */ pos(a, 3,6); return 0; }
Sigo sin entenderlo del todo...
|
|
« Última modificación: 2 Octubre 2015, 00:10 am por nisteeklod »
|
En línea
|
LET'S DO STUFF!!
|
|
|
A.I.
Desconectado
Mensajes: 61
|
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.
|
|
|
En línea
|
|
|
|
0xFer
Desconectado
Mensajes: 400
|
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.
|
|
« Última modificación: 2 Octubre 2015, 00:29 am por 0xFer »
|
En línea
|
int getRandomNumber(){ return 4; //chosen by fair dice roll //guaranteed to be random }
|
|
|
GGZ
Desconectado
Mensajes: 144
|
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: "); printf ("Introduce el numero de columnas: "); /// 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 ("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++; } } 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; }
|
|
« Última modificación: 2 Octubre 2015, 16:46 pm por nisteeklod »
|
En línea
|
LET'S DO STUFF!!
|
|
|
ivancea96
Desconectado
Mensajes: 3.412
ASMático
|
int array_u[l]; // array unidimensional.
l = 0. Array de 0 elementos.
|
|
|
En línea
|
|
|
|
GGZ
Desconectado
Mensajes: 144
|
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.
|
|
|
En línea
|
LET'S DO STUFF!!
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Concatenar enteros.
Programación C/C++
|
Nanoc
|
3
|
9,554
|
12 Junio 2010, 01:24 am
por Littlehorse
|
|
|
Ingresar 10 enteros
« 1 2 »
Programación C/C++
|
mili03
|
10
|
9,349
|
4 Julio 2010, 02:54 am
por d4n0n3
|
|
|
Desbordamiento de enteros en PHP 5.x
Noticias
|
wolfbcn
|
0
|
1,932
|
29 Abril 2011, 13:47 pm
por wolfbcn
|
|
|
Suma de enteros en C
Programación C/C++
|
osofer
|
9
|
3,949
|
15 Agosto 2011, 22:54 pm
por osofer
|
|
|
tipos de enteros en C
« 1 2 »
Programación C/C++
|
lucaslopez0000
|
11
|
5,831
|
20 Diciembre 2012, 02:24 am
por rir3760
|
|