Advertisement
plyp

aisd poprawione

Nov 27th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <time.h>
  4. using namespace std;
  5. int Scal(int A[], int p, int q, int r);
  6. int SortujPrzezScalanie(int A[], int p, int r);
  7. int szukajPary (int *A, int l, int p, int szukana);
  8. int main() {
  9.     int n = 0, i = 0, szukana = 0, j = 0;
  10.     srand(time(NULL));
  11.     cout<<"Podaj ilosc elementow tablicy: ";
  12.     cin>>n;
  13.     int A[n] = {0};
  14.     cout<<"\nPrawda oznacza, że podana suma występuje, fałsz oznacza że podana suma nie występuje.";
  15.     cout<<"\nTablica przed posortowaniem: \n";
  16.    while(j < 5){
  17.        cout<<"Przebieg "<<j+1<<endl;
  18.     for(i = 0; i < n; i++){
  19.         A[i] = rand() % 100 + 1;
  20.         cout<<A[i]<<" ";
  21. }
  22.     SortujPrzezScalanie(A,0,n-1);
  23.     cout<<"\nTablica po posortowaniu: \n";
  24.     for(i=0; i<n; i++){
  25.         cout<<A[i]<<" ";
  26.     }
  27.     szukana = rand() % 250 + 1;
  28.     cout<<"\nSzukana suma to: "<<szukana;
  29.  
  30.     if(szukajPary(A,0,n-1, szukana))
  31.         cout<<"\nPRAWDA"<<endl;
  32.     else
  33.         cout<<"\nFAŁSZ"<<endl;
  34.     j++;
  35.  
  36. }
  37.     return 0;
  38. }
  39.  
  40.  
  41. int szukajPary (int *A, int l, int p, int szukana) {
  42.     while (l < p) {
  43.         if (A[l] + A[p] == szukana) {
  44.             cout<<"\nZmienne dajace ta sume znajduja się na pozycjach "<<l<<" ("<<A[l]<<") i, "<<p<<" ("<<A[p]<<")";
  45.             return 1;
  46.         }
  47.         else if (A[l] + A[p] < szukana)
  48.             l++;
  49.         else
  50.             p--;
  51.     }
  52.  
  53.     return 0;
  54. }
  55. int Scal(int A[], int p, int q, int r){
  56.     int n1, n2, i, j, k;
  57.     //n1 = rozmiar lewej tablicy
  58.     //n2 = rozmiar prawej tablicy
  59.     n1 = q - p + 1;
  60.     n2 = r - q;
  61.     int L[n1],R[n2];
  62.     //Inicjalizacja wartosci lewej tablicy
  63.     for(i = 0; i < n1; i++){
  64.         L[i]=A[p+i];
  65.     }
  66.     //Inicjalizacja wartosci prawej tablicy
  67.     for(j = 0; j<n2; j++){
  68.         R[j]=A[q+j+1];
  69.     }
  70.     i = 0, j = 0;
  71.     //Porownywanie i laczenie w nowa posortowana tablice
  72.     for(k=p; i < n1 && j < n2;k++){
  73.         if(L[i]<R[j])
  74.             A[k]=L[i++];
  75.         else
  76.             A[k]=R[j++];
  77.     }
  78.     //Jezeli prawa ma wiecej elementow niz lewa, pozostalosci lewej zostana wlozone do A[]
  79.     while(i<n1)
  80.         A[k++]=L[i++];
  81.     while(j<n2)
  82.         A[k++] = R[j++];
  83. }
  84. int SortujPrzezScalanie(int A[], int p, int r){
  85.     int q;
  86.     if(p<r){
  87.         q=(p+r)/2;
  88.         SortujPrzezScalanie(A,p,q);
  89.         SortujPrzezScalanie(A,q+1,r);
  90.         Scal(A,p,q,r);
  91.     }
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement