|
El llenguatge de programació Wiris++ |
|
|
|
En aquesta pràctica (que, tanmateix, també es podria designar com a document
de conceptes) començareu a conèixer el llenguatge de programació propi
de la calculadora Wiris i constatareu que és un altre dels recursos que
li donen una gran potència de càlcul i, alhora, permeten fer-hi interessants
reflexions conceptuals. Es presentaran les sentències de què es disposa
i es veuran uns primers exemples d'aplicació.
|
|
|
|
Els recursos per a la programació
amb la Wiris
|
|
|
|
Presentació de les comandes |
|
|
|
Tot i que entre els objectius d'aquest curs no hi figura ensenyar a programar,
perquè aquesta és una tasca personal, laboriosa i, de vegades, difícil,
és ben cert que per albirar totes les possibilitat de la Wiris cal conèixer
el llenguatge de programació que incorpora. Es tracta d'un llenguatge
estructurat i funcional, dissenyat expressament per a la Wiris.
En aquesta pràctica i en altres d'aquest curs podreu conèixer les idees
fonamentals que us premetran elaborar els vostres programes. Si voleu
aprofundir en el tema, l'apartat WIRIS ++ de la Guia ràpida
de la Wiris us facilitarà la tasca.
Les comandes o sentències fonamentals que cal considerar es descriuen
tot seguit i s'aclariran en els exemples que analitzarem al llarg de diverses
pràctiques del curs. Per accedir-hi i escriure-les a la finestra de sessió,
cal fer clic a la pestanya de la
barra d'eines.
|
|
|
|
- És imprescindible començar amb l'explicació que, atenent a la forma
de treballar de la Wiris, les comandes incloses en un programa han de
tenir com a finalitat fer càlculs o construir un objecte. Cal tenir
moltes precaucions (que es comenten en una finestra d'ampliació)
per incloure en bucles de programació sentències d'execució. La línia
de treball que es recomana d'adoptar en primera instància és
la següent: mitjançant el programa contruirem una llista o un element
geomètric i, en acabat, amb les comandes que ja coneixem, com és ara
escriu o dibuixa,
visualitzarem allò que ens interessi.
Comentarem, en primer lloc, les sentències condicionals, que permeten
que s'executin unes accions o unes altres segons que es compleixi una
condició o no.
Heu de tenir en compte les consideracions següents:
- Les condicions s'han d'expressar mitjançant el signe d'igual llarg
o els signes de desigualtat inclosos en la carpeta de
o també poden ser expressades directament com a booleans, és a dir,
elements de treball de la Wiris que puguin tenir els valors cert
o fals.
- La comanda condicional fonamental, a saber, si..aleshores..fi,
s'escriu fent clic a la icona si. És clara
la seva funcionalitat: si es compleix la condició, s'executen les comandes
indicades; en cas que no es compleixi la condició, no es fa cap acció
i es passa a la comanda subsegüent al fi.
- Podem afegir alternatives a les nostres sentències condicionals. En
primer lloc, si..aleshores..altrament..fi,
per a la qual també disposem d'una icona. Per poc que hagueu fet alguna
tasca senzilla de programació, tindreu clar com actua: si es compleix
la condició, s'executen les comandes indicades en primer lloc; en cas
que no es compleixi la condició, llavors les accions que durà a terme
la Wiris seran les indicades després de l'altrament.
- També hi ha la possibilitat d'alternatives múltiples, encadenant diverses
condicions una després de l'altra. Aquesta possibilitat s'introdueix
amb altrament si; es poden enllaçar diverses
condicions amb aquesta opció i acabar amb altrament.
Perquè s'escrigui un altrament si enmig d'una
sentència condicional, començarem per fer clic a una de les dues icones
ja explicades. Tot seguit farem clic a la icona menú
de la carpeta
i podrem afegir una
o més condicions alternatives. En aquest cas, si es compleix la condició
indicada en la línia del si s'executen les
comandes indicades en primer lloc; en cas que no es compleixi, s'examina
la condició del primer altrament si i si es
compleix, es fan les accions corresponents o, en cas contrari, es passa
a analitzar la condició següent. I així successivament. Si en acabar
hi ha un altrament, la Wiris actuarà com ja
s'ha indicat en el seu moment.
L'altra grup de sentències de què disposem són aquelles que permeten
la repetició (si escau condicionada) d'una determinada acció que convé
recordar que no pot ser del tipus escriu o dibuixa,
sinó que ha de ser de treball intern, com és ara fer un càlcul o construir
una llista.
Comentem-les breument:
- La primera d'elles, per..fer..fi, que s'obté
amb la icona per, repeteix una acció per tots
els elements indicats en un iterador, que pot ser una llista
o un recorregut. Vegeu algunes possibilitats i la manera d'indicar un
iterador múltiple:
- per j en {1,2,3,4}
repetirà l'acció o accions indicades per j=1, j=2, j=3 i j=4.
- Si escrivim per i,j
en 1..9, 1..9 es repetirà l'acció per i en {1, 2,
3, 4, 5, 6, 7, 8, 9} (que hem escrit com un recorregut) i j
en la mateixa llista. Noteu que s'ha d'indicar en quin objecte volem
que estigui i i en quin objecte volem que estigui j,
encara que sigui el mateix.
- Amb l'expressió per i,j
en {1,2,3,4},{1,2,3,4}/{i} indiquem que volem repetir l'acció
per totes les combinacions de valors de i i j de manera
que i pertanyi a {1, 2, 3, 4} i j a {1,2,3,4}/{i}
cosa que, atenent al fet que / equival a la resta de conjunts,
imposa que j pertany al mateix conjunt indicat, però és diferent
de i.
- mentre..fer..fi repeteix les accions o comandes
que s'indiquin en tant que la condició expressada es compleixi. És lògic
pensar que en la condició apareixerà una variable que va canviant de
valor a mesura que es realitzen les accions.
- repetir..fins.. és conceptualment semblant
a l'anterior. També hem de pensar que en la condicíó apareixerà una
variable que va canviant de valor a mesura que es fan les accions que,
en aquest cas, s'aniran repetint si la condició no és certa, i quan
la condició es compleixi es passarà a la primera línia subsegüent al
bucle iteratiu.
|
|
Primer exemple: activitat didàctica |
|
|
|
En una de les pràctiques
del mòdul 1 havíem vist la possibilitat d'elaborar un qüestionari de preguntes
amb resposta. L'alumne o l'alumna podia entrar les respostes i la Wiris
li deia si ho havia fet bé o no.
En aquesta primera proposta de programació que teniu tot seguit podreu
veure com es pot variar l'exemple perquè l'alumne o l'alumna coneguin
únicament el nombre d'encerts i, per exemple i com a activitat didàctica,
se'ls pugui indicar que modifiquin les respostes fins que les tinguin
totes correctes.
Pot ser interessant que abans d'obrir la finestra activa on teniu desenvolupat
el programa vegeu els elements fonamentals que es destaquen en la imatge
següent:
- Recordeu com s'escriuen les expressions de què volem que la Wiris
comprovi la certesa o falsedat. En aquest cas, amb l'igual llarg i acabant
amb un ? abans del qual hem deixat un espai.
Hem fet ús de la icona
per indicar
allò que esperem que omplin els alumnes.
- Observeu que a cadascuna d'aquestes igualtats que volem comprovar
li podem donar un nom de variable (un identificador). Cadascun d'aquests
identificadors correspondrà a un booleà: seran elements que poden tenir
com a valor cert o fals. Adoneu-vos que acabarem cada
línia amb un punt i coma; d'aquesta manera no s'escriuran les respostes:
el codi romandrà inalterable.
- Tot seguit es construeix una llista P, que podríem dir que
és el conjunt de preguntes de la prova.
- Llavors ja es pot passar al que ara ens ocupa: el programa que compta
els encerts.
- Vegeu que és repetix una acció per i
en P, és a dir, per a totes les preguntes de l'examen.
- Vegeu també el condicional: si i
(que vol dir "si i és cert"); llavors s'afegeix un punt al
nombre d'encerts.
|
 |
|
|
Recompte d'encerts en un qüestionari
|
|
Una vegada analitzat l'exemple, us proposem
que, com a exercici pràctic, hi canvieu el que faci falta per fer un nou
qüestionari amb el tema que vulgueu. Ara bé, aquesta part de la pràctica
l'haureu d'enviar com a exercici 2 d'aquest
mòdul.
|
|
Segon exemple de programació |
|
|
|
En l'exercici 1 us proposem que resolgueu
un problema numèric amb l'ús de ...amb... en... on....
Això us ajudarà a copsar la potència d'aquest recurs de la Wiris per construir
objectes, per exemple, la llista que dóna la solució d'un problema.
Tot seguit farem servir el mateix exemple, perquè, enfocat amb unes altres
eines, dóna un bon exemple d'introducció a la programació Wiris++.
L'exemple és aquest:
Quines són les xifres x, y, z perquè
la suma xx + yy + zz = xyz esdevingui correcta?
|
 |
|
|
Un problema d'aritmètica
|
|
Adoneu-vos dels aspectes següents:
- La necessitat de construir el conjunt de solucions enfront del que
faríem amb molts altres llenguatges i que consistiria a anar escrivint
les solucions.
- La manera d'escriure que els nombres x, y, z que busquem han
de pertànyer, respectivament, x al conjunt {1, 2} (penseu
per què ha de ser així!), i els altres dos al conjunt {1, 2, 3, 4, 5,
6, 7, 8, 9} que s'ha escrit com un recorregut, l'1..9 (per què no poden
valer 0 aquests dos nombres?).
- Com s'ha escrit la condició xx + yy + zz = xyz. Vegeu
l'igual llarg!
- Com s'ha anat construint el conjunt de solucions, tot i que veureu
de seguida que només hi ha una solució!
Fixeu-vos que, en l'exercici anterior no ha fet falta imposar que x,
y, z fossin tres xifres diferents. Però així ha estat.
- Com a pràctica, podeu modificar l'exercici anterior per veure que
el problema de trobar quatre dígits diferents, diem-ne X,
Y, Z, T, que compleixin XXX + YYY + ZZZ + TTT = XYZT
no té solució.
I ara per acabar un comentari de caràcter tècnic que explica
concretament com podem aconseguir escriure en diferents línies
les diferents comandes que s'han de repetir dintre d'un bucle o d'altres
sentències de programació de la Wiris. El procediment escaient
és aquest:
- prement la combinació de tecles Majúscules +
Retorn al final de cada comanda
Aquesta mateixa combinació de tecles serveix per
- escriure diverses línies de comandes "com si fossin una",
en qualsevol altre situació i en aquest cas és sintàcticament
equivalent al punt i coma.
- fraccionar una línia de comanda en diverses línies (perquè
és molt llarga, per facilitar-ne la lectura, etc...)
Vegeu-ne un exemple:
|
|
|
 |
|
|