Zliczanie powtarzajacych sie liczb w obu tablicach

0

czesc,
zdaje sobie sprawe, ze cos tu bardzo jest nie tak, ale wrzucam to co do tej pory wykombinowalem... wiem jak wyszukac dana liczbe w 1 tablicy, ale nie wiem jak zrobic to na 2, bez zastosowania 2 petli for, tylko uzywajac funkcji "search"

te 2 tablice maja w sobie liczby naturalne i na kazdej tablicy nie ma powtarzajacych sie liczb

#include<iostream>
using namespace std;


    int search (int array[] , int max , int searchvalue)
    
    {
    int low = 0 ;
    int high = max - 1 ; 
    int mid ; 
    while (low <= high)
    {
        mid = (low+high)/2 ; 
        if (searchvalue = array [mid])
        
        {
            return mid ; 
        }
        else if (searchvalue > array [mid])
        {
            low = mid + 1 ; 
        }
        else {
            high = mid -1 ; 
        }
    }
    return -1
    }
    
    
    
    int main (int a[] , int max ,  int b[])
    
    { int result = search (a , max , b)
    
    int y = 0 ;
    if (result >=0)
    {y++;}
    cout <<y; } 
0

Ten program nie ma prawa się skompilować. Używasz niezadeklarowanej zmiennej max.

0

chcialbym zeby program zliczal powtarzajace sie liczby w pierwszej i drugiej tabeli.

w obu tabelach liczby nie powtarzaja sie. tj -> moze byc [1,2,3,4] w tabeli 1 i [2,3,4,5,6] w tabeli 2, ale NIE moze byc : [1,1,2,3]. :D

1
#include <iostream>
#include <array>
#include <algorithm>
using namespace std;

int main() {
   array<int, 4> arr1{ 1,2,3,4 };
   array<int, 5> arr2{ 2,3,4,5,6 };
   for (auto const& el : arr1) {
      if (find(arr2.cbegin(), arr2.cend(), el) != arr2.cend()) {
         cout << el << ' ';
      }
   }
} 

https://wandbox.org/permlink/o80aAzmes9KV6t7l

0

max mial byc dlugoscia tabeli a

0

... a długość tablicy b? Nie ma jak jej wyliczyć w funkcji, więc nie można upilnować out_of_range.

1
bool isFind(int arr[], int size, int searchValue) {
   for (int i = 0; i < size; ++i) {
      if (arr[i] == searchValue) {
         return true;
      }
   }
   return false;
}

int main(){
   const int size1 = 4;
   const int size2 = 5;
   int arr1[size1]{ 1,2,3,4 };
   int arr2[size2]{ 2,3,4,5,6 };
   for (int i = 0; i < size1; ++i) {
      if (isFind(arr2, size2, arr1[i])) {
         cout << arr1[i] << ' ';
      }
   }
   return 0;
} 
0

hm, no tak, nie wprowadzilem dlugosci tablicy b... tylko troche nie wiem w ktorym miejscu nalezaloby to zrobic, zeby dzialalo to w ten sposob jak opisalem w pw...

0

Przecież chodzi Ci o przecięcie (czyli część wspólną) zbioru. Dlaczego tego nie napisać?

#include <iostream>
#include <algorithm>
#include <array>
#include <iterator>

int main() {
    std::array<int, 4> arr1{ 1,2,3,4 };
    std::array<int, 5> arr2{ 2,3,4,5,6 };
    std::set_intersection(arr1.cbegin(), arr1.cend(),
        arr2.cbegin(), arr2.cend(), std::ostream_iterator<int>(std::cout, " "));
}

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