losowanie liczb z przedziału

Odpowiedz Nowy wątek
2018-04-02 18:13
Szybki Ryś
0

Cześć. Mam do napisania na zajęcia następującą rzecz.

Napisać funkcję który losuje N liczb całkowitych z przedziału <a, b> i oblicza średnią liczb
nieparzystych z podanego przedziału. Funkcja zwraca obliczoną wartość.
Do funkcji należy przekazać N, a, b.
W funkcji main() wypisać obliczoną średnią

Utknąłem jednak już na pierwszej części tego zadania. Chciałem zrobić tak, żeby wypisać sobie na ekran losowane liczby, żeby sprawdzić poprawność tego co napisałem, jednak zupełnie mi to nie wychodzi. Nie wiem co i jak zrobić żeby ruszyć z tym zadaniem. Poniżej wrzucam to co wyczarowałem, mam nadzieję że mnie nie zlinczujecie za błędy jakie tam są bo pewnie są to podstawowe rzeczy i bardzo łatwe jednak dopiero zaczynam przygodę z progamowaniem.

#include <iostream>
#include <cstdlib>
using namespace std;
 
int losowanie (int N, int a, int b)
{
int x,i;
 
    for (i=1; i<=N; i++)
    {
        x=(rand()%((b-a)+1))+a;
    }
 return x;
}
 
int main()
{
    int a,b,N,liczba;
    cout << "podaj:a " << endl;
    cin>>a;
    cout << "podaj:b " << endl;
    cin>>b;
    cout << "podaj:N " << endl;
    cin>>N;
    liczba=losowanie(a,b,N);
    cout<<liczba<<endl;
    return 0;
edytowany 1x, ostatnio: furious programming, 2018-04-02 19:36

Pozostało 580 znaków

2018-04-02 18:17
1

Piszesz, że chciałeś wypisać na ekranie te liczby, które losujesz - jednak nic takiego nie robisz.
Losowania dokonujesz w funkcji losowanie, gdzie nie ma żadnego wypisywania na ekran.

Sugerowałbym podejść do tematu powoli - najpierw napisz funkcję int rand_range(int from, int to), która będzie zwracać pseudolosową liczbę z zakresu <from, to>.


Pozostało 580 znaków

2018-04-02 18:21
Szybki Ryś
0

Czyli ta moja funkcja losowanie nie jest poprawnie zapisana? Tam nie zajdzie losowanie liczb z przedziału?
To wypisanie liczb na ekran miało zajść w mainie i tam miało zostać wypisane

Pozostało 580 znaków

2018-04-02 18:23
0

Zachodzi tam jakieś losowanie liczb, lecz chcę Ci pokazać, jak podejść do tego sensowniej, czytelniej oraz prościej ;-)


edytowany 1x, ostatnio: Patryk27, 2018-04-02 18:23

Pozostało 580 znaków

2018-04-02 18:38
Szybki Ryś
0

Rozumiem, jednak wymagają od nas korzystania jedynie z tego co było przedstawione na wykładach. A tam mieliśmy losowanie liczb w takiej formie jaką ja przedstawiłem.

Pozostało 580 znaków

2018-04-02 18:39
0

Rozumiesz, że nie każę Ci zmieniać samego algorytmu losowania, tylko proponuję - dla czytelności - wydzielić to do odrębnej funkcji?

Tak czy siak - bazując na tym, co masz, jest tam parę błędów:

  • nie widzę żadnego sumowania,
  • nie widzę żadnego sprawdzania parzystości.

Na czym konkretnie się zatrzymałeś?


edytowany 1x, ostatnio: Patryk27, 2018-04-02 18:39

Pozostało 580 znaków

2018-04-02 18:55
0

Twoja funkcja nie działa poprawnie ponieważ zwraca tylko jedną wartość, a ma ich zwróć N. Aby zrobić to w jednej funkcji musisz stworzyć wewnątrz tablice N-elementową i do niej wpisać wszystkie wyniki x, które wyliczasz. Na koniec przypisujesz funkcje do tablicy w metodzie main i wpisujesz wyniki w pętli for. Spróbuj sam ogarnąć to na podstawie tego co Ci napisałem to więcej zapamiętasz i zrozumiesz.

Gdzie jest napisane, aby funkcja zwracała n wartości? - Patryk27 2018-04-02 18:57
"Napisać funkcję który losuje N liczb całkowitych z przedziału <a, b> i oblicza średnią liczb" - Vens 2018-04-02 18:58
Powtórzę jeszcze raz pytanie: gdzie jest napisane, aby funkcja zwracała n wartości? - Patryk27 2018-04-02 18:59
No w sumie odwołałem się do tego że chce wypisać N liczb losowych dla sprawdzenia. - Vens 2018-04-02 19:00

Pozostało 580 znaków

2018-04-02 19:00
Szybki Ryś
0

Patryk27- zatrzymałem się na samym losowaniu drugiej części jeszcze nie ruszałem. Chciałem teraz zrobić tak że losuje N liczb i w mainie je wypisuje, chciałem to zrobić tylko dla siebie żeby sprawdzic czy liczby dobrze się losują.
Vens- nie miałem jeszcze tablic. Zaczne je dopiero na następnych zajęciach.

Pozostało 580 znaków

2018-04-02 19:01
0

Bez wykorzystania tablic możesz najwyżej te liczby wypisywać z poziomu funkcji losowanie (dopisz cout << x << endl; do pętli).


Pozostało 580 znaków

2018-04-02 19:02
Szybki Ryś
0

Okej to w takim razie porzuce ten pomysł z wypisaniem bo w sumie i tak jest to nie potrzebne. Spróbuję dopisać do tej funkcji od razu sprawdzenie przystości mojego x i liczenie średniej.

Pozostało 580 znaków

2018-04-02 19:10
0

W pętli, którą napisałeś możesz zrobić coś takiego:

  1. Wylosuj liczbę
  2. Sprawdź czy ta liczba jest nieparzysta
  3. Jeśli jest dodaj ją do zmiennej int suma
  4. Zrób zmienna np int licznik i za każdym razem jak znajdziesz nieparzystą liczbę zwiększ licznik o 1
  5. Na koniec zwróć średnią return suma/licznik

W ten sposób funkcja będzie zwracać średnia liczb nieparzystych z podanego przedziału.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0