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;
   40   41   42   43   44   45   46   47   48   49   50