Strona 1 z 1

[Mbed]zrozumienie kodu

: piątek 23 wrz 2016, 23:22
autor: foreste
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 ?.

Re: [Mbed]zrozumienie kodu

: piątek 23 wrz 2016, 23:39
autor: Antystatyczny
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.

Re: [Mbed]zrozumienie kodu

: sobota 24 wrz 2016, 04:18
autor: foreste
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ś :).