mam do napiasani aprogram ktory:
staruje z pkt 0 i do tego pkt dodajemy liczbe albo 1 albo -1 i tak np 16 razy.
Tzn:
dodaje do 0 np 1 -> jeden krok zapis do pliku
do tej jedynki znowu wyloswal program 1 czyli 2-> czyli 2 krok zrobil ;zapis
do 2 wylosowal -1 czyli 1 -> czyli to jest 3 krok i zapis..i tak 16 razy np
Jestem poczatkujacy w c++
Z tego co wiem to na pewno pętla
for do 16 razy
tylko jak zrobic zeby on dodawal tylko 1 lub -1 tzn losowal i dodawal do tego pkt poczatkowego czyli tu 0.
Pozdrawiam
Pseudokod:
int wart = 0;
for (int i = 1; i <= 16; i++) {
int znak = wylosujZnakLiczby(); // czyli 1 albo -1
wart += znak;
plik << wart << endl;
}
Wylosuj jedną cyfry z przedziału od 0 do 1.
Jeśli 0 to dodajesz -1
jeśli 1 to dodajesz 1
do zmiennej oczywiście która przechowywać będzie tą liczbę którą będziesz wypisywał.
Jeżeli dobrze zrozumiałem kolegę, to problem leży w sposobie ograniczeni alosowania do 0 lub 1, tak?
srand(time(0));
int losowa = (rand() % 2) - 1;
int liczba = losowa ? 1 : -1;
Działa to tak, że losujesz jakąs duża liczę za pomocą funkcji rand(). Następnie na tej wylosowanej liczbie wykonujesz resztę z dzielenia przez 2, czyli dostajesz albo 0 albo 1. W drugiej linii jest operator warunkowy. Sprawdza on wartość logiczną tego co otrzymałeś w poprzednim kroku. Jak jest prawdziwa (1) to daje jedynke, jak fałszywa (0) to daje minus jeden. A pozniej to juz tylko sumowanie.
Opolski Portal Programistyczny
http://programowanie.opole.pl
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
int liczba=0;
int liczba_losowana;
cout<<"Liczba wynosi: "<<liczba<<endl;
srand(time(NULL));
int krok=0;
do
{
liczba_losowana=(rand()% 2+1);
if(liczba_losowana==1)
{
liczba++;
cout<<"Dodawanie"<<endl;
}
else
{
liczba--;
cout<<"Odejmowanie"<<endl;
}
cout<<"Liczba wynosi: "<<liczba<<endl;
krok++;
}while (krok<16);
}
O coś takiego chodziło ?
Losowanie jest od 1 do 2.
1 - dodawanie
2 - odejmowanie