losowanie liczb

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;
}```````
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.

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;
    }

}
``
0

przy wywołaniu funkcji jest ustalone

wylosujLiczby(tablica, 999, 4, 10);

1

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

3

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/

0

Ok teraz rozumiem dzięki za pomoc :D

3

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

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