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

[Lekcja 21] Losowanie bez powtórzeń

Ostatnio zmodyfikowano 2013-06-21 15:24
Autor Wiadomość
kits
Temat założony przez niniejszego użytkownika
[Lekcja 21] Losowanie bez powtórzeń
» 2013-06-13 17:14:45
Witam, od dłuższego czasu nie moge rozwiazac problemu mojego programu, owy problem polega na tym, ze losowane liczby wykraczaja poza dziedzine :(
Kompletnie nie wiem w czym popelnilem blad, caly kod zrodlowy wydaje mi sie poprawny i logiczny, a także ,,schludnie,, prowadzony.

Prosze o pomoc. Zadanie: Program ma nam wylosować 5 liczb bez powtórzeń. Liczby wylosowane mają być z przedziału od 1 do 10.
Z góry dziekuje za pomoc, bedzie to dla mnie cenna wskazowka i pomoca.

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

bool czybyla( int juz_wylosowanych, int tablica_liczb[], int liczba_wylosowana )
{
   
    if( juz_wylosowanych <= 0 )
         return false;
   
    int tutek = 0;
    do
    {
        if( tablica_liczb[ tutek ] == liczba_wylosowana )
             return true;
       
        tutek++;
    } while( juz_wylosowanych > tutek );
   
    return false;
}
int losowanie()
{
    return( rand() % 10 ) + 1;
}
int main()
{
    srand( time( 0 ) );
    int tablica[ 4 ];
    int dotejporywylosowanych = 0;
    do
    {
        int ty = losowanie();
        if( czybyla( dotejporywylosowanych, tablica, ty ) == false )
        {
            ty = tablica[ dotejporywylosowanych ];
            dotejporywylosowanych++;
        }
    } while( dotejporywylosowanych < 5 );
   
    dotejporywylosowanych = 0;
    do
    {
        std::cout << tablica[ dotejporywylosowanych ] << "\n";
        dotejporywylosowanych++;
    } while( dotejporywylosowanych < 5 );
   
    return 0;
}
P-85485
pekfos
» 2013-06-13 17:59:38
C/C++
ty = tablica[ dotejporywylosowanych ];
Zastanów się, co i gdzie przypisujesz.

Program ma nam wylosować 5
Zrobiłeś tablicę na 4 liczby.
P-85490
kits
Temat założony przez niniejszego użytkownika
» 2013-06-13 18:31:13
Rzeczywiście, tu zrobiłem błąd wynikający z nieuwagi. Dzieki za naprowadzenie :)
A ten drugi był juz spowodowany nieprawidłowym myśleniem. Jak sie okazało ( i okazać miało :) ) kolejność argumentów w równaniu jest ważna.

Jeszcze raz dzięki za pomoc, teraz programik działa prawidłowo. Może już za szybko posuwam się z tymi kursami, w ciągu 5 dni doszedłem aż do tej lekcji, robiąc wszystkie poprzednie prace domowe i tworząć swoje wlasne male programiki :)

Pozdrawiam
P-85500
kits
Temat założony przez niniejszego użytkownika
Znowu mam problem z tym losowaniem bez powtórzeń ;/ Program losuje liczby, ktore sie powtarzaja oraz dziwnym trafem jak wpisze liczbe 1, to nigdy jej nie wylosuje i nie wyswietli
» 2013-06-19 13:14:48
C/C++
/*  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.*/

#include <iostream>
#include <cstdlib>
#include <ctime>
bool funkcja3( int los, int ilejuzwylosowanych, int tablica[] )
{
    if( ilejuzwylosowanych == 0 )
         false;
   
    {
       
        if( tablica[ 0 ] == los )
             true;
       
    }
    false;
}
int funkcja2()
{
    int k =( rand() % 3 ) + 0;
    switch( k )
    {
    case 0:
        return 0;
        break;
    case 1:
        return 1;
        break;
    case 2:
        return 2;
        break;
    }
}
void funkcja1( int L[] )
{
    std::cout << "Podaj 3 liczby: \n";
    for( int indeks = 0; indeks < 3; indeks++ )
    {
        std::cout << "Liczba" << indeks + 1 << " ";
        std::cin >> L[ indeks ];
        std::cout << "\n";
    }
}
int main()
{
    srand( time( 0 ) );
    int liczby[ 3 ];
    int finishowe[ 2 ];
    funkcja1( liczby );
    int ilejuzwylos = 0;
    do
    {
        int losik = liczby[ funkcja2() ];
        if( funkcja3( losik, ilejuzwylos, finishowe ) == false )
        {
            finishowe[ ilejuzwylos ] = losik;
            ilejuzwylos++;
        }
    } while( ilejuzwylos < 2 );
   
    ilejuzwylos = 0;
    for( ilejuzwylos = 0; ilejuzwylos < 2; ilejuzwylos++ )
    {
        std::cout << finishowe[ ilejuzwylos ] << "\n";
    }
    return 0;
}
.
P-85815
DejaVu
» 2013-06-19 14:01:07
Frazy, które należy wpisać w wyszukiwarkę google:
Porównaj sobie swoje rozwiązanie z innymi rozwiązaniami... tych tematów aż za dużo.
P-85816
kits
Temat założony przez niniejszego użytkownika
» 2013-06-21 15:24:04
Przejrzałem już te tematy. Rozumiem je i przeanalizowałem, ale prawie wszystkie dotycza innego polecenia. A ten ktory dotyczy mojego problemu, ma kompletnie różny kod źródłowy (w koncu mozna napisac program na wiele mozliwosci, ktory spelni ta sama funkcje :) ) Usiądę do problemu dzisiaj wieczorem, bo ostatnio mam malo czasu. Dziekuje za wskazówki :) Pozdrawiam.
P-85913
« 1 »
  Strona 1 z 1