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

lekcja21 program ma losować bez powtórzeń z 3 wybranych liczb ale losuje liczby z innego zakresu

Ostatnio zmodyfikowano 2017-03-18 10:16
Autor Wiadomość
czajo5
Temat założony przez niniejszego użytkownika
lekcja21 program ma losować bez powtórzeń z 3 wybranych liczb ale losuje liczby z innego zakresu
» 2017-03-14 23:18:41
witam mam taki problem jak opisałem w tytule. Jeżeli ktoś mógłby mi powiedzieć gdzie tkwi błąd byłbym wdzięczny ( podkreślam , że jestem naprawdę początkujący)



   #include <iostream>
#include <cstdlib>
#include <ctime>
int wpisujemy( int wybrana[] , int rozmiar )
{
   int x = 0;
   do
   {
    std::cout << "podaj" << x + 1 << "liczbe" << std::endl;
        std::cin >> wybrana[x];
        x++;
    }while( x < rozmiar );
    return wybrana[rozmiar];
}
bool sprawdzam_czy_wylosowana( int kandydat ,int wylosowana[] , int rozmiar )
{
if ( rozmiar <= 0 )
return false;
int ile = 0;
do
{
    if( kandydat == wylosowana[ ile] )
    return true;
    ile++;
}while( ile < rozmiar);
return false;
}
int losuj( int wylosowana[] )
{
   return wylosowana[ rand() % 3 ];
}
int main()
{
    srand(time(NULL));
    int wybrana[3];
    int wylosowana[2];
    wybrana[3] = wpisujemy( wybrana , 3 );
   int x ;
    int los;
    do
    {
    los = losuj( wybrana);
    if( sprawdzam_czy_wylosowana( los , wylosowana , x ) == false )
    {
    los = wylosowana[ x ];
    x++;
    }
    }while( x < 2);
    x = 0;
    do
    {
        std::cout << wylosowana[ x ] << ",";
        x++;
    }while( x < 2 );
    return 0;
}
P-159008
maly7
» 2017-03-15 02:00:13
C/C++
int losuj( int wylosowana[] )
{
    return wylosowana[ rand() % 3 ];
}

Ty wcale nie losujesz tutaj liczby która później będzie pobierana tylko zwracasz losowy element tablicy 0, 1 lub 2, a tablica wylosowana ma tylko 2 elementy. Nie masz tutaj żadnego innego losowania.
P-159014
czajo5
Temat założony przez niniejszego użytkownika
» 2017-03-15 07:45:35
maly7 - taki mialem zamiar, że w połączeniu z tą pętlą będzie ni wybierało 2 liczby z tablicy wybrana[] ma 3 elementy ale przypisuje jakieś duże liczby


 
C/C++
do
{
    los = losuj( wybrana );
    if( sprawdzam_czy_wylosowana( los, wylosowana, x ) == false )
    {
        los = wylosowana[ x ];
        x++;
    }
} while( x < 2 );

P-159016
maly7
» 2017-03-15 09:44:05
Nigdzie nie nadajesz wartości elementom tablicy wylosowana (albo nie zauważyłem) a je pobierasz.
I jak pisałem, masz kod wylosowana [rand%3] wiec może wyjść z tego wylosowana[2] a nie ma takiego elementu tej tablicy, maksymalny element to wylosowana[1] bo ma dwa elementy.

Kolejna rzecz, wybrana[3] = wpisujemy( wybrana , 3 ); nie możesz odwołać się do wybrana[3] bo nie ma takiego elementu, a nawet jeśli dasz wybrana[2] = wpisujemy( wybrana , 3 ); to wypełni ci tylko ostatni element a nie całą tablice. Jeśli chcesz edytować tablice w funkcji, przekaż ją po prostu jako wskaźnik w argumencie.
@
Popraw na razie te rzeczy, bo to są podstawy i później można myśleć dalej.
P-159018
czajo5
Temat założony przez niniejszego użytkownika
» 2017-03-16 23:54:59
więc po poprawkach został mi jeden problem prawdopodobnie ze sprawdzeniem czy nie ma powtórzenia i dlatego nie przypisuje do tablicy wybrane jakiś kosmos
podaj1liczbe
0
podaj2liczbe
1
podaj3liczbe
2
podaj4liczbe
3
podaj5liczbe
4
podaj6liczbe
5
podaj7liczbe
6
podaj8liczbe
7
podaj9liczbe
8
podaj10liczbe
9
twoje liczby to--0
twoje liczby to--1
twoje liczby to--2
twoje liczby to--3
twoje liczby to--4
twoje liczby to--5
twoje liczby to--6
twoje liczby to--7
twoje liczby to--8
twoje liczby to--9
2,
9,
2,
2,
5,
6,
3,
8,
twoje liczby to---2
twoje liczby to--1959334242
twoje liczby to--1959680964
twoje liczby to--4273392
twoje liczby to--2686760
twoje liczby to--4273494
twoje liczby to--4273392
twoje liczby to--7421136

Process returned 0 (0x0)   execution time : 17.684 s
Press any key to continue.
a tutaj kod po zmianach
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
int wpisujemy( int wybrana[], int rozmiar )
{
    int x = 0;
    do
    {
        std::cout << "podaj" << x + 1 << "liczbe" << std::endl;
        std::cin >> wybrana[ x ];
        x++;
    } while( x < rozmiar );
   
    return wybrana[ rozmiar ];
}
void wypisz( int tab[], int rozmiar )
{
    int i = 0;
    do
    {
        std::cout << "twoje liczby to--" << tab[ i ] << std::endl;
        i++;
    } while( i < rozmiar );
   
}
bool sprawdzam_czy_wylosowana( int kandydat, int wylosowana[], int rozmiar )
{
    if( rozmiar <= 0 )
         return false;
   
    int ile = 0;
    do
    {
        if( kandydat == wylosowana[ ile ] )
             return true;
       
        ile++;
    } while( ile < rozmiar );
   
    return false;
}
int losuj( int wylosowana[], int n )
{
    return wylosowana[ rand() % n ];
}
int main()
{
    srand( time( 0 ) );
    int wybrana[ 10 ];
    int wylosowana[ 8 ];
    wpisujemy( wybrana, 10 );
    wypisz( wybrana, 10 );
    int x = 0;
    int los;
    do
    {
        los = losuj( wybrana, 10 );
        std::cout << los << "," << std::endl; // wypisze kazde losowanie
        if( sprawdzam_czy_wylosowana( los, wylosowana, x ) == false )
        {
            los = wylosowana[ x ];
            x++;
        }
    } while( x < 8 );
   
    wypisz( wylosowana, 8 );
    return 0;
}
jakieś wskazówki
P-159056
mateczek
» 2017-03-17 08:07:41
C/C++
int losuj( int wylosowana[], int n )
{
    return wylosowana[ rand() % n ]; // co to w ogóle ma robić ??
}

// a tego to już wogóle nie kumam
if( sprawdzam_czy_wylosowana( los, wylosowana, x ) == false )
{
    los = wylosowana[ x ]; // przypisujesz do zmiennej tymczasowej los liczbę z tablicy, w której nic nie ma
    x++;
}

do testów zmień sobie deklaracje tablicy wylosowana na taką
C/C++
int wylosowana[ 8 ] { 0 }; // dodaj to zero w klamrach
P-159059
czajo5
Temat założony przez niniejszego użytkownika
» 2017-03-17 14:34:40
dziękuję bardzo za pomoc już działa był bardzo prosty błąd napisałem los = wylosowana[x] , a powinno być wylosowana[x] = los teraz działa. A tak gwoli odpowiedzi na ostatni post
C/C++
int losuj( int wylosowana[], int n )
{
    return wylosowana[ rand() % n ];
}
int main()
ma losować liczbe z zakresu n ,który podaję przez zmienną n
a to
C/C++
los = losuj( wybrana, 10 );
std::cout << los << "," << std::endl;
if( sprawdzam_czy_wylosowana( los, wylosowana, x ) == false )
{
    wylosowana[ x ] = los;
    x++;
}
} while( x < 8 );

w połączeniu z tym
C/C++
bool sprawdzam_czy_wylosowana( int kandydat, int wylosowana[], int rozmiar )
{
    if( rozmiar <= 0 )
         return false;
   
    int ile = 0;
    do
    {
        if( kandydat == wylosowana[ ile ] )
             return true;
       
        ile++;
    } while( ile < rozmiar );
   
    return false;
}
ma losować bez powtórzeń.Dzięki jeszcze raz za pomoc
P-159063
mateczek
» 2017-03-17 16:30:22
wpisz do tablicy cztery takie same liczby
P-159067
« 1 » 2
  Strona 1 z 2 Następna strona