Sei sulla pagina 1di 62

FONDAMENTI DI AUTOMAZIONE E PROGRAMMAZIONE

a.a. 2015-2016

LA PROGRAMMAZIONE: CICLI e PROCEDURE

Lo scopo della programmazione

Programmare vuol dire fornire istruzioni in maniera il pi possibile


efficiente ad un computer per
creare un sistema interattivo che risponda in modo adeguato

alle possibili interazioni di un utente


Le istruzioni fornite al computer devono essere in numero finito,
chiare e non ambigue, devono essere quindi un algoritmo; un

algoritmo eseguibile da un computer un programma

Lo scopo della programmazione

Programmare vuol dire fornire istruzioni in maniera il pi possibile


efficiente ad un computer per
creare un sistema interattivo che risponda in modo adeguato

alle possibili interazioni di un utente


Le istruzioni fornite al computer devono essere in numero finito,
chiare e non ambigue, devono essere quindi un algoritmo; un

algoritmo eseguibile da un computer un programma

Linsieme degli script di un progetto Scratch costituisce un algoritmo?

Lo scopo della programmazione

Il numero di blocchi di un qualunque script di Scratch, e quindi


di un qualunque progetto, ovviamente finito (altrimenti
impiegheremmo un tempo infinito a creare un progetto)

Lo scopo della programmazione

Il significato di ciascuno dei blocchi di Scratch chiaro e ben


definito: ad esempio i blocchi della categoria movimento fanno
spostare e controllano il movimento dello sprite. Per ogni blocco

possibile avere una breve spiegazione cliccandolo con il tasto


destro e selezionando "aiuto".

Lo scopo della programmazione

Il significato di ciascuno dei blocchi di Scratch non ambiguo: il


funzionamento di ogni blocco sempre lo stesso, ogni volta che lo
usiamo in un qualunque script.

Lo scopo della programmazione

Programmare vuol dire fornire istruzioni in maniera il pi possibile


efficiente ad un computer per
creare un sistema interattivo che risponda in modo adeguato

alle possibili interazioni di un utente


Le istruzioni fornite al computer devono essere in numero finito,
chiare e non ambigue, devono essere quindi un algoritmo; un

algoritmo eseguibile da un computer un programma


Linsieme degli script di un progetto Scratch costituisce un algoritmo
e quindi un programma

I concetti dellInformatica

[pong-lezione-iniziale.sb]

Programma Pong

I concetti dellInformatica

Un algoritmo un
procedimento
composto di un
numero finito di
[pong-cicli-base.sb]
passi
chiari (non
ambigui) che
risolve un
determinato
problema

e il programma Pong perci un


algoritmo in quanto risolve il problema
I concetti dellInformatica
Pong definendo chiaramente il
comportamento degli sprite attraverso un
numero finito di blocchi il cui significato
chiaro per il computer (non ambigui).

[pong-lezione-iniziale.sb]

Algoritmo

Lo scopo della programmazione

Fornire istruzioni in maniera efficiente

Nello script dello Stage sono presenti


molte ripetizioni di due soli blocchi (i
blocchi PASSA A SFONDO SEGUENTE e
ATTENDI SECONDI)

Lo scopo della programmazione

Fornire istruzioni in maniera efficiente

Nello script dello Stage sono presenti


molte ripetizioni di due soli blocchi (i
blocchi PASSA A SFONDO SEGUENTE e
ATTENDI SECONDI)

Lo scopo della programmazione

Fornire istruzioni in maniera efficiente

Confrontiamolo con le macro di Office e


LibreOffice

Lo scopo della programmazione

Fornire istruzioni in maniera efficiente

Quando registriamo una macro, non


vogliamo registrare la stessa operazione
pi e pi volte (altrimenti non
risparmieremmo molto tempo)

registriamo quindi le
operazioni da eseguire su una
Lo scopo della programmazione
sola riga
Fornire istruzioni in maniera efficiente

Da unoperazione su una riga


Selection.MoveRight Unit:=wdWord, Count:=1
Selection.MoveRight Unit:=wdWord, Count:=1,
Selection.Cut
Selection.MoveRight Unit:=wdCell
Selection.PasteAndFormat (wdPasteDefault)
Selection.MoveRight Unit:=wdCell
Selection.HomeKey Unit:=wdCharacter, Count:=1

e poi facciamo in modo che


vengano ripetute automaticamente
Lo scopo della programmazione
per tutte le righe

Fornire istruzioni in maniera efficiente

a unoperazione su pi righe
For i = 1 To Selection.Tables(1).Rows.Count
Selection.MoveRight Unit:=wdWord, Count:=1
Selection.MoveRight Unit:=wdWord, Count:=1,
Selection.Cut
Selection.MoveRight Unit:=wdCell
Selection.PasteAndFormat (wdPasteDefault)
Selection.MoveRight Unit:=wdCell
Selection.HomeKey Unit:=wdCharacter, Count:=1
Next

e poi facciamo in modo che


vengano ripetute automaticamente
Lo scopo della programmazione
per tutte le righe

Fornire istruzioni in maniera efficiente

a unoperazione su pi righe
For i = 1 To Selection.Tables(1).Rows.Count
Selection.MoveRight Unit:=wdWord, Count:=1
Selection.MoveRight Unit:=wdWord, Count:=1,
Selection.Cut
Selection.MoveRight Unit:=wdCell
Selection.PasteAndFormat (wdPasteDefault)
Selection.MoveRight Unit:=wdCell
Selection.HomeKey Unit:=wdCharacter, Count:=1
Next

usando nel Basic il ciclo for/next

Progetto Pong Vediamo come sia possibile realizzare


lo stesso tipo di risparmio in
Scratch. Lo vedremo proprio con il
progetto Pong.

La situazione da
ricostruire

GARA!

RImodificare gli script del progetto

[pong-lezione-iniziale.sb]

GARA!

tornando ai valori iniziali

Dal programma Pong originale

[pong-lezione-iniziale.sb]

Programma Pong

ad un programma Pong pi semplice da modificare

[pong-cicli e procedure-finale.ypr]

Programma Pong
pi semplice da
modificare

Un programma Pong pi semplice da modificare

La differenza in
questi script

Un programma Pong pi semplice da modificare

La differenza in questi script

Un programma Pong pi semplice da modificare

La differenza in questi script

Cosa sono?

Dal programma Pong originale

Torniamo agli script originali

[pong-cicli-iniziale.sb]

Lo scopo della programmazione

Fornire istruzioni in maniera efficiente in Scratch

Nello script dello Stage


del progetto Pong
abbiamo visto che
presente una
sequenza di operazioni
che si ripetono
identiche una di
seguito allaltra

Lo scopo della programmazione

Fornire istruzioni in maniera efficiente in Scratch

Questa sequenza di due


blocchi

Lo scopo della programmazione

Fornire istruzioni in maniera efficiente in Scratch

che si ripete per 32


volte

Lo scopo della programmazione

Fornire istruzioni in maniera efficiente in Scratch

In che modo
l'abbiamo abbreviata?

I concetti dellInformatica

Anche in questo
caso, come era
accaduto per il
blocco PER SEMPRE,
siamo passati da
una sequenza -in cui
le azioni vengono
eseguite dalla prima
allultima in basso-

I concetti dellInformatica
ad un ciclo, in cui
dopo aver eseguito
lultima operazione
del ciclo si torna di
nuovo ad eseguire la
prima. Le azioni del
ciclo in questo caso
non vengono ripetute
per sempre, ma
vengono ripetute per
un preciso numero di
volte, indicato
nell'argomento del
blocco RIPETI VOLTE

I concetti dellInformatica

Usando i cicli possiamo


eliminare le ripetizioni di
sequenze identiche di
blocchi, purch DISPOSTE
UNA DIETRO LALTRA,
senza cio ulteriori
blocchi tra una
ripetizione e l'altra

I concetti dellInformatica

Ciclo

I concetti dellInformatica

Ciclo

Rimpiazziamo di nuovo
0,1 con 0,2:
quanto tempo
impieghiamo?
possiamo commettere
errori?

I concetti dellInformatica

Ciclo

Grazie ai cicli possiamo

ridurre la lunghezza
dellalgoritmo
correggere pi velocemente
una lunga ripetizione
commettere meno errori
quando dobbiamo modificare
una lunga ripetizione
capire meglio la struttura di
un algoritmo (utile per
modificare un algoritmo scritto
da noi o da qualcun altro)

Lo scopo della programmazione


Fornire istruzioni in maniera efficiente

Un tipo di spreco simile


lo ritroviamo negli script
dei mattoncini del
progetto Pong

in cui la stessa sequenza di blocchi viene usata pi


NON
UNA DIETRO LALTRA, spesso in sprite
Lovolte
scopoma
della
programmazione
diversi (in questo caso per mattoncini diversi)
Fornire istruzioni in maniera efficiente

Lo scopo della programmazione


Fornire istruzioni in maniera efficiente
Sub arial16grassetto()
Selection.Font.Name = "Arial"
Selection.Font.Size = 16
Selection.Font.Bold = wdToggle
End Sub

Proprio per evitare questa


situazione (dover ripetere le
stesse sequenze di operazioni pi
e pi volte) nel Basic abbiamo
usato le macro: una macro
raccoglie infatti al suo interno
molte operazioni che possiamo
rieseguire in molti punti diversi di
uno stesso documento

Lo scopo della programmazione


Fornire istruzioni in maniera efficiente
Sub arial16grassetto()
Selection.Font.Name = "Arial"
Selection.Font.Size = 16
Selection.Font.Bold = wdToggle
End Sub

La sequenza di operazioni
della macro viene
identificata attraverso il
nome della macro (in questo
caso arial16grassetto)

Lo scopo della programmazione


Fornire istruzioni in maniera efficiente
Sub arial16grassetto()
Selection.Font.Name = "Arial"
Selection.Font.Size = 16
Selection.Font.Bold = wdToggle
End Sub

Lo stesso tipo di strategia


(assegnare un nome ad una
sequenza di operazioni)
possiamo adottarla anche in
un linguaggio a blocchi.
Ma non in Scratch.

BYOB

Per dare un nome a delle sequenze di


operazioni ci occorre BYOB, un
linguaggio a blocchi per molti versi
identico a Scratch, ma con
un'importante differenza: ci permette
di assegnare dei nomi a sequenze di
operazioni

BYOB

Per assegnare in BYOB un nome alle


sequenze di operazioni RIPETUTE MA
NON CONSECUTIVE (e non dover quindi
riscriverle pi e pi volte) sufficiente
cliccare sullarea script con il tasto
destro e selezionare lopzione crea un
blocco

[pong-procedure-iniziale.ypr]

BYOB

Una volta scelta la categoria del nuovo


blocco che vogliamo creare (cliccando
sul pulsante della categoria
desiderata)

[pong-procedure-iniziale.ypr]

BYOB

e digitato il nome che vogliamo


assegnare alla sequenza (va bene tutto,
anche gli spazi tranne alcuni simboli
particolari, ad esempio la virgola)

[pong-procedure-iniziale.ypr]

possiamo cliccare su OK
BYOB

[pong-procedure-iniziale.ypr]

BYOB

e vedremo comparire una nuova area


script (chiamata Editor di blocchi) in cui il
nome che abbiamo scelto per il nuovo
blocco compare in alto (allinterno di un
blocco di tipo cappello, cio arrotondato).

[pong-procedure-iniziale.ypr]

BYOB

Sotto a questo blocco potremo attaccare


la sequenza di operazioni ripetute (in
questo caso i blocchi MOSTRA, PER
SEMPRE QUANDO, ecc). Possiamo
trascinare questi blocchi nellEditor di
blocchi direttamente dallarea script.

[pong-procedure-iniziale.ypr]

BYOB

Terminata la creazione del


nuovo blocco, possiamo
cliccare su OK

[pong-procedure-iniziale.ypr]

BYOB

Troveremo il nuovo blocco in


fondo alla categoria che abbiamo
selezionato creando il blocco (in
questo caso la categoria Aspetto)

[pong-procedure-iniziale.ypr]

BYOB

Possiamo quindi rimpiazzare tutte


le 18 ripetizioni, dallo sprite
mattoncino1

[pong-procedure-iniziale.ypr]

BYOB

Possiamo quindi rimpiazzare tutte


le 18 ripetizioni, dallo sprite
mattoncino1 fino allo sprite
mattoncino18,

[pong-procedure-iniziale.ypr]

BYOB
con il blocco che abbiamo
appena creato (ricordandoci di
rimuovere dallo script la sequenza
originale) in tutti i 18 mattoncini

[pong-procedure-iniziale.ypr]

I concetti dellInformatica

La creazione di un nuovo blocco


in BYOB (e di una macro in
Visual Basic) viene detta in
generale in Informatica
definizione di procedura

I concetti dellInformatica

Procedura

I concetti dellInformatica

Procedura

Rimpiazziamo di nuovo
0,1 con 0,2 e 61 con 48
per tutti i mattoncini:
quanto tempo
impieghiamo?
possiamo
commettere molti
errori?

I concetti dellInformatica

Procedura

Grazie alle procedure possiamo


ridurre la lunghezza dellalgoritmo
correggere pi velocemente molte ripetizioni
commettere meno errori quando dobbiamo modificare
molte ripetizioni
capire meglio la struttura di un algoritmo (utile per
modificare un algoritmo scritto da noi o da qualcun altro)

I concetti dellInformatica

Procedura

Unanimazione
interattiva molto
spesso una
ripetizione di
animazioni simili -o
anche del tutto
uguali-

"distanti" tra loro, assegnate solitamente a sprite


diversi
anche ad uno stesso sprite in script
Lo scopo
della(ma
programmazione
diversi o anche in punti diversi di uno stesso script)
Fornire istruzioni in maniera efficiente

I concetti dellInformatica

Cicli e Procedure

A cosa servono cicli e


procedure?

I concetti dellInformatica

Cicli e Procedure
A cosa servono cicli a
procedure?
a ridurre la lunghezza
dellalgoritmo
a poter correggere pi
velocemente un algoritmo
a commettere meno errori
quando dobbiamo modificarlo
a capire meglio la struttura di
un algoritmo (utile per
modificare un algoritmo scritto
da noi o da qualcun altro)

FONDAMENTI DI AUTOMAZIONE E PROGRAMMAZIONE


a.a. 2015-2016

LA PROGRAMMAZIONE: CICLI e PROCEDURE