• Viernes 8 de Noviembre de 2024, 22:55

Autor Tema:  Funcion que devuelve un vector...  (Leído 1570 veces)

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Funcion que devuelve un vector...
« en: Viernes 15 de Enero de 2010, 00:34 »
0
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
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. #define TAMA 10
  6.  
  7. /*-----Funcion-submatriz-en-array------------------------------------------*/
  8. int subalgoritmo(int array[TAMA][TAMA], int fpe, int cpe, int fue, int cue, int vector[90]){
  9.        
  10.     int i, j, a=0;
  11.    
  12.     for(i=fpe-1; i<fue; i++){               /*2*/
  13.         for(j=cpe-1; j<cue; j++){
  14.             vector[a]=array[i][j];          
  15.             a++;                            /*no modifica ni muestra el vector*/
  16.         }
  17.     }          
  18. }
  19. /*------------------------------------------------------------------------*/
  20.  
  21. int main (void){
  22.    
  23.     int dimension;
  24.     int i, j;
  25.     int matriz[TAMA][TAMA];
  26.     int fpe, cpe;               //fpe ==  fila primer elemento      /*1*/
  27.     int fue, cue;               //cue == columna ultimo elemento
  28.     int vector[90];
  29.    
  30.     printf("Indique la dimension de la matriz cuadrada: ");
  31.     scanf("%i", &dimension);
  32.    
  33.     if(dimension<3 || dimension>10){
  34.         printf("El numero no es correcto. Debe estar entre 3 y 10. Repita: ");
  35.         scanf("%i", &dimension);
  36.     }
  37.    
  38.     printf("Complete la matriz: n");
  39.     for(i=0; i<dimension; i++){
  40.         for(j=0; j<dimension; j++){
  41.             printf("elemento[%i][%i]: ", i, j);
  42.             scanf("%i", &matriz[i][j]);
  43.         }
  44.     }
  45.    
  46.     printf("nSu matriz:n");
  47.     for(i=0; i<dimension; i++){
  48.         for(j=0; j<dimension; j++){
  49.             printf("%i  ", matriz[i][j]);
  50.         }
  51.         printf("n");
  52.     }
  53.    
  54.     printf("nIndique la posicion de la submatriz.n");
  55.     printf("Coordenadas primer elemento (primero 'fila' y luego 'columna'): ");
  56.     scanf("%i %i", &fpe, &cpe);
  57.     printf("Coordenadas ultimo elemento (primero 'fila' y luego 'columna'): ");
  58.     scanf("%i %i", &fue, &cue);
  59.    
  60.     printf("nSubmatriz: (%i,%i) , (%i,%i)n", fpe, cpe, fue, cue);
  61.    
  62.     vector[90]=subalgoritmo(matriz, fpe, cpe, fue, cue, vector);
  63.     printf("%i", vector[90]);
  64.    
  65.     printf("nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: %in"
  66.     , fpe, cpe, fue, cue, vector[90]);
  67.    
  68.     return 1;
  69. }
  70.  
  71.  
  72. /*1-> "pef, pec, uef, uec": delimitan la submatriz. Seran usados en la funcion
  73.       como contadores de inicio y fin de bucle. Donde empieza y donde termina la
  74.       submatriz (posicion (fila,columna) del primer y ultimo elemento)*/
  75. /*2-> Copia los valores de la submatriz en el vector*/
  76.  
  77.  

Un saludo!!

punteroNULO

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Funcion que devuelve un vector...
« Respuesta #1 en: Viernes 15 de Enero de 2010, 20:11 »
0
Código: C
  1. vector[90]=subalgoritmo(matriz, fpe, cpe, fue, cue, vector);
  2.  
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
  1. subalgoritmo(matriz, fpe, cpe, fue, cue, vector);
  2.  

Código: C
  1. printf("%i", vector[90]);
  2.    
  3. printf("nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: %in"
  4.     , fpe, cpe, fue, cue, vector[90]);
  5.  
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
  1. printf("nSubmatriz: (%i,%i) , (%i,%i) en forma vectorial: " , fpe, cpe, fue, cue);
  2. for(i=0; i < (((fue - fpe)+1) * ((cue - cpe)+1)); i++)
  3.        printf ("%i ", vector[i]);
  4.  

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Funcion que devuelve un vector...
« Respuesta #2 en: Sábado 16 de Enero de 2010, 21:01 »
0
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
  1.  
  2. /*Ejercicio 17; práctica 5*/
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. #define TAMA 10
  8.  
  9. /*-----Funcion-submatriz-en-array------------------------------------------*/
  10. int subalgoritmo(int array[TAMA][TAMA], int fpe, int cpe, int fue, int cue, int vector[90]){
  11.        
  12.     int i, j, a=0;
  13.    
  14.     for(i=fpe-1; i<fue; i++){      
  15.         for(j=cpe-1; j<cue; j++){
  16.             vector[a]=array[i][j];          
  17.             printf("%i ", vector[a]);
  18.             a++;                            
  19.         }                           /*muestra el vector[90] en main()*/
  20.     }
  21.     printf("n");          
  22. }
  23. /*------------------------------------------------------------------------*/
  24.  
  25.  /*Algoritmo-> SUMATRIZ a VECTOR*/
  26. int main (void){
  27.    
  28.     int dimension;
  29.     int i, j;
  30.     int matriz[TAMA][TAMA];
  31.     int fpe, cpe;               //fpe ==  fila primer elemento
  32.     int fue, cue;               //cue == columna ultimo elemento
  33.     int vector[90];
  34.        
  35.     printf("Indique la dimension de la matriz cuadrada: ");
  36.     scanf("%i", &dimension);    
  37.     if(dimension<3 || dimension>10){
  38.         printf("El numero no es correcto. Debe estar entre 3 y 10. Repita: ");
  39.         scanf("%i", &dimension);
  40.     }
  41.    
  42.     printf("Complete la matriz: n");
  43.     for(i=0; i<dimension; i++){
  44.         for(j=0; j<dimension; j++){
  45.             printf("elemento[%i][%i]: ", i, j);
  46.             scanf("%i", &matriz[i][j]);
  47.         }
  48.     }
  49.    
  50.     printf("nSu matriz:n");
  51.     for(i=0; i<dimension; i++){
  52.         for(j=0; j<dimension; j++){
  53.             printf("%3i ", matriz[i][j]);      
  54.         }
  55.         printf("n");
  56.     }
  57.    
  58.     printf("nIndique la posicion de la submatriz.n");
  59.     printf("Coordenadas primer elemento (primero 'fila' y luego 'columna'): ");
  60.     scanf("%i %i", &fpe, &cpe);
  61.     printf("Coordenadas ultimo elemento (primero 'fila' y luego 'columna'): ");
  62.     scanf("%i %i", &fue, &cue);
  63.    
  64.     printf("nSubmatriz: (%i,%i) , (%i,%i)n", fpe, cpe, fue, cue);
  65.     for(i=fpe-1; i<fue; i++){              
  66.         for(j=cpe-1; j<cue; j++){
  67.             printf("%3i ", matriz[i][j]);            
  68.         }
  69.         printf("n");
  70.     }
  71.    
  72.     printf("nSubmatriz: (%i,%i) , (%i,%i) en forma "
  73.     "vectorial: " , fpe, cpe, fue, cue);
  74.     subalgoritmo(matriz, fpe, cpe, fue, cue, vector);
  75.                    
  76.     return 1;
  77. }  
  78.  
  79.  


Gracias y un saludo!

punteroNULO

  • Miembro activo
  • **
  • Mensajes: 73
    • Ver Perfil
Re: Funcion que devuelve un vector...
« Respuesta #3 en: Martes 19 de Enero de 2010, 19:09 »
0
En la función subalgoritmo en vez de:
Código: C
  1. vector[a]=array[i][j];          
  2. printf("%i ", vector[a]);
  3.  

no es más lógico y rápido:
Código: C
  1. printf("%i ", array[i][j]);
  2.  

La variable vector no tiene ninguna utilidad para este caso. Ocupar espacio en memoria para nada.

ermiguel1979

  • Miembro activo
  • **
  • Mensajes: 45
    • Ver Perfil
Re: Funcion que devuelve un vector...
« Respuesta #4 en: Miércoles 20 de Enero de 2010, 15:22 »
0
Buen detalle, lo copio... se me nota cada cantada....

Gracias por la atención!!

Un saludo.