Bład w kodzie poszukiwania sumy rozłacznej dwoch tablic

0

Witam wszytkich,

Dopiero zaczynam uczyc sie programowowac i mam problem z algorytmem, ktory ma znaleźć sumę rozłacznej dwoch tablic posortowanych rosnaco. Mianowicie do dyspozycji mam dwie tablice A[1,2,3,5,8] i B[0,1,3,4,8,9,10]. Algorytm ten ma znaleźć liczby ktore nie sa wspolne dla obou tablic to bedzie [0,2,4,5,9,10]. Ponieżej przeslylam moj kod ktory posiada bledy jesli chodzi o znalezienie sumy rozlącznej. Za wszelka pomoc w poprawieniu bledu kodu z gory dziekuje.

Moj program wyglada tak

#include <stdio.h>
#include <conio.h>

int main()

{ // definiowanie zmiennych

  int M,N,i,j,z,g,c,k,s;
  int a[M];
  int b[N];
  int *wsk1;
  int *wsk2;

  // podawanie liczy elementow w zbiorach A i B
  
  printf("podaj ilosc elementow zioru A " );
  scanf("%d",&M);
  printf("podaj ilosc elementow zioru B " );
  scanf("%d",&N);
 
  printf("\n"); 
       
 if(M==0&&N==0)
 
 printf("brak rozwiazania");
 
 else
 {

 // wypelnianie zbioru A elementami
    
    for(i=0;i<M;i++)
               {             
                    printf("podaj element zioru A a[%d] ",i );
                    scanf("%d",&a[i]);
               }
                    
 //sortowanie elemnetow zbioru A

for(i=0;i<M;i++) 
    for(j=i+1;j<M;j++) 
        if(a[i]>a[j]) 
        { 
            z=a[i]; 
            a[i]=a[j]; 
            a[j]=z; 
        } 
//wyświetlenie wyniku sortowania elementow w zbiorze A
               
             for(i=0;i<M;i++) 
                {
                 printf("%d ",a[i]);
                }
//przejscie do kolejnej lini

printf("\n");
    
// wypelnianie zbioru B elementami
   
    for(i=0;i<N;i++)
                {             
                    printf("podaj element zioru B b[%d] ",i );
                    scanf("%d",&b[i]);
                }
                    

//sortowanie elemnetow zbioru B

for(i=0;i<N;i++) 
    for(j=i+1;j<N;j++) 
        if(b[i]>b[j]) 
        { 
            z=b[i]; 
            b[i]=b[j]; 
            b[j]=z; 
        } 
//wyświetlenie wyniku sortowania elementow w zbiorze B
               
               for(i=0;i<N;i++) 
                {
                 printf("%d ",b[i]);
                }
// szukanie sumy rozłacznej zbioru A i B          
                printf("\n" "suma rozlaczna");

                            wsk1=&a[0];
                            wsk2=&b[0];

                        for(i=0;i<M;i++)
                        {
                               if(*wsk1>*wsk2)

                            {
                              printf(" %d ", *wsk2);  
                                wsk2++;
                            }
                              else  
                              
                              {
                               printf(" %d ", *wsk1);
                               wsk1++;
                              }
                              if(*wsk1==*wsk2)
                              {
                              wsk1++;
                              wsk2++;

                              }
                              
                         }    
                      
                          

}

  getch();
  return 0;

}

0

Dla każdej tablicy z osobna zastosuj sortowanie liniowe. Tj. sprawdzasz poprzedni element z następnym, jeśli następny jest mniejszy to zmieniasz je miejscami (funkcja swap np.). Kiedy masz posortowane obie tablice rosnąco, ustawiasz sobie szukana na 1. W 2 pętlach sprawdzasz czy dana szukana sie w nich znajduje, jesli znajduje sie w obu, to nie jest rozlaczna i zwiekszasz ja. Kiedy jest ona w tablicy 1, a nie ma jej w 2 (lub na odwrót), do wrzucasz ja do tablicy trzeciej, w której zbierasz te rozlaczne elementy.
Na końcu, wyświetlasz sobie tablice i sumujesz wartości jej elementów.
Sorki, że nie poprawiłem kodu, ale zmęczony jestem :P. Wieczorem postaram sie na to popatrzeć na spokojnie, o ile będzie Ci jeszcze potrzebna pomoc.

Btw. Używaj Code::Blocksa

0

Hmmm, a czemu niby sortowanie bąblem? Nie lepiej użyć qsorta lub std::sort? Ogólnie to chyba najlepszym wyjściem było by użycie std::set.

@mylo366 - nie używaj conio.h bo to relikt z epoki dinozaurów
@allocer - a czemu akurat Code::Blocks? Ja np. proponuję Eclipse CDT, którego podpowiadanie składni nie ma sobie równych (o ile nie liczymy IntelliSense), albo VS C++ 2008 EE.

0
winerfresh napisał(a)

@allocer - a czemu akurat Code::Blocks? Ja np. proponuję Eclipse CDT, którego podpowiadanie składni nie ma sobie równych (o ile nie liczymy IntelliSense), albo VS C++ 2008 EE.

Wszystko prócz deva :P.

0

Nigdzie nie napisał, że używa Dev'a.

0

Strzelam po: "Dopiero zaczynam uczyc sie programowowac" i

include <conio.h>

1 użytkowników online, w tym zalogowanych: 0, gości: 1