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

[Lekcja 22] Problem z losowaniem bez powtórzeń

Ostatnio zmodyfikowano 2012-03-16 20:27
Autor Wiadomość
Fabjan94
» 2012-03-13 21:51:42
Problem polega na tym, że w funkcji:
C/C++
void wypelnij( int t[], int start, int ile, int zasieg )
{
    int liczba;
   
    for( int i = 0; i < ile; i++ )
    {
        liczba = wylosuj( start, zasieg );
       
        if( czyWylosowana( t, liczba, i ) == false )
        {
            t[ i ] = liczba;
        }
    }
}

Jak funkcja czyWylosowana zwróci true to nie wpisuje żadnej wartość do tablicy więc program ustawia ją sam. najlepszym "jak dla mnie" sposobem jest:
C/C++
void wypelnij( int t[], int start, int ile, int zasieg )
{
    int liczba;
   
    for( int i = 0; i < ile; i++ )
    {
        liczba = wylosuj( start, zasieg );
        if( czyWylosowana( t, liczba, i ) == false )
        {
            t[ i ] = liczba;
        }
        else
             i--;
       
    }
}

Oczywiście pozostało Ci jeszcze ustawić by losowała najmniejszą i największą wartość i mógłbyś poprawić w jakiś sposób kod by był "ładniejszy" ;)
P-52566
V0ldek
Temat założony przez niniejszego użytkownika
» 2012-03-14 15:55:09
Dobra, naprawiłem, teraz losuje dobrze, ale w ogóle nie wyświetla liczby maksymalnej i min, nawet tego tekstu... I nie mogę znaleźć błędu.
C/C++
bool czyMax( int t[], int indeks1, int indeksMax )
{
    int indeks2;
    indeks2 = 0;
   
    for( int i = 0; i < 1; i++ )
    {
        if( t[ indeks1 ] <= t[ indeks2 ] )
        {
            return false;
        }
        else
        {
            if( indeks2 == indeksMax )
            {
                return false;
            }
        }
    }
   
    return true;
}

bool czyMin( int t[], int indeks1, int indeksMax )
{
    int indeks2;
    indeks2 = 0;
   
    for( int i = 1; i > 0; i++ )
    {
        if( t[ indeks1 ] >= t[ indeks2 ] )
        {
            return false;
        }
        else
        {
            if( indeks2 == indeksMax )
            {
                return false;
            }
        }
    }
   
    return true;
}

int znajdzMax( int t[], int ile )
{
    int liczba;
   
    for( int i = 0; i < ile; i++ )
    {
        liczba = t[ i ];
        if( czyMax( t, i, ile ) == true )
        {
            return liczba;
        }
    }
   
    return liczba;
}

int znajdzMin( int t[], int ile )
{
    int liczba;
   
    for( int i = 0; i < ile; i++ )
    {
        liczba = t[ i ];
        if( czyMin( t, i, ile ) == true )
        {
            return liczba;
        }
    }
   
    return liczba;
}

void wypiszMaxIMin( int t[], int ile ) //Tu chyba jest dobrze
{
    int max = znajdzMax( t, ile );
    int min = znajdzMin( t, ile );
   
    std::cout << "Najwieksza liczba to: " << max << std::endl;
    std::cout << "Najmniejsza liczba to: " << min << std::endl;
}
P-52599
Fabjan94
» 2012-03-15 16:40:46
Jak chcesz to moge sie tym zająć ale dopiero w jutro wieczorem. Dziś jedynie mogę Ci zamieścić jak ja to zrobiłem, ale trochę inaczej więc nie wiem jakie korzyści z tego będą jak nie dowiesz się gdzie masz błąd :)
P-52641
V0ldek
Temat założony przez niniejszego użytkownika
» 2012-03-15 17:31:39
Będę wdzięczny za każdą pomoc, ale wydaje mi się, że lepiej będzie jak znajdę tu błąd. Ja nad tym siedzę codziennie i... chyba po prostu za głupi jestem ;D
P-52645
Fabjan94
» 2012-03-15 18:08:27
To poczytaj sobie do jutra wcześniejsze lekcje, bo tak jak pisałem w tygodniu jedynie mam kilka minut dziennie kompa z netem i bez kompilatora.


Po przerobieniu kodu wygląda on tak:
C/C++
int znajdzMax( int t[], int ile )
{
    int liczba = 10;
   
    for( int i = 0; i < ile; i++ )
    {
       
        if( t[ i ] > liczba )
             liczba = t[ i ];
       
    }
    return liczba;
}

int znajdzMin( int t[], int ile )
{
    int liczba = 30;
   
    for( int i = 0; i < ile; i++ )
    {
        if( liczba > t[ i ] )
             liczba = t[ i ];
       
    }
    return liczba;
}

void wypiszMaxIMin( int t[], int ile )
{
    std::cout << "Najwieksza liczba to: " << znajdzMax( t, ile ) << std::endl;
    std::cout << "Najmniejsza liczba to: " << znajdzMin( t, ile ) << std::endl;
}

Co zrobiłem? Na początek usunąłem 2 funkcję czyMin i czyMax ponieważ one były nie potrzebne, bo i tak wszystko robimy w jednej. Po drugie dla zmiennej
liczba
 w zależności czy szukamy min czy max przyjąłem odpowiednią wartość :) Oczywiście, żeby kod był jeszcze ładniejszy możesz dla funkcji
znajdzMax
 i
znajdzMin
 przyjąć trzy argumenty
( int t[], int ile, int liczba )
 przy czym przy wywoływaniu wypisywałbyś
*
znajdzMax( t, ile, start )

*
znajdzMax( t, ile, stop )
P-52647
V0ldek
Temat założony przez niniejszego użytkownika
» 2012-03-16 20:27:31
Ok, sądzę, że ogarniam kod. Nadal nie rozumiem czemu tamten kod nie działał, ale wielkie dzięki za pomoc, teraz spróbuję napisać ten program od początku, aż opanuję to do perfekcji, a potem biorę się za dalszą część kursu.
P-52720
1 « 2 »
Poprzednia strona Strona 2 z 2