Istina ili laž
Cilj
Cilj vježbe je naučiti što su to "logički izrazi", koji će nam pomoći da narednim vježbama koristimo odluke (grananja) u programu.
Logički izraz
void RobotLine::loop() {
print("%i", 1 < 2);
end();
}
Logički izraz je nešto što je istina ili laž. U primjeru lijevo je to
1 < 2, izraz koji je istinit.
Primjera ima raznih:
- 7 = 15 (laž),
- 1 < a i a < 15 (istinitost ovisi o nepoznanici "a"),
- nije 3 = 3 (laž).
Naš program koristi "print" funkciju. Pogledajmo objašnjenje.
"%i" je mjesto na kojem će se ispisati cijeli broj, kako smo napisali u prethodnoj vježbi. Zapravo to nije bila cijela istina jer će nam isto slovo poslužiti i za ispis logičkih izraza, s tim da će rezultat biti "0", ako je izraz lažan i "1" ako je istinit.
Pokrenimo naš program, utipkajmo "loo" (1) i pogledajmo rezultat (2).
Dobili smo "1", kako i treba.
Ispis logičkih izraza na ovaj način nije osobito koristan, no to je još jedan element koji će nam trebati za izradu osnovnih programa za upravljanje robotom.
Jednakost
C++ će nas naučiti da matematički znakovi nisu univerzalni. Sigurno znate što znači "=". Nažalost, u C++ to nije tako. Napišete li "3 = 3", to neće biti logički izraz koji je istinit, nego će to biti greška.
C++ koristi " == " umjesto "=". Ako želimo napisati gornji izraz korektno, onda će to biti "3 == 3".
Zapamtite ovu anomaliju. Ma koliko se trudili, napravit ćete nebrojeno greška. Svi naprave. Odluka da C i C++ programi koriste "==" je jednostavno bila loša.
"<=" i ">=" operatori nisu nespretni i jasno je što znače.
Logički operatori
void RobotLine::loop() {
if (2 > 1 || 2 > 7)
...
}
Razmotrimo izjave:
- "2 je veće od 1 ili je 2 veće od 7",
- "Zemlja je okrugla ili je Zemlja ravna ploča",
- "3 je jednako 3 ili je 5 jednako 5".
U logičkom smislu je istinitost "
ili" izraza "istina", ako je bar jedna od dvije tvrdnje istinita. Istinitost bi bila "laž", samo u slučaju kad su obadvije tvrdne "laž", kao npr. "Zemlja je ravna ploča ili ptice ne postoje". U C++ notaciji "
ili" se piše "
||". Na taj način prvu tvrdnju možemo napisati kao što je u kodu lijevo. Kasnije ćemo vidjeti kako se operatori koriste u kodu.
Zadatak: ispis logičkog izraza
Provjerite shvaća li C++ da je nula jednaka nuli. Matematički formulirano, "0 = 0". Ispišite "1", ako je istina, "0", ako je laž.
Rješenje
void RobotLine::loop() {
print("%i", 0 == 0);
end();
}
Primjedbe
Projekt "Uvod u robotiku" sufinanciran je iz Europskog socijalnog fonda, poziv "Jačanje kapaciteta organizacija civilnoga društva za popularizaciju STEM-a".
Relevantne stranice:
Sadržaj vježbe za virtualne radionice isključiva je odgovornost Hrvatskog društva za robotiku.