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

Liczniki i w losowej kolejnosci bez powtorzen

Ostatnio zmodyfikowano 2015-03-07 14:57
Autor Wiadomość
kynol
Temat założony przez niniejszego użytkownika
» 2015-03-07 02:35:07
@edit
faktycznie, poczekaj

dobra dziala, dzieki mordo, mialem tam wstawic wlasnie to spr=true ale nie wstawilem, nie wiem czemu ;< no ale gdyby babcia miala wasy to by byla... :P


@edit 2

Znow wracam, dopisalem to spr=true; raz zadzialalo wyswietlilo te 3 liczby i i je ladnie wymieszalo a teraz dalej nie dziala :O
P-127869
Lora
» 2015-03-07 02:40:05
Teraz raz działa, a raz nie. Chyba dlatego, że tworzysz tablicę tab i w niej są jakieś śmieci, które później porównujesz z elementami tablicy p. Możesz zrobić tak, zakładając, że w tablicy p, nie ma elementów -1.
C/C++
int * tab = new int[ pomoc ];
for( int i = 0; i < pomoc; i++ )
     tab[ i ] = - 1;

W ogóle nie lepiej byłoby zrobić tablicę, która przechowuje wylosowane wcześniej liczby?
P-127870
Lora
» 2015-03-07 02:45:10
Z tym co napisałem wyżej też nie działa?
P-127871
kynol
Temat założony przez niniejszego użytkownika
» 2015-03-07 02:46:39
Oj tam niewazne, grunt ze dziala, takie niedopatrzenie i program sie sypie :/ trzeba byc czujnym, dzieki za pomoc. Daje dzialajacy kod, moze komus sie w przyszlosci przyda


C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;


int main()
{
    srand( time( NULL ) );
    int zmienna, pomoc = 15;
   
    for( int i = 0; i < pomoc; i++ )
    {
        cout << "i= " << i << endl;
        zmienna++;
    }
   
    int * p = new int[ zmienna ];
   
    for( int j = 0; j < pomoc; j++ )
    {
        p[ j ] = j;
    }
   
    cout << "PO WYMIESZANIU: " << endl;
   
    int wylosowana;
    bool test;
    int * tab = new int[ zmienna ];
    for( int i = 0; i < pomoc; i++ ) tab[ i ] = - 8;
   
    wylosowana =(( rand() % pomoc ) + 0 );
    tab[ 0 ] = p[ wylosowana ];
    cout << tab[ 0 ] << endl;
   
    for( int k = 1; k < pomoc; )
    {
        wylosowana =(( rand() % pomoc ) + 0 );
        test = true;
        for( int z = 0; z < pomoc; z++ )
        {
            if( tab[ z ] == p[ wylosowana ] )
                 test = false;
           
        }
       
        if( test == true )
        {
            tab[ k ] = p[ wylosowana ];
            k++;
        }
    }
   
    for( int y = 1; y < pomoc; y++ )
         cout << tab[ y ] << endl;
   
    delete[] p;
    delete[] tab;
   
    return 0;
}

@edit

w tym moim drugim programie tez wlasnie tej tablicy przypisalem jakies wartosci zeby smieci nie bylo a tutaj o tym zapomnialem :d
P-127872
aksen
» 2015-03-07 02:57:03
Myślę, że to jest trochę złe podejście do tematu. Program będzie długo liczył przy większej ilości liczb.

Gdybyście mieli wypełnić taką tablicę np. milionem... miliardem liczb to wyglądałoby to tak:
1. program losuje kolejne liczby
2. sprawdza od początku tabeli czy liczby się nie powtarzają
3. zawartość tabeli  rośnie i ilość obliczeń także
Co będzie przy losowaniu ostatnich tysięcy liczb? Prawie wszystkie będą się powtarzały, więc losowanie i
sprawdzanie trzeba będzie wielokrotnie powtarzać. Program będzie wykonywał się dość długo.

A co będzie przy losowaniu ostatniej liczby z miliona?
Wszystkie inne liczby już były, wiec losujemy i przeszukujemy całą tablicę setki
tysięcy razy aż ta jedyna się w końcu trafi. Koszmar obliczeniowy ;)

Inne, lepsze i prostsze podejście:
Wpisać w pętli do tablicy kolejne liczby.
Potem zrobić pętlę, która przejdzie od pierwszej komórki do ostatniej i dla każdej z nich wylosować
numer komórki z którą zostanie zamieniona. Po tym działaniu mamy w tablicy liczby losowe bez powtórzeń.
P-127873
kynol
Temat założony przez niniejszego użytkownika
» 2015-03-07 03:10:52
Moglbys napisac taki program i go tu wkleic? z checia bym mu sie przyjrzal

bo w koncu jak bedzie losowal numer komorki z ktora zostanie zamieniona to moze sie zdarzyc tak ze 2x wylosuje ta sama komorke i co wtedy ;P?

@edit

aaaaaa, zalapalem, komorka nie bedzie mogla sie powtorzyc bo zostanie zamieniona miejscami, czaje, bardzo fajny pomysl ;)


P-127874
aksen
» 2015-03-07 03:15:27
Przerób swój tak żeby wypełniał dowolną tablicę liczbami losowymi (wystarczy jakaś stała, którą można zmieniać ilość liczb)
Potem porównamy czasy działania :)

Dziś już późno, popiszemy  rano.
P-127875
kynol
Temat założony przez niniejszego użytkownika
» 2015-03-07 03:16:54
oczywiscie ze czas dzialania mojego programu bylby dluzszy bo wykonywalby duzo operacji porownania :d
P-127876
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona