Jump to content
thinkabout

Matriz Original MxM reduzir para Matriz Média

Recommended Posts

thinkabout

Boas Pessoal,

Sei correr a matriz na horizontal e na vertical, contudo tenho que correr a matriz em "quadrados", não estou a ver como.

Agradeço ideias.

#include <stdio.h>
#define M 8
/*
19. Pretende-se reduzir uma imagem a metade do seu tamanho original. A imagem inicial
consiste num array bidimensional com M×M valores inteiros onde cada pixel (ponto na imagem)
pode tomar um valor inteiro entre 0 e 9 (tonalidades de cinza). A imagem reduzida é armazenada
num array bidimensional com M/2×M/2 valores reais onde cada elemento (pixel) corresponde á
média dos 4 elementos que substitui. Para melhor compreensão do enunciado veja o exemplo
apresentado de seguida (neste caso, para M=8):
Imagem original
0 4 9 3 6 7 2 9
9 4 7 8 3 4 7 2
5 1 2 6 3 8 6 2
7 1 4 8 7 2 0 7
4 9 3 5 2 1 5 7
5 3 4 7 8 9 1 0
2 3 5 6 7 9 2 4
2 3 4 5 6 7 8 9
 Imagem reduzida
 4.3 6.8 5.0 5.0
 3.5 5.0 5.0 3.8
 5.3 4.8 5.0 3.3
 2.5 5.0 7.3 5.8
Escreva uma função em C que efectue esta operação. A função recebe 3 argumentos: endereço do
primeiro elemento da matriz original, endereço do primeiro elemento da matriz reduzida e o valor
M
*/

void calculamedia(int *matriz, float *matrizmedia, int m)
{
for (i = 0; i < M; i++)
{
}

}

int main()
{

int matriz[M][M] =	  {{0, 4, 9, 3, 6, 7, 2, 9},
					 {9, 4, 7, 8, 3, 4, 7, 2},
					 {5, 1, 2, 6, 3, 8, 6, 2},
					 {7, 1, 4, 8, 7, 2, 0, 7},
					 {4, 9, 3, 5, 2, 1, 5, 7},
					 {5, 3, 4, 7, 8, 9, 1, 0},
					 {2, 3, 5, 6, 7, 9, 2, 4},
					 {2, 3, 4, 5, 6, 7, 8, 9}};

float matrizmedia[M/2][M/2] = {0.0};

calculamedia(matriz[0], matrizmedia[0], M);

// Falta função para impressão da matriz.
return 0;
}

Edited by thinkabout

Share this post


Link to post
Share on other sites
HappyHippyHippo
void calculamedia(int *matriz, double *matrizmedia, int m) // <--- double
{
int i, j;
int sum;

for (i = 0; i < m; i += 2)
{
	for (j = 0; j < m; j += 2)
	{
		sum  = /* matriz[i][j] */
		sum += /* matriz[i][j+1] */
		sum += /* matriz[i+1][j] */
		sum += /* matriz[i+1][j+1] */

		/* matrizmedia[i][j] = (double)sum / 4; */
	}
}
}


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
thinkabout

;)

Se existir forma de simplificar agradeço ideias :) .

void calculamedia(int *matriz, double *matrizmedia, int tamanho)
{
int i, j,z=0,y=0;
int sum;
// Imprimir a matriz original
printf("\n Matriz Original \n");
for (i = 0; i < m*8; i ++)
{
 printf(" %d" , *(matriz+i));
 z++;
 if (z==tamanho)
 {
  puts("");
  z=0;
 }
}
puts("");
// Faz a soma dos numeros depois a devisão para calcular media e insere na matrizmedia
for (i = 0; i < tamanho*tamanho; i += tamanho*2)
{
 for (j = 0; j < tamanho; j += 2)
 {
  sum  = *(matriz + i + j);			 /* matriz[i][j]	  -> 0 */
  printf("Estou a comecar no indice %d %d",i,j); // Debug
  sum += *(matriz + i+1 + j);		   /* matriz[i+1][j]	-> 4  */
  sum += *(matriz + i + j+tamanho);	 /* matriz[i][j+1]	-> 9  */
  sum += *(matriz + i+1 + j+tamanho);   /* matriz[i+1][j+1]  -> 4  */
  printf(" ---- O valor total da e soma %d \n", sum);  // Debug
  // Passar os valores para a matrizmedia
  *(matrizmedia + y) = (double)sum / 4;
  y++;  
 }  
}  
// Imprimir a matriz reduzida
printf("\n Matriz Reduzida \n");
for (i = 0; i < m*2; i++)
{
 printf(" %.1lf" , *(matrizmedia+i));
 z++;
 if (z==tamanho/2)
 {
  puts("");
  z=0;
 }
}
}

Edited by thinkabout

Share this post


Link to post
Share on other sites
HappyHippyHippo

vi agora que tinha os índices errados na atribuição à matriz reduzida :D ao menos viste isso e corrigiste ;)

simplificar ? simples :

mete a impressão da matriz numa função e tira da função redução

isso não é passo para ser feito dentro da função redução


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.