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

21. Losowanie bez powtórzeń (lekcja)-analiza kodu w celu wykrycia nieprawidlowosci

Ostatnio zmodyfikowano 2011-08-17 11:10
Autor Wiadomość
Miquel
Temat założony przez niniejszego użytkownika
21. Losowanie bez powtórzeń (lekcja)-analiza kodu w celu wykrycia nieprawidlowosci
» 2011-08-16 23:51:32
Prosze o analize ponizszego kodu w celu eliminacji blednych liczb wyswietlanych po losowaniu bez powtorzen.
C/C++
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;

int wprowadzenie()
{
    int liczba;
    bool zle;
    do
    {
        cout << "Wpisz liczbe: ";
        cin >> liczba;
       
        zle = cin.fail();
        cin.clear();
        cin.sync();
       
        if( zle == 1 )
             cout << "Podales bledny znak. Sproboj ponownie..." << endl;
       
    } while( zle );
   
    return liczba;
}

int powtorzenie( int tablica[], int wylosowana, int nr )
{
    if( nr <= 0 )
         return false;
   
    int i = 0;
    do
    {
        if( tablica[ i ] == wylosowana )
             return true;
       
        i++;
    } while( i < nr );
   
    return false;
}

int losowanie()
{
    return( rand() % 8 ) + 1;
}


int main()
{
    srand( time( NULL ) );
   
    int tablica[ 11 ], pozycja = 0, gotowe[ 10 ], i = 0;
   
    do
    {
        tablica[ pozycja ] = wprowadzenie();
        pozycja++;
    } while( pozycja < 10 );
   
   
   
    do
    {
        int wylosowana = losowanie();
        if( powtorzenie( gotowe, tablica[ wylosowana ], i ) == false )
             gotowe[ i ] = tablica[ wylosowana ];
       
        i++;
    } while( i < 8 );
   
    i = 0;
    do
    {
        cout << "Liczba nr: " << i << " z 10 wynosi " << gotowe[ i ] << endl;
        i++;
    } while( i < 8 );
   
    return 0;
}

/przypadkowo skasowala sie poprzednia tresc.
P-39301
SeaMonster131
» 2011-08-16 23:57:36
Napisz wszystko poprawnie, tak jak powinno być, stosując zasady interpunkcji i ortografii, następie przeczytaj http://cpp0x.pl/kursy/Kurs-STC/169, a dopiero wtedy Ci pomożemy.
P-39303
Miquel
Temat założony przez niniejszego użytkownika
» 2011-08-17 00:17:02
Dziekuje bardzo koledze SeaMonster131 za rady i pouczenie. Odnosnie wstawiania kodu w ramke cytatu rzeczywiscie byl to moj blad. W pozostala czesc mej wypowiedzi pozostanie niezmieniona(poniewaz niewygodnie jest uzywac polskich znakow diakrytycznych, kiedy nie jest to konieczne), ewentualnie zmoderowana/usunieta przez moderatora.
Poprosilem o pomoc przy kodzie programu, a nie o umoralnienie, prostowanie patriotyczne i prace nad stylem wypowiedzi, mimo wszystko szanuje Twoje zaangazowanie;)

P-39305
DejaVu
» 2011-08-17 01:18:52
Napisz kiedy występuje błąd jeżeli takowy występuje (czytaj: podaj przypadek testowy dla którego program się źle zachowuje) :)
P-39306
Miquel
Temat założony przez niniejszego użytkownika
» 2011-08-17 07:40:02
Blad polega na podawaniu wartosci innych niz podane do tablicy. Przykladowo podaje liczby:
7,1,2,3,3,2,1,0,5,0.

Wyswietla sie 8 losowych o wartosciach:
3,1,0,2293512,2293700,2011794645,2,-2

Dlaczego czesc z wartosci jest zgodna z podanymi, a czesc pozostaje wyrwana z haosu;)?
P-39307
GoldWolf
» 2011-08-17 10:58:49
C/C++
do
{
    int wylosowana = losowanie();
    if( powtorzenie( gotowe, tablica[ wylosowana ], i ) == false )
         gotowe[ i ] = tablica[ wylosowana ];
   
    i++;
} while( i < 8 );
Tu masz błąd jeśli IF == FALSE, to wszystko gra., ale jeśli IF == TRUE, to wtedy powinieneś jeszcze raz zrobić losowanie, a Ty nie robisz ponownie losowania tylko dodajesz i++, zwiększasz index, zostawiając w tabeli gotowe taką wartość jaka tam była.
P-39318
DejaVu
» 2011-08-17 11:00:54
Wczytywanie masz poprawne, wypisywanie też. Źle masz napisany kod losujący, czyli to:
C/C++
do
{
    int wylosowana = losowanie();
    if( powtorzenie( gotowe, tablica[ wylosowana ], i ) == false )
         gotowe[ i ] = tablica[ wylosowana ];
   
    i++;
} while( i < 8 );

Napisz najpierw losowanie z powtórzeniami poprawnie, a potem rozbuduj program o losowanie bez powtórzeń.
P-39319
DejaVu
» 2011-08-17 11:01:39
lol :D
P-39320
« 1 » 2
  Strona 1 z 2 Następna strona