Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

[Zadatak] Broj grupa jedinica u matrici

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Broj grupa jedinica u matrici

[ Pregleda: 3073 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 840
*.dialup.blic.net.



+142 Profil

icon [Zadatak] Broj grupa jedinica u matrici16.05.2006. u 21:18 - pre 172 meseci
Sad napravih neki zadatak koji računa broj grupa jedinica u matrici i kad sam tu matricu stavio na slobodnu memoriju ... otad program ne radi. Dakle problem je 100% do matrice ali namjerno nisam htio da je napravim na steku, u inat! :-)

Code:
#include <iostream>
#include <fstream>
using namespace std;

void findObject(int i, int j, int k, int **mat);     

int main(void)
{
    int n;
    ifstream in("input\\MATRIX.txt");    
    in >> n;
    char tmp[n];
    //matrica na slobodnoj memoriji
    int **mat = new int*[n];
    for (int i=0; i<n; i++)
        mat[i] = new int[n];
    //učivanje matrice
    for (int i=0; i<n; i++)
    {
        in >> tmp;
        for (int j=0; j<n; j++) 
        {
            if (tmp[j]=='0')
               mat[i][j]=0;
            else
                mat[i][j]=-1;
        }
    }
    in.close();    
    //obrada
    int k=1;
    for (int i=0; i<n; i++)
        for (int j=0; j<n; j++)
            if (mat[i][j]==-1)
            {
              findObject(i,j,k,mat);
              k++;
            }          
    //ispis matrice
    for (int i=0; i<n; i++, cout << endl)
        for (int j=0; j<n; j++)
            if (mat[i][j]!=0)
               cout << mat[i][j];
            else
                cout << ".";
    cout << "\nBroj likova u matrici: " << k-1 << "\n";
    
    system ("pause");
    return 0;
}

/*
  funkcija rekurzivno pronalazi skup jedinica u matrici
  i,j - koordinate člana matrice koji pripada liku
  k - indeks trenutnog lika u matrici
*/
void findObject(int i, int j, int k, int **mat)
{
     if (mat[i][j+1]==-1)
     {
        mat[i][j+1]=k;
        findObject(i,j+1,k,mat);
     }
     if (mat[i][j-1]==-1)
     {
        mat[i][j-1]=k;
        findObject(i,j-1,k,mat);
     }
     if (mat[i+1][j]==-1)
     {
        mat[i+1][j]=k;
        findObject(i+1,j,k,mat);
     }
     if (mat[i-1][j]==-1)
     {
        mat[i-1][j]=k;
        findObject(i-1,j,k,mat);
     }
}

 
Odgovor na temu

yooyo
Centroid / Technical director

Član broj: 4891
Poruke: 1101
..shall-bg.customer.sbb.co.yu.



Profil

icon Re: [Zadatak] Broj grupa jedinica u matrici17.05.2006. u 17:05 - pre 172 meseci
U funkciji findObject nemas proveru da li si probio dimenzije matrice.
Ako malo bolje pogledas videces da program moze da se rekurzivno zavrti i da u liniji if (mat(i)(j+1)==-1) i ili j+1 predu N (dimenziju matrice).

Koji kompajler/okruzenje koristis. Mogao bi malo da naucis da debagujes program.

yooyo

[Ovu poruku je menjao yooyo dana 17.05.2006. u 18:05 GMT+1]
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 840
*.dialup.blic.net.



+142 Profil

icon Re: [Zadatak] Broj grupa jedinica u matrici18.05.2006. u 21:47 - pre 172 meseci
U pravu si, ne znam kako to nisam primjetio. Što se tiče debugera, nisam ga koristio jer mi je program ranije perfektno radio dok se matrica učitavala sa steka (sada mi nije jasno zašto), pa sam odmah pomislio da sam zeznuo nešto u prikazu matrice... Evo novog i ispravnog koda:
Code:

#include <iostream>
#include <fstream>
using namespace std;

void findObject(int i,int j,int k,int n,int **mat);     

int main(void)
{
    int n,i,j;
    ifstream in("input\\MATRIX.txt");    
    in >> n;
    
    //matrica na slobodnoj memoriji
    int **mat = new int*[n];
    for (i=0; i<n; i++)
        mat[i] = new int[n];
        
    //učivanje matrice
    char tmp[n];    
    for (int i=0; i<n; i++)
    {
        in >> tmp;
        for (int j=0; j<n; j++) 
        {
            if (tmp[j]=='0')
               mat[i][j]=0;
            else
                mat[i][j]=-1;
        }
    }
    in.close();    
    
    //obrada
    int k=1;
    for (i=0; i<n; i++)
        for (j=0; j<n; j++)
            if (mat[i][j]==-1)
            {
              findObject(i,j,k,n,mat);
              k++;
            }         
             
    //ispis matrice
    for (i=0; i<n; i++, cout << endl)
        for (j=0; j<n; j++)
            if (mat[i][j]!=0)
               cout << mat[i][j];
            else
                cout << ".";
    cout << "\nBroj likova u matrici: " << k-1 << "\n";
    
    system ("pause");
    return 0;
}

/*
  funkcija rekurzivno pronalazi skup jedinica u matrici
  i,j - koordinate člana matrice koji pripada liku
  k - indeks trenutnog lika u matrici
  n - veličina matrice
  **mat - pokazivač na matricu
*/
void findObject(int i, int j, int k,int n, int **mat)
{
     if (j+1<n)
        if (mat[i][j+1]==-1)
        {
           mat[i][j+1]=k;
           findObject(i,j+1,k,n,mat);
        }
     if (!(j-1<0))
        if (mat[i][j-1]==-1)
        {
           mat[i][j-1]=k;
           findObject(i,j-1,k,n,mat);
        }
     if (i+1<n)
          if (mat[i+1][j]==-1)
          {
             mat[i+1][j]=k;
             findObject(i+1,j,k,n,mat);
          }
     if (!(i-1<0))
        if (mat[i-1][j]==-1)
        {
            mat[i-1][j]=k;
            findObject(i-1,j,k,n,mat);
        }
}

 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Broj grupa jedinica u matrici

[ Pregleda: 3073 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.