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

[Kurs C++, Lekcja 21] Problem zadanie 2

Ostatnio zmodyfikowano 2014-03-04 21:05
Autor Wiadomość
piter990
Temat założony przez niniejszego użytkownika
[Kurs C++, Lekcja 21] Problem zadanie 2
» 2014-03-04 17:46:51
Witam
mam problem z zadaniem 2 z lekcji z kursu. Napisałem taki program do losowania liczb bez powtórzeń:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;
bool sprawdz( int liczba, int * Wpr_liczba, int rozm )
{
    if( rozm <= 0 )
         return false;
   
    int i = 0;
    while( i < rozm )
    {
        if( Wpr_liczba[ i ] == liczba )
             return true;
       
        i++;
    }
    return false;
}
int wprowadz( int * Wpr_liczba, int rozm )
{
    int i = 0;
    cout << "Wprowadz 10 liczby:\n";
    while( i < rozm )
    {
        cin >> Wpr_liczba[ i ];
        i++;
    }
   
    cout << "\n";
    return * Wpr_liczba;
}
int losuj( int * Wpr_liczba, int rozm )
{
    int los = Wpr_liczba[ rand() %( rozm ) ];
    return los;
}
int main()
{
    srand( time( 0 ) );
    int tab[ 10 ];
    wprowadz( tab, 10 );
    int i = 0;
   
   
    do
    {
        int los = losuj( tab, 10 );
        if( sprawdz( los, tab, i ) == false )
        {
            tab[ i ] = los;
            i++;
        }
        else if( tab[ i ] == tab[ i + 1 ] )
             return 0;
       
       
       
    } while( i < 8 );
   
   
   
   
    cout << "Wylosowano liczby:\n";
    i = 0;
    while( i < 8 )
    {
        cout <<( i + 1 ) << ") " << tab[ i ] << "\n";
        i++;
    }
   
   
   
    return 0;
}

Problem polega na tym że jak zadeklaruje aby z 3 wprowadzonych liczb wylosował 2 bez powtórzeń jest ok przy 10 program się wstrzymuje próbując coś wyliczyć jednak nie daje żadnego efektu końcowego.

z góry dziękuje za pomoc
P-105636
leon_w
» 2014-03-04 18:21:19
Musisz utworzyć drugą tablicę, dla wylosowanych i sprawdzonych już liczb, i tą tablicę wysyłać do funkcji sprawdz().
Teraz teraz losujesz liczbę z tablicy tab[], i sprawdzasz czy wylosowana liczba jest w tej że tablicy (no skoro z niej została wylosowana, to na pewno w  niej jest).

A do czego ma służyć to:
C/C++
else if( tab[ i ] == tab[ i + 1 ] )
     return 0;
??
P-105639
piter990
Temat założony przez niniejszego użytkownika
» 2014-03-04 18:46:33
W odpowiedzi na pytanie ta linijka ma kończyć program jeśli wpiszesz same identyczne liczby, co do tej tablicy to próbowałem, losowanie przypisywałem do tablicy która później była wrzucona do funkcji sprawdz() jednak wynikiem tego było to że program losował z powtórzeniami co nie jest moim zamierzeniem
P-105640
leon_w
» 2014-03-04 19:07:59
Podaj ten kod z dwiema tablicami, zobaczymy co w nim nie tak. U mnie po dodaniu drugiej tablicy wszystko ładnie śmiga.
P-105643
piter990
Temat założony przez niniejszego użytkownika
» 2014-03-04 19:58:01
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <string>

using namespace std;
bool sprawdz( int * liczba, int * Wpr_liczba, int rozm )
{
    if( rozm <= 0 )
         return false;
   
    int i = 0;
    while( i < rozm )
    {
        if( Wpr_liczba[ i ] == liczba[ i ] )
             return true;
       
        i++;
    }
    return false;
}
int wprowadz( int * Wpr_liczba, int rozm )
{
    int i = 0;
    cout << "Wprowadz 10 liczby:\n";
    while( i < rozm )
    {
        cin >> Wpr_liczba[ i ];
        i++;
    }
   
    cout << "\n";
    return * Wpr_liczba;
}
int losuj( int * Wpr_liczba, int rozm )
{
    int los = Wpr_liczba[ rand() %( rozm ) ];
    return los;
}
int main()
{
    srand( time( 0 ) );
    int tab[ 10 ];
    wprowadz( tab, 10 );
    int i = 0;
   
    int los[ 10 ]; // dodana tablica
   
    do
    {
        los[ i ] = losuj( tab, 10 );
       
        if( sprawdz( tab, los, i ) == false )
        {
            tab[ i ] = los[ i ];
            i++;
        }
        else if( tab[ i ] == tab[ i + 1 ] )
             return 0;
       
       
       
    } while( i < 8 );
   
   
   
   
    cout << "Wylosowano liczby:\n";
    i = 0;
    while( i < 8 )
    {
        cout <<( i + 1 ) << ") " << tab[ i ] << "\n";
        i++;
    }
   
    return 0;
}

Trochę się nie zrozumieliśmy z tą tablica bo po przeczytaniu Twojego postu zastanowiłem się nad Twoimi radami jeszcze raz i utworzyłem coś takiego co jest kolejnym strzałem w kolano, mniej więcej wiem o co Ci chodzi jednak mam problem z napisaniem tego w kodzie ponieważ najwidoczniej nie wiem w którym fragmencie kodu utworzyć tą tablice i jak ją zastosować
P-105646
piter990
Temat założony przez niniejszego użytkownika
» 2014-03-04 21:05:28
już wpadłem na właściwe rozwiązanie, jakoś słabo domyślny byłem w Twojej wypowiedzi, faktycznie problem był prosty i wystarczyła dodatkowa tablica, dzięki za pomoc

zamykam temat ;)
P-105655
« 1 »
  Strona 1 z 1