Gra Nim, błędne wyniki
Ostatnio zmodyfikowano 2014-10-16 15:04
Hunteerrq Temat założony przez niniejszego użytkownika |
Gra Nim, błędne wyniki » 2014-10-15 23:21:31 Witam. Jestem nowym programistą. Dzisiaj na zadanie dostałem napisanie gry Nim w języku C++ z wykorzystaniem pętli Do...while. #include <iostream>
using namespace std;
int main() { int sterta1, sterta2; int sterta, ilosc, zwyciezca; sterta1 = 100; sterta2 = 100; cout << "Podaj imie gracza numer jeden "; string gracz1, gracz2; cin >> gracz1; cout << "Podaj imie gracza numer dwa "; cin >> gracz2; do { cout << "Sterta 1 wynosi: " << sterta1; cout << " Sterta 2 wynosi: " << sterta2; cout << " Gracz 1 wybierz sterte [1/2] "; cin >> sterta; cout << " Gracz 1 wybierz ilosc: "; cin >> ilosc; if( sterta == 1 ) { sterta1 = sterta1 - ilosc; zwyciezca = 1; } else { sterta2 = sterta2 - ilosc; zwyciezca = 1; } cout << "Sterta 1 wynosi: " << sterta1; cout << " Sterta 2 wynosi: " << sterta2; cout << " Gracz 2 wybierz sterte [1/2]"; cin >> sterta; cout << " Gracz 2 wybierz ilosc: "; cin >> ilosc; if( sterta == 1 ) { sterta1 = sterta1 - ilosc; zwyciezca = 2; } else { sterta2 = sterta2 - ilosc; zwyciezca = 2; } } while( sterta1 > 0 && sterta2 > 0 ); cout << "Zwyciezyl gracz " << zwyciezca; return 0; }
To jest cały kod, który napisałem jednak z niewiadomych dla mnie przyczyn przed wyzerowaniem się obu zbiorów kończy i wypisuje gracza w dodatku błędnie. Prosiłbym o objaśnienie błędu który popełniłem i ewentualna poprawka błędu ;). Nie mogę wykorzystywać zbyt różnorodnych komend, muszę zastosować pętle Do...while i jedynie warunki. Pozdrawiam i z góry dziękuję :D. Zapewniam, iż sam pisałem ten kod a przygodę z programowaniem zacząłem wraz z tym rokiem szkolnym. Od kilku godzin próbuję znaleźć przyczynę jednak nie przyniosło to żadnych skutków, także chciałbym was poprosić o pomoc. ;} |
|
walus1305 |
» 2014-10-16 10:51:35 dodaj biblioteke string. nie sprawdzasz kto jest zwyciezcą . zawsze będzie wygrywał gracz 2 bo on jest wpisywany jako ostatni. daj warunek przed wypisaniem zwycięzcy który sprawdza który z nich wygrał. |
|
Hunteerrq Temat założony przez niniejszego użytkownika |
» 2014-10-16 14:28:35 Dodałem bibliotekę i dodałem warunek przy każdym jednak wciąż nie wiem czemu program kończy pracę przed wyzerowaniem się obu stert przez co teraz nie wyświetla żadnego gracza. Chodzi tutaj głównie o celowo popełniany błąd kiedy sterta1 = 0 a sterta2= np. 20 i kiedy weźmiemy ze sterty2 10 kamieni to program i tak kończy działanie #include <iostream> #include <string>
using namespace std;
int main() { int sterta1, sterta2; int sterta, ilosc, zwyciezca; sterta1 = 100; sterta2 = 100; cout << "Podaj imie gracza numer jeden "; string gracz1, gracz2; cin >> gracz1; cout << "Podaj imie gracza numer dwa "; cin >> gracz2; do { cout << "Sterta 1 wynosi: " << sterta1; cout << " Sterta 2 wynosi: " << sterta2; cout << " Gracz 1 wybierz sterte [1/2] "; cin >> sterta; cout << " Gracz 1 wybierz ilosc: "; cin >> ilosc; if( sterta == 1 ) { sterta1 = sterta1 - ilosc; if( sterta1 == 0 && sterta2 == 0 ) { zwyciezca = 1; break; } } else { sterta2 = sterta2 - ilosc; if( sterta1 == 0 && sterta2 == 0 ) { zwyciezca = 1; break; } } cout << "Sterta 1 wynosi: " << sterta1; cout << " Sterta 2 wynosi: " << sterta2; cout << " Gracz 2 wybierz sterte [1/2]"; cin >> sterta; cout << " Gracz 2 wybierz ilosc: "; cin >> ilosc; if( sterta == 1 ) { sterta1 = sterta1 - ilosc; if( sterta1 == 0 && sterta2 == 0 ) { zwyciezca = 2; break; } } else { sterta2 = sterta2 - ilosc; if( sterta1 == 0 && sterta2 == 0 ) { zwyciezca = 2; break; } } } while( sterta1 > 0 && sterta2 > 0 ); cout << "Zwyciezyl gracz " << zwyciezca; return 0; }
|
|
walus1305 |
» 2014-10-16 14:45:17 w while daj >= |
|
Hunteerrq Temat założony przez niniejszego użytkownika |
» 2014-10-16 14:54:47 Ogromne podziękowania dla Ciebie! Teraz wszystko działa i gracz jest prawidłowo wyświetlany. Mógłbym tylko wiedzieć dlaczego tam musi być większe lub równe? Czy to jest związane ze specyfikacją tej pętli? Ponieważ kiedy zostawała liczba 10 która jest większa od 0 program również kończył działanie. Chociaż i tak ogromne dzięki za to, że w ogóle chciało Ci się analizować ten kod :). |
|
walus1305 |
» 2014-10-16 15:00:19 jak będziesz miał w stosie 0 i sprawdzasz w petli czy stos >0 to ona się przerwie bo 0 nie jest > od 0 dlatego musisz dać >= i wtedy spełnia się warunek w pętli " działaj dopóki liczby sa większę lub równe 0 " bo tak tylko zadziała dla > od 0 |
|
Hunteerrq Temat założony przez niniejszego użytkownika |
» 2014-10-16 15:04:48 Zapomniałem, że są tam 2 stosy a ja dałem iloczyn logiczny. Warunek przestaje działać kiedy 1 stos jest 0. Ogromne dzięki za wyjaśnienie! :) |
|
« 1 » |