elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  extraer submatrices
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: extraer submatrices  (Leído 1,032 veces)
xabi100

Desconectado Desconectado

Mensajes: 1


Ver Perfil
extraer submatrices
« en: 27 Diciembre 2020, 18:23 pm »

Hola, necesito hacer un programa en c que extraiga submatrices cuadradas (k*k) de una matriz dada (m*n), calculando la suma de los elementos de cada submatriz y devuelva la submatriz con la suma mayor.
 
he hecho un codigo pero no me da lo que esperaba. en este caso k=2.

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int suma(int m[2][2]);
  4.  
  5. void main(void){
  6.  int matriz[5][4]={{1,2,2,4},{3,9,4,5},{6,7,2,1},{4,4,3,1},{0,0,3,8}};
  7.  int submatriz[2][2];
  8.  int i,j,fila,columna,mayorsuma;
  9.  
  10.  fila=0;columna=0;
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  mayorsuma=15;
  17.  for(i=0;i<5;i++){
  18.    for(j=0;j<4;j++){
  19.  
  20.      for(int k=i;k<i+2;k++){
  21.        for(int p=j;p<j+2;p++){
  22.  
  23.          submatriz[k][p]= matriz[k][p];
  24.  
  25.          if(suma(submatriz)> mayorsuma){
  26.            mayorsuma=suma(submatriz);
  27.            fila=k;
  28.            columna=p;}
  29.        }
  30.      }
  31.    }
  32.  }
  33.  
  34. printf ("mayorsuma   = %d \n",mayorsuma  );
  35. printf ("fila   = %d \n",fila  );
  36. printf ("columna   = %d \n",columna  );        
  37.  
  38.  
  39.  
  40.  
  41.  
  42. }
  43. int suma(int m[2][2]){
  44.   int i,j;
  45.   int sum=0;
  46.  
  47.   for(i=0;i<2;i++){
  48.     for(j=0;j<2;j++){
  49.       sum=sum+m[i][j];
  50.     }
  51.   }
  52. return (sum);
  53. }


« Última modificación: 27 Diciembre 2020, 19:28 pm por K-YreX » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 846



Ver Perfil
Re: extraer submatrices
« Respuesta #1 en: 27 Diciembre 2020, 20:25 pm »

Tienes varios errores:
  • Líneas 17 y 18 -> La i y la j marcan el punto de inicio. A cada valor de i y de j le vas a sumar hasta 2 por lo que en las últimas iteraciones de cada bucle se te saldrá fuera de la matriz.
  • Línea 23 -> No es la misma la posición que vas leyendo de la matriz original que la posición en la que tienes que escribir de la submatriz. Aunque hagas la submatriz que empieza por ejemplo en [2][3] tienes que empezar a escribir en
  • , no en [2][3].
  • Líneas 25 - 28 -> No tienes que calcular la suma cada vez que cambias un valor sino cada vez que copias una submatriz completa. Tal y como lo haces ahora mismo estás calculando sumas de submatrices que no existen.

Aparte de los errores, ese programa está muy limitado pues no permite cambiar fácilmente ni el tamaño ni los valores de las matrices. Sería mejor usar constantes para permitir esto más fácilmente.


En línea

Código
  1. cout << "Todos tenemos un defecto, un error en nuestro código" << endl;
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
extraer y ver una iso
Grabadoras
theloop 3 1,753 Último mensaje 30 Septiembre 2003, 10:34 am
por theloop
Extraer voz de un archivo o extraer la musica solamente !!!!!
Multimedia
magnox 2 2,487 Último mensaje 28 Septiembre 2004, 17:16 pm
por theloop
Extraer mpg de DVD
Multimedia
SatDio 2 1,618 Último mensaje 10 Marzo 2005, 21:41 pm
por Songoku
Extraer obj de una dll
Ingeniería Inversa
Andygon 0 1,672 Último mensaje 6 Febrero 2009, 13:08 pm
por Andygon
7 Zip Extraer
.NET (C#, VB.NET, ASP)
rigorvzla 8 4,978 Último mensaje 3 Diciembre 2017, 02:53 am
por rigorvzla
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines