Monika90 |
» 2013-02-21 21:35:00 W funkcji losuj() wychodzisz poza zakres tablicy tablica : rzucone[ i ] = rand() %( wszystkie_kosci ) + 1; tablica[ rzucone[ i ] ] ++;
tablica ma rozmiar równy wszystkie_kosci , a rzucone[ i ] może zawierać liczbę z przedziału od 1 do wszystkie_kosci włącznie, czyli może być o jeden większe niż maksymalny dopuszczalny indeks. Nie widzę też byś zwalniał pamięć przydzieloną przez new , w ogóle to, początkujący powinni używać std::vector < int > zamiast new int[] . |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-02-22 16:13:58 Długo pracowałem nad moim programem , napisałem jeszcze kod który sprawdzał by strity , jednak przy sprawdzaniu czy jest dwójka , trójka , kareta itp , nie uwzględnia mi 6 przeanalizowywałęm kod kilka razy ale nic nie znalazłem , może wy mi pomożecie :) ?? Kod : rzucKosci( 5, 6 );
system( "pause" ); return 0; }
void rzucKosci( int kosci, int wszystkie_kosci ) { losuj( 6, 5 ); int rozmiar = kosci + 1; int rzucone[ kosci ]; int tablica[ rozmiar ];
}
int * losuj( int kosci, int wszystkie_kosci ) { int strit1; int maly_strit = 1; int duzy_strit = 0; int wartosc_kosci = 0; int rozmiar = wszystkie_kosci; int * strit = new int[ kosci ]; int * tablica = new int[ kosci ]; int * rzucone = new int[ rozmiar ]; srand( time( NULL ) );
for( int i = 0; i < rozmiar; i++ ) { tablica[ i ] = 0; }
for( int i = 0; i < wszystkie_kosci; i++ ) { rzucone[ i ] = rand() %( kosci ) + 1; tablica[ rzucone[ i ] ] ++; cout << rzucone[ i ] << endl; } cout << endl; for( int i = 0; i < kosci; i++ ) { cout << tablica[ i ] << endl; }
for( int i = 0; i < rozmiar; i++ ) { if( tablica[ i ] == 5 ) { cout << " Piatka !!! " << endl; break; } else if( tablica[ i ] == 4 ) { cout << " Kareta !!! " << endl; break; } else if( tablica[ i ] == 2 ) { wartosc_kosci += 2; } else if( tablica[ i ] == 3 ) { wartosc_kosci += 3; } } if( wartosc_kosci == 5 ) { cout << "FULL !!! " << endl; } else if( wartosc_kosci == 4 ) { cout << "Para !!!" << endl; } else if( wartosc_kosci == 2 ) { cout << "Dwojka !!!" << endl; } else if( wartosc_kosci == 3 ) { cout << " Trojka !!!" << endl; }
cout << endl;
if( tablica[ 0 ] == 0 ) { maly_strit = 0; duzy_strit = 1; }
for( int i = 0; i < rozmiar; i++ ) { if( tablica[ i ] == 1 && strit1 < 5 ) strit1++; if( i > 0 && tablica[ i ] != 1 ) duzy_strit = 0; }
if( maly_strit ) std::cout << "maly strit" << std::endl;
if( duzy_strit ) std::cout << "duzy strit" << std::endl;
return rzucone; } |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-02-22 19:01:06 Problem rozwiązany , poprostu podczas sprawdzania zasady czy liczby się powtarzają tablica która była końcem warunku jej indeks był po prostu zbyt mały , tylko że to nie było takie łatwe to zrozumienia bo był aż o dwie wartości za mały :) . Teraz mam pytanie nieco któtsze . Jak do rzucone mam wpisać jakieś liczby , bo czasami podczas beta-testów mojego programu nie chce mi się akurat czekać na małego strita . |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-02-23 17:58:51 Ktoś pomoże ? Naprawde nie wiem jak się do tego zabrać |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-02-23 20:07:45 Chciałem zrobić mój program w funkcji jednak gdy próbuje skompilować to mam taki błąd : undefined refference to `sprawdz(int,int,int)' . Dlaczego nie mogge tego uruchomić ?? Nie mam żadnych błędów kompilatora , tylko błąd linkera . Kod : int * losuj( int kosci, int wszystkie_kosci ) { int rozmiar = wszystkie_kosci + 2; int * tablica = new int[ rozmiar ]; int * rzucone = new int[ kosci ]; int strit[ kosci ]; int wartosc_strita = 0; srand( time( NULL ) ); for( int i = 0; i < rozmiar; i++ ) { tablica[ i ] = 0; } for( int i = 0; i < wszystkie_kosci; i++ ) { rzucone[ i ] = rand() %( kosci ) + 1; tablica[ rzucone[ i ] ] ++; cout << endl; cout << rzucone[ i ] << endl; cout << endl; sprawdz( rzucone[ i ], tablica[ i ], rozmiar ); } }
int sprawdz( int rzuconekosci[], int tablica[], int rozmiar ) { int punkty = 0; int wartosc_kosci = 0; for( int i = 0; i < rozmiar; i++ ) { if( tablica[ i ] == 5 ) { wartosc_kosci += 10; } else if( tablica[ i ] == 4 ) { wartosc_kosci += 20; } else if( tablica[ i ] == 2 ) { wartosc_kosci += 2; } else if( tablica[ i ] == 3 ) { wartosc_kosci += 3; } } if( wartosc_kosci == 5 ) { cout << "FULL !!! " << endl; punkty +=( rzuconekosci[ 0 ] + rzuconekosci[ 1 ] + rzuconekosci[ 2 ] + rzuconekosci[ 3 ] + rzuconekosci[ 4 ] ) + 10; } else if( wartosc_kosci == 10 ) { cout << "Poker !!!" << endl; punkty +=( rzuconekosci[ 0 ] + rzuconekosci[ 1 ] + rzuconekosci[ 2 ] + rzuconekosci[ 3 ] + rzuconekosci[ 4 ] ) + 50; } else if( wartosc_kosci == 20 ) { cout << "Kareta !!!" << endl; punkty +=( rzuconekosci[ 0 ] + rzuconekosci[ 1 ] + rzuconekosci[ 2 ] + rzuconekosci[ 3 ] + rzuconekosci[ 4 ] ) + 20; } else if( wartosc_kosci == 2 ) { cout << "Dwojka !!!" << endl; punkty += 5; } else if( wartosc_kosci == 3 ) { cout << "Trojka !!!" << endl; punkty += 15; } else if( wartosc_kosci == 4 ) { cout << "Para !!!" << endl; punkty += 10; } cout << endl; if( tablica[ 2 ] == 1 && tablica[ 3 ] == 1 && tablica[ 4 ] == 1 && tablica[ 5 ] == 1 && tablica[ 6 ] == 1 ) { punkty += 20; cout << "Duzy Strit !!!" << endl; } if( tablica[ 1 ] == 1 && tablica[ 2 ] == 1 && tablica[ 3 ] == 1 && tablica[ 4 ] == 1 && tablica[ 5 ] == 1 ) { punkty += 15; cout << "Maly Strit !!!" << endl; } cout << endl; cout << endl; return wartosc_kosci; return punkty; } |
|
usmiech |
» 2013-02-23 20:30:57 Gra w kosci to dobry pomysl do 'walki' z C++, ale uzylbym tu klasy :) |
|
domin568 Temat założony przez niniejszego użytkownika |
» 2013-02-24 11:27:07 Ale czy dało by się to zrobić na funkcje ??
|
|
pekfos |
» 2013-02-24 13:00:48 Warning: address of local variable returned |
To znaczy, że zwracasz adres lokalnej zmiennej, która po powrocie z funkcji przestaje istnieć. Rozwiązanie powszechnie używane w bibliotece standardowej C: void Funkcja( int * miejsce_na_wynik, int rozmiar bufora );
Alternatywne rozwiązanie jest takie same jak to z pierwszego posta, z tą różnicą, że tablica jest alokowana dynamicznie (po powrocie musi być ręcznie usunięta). |
|
1 2 « 3 » |