Wyszukiwanie liniowe
Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Zarejestruj się!

Wyszukiwanie liniowe

AutorWiadomość
Temat założony przez niniejszego użytkownika
Wyszukiwanie liniowe
» 2019-05-16 12:55:23
Poniższy program rozpatruje tablicę liczb pseudolosowych. Najpierw generujemy liczby(następnie wyszukiwanie liniowe, sortowanie a następnie wyszukiwanie binarne). Proces przebiega poprawnie dla 10 elementów. Dla więcej "strajkuje" - ale to druga sprawa. Chciałbym wyszukać liczbę i choć liczba jest w tablicy np na miejscu 3 to program pokazuje, że na 11. Dlaczego tak się dzieje.
Pozdrawiam.
C/C++
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <cstdio>
#include <time.h>
#include <conio.h>
using namespace std;
int i, ile, liczba, temp;
int wyszlin( int tab[], int liczba );
int wyszbin( int tab[], int liczba );
int main()
{ int tab[ ile ], t, b, i, liczba;
    cout << "Podaj  ile liczb: " << endl; cin >> ile;
    srand( time( NULL ) ); cout << endl;
    cout << "\n\tZawartosc tablicy:\n"; cout << endl;
    for( i = 0; i < ile; i++ ) tab[ i ] = rand() % 100;
   
    for( i = 0; i < ile; i++ ) cout << setw( 5 ) << tab[ i ] << "\t"; getch();
    cout << endl;
    cout << "\nPodaj liczbe do szukania: ";
    cin >> liczba;
    cin.ignore();
    t = wyszlin( tab, liczba );
    if( t == - 1 )
    cout << "\n\tSzukana liczba jest poza tablica"; else
    cout << "\n\tSzukana liczba znajduje sie w tablicy na pozycji " << i + 1 << endl; getchar(); cout << endl;
    cout << "\nTablica przed sortowaniem:\n";
    for( int i = 0; i < ile; i++ ) cout << tab[ i ] << "\t"; cout << endl;
    for( int i = 0; i < ile - 1; i++ )
    for( int j = 0; j < ile - 1; j++ )
    if( tab[ j ] > tab[ j + 1 ] )
    { temp = tab[ j ]; tab[ j ] = tab[ j + 1 ]; tab[ j + 1 ] = temp; } cout << endl;
    cout << "\nTablica posortowana:\n";
    for( int i = 0; i < ile; i++ )
    cout << tab[ i ] << "\t"; cin.ignore(); cout << endl;
    cout << "\nPodaj liczbe do szukania: ";
    cin >> liczba; b = wyszbin( tab, liczba ); cin.ignore(); getch();
    return 0; }
int wyszlin( int tab[], int liczba ) // funkcja wyszukiw.liniowe
{ for( int i = 0; i < ile; i++ )
    if( liczba == tab[ i ] )
         return i;
   
    return - 1; }
int wyszbin( int tab[], int liczba )
{ int n = ile, l, p, s;
    l = 0; p = n - 1;
    while( true )
    { if( l > p ) { cout << "Nie odnaleziono szukanego elementu" << endl; break; }
        s =( l + p ) / 2;
        if( tab[ s ] == liczba ) { cout << "Odnaleziono liczbe " << liczba << " pod indeksem " << s + 1 << endl; break; }
        else if( tab[ s ] < liczba ) l = s + 1; else p = s - 1; }
    return 0; }
[ / s ][ / s ][ / i ]
P-174624
» 2019-05-16 16:20:27
C/C++
int tab[ ile ]
To nie jest poprawne.
» Kurs C++ » Poziom 2Tablice jednowymiarowe lekcja
P-174625
Temat założony przez niniejszego użytkownika
Odp
» 2019-05-16 23:41:41
Dalej klapa. Dzięki
P-174628
» 2019-05-17 17:55:24
A co zostało zrobione z powyższym błędem?
P-174631
Temat założony przez niniejszego użytkownika
» 2019-05-19 21:15:38
wywaliłem ile
P-174647
» 2019-05-19 22:38:25
Przekazywanie tablic jednowymiarowych do funkcji
C/C++
int wyszlin( int tab[], int liczba, int ile ) // funkcja wyszukiw.liniowe
{
    for( int i = 0; i < ile; i++ )
    {
        if( tab[ i ] == liczba )
        {
            return i + 1;
        }
    }
    return - 1;
}

zamiast "i+1" powinno być t
dlatego, że "i" przyjmuje wartość "ile <-- wielkość tablicy + 1"
C/C++
else
     cout << "\n\tSzukana liczba znajduje sie w tablicy na pozycji " << t << endl;


i jeszcze jedna uwaga, a raczej rada dotycząca formatowania kodu
jeżeli używasz code::blocks'a to zaznacz cały kod, kliknij prawym klawiszem myszy
i z menu wybierz Format use AStyle
P-174648
» 2019-05-19 23:48:18
wywaliłem ile
Zmienna ile jest globalnie inicjalizowana wartością 0 i taką wartością deklarujesz tablicę.
Nie korzystaj ze zmiennych globalnych bez wyraźnego powodu. To zły nawyk.
P-174650
« 1 »
 Strona 1 z 1