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

Lekcja 21

Ostatnio zmodyfikowano 2014-06-26 22:22
Autor Wiadomość
Terrendi
Temat założony przez niniejszego użytkownika
Lekcja 21
» 2014-06-26 20:35:15
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."

Mam problem, ponieważ mój program zapętla się(dodałem linijkę kodu, żeby to zobrazować), a ja nie wiem dlaczego tak się dzieje.
Mój kod:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int losuj()
{
    return( rand() % 2 );
}
bool czy_byla_wylosowana( int sprawdz, int liczebnik, int wylosowana[] )
{
    if( liczebnik <= 0 )
         return false;
   
    int a = 0;
    do
    {
        if( sprawdz == wylosowana[ a ] )
             return false;
       
        a++;
    } while( a < 1 );
   
    return true;
}
int main()
{
    srand( time( 0 ) );
    int liczba[ 3 ];
    int liczebnik = 0;
    int wylosowana[ 2 ];
    int sprawdz;
    cout << "Podaj trzy liczby:" << endl;
    do
    {
        cin >> liczba[ liczebnik ];
        liczebnik++;
    } while( liczebnik < 3 );
   
    liczebnik = 0;
    do
    {
        sprawdz = liczba[ losuj() ];
        if( czy_byla_wylosowana( sprawdz, liczebnik, wylosowana ) == false )
        {
            sprawdz = wylosowana[ liczebnik ];
            liczebnik++;
        }
        cout << "To ciagle sie powtarza" << endl;
    } while( liczebnik < 2 );
   
    liczebnik = 0;
    do
    {
        cout << wylosowana[ liczebnik ] << endl;
        liczebnik++;
    } while( liczebnik < 2 );
   
    return 0;
}
Do programu można bez problemu wpisać liczby, ale potem wszystko się sypie. Więc liczę na waszą pomoc :)
P-112811
pekfos
» 2014-06-26 20:43:40
C/C++
sprawdz = wylosowana[ liczebnik ];
Źle.

C/C++
return( rand() % 2 );
3.
P-112814
Terrendi
Temat założony przez niniejszego użytkownika
» 2014-06-26 21:12:34
Już to poprawiłem i teraz te linijki wyglądają tak:
wylosowana[ liczebnik ] = sprawdz;
oraz
return( rand() % 3 );
Ale albo coś zrobiłem źle poprawiając te linijki, albo w jakimś innym miejscu mam błąd, bo program pod koniec zawsze podaje 2 takie same liczby. Więc mam tu pytanie: co nie działa?
P-112819
snajperek130
» 2014-06-26 22:15:36
Wedlug mnie to masz zle fragment
C/C++
do
{
    if( sprawdz == wylosowana[ a ] )
         return false;
   
    a++;
} while( a < 1 );

return true;

Skoro w main zwracasz false, to sprawdz nie moze sie rownac wylosowana /. Pisalem te zadanie ostatnio i moze to byc bledem .
P-112821
Terrendi
Temat założony przez niniejszego użytkownika
» 2014-06-26 22:22:51
Dzięki za pomoc, teraz kod wygląda tak:
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int losuj()
{
    return( rand() % 3 );
}
bool czy_byla_wylosowana( int sprawdz, int liczebnik, int wylosowana[] )
{
    if( liczebnik <= 0 )
         return false;
   
    int a = 0;
    do
    {
        if( sprawdz == wylosowana[ a ] )
             return true;
       
        a++;
    } while( a < 1 );
   
    return false;
}
int main()
{
    srand( time( 0 ) );
    int liczba[ 3 ];
    int liczebnik = 0;
    int wylosowana[ 2 ];
    int sprawdz;
    cout << "Podaj trzy liczby:" << endl;
    do
    {
        cin >> liczba[ liczebnik ];
        liczebnik++;
    } while( liczebnik < 3 );
   
    liczebnik = 0;
    do
    {
        sprawdz = liczba[ losuj() ];
        if( czy_byla_wylosowana( sprawdz, liczebnik, wylosowana ) == false )
        {
            wylosowana[ liczebnik ] = sprawdz;
            liczebnik++;
        }
    } while( liczebnik < 2 );
   
    liczebnik = 0;
    do
    {
        cout << wylosowana[ liczebnik ] << endl;
        liczebnik++;
    } while( liczebnik < 2 );
   
    return 0;
}
I wszystko działa. Mój błąd polegał na tym że szukałem błędu w złym przypisaniu zmiennej sprawdz do wylosowana.
P-112823
« 1 »
  Strona 1 z 1