jedreksmith 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. #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 ) { 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 ] |
|
pekfos |
» 2019-05-16 16:20:27 |
|
jedreksmith Temat założony przez niniejszego użytkownika |
Odp » 2019-05-16 23:41:41 Dalej klapa. Dzięki |
|
YooSy |
» 2019-05-17 17:55:24 A co zostało zrobione z powyższym błędem?
|
|
jedreksmith Temat założony przez niniejszego użytkownika |
» 2019-05-19 21:15:38 wywaliłem ile |
|
nanoant20 |
» 2019-05-19 22:38:25 Przekazywanie tablic jednowymiarowych do funkcjiint wyszlin( int tab[], int liczba, int ile ) { for( int i = 0; i < ile; i++ ) { if( tab[ i ] == liczba ) { return i + 1; } } return - 1; }
zamiast " i+1" powinno być tdlatego, że " i" przyjmuje wartość " ile <-- wielkość tablicy + 1" 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 |
|
YooSy |
» 2019-05-19 23:48:18 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. |
|
jedreksmith Temat założony przez niniejszego użytkownika |
» 2024-08-01 21:40:33 Co jest nie tak z kodem:
#include <iostream>
using namespace std;
class poczta { public: string nadawca, odbiorca, temat, tresc; void wczytaj( ); void wypisz( ); };
void wypisz (poczta p) { cout<<"Nadawca : "<<p.nadawca<< endl; cout<<" odbiorca : "<< p.odbiorca<<endl; cout <<"temat : "<<p.temat<<endl; cout<<"tresc : "<<p.tresc<<endl; }
void wczytaj (poczta &p ) { cout<<"Podaj nadawce: "; cin>>p.nadawca; cout<<"Podaj odbiorce: "; cin>>p.odbiorca; cin.ignore(); cout<<"Podaj temat: "; getline(cin, p.temat); cout<<"Podaj tresc: "; getline (cin, p.tresc); }
int main() { poczta p1; p1.wczytaj( ); p1.wypisz( ) ;
return 0; } |
|
« 1 » 2 |