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



Teraz jest 22 cze 2026, o 18:33


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 22 lis 2014, o 18:12 
Offline
Nowy

Dołączył(a): 26 kwi 2013
Posty: 8
Pomógł: 0

Witam, ostatnio bawiąc się atmegą 32 chciałem aby dioda mrugała z losowym czasem. Teraz mniejsza o to na ile jest on losowy. Interesuje mnie taka rzecz.
Czemu to działa powiedzmy poprawnie:
Kod:
double pomoc=random();
pomoc=((pomoc/RANDOM_MAX)*1000);
int i= (int) pomoc;

            LED_ON;
            _delay_ms(i);
            LED_OFF;
            _delay_ms(i);

a to już nie działa:
Kod:
double pomoc=((random()/RANDOM_MAX)*1000);

int i= (int) pomoc;

            LED_ON;
            _delay_ms(i);
            LED_OFF;
            _delay_ms(i);


Proszę umieszczać listingi zgodnie z zaleceniami stąd: topic7402.html

_________________
Rafał



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2014, o 18:28 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Dlaczego? Ponieważ zachodzi konwersja typów w wyrażeniu (w tym wypadku niejawna), oraz wchodzi w grę kolejność wykonania operatorów, a także zasada, że wynik dzielenia liczby całkowitej zwraca tylko część całkowitą (przez ODRZUCENIE części ułamkowej). Nie będę się wgłębiał w szczegóły, proponuję zajrzeć do podręcznika (tu malutkie zasygnalizowanie: http://wazniak.mimuw.edu.pl/index.php?title=Wst%C4%99p_do_programowania_w_j%C4%99zyku_C/Dziedzina_algorytmiczna#Konwersja).


Autor postu otrzymał pochwałę

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 lis 2014, o 18:56 
Offline
Nowy

Dołączył(a): 26 kwi 2013
Posty: 8
Pomógł: 0

Faktycznie chodzi tu o niejawną konwersję typów. Dzięki za odpowiedź :)
Jak coś to jest tu także działająca wersja:
Kod:
   {
   double pomoc=((random()/ ((double)(RANDOM_MAX)))*1000);


   int i= (int) pomoc;

            LED_ON;
            _delay_ms(i);
            LED_OFF;
            _delay_ms(i);



   }


Proszę umieszczać listingi zgodnie z zaleceniami stąd: topic7402.html

_________________
Rafał



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 lis 2014, o 01:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 20 sie 2013
Posty: 795
Lokalizacja: Poznań
Pomógł: 59

i nie używaj zmiennej w delay. stwórz własny z pętlą wykonującą i razy delay_ms(1)



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: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO