Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 20 maja 2025, o 01:56


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
    Autor Wiadomość
    PostNapisane: 23 lis 2013, o 22:28 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 25 maja 2013
    Posty: 191
    Pomógł: 2

    Witam mam taki oto kod:
    Kod:
    void losowanie()
    {
     liczba=random(0,5);   
    }

    ale niestety ciągle losuje mi te same liczby tzn. po resecie jest ta sama kolejność liczb. Wie ktoś może jak to zmienić.

    A jeszcze lepiej gdyby wyrzucało wylosowaną liczbę i w kolejnym losowaniu nie uczestniczyła

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 23 lis 2013, o 22:43 
    Offline
    Użytkownik

    Dołączył(a): 04 paź 2011
    Posty: 8615
    Pomógł: 338

    http://arduino.cc/de/Reference/RandomSeed

    tym się zainteresuj


    Autor postu otrzymał pochwałę

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 24 lis 2013, o 21:45 
    Offline
    Nowy

    Dołączył(a): 11 lis 2013
    Posty: 4
    Pomógł: 0

    A jeśli liczba nie ma uczestniczyć w kolejnym losowaniu, to wystarczy ją zapamiętać do następnego losowania.

    Jeśli natomiast liczby mają się nie powtarzać dopóki się nie skończą, to trzeba zrobić tablicę jedynek odpowiedniego rozmiaru i potem losować aż trafimy na liczbę, dla której tablica[liczba]==1 i wstawiać tam zero by się nie powtórzyła (plus wstawiać od nowa jedynki, gdy liczby się skończą). Ten algorytm powinien być całkiem w porządku, jeśli liczb z których losujemy jest mało.
    Jeśli natomiast jest ich dużo, to pod koniec będzie trudno trafić na taką, która jeszcze nie była wylosowana i wtedy trzeba by było raczej pamiętać w tablicy niewylosowane jeszcze liczby, po wylosowaniu usuwać i zmniejszać rozmiar tablicy i przedział, z jakiego losujemy indeks tablicy. Usuwanie liczby z tablicy nie musi być czasochłonne, można po prostu przestawić ostatnią na miejsce usuwanej i zmniejszyć "rozmiar" tablicy - przecież wcale nie muszą być po kolei.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lis 2013, o 09:05 
    Offline
    Użytkownik

    Dołączył(a): 25 lip 2013
    Posty: 57
    Pomógł: 5

    wszystkie algorytmy losujące w systemach komputerowych są "pseudo" losowe - czyli nie tak do końca losowe
    http://pl.wikipedia.org/wiki/Generator_liczb_pseudolosowych
    jego działanie wymaga "zasiania ziarna" (seed) tak jak podał SunRiver. Wywołanie powinno być jednorazowe na początku działania programu.
    na arduino.cc zanalazłem randomSeed(analogRead(0)); gdzie jako ziarno przyjmowana jest jakaś przypadkowa wartość z przetwornika ADC
    czasami w różnych językach funkcje siejącą ziarno wywołuje się z argumentami związanymi z bierzącym czasem (dzień, miesiąc,godzina, minuta sekunda) aby przy każdym nowym uruchomieniu programu funkcja przyjnowała inną wartość


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lis 2013, o 16:09 
    Offline
    Moderator zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 18 lip 2012
    Posty: 3228
    Lokalizacja: Kraków - obok FAB5 ATMEL'a
    Pomógł: 91

    Nie do końca się zgodzę z tą pseudo-losowością. Bo jeśli jest wartość przypadkowa(!) np. z ADC no to chyba jest losowa?
    Czyż nie?

    _________________
    http://www.jaglarz.info



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lis 2013, o 19:40 
    Offline
    Użytkownik

    Dołączył(a): 05 lut 2013
    Posty: 302
    Pomógł: 19

    Nie. Wytlumaczenie w wiki. Link powyzej. ;)

    Wysłane z mojego GT-I9300 przy użyciu Tapatalka



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 26 lis 2013, o 02:02 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 06 maja 2012
    Posty: 758
    Pomógł: 9

    Ale gdy odczyt ADC nie jest ziarnem generatora, a samym wynikiem, to możemy mówić tu o prawdziwej losowości.
    A w C++ fajnie się sprawdzało ziarno w postaci bieżącego czasu:
    Składnia: [ Pobierz ] [ Ukryj ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    i potem zwykły rand() zwraca za każdym razem co innego, bo każde wywołanie programu następuje z innym ziarnem zależnym od czasu. A czasu odpalenia programu nie znamy a priori (wcześniej).

    Co do odczytu z ADC to jednak można mieć pewne wątpliwości - czy on faktycznie jest losowy, tzn. ma rozkład jednostajny, czy pewne wartości nie są bardziej prawdopodobne od innych - trzeba by porobić testy i wykreślić histogram. Jednak myślę, że do końca losowe to to nie jest - przecież nawet przy pomiarze napięcia "niczego" coś to "nic" mierzy -> czy jeżeli "nic" jest mniej więcej stałe w czasie, to układ zwróci co innego za każdym razem ze swojego pełnego zakresu zmienności? Układ szaleje, zwraca różne wartości, ale jednak podejrzewam, że do rozkładu jednostajnego daleko.

    Generator liczb prawdziwie losowych należałoby oprzeć nie o algorytmy, wzory, ale o zjawiska prawdziwie losowe - a takich trzeba szukać w przyrodzie (fizyka, chemia) - zjawiska zachodzące na poziomie atomów itp. Układ elektroniczny (jakim jest chociażby ADC) charakteryzuje się pewną przewidywalnością działania jednak...

    _________________
    ATB 1.03, Win XP SP3, ECLIPSE Indigo 3.7.2



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO