[ titl @ 29.12.2007. 14:11 ] @
Dobili smo zadatak na faxu da za domaci da definisemo refleksivnost, simetricnost, antisimetricnost i tranzitivnost funkcija. Navodno ce to da se ocenjuje posle praznika. Da li za to koristiti 2 niza ili 1, kako to na najlaksi nacin uraditi?
[ xeron @ 30.12.2007. 12:17 ] @
Potrebna ti je matrica tj. 2d niz.

Relacija je simetricna ako za svaki element važi da je u relaciji sa samim sobom.
Relacija je refleksivna ako za elemente i i j važi da ako je i u relaciji sa j onda je i j u relaciji sa i.
Relacija je tranzitivna ako za elemente i, j i k vazi da ako su elementi i i j u relaciji, i ako su elementi j i k u relaciji da su onda i elementi i i k u.

Code:

//Funkcija koja ispituje refleksivnost relacije:
//Funkcija provjerava elemente na glavnoj dijagonali i ako pronađe
//element koji nije u relaciji sam sa sobom vraca 0 sto znaci da nije refleksivna.
//U suprotnom vraća 1 što znači da je refleksivna
int refleksivna(int **matrica, int n)
{
    int i;
    for(i=0; i<n; i++)
        if(!matrica[i][i])
            return 0;
    return 1;
}

//Funkcija koja ispituje simetričnost relacije:
//Prolazi se kroz sve elemente ispod glavne dijagonale i provjerava
//da li su oni u istoj relaciji kao njima simetricni elementi.
//Ako nadje odgovarajuci par za koji relacija simetricnosti ne
//vazi, funkcija vraca 0.

int simetricna(int **matrica, int n)
{
    int i,j;
    for(i=1; i<n; i++)
        for(j=0; j<i; j++)
             if(matrica[i][j]!=matrica[j][i])
                 return 0;
            return 1;
}