matematykaszkolna.pl
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 emotka
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 emotka 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
Metis: Ok , teraz chyba działa emotka http://pastebin.com/4FhTHm0D
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 emotka
16 sty 23:53
jc: W szkole też używacie takiego kompilatora?
17 sty 00:01
Metis: U siebie w domu emotka
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++ emotka
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 emotka 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