Witam.
Mam problem z programem który ma za zadanie wczytywanie 2 liczb które stanowią liczbę wyrzuconych oczek i wyświetlający odpowiedni komunikat (wygrałeś, przegrałeś, rzucasz jeszcze raz). Komunikaty są zależne od ilości oczek, np.
2,9 -wygrales,
10,11-przegrales,
5,6-rzucasz jeszcze raz,
Z góry dziękuje za pomoc i podpowiedzi jak zrobić ten program:)
- To się nadaje do Newbie.
- Pokaż co już napisałeś, za gotowca się buli $$.
To ma być zwykły program konsolowy ? Użytkownik ma wprowadzać te liczby ?
Wskazówka (jak to napisać):
- Pobierasz od użytkownika 2 liczby.
- Z pomocą instrukcji warunkowych if...else podajesz komunikaty.
- Kończysz lub kontynuujesz w pętli while().
a od czego ma zależeć wygrana lub przegrana
Mam problem z programem
Jaki problem?
Pokaż ten program z którym masz problem i zaznacz miejsce w którym ten problem masz. Ale podejrzewam że to do działu praca.
Brutalnie zostalem wyrwany z pascala i nie do konca rozumiem to zadanie, bo do tego czasu uczyłem sie tylko o operatorach i klasach.Wiec też chcialbym sie dowiedzieć jakiej najlepiej biblioteki uzyc do losowania oraz w jakiej formie if i else czy tabeli czy tez case zrobic ten program. Czytalem troche o tym ale co forum to inne rozwiazanie.
revont napisał(a):
Wiec też chcialbym sie dowiedzieć jakiej najlepiej biblioteki uzyc do losowania (...)
Biblioteki standardowej: http://en.cppreference.com/w/c/numeric/random
Coś nie rozumiem, w zadaniu napisano - wczytywanie 2 liczb, a teraz dopytujesz się o losowanie?
Tak jest napisane wczytywanie. W takim razie mozna zrobic przynajmniej 3 sposoby ten program: wczytywanie z pliku, wklepywanie z klawiatury i losowanie. Nic w zadaniu o plikach nie ma wiec ta opcja odpada, wklepywanie z klawiatury tez raczej odpada bo za łatwo by bylo troche wiec pozostaje losowanie.
No to z czym masz problem ?
Do losowania użyj rand(). Ogranicz sobie zakres losowania do liczb 1...6, wylosowane liczby zapisuj sobie w dwóch zmiennych, mogą być typu unsigned short int. Następnie zrób sobie odpowiednie warunki z pomocą if...else. Jeśli ma być w pętli, to użyj while(). Tyle. Spróbuj coś naklepać, jak nie będziesz wiedział pisz. A jak jesteś leń, to jest taki dział http://4programmers.net/Forum/Praca :)
na razie napisalem cos takiego:
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
int i,k,m;
cout("Pierwsza liczba oczek")>>endl;
i= rand % 7+1;
srand((unsigned)time(NULL));
cin>>i;
cout ("Druga liczba oczek")>>endl;
k= rand % 7+1;
srand((unsigned)time(NULL)) ;
cin>>k;
cout ("Liczba wszystkich oczek")<<i+k<<endl;
cin>>m;
switch(m)
{
case1 :
m= 2;
cout<<("Przegrywasz");
break;
case2 :
m = 3;
cout<<("Przegrywasz");
break;
case3 :
m = 12;
cout<<("Przegrywasz");
break;
case4 :
m = 7;
cout<<("Wygrywasz");
break;
case5:
m =1;
cout<<("Wygrywasz");
break;
default:
cout<<("Rzucasz jeszcze raz");
break;
}
system("pause");
return 0;
}
Zdajesz sobie sprawę że na chwilę obecną rzucasz kostką k8? czyli masz liczby od 1 do 8.na każdej kostce, co daje od 2 do 16. poza tym srand daje się tylko raz, przed pierwszym losowaniem. Co więcej u ciebie powyższe i tak nie mają znaczenia bo zarówno rzuty jak i wynik są nadpisywane tym co użytkownik wpisze. Więc się z łaski swojej zdecyduj czy losujesz czy go pytasz. Jak to drugie to powinieneś dodać if-a lbo ify w celu ochrony przed "erpegowymi" rzutami np wpisaniem 88.
nie bądźcie hieny dla nowego D
dobra. ja mu napisze ten program, tylko ktoś mi przypomni o co chodzi z funkcją rand(), o srand() pamiętam, ale coś jeszcze jest potrzebne zeby mi nie powtarzało ?
Najpierw musi się zdecydować czy losuje program czy użytkownik wpisuje te liczby, co ciekawe póki co wynik dodawania też wpisuje user (albo źle patrzę albo program tego w żadnym miejscu nie liczy). Potem mu go ktoś ładnie poprawi.
@sig, ten program nie może coś robić lub nie robić.
Dopóki nie pousuwa się akie kwiatki:
cout("Pierwsza liczba oczek")>>endl;
Z tego co czytalem rand % 7 to liczby od 0 do 6 a jedynke sie dodaje aby była liczbą najmniejsza jaka moze zostac wylosowana bo zero odpada. W pierwotnym zamyśle program ma wylosowac 2 liczby, dodac je do siebie i na koncu wyslietlic odpowiedni komunikat.
unsigned word m,n,s;
//wprowadzasz wartosc do m z przedziału 1-6, do n również
s=m+n;
if (s==2 || s==3 || s==12)
std::cout<<"przegrales";
if(s==7 || s==11)
std::cout<<wygrałes;
else
cout<<"losuj jeszcze raz";
dajesz to w pętle czy jak tam chcesz i masz, a to jak będziesz sobie wybierał te liczby to już twoja sprawa, zdecyduj sie- palch czy random :D
Jako że udało mi się w ramach testów "wyrzucić" siedem zmieniłem randa. A o to i sprawny program
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main()
{
int i,k,m;
srand(time(0));
cout << ("Pierwsza liczba oczek") << endl;
i= rand() % 6+1;
cout << i << endl;
cout << ("Druga liczba oczek") << endl;
k= rand() % 6+1;
cout << k << endl;
m=i+k;
cout << ("Liczba wszystkich oczek")<< m <<endl;
switch(m)
{
case 2 :
cout<<("Przegrywasz");
break;
case 3 :
cout<<("Przegrywasz");
break;
case 12 :
cout<<("Przegrywasz");
break;
case 7 :
cout<<("Wygrywasz");
break;
case 1:
cout<<("Wygrywasz");
break;
default:
cout<<("Rzucasz jeszcze raz");
break;
}
system("pause");
return 0;
}
ps jako że spod Linuksa system("pause"); miałem zakomentowany.
pps zwróć uwagę na "konstrukcję" switcha, robiłeś to całkiem nie tak
#include <cstdlib>
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int i,k,s;
srand(time(0));
cout << ("Pierwsza liczba oczek") << endl;
i= rand() % 6+1;
cout << i << endl;
cout << ("Druga liczba oczek") << endl;
k= rand() % 6+1;
cout << k << endl;
s=i+k;
cout << ("Liczba wszystkich oczek")<< s <<endl;
if (s==2 || s==3 || s==12){
std::cout<<"przegrales";}
else
if(s==7 || s==11) {
std::cout<<wygrałes;}
else
cout<<"losuj jeszcze raz";
system("pause");
return 0;
}
@sig, wystarczy tylko małą kosmetykę i mamy:
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
srand(time(0));
while(true)
{
int i=rand()%6+1,k=rand()%6+1,m=i+k;
cout
<<"Pierwsza liczba oczek: "<<i<<endl
<<"Druga liczba oczek: "<<k<<endl
<<"Liczba wszystkich oczek: "<<m
<<endl
;
if((m==2)||(m==3)||(m==12))
{
cout<<"Przegrywasz"<<endl;
break;
}
else if(m==7)
{
cout<<"Wygrywasz"<<endl;
break;
}
cout<<"Rzucasz jeszcze raz (wciśnij enter)"<<endl;
cin.sync();
cin.get();
}
cin.sync();
cin.get();
return 0;
}