Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non...

24
Appunti di Freebasic (FBIde) Versione 0.01 1 Vladimiro Lelli 21 dicembre 2011 1 Copyleft: CC-BY-NC-SA 3.0

Transcript of Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non...

Page 1: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Appunti di Freebasic (FBIde)Versione 0.011

Vladimiro Lelli

21 dicembre 2011

1Copyleft: CC-BY-NC-SA 3.0

Page 2: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Indice

1 Primi passi 41.1 Ciao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41.2 Modalita grafica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

1.2.1 Come e strutturato un programma. . . . . . . . . . . . . . . . . . . . . . . 6

2 Programmi vari 142.1 Achille e la Tartaruga . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.2 π . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3 Grafici 193.1 Assi cartesiani . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193.2 Rette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.3 Circonferenze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.4 Funzioni trigonometriche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4 Trasformazioni del piano 224.1 Traslazioni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

1

Page 3: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Introduzione

La prima lezione di fisica per le classi di prima e terza liceo si svolge piu o meno in questo modo:

... Le lezioni di quest’anno riguarderanno principalmente la cinematica e la dina-mica, cioe lo studio del moto dei corpi. L’argomento puo essere reso particolarmenteinteressante se ogni studente, alla fine dell’anno, avra costruito il proprio videogioco.Per videogioco si intende una versione rudimentale di alcuni videogames apparsi neglianni ’80, tipo Arkanoid, Space Wars, Pacman. Un prototipo di videogioco potrebbeessere una pallina che viaggia in linea retta sullo schermo e che rimbalza un voltagiunta al bordo. Come e possibile realizzare un simile effetto? Come si fa a disegnareuna pallina e a dirle di spostarsi in linea retta? Occorre sapere un po’ di matematicae di fisica e cercare in rete il seguente programma: FBIde. FBIde significa Free BasicIde, cioe Free Basic Integrated development environment: ambiente di sviluppo in-tegrato per il Free Basic. Il Basic e un linguaggio di programmazione. Free significalibero (in realta e open source). Quello che occorre fare e collegarsi in rete, digitareFBIde su un motore di ricerca (Google?), collegarsi al sito opportuno e scaricare ilprogramma. Il programma va installato (ci sono versioni per Windows e Linux). Setutto e andato a buon fine, all’avvio del programma comparira una finestra. In quellafinestra scriveremo delle istruzioni che ci permetteranno di creare il videogioco.Nelle prime pagine di un libro di testo per le classi prime o terze sono scritti unsacco di discorsi su cosa e il metodo scientifico, cosa fa la scienza, come lavoranogli scienziati. Scrivendo un programma e cercando di farlo funzionare commettere-te molti errori che andranno corretti. Anche quando il programma funzionera (cioefara “qualcosa”), e molto probabile che produrra effetti molto lontano dalle vostreaspettative: la pallina si deve spostare e invece sta ferma, deve rimbalzare e invecescappa dallo schermo e non si fa piu vedere. Imparare a gestire questi inconvenientiprovando, tirando a indovinare, cercando aiuto tra i compagni di classe, vedendo cosahanno fatto altre persone in rete significa fare attivita di ricerca. Potrete saltare cosıle prime pagine del libro di testo.

Diamo quindi per scontato che FBIde sia gia installato sul pc. Chi ha Windows non dovrebbeaver avuto problemi. In alcuni casi compare il messaggio “compiler path is corrupted or notfound” una volta che uno prova a compilare il primo programma. In questo caso ancora non soquale sia la soluzione. Per gli utenti Linux la procedura di installazione e piu laboriosa. Cercatelain rete (es su youtube). Lavorerete con l’ambiente di sviluppo “Geany”. Per chi ha il Mac le cosesono un po’ piu complicate. Il Mac puo simulare Windows. Provate cosı. Altrimenti convienefare una partizione dell’hard disk e installarci Linux o Windows.

Attenzione: questi sono solo appunti. Sono stati scritti avendo poco tempo a disposizionee fungono solo da supporto a quanto viene spiegato in classe. E molto probabile che risultinoincomprensibili, poco dettagliati, scritti male. Pazienza, col tempo provvederemo.

2

Page 4: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

Non sono dispense di un corso di programmazione (e un programmatore inorridira ogni trerighe per quello che legge). Servono a non perdere il filo con quello che abbiamo fatto in classe:ci sono studenti arrivati a dicembre, altri che tendono ad “imboscarsi” tra i compagni piu bravi(ad ogni computer ci stanno due o tre persone) e a non provare a casa quello che imparano inclasse. Ci sono altri che tendono a capire il senso di quello che facciamo ma a perdersi i dettaglie a non sperimentare autonomamente (e quindi non sanno riprodurre un programma che facciauna qualsiasi cosa). Avendo una classe di 30 persone e impossibile seguire ogni studente se questinon collabora e non lavora anche a casa.

3 V. Lelli

Page 5: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Capitolo 1

Primi passi

1.1 Ciao

Avviate FBIde. Una volta nell’ambiente di sviluppo aprite un nuovo file. Comparira unaschermata bianca: qui vanno scritte le istruzioni del codice.

Il primo programma che scriveremo e il programma piu semplice che esiste: scrive la parola“ciao”, nel senso che una volta avviato, si aprira una finestra con su scritto il saluto. Digitate ilseguente codice (e quello che inizia con “print” e finisce con “sleep”):

Programma 1.

Un programma che saluta.

print "ciao"

sleep

Occorre ora eseguire i seguenti passi:

1. Salvare il programma.

Salvatelo cliccando sulla barra in alto a sinistra o cercate in file, save as...

Al programma va dato un nome, per esempio “ciao.bas”. Attenzione: a volte capita disalvare il programma senza avergli dato un nome. Il programma figurera come “.bas”. Inquesto caso troverete dei problemi in fase di compilazione. Il programma deve avere unnome.

2. Compilare il programma.

Basta cliccare sulla barra in alto: lı compare un quadratino. Se ci posizionate il mousecompare la scritta “compile”. Se una volta cliccato non accade nulla, va bene: non ci sonoerrori. Compilare il programma (tra le altre cose) serve proprio a questo: controllare dinon aver commesso errori ed eventualmente correggerli.

3. Eseguire il programma.

Sempre sulla stessa barra compare un quadratino. Posizionandoci sopra la freccia del mouseappare la scritta “run”. Cliccate e guardate cosa succede.

4

Page 6: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

Dovrebbe comparire una finestra e in alto a sinistra la scritta “ciao”. Premete un tastoqualsiasi: la finestra si chiudera.

Effettuate le seguenti prove:

1. Cancellate l’istruzione “sleep”. Salvate il programma (senza dargli un nome, ce l’ha gia.Basta cliccare in alto sull’icona con l’immagine di un dischetto), compilate e fatelo girare(run). Provate piu volte. Notate niente? Dovrebbe comparire sullo schermo una specie di“flash”. Qualcosa che appare e subito dopo scompare, troppo veloce.

Senza il comando “sleep” quello che accade e che la finestra con la scritta “ciao” appare,ma subito dopo scompare e non facciamo in tempo a vederla. Per questo motivo inseriamol’istruzione “sleep (dormi)”. Questo comando figurera al termine di quasi tutti i programmiscritti in freebasic.

2. Provate a scrivere “pront” al posto di “print”. Avete commesso un errore (pront nonsignifica niente). Salvate, compilate. Dovreste ricevere un messaggio dal compilatore: noncapisce cosa significa “pront”. Il compilatore in genere dice quale e l’errore e in quale rigadel codice sta.

ATTENZIONE: tutte le volte che modificate un programma, dovete salvare, compilare,inviare.

Se saltate il primo o il secondo di questi passaggi, il programma in esecuzione non sara quelloappena modificato ma l’ultimo per il quale avete effettuato questi tre passaggi.

1.2 Modalita grafica

Il freebasic e un linguaggio molto attraente perche permette di utilizzare la modalita grafica inmaniera semplice e veloce. Grafica significa videogiochi, grafici, disegni, ...

Programma 2.

Apparizione di un cerchio.

screen 19

window (-10,-10)-(10,10)

print "ciao"

circle(3,2),1,4,,,,f

sleep

Fate girare il programma qui sopra. Siamo in modalita grafica: la scritta “ciao” e in caratteripiu gradevoli, la finestra dove compare piu ampia e soprattutto compare un cerchio piu o menoal centro dello schermo. Con un po’ di fantasia il cerchio potra diventare un pacman...

Il metodo che useremo e il seguente: non entreremo nei dettagli di ciascun programma. Seci sono problemi, potete chiedere a me direttamente o a qualche vostro collega. Inoltre potetemodificare i programmi per vedere cosa succede. Altro avvertimento: non c’e bisogno di impararetutti i comandi a memoria. Per chi usa Windows, sulla barra in alto, a destra compare un “Help”.Per Linux esiste un manuale scaricabile (e un file .html) e navigabile. Basta ricordarsi che uncomando esiste e andarlo a cercare nell’ Help. Ad esempio io mi ricordo che per fare dei cerchisi usa il comando “circle”. Come e strutturato me lo dice l’ help. Non solo: mi fornisce anchel’esempio di programmi che utilizzano quel comando che sto cercando. Posso cosı copiare ilcodice che ho trovato nell’help, incollarlo all’interno del programma che sto scrivendo (oppure di

5 V. Lelli

Page 7: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

un nuovo programma che ho creato apposta) e vedere quello che fa. Questi non sono dettagli.Studiando cosa fanno i programmi che compaiono negli esempi dell’help si impara a programmare.

Per questa volta pero entreremo abbastanza nei dettagli del codice.

1. Screen 19.

Questo e il comando che dice che siamo entrati in modalita grafica. Cercarlo nell’help.Provate a cambiare il 19 con il 20 o un altro numero. Io mi ricordo solo “screen-grafica”.

2. Window...

Ci serve un piano cartesiano per poter collocare il nostro cerchio. window (-10,-10)-(10,10)significa che nella finestra che compare, il punto che sta nell’angolo in basso a sinistra hacoordinate (-10,-10), quello nell’angolo in alto a destra invece (10,10).

Attenzione: il comando window non produce alcun effetto grafico (non si vede differenzasullo schermo se lo mettete nel codice oppure no). Provate pero a cancellare tale comandodal codice e provate a vedere se vedete ancora il cerchietto.

3. Circle...

E il comando che serve per fare i cerchi. I numeri tra parentesi sono le coordinate delcentro, seguono l’ampiezza del raggio, il colore, un po’ di virgole e una “F” che sta per“full”, pieno. Sperimentate!

1.2.1 Come e strutturato un programma.

Conviene a questo punto fare qualche commento su come in genere e strutturato un programma.Spero sia chiara la differenza tra usare un programma e programmare: quando usiamo un editor ditesto (notepad, word, ...), un foglio elettronico (excel, ...), ..., utilizziamo un programma (scrittoda altri) per un qualche scopo preciso e limitato. Con un editor di testo posso scrivere undocumento, inserirvi delle immagini, un grafico che ho prodotto utilizzando un altro programma.Quando invece scrivo un programma (e quindi scrivo del codice in un qualche linguaggio diprogrammazione), decido io cosa fa il programma; e tale programma, se sono abbastanza bravo,potra fare quasi tutto...! A seconda dello scopo che mi prefiggo (fare un videogioco, un virus (!),migliorare un pezzo di un sistema operativo, collezionare dei dati, fare il grafico di una funzione)dovro utilizzare il linguaggio di programmazione piu adatto, ma con uno o piu linguaggi si puocreare un programma che faccia una qualsiasi cosa. Sorge il dubbio che avendo a disposizioneuna cosı grande liberta, i comandi e le istruzioni da imparare nel linguaggio scelto siano centinaiao migliaia. Non e cosı. Facciamo un esempio: vogliamo creare un videogioco rudimentale chesimuli il tennis. Ci saranno quindi al posto delle racchette due rettangoli colorati alla sinistrae alla destra dello schermo, ciascuno mosso da un giocatore premendo la tastiera. Ci sara unapallina che rimbalza sulle racchette. Se un giocatore la manca la pallina andra oltre la racchetta,verra assegnato un punto all’avversario e il gioco riprendera. Per fare tutto questo (o altro)bastano pochissimi comandi. Questo perche non esiste il comando “crea racchetta” o quello“assegna il punto a Tizio”; se cosı fosse, cambiando videogioco avremmo bisogno del comando“crea astronave aliena” o “spara missile”. Le istruzioni di base invece sono astratte e hanno a chevedere con il sommare una certa quantita ad una certa variabile, ripetere una istruzione un certonumero di volte, controllare se una certa condizione si e verificata. Ecco perche con le istruzioniche useremo ci sara la possibilita di creare programmi totalmente diversi l’uno dall’ altro.

Tutti i programmi che scriveremo saranno strutturati nel seguente modo: una sequenza diistruzioni, una per riga. Le istruzioni saranno di pochi tipi, elencati qui sotto. Alcune le abbiamogia utilizzate, altre le useremo.

6 V. Lelli

Page 8: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

Input Questo tipo di istruzioni le eviteremo spesso. Questa prassi va contro ogni logica diprogrammazione, ma all’inizio e piu semplice: i programmi che creiamo sono per noi e li possiamomodificare quando e come vogliamo. Tutte le volte salveremo, compileremo e faremo il run.

Output

• print

Questa istruzione l’abbiamo gia usata. In realta anche il comando circle crea un output:visualizza un cerchio sullo schermo. A me piace pero inserire circle nella sezione grafica.

• sleep

Con questa istruzione blocchiamo l’esecuzione del programma esattamente nel punto dovecompare la scritta sleep. Basta premere un qualsiasi tasto e il programma prosegue. Sedopo sleep non vi sono altre istruzioni, il programma termina.

Strutture condizionali

• if ... then

Comandi di salto

• goto

• gosub

Cicli

• for ... next

• do ... loop

Potremmo addirittura fare a meno dei cicli: un ciclo puo essere implementato con unastruttura condizionale e una istruzione di salto. Ma i cicli sono cosı comodi...

Dichiarazioni di variabili

• dim as integer ...

• dim as single ..., dim as double ...

Spiegheremo in seguito cosa sono le variabili. integer vuol dire variabile di tipo intero , singleo double sono tipi di variabili alle quali possono essere assegnati numeri non interi (... con lavirgola).

Assegnazione di e computazione con le variabili

• x = 3

Alla variabile x e stato assegnato il valore 3.

• *, +, -, ...

Con questi simboli possiamo moltiplicare, sommare, sottrarre due variabili.

7 V. Lelli

Page 9: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

Grafica

• screen

• window

• circle

• pset

Con questa istruzione e possibile colorare un pixel sullo schermo.

Vogliamo ora scrivere un programma che disegni 5 cerchi distinti sullo schermo. Il modo piubanale e noioso di farlo (se i cerchi fossero 100?) sarebbe questo:

screen 19

window (-10,-10)-(10,10)

circle(3,2),1,4,,,,f

circle(1,4),1,4,,,,f

circle(2,3),1,4,,,,f

circle(3,6),1,4,,,,f

circle(-5,2),1,4,,,,f

sleep

Noi pero vogliamo che i cerchi siano allineati (le palle viaggiano in linea retta) e non vogliamoripetere le stesse istruzioni troppe volte. Utilizzeremo quindi il ciclo for ... next. Cercarlonell’help. Qui sotto c’e un programma che scrive 100 volte “ciao”, affiancando al saluto uncontatore che tenga il conto di quante volte compare la scritta.

Programma 3.

Tanti saluti...dim as integer k

for k = 1 to 100

print "ciao", k

next

sleep

Il ciclo funziona cosı: utilizza una variabile k che fa da contatore: all’inizio vale 1, entriamo nelciclo e viene scritto “ciao 1” sullo schermo. Troviamo poi next; il valore di k viene incrementato di1 (attenzione: questa non e una istruzione che compare sullo schermo) e poiche 2 < 100 torniamoall’inizio del ciclo e questa volta k vale 2. Sullo schermo compare la scritta “ciao 2”. L’istruzioneprint ‘‘ciao’’, k viene ripetuta finche k = 100. A questo punto automaticamente usciamodal ciclo e troviamo sleep. L’esecuzione si arresta fino a quando non premiamo un tasto.

Importante: la variabile k va dichiarata. Provate a cancellare la prima riga del programmae guardate cosa dice il compilatore. Ogni volta che utilizziamo una variabile, la dobbiamodichiarare.

Torniamo al programma dei cerchi allineati. Supponiamo di dover far apparire un cerchioche abbia il centro nel punto A(0; 0), poi un secondo cerchio con centro in B(1; 1), poi un terzoin C(2; 2) e tutto questo con un’unica istruzione circle. E chiaro che non basta scrivere

8 V. Lelli

Page 10: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

circle(0,0),1,4,,,,f

oppure

for k = 1 to 10

circle(0,0),1,4,,,,f

next

Nel primo caso disegnamo un cerchio con centro A(0; 0), nel secondo disegnamo 10 cerchisovrapposti, tutti con centro in A(0; 0). In qualche modo dobbiamo riuscire a far variare lecoordinate del centro. Utilizzeremo due variabili: x e y. Provate il seguente programma:

screen 19

window (-10,-10)-(10,10)

dim as single x,y

x = 0

y = 0

circle(x,y),1,4,,,,f

sleep

Vedrete comparire un cerchio con centro nell’ origine. Il programma cioe produce lo stessorisultato di questo:

screen 19

window (-10,-10)-(10,10)

circle(0,0),1,4,,,,f

sleep

ma e piu complicato. Abbiamo dichiarato due variabili (x e y) che sono le coordinate delcentro e le abbiamo inizializzate: all’inizio valgono entrambe 0.

Ora dobbiamo trovare il modo di variarle. Si fa cosı: inserendole all’interno di un ciclo.

Programma 4.

10 cerchi.dim as integer k

screen 19

window (-10,-10)-(10,10)

dim as single x,y

x = 0

y = 0

for k = 1 to 10

circle(x,y),1,4,,,,f

x = x + 1

9 V. Lelli

Page 11: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

y = y + 1

next

sleep

All’interno del ciclo for compaiono 3 istruzioni: la prima disegna un cerchio con centro inA(x;y), la seconda dice questo: assegna alla variabile x il vecchio valore che aveva, aumentato di1. La terza istruzione e simile alla seconda. Per capire meglio, provate a far girare il seguenteprogramma e a capire cosa fa e perche lo fa:

dim as integer k

dim as single x,y

x = 3

y = 4

for k = 1 to 10

print "x = ",x, "y = ",y, "k = ",k

x = x + 1

y = y + 3

next

sleep

oppure semplicemente questo:

dim as single x

x = 3.67

print "x = ",x

x = x + 5.2

print "ho sommato 5.2 a x, ora x = ",x

sleep

Nel programma 1.2.1 le istruzioni che incrementano le variabili sono all’interno di un ciclo,quindi ogni volta che il contatore k aumenta di 1, le istruzioni x = x + 1 e y = y + 1 vengonoripetute. Ora e il tempo di un trucco e di una magia.

Il trucco:

dim as integer k

screen 19

window (-10,-10)-(10,10)

dim as single x,y

x = 0

y = 0

for k = 1 to 10

10 V. Lelli

Page 12: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

circle(x,y),0.1,4,,,,f

x = x + 1

y = y + 1

sleep 150

next

sleep

La magia:

Programma 5.

Magia.dim as integer k

screen 19

window (-10,-10)-(10,10)

dim as single x,y

x = 0

y = 0

for k = 1 to 10

circle(x,y),0.1,4,,,,f

x = x + 1

y = y + 1

sleep 150

cls

next

sleep

Attenzione: cls significa “clearscreen”: pulisci lo schermo. Capite perche succede quel chesuccede? L’istruzione cls la metterei fra quelle di output.

Non abbiamo finito: vogliamo una pallina che si muove per sempre e rimbalza sullo schermo.Il problema del ciclo for e che permette di ripetere delle istruzioni un certo numero di volte:10, 100, 1000... vogliamo avere la possibilita di andare avanti in modo illimitato. Utilizzeremo ilciclo do ... loop. Quando inizieremo a programmare in modo piu sofisticato provvederemoa trovare un modo per uscire da questo ciclo, per il momento se volete uscirne e terminare ilprogramma, dovete chiudere la finestra piccola cliccando con il mouse.

screen 19

window (-10,-10)-(10,10)

dim as single x,y

x = -7

y = -5

do

circle(x,y),0.1,4,,,,f

11 V. Lelli

Page 13: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

x = x + 0.5

y = y + 0.3

sleep 150

cls

loop

sleep

direi che il cerchietto e scappato dallo schermo e non tornera piu. Il programma non si arrestada se: dovete forzarne la chiusura chiudendo la finestra piccola (ho detto PICCOLA...).

Cercate il ciclo do ... loop nell’ help e provate un po’ di esempi ivi inclusi.Ora il cerchio che rimbalza: quando il cerchio arriva ad una delle estremita della fine-

stra, ad esempio al margine sinistro, deve poter invertire la direzione. Questo significa chese incrementavamo la x di 1, ora l’incremento deve cambiare segno.

Lo so, non sono stato chiarissimo. Provate questo programma e nel caso fate delle domande.

Programma 6.

Rimbalzi a destrascreen 19

window (-10,-10)-(10,10)

dim as single x,y,a

x = 3

y = -8

a = 0.5

do

circle(x,y),0.1,4,,,,f

if x > 10 then a = - a

x = x + a

y = y + 0.3

sleep 150

cls

loop

sleep

La pallina rimbalza a destra e poi... se ne va. Abbiamo ottenuto questo effetto dichiarandouna nuova variabile a, inizializzandola a = 0.5 e poi incrementando la x con essa: x = x + a.Il rimbalzo sta in questa parte di codice:

if x > 10 then a = - a

Se (if) la variabile x diventa maggiore di 10 (e quindi la pallina esce dallo schermo) allora(then) la variabile a cambia segno (a = - a) per cui la coordinata x, che prima aumentava,torna a diminuire.

12 V. Lelli

Page 14: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

Programma 7.

Screensaverscreen 19

window (-10,-10)-(10,10)

dim as single x,y,a,b

x = 3

y = -8

a = 0.5

b = 0.3

do

circle(x,y),0.1,4,,,,f

if x > 10 then a = - a ’ rimbalzo a destra

if x < -10 then a = - a ’ rimbalzo a sinistra

if y > 10 then b = - b ’ in alto

if y < -10 then b = - b ’in basso

x = x + a

y = y + b

sleep 150

cls

loop

sleep

All’interno di un programma spesso si trovano dei commenti, come quello qui sotto:

’ rimbalzo a sinistra

Cominciano con un apostrofo. Il compilatore capisce che non sono istruzioni e li ignora.Servono solo al programmatore o a chi legge il programma per spiegare a cosa serve quel pezzodi codice. Provate a scrivere 100 righe di programma senza commentarle e rileggerle dopo unmese. Capirete a cosa servono i commenti.

Per quanto riguarda l’istruzione if, provate il seguente programma:

dim as integer j

for j = 1 to 10

if k<4 then print "non mi saluti? ", k

sleep 300

if k > 7 then print "vabbe, ciao ", k

sleep 300

next

sleep

13 V. Lelli

Page 15: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Capitolo 2

Programmi vari

2.1 Achille e la Tartaruga

Abbiamo discusso in classe del paradosso di Zenone. Vogliamo ora vedere la gara implementatasu un computer. Riprodurremo cosı le tabelle di marcia dei corridori e vedremo se e quandoAchille raggiungera la Tartaruga.

I dati del problema sono i seguenti: la distanza iniziale fra A. e T. e d = 100 m, la velocitadi A. e vA = 10 m/s, quella di T. e vT = 1 m/s. Quando A. raggiungera T?

Implementiamo il problema un pezzo di codice per volta. Questa e la corsa di A, opportuna-mente commentata (i commenti sono numerati e rimandano all’elenco sotto al codice):

screen 19

window(-5,-5)-(150,5) ’1

dim as double xa, va, dt

xa = 0 ’2

va = 10 ’3

dt = 0.01 ’4

do

circle(xa,0),1,4,,,,f ’5

xa = xa + va*dt ’6

sleep 100

loop

1. La larghezza della finestra e importante: in classe abbiamo visto che A. percorrera unadistanza di circa 111.11 metri per raggiungere la T. Se la larghezza della finestra non eopportuna rischiamo di perderci la fine della gara.

2. A. parte dall’ origine

3. Questa e la velocita di A. Notate come nel codica non possiamo inserire unita di misura.Dobbiamo essere consapevoli che in questo caso sono 10 metri al secondo.

4. dt e importante: “fotograferemo” la corsa a intervalli di 0.01 secondi. Questo parametropuo essere modificato. Provate a farlo.

14

Page 16: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

5. Qui disegnamo la posizione di A. con un cerchietto

6. Questo e il pezzo piu importante del codice: ogni volta che facciamo un ciclo, la vecchiaposizione di A. viene aggiornata incrementandola del pezzetto va*dt. E proprio quello chesuccede: ogni volta che passano dt = 0.01 secondi A. percorre uno spazio pari a va*dt

metri.

Ultimo dettaglio: il trascorrere del tempo. Nella nostra simulazione, ogni volta che vengonoeseguite tutte le istruzioni all’interno del do ... loop, e come se fosse passato un tempo tpari a dt = 0.01 secondi. Attenzione: la velocita della simulazione non e connessa al tempotrascorso che simuliamo. Cambiate sleep 100 con sleep 500: la simulazione va piu lenta maA. viaggia con la stessa velocita e raggiungera la T. nello stesso istante.

Ancora sul trascorrere del tempo: provate il seguente programma.

dim as single dt, t

t = 0

dt = 0.1

do

print "sono passati dall’inizio del programma ", t, " secondi."

t = t + dt

sleep 300

loop

Stiamo simulando il passare del tempo, ma la velocita di simulazione non ha niente a chevedere con t o dt.

Inseriamo ora il moto della tartaruga e un “cronometro” per misurare quanto dura la corsa.

screen 19

window(-5,-5)-(150,5)

dim as double xa, va, dt

dim as double xt, vt ’variabili Tartaruga

dim as double t ’per misurare il tempo che passa

xa = 0

va = 10

dt = 0.01

xt = 100 ’la T. parte 100 metri davanti ad A.

vt = 1 ’ma e piu lenta

t = 0 ’il cronometro parte da 0

do

circle(xa,0),0.1,4,,,,f

circle(xt,3),0.1,2,,,,f ’la T. e un po’ piu su e ha un colore differente

xa = xa + va*dt

xt = xt + vt*dt ’legge del moto per la T.

t = t + dt ’questo e il tempo che passa

sleep 100

loop

15 V. Lelli

Page 17: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

Ora occorre inserire un controllo che ci dica quando A. supera T: il sorpasso avviene quandoxa > xt. Nel programma qui sotto incontreremo anche l’istruzione goto. Vedremo a cosa serve.

Programma 8.

Achille e la Tartaruga.screen 19

window(-5,-5)-(150,5)

dim as double xa, va, dt

dim as double xt, vt

dim as double t

xa = 0

va = 10

dt = 0.01

xt = 100

vt = 1

t = 0

do

circle(xa,0),1,4,,,,f

circle(xt,3),1,2,,,,f

if xa > xt then goto finecorsa

xa = xa + va*dt

xt = xt + vt*dt

t = t + dt

sleep 100

loop

finecorsa:

print "Achille ha superato la Tartaruga in "; t, " secondi"

print "Achille ha percorso una distanza di "; xa, " metri"

print "La Tartaruga ha percorso una distanza di "; xt, " metri"

print "Zenone c’e’ rimasto male e se n’e’ andato..."

sleep

Rimane da commentare l’istruzione goto: serve a saltare da una parte del codice ad un altra.La necessita di fare questo tipo di operazione e evidente nel programma appena scritto. Persperimentare un po’, provate quello qui sotto (e cercate come al solito nell’help).

print "sperimentiamo il goto"

sleep 200

goto pippo

16 V. Lelli

Page 18: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

print "questo e un messaggio invisibile"

pippo:

print "avete mica visto il messaggio invisibile?"

sleep

Come vedete l’esecuzione del programma, non appena trova l’istruzione goto pippo, saltadirettamente alla riga contenente l’etichetta pippo: (i due punti ci vanno messi) e prosegue dalı.

Se invece di “guardare” le corsa vogliamo stampare le tabella di marcia, possiamo modificareil programma cosı:

Programma 9.

Achille e la Tartaruga: tabelle di marcia.dim as double xa, va, dt,xt,vt,t

xa = 0

va = 10

dt = 0.1

xt = 100

vt = 1

t = 0

do

print "tempo ", "Achille ", "Tartaruga "

if xa > xt then print "fine della gara " : stop

print t,xa,xt

xa = xa + va*dt

xt = xt + vt*dt

t = t + dt

sleep 100

loop

Cercate nell’help i nuovi comandi. I due punti (:) servono a separare una istruzione dall’altranel caso si voglia scriverle tutte su una riga. La seguente scritta:

dt = 0.1

xt = 100

vt = 1

e equivalente a questa:

dt = 0.1 : xt = 100 : vt = 1

(che occupa meno spazio).

2.2 π

Faremo un programma che calcoli π. Il metodo e poco efficiente anche per un computer, ma esemplice e funziona. π e l’area del cerchio di raggio r = 1. Il metodo e il seguente ed e stato

17 V. Lelli

Page 19: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

chiarito nei dettagli in classe. Questo e solo un promemoria. Ci costruiamo una griglia di puntiche stanno all’interno del quadrato avente un vertice in O(0; 0) e il vertice opposto, giacente sullastessa diagonale, in A(1; 1). Il quadrato giace tutto nel primo quadrante. Il seguente programmacrea una tabella con le coordinate x,y dei punti che generiamo.

dim as double j,k

for j = 0 to 1 step 0.1

for k = 0 to 1 step 0.1

print j,k

sleep 200

next

next

sleep

Le novita sono le seguenti: due cicli for annidati l’uno dentro l’altro e il comando step 0.1

che stabilisce il valore per l’incremento dei contatori.Il quadrato suddetto ha area A = 1. qui ci vanno delle spiegazioni...

Programma 10.

Calcolo di π.dim as double j,k, pigreco

dim as integer npunti, ndentro

npunti = 0

ndentro = 0

for j = 0 to 1 step 0.01

for k = 0 to 1 step 0.01

npunti = npunti +1

if j^2+k^2 < 1 then ndentro = ndentro + 1

next

next

pigreco = 4*ndentro/npunti

print "pigreco = ", pigreco

sleep

e qui esercizi e modifiche proposte per migliorare il programma.

18 V. Lelli

Page 20: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Capitolo 3

Grafici

3.1 Assi cartesiani

Siamo gia capaci di allineare dei cerchietti, non avremo alcuna difficolta ad allineare dei punti(pixel). I punti saranno tanti, quindi useremo dei cicli. Il seguente codice traccia l’asse x. Notareche i pixel sono piuttosto “radi”.

screen 19

window(-10,-10)-(10,10)

dim as single x

for x = -10 to 10 step 0.1

pset(x,0),4 ’asse x

next

sleep

Il seguente programma e migliore.

Programma 11.

Assi cartesiani

screen 19

window(-10,-10)-(10,10)

dim as single x

for x = -10 to 10 step 0.01

pset(x,0),4 ’asse x

pset(0,x),4 ’asse y

next

sleep

Notare che la variabile x e solo un nome... la possiamo utilizzare anche per tracciare l’asse y(mettendola al posto opportuno).

19

Page 21: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

3.2 Rette

Il metodo utilizzato per le rette e valido per qualsiasi funzione.

Programma 12.

Retta y = x

screen 19

window(-10,-10)-(10,10)

dim as single x,y

for x = -10 to 10 step 0.01

pset(x,0),4 ’asse x

pset(0,x),4 ’asse y

next

’per comodita mettiamo qui il codice per le funzioni

’(lo potevamo mettere dentro il primo ciclo)

for x = -10 to 10 step 0.01

y = x ’qui scriviamo l’eq della funzione

pset(x,y),2

next

sleep

L’unico dettaglio fastidioso e che la bisettrice del primo e terzo quadrante non sembra tantobisettrice. Questo perche la finestra ha una risoluzione di 800x600 pixel, quindi in orizzontaleci sono piu pixel che in verticale, mentre noi abbiamo dichiarato window(-10,-10)-(10,10).Ovviamo al problema in questa maniera: window(-8,-6)-(8,6). Anche questa e un’applicazionedell’argomento “la retta”, no? (triangoli simili...).

3.3 Circonferenze

Scriviamo il programma per intero, anche se la modifica sarebbe minima. Notare:

1. Preferiamo window(-8,-6)-(8,6), altrimenti la circonferenza diventa un ellisse.

2. Possiamo disegnare la parte di sopra della circonferenza (e poi quella di sotto).

3. La radice quadrata e sqr( ).

4. Non c’e bisogno di stare attenti a dove varia la x: se x = -10 la sqr( x ) non e un numeroreale. Facendo girare il programma non notiamo particolari problemi...

Programma 13.

Circonferenza x2 + y2 = 1screen 19

window(-8,-6)-(8,6)

dim as single x,y

20 V. Lelli

Page 22: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

for x = -10 to 10 step 0.01

pset(x,0),4 ’asse x

pset(0,x),4 ’asse y

next

for x = -10 to 10 step 0.01

y = sqr(1-x^2) ’circonferenza di sopra

pset(x,y),2

y = -sqr(1-x^2)

pset(x,y),3 ’e di sotto

next

sleep

3.4 Funzioni trigonometriche

Attenzione: gli angoli sono misurati in radianti e π ∼ 3.14...

Programma 14.

Seno.

screen 19

window(-6,-2)-(6,2)

dim as single x,y

for x = -10 to 10 step 0.01

pset(x,0),4 ’asse x

pset(0,x),4 ’asse y

next

for x = -10 to 10 step 0.01

y = sin(x)

pset(x,y),2

next

sleep

21 V. Lelli

Page 23: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Capitolo 4

Trasformazioni del piano

4.1 Traslazioni

4.1.1 Attive

Programma 15.

Attive 1

screen 19

window(-10,-10)-(10,10)

dim as single x,y,a,b

x= 1:y=2

a = 0.2: b=0.3

do

circle(x,y),0.5,4,,,,f

circle(x+2,y-5),0.5,2,,,,f ’cerchio traslato

if x>10 then a = -a

if x<-10 then a = -a

if y>10 then b= -b

if y<-10 then b = -b

x = x+a ’in realta anche questa e una traslazione...

y = y+b

sleep 100

cls

loop

Programma 16.

Attive 2screen 19

window(-10,-10)-(10,10)

dim as single x,y

for x = -10 to 10 step 0.01

22

Page 24: Appunti di Freebasic (FBIde) - WordPress.comcompare la scritta \compile". Se una volta cliccato non accade nulla, va bene: non ci sono errori. Compilare il programma (tra le altre

Copyleft: CC-BY-NC-SA 3.0 Appunti di Freebasic (FBIde)

pset(x,0),4 ’asse x

pset(0,x),4 ’asse y

next

for x = -10 to 10 step 0.01

y = x^2 ’qui scriviamo l’eq della parabola

pset(x,y),2 ’qui la disegna

pset(x+3,y+2),3 ’e qui la disegna traslata

next

sleep

4.1.2 Passive

23 V. Lelli