Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zadanie domowe 17 Losowanie liczb z wybranego wcześniej przedziału

Ostatnio zmodyfikowano 2015-07-16 15:32
Autor Wiadomość
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!

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;




int losowanie( int liczba_poczakotwa, int liczba_koncowa )
{
    int c =( rand() % liczba_poczakotwa ) + liczba_koncowa;
    //(rand() % a) + b;
    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;
}
P-134704
pekfos
» 2015-07-15 15:07:00
C/C++
int losowanie( int liczba_poczakotwa, int liczba_koncowa )
{
    int a;
    int b;
    int c =( rand() % a ) + b;
    //(rand() % a) + b;
    return c;
}
Dlaczego to miałoby działać? Zły wzór i użycie zmiennych.
P-134706
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
C/C++
int losowanie( int liczba_poczakotwa, int liczba_koncowa )
{
    int przedzial_liczb = liczba_koncowa - liczba_poczatkowa + 1;
    int c =( rand() % przedzial_liczb ) + liczba_poczakotwa;
    //(rand() % a) + b;
    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.
P-134708
Elefant
Temat założony przez niniejszego użytkownika
» 2015-07-15 15:29:43
Uaktualnilem pierwszy post dzieki za rady, cpp0x rulez!
P-134709
pekfos
» 2015-07-15 20:51:27
C/C++
int c =( rand() % liczba_poczakotwa ) + liczba_koncowa;
Skąd ty to wziąłeś, miałeś podanego gotowca..
P-134721
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 ?
P-134724
JMII89
» 2015-07-15 23:45:32
Tak ,dobrze rozumiesz . Poprostu zrób tak :

C/C++
return( rand() %( liczba_koncowa - liczba_poczatkowa ) + liczba_poczatkowa )
P-134727
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?
P-134729
« 1 » 2 3
  Strona 1 z 3 Następna strona