twoxu Temat założony przez niniejszego użytkownika |
Losowanie liczb bez powtórzeń - crash programu. » 2014-07-16 21:52:14 Cześć, napisałem program z lekcji o losowaniu liczb bez powtórzeń, podczas kompilacji nie zwraca mi żadnego błędu i program się uruchamia. Podaję 10 liczb, program losuje z nich 8 ale crashuje podczas drukowania ich na ekran. Program po crashu zwraca coś takiego: Process returned -1073741819 (0xC0000005) execution time : 10.114 s Press any key to continue. Oto kod: #include <iostream> #include <ctime> #include <cstdlib>
using namespace std; void wydrukuj( int IleWydrukowac, int LiczbyUzytkownika[], int Wylosowane ) { int ktora = IleWydrukowac + 1; int ta = Wylosowane; cout << ktora << " z nich to jest:" << LiczbyUzytkownika[ ta ] << endl; } bool czyBylaWylosowana( int iLiczba, int tab[], int wylosowanych ) { if( wylosowanych >= 0 ) { return false; } int i = 0; do { if( tab[ i ] == iLiczba ) return true; i++; } while( i < wylosowanych ); return false; } int wylosujLiczbe() { int los =( rand() % 8 ) + 0; return los; } int main() { srand( time( NULL ) ); int LiczbyUzytkownika[ 10 ]; int wylosowane[ 8 ]; int wylosowanych = 0; int ilePodac = 0; int IleWydrukowac = 0; cout << "Prosze podac 10 liczb. Program wylosuje z nich 8 bez powtorzen." << endl; do { cin >> LiczbyUzytkownika[ ilePodac ]; ilePodac++; } while( ilePodac < 10 ); do { int Liczba = wylosujLiczbe(); if( czyBylaWylosowana( Liczba, wylosowane, wylosowanych ) == false ) { wylosowanych++; wylosowane[ wylosowanych ] = Liczba; } } while( wylosowanych > 8 ); cout << "Oto Wylosowane Liczby: " << endl; do { wydrukuj( IleWydrukowac, LiczbyUzytkownika, wylosowane[ IleWydrukowac ] ); IleWydrukowac++; } while( IleWydrukowac > 8 ); return 0; }
PS: Może i napisałem ten program dosyć łopatologicznie, ale przez dobre 2 miesiące nie miałem przypływu weny by to zrobić, więc jest tak jak jest :D |
|
Moorfox |
» 2014-07-16 22:14:21 wydrukuj( IleWydrukowac, LiczbyUzytkownika, wylosowane[ IleWydrukowac ] )
Nie czytam całego kodu. Po nie zbyt celnie nazwanych zmiennych zdołałem zauważyć jedynie że jako parametr podajesz liczbe pod indeksem IleWydrukowac jest ona na początku 0 i więcej się nie podniesie bo while( IleWydrukowac > 8 ) czyli while( 0 > 8 ) <=> false Czyli pętla wykona się raz i funkcja w niej będzie próbowała wykonać LiczbyUzytkownika[ ta ] <=> LiczbyUzytkownika[ Wylosowane ] <=> LiczbyUzytkownika[ wylosowane[ileWydrukowac] ] jesli wylosowane[ileWydrukowac] = 8 to LiczbyUzytkownika[8] pewnie nie istnieje |
|
twoxu Temat założony przez niniejszego użytkownika |
» 2014-07-16 22:27:52 Czyli jak to rozwiązać? Aha, i wytłumacz mi co to znaczy <=>. W lekcji z operacjami porównania nie ma czegoś takiego, a ja śledzę tylko ten kurs więc nie mogłem się tego dowiedzieć z innego źródła. Poza tym twój post jest źle skonstruowany i trochę się w nim pogubiłem. Używaj enter, oraz kod dawaj do specjalnego miejsca |
|
Moorfox |
» 2014-07-16 22:39:23 <=> równoważne, to samo xd czyli po prostu transformuje wyrażenia jesli int a = 0; int b = 0; int c = 1; int d = 2; int tab[] = {1,2,1}; to tab[a] <=> tab[b] tab[a] <=> tab[d] ale to juz jest zle tab[a] <=> tab[c]
Tak a pro po <=> to symbol używany w matematyce nie w językach programowania za pomocą tego próbuje ci coś wytłumaczyć. |
|
pekfos |
» 2014-07-16 22:39:50 Aha, i wytłumacz mi co to znaczy <=>. W lekcji z operacjami porównania nie ma czegoś takiego, a ja śledzę tylko ten kurs więc nie mogłem się tego dowiedzieć z innego źródła. |
To nie z C++, tylko matematyki. |
|
twoxu Temat założony przez niniejszego użytkownika |
» 2014-07-16 23:48:56 Zamieniłem na lecz aplikacja nadal się crashuje. |
|
Moorfox |
» 2014-07-16 23:53:11 while( wylosowanych > 8 ); |
|
Moorfox |
» 2014-07-16 23:56:16 void wydrukuj( int IleWydrukowac, int Wylosowane[] ) { cout << IleWydrukowac + 1 << " z nich to jest:" << Wylosowane[ IleWydrukowac ] << endl; }
int main() { ... wydrukuj( IleWydrukowac, wylosowane ); }
|
|
« 1 » 2 |