[ Mix5 @ 03.05.2006. 16:23 ] @
Program treba da računa broj pojavljivanja vrednosti elemenata u matrici tipa int. Za svaku vrednost koja se
pojavljuje u matrici, broj pojavljivanja se ispisuje samo jednom.

Meni tu nesto ne radi kako treba


Code:
#include<stdio.h>
#define MAX_BR_EL   10
#define MAX_BR_EL2  100
typedef int Matrica[MAX_BR_EL][MAX_BR_EL];
typedef int Niz[MAX_BR_EL2];

main(){
       
       Matrica a;
       int nk,nv,ik,iv,br,brx,ikr,i;
       Niz el,x;
       
       while(1){
                printf("Unesite broj elemenata kolone matrice: ");
                scanf("%d", &nk);
                if (nk>MAX_BR_EL){
                                  printf("Greska\n");
                                  continue;
                                  } 
                if (nk<0) break;       
                
                printf("Unesite broj elemenata vrste matrice: ");
                scanf("%d", &nv);
                if (nv>MAX_BR_EL){
                                  printf("Greska\n");
                                  continue;
                                  }
                if (nv<0) break;
                                
                for (iv=0;iv<nv;iv++){
                    for (ik=0;ik<nk;ik++){
                        printf("Unesite %d,%d element matrice: ",iv,ik);
                        scanf("%d",&a[iv][ik]);
                        }
                    }
                    
                i=0;
                    
                for (iv=0;iv<nv;iv++){
                    for (ik=0;ik<nk;ik++){
                        brx=0;
                        br=0;
                        br=a[iv][ik];
                        for (iv=0;iv<nv;iv++){
                            for (ik=0;ik<nk;ik++){
                                if (a[iv][ik]==br) brx++;
                                }
                            }
                        el[i]=br;
                        x[i]=brx;
                        i++;
                        }
                    }
                   
                ikr=i;
                   
                for(i=0;i<ikr;i++) printf("%d\t x%d\n", el[i], x[i]);                
        
                }
}
[ X Files @ 03.05.2006. 17:59 ] @
Letimicnim pogledom (bez analize ostalog dela koda), video sam da si u cetvorostrukoj
unutrasnjoj petlji, za druge dve upotrebio kao promenljive za petlju, alfanumerike koje si
vec iskoristio za prve dve petlje:

Code:
 
// ...
for (iv=0;iv<nv;iv++){
     for (ik=0;ik<nk;ik++){
         brx=0;
         br=0;
         br=a[iv][ik];
         for (iv=0;iv<nv;iv++){ // <--- iv vec postoji u prvoj petlji
             for (ik=0;ik<nk;ik++){ // <--- ik vec postoji u drugoj petlji
 // ...


... pa treba da uvedes nove promenljive, npr iv2 i ik2.

[ Mix5 @ 03.05.2006. 21:02 ] @
Code:
#include<stdio.h>
#define MAX_BR_EL   10
#define MAX_BR_EL2  100
typedef int Matrica[MAX_BR_EL][MAX_BR_EL];
typedef int Niz[MAX_BR_EL2];

main(){
       
       Matrica a;
       int nk,nv,ik,iv,br,brx,ikr,i,iv2,ik2,i2,p,ne;
       Niz el,x;
       
       while(1){
                printf("Unesite broj elemenata kolone matrice: ");
                scanf("%d", &nk);
                if (nk>MAX_BR_EL){
                                  printf("Greska\n");
                                  continue;
                                  } 
                if (nk<0) break;       
                
                printf("Unesite broj elemenata vrste matrice: ");
                scanf("%d", &nv);
                if (nv>MAX_BR_EL){
                                  printf("Greska\n");
                                  continue;
                                  }
                if (nv<0) break;
                                
                for (iv=0;iv<nv;iv++){
                    for (ik=0;ik<nk;ik++){
                        printf("Unesite %d,%d element matrice: ",iv,ik);
                        scanf("%d",&a[iv][ik]);
                        }
                    }
                    
                i=0;
                    
                for (iv=0;iv<nv;iv++){
                    for (ik=0;ik<nk;ik++){
                        brx=0;
                        br=0;
                        br=a[iv][ik];
                        for (iv2=0;iv2<nv;iv2++){
                            for (ik2=0;ik2<nk;ik2++){
                                if (a[iv2][ik2]==br) brx++;
                                }
                            }
                        el[i]=br;
                        x[i]=brx;
                        i++;
                        }
                    }
                   
                ikr=i;
                   
                for (i=0;i<ikr;i++) printf("%d\t x%d\n", el[i], x[i]);                
                }
}


Samo ne znam kako da resim da se isti elementi ne ispisuju vise puta vec samo jedanput.
[ X Files @ 04.05.2006. 13:20 ] @
Citat:

Samo ne znam kako da resim da se isti elementi ne ispisuju vise puta vec samo jedanput.


Generalno, treba ti jos jedna petlja koja ce proveriti da li je TRENUTNO izabrana vrednost
u matrici, vec zabelezena u nizu koji punis, tj. u nizu el[].


Dakle, netestirano:

Code:

/* dodaj dve nove promenljive*/
int nova_petlja, da_li_je_vec_bilo;

/* ... */

/* ovo bi trebalo da je tacnije nego sto si ti stavio, dakle 1 umesto 0*/
if ( nk < 1 ) break;

/* ... */

/* ovo bi trebalo da je tacnije nego sto si ti stavio, dakle 1 umesto 0*/
if ( nv < 1 ) break;

/* ... */


/* i ovo bi trebala da bude ona cetvorostruka petlja, smo malo modifikovana */

i=0;
for ( iv=0; iv<nv; iv++ )
{
    for ( ik=0; ik<nk; ik++ )
    {
        brx=0;
        br=0;
        br=a[iv][ik];

        /* ovo bi trebalo da se doda, valjda */

        da_li_je_vec_bilo = 0;
        for ( nova_petlja=0; nova_petlja<i; nova_petlja++ )
        {
           if ( el[nova_petlja] == br )
           {
               da_li_je_vec_bilo = 1;
               break;
           }
        }

        /* i ovo bi trebalo da se doda */

        if ( da_li_je_vec_bilo == 0 )
        {
            for (iv2=0;iv2<nv;iv2++)
            {
                for ( ik2=0; ik2<nk; ik2++ )
                {
                    if ( a[iv2][ik2] == br )
                        brx++;
                }
            }

            el[i]=br;
            x[i]=brx;
            i++;
        }
    }
}

ikr=i;

/* ... */



Probaj pa javi...

[Ovu poruku je menjao X Files dana 04.05.2006. u 14:28 GMT+1]
[ Mix5 @ 04.05.2006. 14:06 ] @
Probao sam ovo tvoje i nije htelo da radi ali sam nasao resenje.

Code:
for (i=0;i<ikr;i++){
                    p=0;
                    for (i2=0;i2<i;i2++){
                        if (el[i]==el[i2]) p++;
                        }
                    if (p<1) printf("%d\t x%d\n", el[i], x[i]);        
                    }
                }
[ X Files @ 04.05.2006. 14:44 ] @
Ako radi, onda odlicno. Evo sad sam ja kompajlirao i moj kod i cini mi se da radi:

Code:


#include<stdio.h>
#define MAX_BR_EL   10
#define MAX_BR_EL2  100
typedef int Matrica[MAX_BR_EL][MAX_BR_EL];
typedef int Niz[MAX_BR_EL2];

int main( int argc, char* argv[] )
{
    Matrica a;
    int nk, nv, ik, iv, br, brx, ikr, i, iv2, ik2, i2, p, ne, nova_petlja, da_li_je_vec_bilo;
    Niz el, x;

    while ( 1 )
    {
        printf( "Unesite broj elemenata kolone matrice: " );
        scanf( "%d", &nk );
        if ( nk > MAX_BR_EL )
        {
            printf( "Greska\n" );
            continue;
        }

        if ( nk < 1 ) break; // <--- OVDE SAM STAVIO 1 UMESTO 0

        printf( "Unesite broj elemenata vrste matrice: " );
        scanf( "%d", &nv );

        if ( nv > MAX_BR_EL )
        {
            printf( "Greska\n" );
            continue;
        }

        if ( nv < 1 ) // <--- OVDE SAM STAVIO 1 UMESTO 0
            break;

        for ( iv=0; iv<nv; iv++ )
        {
            for ( ik=0; ik<nk; ik++ )
            {
                printf( "Unesite %d,%d element matrice: ", iv, ik );
                scanf( "%d", &a[iv][ik] );
            }
        }


        i=0;
        for ( iv=0; iv<nv; iv++ )
        {
            for ( ik=0; ik<nk; ik++ )
            {
                brx=0;
                br=0;
                br=a[iv][ik];

                da_li_je_vec_bilo = 0;
                for ( nova_petlja=0; nova_petlja<i; nova_petlja++ )
                {
                   if ( el[nova_petlja] == br )
                   {
                       da_li_je_vec_bilo = 1;
                       break;
                   }
                }

                if ( da_li_je_vec_bilo == 0 )
                {
                    for (iv2=0;iv2<nv;iv2++)
                    {
                        for ( ik2=0; ik2<nk; ik2++ )
                        {
                            if ( a[iv2][ik2] == br )
                                brx++;
                        }
                    }

                    el[i]=br;
                    x[i]=brx;
                    i++;
                }
            }
        }

        ikr=i;

        for ( i=0; i<ikr; i++ )
            printf( "%d\t x%d\n", el[i], x[i] );
    }

    return 0;
}


U svakom slucaju, odlicno...