Programación General > C/C++
Funcion que devuelve un vector...
(1/1)
ermiguel1979:
Buenas noches, estoy liadillo con un programa que debe leer una matriz cuadrada de tamaño y mostrar una submatriz indicada en forma de vector.
La cosa es que hay que mandar la submatriz a una función, que la devuelve como un vector. Pero no me sale... no se si es problema de que la funcion no devuelve array o yo que se, la cosa es que no me anda. Os mando el codigo a ver que me podeis comentar. Garacias.
--- Código: C --- #include <stdio.h>#include <stdlib.h> #define TAMA 10 /*-----Funcion-submatriz-en-array------------------------------------------*/int subalgoritmo(int array[TAMA][TAMA], int fpe, int cpe, int fue, int cue, int vector[90]){ int i, j, a=0; for(i=fpe-1; i<fue; i++){ /*2*/ for(j=cpe-1; j<cue; j++){ vector[a]=array[i][j]; a++; /*no modifica ni muestra el vector*/ } } }/*------------------------------------------------------------------------*/ int main (void){ int dimension; int i, j; int matriz[TAMA][TAMA]; int fpe, cpe; //fpe == fila primer elemento /*1*/ int fue, cue; //cue == columna ultimo elemento int vector[90]; printf("Indique la dimension de la matriz cuadrada: "); scanf("%i", &dimension); if(dimension<3 || dimension>10){ printf("El numero no es correcto. Debe estar entre 3 y 10. Repita: "); scanf("%i", &dimension); } printf("Complete la matriz: n"); for(i=0; i<dimension; i++){ for(j=0; j<dimension; j++){ printf("elemento[%i][%i]: ", i, j); scanf("%i", &matriz[i][j]); } } printf("nSu matriz:n"); for(i=0; i<dimension; i++){ for(j=0; j<dimension; j++){ printf("%i ", matriz[i][j]); } printf("n"); } printf("nIndique la posicion de la submatriz.n"); printf("Coordenadas primer elemento (primero 'fila' y luego 'columna'): "); scanf("%i %i", &fpe, &cpe); printf("Coordenadas ultimo elemento (primero 'fila' y luego 'columna'): "); scanf("%i %i", &fue, &cue); printf("nSubmatriz: (%i,%i) , (%i,%i)n", fpe, cpe, fue, cue); vector[90]=subalgoritmo(matriz, fpe, cpe, fue, cue, vector); printf("%i", vector[90]); printf("nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: %in" , fpe, cpe, fue, cue, vector[90]); return 1;} /*1-> "pef, pec, uef, uec": delimitan la submatriz. Seran usados en la funcion como contadores de inicio y fin de bucle. Donde empieza y donde termina la submatriz (posicion (fila,columna) del primer y ultimo elemento)*//*2-> Copia los valores de la submatriz en el vector*/
Un saludo!!
punteroNULO:
--- Código: C ---vector[90]=subalgoritmo(matriz, fpe, cpe, fue, cue, vector); La asignación a la variable sobra puesto que la función no devuelve ningún valor y el vector ya está como uno de los parámetros. Lo correcto entonces:
--- Código: C ---subalgoritmo(matriz, fpe, cpe, fue, cue, vector);
--- Código: C ---printf("%i", vector[90]); printf("nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: %in" , fpe, cpe, fue, cue, vector[90]); Solo muestra el valor que se encuentra en la posición 90 del vector, que encima está fuera del rango (un vector de 90 elementos va desde 0 hasta 89), con lo cual el valor que se muestra es de la variable que se encuentra en la siguiente posición de memoria.
Para mostrar todos los elementos se realiza un recorrido desde la primera posición hasta el número de elementos que se extrayerón de la matriz:
--- Código: C ---printf("nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: " , fpe, cpe, fue, cue);for(i=0; i < (((fue - fpe)+1) * ((cue - cpe)+1)); i++) printf ("%i ", vector[i]);
ermiguel1979:
Buenas noches punteronulo, tu aporte me ha sido de grán ayuda, y aunque no lo he conseguido resolver igual, me ha dado la idea para encontrar una solución.
Al final mi código se ha quedado así:
--- Código: C --- /*Ejercicio 17; práctica 5*/ #include <stdio.h>#include <stdlib.h> #define TAMA 10 /*-----Funcion-submatriz-en-array------------------------------------------*/int subalgoritmo(int array[TAMA][TAMA], int fpe, int cpe, int fue, int cue, int vector[90]){ int i, j, a=0; for(i=fpe-1; i<fue; i++){ for(j=cpe-1; j<cue; j++){ vector[a]=array[i][j]; printf("%i ", vector[a]); a++; } /*muestra el vector[90] en main()*/ } printf("n"); }/*------------------------------------------------------------------------*/ /*Algoritmo-> SUMATRIZ a VECTOR*/int main (void){ int dimension; int i, j; int matriz[TAMA][TAMA]; int fpe, cpe; //fpe == fila primer elemento int fue, cue; //cue == columna ultimo elemento int vector[90]; printf("Indique la dimension de la matriz cuadrada: "); scanf("%i", &dimension); if(dimension<3 || dimension>10){ printf("El numero no es correcto. Debe estar entre 3 y 10. Repita: "); scanf("%i", &dimension); } printf("Complete la matriz: n"); for(i=0; i<dimension; i++){ for(j=0; j<dimension; j++){ printf("elemento[%i][%i]: ", i, j); scanf("%i", &matriz[i][j]); } } printf("nSu matriz:n"); for(i=0; i<dimension; i++){ for(j=0; j<dimension; j++){ printf("%3i ", matriz[i][j]); } printf("n"); } printf("nIndique la posicion de la submatriz.n"); printf("Coordenadas primer elemento (primero 'fila' y luego 'columna'): "); scanf("%i %i", &fpe, &cpe); printf("Coordenadas ultimo elemento (primero 'fila' y luego 'columna'): "); scanf("%i %i", &fue, &cue); printf("nSubmatriz: (%i,%i) , (%i,%i)n", fpe, cpe, fue, cue); for(i=fpe-1; i<fue; i++){ for(j=cpe-1; j<cue; j++){ printf("%3i ", matriz[i][j]); } printf("n"); } printf("nSubmatriz: (%i,%i) , (%i,%i) en forma " "vectorial: " , fpe, cpe, fue, cue); subalgoritmo(matriz, fpe, cpe, fue, cue, vector); return 1;}
Gracias y un saludo!
punteroNULO:
En la función subalgoritmo en vez de:
--- Código: C ---vector[a]=array[i][j]; printf("%i ", vector[a]);
no es más lógico y rápido:
--- Código: C ---printf("%i ", array[i][j]);
La variable vector no tiene ninguna utilidad para este caso. Ocupar espacio en memoria para nada.
ermiguel1979:
Buen detalle, lo copio... se me nota cada cantada....
Gracias por la atención!!
Un saludo.
Navegación
Ir a la versión completa