Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[C++]Błąd przy losowaniu liczb


Rekomendowane odpowiedzi

Opublikowano
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
#
Witam.
Kod kompiluje sie prawidłowo jednak po wykonaniu programowi zdarza się wylosować liczbę nie z przedziału.
Przykładowe wyjście:

5,
8,
0,
2686916,
4,
Kod programu:
#include <iostream>
#include <cstdlib>
#include <ctime>

// losuje liczbe z podanego przedzialu
int wylosuj(int poczatek, int koniec)
{
    return ( (rand() % (koniec  - poczatek)) + poczatek );
}

// sprawdzam czy wylosowana liczba juz sie gdzies nie powtorzyla w tablicy
bool randomCheck (int liczba, int t_name[], int t_lenght)
{
    if (t_lenght <= 0) return true;

    for (int i = 0; i < t_lenght; i++) {
        if (t_name[i] == liczba)
            return false;
    }

    return true;

}

// Main
int main()
{
    srand(time(0)); // resetuje ziarno generatora

    int tablicaLiczb [5];
    int liczba = 0;

    // główna pętla przypisująca liczby do tablicy
    for (int i = 0; i < 5; i++) {
        liczba = wylosuj(0, 10);
        if (randomCheck(liczba, tablicaLiczb, i))
            tablicaLiczb[i] = liczba;
    };

    // pętla do wypisania zawartości tablicy
    for (int i = 0; i < 5; i++) {
        std::cout << tablicaLiczb[i] << ", " << std::endl;
    }

    return 0;
}
Any suggestions?
Opublikowano

Rozwiązane.

 

Pętla pomijała miejsca w tablicy, gdzie liczby się powtarzały.

Prawidłowy kod głównej pętli wygląda tak:

    for (int i = 0; i < 5; i++) {
        do liczba = wylosuj(0, 10);
        while (randomCheck(liczba, tablicaLiczb, i));

        tablicaLiczb[i] = liczba;
    };
Opublikowano

Ja bym ten program napisal w tym stylu :

#include <iostream>
#include <time.h>
#include <cstdlib>

int liczba;

using namespace std;

int main()
{
    srand(time(NULL));
    liczba = rand()%100+1; // od 1 do 99 losuje
    cout << "Pseudolosowa liczba to : "<<liczba;
    return 0;
}

Opublikowano

K, tylko moim zadaniem nie było napisanie wylosowania jednej liczby z przedziału, tylko wypełnienie tablicy losowymi, niepowtarzającymi się liczbami.

Opublikowano

to wystarczyło by wo programu @ObeyTheLaw dodać tablice o ilości danych x i instrukcje warunkowa "if", to nie takie trudne,

A takie pytanie, komentarze dodawałeś sam sobie czy "głupim" użytkownikom czytających te forum?

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...