[ mixerowsky @ 06.05.2010. 23:21 ] @
Potrebna mi je pomoć oko sledećeg zadatka:

Na programskom jeziku C napisati program kojim se na osnovu skupova A i B,
formiraju skupovi C=(A∪B) i D=(A\B), pri čemu su A i B celobrojni skupovi,
dimenzija N i M, respektivno. Štampati skupove A, B,C i D.

Sad i nije problem učitavanje elemenata skupa A i skupa B, već je problem zbog operacije nad njima (C=(A∪B) i D=(A\B)), nisam nikad radio ovakve vrste problema
tako da nisam nešto upućen i svaka pomoć je dobro došla...
[ Mihajlo Cvetanović @ 07.05.2010. 09:27 ] @
Kako si u programu organizovao skupove? Jesu li to nizovi?

Kod operacije unije treba da napraviš novi skup u kome su iskopirani svi elementi iz početna dva skupa, ali bez ponavljanja. E ovo "bez ponavljanja" je kvaka. Kad iskopiraš elemente prvog skupa onda je sve okej, ali kad kreneš sa kopiranjem elemenata iz drugog skupa onda za svaki od njih moraš da proveriš da li se već nalazi u nizu. E sad, ako već imaš funkciju za dodavanje elementa u skup koja vodi računa o dupliranju onda nemaš problem, treba samo da koristiš tu funkciju.

Kod operacije oduzimanja treba da napraviš novi skup u kome su iskopirani svi elementi iz prvog skupa kojih nema u drugom skupu. To radiš tako što za svaki element iz prvog skupa proveravaš da li se nalazi u drugom skupu. Ako se ne nalazi onda ga ubacuješ u rezultirajući skup.
[ mixerowsky @ 07.05.2010. 16:19 ] @
Ovako, napisao sam program onako iz glave ali postoji greška negde, kao da se javlja neka beskonačna petlja, evo koda pa ako imate ideju gde je moguća greška javite...inače ću morati da radim Debug....da Mihajlo, organizovani su u nizovima...

Code:
#include <stdio.h>
int main()
{
    int i,j,n,m,A[20],B[20];
    int C[40],D[20],l,k,h;
    printf("Unesite broj clanova skupa A: ");
    scanf("%d",&n);
    printf("\nUnesite broj clanova skupa B: ");
    scanf("%d",&m);
    printf("\nUnesite clanove skupa A: ");
    for(i=0;i<n;i++)
        scanf("%d",&A[i]);
    printf("\nUnesite clanove skupa B: ");
    for(i=0;i<m;i++)
        scanf("%d",&B[i]);
    l=0;
    k=0;
    for(i=0;i<n;i++)
    {
        h=0;
        for(j=0;j<m;j++)
            if(A[i]==B[j])
                h=1;
        {
            if(h==0)
                C[l]=A[i];
                l++;
                D[k]=A[i];
                k++;
        }//if
    }//for
    printf("\nUnija skupova A i B je: ");
    for(i=0;i<l;l++)
        printf("%d ",C[i]);
    for(i=0;i<n;i++)
        printf("%d ",A[i]);
    printf("\nSkup A bez skupa B je: ");
    for(i=0;i<k;i++)
        printf("%d ",D[i]);
}//main
[ Mihajlo Cvetanović @ 07.05.2010. 16:38 ] @
Kažeš da ćeš morati da radiš debug kao da je to nešto loše. Ja obožavam da debagujem :-). Probaj da zameniš mesta ovim dvema linijama:

Code:

        {
            if(h==0)


Trenutno skupovi C i D uvek sadrže istovetne elemente, i to, ovako odoka, rezultat razlike skupova (što treba da bude D). Moraćeš za C da smisliš nešto drugo. To drugo verovatno treba da bude u drugoj dvostrukoj petlji.
[ Tiristor @ 20.05.2010. 14:56 ] @
Je li resen problem ili treba pomoc?