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? 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 10 lip 2025, o 23:28


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 9 ] 
    Autor Wiadomość
    PostNapisane: 12 lip 2015, o 00:05 
    Offline
    Nowy

    Dołączył(a): 04 cze 2015
    Posty: 11
    Pomógł: 0

    Witam!

    Jak w temacie - mam pewne problemy ze zrozumieniem tego rozdziału.
    Chodzi mi konkretnie o zmienną "idx". Nie wiem czy jej wartość zależy jedynie od tego jaką zmienną jej przypiszemy, czy nie. Myli mnie ta część książki:

    "enum t_dzien {pon, wto, sro, czw, pia, sob, nie};
    (...)
    enum t_dzien dzien = sro;
    (...)
    switch(dzien)
    {
    case sro:
    instrukcja1;
    instrukcja2;
    break;
    case pia:
    instrukcja3;
    instrukcja4;
    break;
    case nie:
    instrukcja5;
    }
    (...)"


    Patrząc na tą linijkę programu "enum t_dzien dzien = sro;" z czego ja rozumiem zmiennej "dzien" przypisujemy liczbę 3. Jednak patrząc na dalszą część kodu musi dochodzić do zmian jej wartości.
    Bardzo byłbym wdzięczny za rozjaśnienie mi tej kwestii.
    Pozdrawiam! :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 lip 2015, o 02:19 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 maja 2014
    Posty: 317
    Pomógł: 19

    ferre111 napisał(a):
    (...)Chodzi mi konkretnie o zmienną "idx". Nie wiem czy jej wartość zależy jedynie od tego jaką zmienną jej przypiszemy, czy nie. (...)
    To trochę nie tak.
    Pomiędzy nawiasami { i } podane są zmienne (jest siedem tych zmiennych), którym kompilator automatycznie przypisał wartości licząc od zera, CHYBA że przypiszemy jakiejś zmiennej inną wartość. Jest to napisane w książce Pana Mirka mniej/więcej w połowie strony.
    Zmienną jest zmienna tablicowa "dzien".


    Wróćmy do Twoich pytań:
    ferre111 napisał(a):
    (...)Patrząc na tą linijkę programu "enum t_dzien dzien = sro;" z czego ja rozumiem zmiennej "dzien" przypisujemy liczbę 3.(...)
    sro jest zaindeksowana w tablicy dzien jako 2-ga (bo numerujemy od zera), czyli w tym wypadku zmiennej dzien przypisujemy liczbę 2, ponieważ sro = 2.


    ferre111 napisał(a):
    (...)Jednak patrząc na dalszą część kodu musi dochodzić do zmian jej wartości.

    Nie ma żadnej zmiany wartości, bo w instrukcji switch "odpytujemy" "co siedzi" pod zmienną dzien a nie co siedzi pod zmienną np. wto ;) .
    Switch sprawdza, który z warunków (które są po "case") spełnia zmienna dzien. To wszystko. Mam nadzieję, że jakoś pomogłem. ;)

    Pozdrawiam! j23 Jarek


    Autor postu otrzymał pochwałę

    _________________
    "O sygnałach bez całek" Czesław Frąc



    Ostatnio edytowano 14 lip 2015, o 00:21 przez j23, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 12 lip 2015, o 23:41 
    Offline
    Nowy

    Dołączył(a): 04 cze 2015
    Posty: 11
    Pomógł: 0

    Bardzo dziękuję za objaśnienie! :)
    Zmyliła mnie właśnie ta instrukcja switch. Czy występowanie jej w takiej aplikacji nie jest bezsensu? Skoro zmienna (stała?) "dzien" się nie zmienia to po co tworzyć taką instrukcję?

    Jak teraz zerknąłem jeszcze raz do książki to kod z użyciem tej instrukcji jest poprzedzony linijką:

    if (dzien == pia) instrukcja; (z czego ja rozumiem instrukcja nie zostanie w tym przypadku wykonana)

    A dopiero po niej jest podana opcja z użyciem instrukcji switch. Ale czy nie lepiej było by ją streścić do takiej wersji:

    switch(dzien)
    {
    case sro:
    instruckja1;
    instrukcja2;
    }


    Pozdrawiam!



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 13 lip 2015, o 07:17 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    Proponuję ci skupić się na tym czym jest enum a nie na tym czy lepiej stosować IF() czy SWITCH() ... bo to całkiem inna sprawa i wcale nie taka oczywista, przy okazji dodam że zdecydowanie w niektórych przypadkach jest lepiej użyć IF'a .. Nie mówię o tym prostym przypadku bo tu jest to KOMPLETNIE bez znaczenia - a pokazałem to tylko na przykładzie IF'a


    Autor postu otrzymał pochwałę

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lip 2015, o 00:41 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 23 maja 2014
    Posty: 317
    Pomógł: 19

    ferre111 napisał(a):
    Czy występowanie jej w takiej aplikacji nie jest bezsensu? Skoro zmienna (stała?) "dzien" się nie zmienia to po co tworzyć taką instrukcję?
    Nie pisz tak proszę Kolego Ferre111, że coś jest "bezsensu", albo "poco to w ogóle" itp. :?
    Panu Mirkowi może się zwyczajnie zrobić przykro, a włożył on sporo trudu w napisanie tej książki i bardzo dobrze ją napisał. Przykłady, które podał - przetestował. Mogły trafić się literówki, lub coś jest niedopisane, ale pamiętaj:
    "errare humanum est" - co Pan Mirek niejednokrotnie podkreślał. Zresztą większość spraw, które były nie do końca jasno opisane wytłumaczył on w swoich filmach-poradnikach na YouTube, które powinieneś obejrzeć.

    Rozumiem, że Ci się spieszy, więc wracając do Twojego pytania: Mówiąc najkrócej jak można switch'a i enum stosujemy po to, żeby kod który piszemy (także i dla nas samych) stał się bardziej czytelny, a czasami także i bardziej optymalny jeśli chodzi o zasoby czasowe i pojemnościowe MCU. W tym konkretnym przypadku switch i enum skracają kod w pliku *.c i sprawiają, że jest bardziej czytelny, a to się przydaje, gdy projektujesz menu wielopoziomowe dla MCU, o czym właśnie między innymi tam w książce pisze - tylko, że pisze dalej w przykładach. ;)
    Reszta jest w książce Pana Mirka i w jego poradnikach ;)

    Pozdrawiam! j23 Jarek


    Autor postu otrzymał pochwałę

    _________________
    "O sygnałach bez całek" Czesław Frąc



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 14 lip 2015, o 12:52 
    Offline
    Nowy

    Dołączył(a): 04 cze 2015
    Posty: 11
    Pomógł: 0

    Och w żadnym wypadku nie chciałem moim postem podważać tego co jest napisane w książce ani zdolności Pana Mirka w przekazywaniu wiedzy! Powiem nawet więcej - Bluebook jest jak dotąd najlepszą książką stricte naukową jaką miałem przyjemność czytać. Więc jeśli moje słowa zostały tak zinterpretowane to bardzo przepraszam, nie miałem tego na celu, a słowo "bezsensu" proszę tu traktować w formie pytania, a nie stwierdzenia :)
    Dziękuję za poświęcony czas! :)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 wrz 2015, o 19:18 
    Offline
    Nowy

    Dołączył(a): 19 maja 2015
    Posty: 2
    Pomógł: 0

    Nie rozumiem pewnej kwestii z książki Pana Kardasia jeżeli chodzi o
    Cytuj:
    enum t_dzien {pon, wto, sro, czw, pia, sob, nie};
    enum t_dzien dzien = sro;

    a dokładniej sensu drugiej linijki. Jeżeli dobrze zrozumiałem Pana Kardasia, to pierwsza linijka przyporządkowuje kolejno liczby od 0 do 6 dla zmiennych pon, wto, itd.. Jeżeli więc w pierwszej linijce jest ustalone, że zmienna sro = 2; to dlaczego w drugiej jest "enum t_dzien dzien = sro;". Nie wystarczyło by naspisać "dzien = sro;"? Potrafi mi ktoś jasno wytłumaczyć czym się to różni?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 wrz 2015, o 19:30 
    Offline
    Moderator
    Avatar użytkownika

    Dołączył(a): 03 paź 2011
    Posty: 27415
    Lokalizacja: Szczecin
    Pomógł: 1043

    rupert1990 napisał(a):
    Nie wystarczyło by naspisać "dzien = sro;"? Potrafi mi ktoś jasno wytłumaczyć czym się to różni?

    przecież w książce masz to napisane. Druga linijka nie jest po to żeby przypisać zmiennej dzień wartość sro, tylko pokazuję w drugiej linijce jak można sobie definiować zmienne typu wyliczeniowego.

    _________________
    zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 wrz 2015, o 18:58 
    Offline
    Nowy

    Dołączył(a): 19 maja 2015
    Posty: 2
    Pomógł: 0

    mirekk36 napisał(a):
    Druga linijka nie jest po to żeby przypisać zmiennej dzień wartość sro, tylko pokazuję w drugiej linijce jak można sobie definiować zmienne typu wyliczeniowego.

    Musiałem się nad tym dłuższą chwile zastanowić, żeby to zrozumieć, ale dzięki tej celnej uwadze szybko pozbyłem się wszelkich wątpliwości. Dziękuję :)
    Po za tym jest jeszcze mała podpowiedź na końcu rozdziału "3.7. Tablice" na 148 str.



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

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