Elements
del llenguatge de programació Winlogo |
|
En
la pàgina precedent hem definit WIN-LOGO i el Micromón
de SADEX. Tot seguit aprofundirem en l'entorn de programació
WIN - LOGO.
El
primer que has de fer és tenir el programari. Tots
els centres solen tenir-lo. Consulta el Coordinador informàtic
del teu, i si fos el cas hauràs de demanar-lo, podeu
fer-ho demanant-la al PIE mitjançant un escrit del
vostre centre en què se'n justifiqui el seu ús.
Per a més informació sobre Win Logo per a Windows
podeu contactar amb el Sr. Joan Busquets a l'adreça
de l'Aula de Recursos de Tecnologia. |

Joan
Busquets
Aula de recursos de Tecnologia
http://www.xtec.es/aulatec
Tel. 936 920 660
Centre de Documentació i Experimentació en Ciències
i Tecnologia |
La
seva instal·lació és del més senzill,
segueix les instruccions. |
|
|
Darrerà
versió existent als IES.
Un
cop instal·lat en executar-lo veuràs el següent:
Ens
interessa tenir sempre visibles tres finestres, les més
importants de WIN-LOGO: |
Finestra
de treball
En ella podrem executar ordres - comandaments, instruccions
- directes, o executar procediments editats en la finestra
d'edició.
Finestra d'edició
Serà aquí on editarem, modificarem, desarem
o carregarem procediments. Aquestes operacions també
les podríem efectuar dins la finestra de treball, però
l'ordre, la lògica i l'experiència dels desenvolupadors
d'aplicacions - aquí procediments - ens indica que
el més encertat és emprar aquesta finestra.
Finestra de textos
És en aquesta finestra on visualitzarem els missatges,
observacions, etc., que ens mostri l'entorn.
|
 |
 |
 |
 |
Quan
caldrà visualitzar o monotoritzem alguna mesura també
serà necessària la finestra de gràfics. |
|
Com
ja hem dit abans: si temin connectat el SADEX al nostre PC,
carregarem el Micromón dins WIN-LOGO. Executarem la
següent instrucció dins la finestra de treball: |
Què
és el primer que farem? |
El
programa farà un test dels mòduls connectats
i ens informarà tot seguit. Podrem programar procediments,
depurar-los i comprovar el seu funcionament en el SADEX. |
recupera
"sadex |
Si
no temin connectat el SADEX al nostre PC, carregarem el Micromón
dins WIN-LOGO per treballar només en mode programació.
Executarem la següent instrucció dins la finestra
de treball: |
|
El
programa entra en un mode virtual - simulació - de
funcionament i haurem de definir els mòduls que volem
simular que estan connectats. Seguint les instruccions atentament
és un mode de treball fàcil d'assimilar pels
nostres alumnes. Aquests podran programar els procediments
i depurar-los però hauran de provar-los en l'equip
que tingui el SADEX connectat. Qüestió de paciència
i organització. |
recupera
"simsadex |
Podem
fer-ho de dues maneres: directament o en mode programació. |
Com
programem en LOGO? |
Escriurem
directament en la finestra de treball les instruccions - comandaments
o primitives - i en prémer <Return> aquestes
s'executaran. |
Mode
directe: |
activa.sortida
"a 2 |
per
exemple: |
la
sortida 2 de la via a s'activarà tot juts pitjem <Return> |
|
Dins
la finestra d'Edició utilitzem aquests comandaments
o primitives per a construir procediments. Cal que entenguem
un procediment com un conjunt agrupat i estructurat d'instruccions
amb la finalitat de solucionar un problema de control informàtic.
Podem dir doncs, que és un element més complex
que una simple instrucció. |
Mode
programat: |
|
Com
creem un procediment? |
Tot
procediment començarà: |
procediment
nom |
Tot
seguit trobarem les primitives o comandaments: |
ordre
1 |
|
ordre
2 |
|
........... |
Tot
procediment finalitzarà amb l'instrucció fi: |
fi |
procediment
llums
activa.sortida "a 1
espera 200
desactiva.sortida "a 1
activa.sortida "a 2
espera 200
desactiva.sortida "a 2
activa.sortida "a 3
espera 200
desactiva.sortida "a 3
fi |
per
exemple:
Funcionament
cíclic de sortides amb un temps d'espera de 2 segons
entre activacions.
200
= 200 centésimes de segon |
procediment
intermitents
repeteix 100 [llums]
fi |
Dins
un procediment podem cridar l'execució d'altre procediments.
Per exemple: |
Un
cop situat el cursor en la finestra d'edició confeccionarem
el procediment desitjat, tot seguit pitjarem la icona de desar
de la barra d'icones, o triarem el menú Fitxers / Desa... |
Com
enregistrem un procediment? |
Recordeu,
quan programem el temps passa volant, és convenient
anar salvant de tant en tant el procediment en el qual treballeu.
|
 |
Un
cop situat el cursor en la finestra d'edició, pitjarem
la icona de recuperar de la barra d'icones, o triarem el menú
Fitxers / Recupera... |
Com
recuperem un procediment? |
En
la finestra d'edició podrem escriure tants procediments
com ens faci falta ja que es poden acumular. D'aquesta manera
podrem visualitzar el conjunt de procediments necessaris per
resoldre un determinat problema. Però, haurem de tenir
en compte que no hi pot haver dos procediments amb el mateix
nom, i que a l'hora de cridar-lo hem de respectar exactament
la grafía emprada (accents, minúscules/majúscules). |
 |
L'obrirem
dins la finestra d'Edició i el modificarem a voluntat |
Com
modifiquem un procediment? |
En
aquesta finestra valem les operacions d'edició: Tallar,
Copiar, Enganxar, Esborrar. Feu-les servir quan els procediments
siguin repetitius. |
|
Per
executar un procediment cal interpretar-lo amb anterioritat.
D'aquesta manera WIN-LOGO el reconeixerà com a tal
i l'executarà con si d'una primitiva o instrucció
es tractés. Un cop situat el cursor en la finestra
de Treball tot seguit pitjarem la icona Interpretar de la
barra d'icones, o triarem el menú Àrea / Interpreta... |
Com
executem un procediment? |
Si
tot va bé i no hi ha cap error, a la finestra de Text
apareix per cada un dels procediments presents a l'editor,
el missatge, Acabat de definir nom, on nom és el nom
del procediment. També hauran de ser "interpretats"
els procediments quan es modifiquin i volem que aquesta modificació
quedi registrada. Resumint, sempre que definim o modifiquem
un procediment s'ha d'executar l'opció Àrea
/ Interpretar abans de cridar-lo - executar-lo -. |
 |
En
molts procediments ens caldrà esperar un temps abans
de que Win-Logo passi d'una instrucció o procediment
al següent - recordeu estem dins un programa seqüencial,
una darrera l'altra -
Win-Logo disposa d'una primitiva en la que caldrà indicar
el temps d'espera en centèsimes de segon.
|
Com
creem una pausa de temps? |
procediment
salutacions
escriu "Hola! Com esteu?
espera 600
escriu "Ja que no voleu dir res, doncs, Adéu.
fi
|
Exemple.
Aquest procediment escriurà a la finestra de Text la
paraula Hola! Com esteu?, i al cap de 6 segons escriurà
la paraula Ja que no voleu dir res, doncs, Adéu. |
La
repetició és una estructura bàsica dins
de la programació de sistemes de control. Podem implementar
repeticions de diverses maneres, però en Logo existeix
la primitiva repeteix que permetrà repetir una sèrie
d'ordres o procediments un determinat nombre de vegades. |
Com
creem una repetició? |
La
primitiva té dos paràmetres a complir, el primer
és el nombre de vegades que ha de fer la repetició,
el segon és la llista de primitives i/o procediments
que ha d'executar.
|
La
llista de procediments haurà d'anar entre claudàtors
([ ]). Els procediments s'escriuran un darrera de l'altre
separats por un espai en blanc. |
repeteix
5 [escriu "Hola! escriu "Com estàs avui?] |
Exemple:
Cal escriure a la pantalla 5 vegades dues frases en dues línies
seguides. |
En
Logo les variables s'identifiquen amb un nom, el que desitgi
el programador. Poden contenir qualsevol valor: text, un valor
numèric o una llista. |
Com
trebalem amb variables? |
Per
a assignar un valor a una variable farem servir la primitiva:
|
posa.a |
Té
dos paràmetres, el primer és el nom de la variable
que sempre ha de començar amb cometes, el segon és
el valor que li assignem. |
|
posa.a
"comptador 500 |
Exemple:
a la variable comptador li assignarem el valor 500. Aquest
es mantindrà fins que no el canviem |
Com
podrem utilitzar o consultar el contingut d'una variable?
Molt fàcilment, possarem dos punts (:) davant el nom
de la variable. |
|
escriu
:comptador |
Exemple:
a la finestra de text s'escriurà el contingut de la
variable comptador , es a dir, el valor 500. |
|
Com
llegir un càracter del teclat? |
Per
llegir un caràcter del teclat s'empra la primitiva:
|
caràcter.llegit
|
Aquesta
primitiva espera (aturant-se l'execució del programa)
que es premi una tecla del teclat de l'ordinador i torna el
caràcter de la tecla premuda, però no ho escriu
a cap lloc. |
|
escriu
caràcter.llegit |
Exemple:
la següent instrucció espera que es premi una
tecla i escriu a la finestra de textos el caràcter
corresponent a la tecla premuda.
|
Existeixen
altres primitives que ens permetran llegir diversos caràcters
des del teclat. Sí vols més informació,
ves a l'ajuda WIN-LOGO i cerca la primitiva caràcter.llegit.
Trobaràs referències a primitives semblants. |
 |
Als
Sistemes de Control és habitual l'ús i la necessitat
de comptadors. Com podem crear un comptador? |
Com
creem un comptador? |
Haurem
de fer servir una variable que incrementarem en una unitat
cada cop que es presenta l'esdeveniment que estem controlant,
per exemple un comptador d'ampolles. |
|
posa.a
"comptador :comptador + 1 |
Imaginem
que anomenem comptador a la variable que volem incrementar.
Per actualitzar el seu valor en una unitat haurem d'escriure: |
Que
hem fet? Assignar a la variable "comptador el seu contingut
actual :comptador, més una unitat + 1. |
|
procediment
tecles
escriu [Prem una tecla]
posa.a "aux caràcter.llegit
posa.a "comptador :comptador + 1
(escriu [Tecles premudes =] :comptador)
tecles
fi
|
Exemple:
Volem comptar les vegades que premem una tecla del teclat. |
Normalment,
l'increment successiu del valor d'una variable es realitza
dins d'un bucle. Abans d'executar el procediment haurem de
tenir en compte de posar a zero la variable (o bé al
valor inicial que voguem)
|
Més
endavant s'explica com realitzar bucles dins un programa. |
Com
ho farem? Emprant la primitiva: |
posa.a
"comptador 0 |
Aquesta
instrucció no la podreu incloure dins del bucle, ja
que el comptador es posaria a zero a cada cop que s'executés
amb el resultat de que el comptador no s'incrementaria. |
La
inicialització de la variable no pot incloure's en la
recursivitat. |
Tot
procediments creat, igual que les primitives, poden portar
paràmetres - variables d'entrada -. Per construir-lo
cal que a l'hora d'escriure'l identifiquem quin és
el valor que s'ha d'introduir com a variable, donant-li un
nom, que tot seguit inclourem a continuació del nom
del procediment. |
Com
creem un procediment amb paràmetres? |
procediment
salutacions :temps
escriu "Hola! Com esteu?
espera :temps
escriu "Ja que no voleu dir res, doncs, Adéu.
fi |
Vegem
un procediment creat anteriorment el qual modificarem amb
la inclusió d'un paràmetre que anomenarem
:temps |
Ara
el procediment salutacions, té el paràmetre
:temps que és el temps que tardarà en visualitzar-se
el segon missatge. A l'hora d'invocar el procediment haurem
d'adjuntar el temps en centèsimes de segon. |
salutacions
1000 |
Canviar
el temps d'espera sense que calgui modificar el procediment,
n'hi haurà prou amb donar al paràmetre associat
al procediment el valor de temps desitjat. Per acabar cal
dir que un mateix procediment pot tenir més d'un paràmetre
associat. |
Que
hem aconseguit? |
L'estructura
condicional és molt útil a l'hora d'implementar
Sistemes de Control i Mesura ja que podrem condicionar l'evolució
d'un procés o sistema en relació al seu estat.
|
Com
creem condicionals? |
 |
Com
formularem un condicional? |
Amb la primitiva si a la que seguirà la condició
a complir, tot seguit, la primera llista d'ordres ha executar
en cas de que la condició sigui certa, després
escriurem la segona llista que haurà d'executar-se
en el cas de que la condició sigui falsa. Totes durs
llistes d'ordres hauran d'escriure's dins de claudàtors
([ ]). |
La
condició s'ha de construir amb els operadors relacionals:
=, igual
>, més gran que
<, més petit que
El
resultat de la condició serà un valor "ver
o "fals que són paraules reservades de Logo. |
si
5 = 7 [escriu [llista 1]] [escriu [llista 2]] |
Exemple: |
Evidentment
la condició serà "fals, per tant a la finestra
de text s'escriurà llista 2.
|
Fixeu-vos
bé en els claudàtors. Modifiqueu
la condició per: |
si 5< 7 [escriu [llista 1]] [escriu [llista 2]] |
El
resultat serà l'escriptura de llista 1 a la finestra
de text. |
Els
condicionals no hauran de portar sempre la segona llista d'ordres,
parlarem doncs, d'un condicional sense alternativa o simple.
Quan es contemplin les dues alternatives, direm que l'estructura
condicional és completa. |
|
Dins
l'estructura condicional podrem fer servir variables. |
Exemple:
Cal comparar un número entrat per teclat (entre 0 i
9) amb el número 6. El resultat serà el missatge
"El número entrat és menor que 6"
si és així o "El número entrat és
més gran de 6". |
procediment
sis
escriu [Entra un nombre del 0 al 9]
posa.a "teclat caràcter.llegit
si :teclat < 6 [escriu [El número entrat és
menor que 6]]"
[El número entrat és més gran de 6]]
fi |
Dins
l'estructura d'un condicional podem incloure altre condicional.
|
Si
en l'exemple anterior contemplem la possibilitat que el número
introduït sigui igual a 6, tindrem tres possibilitats.
Com un condicional només distingeix entre dos casos,
no podem solucionar el problema amb una única condicional.
Una possible solució serà incloure un condicional
dins de l'altre: |
procediment
sis
escriu [Entra un nombre del 0 al 9]
posa.a "teclat caràcter.llegit
si :teclat < 6 [escriu [El número entrat és
menor que 6]]"
[si :teclat=6 [escriu[El número entrat és el
6]]"
[escriu [El número entrat és més gran
de 6]]]
fi |
procediment
sis
escriu [Entra un nombre del 0 al 9]
posa.a "teclat caràcter.llegit
si :teclat<6 [escriu [El número entrat és
menor que 6]]
si :teclat=6 [escriu[El número entrat és el
6]]
si :teclat>6 [escriu [El número entrat és
més gran de 6]]
|
Altra
solució podria ser la utilització de tres condicionals
simples. |
Si
es prem una tecla, el programa recull aquest fet i el guarda. |
Com
saber si s'ha premut una tecla del teclat? |
La
primitiva tecleig retorna "CERT si existeix almenys un
caràcter en espera per a ser llegit i "FALS en
cas contrari. |
tecleig |
Aquesta
primitiva no espera que l'usuari premi una tecla, noméscomprova
si s'ha premuda abans. |
|
si
tecla [escriu [Ha premut una tecla!]] |
La
següent instrucció testejarà si s'ha premut
alguna tecla. En cas afirmatiu, escriurà un missatge
a la finestra de textos. |
Ho
podrem fer de dues maneres: |
Com
podem interrompre l'execució d'un procediment? |
1.
Pitjant la tecla ESC. |
El
procediment, així com el programa quedaran interromputs
de manera immediata. |
2.
Executant el procediment surt.a "nivell.superior |
Aturarà
l'execució del procediment en curs, retornant el control
al procediment que l'ha cridat. A diferència del cas
anterior, només s'interromp el procediment que s'està
executant en aquell moment, no el programa. |
Aquesta
primitiva només es pot utilitzar dins d'un procediment. |
Exemple: |
si
tecleig [surt.a "nivellsuperior] |
Si
es prem una tecla el procediment quedarà interromput. |
Si
els condicionals ens permeten "triar" dos procediments
segons la condició fitxada, els bucles ens donaran
la possibilitat de fer salt dins un mateix procediment o altre
que ens interessi en un moment determinat. |
Com
creem BUCLES? |
 |
El
procediment més emprat és el d'estructura recursiva.
Podem plantejar-les de varies maneres. Una de les més
emprats i pràctiques és l'estructura recursiva
de cua. Aquesta consisteix en què un procediment es
crida a si mateix. Per implementar-la introduirem una ordre
en la línia anterior al fi del procediment |
 |
Com
podem observar el procediment mai arribarà al fi, sempre
s'estarà executant. Per poder sortir d'aquest procés
tancat, cal establir una condició de sortida després
de l'encapçalament. |
procediment
sempre
si tecleig = "ver [acaba]
escriu [Sí vols finalitzar el procés, prem una
tecla]
sempre
fi |
Exemple:
aquest procediment anirà escrivint la frase Sí
vols finalitzar el procés, prem una tecla
a la finestra de text fins que premem una tecla. |
El
Win-Logo incorporà la primitiva mentre que és
una estructura iterativa (recursiva) amb condició de
permanència en el bucle. La seva sintaxi és: |
mentre |
mentre
[condició] [llista dordres] |
Tant
la condició com la llista d'ordres (procediments que
s'han d'executar en cas de complir-se la condició)
han d'anar sempre entre claudàtors ([ ]). Les ordres
s'escriuran una darrere l'altra, separades per un espai en
blanc. |
Per
a construir el mateix procediment que en estructura recursiva,
haurem d'invertir la condició de la primitiva no o
caldrà comparar amb la condició contrària,
|
|
procediment
sempre
mentre [tecleig = "fals] [escriu [Sí vols finalitzar
el procés, prem una tecla]
fi
|
Quan
emprarem una o l'altre estructura? Dependrà del problema
a resoldre. Si hem d'escriure moltes ordres, serà més
clara a efectes d'escriptura l'estructura recursiva, mentre
que en l'estructura del mentre, ho hem de fer de forma seguida
per mantenir la llista. |
|
La
primitiva Temps ens retorna les centèsimes de segon
passades des que s'ha encès l'ordinador. Si emprem
adequadament aquesta primitiva podrem mesurar intervals de
temps. |
Com
mesurem el temps? |
procediment mesuratemps
posa.a "t0 temps
repeteix 2 [escriu [¡Hola!]]
posa.a "t1 temps
es (:t1-:t0)
fi |
Exemple:
el següent procediment escriurà a la finestra
de text el temps transcorregut (en centèsimes de segon)
en executar dues vegades la instrucció escriu [¡Hola!].
|
Pot
ésser necessari alguna alarma sonora. La primitiva
Toca frec cent produirà un so en la freqüència
indicada en frec i amb una durada de tantes centèsimes
de segon com s'especifiquen en cent. |
Com
fer servir els Beeps de l'ordinador? |
toca
950 150 |
toca |
Produeix
un so de freqüència 950 Hz durant 1,5 segons. |
Exemple: |
El
programa Logo ens permetrà realitzar les operacions
matemàtiques bàsiques com: suma (+), resta (-),
multiplicació (*), divisió (/), arrel quadrada
(RC), potència (potència num potència),
logaritme neperia (Ln), logaritme decimal (log), sinus (sin),
cosinus (cos), etc. |
Com
i quines operacions matemàtiques poden emprar? |
Per
a més informació, ves a l'ajuda de Win-Logo
i segueix l'itinerari [les primitives / classificació
de primitives / matemàtiques].
|
 |
Les
operacions lògiques més importants que permet
realitzar el programa Logo són: = , <, >, Y,
O |
Com
i quines operacions lògiques poden emprar? |
Aquestes
operacions lògiques ens retornaran "CERT o "FALS.
A l'apartat "Com creem condicionals?" ja heu vist
algun exemple de la manera d'emprar els operadors =, <
i >.
|
|
Si
Y (:b>6) (:b<10) [es :b surt.a "nivell.superior] |
Exemple: |
En
la instrucció següent, si el contingut de la variable
b es troba entre els valors 6 i 10, s'escriu el valor de b
a la finestra de textos i s'interromp l'execució del
procediment on es troba insertada aquesta instrucció. |
es
= escriu |
Si
O (:b<6) (:b>10) [es :b surt.a "nivellsuperior] |
Exemple: |
En
la instrucció següent, si el contingut de la variable
b no es troba comprès entre els valors 6 i 10 (ambdós
inclosos), s'escriu el valor b a la finestra de textos i s'interromp
l'execució del procediment on es troba insertada aquesta
instrucció.
|
es
= escriu |
Per
a més informació, consulta l'ajuda de Win-Logo |
 |
També
podeu consultar el Curs D52: Usos i aplicacions del Logo
multimèdia a l'aula. El podeu consultar al CD-ROM
FORMACIÓ SINERA 2001.
|
CD-ROM
FORMACIÓ SINERA 2001.
|
a
la pàgina anterior / següent |
  |
|
by
Jordi Jordan |