losowanie liczb

Odpowiedz Nowy wątek
2019-12-20 12:02
0

Witam napisałem sobie taki program który powinien losować liczby z zakresu od 4-10 a czasami występują liczby powyżej liczby 10 takie jak 11, 12 , 13 itp ? Chciałbym się zapytać dlaczego tak się dzieje skoro ustaliłem liczby w zakresie na 10?


#include<iostream>
#include<cstdlib>
#include <ctime>

using namespace std;

void wylosujLiczby(int tab[], int ile, int zakres1, int zakres2)
{
    srand(time(NULL));
    for (int i = 0; i <= ile; i++)
    {
        tab[i] = (rand()%zakres2)+zakres1;
    }

}

void wypiszLiczby(int tab[], int ile)
{
    for (int i = 0; i <= ile; i++)
    {
        cout << tab[i] << " ";
    }

}

int obliczSume(int tab[], int ile)
{
    int suma = 0;
    for (int i = 0; i <= ile; i++)
    {
        suma += tab[i];

    }
    return suma;
}

int main()
{

    int tablica[999];
    wylosujLiczby(tablica, 999, 4, 10);
    wypiszLiczby(tablica, 999);
    int iSuma = obliczSume(tablica, 999);

    cout << "Suma liczb wynosi: " << iSuma << endl;

    return 0;
}```````
edytowany 2x, ostatnio: Kamil Piróg, 2019-12-20 12:06
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.9998666) - Tasmanian Devil 2019-12-20 12:04

Pozostało 580 znaków

2019-12-20 12:07
5

powinien losować liczby z zakresu od 4-10

Wskaż fragment kodu, który to u Ciebie oblicza :-)

Btw, srand() powinieneś wołać tylko raz (np. na początku main()a), choć to akurat nie jest związane z Twoim problemem.


edytowany 2x, ostatnio: Patryk27, 2019-12-20 12:08

Pozostało 580 znaków

2019-12-20 12:09
0

void wylosujLiczby(int tab[], int ile, int zakres1, int zakres2)
{
    srand(time(NULL));
    for (int i = 0; i <= ile; i++)
    {
        tab[i] = (rand()%zakres2)+zakres1;
    }

}
``

Pozostało 580 znaków

2019-12-20 12:10
0

przy wywołaniu funkcji jest ustalone

wylosujLiczby(tablica, 999, 4, 10);

Pozostało 580 znaków

2019-12-20 12:10
1

Oki, to teraz: jaki zakres (min / max) będzie miało samo rand()%zakres2?


Pozostało 580 znaków

2019-12-20 12:15

Bo masz źle w tym miejscu:

tab[i] = (rand()%zakres2)+zakres1;

Skoro:
zakres1 = 4 ; // rozumiem, że to dolny próg przedziału z 4 włącznie
zakres2 = 10 ; // to górny zakres z 10 włącznie

Powinno być nowaLiczba = zakres1 + rand() % ( zakres2 - zakres1 + 1 ) ;

http://www.cplusplus.com/reference/cstdlib/rand/


Projektowanie i programowanie. Hobbystycznie elektronika i audio oszołom.
edytowany 1x, ostatnio: katakrowa, 2019-12-20 12:17

Pozostało 580 znaków

2019-12-20 12:22
0

Ok teraz rozumiem dzięki za pomoc :D

Pamiętaj o porozdawaniu łapek w górę oraz zafajkowaniu najbardziej pomocnego postu - oznacza to temat symbolicznie jako zakończony. - Patryk27 2019-12-20 12:23

Pozostało 580 znaków

2019-12-20 13:03
kq
2

https://dsp.krzaq.cc/post/180/nie-uzywaj-rand-cxx-ma-random/ zamiast się zamęczać z rand().


Pozostało 580 znaków

2019-12-21 12:50
3

@Kamil Piróg: We wszystkich pętlach wychodzisz poza zakres - off by one error


Wole wizerunek z nożem w zębach, przejść po trupie
Niż zgrywać ćwierćinteligenta z piórkiem w d.

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