[c++] Losowanie liczb, wypisywanie oraz wybieranie największej i najmniejszej z nich
Ostatnio zmodyfikowano 2015-10-30 17:08
Euvarios Temat założony przez niniejszego użytkownika |
[c++] Losowanie liczb, wypisywanie oraz wybieranie największej i najmniejszej z nich » 2015-10-30 15:48:54 Witam ponownie, znów pojawił się problem w moim kodzie, ma on robić póki co następujące rzeczy: wylosowanie 10 niepowtarzających się liczb, wypisanie ich i wybranie z nich największej i najmniejszej. Kodzik napisałem jednak okazało się, że ma on problem z ostatnim zadaniem (wybraniem iMax i iMin), z kompilatora wynika, że jest to jakiś błąd z operatorem jednak nie mogę nic znaleźć. Poniżaj wklejam kod, prosiłbym o wyróżnienie błędu oraz ewentualne podanie możliwość naprawienia go. Z góry dziękuje... #include <iostream> #include <ctime> #include <cstdlib>
int losowanie() { return(( std::rand() % 100 ) + 1 ); }
bool sprawdzanie_powtarzalnosci( int tablica[], int wylosowane, int liczba_wylosowana ) { int i = 0; if( wylosowane == 0 ) return false; do { if( tablica[ i ] == liczba_wylosowana ) return true; i++; } while( i < wylosowane ); return false; }
void wypisanie( int tablica[] ) { int i; int x = 1; for( i = 0; i < 10; i++ ) { std::cout << x << " liczba: " << tablica[ i ] << std::endl; x++; } }
int iMax( int tablica[] ) { int i; int indeks1 = 0; int indeks2 = 1; for( i = 0; i < 9; i++ ) { if( tablica[ indeks1 ] > tablica[ indeks2 ] ) indeks2++; else { indeks1 = indeks2; indeks2++; } } if( tablica[ indeks1 ] > tablica[ indeks2 ] ) return tablica[ indeks1 ]; else return tablica[ indeks2 ]; }
int iMin( int tablica[] ) { int i; int indeks1 = 0; int indeks2 = 1; for( i = 0; i < 9; i++ ) { if( tablica[ indeks1 ] < tablica[ indeks2 ] ) indeks2++; else { indeks1 = indeks2; indeks2++; } } if( tablica[ indeks1 ] < tablica[ indeks2 ] ) return tablica[ indeks1 ]; else return tablica[ indeks2 ]; }
int main() { srand( time( NULL ) ); int tablica[ 10 ]; int wylosowane = 0; int liczba_tymczasowa; do { liczba_tymczasowa = losowanie(); if( sprawdzanie_powtarzalnosci( tablica, wylosowane, liczba_tymczasowa ) == false ) { tablica[ wylosowane ] = liczba_tymczasowa; wylosowane++; } } while( wylosowane < 10 ); wypisanie( tablica ); std::cout << "" << std::endl; std::cout < "Najwieksza liczba to: " << iMax( tablica ) << std::endl << std::endl; std::cout < "Najmniejsza liczba to: " << iMin( tablica ) << std::endl << std::endl; return 0; }
|
|
carlosmay |
» 2015-10-30 16:33:56 Przekaż też rozmiar tablicy int max = iMax( tablica, 10 );
int iMax( int tab[], int roz ) { int temp = tab[ 0 ]; int i = 1; do { if( tab[ i ] > temp; ) temp = tab[ i ]; i++; } while( i < roz ); return temp; }
Analogicznie dla iMin. |
|
Euvarios Temat założony przez niniejszego użytkownika |
» 2015-10-30 16:58:34 Przekształciłem funkcję iMax i iMin na tę podaną przez ciebie (była dużo krótsza ale robiła to samo), jednak problem jest ciągle ten sam, oto ten nowy kod: #include <iostream> #include <ctime> #include <cstdlib>
int losowanie() { return(( std::rand() % 100 ) + 1 ); }
bool sprawdzanie_powtarzalnosci( int tablica[], int wylosowane, int liczba_wylosowana ) { int i = 0; if( wylosowane == 0 ) return false; do { if( tablica[ i ] == liczba_wylosowana ) return true; i++; } while( i < wylosowane ); return false; }
void wypisanie( int tablica[] ) { int i; int x = 1; for( i = 0; i < 10; i++ ) { std::cout << x << " liczba: " << tablica[ i ] << std::endl; x++; } }
int iMax( int tablica[], int rozmiar ) { int i = 1; int temp = tablica[ 0 ]; do { if( tablica[ i ] > temp ) temp = tablica[ i ]; i++; } while( i < rozmiar ); return temp; }
int iMin( int tablica[], int rozmiar ) { int i = 1; int temp = tablica[ 0 ]; do { if( tablica[ i ] < temp ) temp = tablica[ i ]; i++; } while( i < rozmiar ); return temp; }
int main() { srand( time( NULL ) ); int tablica[ 10 ]; int wylosowane = 0; int liczba_tymczasowa; do { liczba_tymczasowa = losowanie(); if( sprawdzanie_powtarzalnosci( tablica, wylosowane, liczba_tymczasowa ) == false ) { tablica[ wylosowane ] = liczba_tymczasowa; wylosowane++; } } while( wylosowane < 10 ); wypisanie( tablica ); std::cout << "" << std::endl; std::cout < "Najwieksza liczba to: " << iMax( tablica, 10 ) << std::endl << std::endl; std::cout < "Najmniejsza liczba to: " << iMin( tablica, 10 ) << std::endl << std::endl; return 0; }
A to log z kompilatora: screenshot.sh/oBDwtltbQ6tQ0 |
|
carlosmay |
» 2015-10-30 17:06:12 std::cout < "Najwieksza liczba; [/cpp] operator wyj ś cia to '<<' |
|
Euvarios Temat założony przez niniejszego użytkownika |
» 2015-10-30 17:08:39 Chryste panie... Jestem idiotą... Tak to jest jak takie pierdółki mogą zniszczyć cenny czas na szukanie błędów... Dzięki za pomoc, temat zamykam... |
|
« 1 » |