[Mbed]zrozumienie kodu

Tu możesz pisać o swoich problemach z pisaniem programów w języku C/C++ dla STM.
Awatar użytkownika
foreste
User
User
Posty: 113
Rejestracja: niedziela 06 wrz 2015, 19:53
Kontaktowanie:

[Mbed]zrozumienie kodu

Postautor: foreste » piątek 23 wrz 2016, 23:22

Mam problem z zrozumieniem działania kodu z adc mbed

Kod: Zaznacz cały

1
#include "mbed.h"
 
AnalogIn ain(A0);
DigitalOut led1(LED1);
DigitalOut led2(LED2);
DigitalOut led3(LED3);
DigitalOut led4(LED4);
 
int main() {
    while (1){
        led1 = (ain > 0.2f) ? 1 : 0;
        led2 = (ain > 0.4f) ? 1 : 0;
        led3 = (ain > 0.6f) ? 1 : 0;
        led4 = (ain > 0.8f) ? 1 : 0;
    }
}

dokładnie nie rozumie tego zapisu

Kod: Zaznacz cały

  led1 = (ain > 0.2f) ? 1 : 0;

przy jakich sytuacjach można sięgnąć do takiego stylu zapisu ?.
♫,♫.¨♫

Awatar użytkownika
Antystatyczny
Geek
Geek
Posty: 1168
Rejestracja: czwartek 03 wrz 2015, 22:02

Re: [Mbed]zrozumienie kodu

Postautor: Antystatyczny » piątek 23 wrz 2016, 23:39

foreste pisze:dokładnie nie rozumie tego zapisu: led1 = (ain > 0.2f) ? 1 : 0;


Najpierw przetłumaczę ten zapis na ludzki język:

Jeśli ain jest większe od 0.2f, to przypisz obiektowi led1 wartość 1, w przeciwnym przypadku przypisz obiektowi led1 wartość 0 (zero).
Inną formą, identycznie działającą, jest tradycyjny "if else":

Kod: Zaznacz cały

if(ain > 0.2f)
{
    led1 = 1;
}
else
{
    led1 = 0;
}


Jak widzisz wersja tradycyjna zajmuje sporo miejsca, ale jest maksymalnie czytelna, zaś wersja "z pytajnikiem" jest zwarta i zgrabna, ale niekoniecznie czytelna. Ok, wróćmy do zapisu, o który pytasz:

Kod: Zaznacz cały

led1 = (ain > 0.2f) ? 1 : 0;


led1 = w tym miejscu zostanie sprawdzone to, co jest w nawiasie. W tym konkretnym przypadku zostanie sprawdzone, czy obiekt ain jest o wartości wyższej niż 0.2f.

led1 = (ain > 0.2f)? wskazuje nam (i kompilatorowi), że program ma tutaj dokonać wyboru. Jeśli zawartość tego, co jest wewnątrz nawiasów jest TRUE, obiektowi led1 zostanie przypisana wartość znajdująca się po lewej stronie dwukropka. Jeśli zaś wewnątrz nawiasu jest FALSE, do led1 zostanie przypisana wartość znajdująca się po prawej stronie dwukropka.

Przykład:

Kod: Zaznacz cały

ain = 0.1f;


Wewnątrz nawiasu mamy sprawdzenie, czy ain jest większe od 0.2f. Nie jest, więc wynik mamy FALSE. Do led1 przypisane zostanie zero.


Kod: Zaznacz cały

ain = 0.6;


Znowu sprawdzamy, czy ain jest większe od 0.2f. Tym razem jest większe, czyli to wyrażenie jest TRUE. Do led1 zostanie przypisana jedynka.
"The true sign of intelligence is not knowledge but imagination" Albert Einstein.

Awatar użytkownika
foreste
User
User
Posty: 113
Rejestracja: niedziela 06 wrz 2015, 19:53
Kontaktowanie:

Re: [Mbed]zrozumienie kodu

Postautor: foreste » sobota 24 wrz 2016, 04:18

Dziękuję za wyjaśnienie mi tego kodu :), ciekawa uproszczona wersja if else tylko mało czytelna dla człowieka jak wyżej napisałeś :).
♫,♫.¨♫


Wróć do „Programowanie STM w C/C++”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości