En aquest apartat començarem a explicar les estructures fonamentals de la programació que ens queden per veure desprès d'haver treballat l'estructura seqüencial a la pràctica anterior.

Estructura Iterativa (I)

Repetir és una de les accions que els ordinadors fan millor. Són incansables! A més, és completament necessari poder repetir per poder fer programes. Sense l'habilitat de fer repeticions hi hauria problemes que els ordinadors no podrien resoldre!

Començarem per la repetició més senzilla:

Les estructures de control a Scratch tenen aquesta forma de contenidor obert. En aquest cas, la repetició 'per sempre', el nom és prou informatiu. Els programes que posarem dins del 'per sempre' es repetiran sense fi.

Tornem al programa que fèiem servir a l'apartat 3. Anem a posar-ho tot, excepte la instrucció inicial de començar amb la bandera verda, dins d'un 'per sempre' i desprès ho tornem a enganxar en començar amb la bandereta verda. A la figura veiem el procés amb tots els detalls:

Així doncs el programa que tenim és aquest

que el que fa és… premeu la bandereta verda! Veieu que fa el mateix que feia, però ho fa sempre. Això és perquè les instruccions que estan a dins del 'per sempre' s'executen sense parar… per sempre! Ho podeu aturar prement el botó vermell al costat de la bandera verda (el botó d'stop).

No cal, però, repetir per sempre. Podem dir a Scratch que volem repetir només un nombre determinat de vegades. Arrossegant i canviant de lloc les instruccions com hem vist en el cas del 'per sempre', podem utilitzar el 'repetir 10' un cert nombre (10 en aquest cas) de vegades. Aquest 10 el podem canviar. A la figura hem acabat posant 25.

El programa queda així

És força clar què farà el programa. Ara tindrem les accions dins del 'repetir' executades 25 vegades en prémer la bandera verda.

Però pot ser que vulguem repetir només si passa alguna cosa relacionada amb el nostre programa. És a dir, pot ser que la condició per deixar de repetir depengui del que està passant mentre s'executa el programa, i per tant no puguem saber, abans d'executar el programa quantes vegades s'ha de repetir.

Veiem un exemple. El 'repetir fins' té un forat de contorns angulars al costat, per tant, espera que hi posem una expressió lògica…

…sí, sí, ja ho sé. De què estem parlant? expressions lògiques? forats de contorns angulars? quan ho hem vist això? Doncs encara no ho hem vist. Precisament per això caldrà que fem un petit parèntesi.

Expressions

No tot el que està categoritzat amb els botons

són pròpiament instruccions. No hem fet aquesta distinció fins ara per simplificar, però ara convé entrar-hi una mica més en detall.

Mireu les categories 'Operadors' o 'Sensors'. Trobareu uns blocs de forma diferent als blocs que hem vist fins ara. Compareu les instruccions com 'moure', les estructures de control com el 'per sempre' i les expressions.

Les expressions es caracteritzen per retornar valors. D'una expressió s'espera que calculi o mesuri alguna cosa i retorni el resultat. No són instruccions, sinó que s'han d'utilitzar en llocs molt determinats, que n'imposen la utilització. Fixeu-vos que hi ha expressions-bloc amb contorns rodons i expressions-bloc amb contorns angulars. Les primeres, les dels contorns rodons, són expressions numèriques, és a dir, han de retornar un valor numèric. En canvi, les altres, de contorns angulars, són expressions lògiques1) amb dos possibles valors: 'cert' o 'fals'.

A la figura veiem l'expressió de sumar dos nombres, amb un lloc a cada costat del '+' per posar-hi els nombres, i l'expressió 'distància a menú', que ens diu la distància del personatge al que pertany el programa del que l'expressió forma part, a un altre personatge triat del petit menú desplegable que hi veiem.

En canvi la comparació entre dos nombres '<' o la pregunta 'ratolí premut?' es respondran amb valors 'cert' o 'fals'

Aquestes expressions van a llocs especialment preparats per col·locar-hi aquests blocs. Els blocs de contorns rodons poden anar a forats amb contorns rodons. Per exemple, els paràmetres de la instrucció moure estan preparats per posar-hi una expressió numèrica, però els mateixos paràmetres de les operacions aritmètiques (com el '+' que ja hem vist) també estan preparats per posar-hi altres expressions numèriques. Així podem composar les operacions. Per tant, podem composar expressions

per poder construir instruccions més sofisticades

per moure el personatge un nombre de passos entre 21 i 25, triat a l'atzar2).

Igualment, els forats amb contorns angulars estan preparats per encabir-hi expressions lògiques, és a dir, expressions que tenen com a possible resposta només dos valors: 'cert' o 'fals'. I també podem composar operacions de la mateixa manera que ho hem fet amb les expressions numèriques. Fins i tot podem composar els dos tipus d'expressions, si el bloc ens ho permet. Veiem-ne alguns exemples:

Aquesta, és una expressió lògica que ens dirà si el doble de l'arrel quadrada de 10 és més petit que 7 sumat a un nombre a l'atzar entre 1 i 10 (i el resultat, 'cert' o 'fals', dependrà del nombre a l'atzar que surti, és clar!)

Aquesta expressió ens dirà si tenim el ratolí premut i la tecla espai premuda.

Fixem-nos en l'operació lògica i (conjunció). De la mateixa manera disposem a Scratch de les operacions de disjunció (o) i negació (no)3).

Així doncs, resumint, els forats de contorns arrodonits esperen que hi posem expressions numèriques (que poden ser tan senzilles com un sol número, o tan sofisticades com vulguem) i els forats de contorns angulars esperen que hi posem una expressió lògica (de valor 'cert' o 'fals'). Tenim diversos blocs-expressió per construir expressions. Estan essencialment a les categories 'Operadors' i 'Sensors'.

I posarem fi a aquest parèntesi…

Estructura Iterativa (II)

Dèiem que hi ha estructures iteratives que repetiran les instruccions que hi ha dintre seu en funció del que passi mentre s'executa el programa. Ara ja podem intuir que això passarà en funció del resultat d'una expressió lògica. Aquesta és la raó que s'anomenin repeticions condicionals

Veiem un exemple. Suposem que volem un programa que faci el mateix que el programa que estem fent servir en aquesta pràctica, és a dir,que mogui el gatet 10 passos, el giri 15 graus, mioli i alterni vestits, però volem que ho faci fins que l'usuari premi la tecla espai.

Ara ja sabem com manipular els blocs per construir el programa, de manera que ja no cal detallar-ho tant com abans. El programa que tindrem és

Fixem-nos que per fer-ho més divertit hem decidit introduir una mica d'aleatorietat al programa. Ara, a cada repetició, es mourà un nombre de passos a l'atzar entre 1 i 10 i girarà un angle entre -30 i 30 graus, també a l'atzar. Executeu-lo i estigueu segurs d'entendre bé què està passant.

Oi que quan arriba a les vores queda el gatet ocult? Ho podem resoldre demanant a cada repetició que reboti si toca una vora. Hi ha una instrucció que fa precisament això:

Penseu que les repeticions indefinides o d'un determinat nombre de vegades són bastant fàcils d'entendre, però les repeticions condicionals amaguen subtileses que només deixen de ser-ho amb la pràctica. Insistiu a entendre bé les repeticions condicionals amb variacions d'aquestes pràctiques.

Estructura Condicional

Per finalitzar aquest apartat, estudiarem la darrera estructura bàsica que ens queda per veure: l'estructura condicional. En aquest cas tenim una estructura de control que serveix per decidir si un cert conjunt d'instruccions s'executa, o no, en funció d'una condició (és a dir, d'una expressió lògica).

Aquestes són les estructures 'si' i 'si…si no'. Les trobareu categoritzades a 'Control'

Si ja heu entès les repeticions condicionals, aquestes no us han de costar gens. La idea és que si l'expressió lògica (fixeu-vos en els forats de contorns angulars) és 'cert', executarem les instruccions dins del 'si', si aquesta expressió és 'fals', no executarem res en el cas del 'si', i les instruccions dins del 'si no' en el cas del 'si…si no'.

Suposem ara que volem que el gatet comenci des de l'origen de coordenades i que es mogui i giri a l'atzar com hem vist abans, però volem que mioli només quan pitgem la tecla 'm'. Per a això farem servir una estructura condicional 'si'

És possible que, a vegades pitgeu la tecla 'm' i el gat mioli més d'un cop. No us amoïneu, que això ja és correcte. El que pot passar és que mentre que vosaltres penseu que heu premut la tecla un cop, Scratch ha tingut temps de llegir la tecla unes quantes vegades i prendre-s'ho com una ordre de prémer la tecla diverses vegades.

Per poder veure exemples del 'si…si no' el millor que podeu fer és pensar-los vosaltres mateixos. Hi ha un component creatiu molt important en la programació!

Fins ara hem vist i jugat amb programets bastant simples, que l'única cosa que pretenien era il·lustrar els conceptes explicats.

Al proper mòdul ja veurem com construir programes amb un cert grau de sofisticació… i de diversió! Potser costa de creure, però amb el que ja sabeu en teniu més que suficient per fer programes molt interessants. Començarem de seguida.

1) també conegudes com expressions booleanes
2) com si tinguéssim un dau amb 5 cares, numerades 21, 22, …, 25
3) recordem que la conjunció respon 'cert' només quan els seus arguments són tots dos 'cert' i la disjunció respon 'fals' només quan els seus arguments són tots dos 'fals'