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

Rozdział 21. Losowanie bez powtórzeń. Dziwny przypadek

Ostatnio zmodyfikowano 2018-06-26 10:00
Autor Wiadomość
patryk98
Temat założony przez niniejszego użytkownika
Rozdział 21. Losowanie bez powtórzeń. Dziwny przypadek
» 2018-06-25 20:31:14
Witam.

Treść zadania: " 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."

Napisałem program i działa raczej dobrze. Podczas pisania tego programu do sprawdzenia wypisałem sobie na ekran ccoutem czy to co wpisuję z klawiatury zapisuje się dobrze w tablicy. Gdy skończyłem cały program to chciałem usunąć linijkę, w której wypisywałem sobie na ekran zawartość 1 liczby w tablicy i wtedy pojawił się problem. Jeśli usunę tą linijkę to program sie odpala, ale po podaniu tych 3 liczb się wyłącza. Co może być tego powodem? W poniższym kodzie jest komentarz za tym coutem, o którego mi chodzi.
Zastanawia mnie to czy wypisywanie czegoś na ekran ma wpływ na to co dzieje się z programem? Na pewno popełniłem jakiś głupi błąd, ale chciałbym aby mi to ktoś wyjaśnił.


Mój kod:

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

using namespace std;

void zapis( int t[], int iRozmiar )
{
    cout << "Podaj " << iRozmiar << " liczby:";
    int i = 0;
    do
    {
        cin >> t[ i ];
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        i++;
    } while( i < iRozmiar );
   
}

int losowanie()
{
    return( rand() % 10 ) + 0;
}

bool spr( int iLiczba, int t[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i;
    do
    {
        if( t[ i ] == iLiczba )
             return true;
       
        i++;
       
    } while( i < ile );
   
    return false;
}


int main()
{
    srand( time( 0 ) );
    int save[ 3 ];
    int wylosowancyh = 0;
   
    zapis( save, 3 );
   
    cout << endl;
    cout << save[ 0 ]; // o tą linijkę chodzi, po jej wywaleniu program sie wysypuje
    cout << endl;
    cout << endl;
   
    do
    {
        int liczba = losowanie();
       
        if( spr( liczba, save, wylosowancyh ) == false )
        {
            liczba = save[ wylosowancyh ];
            wylosowancyh++;
        }
    } while( wylosowancyh < 2 );
   
    wylosowancyh = 0;
   
    do
    {
        cout << wylosowancyh + 1 << ". Wylosowana liczba to: ";
        cout << save[ wylosowancyh ] << endl;
        wylosowancyh++;
    } while( wylosowancyh < 2 );
   
    return 0;
}

P-171686
YooSy
» 2018-06-25 21:05:13
Program ma niezdefiniowane zachowanie (Undefined behavior) ponieważ
używasz niezainicjalizowanej zmiennej.
C/C++
int i;
do
{
    if( t[ i ] == iLiczba )
         return true;
   
    i++;
   
} while( i < ile );

.
P-171687
patryk98
Temat założony przez niniejszego użytkownika
» 2018-06-26 10:00:42
Dzięki! :D
P-171691
« 1 »
  Strona 1 z 1