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

Pomoc oko matrice

[es] :: C/C++ programiranje :: Pomoc oko matrice

[ Pregleda: 2185 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mix5
Milos Djuric
STE, Asseco
Jagodina

Član broj: 14282
Poruke: 332
*.verat.net.



Profil

icon Pomoc oko matrice03.05.2006. u 16:23 - pre 218 meseci
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]);                
        
                }
}
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pomoc oko matrice03.05.2006. u 17:59 - pre 218 meseci
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.

 
Odgovor na temu

Mix5
Milos Djuric
STE, Asseco
Jagodina

Član broj: 14282
Poruke: 332
*.verat.net.



Profil

icon Re: Pomoc oko matrice03.05.2006. u 21:02 - pre 218 meseci
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.
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pomoc oko matrice04.05.2006. u 13:20 - pre 218 meseci
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]
 
Odgovor na temu

Mix5
Milos Djuric
STE, Asseco
Jagodina

Član broj: 14282
Poruke: 332
*.vdial.verat.net.



Profil

icon Re: Pomoc oko matrice04.05.2006. u 14:06 - pre 218 meseci
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]);        
                    }
                }
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.nat-pool.po.sbb.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pomoc oko matrice04.05.2006. u 14:44 - pre 218 meseci
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...
 
Odgovor na temu

[es] :: C/C++ programiranje :: Pomoc oko matrice

[ Pregleda: 2185 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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