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

niekończąca się pętla

Ostatnio zmodyfikowano 2017-09-29 10:56
Autor Wiadomość
Corvette653
Temat założony przez niniejszego użytkownika
niekończąca się pętla
» 2017-09-28 18:54:20
proszę o pomoc z jakiejś przyczyny mój bool czywylosowana() zawsze zwraca true. Dodałem kilka coutów aby łatwiej można było zobaczyć w czym tkwi problem. Program po wczytaniu 3 cyfr cały czas wypisuje 0101010101010101010101010101010101010101 w nieskończoność (czyli moje 2 couty )

Aby było łatwiej wklejam cały progrm:

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <limits>
using namespace std;

bool czywylosowana ( int wylosowana [], int liczba )
{
    int a = 0;
    cout << 1; -------------------------------------------------------------------------------- cout 1
    do
    {
        if ( liczba == wylosowana [ a ] )
        {
            return true;
        }
        a++;
    } while ( a < 2 );
    cout << 2; --------------------------------------------------------------------------------- cout 2
    return false;
}

int main ()
{
    srand( time( NULL ) );
    int wylosowana [ 2 ];
    int liczba [ 3 ];
    int a = 0;
    int los;

    cout << "wpisz 3 liczby:";
    do
    {
        while( !( cin >> liczba [ a ] ) )
        {
            cin.clear();
            cin.ignore( numeric_limits < streamsize >::max(), '\n' );
            cout << "Wpisales zla liczbe!!! POWTORZ" << endl;
        };
        a++;
    } while ( a < 3 );

    a = 0;

    do
    {
        do
        {
            cout << 0; ------------------------------------------------------------------------ cout 0
            los = ( rand() % 3 ) + 0;
            liczba [ los ] = wylosowana [ a ];
        } while ( czywylosowana ( wylosowana, liczba [ los ] ) );
        a++;
        cout << 3; ---------------------------------------------------------------------------- cout 3
    } while ( a < 2 );
    cout << wylosowana [ 0 ] << endl << wylosowana [ 1 ] << endl <<4;
    return 0;
}
P-165305
Corvette653
Temat założony przez niniejszego użytkownika
prosze o odpowiedź
» 2017-09-28 19:07:24
naprawdę bardzo proszę o jakąkolwiek odpowiedź chociaż pomysł przez co to może nie działąć ponieważ nie mam pojęcia może źle wpisałem coś w randzie bo chyba o to chodzi że losuje sie cały czas ta sama licba naprawde proszę o cokolwiek i z góry bardzo dziękuje.
P-165306
latajacaryba
» 2017-09-28 19:25:31
pisze [a.] miast samego a, ponieważ forum formatuje

C/C++
do
{
    cout << 0; ------------------------------------------------------------------------cout 0
    los =( rand() % 3 ) + 0;
    liczba[ los ] = wylosowana[ a.];
} while( czywylosowana( wylosowana, liczba[ los ] ) );


Skoro liczba[los] równa się wylosowana[a.], to jeśli przekażesz tablicę wylosowana i liczbę[los] do funkcji, to zostaną porównane tablica (w której jednym elementem jest wylosowana[los] oraz sama wylosowana[los]).
A są takie same (bo
liczba[ los ] = wylosowana[ a.];
)

Zakładając, że wylosowana[a.] równa się 3, podstawmy to:

C/C++
do
{
    cout << 0; ------------------------------------------------------------------------cout 0
    los =( rand() % 3 ) + 0;
    liczba[ los ] = 3;
} while( czywylosowana( wylosowana, 3 ) );

//TYMCZASEM W FUNKCJI

bool czywylosowana( int wylosowana[], int liczba )
{
    int a = 0;
    cout << 1; --------------------------------------------------------------------------------cout 1
    do
    {
        if( 3 == wylosowana[ a.] ) // w koncu indeks a będzie równał się indeksowi "los" powyżej
        {
            return true;
        }
        a++;
    } while( a < 2 );
   
    cout << 2; ---------------------------------------------------------------------------------cout 2
    return false;
}


Reasumując: masz błąd w wyróżnionym miejscu
P-165307
Corvette653
Temat założony przez niniejszego użytkownika
ok
» 2017-09-28 19:33:00
czyli przeniesienie tej linijki ( liczba [ los ] = wylosowana [ a ]; ) w miejsce:
do
        {
            cout << 0;
            los = ( rand() % 3 ) + 0;
            liczba [ los ] = wylosowana [ a ];<<<<<<z tąd>>>>>>
        } while ( czywylosowana ( wylosowana, liczba [ los ] ) );
        >>>>>>>TUTAJ<<<<
        a++;
        cout << 3;
    } while ( a < 2 );
powinno pomódz tak?
P-165308
mateczek
» 2017-09-28 19:33:10
C/C++
libczba = tablica[ 3 ]
czyJest( tablica, liczba ); // no jest dokładnie w trzeciej komórce :P [/cpp]

[ code ] ddfasdf
[ \c ode ]
P-165309
Chowan
» 2017-09-28 19:43:08
nie wiem czy dobrze czytam, ale nie przypisujesz wartości do tablicy wylosowana a potem chcesz wypisać liczby z tej tablicy.
P-165310
Corvette653
Temat założony przez niniejszego użytkownika
coś jednak jest nie tak
» 2017-09-28 19:44:40
przeniosłem tą linijke tak jak napisałem w poprzedniej wiadomości i mimo tego że wyświetlają mi się teraz 2 cyfry tak jak powinno być to te cyfry to:
1987144653
oraz
4273264
są one stałe czyli wyświetlają sie zawsze ( chyba nigdy nie skończe tego kodu to już mój 2 problem z nim... )
P-165311
Corvette653
Temat założony przez niniejszego użytkownika
źle czytasz chowan
» 2017-09-28 19:46:44
właśnie ta feralna liinijka ( liczba [ los ] = wylosowana [ a ]; ) przypisuje wartość do tablicy wylosowana :)
jest ona w pętli więc przypisuje wartość do wszystkich zmiennych w tej tablicy
P-165312
« 1 » 2
  Strona 1 z 2 Następna strona