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

praca domowa z roz 21 - losowanie bez powtorzen

Ostatnio zmodyfikowano 2011-04-23 23:55
Autor Wiadomość
greenhouse
Temat założony przez niniejszego użytkownika
praca domowa z roz 21 - losowanie bez powtorzen
» 2011-04-18 16:11:57
Program ma losować 2 liczby spośród 3 podanych przez użytkownika, jednak te wylosowane liczby są wybierane z całego zbioru liczb całkowitych. Gdzie tu jest błąd?

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

int wpisz( int a[], int i )
{
    do
    { std::cin >> a[ i ];
        i++;
    } while( i < 3 );
   
}

int losowanie( int tab[], int ile )
{
    do
    {
        tab[ ile ] = rand();
        ile++;
    } while( ile < 2 );
   
}

bool czybylawylosowana( int a, int tab[], int ile )
{
    if( ile < 1 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i ] == a )
             return true;
       
        i++;
    } while( i < ile );
   
    return false;
}

int wypisz( int a[], int i )
{
    do
    {
        std::cout << a[ i ] << " ,";
        i++;
    } while( i < 2 );
   
}


int main()
{
    srand( time( 0 ) );
   
    int liczba[ 3 ];
    int licznik = 0;
   
    wpisz( liczba, licznik );
   
   
    do
    {
        int wylosowana = losowanie( liczba, licznik );
        if( czybylawylosowana( wylosowana, liczba, licznik ) == false )
        {
            liczba[ licznik ] = wylosowana;
            licznik++;
        }
    } while( licznik <= 2 );
   
    std::cout << "Wylosowano: ";
   
    licznik = 0;
    wypisz( liczba, licznik );
   
    return 0;
}
P-31110
pekfos
» 2011-04-18 16:16:20
licznik jest przekazywany przez wartość. jeśli gdzieś go później używasz to napraw to. jeśli nie, to uczyń go lokalnym.
P-31112
greenhouse
Temat założony przez niniejszego użytkownika
» 2011-04-18 16:25:24
Jestem mocno początkujący, więc nie bardzo rozumiem co do mnie napisałeś.

Mógłbyś wskazać co zmienić w kodzie (lub jeszcze lepiej sam go zmienić)?
P-31113
pekfos
» 2011-04-18 16:29:41
C/C++
int wpisz( int a[], int i )
{
    do
    { std::cin >> a[ i ];
        i++;
    } while( i < 3 );
   
}
zmień na to
C/C++
int wpisz( int a[] ) {
    for( int i = 0; i < 3; ++i ) std::cin >> a[ i ];
   
}

może jest to niezwiązane z problemem (nie mam czasu twego kodu czytać) ale takie rozwiązanie zabezpiecza przed zbędnym bałaganem w kodzie.

to samo zrób z innymi funkcjami. kod będzie łatwiejszy w sprawdzaniu.
P-31114
greenhouse
Temat założony przez niniejszego użytkownika
» 2011-04-18 17:01:07
Ok to jak ktoś miałby chwilę to prosiłbym o przejrzenie kodu.

Nie wiem jak się używa pętli 'for', więc nie chcę bezmyślnie zmieniać kodu, chciałbym zrozumieć co jest źle w tym co napisałem.

Ale oczywiście jestem wdzięczny za uwagi Pekfos.
P-31122
DejaVu
» 2011-04-18 17:20:20
Porównaj sobie swoją funkcję czybylawylosowana do funkcji wypisz. Zwróć uwagę na zmienną
i
.
P-31124
greenhouse
Temat założony przez niniejszego użytkownika
» 2011-04-18 18:37:53
Zmieniłem to co wydawało mi się błędne, ale wciąż nie działa..
Kod poniżej. Jakieś dalsze wskazówki?

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

int wpisz( int a[], int i )
{
    do
    {
        std::cin >> a[ i ];
        i++;
    } while( i < 3 );
   
}

int losowanie( int tab[], int i )
{
    do
    {
        tab[ i ] = rand();
        i++;
    } while( i < 2 );
   
}

bool czybylawylosowana( int a, int tab[], int i )
{
   
    if( tab[ i ] == a )
         return true;
   
    else
         return false;
   
}

int wypisz( int a[], int i )
{
    do
    {
        std::cout << a[ i ] << " ,";
        i++;
    } while( i < 2 );
   
}


int main()
{
    srand( time( 0 ) );
   
    int liczba[ 3 ];
    int licznik = 0;
   
    wpisz( liczba, licznik );
   
   
    do
    {
        int wylosowana = losowanie( liczba, licznik );
        if( czybylawylosowana( wylosowana, liczba, licznik ) == false )
        {
            liczba[ licznik ] = wylosowana;
            licznik++;
        }
    } while( licznik <= 2 );
   
    std::cout << "Wylosowano: ";
   
    licznik = 0;
    wypisz( liczba, licznik );
   
    return 0;
}

P-31155
DejaVu
» 2011-04-18 19:15:43
P-31166
« 1 » 2 3
  Strona 1 z 3 Następna strona