Zadanie domowe 17 Losowanie liczb z wybranego wcześniej przedziału
Ostatnio zmodyfikowano 2015-07-16 15:32
Elefant Temat założony przez niniejszego użytkownika |
Zadanie domowe 17 Losowanie liczb z wybranego wcześniej przedziału » 2015-07-15 14:55:21 Witam czy to zadanie jest dobrze rozwiązane czy nie? Nie wiem jak zrobić by jak podam liczbę A=10 i liczbę B=20 losowało z przedziału od 10-20, jakieś rady? Teraz chyba smiga, faktycznie tragiczne bylo wprowadzenie nowych zmiennych w funkcji, nie wiem co mi się ubzdurało, dzięki za naprowadzenie! #include <iostream> #include <cstdlib> #include <ctime>
using namespace std;
int losowanie( int liczba_poczakotwa, int liczba_koncowa ) { int c =( rand() % liczba_poczakotwa ) + liczba_koncowa; return c; } int main() { srand( time( NULL ) ); cout << "Podaj przedzial losowania" << endl; int liczba_poczatkowa; cin >> liczba_poczatkowa; int liczba_koncowa; cin >> liczba_koncowa; int ilosc_losow = 10; do { cout << losowanie( liczba_koncowa, liczba_koncowa ) << endl; ilosc_losow--; } while( ilosc_losow > 0 ); return 0; }
|
|
pekfos |
» 2015-07-15 15:07:00 int losowanie( int liczba_poczakotwa, int liczba_koncowa ) { int a; int b; int c =( rand() % a ) + b; return c; }
|
Dlaczego to miałoby działać? Zły wzór i użycie zmiennych. |
|
carlosmay |
» 2015-07-15 15:16:50 int losowanie( int liczba_poczakotwa, int liczba_koncowa ) na początek w nagłówku funkcji deklarujesz zmienne int liczba_poczakotwa a używasz int b; . Powinno wyglądać tak int losowanie( int liczba_poczakotwa, int liczba_koncowa ) { int przedzial_liczb = liczba_koncowa - liczba_poczatkowa + 1; int c =( rand() % przedzial_liczb ) + liczba_poczakotwa; return c; }
funkcja rand() działa tak: Funkcja losuje liczbę z przedzaiału RAND MAX dzieli operatorem modulo żądanego przedzialu i zwraca resztę z tego dzielenia od zera do (przedzial_liczb - 1), jeśli chcesz oby to był konkretny przedział a nie od zera to po prostu dodajesz liczbę i otrzymujesz żądany przedział. Jeśli liczba początkowa ma być 10 i końcowa ma być 20 to: liczba_poczatkowa = 10; liczba_koncowa = 20; przedzial_liczb = liczba_koncowa - liczba_poczatkowa + 1; , bo liczb w przedziale jest 11, możesz policzyć na palcach. |
|
Elefant Temat założony przez niniejszego użytkownika |
» 2015-07-15 15:29:43 Uaktualnilem pierwszy post dzieki za rady, cpp0x rulez! |
|
pekfos |
» 2015-07-15 20:51:27 int c =( rand() % liczba_poczakotwa ) + liczba_koncowa;
|
Skąd ty to wziąłeś, miałeś podanego gotowca.. |
|
Elefant Temat założony przez niniejszego użytkownika |
» 2015-07-15 23:08:49 Czyli zadanie jest złe wykonane? W sumę to nie muzę tam tworzyć nowej zmiennej tylko do return to wstawić, dobrze rozumuje ? |
|
JMII89 |
» 2015-07-15 23:45:32 Tak ,dobrze rozumiesz . Poprostu zrób tak : return( rand() %( liczba_koncowa - liczba_poczatkowa ) + liczba_poczatkowa )
|
|
Elefant Temat założony przez niniejszego użytkownika |
» 2015-07-16 00:04:49 Stosując taki wzór jak podałes, gdy poda sie liczbę pierwsza większa od drugiej wyjdzie ujemna, jest jaki inny sposób, tak z Ciekaowsci pytam, albo moze wartość bezwzględna jest brana? |
|
« 1 » 2 3 |