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

[Rodział 21] Losowanie bez powtórzeń

Ostatnio zmodyfikowano 2014-03-19 15:03
Autor Wiadomość
Partit21
Temat założony przez niniejszego użytkownika
[Rodział 21] Losowanie bez powtórzeń
» 2014-03-18 22:07:01
witam!

Mogłaby jakaś dobra dusza spojrzeć, dlaczego ten kod nie działa? Treść : 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.

Udało mi się wylosować 2 niepowtarzające się liczby, ale z jakiegoś nieznanego mi powodu program utyka w miejscu gdzie zaznaczyłem //
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

bool sprawdzana( int liczba, int tab[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i ] == liczba )
             return true;
       
    } while( i < 2 );
   
    return false;
}

void wpisz( int a[] )
{
    cout << "wpisz 3 liczby bejbus" << endl;
    int i = 0;
    do
    {
        cin >> a[ i ];
        i++;
    } while( i < 3 );
   
}

void pokaz( int tab[], int a )
{
    do
    {
       
        cout << "wylosowane liczby to : " << endl;
        cout << tab[ a ];
        a++;
    } while( a < 2 );
   
}
int wylosuj()
{
    return( rand() % 3 ) + 0;
}

int main()
{
    srand( time( NULL ) );
    int tab[ 3 ];
    int lol = 0;
    wpisz( tab );
    cout << "sprawdzamy co nam maszyna wyrzuci" << endl;
   
    do
    {
       
        int a = tab[ wylosuj() ];
        cout << "pokaz a = " << a << endl;
        if( sprawdzana( a, tab, lol ) == false )
        {
           
            tab[ lol ] = a;
            lol++;
        }
    } while( lol < 2 );
   
    cout << " a tu dziala?" << endl; //to juz sie nie pojawia o co chodzi
   
    cout << "brawo udalo sie ;D" << endl;
    return 0;
}

Siedzę już od paru godzin i nie mogę zrozumieć dlaczego "on" utyka tam ( a ja razem z nim ;D )[/i]
P-106742
OczkoSX
» 2014-03-18 22:35:51
Pewnie warunek w pętli jest cały czas spełniony...
P-106746
alixir
» 2014-03-19 08:30:02
Jak na moje oko to widzę 2 błędy:
1. Losujesz liczbę z tablicy i wstawiasz ją do tej samej tablicy. Użyj drugiej tablicy do przechowywania wyników.
C/C++
int wynik[ 2 ];
..
if( sprawdzana( a, wynik, lol ) == false )
{
   
    wynik[ lol ] = a;
    lol++;
}

2. W funkcji sprawdzana, są 2 błędy w pętli
- brak zwiększania licznika
- błędny warunek
C/C++
bool sprawdzana( int liczba, int tab[], int ile )
{
    if( ile <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tab[ i ] == liczba )
             return true;
       
        i++;
       
    } while( i < ile );
   
    return false;
}
P-106758
Partit21
Temat założony przez niniejszego użytkownika
» 2014-03-19 15:03:05
Dziękuję bardzo;) zabrakło głupiego licznika ;D
P-106784
« 1 »
  Strona 1 z 1