Programación - Mapa de bits.pdf

2

Click here to load reader

Transcript of Programación - Mapa de bits.pdf

Page 1: Programación - Mapa de bits.pdf

Universidad Nacional de Asunción - Facultad de Ingeniería Carrera de Ingeniería Electrónica

Primer Examen Parcial de Procesamiento Electrónico de Datos II Fecha: 26 de marzo de 2013 - Grupo 2 Directivas y Recomendaciones

Los comentarios aclaratorios pueden ayudar en la corrección del examen, influyendo favorablemente en su calificación.

Utilice en sus programas los nombres de las estructuras indicadas en el enunciado.

La duración del examen es de 100 minutos.

Al final del examen, debe entregar el archivo con el código fuente al profesor encargado.

Ejercicio 1: Mapa de bits (100%) Se da un mapa rectangular de bits de tamaño . Cada pixel del mapa de bits es blanco o negro, pero al menos uno es blanco. El pixel en la línea y en la columna es llamado el . La distancia entre dos pixeles y se define como:

| | | | La tarea es escribir un programa que:

Lea la descripción del mapa de bits de la entrada estándar.

Para cada pixel, calcule la distancia al pixel blanco más cercano.

Escriba los resultados a la salida estándar. Entrada del programa: El número de casos de prueba, , está en la primera línea de la entrada; luego le siguen casos de prueba separados por una línea vacía. En la primera línea de cada caso de prueba hay un par de enteros y separados por un espacio simple ( ). En cada una de las siguientes líneas del caso de prueba hay una palabra de ceros y unos de tamaño , que contiene la descripción de una línea del mapa de bits. En la posición de la línea ( , ), se tiene un ‘1’ si y sólo si el pixel es blanco. Salida del programa: En la línea -ésima de cada caso de prueba ( ) deben escribirse enteros ,…, separados por espacios simples, donde es la distancia del pixel al pixel blanco más cercano.

Ejemplo de entrada 1

3 4

0001

0011

0110

Ejemplo de salida 3 2 1 0

2 1 0 0

1 0 0 1

Page 2: Programación - Mapa de bits.pdf

Se propone un método para solucionar este problema: #include<stdio.h>

int abso(int x){

if(x>=0) return x;

else return ((-1)*x);

}

int main(){

int t,n,m,i,k,j,mat[50][50],pix[50][50],a,b,dist;

char cad[51];

scanf("%d",&t);

for(k=0;k<t;k++){

scanf("%d %d",&n,&m);

getchar();

for(i=0;i<n;i++){

gets(cad);

for(j=0;j<m;j++){

mat[i][j]=cad[j]-'0';

pix[i][j]=1000; //un valor alto

}

}

//Por cada elemento se recorre toda la matriz

//Esto es muy ineficiente pero sirve

for(i=0;i<n;i++){

for(j=0;j<m;j++){

for(a=0;a<n;a++){

for(b=0;b<m;b++){

if(mat[a][b]){

dist=abso(i-a)+abso(j-b);

if(dist<pix[i][j]){

pix[i][j]=dist;

}

}

}

}

}

}

for(i=0;i<n;i++){

for(j=0;j<m;j++){

printf("%d ",pix[i][j]);

}

printf("\n");

}

printf("\n");

}

}