Conţinutul principal
Curs: Mate pentru Info > Unitatea 4
Lecția 5: Decizii și operații logiceDecizii cu if, else și expresii booleene
În viață luăm decizii zilnic, ca de exemplu ce să pregătim pentru prânz sau dacă să luăm o haină de ploaie sau o umbrelă. Când luăm asemenea decizii, ținem seama de mai multe condiții din realitate, precum ingredientele pe care le avem în frigider, în cazul prânzului, sau vremea de afară, în cazul hainei de ploaie sau umbrelei.
Și programele de calculator iau decizii, folosind expresii booleene (adică valori de tip adevărat sau fals) în cadrul unor structuri decizionale (dacă/altfel sau, în engleză if/else). Cu ajutorul structurilor decizionale, programele pot să reacționeze diferit în funcție de valori diferite ale datelor de intrare sau ale parametrilor.
O decizie simplă
Imaginează-ți că scriem un program care să ne ajute cu decizia legată de felul în care ne îmbrăcăm zilnic. Există o mulțime de condiții pe care le-am putea lua în calcul pentru acest program, dar să începem cu una simplă: dacă temperatura de afară este negativă, atunci programul ar trebui să ne avertizeze să purtăm o geacă de zăpadă.
Iată schema logică a acestui raționament:
Putem implementa în JavaScript programul ce corespunde acelei scheme logice, folosind o structură if:
if (temperatura < 0) {
println("Poartă o geacă de zăpadă!");
}
Hai să analizăm sintaxa! Forma generală a unei asemenea structuri decizionale if este următoarea:
if (<conditie>) {
<instructiuni>
}
Condiție și instrucțiuni sunt cele care se pot modifica; astfel se produce magia.
Condiția este o expresie booleană: o expresie care poate avea valoarea
adevărat
sau fals
. Valorile booleene reprezintă un alt tip de dată din limbajele de programare, iar acestea pot reține doar una dintre valorile true (adevărat) sau false (fals). De exemplu, putem memora valoarea unei expresii booleene într-o variabilă:
var subZero = temperatura < 0;
În funcție de valoarea pe care o are variabila
temperatura
, variabila subZero
poate avea fie valoarea true
, fie valoarea false
.Putem chiar să înlocuim condiția cu variabila:
var subZero = temperatura < 0;
if (subZero) {
println("Poartă o geacă de zăpadă!");
}
Oricum am scrie, condiția trebuie să aibă fie valoarea
true
fie false
, deoarece ea îi spune calculatorului dacă să execute instrucțiunile dintre acolade sau nu.Instrucțiunile pot fi orice poate executa programul tău și atât timp cât este necesar.
✏️ Încearcă să modifici valoarea variabilei
temperature
în programul de mai jos și vezi ce se întâmplă. De asemenea, poți să modifici condiția sau instrucțiunile.Observație: în general, un program cum este acesta ar trebui să citească valaorea variabilei
temperatura
de la un senzor sau de la un alt dispozitiv de intrare, dar, pentru simplitate, noi precizăm valoarea direct în program.Operatori relaționali (de comparare)
Expresia booleană de mai sus folosește operatorul
<=
pentru a determina dacă un număr este mai mic sau egal cu un alt număr. Există mai mulți operatori de comparare (relaționali) în limbajele de programare, operatori care determină relații dintre diverse valori, mai ales între numere.Iată care sunt operatorii relaționali în JavaScript:
Operator | Semnificație | Expresii adevărate | |
---|---|---|---|
> | Mai mare decât | 60 > 32 | |
>= | Mai mare decât sau egal | 60 >= 32 | 32 >= 32 |
< | Mai mic decât | 20 < 32 | |
<= | Mai mic decât sau egal | 20 <= 32 | 32 <= 32 |
=== | Strict egal | 32 === 32 | |
== | Egal | 32 == 32 | "32" == 32 |
!== | Strict diferit | 30 !== 32 | "32" !== 32 |
!= | Diferit | 30 != 32 |
JavaScript este un limbaj puțin mai delicat în privința aceasta, deoarece el conține atât operatori de egalitate, cât și operatori de egalitate "strictă".
Operatorii de egalitate încearcă mai întâi să forțeze ca ambele părți ale expresiei să fie de același tip (de exemplu, le convertește pe amândouă la numere) și după aceea verifică egalitatea. Operatorul de egalitate strictă va observa dacă cele două valori au tipuri diferite și va decide imediat că nu pot fi egale. Noi recomandăm folosirea operatorilor stricți deoarece ei conduc la programe predictibile; altfel, pot sa apară situații neprevăzute.
Cele mai multe limbaje de programare nu conțin ambele tipuri de operatori de egalitate, dar poți găsi și alte diferențe legate de modul în care limbajele decid dacă două variabile sunt egale.
✏️Programul de mai jos afișează tot felul de mesaje, în funcție de valoarea pe care o are variabila
yourAge
(vârstaTa). Încearcă să o modifici și să observi ce se va afișa. De asemenea, poți adăuga mai multe structuri if
în program.Ramura else
Cu ajutorul structurii if, programul nostru poate executa o secvență de instrucțiuni numai dacă este adevărată o anumită condiție. Dacă dorim ca programele noastre să execute o altă secvență de instrucțiuni în situațiile când condiția nu este îndeplinită, atunci putem folosi o ramură else:
Să ne imaginăm un program foarte simplu care verifică o parolă. În schema logică reprezentată mai jos, întrebarea "Is password equal to "TOPSECRET"?" înseamnă "Este valoarea variabilei password egală cu "TOPSECRET"?":
Putem să implementăm programul folosind o structură
if
care conține și o ramură else
:if (password === "TOPSECRET") {
println("You got it!");
} else {
println("Try again!");
}
Programul nostru va continua, cu siguranță, pe una dintre cele două ramuri: fie condiția este îndeplinită și se execută prima ramură, fie este falsă și atunci se va continua cu a doua ramură.
✏️ Programul de mai jos îl dezvoltă pe cel cu verificarea vârstei, prin adăugarea de ramuri
else
. Acum poți știi mai ușor ce poți și ce nu poți face la fiecare vârstă. Joacă-te schimbând valoarea variabilei yourAge
ca să vezi cum se modifică informațiile afișate.Structuri decizionale în limbajul pseudocod
Secvența pseudocod de mai jos reprezintă o simplă structură decizională
if
:IF (<conditie>)
{
<instructiuni>
}
Secvența următoare include o ramură
else
cu instrucțiunile ce vor fi executate pe acea ramură:IF (<conditie>)
{
<instructiuni 1>
}
ELSE
{
<instructiuni 2>
}
Iată operatorii relaționali din limbajul pseudocod:
Operator | Semnificație |
---|---|
a = b | Egalitate |
a ≠ b | Inegalitate |
a > b | Mai mare decât |
a < b | Mai mic decât |
a ≥ b | Mai mare decât sau egal |
a ≤ b | Mai mic decât sau egal |
Iată secvența pseudocod pentru verificarea parolei:
IF (password = "TOPSECRET")
{
DISPLAY("You got it!")
}
ELSE {
DISPLAY("Try again!");
}
🙋🏽🙋🏻♀️🙋🏿♂️Ai vreo întrebare pe acest subiect? Ne-ar face plăcere să îți răspundem— nu ai decât să pui întrebarea în spațiul de mai jos!
Vrei să te alături conversației?
Nici o postare încă.