Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 5 odgovora
  • 2.975 pregleda

Najnovija ↓

Pomoc oko matrice 03.05.2006. u 17:23 · pre 249 meseci #1
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]);                
        
                }
}
Re: Pomoc oko matrice 03.05.2006. u 18:59 · pre 249 meseci #2
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.

Re: Pomoc oko matrice 03.05.2006. u 22:02 · pre 249 meseci #3
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.
Re: Pomoc oko matrice 04.05.2006. u 14:20 · pre 249 meseci
izmenjeno 1 put, poslednji put X Files 04.05.2006. u 14:28
  1. X Files04.05.2006. u 14:28zapis iz teksta poruke
#4
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...
Re: Pomoc oko matrice 04.05.2006. u 15:06 · pre 249 meseci #5
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]);        
                    }
                }
Re: Pomoc oko matrice 04.05.2006. u 15:44 · pre 249 meseci #6
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...
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme