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

[Rozdział 21] Zadanie 1

Ostatnio zmodyfikowano 2015-11-24 23:11
Autor Wiadomość
Matis28
Temat założony przez niniejszego użytkownika
[Rozdział 21] Zadanie 1
» 2015-11-24 19:59:09
Cześć! Mam problem z pierwszym zadaniem z tego rodziału. oto mój kod:
C/C++
#include <iostream>
#include <ctime>


using namespace std;

void wczytaj( int podane[] )
{
    int i = 0;
    int a = 1;
    do {
        cout << "podaj " << a << " liczbe" << endl;
        cin >> podane[ i ];
        a++;
        i++;
       
    } while( i != 3 );
   
}


bool sprawdz( int tab[], int iwylosowane, int wylosowana )
{
    int i = 0;
    if( iwylosowane <= 0 )
    {
        return false;
    }
    do
    {
        if( tab[ i ] == wylosowana )
        {
            return true;
        }
        i++;
    } while( i < iwylosowane );
   
    return false;
}

int losuj( int podane[] )
{
    int losowana = rand() % 3;
    return podane[ losowana ];
}

int main()
{
    srand( time( NULL ) );
    int podane[ 3 ];
    int wylosowane[ 2 ];
    int iwylosowane = 0;
    int i = 0;
    cout << "podaj 3 liczby" << endl;
    wczytaj( podane );
    cout << "Podane liczby to: " << endl;
    do {
        cout << podane[ i ] << " ";
        i++;
    } while( i != 3 );
   
    cout << endl;
    do {
        int wylosowana = losuj( podane );
        if( sprawdz( wylosowane, iwylosowane, wylosowana ) == false )
        {
            wylosowana = wylosowane[ iwylosowane ];
            iwylosowane++;
        }
    } while( iwylosowane < 2 );
   
    i = 0;
    do {
        cout << wylosowane[ i ] << endl;
        i++;
    } while( i < 2 );
   
   
    system( "pause" );
    return 0;
}

Problem jest następujący. Program pyta użytkownika o liczby ale niezależnie od tego jakie wartości poda użytkownik , program zwraca dwa razy -858993460. Siedzę już nad tym trzy godziny i nie mogę dojść dlaczego tak się dzieje.
P-140734
carlosmay
» 2015-11-24 20:43:09
C/C++
wylosowana = wylosowane[ iwylosowane ]; // przypisanie nie w tą stronę
// zawsze prawa do lewej
 
P-140740
Andy20
» 2015-11-24 20:54:07
Zapomniałeś dodać biblioteki
#include <cstdlib>
P-140742
Matis28
Temat założony przez niniejszego użytkownika
» 2015-11-24 22:39:02
Dzięki już działa znacznie więcej :D Teraz problemem jest brak losowości wyników. Przy dziesięciu próbach podania  1,2,3 za każdym razem wylosowało 2 i 3 oraz w podanych liczbach wyświetlało tylko ostatnią.

tak wygląda zmodyfikowany kod:

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

using namespace std;

void wczytaj( int podane[] )
{
    int i = 0;
    int a = 1;
    do {
        cout << "podaj " << a << " liczbe" << endl;
        cin >> podane[ i ];
        a++;
        i++;
       
    } while( i != 3 );
   
}


bool sprawdz( int tab[], int iwylosowane, int wylosowana )
{
    int i = 0;
    if( iwylosowane <= 0 )
    {
        return false;
    }
    do
    {
        if( tab[ i ] == wylosowana )
        {
            return true;
        }
        i++;
    } while( i < iwylosowane );
   
    return false;
}

int losuj( int podane[] )
{
    int losowana =( rand() % 3 ) + 0;
    return podane[ losowana ];
}

int main()
{
    srand( time( NULL ) );
    int podane[ 3 ];
    int wylosowane[ 2 ];
    int iwylosowane = 0;
    int i = 0;
    int a;
    do {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cout << "[1]-skorzystaj \n[0]-wyjdz" << endl;
        cin >> a;
        if( a == 0 ) {
            return 0;
        }
       
        cout << "podaj 3 liczby" << endl;
        wczytaj( podane );
        cout << "Podane liczby to: " << endl;
        do
        {
            cout << podane[ i ] << " ";
            i++;
        } while( i != 3 ); //pętla podajaca podane liczby
       
        cout << endl;
        do {
            int wylosowana = losuj( podane );
            if( sprawdz( wylosowane, iwylosowane, wylosowana ) == false )
            {
                wylosowane[ iwylosowane ] = wylosowana;
                iwylosowane++;
            }
        } while( iwylosowane < 2 ); //losowanie liczb
       
        i = 0;
        cout << "wylosowane liczby to: ";
        do {
            cout << wylosowane[ i ] << ", ";
            i++;
        } while( i < 2 ); //wypisanie wylosowanych
       
        cout << endl;
        system( "pause" );
    } while( a != 0 );
   
    return 0;
}
P-140753
carlosmay
» 2015-11-24 23:01:58
Powinno być dobrze. Kolega Andy20 sugerował <cstdlib> .
Wstaw kod.
P-140759
Matis28
Temat założony przez niniejszego użytkownika
» 2015-11-24 23:11:33
Przebudowałem to trochę. Wstawiłem całość do innej funkcji a w main dałem tylko pętle z wyborem czy skorzystać czy wyjść i działa. Dzięki za pomoc :)

Oto ostateczna wersja może komuś kiedyś pomoże :)

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


using namespace std;

void wczytaj( int podane[] )
{
    int i = 0;
    int a = 1;
    do {
        cout << "podaj " << a << " liczbe" << endl;
        cin >> podane[ i ];
        a++;
        i++;
       
    } while( i != 3 );
   
}

bool sprawdz( int tab[], int iwylosowane, int wylosowana )
{
    int i = 0;
    if( iwylosowane <= 0 )
    {
        return false;
    }
    do
    {
        if( tab[ i ] == wylosowana )
        {
            return true;
        }
        i++;
    } while( i < iwylosowane );
   
    return false;
}

int losuj( int podane[] )
{
    int losowana = rand() % 3;
    return podane[ losowana ];
}

void calosc()
{
    int podane[ 3 ];
    int wylosowane[ 2 ];
    int iwylosowane = 0;
    int i = 0;
    cout << "podaj 3 liczby" << endl;
    wczytaj( podane );
    cout << "Podane liczby to: " << endl;
    do {
        cout << podane[ i ] << " ";
        i++;
    } while( i != 3 );
   
    cout << endl;
    do {
        int wylosowana = losuj( podane );
        if( sprawdz( wylosowane, iwylosowane, wylosowana ) == false )
        {
            wylosowane[ iwylosowane ] = wylosowana;
            iwylosowane++;
        }
    } while( iwylosowane < 2 );
   
    i = 0;
    cout << "wylosowane liczby to: ";
    do {
        cout << wylosowane[ i ] << ", ";
        i++;
    } while( i < 2 );
   
    cout << endl;
   
    return;
}

int main() {
    srand( time( NULL ) );
    int a;
    do {
        cout << "[1]-skorzystaj\n[0]-wyjdz" << endl;
        cin >> a;
        if( a == 1 ) {
            calosc();
        }
        else {
            return 0;
        }
    } while( a != 0 );
   
    return 0;
}
P-140763
« 1 »
  Strona 1 z 1