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ść
V0ldek
Temat założony przez niniejszego użytkownika
[Lekcja 22] Problem z losowaniem bez powtórzeń
» 2012-03-12 21:51:30
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

int wylosuj( int start, int zasieg )
{
    int liczba;
   
    liczba =( rand() % zasieg ) + start;
   
    return liczba;
}

bool czyWylosowana( int t[], int liczba, int ktora )
{
    if( ktora <= 0 )
    {
        return false;
    };
   
    for( int i = 0; i < ktora; i++ )
    {
        if( t[ i ] == liczba )
        {
            return true;
        };
    }
    return false;
}

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;
        }
    }
}

void wypiszNormalnie( int t[], int ile )
{
    for( int i = 0; i < ile; i++ )
    {
        int liczba;
        liczba = t[ i ];
        int j;
        j = i;
        j++;
       
        std::cout << j << ". liczba ==> " << liczba << std::endl;
    }
}

void wypiszOdKonca( int t[], int ile )
{
    int indeks = ile;
    indeks--;
   
    for( int i = indeks; i >= 0; i-- )
    {
        int liczba;
        liczba = t[ i ];
        int j;
        j = i;
        j++;
       
        std::cout << j << ". liczba ==> " << liczba << std::endl;
    }
}

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;
        }
        else
             i++;
       
    }
}

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;
        }
        else
             i++;
       
    }
}

void wypiszMaxIMin( int t[], int ile )
{
    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;
}

int main()
{
    srand( time( NULL ) );
   
    int start;
    int stop;
    int ile;
    int zasieg;
   
    start = 10;
    stop = 30;
    ile = 10;
    zasieg =( stop - start + 1 );
   
    int tablica[ ile ];
   
    wypelnij( tablica, start, ile, zasieg );
   
    std::cout << "Liczby od poczatku:" << std::endl;
    wypiszNormalnie( tablica, ile );
   
    std::cout << "Liczby od konca:" << std::endl;
    wypiszOdKonca( tablica, ile );
   
    wypiszMaxIMin( tablica, ile );
   
    return 0;
}

Po wywołaniu, ZAWSZE jedna z liczb jest całkowicie poza zakresem, np. zamiast czegoś z 10-30 wyskakuje 2468469...
Wyszukiwanie min i max nie działa, zawsze wychodzi 0...
[EDIT]
Wiem, że losowanie nie miało być bez powtórzeń, ale ja chciałem tak, a jako że jestem uparty osioł to z tego nie zrezygnuje ;D.
P-52527
Dragonit
» 2012-03-12 22:11:44
Na pierwszy rzut oka to masz problem ze wstawianiem średników.
P-52529
V0ldek
Temat założony przez niniejszego użytkownika
» 2012-03-12 22:34:34
Eeep... Kompilator nie wyrzucił mi błędu ani nawet ostrzeżenia... Poza tym nie widzę gdzie nie ma średnika...
P-52532
Dragonit
» 2012-03-12 23:06:08
Poza tym nie widzę gdzie nie ma średnika...
wręcz odwrotnie :pp
P-52533
V0ldek
Temat założony przez niniejszego użytkownika
» 2012-03-13 14:46:03
Gdzie? Przykład?
P-52545
pekfos
» 2012-03-13 15:13:02
C/C++
if( ktora <= 0 )
{
    return false;
};
Tu nie trzeba średnika.
P-52547
V0ldek
Temat założony przez niniejszego użytkownika
» 2012-03-13 15:33:13
Czyli po if i else nie stawiać? Ok, jak wrócę do domu to sprawdzę, bo u rodziny jestem.
P-52548
V0ldek
Temat założony przez niniejszego użytkownika
» 2012-03-13 17:42:52
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>

int wylosuj( int start, int zasieg )
{
    int liczba;
   
    liczba =( rand() % zasieg ) + start;
   
    return liczba;
}

bool czyWylosowana( int t[], int liczba, int ktora )
{
    if( ktora <= 0 )
    {
        return false;
    }
   
    for( int i = 0; i < ktora; i++ )
    {
        if( t[ i ] == liczba )
        {
            return true;
        }
    }
    return false;
}

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;
        }
    }
}

void wypiszNormalnie( int t[], int ile )
{
    for( int i = 0; i < ile; i++ )
    {
        int liczba;
        liczba = t[ i ];
        int j;
        j = i;
        j++;
       
        std::cout << j << ". liczba ==> " << liczba << std::endl;
    }
}

void wypiszOdKonca( int t[], int ile )
{
    int indeks = ile;
    indeks--;
   
    for( int i = indeks; i >= 0; i-- )
    {
        int liczba;
        liczba = t[ i ];
        int j;
        j = i;
        j++;
       
        std::cout << j << ". liczba ==> " << liczba << std::endl;
    }
}

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;
        }
        else
             i++;
       
    }
}

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;
        }
        else
             i++;
       
    }
}

void wypiszMaxIMin( int t[], int ile )
{
    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;
}

int main()
{
    srand( time( NULL ) );
   
    int start;
    int stop;
    int ile;
    int zasieg;
   
    start = 10;
    stop = 30;
    ile = 10;
    zasieg =( stop - start + 1 );
   
    int tablica[ ile ];
   
    wypelnij( tablica, start, ile, zasieg );
   
    std::cout << "Liczby od poczatku:" << std::endl;
    wypiszNormalnie( tablica, ile );
   
    std::cout << "Liczby od konca:" << std::endl;
    wypiszOdKonca( tablica, ile );
   
    wypiszMaxIMin( tablica, ile );
   
    return 0;
}[ / code src = "c++P#include <iostream>
#include <cstdlib>
#include <ctime>

int wylosuj( int start, int zasieg )
{
    int liczba;
   
    liczba =( rand() % zasieg ) + start;
   
    return liczba;
}

bool czyWylosowana( int t[], int liczba, int ktora )
{
    if( ktora <= 0 )
    {
        return false;
    }
   
    for( int i = 0; i < ktora; i++ )
    {
        if( t[ i ] == liczba )
        {
            return true;
        }
    }
    return false;
}

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;
        }
    }
}

void wypiszNormalnie( int t[], int ile )
{
    for( int i = 0; i < ile; i++ )
    {
        int liczba;
        liczba = t[ i ];
        int j;
        j = i;
        j++;
       
        std::cout << j << ". liczba ==> " << liczba << std::endl;
    }
}

void wypiszOdKonca( int t[], int ile )
{
    int indeks = ile;
    indeks--;
   
    for( int i = indeks; i >= 0; i-- )
    {
        int liczba;
        liczba = t[ i ];
        int j;
        j = i;
        j++;
       
        std::cout << j << ". liczba ==> " << liczba << std::endl;
    }
}

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;
        }
        else
             i++;
       
    }
}

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;
        }
        else
             i++;
       
    }
}

void wypiszMaxIMin( int t[], int ile )
{
    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;
}

int main()
{
    srand( time( NULL ) );
   
    int start;
    int stop;
    int ile;
    int zasieg;
   
    start = 10;
    stop = 30;
    ile = 10;
    zasieg =( stop - start + 1 );
   
    int tablica[ ile ];
   
    wypelnij( tablica, start, ile, zasieg );
   
    std::cout << "Liczby od poczatku:" << std::endl;
    wypiszNormalnie( tablica, ile );
   
    std::cout << "Liczby od konca:" << std::endl;
    wypiszOdKonca( tablica, ile );
   
    wypiszMaxIMin( tablica, ile );
   
    return 0;
}

Ciągle to samo, usunąłem średniki i nic.
P-52553
« 1 » 2
  Strona 1 z 2 Następna strona