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

[Zadatak] Eliminisanje elemenata niza koji se ponavljaju, brojac ponavljanja, ...

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Eliminisanje elemenata niza koji se ponavljaju, brojac ponavljanja, ...

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

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

b.danijel
danijel blagojević
student
kostolac

Član broj: 200673
Poruke: 2
93.86.125.*



Profil

icon [Zadatak] Eliminisanje elemenata niza koji se ponavljaju, brojac ponavljanja, ...11.11.2008. u 21:35 - pre 187 meseci
Ovako glasi zadatak:
Napisati C program koji na osnovu celebrojnog niza X od n elemenata (n<61) formira nizove Z i Y.Niz Y predstavlja sazeti niz X(izbaceni su ponovljeni elementi iz niza X),a niz Z sadrzi broj pojavljivanja redom elemenata formiranog niza Y u nizu X.

Primer kako program treba da radi:
X=(3,-4,8,-6,-3,0,5,3,9,5,5,4,-4)
Y=(3,-4,8,-6,-3,0,5,9,4)
Z=(2,2,1,1,1,1,3,1,1)

Ovo sam ja uradio:
Code:

#include <stdio.h>
#define MAX_NIZ 61

main()
{
    /*Definicija promenljivih*/
    int k,n,j,i,x[MAX_NIZ],y[MAX_NIZ],z[MAX_NIZ];

    /*Inicijalizacija niza*/
    for(i=0;i<MAX_NIZ;i++) x[i]=y[i]=z[i]=0;

    printf("Program za sortiranje niza");

    do{
        printf("\n Broj elemenata niza\n");
        scanf("%d",&n);
    }while(n<=0||n>MAX_NIZ);

    printf("Unesite el.X niza\n");

    for(i=0;i<n;i++){
    scanf("%d",&x[i]);}



    for(j=0,i=0;i<n;i++){

        if(i==0)y[j]=x[i];

        else{for(k=1;k<=i;k++)

    if(x[i]==x[i-k])j++;
    else y[j]=x[i];j++;}


    }

        for(i=0;i<n;i++)
        printf("%d",y[i]);



}



Unapred zahvalan na bilo kom savetu!



[Ovu poruku je menjao X Files dana 11.11.2008. u 23:12 GMT+1]
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.dynamic.sbb.rs.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: [Zadatak] Eliminisanje elemenata niza koji se ponavljaju, brojac ponavljanja, ...11.11.2008. u 22:53 - pre 187 meseci
Danijele, probaj ovaj kod /netestirano/. Ostavio sam i neke komentare, pa pitaj sta nije jasno. Pre svega proveri kod, mozda sam negde omasio pa da popravimo.

Code:

/* ukljucuje se podrska za funkcije: printf(), scanf(), ... */
#include <stdio.h>

/* ukljucuje se podrska za funkciju: system() da se simuira Press any key... */
#include <stdlib.h>

/* predprocesorska definicija za maxvelicinu niza */
#define MAX_NIZ 61

/* glavna funkcija... int stoji ispred main jer je to po najnovijem standardu, sa void kao argumentom */
int main(void)
{
    /* definicije:
        x - ceo niz
        y - sazeti niz (bez ponavljanja elemenata)
        z - broj pojavljivanja elementa u sazetom nizu
        n - broj elemenata niza
        i - brojac
        k - trenutni broj elemenata sazetog niza
        j - brojac
        upisan - da li je trenutni elementi niza X vec upisan u niz Y
    */
    int x[MAX_NIZ], y[MAX_NIZ], z[MAX_NIZ], n, i, k, j, upisan;

    /* upisi broj elemenata niza X i ne dozvoli vrednosti van opsega*/
    do
    {
        printf( "Upisite broj elemenata niza:" );
        scanf( "%d", &n );
    } while( n<=0 || n>MAX_NIZ );

    /* prelazak u novi red */
    printf( "\n");

    /* upis redom elemenata niza X */
    for( i=0; i<n; i++ )
    {
        printf( "Upisite element niza, X[%d]=", i );
        scanf( "%d", &x[i] );
    }

    /* Inicijalizacija na nulu, trenutni broj elemenata niza Y */
    k=0;

    /* petlja koja prolazi kroz sve elemente niza X */
    for ( i=0; i<n; i++ )
    {
        /* upisan postavljamo na nulu
            ...a on je indikator koji ce pokazati da li je trenutni element niza X vec u nizu Y
            0 - nema ga u nizu Y
            1 - vec je u nizu Y
        */
        upisan=0;
        /* unutrasnja petlja (unutar "i" petlje) koja prolazi kroz sve elemente niza Y */
        for ( j=0; j<k; j++ )
        {
            /* da li je trenutni element niza X vec u nizu Y */
            if ( x[i] == y[j] )
            {
               /* jeste, zato postavi indikator na jedinicu */
               upisan=1;
               /* istovremeno uvecaj za jedan brojac pojavljivanja u nizu Z */
               ++z[j];
               /* izadji odmah iz petlje "j", jer nema svrhe dalje traziti */
               break;
            }
        }

        /* ako nije upisan */
        if ( upisan == 0 )
        {
            /* pocetni broj pojavljivanja je naravno jedan, sto upisujemo u niz Z */
            z[k]=1;
            /* belezimo inicijalnu pojavu u niz Y */
            y[k] = x[i];
            /* uvecavamo broj elemenata niza Y za jedan */
            ++k;
        }
    }

    /* ispisujemo niz X */
    printf( "\n\nX=(" );
    for ( i=0; i<n-1; i++ )
        printf( "%d,", x[i] );
    printf( "%d)", x[n-1] );

    /* ispisujemo niz Y */
    printf( "\n\nY=(" );
    for ( i=0; i<k-1; i++ )
        printf( "%d,", y[i] );
    printf( "%d)", y[k-1] );

    /* ispisujemo niz Z */
    printf( "\n\nZ=(" );
    for ( i=0; i<k-1; i++ )
        printf( "%d,", z[i] );
    printf( "%d)", z[k-1] );

    /* prelazak u novi red */
    printf( "\n" );

    /* Ovo nam sluzi kod konzolnih programa da vidimo rezuluate
       pre nego sto program izadje iz konzole nakon zavrsetka */
    system( "PAUSE" );
}




[Ovu poruku je menjao X Files dana 14.11.2008. u 09:34 GMT+1]
 
Odgovor na temu

Eurora3D Team
Nebojsa - Programer & Vodja tima
Beograd

Član broj: 120376
Poruke: 900
*.dynamic.sbb.rs.



+7 Profil

icon Re: [Zadatak] Eliminisanje elemenata niza koji se ponavljaju, brojac ponavljanja, ...18.11.2008. u 01:40 - pre 187 meseci
Moze i ovako , da se unos brojeva i provera rade u istoj petlji. Inace princip je isti kao u kodu koji je napisao X Files
Program je testiran i radi dobro ...
Code:

#include <stdio.h>
#include <stdlib.h>
#define MAX_NIZ 61

int main()
{
    int X[MAX_NIZ], Y[MAX_NIZ], Z[MAX_NIZ], No = 0 , i , ii ,yMax = 0 , ex;

    printf("Program za sortiranje niza\n");

    do
    {
        printf("Broj elemenata niza ? ");
        scanf("%d",&No);
    }
    while(No <= 0 || No > MAX_NIZ);
    printf("\n");

    for( i = 0; i < No; i++ ) //
        Z[i] = 0;

    for( i = 0; i < No; i++ ) // upisujemo brojeve
    {
        printf( "Upisite element niza, X[%d]=", i );
        scanf( "%d", &X[i] );

        ii = 0;
        ex = 0;
        while(ii < yMax) // pretrazujemo niz Y da proverimo dali je trenutni broj vec upisan
        {
            if(Y[ii] == X[i]) // ako jeste povecavamo vrednost na toj poziciji u nizu za brojanje ponavljanja
            {
                Z[ii]++;
                ex = 1;
                break;
            }
            ii++;
        }
        if (!ex) // ako nije upisujemo ga na kraj niza Y i povecavamo index za sledeci element
        {
            Y[yMax] = X[i];
            Z[yMax] = 1;
            yMax++;
        }

    }

    // ispis
    printf( "Niz X : " );
    for ( i = 0; i < No; i++ )
        printf( "%d,", X[i] );
    printf( "\nNiz Y : " );
    for ( i = 0; i < yMax; i++ )
        printf( "%d,", Y[i] );
    printf( "\nNiz Z : " );
    for ( i = 0; i < yMax; i++ )
        printf( "%d,", Z[i] );
    printf("\n");

    system( "PAUSE" );
    return 0;
}

 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: [Zadatak] Eliminisanje elemenata niza koji se ponavljaju, brojac ponavljanja, ...

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

Postavi temu Odgovori

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