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

[c++]Program losujący liczby z podanych zmiennych

Ostatnio zmodyfikowano 2015-10-29 09:46
Autor Wiadomość
Euvarios
Temat założony przez niniejszego użytkownika
[c++]Program losujący liczby z podanych zmiennych
» 2015-10-28 23:55:22
Witam, siedziałem dzisiaj przy kursie i doszedłem do tematu o losowaniu niepowtarzających się liczb całkowitych. Stworzyłem programik, jednak ten wysypuje się pod koniec. Przy kompilacji nie było problemów, te zaczynają się gdy ma wypisać wylosowane przez niego liczby. Próbowałem na kilka sposobów i gdy myślałem ,że ten jest najlepszy ponownie mi się wysypał. Zdecydowałem, że sam nie znajdę błędu i potrzebuję osób bardziej spostrzegawczych. Poniżej znajduje się kodzik. Chciałbym prosić o wyróżnienie wadliwej części, napisanie czemu jest ona wadliwa oraz jak najlepiej ją poprawić.

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

int przypisywanie( int tablica[], int ile )
{
    int i = 0;
    std::cout << "Podaj 3 liczby:" << std::endl;
    do
    {
        std::cin >> tablica[ i ];
        i++;
    } while( i < ile );
   
}

int losowanie()
{
    return( std::rand() % 3 ) + 0;
}

bool sprawdzanie_czy_byla( int wylosowane, int wylosowana[], int liczba )
{
    if( wylosowane = 0 )
         return false;
   
    int i = 0;
    do
    {
        if( wylosowana[ i ] == liczba )
             return true;
       
        i++;
       
    } while( i < wylosowane );
   
    return false;
   
}

int main()
{
    srand( time( 0 ) );
    int tablica[ 3 ];
    int wylosowane = 0;
    int wylosowana[ 2 ];
    int liczba;
    przypisywanie( tablica, 3 );
   
    do
    {
        liczba = losowanie();
        if( sprawdzanie_czy_byla( wylosowane, wylosowana, liczba ) == false )
        {
            liczba = wylosowana[ wylosowane ];
            wylosowane++;
        }
       
    } while( wylosowane < 2 );
   
    wylosowane = 0;
   
    do
    {
        std::cout << "Wylosowane liczby to:" << std::endl;
        std::cout << tablica[ wylosowana[ wylosowane ] ] << std::endl;
        wylosowane++;
       
    } while( wylosowane < 2 );
   
}
P-139320
carlosmay
» 2015-10-29 00:08:24
liczba = wylosowana[ wylosowane ];
 tu jest ten błąd.

C/C++
int przypisywanie( int tablica[], int ile )
{
    int i = 0;
    std::cout << "Podaj 3 liczby:" << std::endl;
    do
    {
        std::cin >> tablica[ i ];
        i++;
    } while( i < ile );
   
}
 a ta funkcja ma nieprawidłowy typ zwracanej wartości.
P-139321
michal11
» 2015-10-29 00:11:29
W zasadzie to twój kod, w szczególności pierwsza pętla, nie robi nic istotnego. Co chciałeś osiągnąć ?
Twój program wyrzuca błąd ponieważ w tym miejscu:
std::cout << tablica[ wylosowana[ wylosowane ] ] << std::endl;
 odwołujesz się do jakiegoś losowego miejsca w pamięci. Zmienne w tablicy wylosowane są zainicjowane losowymi wartościami, a ty ich w swoim programie nigdzie nie nadpisujesz, dokładniej nigdzie nie wpisujesz żadnych danych do tej tablicy czyli przykładowo powyższa linijka może wyglądać tak :
std::cout << tablica[ 156646951 ] << std::endl;
. Dodatkowo, nie wiem czy tak miało być ale druga pętla wypiszy tylko 2 pierwsze z wszytkich 3 elementów tablicy "tablica".
P-139322
Euvarios
Temat założony przez niniejszego użytkownika
» 2015-10-29 07:23:23
W zasadzie po tym jak zamieniłem linijkę:
liczba = wylosowana[ wylosowane ];
 na
wylosowana[ wylosowane ] = liczba;
to program zaczął działać... Ogólnie program powinien wylosować n z x liczb podanych przez użytkownika (nie powtarzając ich), na początek jako n wybrałem 3 a x 2. Po tej zmianie program działa jak należy. W odniesieniu do komentarza pierwszego, możesz wyjaśnić czemu pierwsza funkcja zwraca wg Ciebie nieprawidłowy typ wartości. jaki powinien być zamiast tej?
P-139326
carlosmay
» 2015-10-29 09:46:42
Funkcja nie zwraca wartości, czyli void
P-139329
« 1 »
  Strona 1 z 1