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

Wyszukiwanie binarne - czego mi tu brakuje ?

Object Storage Arubacloud
0 głosów
245 wizyt
pytanie zadane 23 stycznia 2016 w C i C++ przez VitGryfny Użytkownik (620 p.)

W tablicy n elementowej za pomoca algorytmu wyszukiwania binarnego wskazac na pozycje szuknej liczby.

Jak dla mnie wszystko super a jednak nie działa :)

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int n; //ilosc elementow w tablicy
int i; // licznik dla petli for rysujacej tablice
int no_arr; // wybarny numer ktorego pozycje chcemy poznac
int l; // lewy - pierwszy element talbicy od lewej
int p; // prawy - ostatni element tablicy
int s; // srodkowy - centralny element przedzialu

int main()
{
    srand(time(NULL));
    cout << "Ilu elementowa tablice chcesz stworzyc: " << endl;
    cin >> n;

    int tablica[n];

    cout << "Oto tablica wypelniona losowymi wartosciami posortowanymi rosnaco : " << endl;
    for(i=0;i<n;i++)
    {
        tablica[i]=rand()%10+(i*10);
    }

    for(i=0;i<n;i++)
    {
        cout << "|" << tablica[i] << "|";
    }
    cout << endl;
    l=0; // POCZATEK INSTRUKCJI WYSZUKIWANIA
    p=n-1;
    s=(l+p)/2;

    cout << tablica[l] << " wartosc pierwszego elementu tablicy" << endl;
    cout << tablica[s] << " wartosc centralnego elementu tablicy" <<endl;
    cout << tablica[p] << " wartosc ostatniego elementu tablicy" <<endl;
    cout << "Wprowadz numer: " << endl;
    cin >> no_arr;

    do
    {
    if(no_arr==tablica[s])
        {
            cout << "Element na pozycji " << s << endl;
            break;
        }
        else if (tablica[s]<no_arr)
        {
        l=s+1;
        s=(l+p)/2;
        }
        else
        {
        p=s-1;
        s=(l+p)/2;
        }
    } while (no_arr == tablica[s]);
    cout << "Element na pozycji " << s << endl;
    return 0;
}

Będę wdzięczny za wszelkie wskazówki.

Pozdrawiam,

Witek

4 odpowiedzi

0 głosów
odpowiedź 23 stycznia 2016 przez andrzej_bl Bywalec (2,390 p.)
wiersz 60

} while (no_arr == tablica[s]); // pętla ma się wykonywać gdy warunek JEST SPEŁNIONY czyli powinno być:

} while (no_arr != tablica[s]); // wykonujemy jeśli NIE RÓWNA SIĘ
0 głosów
odpowiedź 23 stycznia 2016 przez VitGryfny Użytkownik (620 p.)

Pokombinowałem trochę (podpatrzyłem gdzie indziej) i udało mi się to ruszyć jednak nie wiem teraz jak instrukcję if, ktorą umieściłem na samym końcu włączyć w 'główny moduł obliczeniowy'. :(

#include <iostream>
#include <cstdlib>
#include <time.h>

using namespace std;

int n; //ilosc elementow w tablicy
int i; // licznik dla petli for rysujacej tablice
int no_arr; // wybarny numer ktorego pozycje chcemy poznac
int l; // lewy - pierwszy element talbicy od lewej
int p; // prawy - ostatni element tablicy
int s; // srodkowy - centralny element przedzialu

int main()
{
    srand(time(NULL));
    cout << "Ilu elementowa tablice chcesz stworzyc: " << endl;
    cin >> n;

    int tablica[n];

    cout << "Oto tablica wypelniona losowymi wartosciami posortowanymi rosnaco : " << endl;
    for(i=0;i<n;i++)
    {
        tablica[i]=rand()%10+(i*10);
    }

    for(i=0;i<n;i++)
    {
        cout << "|" << tablica[i] << "|";
    }
    cout << endl;
    l=0; // POCZATEK INSTRUKCJI WYSZUKIWANIA
    p=n-1;
    s=(l+p)/2;

    cout << tablica[l] << " wartosc pierwszego elementu tablicy" << endl;
    cout << tablica[s] << " wartosc centralnego elementu tablicy" <<endl;
    cout << tablica[p] << " wartosc ostatniego elementu tablicy" <<endl;
    cout << "Wprowadz numer: " << endl;
    cin >> no_arr;

    while (l<=p)
    {
        s=(l+p)/2;

        if(no_arr==tablica[s])
            {
                cout << "Element " << no_arr << " znajduje sie na pozycji " << s+1 << endl;
                break;
            }
            else if (tablica[s]<no_arr)
            {
            l=s+1;
            }
            else
            {
            p=s-1;
            }
    }

    if (no_arr==tablica[s])
        {
            cout << "Brawo!"<< endl;
        }
        else
        {
            cout << "Nie znaleziono elementu w tablicy " << endl;
        }

    return 0;
}

 

0 głosów
odpowiedź 23 stycznia 2016 przez Sedi Stary wyjadacz (10,200 p.)
Chodzi Ci o szukanie konkretnego elementu ?

Najprościej możesz zrobić to tak, że posortujesz tablicę, wyznaczysz środkowy element i w zależności od tego, czy liczba jest większa, czy mniejsza, lecisz na lewo lub prawo od środka. Tyle.
0 głosów
odpowiedź 23 stycznia 2016 przez 0xf Dyskutant (8,180 p.)
Siema, widze juz jeden blad tablice dynamiczne(takie ktorej wielkosc okreslamy podczas dzialania programu) deklarujemy w ten sposob : int *tablica=new int[n]; odwolujesz sie do tego w petli za pomoca tablica[i] .

Popraw to poki co.

Pozdrawiam
komentarz 23 stycznia 2016 przez VitGryfny Użytkownik (620 p.)

Rozumiem, że w taki sposób mogę zdefiniować ją przed mainem.

Na etapie definiowania tej tablicy właśnie zastanawiałem się jak to zrobić :) Dzięki wielkie.

Podobne pytania

0 głosów
2 odpowiedzi 454 wizyt
0 głosów
1 odpowiedź 124 wizyt
pytanie zadane 23 października 2016 w C i C++ przez maste2 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 301 wizyt
pytanie zadane 10 czerwca 2016 w Java przez uczeń1998 Obywatel (1,930 p.)

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 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!

...