c++ losowanie
Metis: C++ losowanie
Czemu taki program nie działa?
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <time.h>
using namespace std;
int liczba, liczba2;
int main()
{
srand(time(NULL));
liczba = rand()%101−50;
cout << liczba;
liczba2 = rand()%101−50;
cout << liczba2;
getch();
}
Mam wylosowac 2 liczby z przedziału od −50 do 50 .
W przedziale mam 99 liczb.
Jesli wpisze rand()%100 − wylosowanie z przedziału 0,99 wiec
wpisuje 101
wylosuje liczbe od 0,100 i odejmuje −50
i mam −50 do 50.
Ale program wypisuje jakieś głupoty.
16 sty 19:24
Opos: spróbuj zamiast rand dać srand w funkcji liczba = i odjąć −51 a nie 50.
16 sty 19:26
Metis: Działa
Nie dodałem przejścia do nowej linii
16 sty 19:26
Dziadek Mróz:
rand() % (zakresgorny + 1 − zakresdolny) + zakresdolny
rand() % (50 + 1 − (−50)) + (−50) = rand() % 101 − 50
0 − 50 = −50
100 − 50 = 50
16 sty 19:42
Metis: Dzięki
Dziadku
Ostatecznie wyglada to tak:
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <time.h>
using namespace std;
int liczba, liczba2, licznik=0;
int main()
{
srand(time(NULL));
do
{
liczba = rand() %101−50;
liczba2 = rand() %101−50;
licznik++;
} while (liczba>0 || liczba2>0 );
cout << "Wylosowalem dwie liczby ujemne! " << liczba <<" i " << liczba2 << endl;
cout << "Petla wykonala sie " << licznik<< " razy";
getch();
}
Po wylosowaniu dwóch liczb ujemnych konczy działanie i wypisuje je.
16 sty 19:49
Metis: Czemu w tym przypadku kompilator wyrzuca błąd pamięci ?
#include "stdafx.h"
#include <iostream>
#include <conio.h>
using namespace std;
int liczby, *tab;
int main()
{
tab = new int[liczby];
cout << "Podaj ilosc liczb: ";
cin >> liczby;
for (int i = 0; i < liczby; i++)
{
cout << "Podaj liczbe " << i + 1 << endl;
cin >> tab[i];
}
for (int i = 0; i < liczby; i++)
{
cout << tab[i]<<endl;
}
delete [] tab;
getch();
}
16 sty 20:14
Dziadek Mróz:
Kiedy zmienna liczby przyjmuje wartość, a kiedy Ty alokujesz pamięć?
16 sty 20:41
Metis: Tak tam mam bład
cout << "Podaj ilosc liczb: ";
cin >> liczby;
tab = new int[liczby];
16 sty 21:41
Dziadek Mróz:
I wszystko w temacie.
Jeszcze wskaźniki:
int* tab, liczby; // tab to wskaźnik na int, liczby to int
int *tab, liczby; // to samo co wyżej
16 sty 21:53
Metis: Możesz mi pomoc jeszcze tutaj: ?
//Wylosować n liczb z przedziału [−20,15] i obliczyć średnią, ale tylko z liczb nieparzystych
http://pastebin.com/Dm2HMNxK
Na początek wczytuję ile liczb ma zostać wylosowane.
Do pierwszej komórki tablicy zostaje wczytana pierwsza wylosowana liczba.
Potem sprawdzane czy ta liczba, która została wpisana do komórki tablicy jest nieparzysta
Jesli jest to jest sumowana i licznik zwieksza wartosc o 1
Dla przykładu:
n=2
Pętla wykona się 2 razy:
1 wylosowana liczba = 49
49 − nieparzysta więc
sum=49+0
licznik = 1
2 wylosowana liczba 53
sum=49+53
licznik =2
16 sty 22:12
16 sty 22:17
jc: W którym miejscu wykorzystujesz stdafx.h?
16 sty 23:51
Metis: Kompilator nie kompiluje bez tej biblioteki , używam Visual'a 2015
16 sty 23:53
jc: W szkole też używacie takiego kompilatora?
17 sty 00:01
Metis: U siebie w domu
17 sty 00:02
jc: W czym ten kompilator lepszy od innych kompilatorów?
17 sty 00:05
jc: A może inaczej, czym różni się od innych, poza tym, że trzeba coś dopisywać?
17 sty 00:08
Metis: Nie programuję tylko w C++
17 sty 00:10
jc: Już zdążyłem przeczytać na Wiki, że to środowisko programistyczne.
W czym jeszcze programujesz?
17 sty 00:19
Metis: Python
oraz C#
17 sty 01:01
fffff: #include "stdafx.h"
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int liczby, *tab;
int main()
{
int x, y;
srand((unsigned int)time(NULL));
tab = new int[liczby];
cout << "Podaj ilosc liczb: ";
cin >> liczby;
cout << "Podaj maksymalny zakres losowania: ";
cin >> x;
cout << "Podaj minimalny zakres losowania: ";
cin >> y;
x = rand() % y;
cout << "Wylosowana liczba: " << x << endl;
system("PAUSE");
return 0;
}
dlaczego nie działa poprawnie?
24 lut 13:45
Kto tam? Hipopotam!:
Może dlatego:
cout << "Podaj maksymalny zakres losowania: ";
cin >> x;
...
x = rand() % y;
cout << "Wylosowana liczba: " << x << endl;
24 lut 14:00
sure: definicja tab = new int[liczby]
kiedy jeszcze nie wczytales liczb (cin>>liczby)
ehh
poza tym jak chcesz wylosowac jakas liczbe z przedzialu <a;b>
cin>>a;
cin>>b;
int jakasliczba = a + rand()%(b−a+1);
sprawdzenie takie nieformalne
np. przedzial <9;17>
jakasliczba = 9+rand()%(17−9+1) = 9 + rand()%9 = 9 + <0;8> = <9;17>
24 lut 15:38