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

praca domowa z roz 21 - losowanie bez powtorzen

Ostatnio zmodyfikowano 2011-04-23 23:55
Autor Wiadomość
greenhouse
Temat założony przez niniejszego użytkownika
» 2011-04-20 09:56:38
Napisałem kod jeszcze raz po przejrzeniu wszystkich adekwatnych artykułów kursu i niestety ciągle nie działa tak jak powinno. Mógłby ktoś rzucić na to okiem. Mam pewnie coś źle z tym licznikiem i będę wdzięczny za konkretną informację co jest źle, a jeszcze lepiej za pokazanie jak to zmienić.

Dzięki.

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

int wpisz( int a[], int i )
{
    do
    {
        std::cin >> a[ i ];
        i++;
    } while( i < 3 );
   
}

int losowanie( int max, int min )
{
   
    return( rand() % max ) + min;
   
}

bool bezPowtorzen( int tab[], int wynik, int i )
{
    if( i < 1 )
         return true;
   
    if( tab[ i ] == tab[ wynik ] )
         return false;
   
    return true;
   
}

int main()
{
    srand( time( NULL ) );
    int liczby[ 3 ]; // tablica z której bêdzie losowanie
    int licznik = 0;
   
    wpisz( liczby, licznik );
   
    do
    {
        int wynik = losowanie( 3, 0 );
       
        if( bezPowtorzen( liczby, wynik, licznik ) == true )
        {
            std::cout << liczby[ wynik ] << std::endl;
            licznik++;
        }
    } while( licznik < 2 );
   
    return 0;
}
P-31266
greenhouse
Temat założony przez niniejszego użytkownika
» 2011-04-20 20:49:11
To moze ktos kto to zrobil wrzuci po prostu rozwiazanie?
P-31326
Elano92
» 2011-04-20 20:51:13
Pff.. co ja piszę , radzę Ci poczytać z 5-6 razy rodziały mi to pomogło.
P-31328
greenhouse
Temat założony przez niniejszego użytkownika
» 2011-04-20 20:57:16
A ten program działa w ogóle?

Mi się kompiluje, ale kompletnie nic nie robi (nie można wpisać żadnych liczb, ani nie wyświetla żadnych liczb).
P-31332
Elano92
» 2011-04-20 21:05:25
C/C++
#include <cstdlib>
#include <iostream>

using namespace std;
int main() {
    int y, x, a, error, tab[ 5 ];
    for( y = 0; y < 6; y++ )
    {
        do
        {
            error = 0; // LOSOWANIE
            a = rand() % 6 + 1;
           
           
           
           
           
            for( x = 0; x < y; x++ )
            {
                if( tab[ x ] == a )
                     error = 1;
               
            }
        } //SPRAWDZENIE
        while( error );
       
        tab[ y ] = a;
    }
   
   
   
    for( y = 0; y < 6; y++ ) // WYPISaNIE
    {
        cout << tab[ y ] << endl; }
   
   
   
    system( "PAUSE" );
    return 0;
}

A może ten kod sprubój wsadzić w funkcje wg mnie jest bardziej czytelny.
              
                 
                 
                 
                 
                 

P-31335
greenhouse
Temat założony przez niniejszego użytkownika
» 2011-04-20 21:16:32
Ta funkcja losuje z konkretnego przedziału liczbowego, a moim największym problemem jest losowanie randomowych elementów tablicy, która została wpisana. Wpadłem już na to, że możma losować indeks tablicy, a nie cały element, ale wtedy jest problem ze skutecznym sprawdzeniem czy dany element był już w tablicy.
P-31340
Elano92
» 2011-04-20 21:19:27
tak prubowałeś ?? wylosujLiczby( tablica, 999, min, max );
P-31342
greenhouse
Temat założony przez niniejszego użytkownika
» 2011-04-20 21:24:26
a jak w funkcji ma to wyglądać?

Nie wiem jak połączyć rand() z tablicą.

Można zrobić

return (rand() % max) + min - losowanie indeksów

Albo

tab [ i ] = rand()

tylko w tym przypadku 'i' ma być zmienna lokalna czy musi być globalna, która później zostanie przesłana do innych funkcji?

Dobrze w ogóle myślę?
P-31344
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona