• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

przeglądanie tablic

Object Storage Arubacloud
0 głosów
208 wizyt
pytanie zadane 23 stycznia 2016 w C i C++ przez Kasia Nowicjusz (230 p.)
Witam :). Mam problem, muszę znaleźć te same elementy w dwóch tablicach. Zawierają one dzielniki dwóch innych liczb pobranych od użytkownika, wiec nie mogę porównywać ich za pomocą indeksów. Macie jakiś pomysł na rozwiązanie? Nie do końca umiem się posługiwać wskaźnikami, ale może to by było dobre rozwiązanie?? Z góry dziękuję za pomoc ;).

2 odpowiedzi

+1 głos
odpowiedź 23 stycznia 2016 przez niezalogowany
wybrane 24 stycznia 2016 przez Kasia
 
Najlepsza
To w niczym nie przeszkadza co się w nich znajduje, możesz posługiwać się indeksami
komentarz 23 stycznia 2016 przez Kasia Nowicjusz (230 p.)
ale biorąc po uwagę taki prosty przykład {1,2,3,6}; {1,3,9,27}; liczba 3 znajduje się na 3 miejscu w t1 i na 2 w t2, wiec nie zostanie "złapana" :/
komentarz 24 stycznia 2016 przez niezalogowany

A chodzi ci o to, tutaj możesz to rozwiązać na kilka sposobów:

Naiwnie, tzn podwójna pętla i przelecenie po wszystkich elementach

const int s1 = 4, s2 = 7;

int t1[s1] = { ... };
int t2[s2] = { ....};


for(int i=0; i< s1; i++)
{
  for(int j=0; j<s2; j++)
  {
    if(t1[i] == t[2])
    {
       // <- takie same elementy
    }
  }
}

Jeżeli wiesz że wartości są posortowane to możesz zrobić to nieco sprytniej przy wykorzystaniu algorytmów do wyszukiwania elementów. Zauważ też, że dużo bardziej się opłaca porównywać elementy mniejszej tablicy do elementów większej tablicy (wyjdzie ci mniej porównań)

komentarz 24 stycznia 2016 przez Kasia Nowicjusz (230 p.)
Super! Mam jeszcze tylko jedno pytanie, jeśli nie znam wielkości tablic, ale wiem, że będzie mniejsza od 100. To czy jest jakiś sposób by zatrzymać pętlę for, żeby nie przechodziła 1000 razy. Bo wyświetla mi dzielniki, ale potem wyrzuca 0 :(
komentarz 24 stycznia 2016 przez niezalogowany

Możesz tego dokonać na kilka sposobów: jeżeli użytkownik wprowadza te liczby przez jakiś czas (aż np wprowadzi wartość specjalną zatrzymującą wczytywanie), to możesz utworzyć zmienną i ją inkrementować przy każdym dodaniu nowej liczby, np

int size = 0;
int t[100];

while( size < 100 )
{
 int n;
 cin >> n;

 if( n == -1) // liczba specjalna, jej wystapienie powoduje przerwanie petli
    break;

  else
  {
    t[size] = n;
    size++;
  }
}

Ewentualnie możesz skorzystać ze sztuczki, któa raczej powinna zadziałać, czyli:

int t[100];
int size = (sizeof(t)/sizeof(*t));

 

komentarz 24 stycznia 2016 przez Kasia Nowicjusz (230 p.)
A z tą sztuczką, to w pętli mam porównywać  i<size ?
komentarz 24 stycznia 2016 przez niezalogowany
Aa nie sorry, ta sztuczka się nadaje gdy nie wiesz jakiego jest rozmiaru cała tablica, sry :P Bo alokujesz zawsze np. 100 elementów, więc zwróconym wynikiem będzie zawsze 100. Zapomnij o tym.

W twoim przypadku inkrementacja jest dobra
komentarz 24 stycznia 2016 przez Kasia Nowicjusz (230 p.)
okk, zaraz tak spróbuje ;)
0 głosów
odpowiedź 24 stycznia 2016 przez Adrian1999 Nałogowiec (34,570 p.)
dwie tablice więc zasymulujmy to

int tablica[3];

int tablica2[3];

for(int i=0; i<3;i++){ tablica[i]=i;} for(int i=3; i>3;i--){ tablica[i]=i;} stwórz sobie funkcje teraz która odłoży pierwszą cyfrę z tablicy, zapamięta indeks oczywiście tej liczby, i teraz niech pętlą przeszukuje drugą tablice, w poszukiwaniu tej liczby.. Gdy liczba zostanie odnalezniona, jej indeks należało by wrzucić do jakiegoś pojemnika by ta liczba się nie powtórzyła, też nie zapominajmny że liczby mogą być kilka razy te same, więc stwórzmy dwa vektory dla tablicy i tablicy2, i gdy się znajdzie taka liczba niech wrzuci do vektora jej indeks. ta daaaa.. Potem zrobić system na ifach by sprawdzał czy ten plik jest stworzony.. Oferuje stworzyć wężyka w SFML-u mi pomógł w zrozumieniu tego problemiku :D Mogę podesłać kod jeżeli chcesz przeanalizować, ale jest lekko zawiły

Podobne pytania

0 głosów
3 odpowiedzi 644 wizyt
0 głosów
2 odpowiedzi 729 wizyt
0 głosów
1 odpowiedź 452 wizyt
pytanie zadane 3 listopada 2015 w C i C++ przez p(sychi)atryk Obywatel (1,110 p.)

92,624 zapytań

141,478 odpowiedzi

319,822 komentarzy

62,005 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...