Page 45 - MATINF Nr. 9-10
P. 45
Algoritmul fill s , i aplicat , ii 45
5 Suprafata unui obiect
,
Se d˘a o fotografie cu un singur obiect. Ce suprafat , ˘a (arie) are obiectul? Fotografia este
asem˘an˘atoare cu cea de la Sect , iunea 3. Suprafat , a unui obiect este egal˘a cu num˘arul de pixeli
(elemente de 1 din tabloul dat). Dimensiunile tabloului bidimensional s , i elementele lui se dau ˆın
fis , ierul foto3.in. Suprafat , a obiectului se va scrie ˆın fis , ierul foto3.out.
Exemplu
foto3.in
5 6
0 0 0 0 0 0
0 0 0 1 1 0
0 0 1 0 0 0
0 0 1 1 1 0
0 0 1 1 0 0
foto3.out
8
Descrierea algoritmului
1. Citim m, n s , i elementele tabloului bidimensional a.
2. Init , ializ˘am Aria cu 0.
3. Determin˘am un pixel ˆın obiect s , i ˆıi memor˘am coordonatele x0, y0 (linia s , i coloana).
4. S , tergem obiectul pornind din (x0,y0) s , i num˘arˆand pixelii ˆın variabila Aria.
5. Afis , ˘am valoarea pentru Aria.
Programul C++ pentru algoritm este urm˘atorul:
#include <fstream >
using namespace std;
ifstream fin("foto3.in");
ofstream fout("foto3.out");
int a[200][200] ,m,n,x0 ,y0 , Aria;
int dl[8]={-1,-1, 0, 1, 1, 1, 0,-1};
int dc [8]={ 0, 1, 1, 1, 0,-1,-1,-1};
void cit (){
int i,j;
fin >>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
fin >>a[i][j];
}
void fill(int i, int j){
int k,n,in ,jn;
Aria ++;
a[i][j] = 0;