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

Rozdział 21 Praca domowa

Ostatnio zmodyfikowano 2018-10-04 21:57
Autor Wiadomość
bulidomex321
Temat założony przez niniejszego użytkownika
Rozdział 21 Praca domowa
» 2018-10-04 13:25:09
Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje.

Zadanie rozwiązałem w poniższy sposób:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

void WyswietlTablice( int * t )
{
    for( unsigned int i = 0; i < 3; i++ )
    {
        cout << t[ i ] << endl;
    }
}

void Losuj( int * t )
{
    cout << "Zostana wylosowane 2 liczby z posrod 3 podanych bez powtorzen" << endl;
    //losowanie
    int losowana1, losowana2;
    do
    {
        losowana1 =( rand() % 3 );
        losowana2 =( rand() % 3 );
    } while( t[ losowana1 ] == t[ losowana2 ] );
   
    cout << "Wylosowane liczby to: " << t[ losowana1 ] << " oraz: " << t[ losowana2 ];
}

bool czyPodanoDobrze( int * t )

{
    if( t[ 0 ] == t[ 1 ] == t[ 2 ] )
    {
        cout << "Sproboj jeszcze raz" << endl;
        return true;
    }
    else
    {
        return false;
    }
}

void PodajLiczby( int * t )
{
    cout << "Pamietaj ze nie mozesz podac trzy razy tej samej cyfry!" << endl;
    do
    {
        for( unsigned int i = 0; i < 3; i++ )
        {
            cout << "Podaj " << i + 1 << " liczbe: ";
            cin >> t[ i ];
        }
        cout << endl;
    } while( czyPodanoDobrze( t ) == true );
   
}

int main()
{
    srand( time( 0 ) );
    int tablica[ 2 ];
    PodajLiczby( tablica );
    //WyswietlTablice(tablica);
    Losuj( tablica );
    return 0;
}
Ogólnie program działa, chciałem go zabezpieczyć przed wpisaniem 3 tych samych liczb.
Gdy wprowadzimy trzy razy "1" do tablicy wszystko działa dobrze, program prosi nas znowu o podanie 3 liczb
Natomiast gdy wprowadzimy obojętnie jakie inne liczby 3 razy takie same np trzy razy podamy "2" program się krzaczy. Nie rozumiem dlaczego. Proszę o wsparcie :D.
P-172537
rupson
» 2018-10-04 16:42:15
Co to za zapis:
t[ 0 ] == t[ 1 ] == t[ 2 ]
 ?
Rozdział 12 tu się przyda :)

Drugie pytanie, dlaczego w argumentach funkcji używasz wskaźników?
P-172539
YooSy
» 2018-10-04 16:50:09
Unikaj magic number. Zamiast nich używaj zmiennych o opisowej nazwie.
np.

C/C++
const int rozmiarTablicy = 3;
int liczbyUzytkownika[ romziarTabilicy ];
P-172540
bulidomex321
Temat założony przez niniejszego użytkownika
» 2018-10-04 21:57:47
Wskaźników używam, ponieważ w rozdziale 19 było napisane że tak możemy przekazywać tablicę do funkcji.
Pozbyłem się magicznych liczb, i użyłem iloczynu logicznego. Teraz wszystko działa
Rozwiązanie:
 
C/C++
void WyswietlTablice( int * t, const int rozmiarTablicy )
{
    for( unsigned int i = 0; i < rozmiarTablicy + 1; i++ )
    {
        cout << t[ i ] << endl;
    }
}

void Losuj( int * t )
{
    cout << "Zostana wylosowane 2 liczby z posrod 3 podanych bez powtorzen" << endl;
    //losowanie
    int losowana1, losowana2;
    do
    {
        losowana1 =( rand() % 3 );
        losowana2 =( rand() % 3 );
    } while( t[ losowana1 ] == t[ losowana2 ] );
   
    cout << "Wylosowane liczby to: " << t[ losowana1 ] << " oraz: " << t[ losowana2 ];
}

bool czyPodanoDobrze( int * t )
{
    if( t[ 0 ] == t[ 1 ] && t[ 2 ] == t[ 1 ] && t[ 0 ] == t[ 2 ] )
    {
        cout << "Sproboj jeszcze raz" << endl;
        return true;
    }
    else
    {
        return false;
    }
}

void PodajLiczby( int * t, const int rozmiarTablicy )
{
    cout << "Pamietaj ze nie mozesz podac trzy razy tej samej cyfry!" << endl;
    do
    {
        for( unsigned int i = 0; i < rozmiarTablicy + 1; i++ )
        {
            cout << "Podaj " << i + 1 << " liczbe: ";
            cin >> t[ i ];
        }
        cout << endl;
    } while( czyPodanoDobrze( t ) == true );
   
}

int main()
{
    srand( time( 0 ) );
    const int rozmiarTablicy = 2;
    int tablica[ rozmiarTablicy ];
    PodajLiczby( tablica, rozmiarTablicy );
    WyswietlTablice( tablica, rozmiarTablicy );
    Losuj( tablica );
    return 0;
}

Dzięki za pomoc ;)
P-172543
« 1 »
  Strona 1 z 1