OII > Tratto alternato

Olimpiadi Italiane di Informatica – 17-11-2016 – Numero 18

La grafica della tartaruga prevede che si possano impartire degli ordini di movimento a una tartaruga, che li eseguirà lasciando sul terreno una traccia dei suoi movimenti, come se avesse una penna attaccata sulla pancia.

Gli ordini possono essere impartiti tramite un semplice linguaggio, stando attenti che:

  • le istruzioni destra e sinistra sono relative all’orientamento attuale della tartaruga, e il numero che segue è un angolo di rotazione (rispettivamente orario e antiorario) espresso in gradi;
  • le istruzioni pennasu e pennagiu sollevano e abbassano rispettivamente la penna sotto la pancia della tartaruga: quando la penna è sollevata ovviamente non lascia tracce sul terreno;
  • l’istruzione cambialinea cambia il tipo di linea della penna della tartaruga tra le due modalità disponibili: continua e tratteggiata;
  • l’istruzione ripeti fa ripetere il blocco che segue, delimitato da parentesi graffe, per un numero di volte indicato a fianco dell’istruzione.
2016-18

Si vogliono ottenere questi due quadrati, e inizialmente la tartaruga guarda verso destra e il tipo di linea è continuo:

Si consideri il seguente codice e lo si completi, inserendo le istruzioni mancanti alle righe [9] e [14].

I numeri di riga sono mostrati tra parentesi quadre all’inizio di ogni riga.

pennagiu
avanti 7
cambialinea
sinistra 90
avanti 7
ripeti 3 {
    destra 90
    avanti 10

destra 90
avanti 3
destra 90
cambialinea

ripeti 3 {
    destra 90
    avanti 10
}
pennasu

Disegna la stessa figura utilizzando Python e il modulo Turtle, il codice originale inizia alla riga 33

from turtle import *

FATTORE = 12
passo   = 16
ALTERNA = False

def cambialinea():
    global ALTERNA
    ALTERNA = not ALTERNA

def avanti(n):
    distanza = FATTORE*n
    
    if(not ALTERNA):
        forward(distanza)
    else:
        penna = True
        while(distanza >= passo):
            if(penna): pendown()
            else:      penup()
            forward(passo)
            distanza -= passo
            penna = not penna 
        forward(distanza)
        pendown()

bgcolor("pink")
pencolor("red")
pensize(4)
setup(500, 500)
shape("turtle")

pendown()
avanti(7)
cambialinea()
left(90)
avanti(7)
for i in range(3):
    right(90)
    avanti(10)

right(90)
avanti(3)
right(90)
cambialinea()
avanti(3)
for i in range(3):
    right(90)
    avanti(10)

penup()

Lascia un commento