• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Poczatkujacy. Zadanie.

Object Storage Arubacloud
0 głosów
209 wizyt
pytanie zadane 18 października 2015 w C i C++ przez GameFreak Początkujący (450 p.)
#include <iostream>

using namespace std;

int suma = 301;
int runda = 1;
int rzut = 1;
int punkty;


int main()
{
    while(punkty>=0)
    {
        rzut;
        runda;
        cout<<"Runda: "<<runda<<", Rzut: "<<rzut<<", Podaj ilosc punktow: ";
        cin>>punkty;

        if(punkty>=0 && punkty<=60)
        {
        suma = suma - punkty;
        rzut++;

        }
        if(punkty>60)
        {
            cout<<"Niepoprawna wartosc"<<endl;

        }

        if(rzut>3)
        {
           cout<<"Runda: "<<runda<<", liczba twoich punktow: "<<suma<<endl<<endl;
           rzut = 1;
           runda++;
        }

        if(suma == 0)
        {
            cout<<"Gra zakonczona w rundzie: "<<runda<<endl;
            break;
        }
        if(suma<0)
        {
         cout<<"Bust!"<<endl;
         runda++;
         rzut = 1;
        }
        if(punkty == -1)
        {
            break;
        }






}





    return 0;
}

Witam.

Dopiero zaczynam przygode z programowaniem. Mam problem z zadaniem które znalazłem na kuzniaprogramistow.pl

Oto treść zadania:

Dart - 301

Jeżeli uczyliście się jeździć na rowerze metodą prowadzenia na kiju przez osobę starszą, to pewnie pamiętacie dzień, w którym odwróciliście się za siebie i okazało się, że jedziecie samodzielnie. Wasz tata (albo starszy brat, albo inny mentor) stwierdził, że radzicie sobie na tyle dobrze, że może Was już puścić. Często kończyło się to upadkiem, ale upadki to część nauki.

My doszliśmy w uczeniu Was do podobnego momentu - uważamy, że nie musimy już trzymać kija i możemy pozwolić Wam pobawić się samodzielnie. Teraz również przygotowaliśmy zadanie życiowe: chcielibyśmy żebyście napisali program, który zlicza punkty w darta.

Zasady gry 301 dla 1 gracza:
Jest to najbardziej znana gra w darta. Grana w większości Dart-ligach i wielu turniejach. Zawodnik zaczyna grę od stanu punktowego 301. Na koniec każdej kolejki (po rzuceniu 3 rzutek) odejmuje się sumę zdobytych punktów od poprzedniego stanu punktowego. Zawodnik, musi zredukować ilość punktów dokładnie do zera. Gdy zawodnik w jednej kolejce zdobędzie więcej punktów niż potrzebne jest do osiągnięcia zera - oznacza to "BUST" i nie będą one zapisane. Całkowita punktacja powraca do stanu z poprzedniej kolejki.

Treść zadania
Napisz program, który zlicza punkty w grę 301 dla jednego gracza, według zasad podanych powyżej. Program może mieć dowolną liczbę rund. W każdej rundzie zawodnik ma do wykorzystania 3 lotki. Każda lotka może punktować w zakresie 0 – 60 punktów. Jeśli punktacja podana przez gracza będzie mieściła się w tym zakresie, nie będziemy sprawdzali poprawności punktów (w prawdziwej grze zawodnik nie ma szans zdobyć np. 59 punktów w jednym rzucie, a w naszej grze może). Jeśli jednak wartość jednego rzutu nie mieści się w zakresie 0 - 60, program wyświetli komunikat: "Niepoprawna ilosc punktow".

Gra kończy się, gdy zawodnik osiągnie 0 punktów - nawet, jeśli będzie to po pierwszej lub drugiej lotce, a więc w środku rundy!

W każdej rundzie program wyświetli następujące komunikaty:
Runda 1, rzut 1: Podaj ilość punktów
Runda 1, rzut 2: Podaj ilość punktów
Runda 1, rzut 3: Podaj ilość punktów
Runda 1, liczba twoich punktów: x


Gdzie x jest liczbą punktów posiadanych przez gracza, a nie ilością punktów zdobytych w rundzie. Przykładowo jeżeli w pierwszej rundzie rzuciłem 20 pkt, to x = 301 – 20 = 281.
Jeżeli gracz w rundzie rzuci więcej punktów niż mu pozostało, zobaczymy komunikat:
Runda X, BUST!
Liczba twoich punktów: x

Komunikat BUST! pojawi się bezpośrednio po rzucie, w którym gracz przekroczył punktację. Oznacza to, że BUST! może być po 1, 2 lub 3 rzucie. Niezależnie od numeru rzutu, BUST! zawsze kończy bieżącą rundę.

Na zakończenie gry (w momencie, gdy użytkownik uzyska 0 pkt) program wypisze komunikat:
Gra zakonczona w rundzie X 

Dodatkowym wymaganiem jest, aby program zakończył się natychmiast po wprowadzeniu przez użytkownika liczby -1. Liczba ta zostanie wykorzystana przez testy automatyczne do zakończenia działania programu po wykonaniu testu.

Prosiłbym o pomoc ponieważ siedze już nad tym drugi dzień a nie mogę nic wymyslec. Mam problem z sumą. Gdy wpiszę liczbe wieksza niż 60 to i tak odejmuje mi pkt od sumy nie wiem jak to obejść. Kolejnym problemem jest to, gdy suma jest mniejsza od zera nie wiem jak wrocic do sumy z przed ostatniego rzutu.

Z gory dziekuje za pomoc

 

1 odpowiedź

+2 głosów
odpowiedź 18 października 2015 przez iwan9449 Pasjonat (20,810 p.)

Co do pierwszego problemu.. Szczerze mówiąc nie wiem dlaczego przepuszcza Ci liczby z poza zakresu, sam warunek wygląda w porządku. Jeśli natomiast chodzi o problem cofania punktów, można to bardzo prosto rozwiązać. Na początek zrób sobie jakąś zmienną pomocniczą np.: int help; Następnie zmień ten kawałek kodu:

if(punkty>=0 && punkty<=60)
        {
        help = suma - punkty;
        rzut++;
 
        }

W taki sposób, następnie wprowadź zmiany w miejscu gdzie sprawdzasz czy sumie jest mniejsza o zera:

if(help<0)
        {
         cout<<"Bust!"<<endl;
         runda++;
         rzut = 1;
        }
else
        {
         suma = help;
         }

To powinno załatwić sprawę.

Pozdrawiam!

komentarz 18 października 2015 przez GameFreak Początkujący (450 p.)

Dzięki za pomoc. Jeszcze troche doszlifowałem warunek tak aby zrobić coś z liczbami ujemnymi. Zmienna help pomogła. Tylko nie mogę pojąć tego else suma = help. Czy to chodzi o to, że suma bedzie rowna temu help przed tym jak bedzie byla ujemna tak? Po prostu aby wrocila do swojego stanu zanim byla ujemna.

Wszytko działa jak nalezy. Jeszcze raz dzieki za pomoc w koncu udalo mi sie to skonczyc.

Pozdrawiam

Mój kod wyglada teraz tak:

#include <iostream>

using namespace std;

int suma = 301;
int runda = 1;
int rzut = 1;
int punkty;
int help;


int main()
{
    while(punkty>=0 || punkty<=0)
    {
        rzut;
        runda;
        cout<<"Runda: "<<runda<<", Rzut: "<<rzut<<", Podaj ilosc punktow: ";
        cin>>punkty;

        if(punkty>=0 && punkty<=60)
        {
        help = suma - punkty;
        rzut++;

        }
        if(punkty>60 || punkty <0)
        {
            cout<<"Niepoprawna wartosc"<<endl;

        }

        if(rzut>3)
        {
           cout<<"Runda: "<<runda<<", liczba twoich punktow: "<<help<<endl<<endl;
           rzut = 1;
           runda++;
        }

        if(help == 0)
        {
            cout<<"Gra zakonczona w rundzie: "<<runda<<endl;
            break;
        }
        if(help<0)
        {

         cout<<"Bust!"<<endl;
         runda++;
         rzut = 1;
        }
        else
        {
         suma = help;
         }


        if(punkty == -1)
        {
            break;
        }

}

    return 0;
}

 

komentarz 18 października 2015 przez iwan9449 Pasjonat (20,810 p.)
Dokładnie o to chodziło z tym przypisaniem. Po prostu operacji nie wykonywałeś na zmiennej suma, tylko na zmiennej pomocniczej i jeśli okazało się, że ta zmienna jest mniejsza od zera To wywalałeś napis "Bust!", inkrementowałeś runde i resetowałeś rzut, jeżeli zaś zmienna pomocnicza okazała się większa bądź równa 0, wtedy wszystko jest ok i możesz przypisać jej wartość do zmiennej suma.

Gratuluję rozwiązania problemu i pozdrawiam!
komentarz 27 lutego 2016 przez Wiktor Kurek Nowicjusz (230 p.)
Nie wiem czy jeszcze ktoś to zobaczy i się przyda, ale szczerze mówiąc, to to zadanie jest źle. Aktualnie też je próbuję zrobić. Sam mam wszystko dobrze oprócz komunikatu BUST i myślałem, że tutaj coś znajdę, ale też jest źle. Przykładowo napisałem od razu sobie 70 w programie i zakończyło mi grę, a powinno wyświetlić komunikat "BUST" i przejść do następnej rundy.

Podobne pytania

+1 głos
1 odpowiedź 148 wizyt
pytanie zadane 28 sierpnia 2020 w JavaScript przez nowyklemens Początkujący (430 p.)
0 głosów
2 odpowiedzi 856 wizyt
pytanie zadane 1 października 2018 w Sieci komputerowe, internet przez Popo Nowicjusz (200 p.)
0 głosów
1 odpowiedź 417 wizyt
pytanie zadane 14 sierpnia 2018 w PHP przez Mielek Nowicjusz (120 p.)

92,580 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...