Guião laboratorial n.º 1 – exercício 19
“Pretende-se reduzir uma imagem a metade do seu tamanho original. A imagem inicial consiste num tabela 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 tabela 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):
Escreva uma função em C que efetue esta operação. A função recebe 3 argumentos: endereço inicial da matriz original, endereço inicial da matriz reduzida e o valor M.”
#include <stdio.h> #define TAM 8 void reduzir_i(float *o, float *r, int d) { int i,j, k,aux; float *p, *s, *q, soma=0, media=0; p=o; q=r; //imprimir a matriz original printf("matriz original: \n"); for(i=0; i<d; i++){ for(j=0; j<d; j++, p++){ printf("%.f ", *p); } printf("\n"); } p=o; s=o+d; printf("\n"); for(i=0; i<d; i=i+2, p=p+d, s=s+d){ for(j=0; j<d; j++, p++, s++){ for(k=0 ; k<j+1; k=k+d){ //printf("%.f-%.f ", *p,*s); soma=soma+*p+*s; } if(aux<1){ aux++; }else{ media=soma/4; *q=media; //printf("%2.f \n", *q); aux=0; soma=0; media=0; q++; } } } //imprimir a matriz reduzida printf("\n"); q=r; printf("matriz reduzida: \n"); for(i=0; i<d/2; i++){ for(j=0; j<d/2; j++, q++){ printf("%.1f ", *q); } printf("\n"); } } int main() { float matO[TAM][TAM]={{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 matR[TAM/2][TAM/2]={{0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}}; reduzir_i(matO, matR, TAM); return 0; }
Tags : Learn C
0 thoughts on “Guião laboratorial n.º 1 – exercício 19”