Introducere în Programare

Capitolul 2: Lecții
Decizii (if, else) și blocuri de instrucțiuni

Calculatoarele par inteligente pentru că au fost programate de oameni inteligenți, care au luat în calcul toate situațiile posibile (și câteva imposibile).

Atunci când rulează un program, se poate ajunge la un impas. Nu vom ști exact care este situația, dar va trebui să scriem codul astfel încât programul să funcționeze orice ar fi.

if

Un mare ajutor în acest sens ne este dat de instrucțiunea if(). Aceasta va primi între paranteze fie true, fie false.

  • Atunci când primește true, se execută instrucțiunea imediat de după.

  • În schimb, dacă primește false, acea instrucțiune de după if va fi sărită.

if(true)
    move() // Această instrucțiune va rula

turnRight() // Această instrucțiune va rula


if(false)
    move() // Această instrucțiune NU va rula

turnRight() // Această instrucțiune va rula
Exemple

Poate te gândești că decât să punem direct true la if, mai bine nu am pune if-ul. Sau decât să punem false, mai bine nu punem nici instrucțiunea următoare. Acestea sunt niște valori care pot fi produse de diferite instrucțiuni și expresii.

De exemplu, am putea folosi instrucțiunea canMove() care produce:

  • true dacă Miorița ar putea face un pas în față.

  • false dacă Miorița este obstrucționată, fie de un gard, fie de marginea stânei.

Folosindu-ne de acestea, am putea să facem Miorița să facă un pas în față doar atunci când poate.

if(canMove())
    move()
Un pas
Conținutul continuă după reclamă

Blocuri de instrucțiuni

Dar ce se întâmplă atunci când vrem să facă mai mulți pași în față atunci când nu are gard? Sau în general, poate vrem să facă mai multe instrucțiuni, dar doar atunci când o condiție se îndeplinește.

Pentru asemenea cazuri, putem folosi blocuri de instrucțiuni. În limbajul Mioriței, un bloc este delimitat de semnele { și }. Instrucțiunile puse între acolade vor fi executate împreună, ca și cum ar fi una singură. Putem pune un bloc de instrucțiuni după if, și toate instrucțiunile din bloc sunt executate atunci când condiția este adevărată.

if (canMove())
{
    // Toate cele 3 instrucțiuni vor rula 
    // dacă Miorița poate merge când s-a testat canMove()
    move()
    move()
    move()
}
Exemplu bloc

Atenție că instrucțiunile se execută de sus în jos, în ordinea în care sunt scrise în cod. Dacă în timpul execuției blocului se schimbă situația astfel încât condiția de la if să nu mai fie adevărată, instrucțiunile din bloc vor merge în continuare până la final.

Există limbaje de programare în care blocurile sunt marcate altfel. În unele limbaje pot fi cuvinte precum BEGIN și END, în timp ce în altele s-ar putea ca blocurile să fie reprezentate de numărul de spații dinaintea instrucțiunii.

Negarea

Instrucțiunea canMove() ne spune dacă Miorița poate merge în față, dar se pot întâmpla cazuri în care ne-ar ajuta să știm dacă nu poate merge. Poate am vrea să se rotească atunci.

Neexistând o instrucțiune specială pentru asta, putem să punem !canMove(). Atunci când punem ! înainte unei expresii care produce true, rezultatul va fi false și invers. Această operație se mai numește „negare”.

if(!canMove()) 
{
    turnRight()
}
Negare

else

Se mai poate întâmpla să vrem să executăm un set de instrucțiuni atunci când condiția de la if este adevărată, și un altul atunci când este falsă. Cei mai repeziți dintre noi poate am încerca să facem un alt if cu negare. Dar testând suficiente scenarii, vom constata că unele nu funcționează.

Gândește-te la următorul cod:

if(canMove())
    move()

if(!canMove())
    turnRight()
Două if-uri

Ce se întâmplă când primul if (linia 1) primește condiție adevărată? Se va executa instrucțiunea asociată și programul va continua. Următoarea instrucțiune este al doilea if (linia 4) care are propria condiție. Acum situația este diferită și nu mai are legătură cu prima condiție.

Atunci când vrem să executăm alt set de instrucțiuni, fără să fi schimbat condiția, putem să folosim instrucțiunea else. Atenție că aceasta nu mai are paranteze. else face ca instrucțiunea imediat următoare să se execute atunci când condiția de la if-ul de mai sus în cod este falsă.

if(true)
{}
else
{
    // Acest bloc nu se execută
}
true
if(false)
{}
else
{
    // Acest bloc se execută
}
false
Conținutul continuă după reclamă

Temă

Deschide Lecția 2 din aplicație, șterge tot codul existent și scrie un program care o duce pe Miorița la cea mai apropiată iarbă. Programul trebuie să funcționeze neschimbat atât atunci când Miorița începe cu gard în față, cât și atunci când are drum liber.

Gândește-te dacă poți face fără să folosești else.

Designed by