Limbajul LOGO - Mediu de programare online | Ţestoasa ta ce ştie să facă?
Limbajul LOGO cu animaţie
Tehnologii web
   
Proiect susţinut de  

U.P.I.R.

www.infogim.ro


Vă rugăm să aşteptaţi,

mediul se încarcă...
   
Instrucţiuni uzuale în LOGO
Ţestoasa voastră poate realiza lucruri minunate şi poate învăţa lucruri noi prin proceduri create de voi!
Lista completă a instrucţiunilor pe care Ţestoasa le cunoaşte se găseşte [aici] (în limba engleză).


Mişcare şi poziţionare

Limba română Limba engleză Exemplu de utilizare
inainte nr_pixeli forward, fd inainte 150
Descriere: Ţestoasa va merge înainte nr_pixeli de pixeli şi implicit va trasa o linie în urma sa.
inapoi nr_pixeli back, bk inapoi 130
Descriere: Ţestoasa va merge înapoi nr_pixeli de pixeli şi implicit va trasa o linie în urma sa.
stanga grade left, lt stanga 90
Descriere: Ţestoasa se va roti cu un număr de grade invers sensului acelor de ceasornic.
dreapta grade right, rt dreapta 60
Descriere: Ţestoasa se va roti cu un număr de grade în sensul acelor de ceasornic.
pozitie [x y] setpos pozitie [50 50]
Descriere: Mută ţestoasa la coordonatele (x,y) fără a desena nimic. Parametrul este o listă formată din două numere, coordonatele x şi y.
mutaxy x y setxy mutaxy -80 -80
Descriere: Mută ţestoasa la coordonatele (x,y) fără a desena nimic. Parametrii sunt două numere, respectiv x şi y.
mutax x setx mutax 100
Descriere: Mută ţestoasa orizontal fără a desena nimic. Parametrul este un număr, respectiv noua coordonată x.
mutay y sety mutay -70
Descriere: Mută ţestoasa vertical fără a desena nimic. Parametrul este un număr, respectiv noua coordonată y.
directia unghi setheading, seth directia 120
Descriere: Impune ţestoasei direcţia cu unghiul în sensul acelor de ceasornic faţă de axa Y.
acasa home acasa
Descriere: Mută ţestoasa în poziţia iniţială, fără a desena nimic, cu direcţia spre nord.
aratatestoasa showturtle, st aratatestoasa
Descriere: Ţestoasa este vizibilă pe pânză - valoare implicită.
ascundetestoasa hideturtle, ht ascundetestoasa
Descriere: Ţestoasa este ascunsă de pe pânză.

Fundalul şi pânza

Limba română Limba engleză Exemplu de utilizare
curata clean curata
Descriere: Pânza se şterge şi devine albă.
curataecranul clearscreen, cs curataecranul
Descriere: Pânza se şterge şi devine albă, iar ţestoasa se mută în locul iniţial. Efectul este acelaşi ca al combinaţiei de comenzi "sterge" şi "acasa".
mod_salt wrap mod_salt
Descriere: Permite ţestoasei să intre în modul "salt" (mod implicit). De acum, dacă ţestoasa trebuie să depăşească limintele pânzei, aceasta va face un salt şi va apărea în partea opusă. De exemplu:
mod_salt
inainte 300

mod_fereastra window mod_fereastra
Descriere: Permite ţestoasei să intre în modul "fereastră". Dacă ţestoasa trebuie să depăşească limintele pânzei, o va considera ca pe o zonă infinită pe ecran. De exemplu:
mod_fereastra
inainte 300


Dacă pierdem ţestoasa, o putem aduce înapoi prin comanda "acasa".
mod_gard fence mod_gard
Descriere: Permite ţestoasei să intre în modul "gard". Dacă ţestoasa trebuie să depăşească limintele pânzei, aceasta se va opri la marginea pe care o întâlneşte. De exemplu:
mod_gard
inainte 300

culoarefundal "culoare setbgcolor culoarefundal "green
Descriere: Stabilşte o culoare pentru fundalul pânzei. culoare poate fi definită folosind nume ori coduri standard sau HEX (format folosit pe internet - vezi mai sus):
culoarefundal "green
culoarefundal "10
culoarefundal "#00ff00

imaginefundal "nume_imagine setbgimg, setfdimg imaginefundal "Iarna
Descriere: putem alege o imagine de fundal din lista existentă apelând parametrul corespunzător (nume_imagine).

De exemplu: imaginefundal "Iarna

Creionul

Limba română Limba engleză Exemplu de utilizare
creion_jos pendown, pd creion_jos
Descriere: Ţestoasa are creionul activ (jos) şi trasează o linie în urma sa.
creion_sus penup, pu creion_sus
Descriere: Ţestoasa nu are creionul activ (sus) şi nu mai trasează o linie în urma sa.
mod_creion penpaint, ppt mod_creion
Descriere: Ţestoasa are creionul activ şi este în modul de desenare.
set_dim_creion valoare setpensize, setwidth, setpw set_dim_creion 25
Descriere: stabileşte dimensiunea vârfului creionului la valoare pixeli.
mod_stergere penerase, pe mod_stergere
Descriere: Ţestoasa trece în modul de ştergere (imaginea este de tip PNG). De exemplu:
mod_stergere
set_dim_creion 30
inainte 100

set_culoare "culoare setpencolor, setpc, setcolor set_culoare "red
Descriere: stabileşte culoarea de trasare (implicit, negru). culoare poate fi definită folosind nume ori coduri standard sau HEX (format folosit pe internet). Exemple:
set_culoare "red
set_culoare "4
set_culoare "#ff0000
Culori standard: 0: black (
), 1: blue (
), 2: lime (
), 3: cyan (
), 4: red (
), 5: magenta (
),
6: yellow (
), 7: white (
), 8: brown (
), 9: tan (
), 10: green (
), 11: aquamarine (
), 12: salmon (
),
13: purple (
), 14: orange (
), 15: gray (
).
(culorile nu au putut fi traduse - sunt standard de sistem)
Forme geometrice şi obiecte grafice

Limba română Limba engleză Exemplu de utilizare
arc unghi raza arc arc 90 100
Descriere: Ţestoasa va trasa un arc de cerc, cu ea în centru, cu raza impusă, pornind de la direcţia curentă, în sensul acelor de ceasornic.
d_cerc raza circle d_cerc 50
Descriere: Ţestoasa va trasa un cerc, cu ea în centru, cu raza impusă prin parametru.
Exemplu:
d_cerc 50
u_cerc raza fillcircle u_cerc 50
Descriere: Ţestoasa va umple un cerc, cu ea în centru, cu raza impusă prin parametru.
Exemplu:
set_culoare_umplere "magenta
fillcircle 50

d_dreptunghi latime inaltime rotatie rect d_dreptunghi 60 100 fals
Descriere: Ţestoasa va trasa un dreptunghi, cu ea în centru, cu dimensiunile impuse prin parametri. Dacă rotatie este setat ca adevarat, atunci dreptunghiul va fi rotit (orientat) spre direcţia curentă.
Exemplul 1:
stanga 45
d_dreptunghi 60 100 fals


Exemplul 2:
stanga 45
d_dreptunghi 60 100 adevarat

u_dreptunghi latime inaltime rotatie fillrect u_dreptunghi 60 100 fals
Descriere: Ţestoasa va umple un dreptunghi, cu ea în centru, cu dimensiunile impuse prin parametri. Dacă rotatie este setat ca adevarat, atunci dreptunghiul va fi rotit (orientat) spre direcţia curentă.
Exemplul 1:
stanga 45
set_culoare_umplere "cyan
u_dreptunghi 60 100 fals


Exemplul 2:
stanga 45
set_culoare_umplere "cyan
u_dreptunghi 60 100 adevarat

obiectgrafic cod_imagine rotatie go obiectgrafic 14 fals
Descriere: Ţestoasa va desena obiectul grafic indicat prin cod_imagine, cu ea în centru.
Ţestoasa nu se mişcă în timp ce desenează acest obiect. Dacă rotatie este setat ca adevarat, atunci obiectul grafic va fi rotit (orientat) spre direcţia curentă.
Exemplul 1:
dreapta 30
obiectgrafic 9 fals


Exemplul 2:
dreapta 30
obiectgrafic 9 adevarat


Lista obiectelor grafice o găsiţi apelând comanda "Introduceţi un obiect grafic" din meniul principal:
obiectgrafic2 cod_imagine rotatie scara alpha go2 obiectgrafic2 14 fals 80 60
Descriere: Ţestoasa va desena obiectul grafic indicat prin cod_imagine, cu ea în centru.
Ţestoasa nu se mişcă în timp ce desenează acest obiect. Dacă rotatie este setat ca adevarat, atunci obiectul grafic va fi rotit (orientat) spre direcţia curentă.
Parametrii scara (proporţia) şi alpha (transparenţa) pot fi setaţi între 0 şi 100.
Nu scriem niciun exemplu... aici. Testaţi!

Căi şi umplere
O cale este alcătuită din mai multe segmente sau linii curbe conectate între ele ce pot obţine forme geometrice deosebite.

Limba română Limba engleză Exemplu de utilizare
pornestecale beginpath pornestecale
Descriere: Se porneşte o nouă cale.
anuleazacale cancelpath anuleazacale
Descriere: Se anulează calea curentă.
traseazacale strokepath traseazacale
Descriere: Se trasează calea cu proprietăţile curente ale creionului (implicit, negru).
umplecale fillpath umplecale
Descriere: Se umple calea curentă cu acea culoare setată anterior (implicit, alb).
set_culoare_umplere "cod_culoare setfillcolor, setfc set_culoare_umplere "yellow
Descriere: stabileşte culoarea de umplere (implicit, alb). culoare poate fi definită folosind nume ori coduri standard sau HEX (format folosit pe internet):
Exemple:
set_culoare_umplere "red
set_culoare_umplere "4
set_culoare_umplere "#ff0000
Culori standard: 0: black (
), 1: blue (
), 2: lime (
), 3: cyan (
), 4: red (
), 5: magenta (
),
6: yellow (
), 7: white (
), 8: brown (
), 9: tan (
), 10: green (
), 11: aquamarine (
), 12: salmon (
),
13: purple (
), 14: orange (
), 15: gray (
).
(culorile nu au putut fi traduse - sunt standard de sistem)
Exemplul 1: Acest program trasează un triunghi. Comanda traseazacale închide calea şi o desenează.
pornestecale
inainte 100
stanga 90
inainte 100
traseazacale
Exemplul 2: Acest program umple un dreptunghi. Comanda umplecale închide calea şi o colorează.
set_culoare_umplere "1
pornestecale
inainte 100
stanga 90
inainte 150
stanga 90
inainte 100
umplecale

Linii curbe - Bezier (cuadratice ori cubice) [avansat]
Accesaţi din meniul principal opţiunea "Trasaţi o linie curbă!" şi urmaţi instrucţiunile, modificând parametrii corespunzător:
Afişarea mesajelor/datelor

Dacă ai introdus greşit o comandă, vei fi avertizat corespunzător printr-un mesaj:
După cum observaţi, Ţestoasa poate să transmită mesaje...

Limba română Limba engleză Exemplu de utilizare
tipareste expresie print, pr tipareste 125*(45+56)
Rezultatul exemplului este:


Pentru a tipări un cuvânt (şir de caractere), folosim ghilimelele: tipareste "Salut! (pentru a se diferenţia o expresie de o instrucţiune ori procedură).
afiseaza expresie show afiseaza 128
Spre exemplu, să comparăm cele două instrucţiuni:

Prima afişează conţinutul unei liste, iar a doua o afişează în cadrul parantezelor pătrate (aşa cum a fost definită).

Date de intrare

În partea dreaptă observaţi două câmpuri de text (:lgv1 şi :lgv2).

Programul vostru poate primi ca date de intrare două valori (numerice, liste, etc.) pe care le puteţi folosi la executarea programului. Cele două variabile de intrare pot fi setate doar dacă programul încă nu a fost executat (este vid).
De exemplu:
tipareste :lgv1 + :lgv2

Putem să reîncărcăm programul în editor, apoi să modificăm cele două valori - tocmai am scris un program care adună două valori numerice.

Valori aleatorii

Limba română Limba engleză Exemplu de utilizare
aleator numar_natural_nenul random tipareste aleator 9
Exemplul tipăreşte o valoare aleatorie (la întâmplare) între 0 şi 8.

Pentru a testa spre exemplu un program care foloseşte comanda "aleator", putem utiliza instrucţiunea "rerandom" - astfel, valorile generate vor fi secvenţial aceleaşi, deci pseudo-aleatoare. Exemplu de utilizare:

rerandom
repeta 10 [
   afiseaza aleator 25
]


Comentarii

Ce poate fi mai util decât un program care poate fi înţeles uşor? Putem folosi comentariile, care se introduc pe linie, precedate de caracterul ";". De exemplu:

;afisam suma a doua valori
tipareste 5+3


Animaţie - comanda "asteapta"

Limba română Limba engleză Exemplu de utilizare
asteapta milisecunde "text_afisat wait asteapta 500 "Hey
Descriere: Aşteaptă milisecunde până la executarea următoarei instrucţiuni. Dacă text_afisat este diferit de fals, atunci cât timp Ţestoasa aşteaptă, este afișat mesajul.

Exemplul 1. Se trasează un cerc cu diametrul de 100 de pixeli, se așteaptă 1 secundă, apoi înaintează 120 de pixeli și trasează un alt cerc cu diametrul de 50 (nu este afișat niciun mesaj):
d_cerc 100
asteapta 1000 "fals
inainte 120
d_cerc 50

Testaţi!

Exemplul 2. Diferența față de exemplul enterior este că după primul cerc trasat, Țestoasa afișează mesajul "Hey" cât timp așteaptă o secundă:
d_cerc 100
asteapta 1000 "Primul
inainte 120
d_cerc 50


Exemplul 3. După ce trasează o linie de 100 pixeli, Țestoasa afișează mesajul timp de o secundă "Am inaintat 100 de pixeli". Apoi, trasează încă 40 de pixeli și anunță din nou acest fapt:
inainte 100
asteapta 1000 (cuvinte "Am "inaintat "100 "de "pixeli.)
inainte 40
asteapta 1000 (cuvinte "Inca "40!)


Rețineți tipul de date "cuvinte", care permite sub această formă

(cuvinte "text1 "text2 "text3 ...)

afișarea unei propoziții care poate conține cuvinte, valori numerice ori nume de variabile. Testaţi!
Ce este o variabilă?

Ne putem imagina variabilele ca pe nişte mici "cutiuţe" în care putem reţine date. Fiecare variabilă are un nume unic.
Aceste variabile sunt utile în cadrul programelor voastre.

Mai sus observăm două variabile, una (v1) care reţine o valoare numerică (126), iar alta, v2, care reţine un şir de caractere ("testoasa"). Bineînţeles, acestea se deosebesc în funcţie de tipul lor (ce date reţin efectiv).

Definirea unei variabile în Logo

Pentru a declara şi iniţializa o nouă variabilă, folosim instrucţiunea "var" (în engleză, "make"):

var "v1 126
var "v2 "testoasa
afiseaza :v1
afiseaza :v2

Declararea unei variabile prin "var" conţine doi parametri: primul, numele variabilei (precedat de "), apoi valoarea efectivă asociată (o valoare numerică - "126" sau în cazul al doilea, un şir de caractere - "testoasa"). Testaţi!

Exemplu de utilizare

Folosim variabila pas pentru a creşte cu 5 (actualiza) la fiecare ciclu repeta numărul de pixeli pe care îl trasează Ţestoasa. Analizaţi codul şi rezultatul de mai jos:

Accesul la valoarea reţinută de către variabilă se face prin numele ei, precedat de semnul ":".
Structura liniară

Structura liniară reprezintă un grup de operaţii care se execută în ordinea scrierii lor (logica este cea fizică).
De exemplu:
inainte 120
stanga 60
inainte 75


Structuri selective / decizionale

Limba română Limba engleză Exemplu de utilizare
daca conditie [lista_instructiuni] if daca :lgv1 < 50 [ inainte 50 ]
Totul depinde de valoarea variabilei de intrare :lgv1. Dacă valoarea este mai mică decât 50, atunci Ţestoasa înaintează 50 de pixeli. Dacă nu, nu se întamplă nimic.
daca_altfel conditie
[ lista_instructiuni1_adevarat ]
[ lista_instructiuni2_fals ]
ifelse daca_altfel :lgv1 < 50
[ inainte 50 ]
[ inapoi 50 ]
Totul depinde de valoarea variabilei de intrare :lgv1. Dacă valoarea este mai mică decât 50, atunci Ţestoasa înaintează 50 de pixeli. Dacă nu, Ţestoasa merge înapoi 50 de pixeli.

Structuri repetitive

Limba română Limba engleză Exemplu de utilizare
repeta nr_ori [
   lista_instructiuni
]
repeat repeta 4 [
   inainte 100
   stanga 90
]
Exemplul evidenţiat trasează un pătrat cu latura de 100 pixeli.
r_contor repcount r_contor
Această valoare numerică, r_contor, contorizează numărul de iteraţii efectuate de către instrucţiunea repeat.
Exemplu:
repeta 4 [
   inainte 100
   stanga 90
   afiseaza r_contor
]

pentru [contor limita_inf limita_sup pas] [
   lista_instructiuni
]
for pentru [i 2 7 1.5] [
   tipareste :i
]
Instrucţiunea primeşte ca parametru o listă formată din 3 sau 4 elemente. contor specifică numele variabilei locale, limita_inf impune valoarea de start pentru variabilă, limita_sup impune valoarea finală pentru variabilă, iar pas este opţional (implicit este 1). Exemplul evidenţiat afişează valorile de la 2 la 7, din 1.5 în 1.5:

Notă: Apelul oricărei variabile se realizează prin numele ei, precedat de ":".
executa_cat_timp [
   lista_instructiuni
] conditie
do.while executa_cat_timp [
   var "n random 10
   tipareste :n
] :n < 5
Instrucţiunea se execută atât timp cât conditie este îndeplinită. Exemplul evidenţiat afişează valorile aleatoare ale variabilei definită ca n atât timp cât n este mai mic sau egal cu decât 5.
Atunci când s-a întâlnit valoarea 8, aceasta a fost afişată şi ciclul s-a oprit.
cat_timp conditie [
   lista_instructiuni
]
while var "n 1
cat_timp :n <= 5 [
   tipareste :n
   var "n :n + 1
]
Instrucţiunea se execută atât timp cât conditie este îndeplinită. Exemplul evidenţiat afişează valorile variabilei definită ca n atât timp cât valoarea ei este mai mică sau egală cu 5.
Atunci când s-a întâlnit valoarea 6, ciclul s-a oprit.
executa_pana_cand [
   lista_instructiuni
] conditie
do.until var "n 1
executa_pana_cand [
   tipareste :n
   var "n :n + 1
] :n>=5
Instrucţiunea se execută până când conditie este îndeplinită. Exemplul evidenţiat afişează valorile variabilei definită ca n până când n este mai mare sau egal cu 5.
Atunci când s-a întâlnit valoarea 5, ciclul s-a oprit.
Ce este o procedură?

Printr-o procedură (sau subprogram) vom înţelege un ansamblu alcătuit din declarări şi instrucţiuni scrise în vederea unei anumite prelucrări, ansamblu creat separat şi identificat printr-un nume sugestiv. Astfel, vei putea să-ţi înveţi Ţestoasa noi instrucţiuni şi să-i extinzi limbajul pe care implicit îl cunoaşte. Spre exemplu, nu ar fi super ca prin apelul unei instrucţiuni numite „curcubeu”, aceasta să traseze imediat unul? Aşadar, cu ajutorul subprogramelor / procedurilor, Ţestoasa ta devine din ce în ce mai inteligentă. Avantajele sunt multiple:

reutilizarea codului – odată scris, un subprogram poate fi utilizat de către mai multe alte programe Logo;
elaborarea algoritmilor prin descompunerea problemei în altele mai simple – puteţi rezolva cu mult mai uşor problema;
reducerea numărului de erori care pot apărea la scrierea programelor;
depistarea cu uşurinţă a erorilor – verificăm de la bun început subprogramele, apoi modul în care le-am asamblat
(le-am apelat din cadrul programului);
• realizarea unor programe uşor de urmărit (lizibile).

Pentru a defini o procedură, utilizăm instrucţiunea „procedura” (în engleză, „to”) care are forma generală:

procedura numele_ei parametri
   lista_instructiuni
sfarsit


Să analizăm în continuare un exemplu:

După cum observaţi, Ţestoasa a învăţat un cuvânt nou şi anume „dreptunghi”, care este urmat de cei doi parametri
(:lat1 şi :lat2). De acum, de fiecare dată când veţi apela această procedură, Ţestoasa va şti ce are de făcut:

Observaţi faptul că la definirea parametrilor, am folosit semnul două puncte (":") înaintea numelor acestora, precum şi în cadrul listei de instrucţiuni. De asemenea, am folosit instrucţiunea "repeta" care este utilă atunci când sunt necesare operaţii identice efectuate succesiv (forma sa generală este evidentă "repeta de_cate_ori [instructiuni]").
Bineînţeles, putem să realizăm o procedură fără a specifica vreun parametru:

Atenţie. Nu puteţi crea proceduri care să aibă numele unei instrucţiuni standard cunoscută iniţial de Ţestoasă. De asemenea, dacă redefiniţi conţinutul unei proceduri, vechea formă va fi rescrisă automat, iar conţinutul pierdut definitiv.
LOGO este aproape de un limbaj natural şi este o alternativă de învățare a programării la gimnaziu în curriculumul oficial M.E.N. [programa].
Acest proiect este susţinut şi colaborează cu:
U.P.I.R.         www.infogim.ro
ebooks.infobits.ro
Cărți, culegeri de probleme și cursuri în format electronic
(simplu, rapid, sigur, *.pdf)
www.infobits.ro
Biblioteca Digitală de Informatică "TUDOR SORIN"

Materiale educaționale în format electronic