====== Lecția 2: Bucle cu număr de pași ======
Răspunde la următoarele întrebări:
* Ce este o buclă în programare?
* Ce forme am învățat până acum?
Împreună vom învăța astăzi să folosim bucle ce repetă acțiuni un număr de pași. De exemplu, avem un joc în care repetăm o întrebare de 3 ori. Dacă răspunsul este corect, atunci felicităm utilizatorul, altfel, îi spunem că mai are o încercare.
repeat 3 times
if right answer then
say 'Congrats'
else
say 'One more try..'
===== Recapitulare Scratch =====
Cât timp instructorii verifică tema de casă de data trecută, hai să ne încălzim cu un niște exerciții simple.
Ce face următoarea secvență de instrucțiuni? Ai mai folosit undeva această structură?
{{:module:07-bucle-in-programare:forever_example.png?250 |}}
Autentifică-te pe http://scratch.mit.edu/ cu contul personal pentru exercițiile de mai jos.
Pentru recapitulare, ne vom aduce aminte ce am făcut până acum. Creează un program nou în Scratch în care pisica trebuie să colecteze 3 chei. La colectarea celor 3 chei, se schimbă fundalul și pisica se transformă într-un leu. **Atenție**! Vei folosi mai multe noțiuni, printre care variabile, mesaje și condiții.
===== Tutorial =====
==== 1. Repetă un număr de pași ====
Acum, vom face primul nostru program din cadrul tutorialului! Clonează proiectul de la http://scratch.mit.edu/projects/19469028/. Observă că ai deja un sprite balerină și un fundal cu o scenă. Vrem ca balerina să sară în sus de *5* ori. Balerina va sări și va cădea înapoi în poziția inițială. Fă asta folosind o instrucțiune ''repeat'' din secțiunea ''Control''.
Pentru a face să sară balerina în sus, folosește instrucțiunea ''change y by 100''. Cum faci să revină balerina?
\\
Bravo! Ai făcut o primă buclă cu un număr fix de pași! Însă balerina nu sare prea grațios. Hai să o ajutăm să facă o săritură frumoasă!
Folosește instrucțiunea ''switch to costume ballerina-b'' pentru a schimba înfățișarea sprite-ului ''Ballerina''. Apoi, afișează acest costum timp de 1 sec și schimbă costumul la ''ballerina-c'', adică cel în care face șpagatul. Balerina va face șpagatul în aer, așadar ea va sări, își schimbă coordonata pe verticală. Așteaptă 1 secundă și schimbă din nou coordonata pentru ca balerina să ajungă în poziția inițială.
Fă în așa fel încât balerina să își schimbe la sfârșitul săriturilor poziția prin afișarea costumului ''ballerina-d'', adică va sta într-un picior. Folosește ''switch to costume ballerina-d''.
==== 2. Alege răspunsul corect! ====
Continuăm cu proiectul cu balerina și vrem ca aceasta să sară doar dacă noi răspundem corect la o întrebare de matematică. Pentru aceasta, ne vom aminti de [[module:07-bucle-in-programare:lectia-01]] în care am învățat să folosim bucle ''repeat until''.
Vrem să tot întrebăm ''Cât fac 134 - 89?'' (voi puteți pune orice altă întrebare de matematică) până când răspunsul este corect, adică 45.
Pentru a întreba, folosește ''ask ... and wait'' din secțiunea ''Sensing''. Observă că ai o casetă imediat după această instrucțiune pe care scrie ''answer''. Acesta va fi răspunsul pe care îl introduce jucătorul/utilizatorul programului. ''answer'' este o variabilă ca oricare și va trebui să compari variabila ''answer'' cu răspunsul corect folosind operatorul **egal** ''=''.
Verifică programul testându-l! La apăsarea stegulețului verde trebuie să pornească programul și trebuie ca în urma unui răspuns corect să sară balerina. Dacă am greșit răspunsul la întrebare, balerina nu face nimic, însă programul funcționează și poți încerca un alt răspuns.
==== 3. Dialog ====
Modifică același proiect cu balerina astfel încât atunci când utilizatorul introduce un număr greșit, balerina să spună că este un răspuns greșit. De exemplu, dacă spunem că răspunsul este 40, trebuie să fie afișat mesajul "40 este greșit!".
Cum afișezi mesajul? Până acum am folosit doar instrucțiunea ''say'' prin care un sprite spune ceva, un mesaj pe care îl scriem noi. Dacă vrei să lipești o variabilă și un text, folosește blocul ''join'' de la //Operators//.
Ține minte că ''join'' alipește două bucăți de text sau două variabile sau un text cu o variabilă.
**Atenție!** Modifică bucla ''repeat until'' într-o buclă ''forever'' în care adaugă o condiție ''if'' și un ''else''!
==== 4. Variabilă pentru repetă ====
Ai făcut o buclă ce se repetă de 5 ori. Hai să înlocuim acest număr cu o variabilă pe care o numim ''contor''. Ea contorizează, adică urmărește sau numără, de câte ori trebuie să sară balerina. Inițializează valoarea variabilei înainte de buclă prin instrucțiunea ''set contor to 5''.
Folosind variabila ''contor'' putem să facem balerina să sară de 9 ori mai puțin ca răspunsul. Răspunsul fiind 45, ea va sări de 5 ori. Dacă răspunsul întrebării ar fi fost 90, ea va sări de 10 ori. Folosește operatorul **împarte** ''/'' pentru a împărți ''answer'' la 9.
===== Bonus 1: Echivalența buclelor =====
Transformă bucla ''repeat contor'' de la punctul 4 din Tutorial într-o buclă ''repeat until''. Folosește variabila ''contor'' pentru a număra de câte ori a sărit. **Atenție!** Fața de exercițiul precedent, în care ''contor'' era o variabilă în care spuneam de câte ori trebuie să sară, acum folosim ''contor'' pentru a ține minte de câte ori a sărit balerina.
Inițial, ''contor'' este 0. Vom repeta săriturile până când ''contor'' este 5. După fiecare săritură, adaugă 1 la valoarea variabilei ''contor''.
Realizează programul care face asta și testează.
Cum poți face același lucru dacă inițializezi variabila ''contor'' la 5?
Realizează programul care face asta și testează.
===== Bonus 2: Spune ceva în timp ce sari și lumea te va aplauda! =====
Bravo! Ai ajuns la Bonus 2! Ești foarte priceput! Acum hai să îți mai dau o provocare. Pentru prima și a treia săritură, balerina va spune ceva. Pentru a doua, a patra și a cincea săritură, oamenii o vor aplauda.
===== Lucru pentru acasă - Exercițiul 1 =====
Dacă ai ajuns până aici, înseamnă că e timpul să facem ceva mai dificil, dar foarte interesant! Balerina noastră va face acțiuni în funcție de paritatea săriturii. De exemplu, la săriturile pare va spune 'Îmi place baletul!', iar la săriturile impare va spune 'Mă duc și la Digital Kids!'
Ce înseamnă paritate? Este proprietatea numerelor naturale de a fi divizibile cu 2. Numerele pare sunt: 0, 2, 4, 6, 8, ... iar numerele impare sunt 1, 3, 5, 7, 9, ...
Cum aflăm dacă un număr este par sau impar? Împărțindu-l la 2, dacă se împarte exact, adică restul este 0, atunci este par. Altfel este impar.
Folosește operatorul ''() mod ()'' care va da restul împărțirii lui primului număr la al doilea. De exemplu ''4 mod 2'' va da 0, iar ''5 mod 2'' va da 1.
===== Lucru pentru acasă - Exercițiul 2 =====
Creează un proiect nou în Scratch (vei folosi sprite-ul pisică). Vrem ca pisica să pornească din colțul stânga jos și să meargă în zig-zag până atinge marginea de sus. Înconjoară ecranul cu un chenar negru astfel încât toate marginile să fie negre.
Urmează instrucțiunile de mai jos:
- Folosește o buclă ''forever'' și o instrucțiune ''if touching color'' (cum e în structura de mai sus), deci pisica se oprește dacă atinge culoarea negră.
- Folosește o instrucțiune ''glide <1> secs to x, y'' (din secțiunea //Motion//) și variabilele ''x position'' și ''y position''.