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

Rozdział 21, zadanie 2

Ostatnio zmodyfikowano 2017-02-16 23:08
Autor Wiadomość
Janusz2
Temat założony przez niniejszego użytkownika
Rozdział 21, zadanie 2
» 2017-02-16 20:41:59
Z pozoru program działa jak należy. Jednak gdy próbuję wprowadzić cyfrę 8 jako drugą lub trzecią program zwraca mi informację, że liczba już była wprowadzona. Cyfrę 0 mogę wprowadzić jedynie jako pierwszą lub ostatnią.

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

bool sprawdzamA( int kandydat, int wpisana[], int x )
{
    int z = 0;
    if( x <= 0 )
         return true;
   
    do
    {
       
        if( kandydat == wpisana[ z ] )
             return false;
       
        z++;
    } while( z < 10 );
   
    return true;
}


int wpisuje( int wpisana[], int x )
{
    int kandydat;
    std::cout << "Wpisz " << x + 1 << " liczbe" << std::endl;
    do
    {
        std::cin >> kandydat;
        if( sprawdzamA( kandydat, wpisana, x ) != true )
             std::cout << "Kazda liczba musi byc inna" << std::endl;
       
    } while( sprawdzamA( kandydat, wpisana, x ) != true );
   
    return kandydat;
   
}

int losuje( int wpisana[] )
{
    return wpisana[ rand() % 10 ];
}

bool sprawdzamB( int los, int wylosowana[], int y )
{
    int w = 0;
    if( y <= 0 )
         return true;
   
    do
    {
        if( los == wylosowana[ w ] )
             return false;
       
        w++;
    } while( w < 8 );
   
    return true;
}

void wypisuje( int wylosowana[] )
{
    int x = 0;
    do
    {
        std::cout << wylosowana[ x ] << ",";
        x++;
    } while( x < 8 );
   
}
int main()
{
    srand( time( NULL ) );
    int wylosowana[ 8 ];
    int wpisana[ 10 ];
    int x = 0;
    int y = 0;
    int los;
    do
    {
        wpisana[ x ] = wpisuje( wpisana, x );
        x++;
    } while( x < 10 );
   
    do
    {
        los = losuje( wpisana );
        if( sprawdzamB( los, wylosowana, y ) == true )
        {
            wylosowana[ y ] = los;
            y++;
        }
    } while( y < 8 );
   
    wypisuje( wylosowana );
    return 0;
}
P-157851
mateczek
» 2017-02-16 22:01:30
przekombinowałeś trochę

C/C++
bool sprawdzam( int los, int wylosowana[], int y )
{
    for( int i = 0; i < y; i++ )
         if( los == wylosowana[ i ] ) return true; // była w tablicy
   
    return false; //brak w tablicy
}

int wpisuje( int wpisana[], int x )
{
    int kandydat;
    std::cout << "Wpisz " << x + 1 << " liczbe" << std::endl;
    cin >> kandydat;
    while( sprawdzam( kandydat, wpisana, x ) ) // puki była powtarzaj
    {
        std::cout << "Kazda liczba musi byc inna" << std::endl;
        std::cin >> kandydat;
    }
    return kandydat;
}


// dalej nie poprawiałem za bardzo tylko by działało

int losuje( int wpisana[] )
{
    return wpisana[ rand() % 10 ];
}


void wypisuje( int wylosowana[] )
{
    int x = 0;
    do
    {
        std::cout << wylosowana[ x ] << ",";
        x++;
    } while( x < 8 );
   
}
int main()
{
    srand( time( NULL ) );
    int wylosowana[ 8 ];
    int wpisana[ 10 ];
    int x = 0;
    int y = 0;
    int los;
    do
    {
        wpisana[ x ] = wpisuje( wpisana, x );
        x++;
    } while( x < 10 );
   
    do
    {
        los = losuje( wpisana );
        if( !sprawdzam( los, wylosowana, y ) )
        {
            wylosowana[ y ] = los;
            y++;
        }
    } while( y < 8 );
   
    wypisuje( wylosowana );
    return 0;
}
P-157860
Janusz2
Temat założony przez niniejszego użytkownika
» 2017-02-16 23:08:46
Dzięki za odpowiedź, Twój zapis jest dużo prostszy, nie ma w nim problemu zer i ósemek. Dzięki niemu poznałem nowe działanie niektórych elementów.
Po wnikliwej analizie wystarczyło zmienić "10" na "x" w 17 wersie i wszystko śmiga ;)
P-157873
« 1 »
  Strona 1 z 1