Indice classe 2D secondo quadrimestre
voti I quad
voti II quad
salta a fondo pagina


Flag Counter

fare: spot postaconlatesta e pubblicità cellulari
Lunedì 7 gennaio




9 Gennaio
Il prompt di comandi di windows
banda e latenza, il comando PING e il tracert, l'importanza del "ping" per i videogiochi online.
il traffico fra Massa ed Aulla passa da??
Il ping da Massa ad Aulla è molto peggio di quello verso google
il ping di facebook è peggio di quello di google
La fibra ottica, il TTL (Time To Live) e l'uccisione dei pacchetti Internet
Ecco un cartello Telecom che segnala la presenza di Fibre Ottiche (F.O.) interrate

millisecondi.

Sito di classe, i film di animazione digitale Pixels e Animusic.

Come costruire una casetta 3D con google sketchup (gratis)
Però ha dimenticato le piastrelle del pavimento



come cercare "tutorial google sketchup italiano" su youtube

11 gennaio
pubblicità progresso
Il cellulare potrebbe fare male quindi... (il principio di precauzione)


sito liberliber.it con opere prive di diritto d'autore (scaduto dopo 70 anni dalla morte dell'autore, secondo la legge italiana; in altri paesi è diverso)
la struttura del computer è simile a quella degli umani, memoria, logica, input, output. (I/O)

primi rudimenti di cifratura
Un riconoscitore di impronte digitali (biometria) oramai costa poco.

dispositivo di controllo accessi con riconoscimento ad impronta digitale

serratura con maniglia attivata da impronta digitale. Questo venditore ha il feedback (numero di giudizi) molto basso

pennina con contenuto protetto da impronta digitale

Netbook con accesso da impronta digitale (il lettorino è in basso a destra sotto la tastiera)
Notare che questo netbook costa poco perchè è ricondizionato, cioè non è nuovo. In inglese si dice "refurbished"


antiche schede perforate e tabulati, i media di input e Output (I/O) dei computer di una volta.
Alcuni computer antichi (anni '60 e '70)
controllo degli accessi a reti LAN wireless, password, MAC ecc. (Hai spento il tuo WIFI? , come la giudichi la fonte?)

14-01

elenco "cattivi"


16-01
Buoni  e cattivi come all'asilo....


espandibilità (RAM, Disco) di varie piattaforme


18-01
La rappresentazione dei video digitali, la  compressione video per differenze fra fotogrammi ed i macroblocchi
rudimenti di batterie per informatica, il principio di precauzione (talidomide,  fumo, amianto e radiazioni informatiche)




batterie, chimiche Watt, Volt ecc.
esempio delle ministilo (AAA) stilo (AA) normali, ricaricabili, batterie al piombo (2V ad elemento) e LITIO 3,7V
ecco le power bank che ho acquistato su EBAY, le batterie 18650 sono a parte.


21-01
algoritmiiiiii!!!!
e diagrammi di flusso (quello che abbiamo disegnato noi alla lavagna)

La porzione cancellata della lavagna è stata ricostruita.

Algoritmo per troubleshooting moto


Sul libro di testo da pag. 166 a pag. 173


Disegnare flow chart con Dia

oppure a mano

un gif animato composto da molti fotogrammi


23-01


wikipedia è un'enciclopedia POP ecco la voce pokemon

Sai fare il té?



25-01
Algoritmi e diagrammi di flusso: la media dei voti.




28-01

Variabili (celle di memoria che contengono un dato che varia durante l'esecuzione di un programma es: voto, somma)
tipo di variabile:
costanti: celle di memoria che contengono un valore FISSO.
come disegnare diagrammi di flusso in bella col computer
ecco una semplicissima lezione sui flowchart presa da internet

30-01




In programmazione si usano spesso delle matrici e dei vettori






diagrammi di flusso: somma dei primi N interi.
con N=0 non funziona
esiste una formula molto più efficiente per calcolare il risultato.


04-02
algoritmo per la tabellina delle moltiplicazioni

indici di riga (I) e di colonna (J) errori con gli indici, come li correggiamo?


06-02
Al Khowarizmi (da wikipedia)


Antiquariato


ancora diagrammi di flusso, matrici, diagonali ecc.

foto mossa!



Somma dei primi N interi (con N = a zero incluso, ecco perchè I inizia da Zero)
Per i nomi di variabili sarebbe stato meglio usare SOMMA invece di S




Somma di N interi "inputati" dall'utente
variabili:



08-02


11-02
In lab multimediale:
Il sito di classe (questo)
algoritmi (quelli qui sopra)
le matrici
Il campo fiorito (era minato) la matrice e le regole da seguire per creare una partita e poi giocarla.

Utilizzo di google docs-drive disegni per creare diagrammi di flusso in bella, ma è meglio DIA (il link per scaricare DIA lo puoi cercare all'interno di questa pagina premendo F3 (cerca) oppure, andando su sourceforge.net e cercando DIA diagram editor.)



13-02
ancora esercizi su flow chart

 
mancano alcune frecce...


15-02
compito in classe


18-02
Sono stato alla fiera dell'elettronica di Carrara
Il laboratorio di sistemi: LAN ethernet, Switch ecc.
inizio correzione compito
scalari, vettori e matrici (repeat)
tipi di dati
Linguaggi di programmazione: tutti in Inglese ma con vocabolario molto limitato e regole molto rigide
esempio di programmino in linguaggio Basic






esempio di vocabolario del linguaggio C++

Vocabolario del linguaggio Qbasic
CLS
REM
READ
LIST
PRINT
LET
END
FOR
THEN
ELSE
WHILE
DIM
IF
ENDIF
AS
GOSUB
RETURN





20-02
Battaglia navale!


numeri casuali: i dadi.

Il problema del dado con sei facce per generare numeri casuali compresi fra uno e dieci


25-02
lab: postaconlatesta, memoria di internet (cosa faceva il prof 23 anni fa, quando ancora non esistevano il browser e l'ipertesto e su internet si faceva solo email, gruppi di discussione e file transfer?)
cerca nei gruppi

come disegnare flow chart con google docs disegni

primo utilizzo di un semplice interprete basic da pagina web
i tre riquadri, sorgente del programma, area di output alfanumerico e area grafica (dimensionabile quasi a piacere)
esecuzione passo passo, istruzioni CLS, PRINT, GOTO e REM
semplici cicli con istruzione IF
per Pucciarelli

27-02

alcuni esempi di programmi scritti in qbasic
scrive una riga obliqua di 30 pixel
idem però con ciclo for
idem, però con pixel verdi
lancio di un dado a sei facce (utilizza la funzione RAND)
stampa 10 volte la parola ciao
10 CLS
20 let i=1
30 PLOT i,i+2
40 let i=i+1
50 if i < 30 then goto 30
60 print "terminato"
70 end
10 CLS
20 for i=1 to 30
30 PLOT i,i+2
40 next i
50 end
10 CLS
20 for i=1 to 30
30 PLOT i,i+2,"green"
40 next i
50 end
10 rem lancio dado
20 for i =1 to 10
30 print "lancio dado, numero generato: ";int(rand(6))+1
40 next i
100 end
10 rem programma che stampa 10 volte la parola ciao
12 rem contiene un errore, quale? come si corregge?
15 cls
20 let i=1
30 print I;" ciao!"
35 let i=i+1
40 if i < 10 then goto 30
50 print "finito!!"
60 end


scrive 300 pixel a caso utilizzando la funzione RAND
Ahia, ho modificato il programma delle torri di hanoi, inserendo i bastoncini verticali neri
azzeramento e stampa matrice 10 per 10
10 rem genera 300 pixel a caso in una matrice di 40 per 40
15 cls
20 for i =1 to 300
20 let x=int(rand(40))+1
30 let y=int(rand(40))+1
40 plot x,y
40 next i
100 end
prendilo qui, è troppo lungo
10 rem azzera e stampa matrice di 10 per 10
20 dim a (10,10)
30 for i=1 to 10
40 for j= 1 to 10
50 let a(i,j)=0
60 next j
70 next i
71 print "  1 2 3 4 5 6 7 8 9 0"
80 for i= 1 to 10
85 print i; " ";
90 for j= 1 to 10
100 print a (i,j);" ";
110 next j
120 print
130 next i
150 print "finito"


1-03
nell'aula multimediale a giocare con quitebasic ed i pixel.
un po' di storia del nostro vecchietto, il BASIC

4-3
Nel lab di sistemi, Qbasic: il ciclo FOR, i commenti e i numeri pseudocasuali.
gli esempi di oggi:
crea una matrice 10 per 10 la riempie di zeri (doppio ciclo FOR) e poi la stampa utilizzando l'istruzione GOSUB e un sottoprogramma
Stampa i primi dieci numeri interi (senza ciclo FOR)
stampa interi con ciclo FOR
10 rem azzera e stampa matrice di 10 per 10
20 dim a (10,10)
30 for i=1 to 10
40 for j= 1 to 10
50 let a(i,j)=0
60 next j
70 next i
80 gosub 8000
90 end
7999 rem inizio subroutine
8000 print "  1 2 3 4 5 6 7 8 9 0"
8010 for i= 1 to 10
8020 print i; " ";
8030 for j= 1 to 10
8040 print a (i,j);" ";
8050 next j
8060 print
8080 next i
8090 return
10 rem programmino che stampa i primi dieci interi
20 rem by BC 2013
30 let i=0
40 rem PRINT I
50 LET I=I+1
55 print i
60 IF I < 10 THEN GOTO 40
70 PRINT "FINITO!!"
80 END
10 rem programmino che stampa i primi dieci interi
20 rem by BC 2013 però con istruzione FOR
25 cls
30 for i=0 to 50 step 2
40 plot i,i
50 next i
70 PRINT "FINITO!!"
80 END

Generazione numeri casuali (lancio di un dado a sei facce) uso della funzione RAND
dieci lanci
dieci lanci, reso intero (troncamento) il risultato usando la funzione INT, notare che nei lanci non compare il sei ma, in compenso, c'è lo zero
10  cls
20 rem lancio dado
30 print rand(6)
40 end

2.440132711082697
10 cls
20 rem 10 lanci dado
25 for i=1 to 10
30 print rand(6)
35 next i
40 end

1.0562066514976323
5.192024893127382
1.5621585384942591
5.193806508556008
3.0711086480878294
3.7969256658107042
1.5526070455089211
5.236820668447763
5.024508212227374
5.569219138473272
10 cls
20 rem 10 lanci dado
25 for i=1 to 10
30 print int(rand(6))
35 next i
40 end

5
5
0
1
5
4
5
5
5
4

aggiunto uno a int(rand(6)), sembra che ci siamo.
verifichiamo che effettivamente funzioni facendo un centinaio di lanci, si vede che la frequenza dei risultati, 1...6 è circa la stessa.

10 cls
20 rem lancio dado modificato aggiungendo 1 per evitare che esca zero e fare uscire anche il sei
25 for i=1 to 10
30 print 1+int(rand(6))
35 next i
40 end

5
5
4
2
1
3
4
6
4
4
10 cls
20 rem lancio dado modificato aggiungendo 1 per evitare che esca zero e fare uscire anche il sei
25 for i=1 to 100
30 print 1+int(rand(6));
32 rem inserito un punto e virgola alla fine della print per evitare di andare a capo
35 next i
40 end

4625345163432566625424611135453456624365211641213121212312535512153564134452261133253614515146123646



06-03
Nell'aula multimediale a programmare in Basic
il file di help del basic, con la sintassi delle istruzioni e esempi vari




8-3
continua programmazione basic
cicli FOR (attenzione allo STEP, le coordinate X e Y dei pixel iniziano da zero.)


11-3
Disegnare un rettangolo al centro dell'area grafica.
un trenino (verme) che si muove sullo schermo. con un gioco di indici.
l'istruzione pause
disegna un quadrato viola (notare l'indentazione del loop) "fondamentale per incrementare la leggibilità del codice, in particolare delle strutture di controllo come le condizioni o i loop." verme che si muove sullo schermo
idem verme, però la lunghezza aumenta                                                                                                                   
10 rem programma di BC
20 rem che scrive un quadrato di pixel viola
100 cls
120 let x=10
130 let y=10
140     for x=10 to 20 step 2
200     plot x,y,"violet"
300     next x
400 print "ho finito"
500 rem fine

1000 end
10 rem programma di BC
20 rem crea un verme lungo 4 e poi lo
30 rem fa muovere in verticale
100 cls
120 let x=5
140     for y=5 to 8 step 1
200     plot x,y,"violet"
300     next y
400 print "ho finito"
410    for y=9 to 40
420    plot x,y,"yellow"
440    plot x,y-4,"grey"
445    pause 300
450    next y
500 rem fine

1000 end
10 rem programma di BC
20 rem crea un verme lungo 4 e poi lo
30 rem fa muovere in verticale
40 rem L è la lunghezza del verme che cambia
100 cls
120 let x=5
130 let l=4
140    for y=5 to 7 step 1
200    plot x,y,"violet"
300    next y
400 print "ho finito"
410    for y=8 to 40
420    plot x,y,"yellow"
440    plot x,y-(y/7+2),"grey"
445    pause 300
450    next y
500 rem fine

1000 end


indentazione
uso di getchar() per input da tastiera carattere per carattere
uso di soubroutines  e getchar per serpente che va su e giu (non funziona ancora)
programma con sottoprogrammi e cicli for indentati che scrive pixels sullo schermo grafico
idem potenziato (che bello giocare!!)
100 rem uso di getchar per fare muovere una racchettina su e giu
110 cls
120 gosub 1000
140 gosub 1500

600 rem muovi in giu

500 rem fine
600 end


999  rem inizio subroutines
1000 rem creazione serpente lungo 4 in colonna 5
1005 let x=5
1010    for y=5 to 8 step 1
1020    plot x,y,"violet"
1030    next y
1040 print "ho finito"
1050 return

1500 rem muove serpente
1510 rem muovi in su
1520   let y=9
1525 let i=1
1530   plot x,y,"yellow"
1540   plot x,y-4,"grey"
1550   pause 300
1555   let C=getchar()
1570   IF C = "s" THEN let i=1
1575   if C = "g" then let i=-1
1578 print "y= " + y
1580   let y = y + i

1582 if y = 40 then goto 1590
1583 if y = 9 then goto 1590
1584 goto 1530
1585 rem incrementa o decrementa (con i = 1 o -1)
1590 return
100 rem programma con sottoprogrammi
200 rem riempie di pixel un'area dello schermo grafico a partire dalle coordinate passate come parametri
250 cls
280 let x1=5
290 let y1=5
300 gosub 2000
320 print "scritti pixels "+x+" "+y
400 gosub 4000
450 print "ora fatto buco"

500 end

2000 rem scrive i pixel
2005 rem notare l'indentazione dei cicli FOR
2010    for x=x1 to x1+6
2020       for y=y1 to y1+6
2030       plot x,y,"yellow"
1035       pause 200
2040       next y
2050    next x
2060 return

4000 rem fa il buco nella matrice di pixel
4010    for x=x1+1 to x1+5
4020       for y=y1+1 to y1+5
4030       plot x,y,"grey"
4035       pause 200
4040       next y
4050    next x
4060 return


100 rem programma con sottoprogrammi
200 rem riempie di pixel un'area dello schermo grafico a partire dalle coordinate passate come parametri
250 cls
260    for i=5 to 30 step 2
280    let x1=i
290    let y1=i
300    gosub 2000
320    print "scritti pixels "+x1+" "+y1
400    gosub 4000
450    print "ora fatto buco"
460 next i

500 end

2000 rem scrive i pixel
2005 rem notare l'indentazione dei cicli FOR
2010    for x=x1 to x1+6
2020       for y=y1 to y1+6
2030       plot x,y,"yellow"
1035       pause 30
2040       next y
2050    next x
2060 return

4000 rem fa il buco nella matrice di pixel
4010    for x=x1+1 to x1+5
4020       for y=y1+1 to y1+5
4030       plot x,y,"grey"
4035       pause 30
4040       next y
4050    next x
4060 return




15-03
sottoprogrammi (subroutines) istruzione gosub e return, parametri


18-03
Getchar forzata by Thomas
curva serpente prova 1 by Thomas
esempio di chiamata di sottoprogrammi
45 cls
50 LET c=1
60 pause 500
70 PRINT " dammi la coordinata x "
80      LET c= c+1
90      if c < 5 then goto 60
92      let f=1
93 pause 500
94 PRINT "Muoviti!!"
95      let f=f+1
98      if f < 5 then goto 93
99          PRINT " dammi la coordinata y "
100        LET x = GETCHAR()
105     if x = "" then goto 60
110         LET y = GETCHAR()
130     if y = "" then goto 110
140 gosub 1400
300 end

1400 print " coordinata x " + x
1500 print " coordinata y " + y
2000 plot x,y
2100 return

20 rem by Thomas Amati 2013 pero con l istruzione for
25 cls
30        let x=5
40        for y=5 to 8 step 1
50 plot x,y,"violet"
60         next y
70 print "ho finito"
80   for y=9 to 40
90         plot x,y,"yellow"
100       plot x,y-4,"grey"
110       pause 60
120 next y
125  for y=36 to 40
127       plot x,y,"grey"
128       pause 60
130  next y
150 let y=40
160    for x=6 to 8 step 1
170        plot x,y,"yellow"
180    next x
190      for x=9 to 40
200          plot x,y,"yellow"
210          plot x-4,y,"grey"
220          pause 60
230      next x
240 return
100 rem esempio di sottoprogrammi
200 cls
300 print "sono il programma principale, ora chiamo la prima subroutine!"
400 gosub 2000
500 print "ho terminato"
600 end

2000 rem primo sottoprogramma
2100 print "sono il primo sottoprogramma, vengo richiamato dal main, ora chiamo il secondo"
2150 pause 500
2200 gosub 4000
2300 return

4000 rem secondo sottoprogramma, richiamato dal primo
4100 print "sono il secondo sottoprogramma, vengo richiamato dal primo"
4150 pause 500
4200 return


Altri esempi: operazioni sulle stringhe

operazioni sulle stringhe
viene contato il numero di "A" in una stringa di caratteri
Il serpentino si muove!!
5  rem assegno la stringa "Hello" alla variabile A
6 rem ecco il CLS che avevo dimenticato!
8  CLS
10 LET A = "Hello"
20 LET B$ = " World!"
25 rem stampa  A, poi B$ sulla stessa riga (;) poi va a capo
30 PRINT A ; B$
40 PRINT A$ ; B
45 rem trasforma "hello" tutto in maiuscolo
50 PRINT UPPERCASE(A)
55 rem tutto in minuscolo
60 PRINT LOWERCASE$(A$)
65 rem LEN$ misura la lunghezza della stringa
70 PRINT LEN$(B)
75 rem prende i due caratteri a destra della stringa B poi li trasforma in maiuscolo poi li stampa
80 PRINT UPPERCASE(RIGHT(B,2))
85 rem ora CONCATENO le stringhe a e B dentro la stringa C
90 let c=A+B
100 print "stringa c, prodotta concatenando a e B " + c
110rem input di una stringa da tastiera
120 input "come ti chiami?"; N
130 rem ora la stringa N contiene il tuo nome
135 print "ora stamperò gli ULTIMI tre caratteri del tuo nome ed i PRIMI tre"
140 print right(N,3)+"  "+left(N,3)

200 end
100 rem programma che conta le "A" in una stringa in input

200 cls
220 let c=0
300 input "digita la stringa ";s
320 rem s è la stringa
330 print "stringa digitata: "+s
400 for i=0 to len(s)
410     rem la seguente è una istruzione di debug
420     print "i= "+i+" car= "+mid(s,i,1)
450     if uppercase(mid(s,i,1))= "A" then let c=c+1
500 next i
600 print "numero di A trovate "+c
700 end
20 rem by Thomas Amati 2013 curva serpente
22 rem indentation by BC
25 cls
30        let x=5
40  for y=5 to 9 step 1
50    plot x,y,"violet"
60  next y
70 print "ho finito"
80  for y=9 to 40
90     plot x,y,"yellow"
100   plot x,y-4,"grey"
110   pause 60
120 next y
130 let x= 5
140 let y= 36
150 let x=x+1
160 let y=y+1
170 plot x,40,"yellow"
180 plot 5,y,"grey"
185 pause 60
190 if y < 40 then goto 150
250 let y=40
260 for x=6 to 8 step 1
270    plot x,y,"yellow"
280 next x
290 for x=9 to 40
300    plot x,y,"yellow"
310    plot x-4,y,"grey"
320    pause 60
330 next x
340 let x=36
350 let y=40
360 let x=x+1
370 let y=y-1
380 plot x,40,"grey"
390 plot 40,y,"yellow"
400 pause 60
410 if x < 40 then goto 360


25 Marzo
Lab di sistemi, programma che calcola la media dei voti di uno studente
mancano i controllo sui voti ecc.
azzera e stampa matrice di 10 per 10 (viene dichiarata con l'istruzione DIM) FLOOR e ROUND funzionano!
Media voti di Matteo Iacomini
100 rem calcolo media voti
200 rem *******************************
250 cls
280 let s=0
290 rem s è la somma
292 rem n è il nome studente
294 rem q è il numero di voti
300 input "come si chiama?";n
400 print "studente "+n
500 input "quanti voti?"; q
600 for i=1 to q
700    input "voto? "; v
800    print "il voto è "+v
850    let s=s+v
900 next i
1000 let m = s/q
1200 print "media "+n+"  "+m
2000 end
10 rem azzera e stampa matrice di 10 per 10
15 rem la matrice si chiama A,  DIM la dichiara
16 cls
20 dim a (10,10)
30 for i=1 to 10
40    for j= 1 to 10
50       let a(i,j)=0
60    next j
70 next i
72 rem print a
75 print "  1 2 3 4 5 6 7 8 9 0"
76 rem stampa l'indice di colonna
80  for i= 1 to 10
85    print i; " ";
90      for j= 1 to 10
100       print a (i,j);" ";
110    next j
120   print
130 next i
150 print "finito"
160 end
5   cls
10  print FLOOR(6.4)
20  print ROUND (6.6)
30  end
50 rem attenzione, i decimali col punto!

10 rem programma che calcola la media dei voti by Matteo iacomini

11 rem variabile nome n

12 rem variabile media m

13 rem variabile quanti voti q

14 rem variabile voto v

15 rem variabile somma s


100 cls

500 input "Come si chiama lo studente?"; n

510 print " studente " +n

600  gosub 6000

700  gosub 8000

750 end

800  print "Voto studente "+ n + 0

850 end

900 print " è impossibile che lo studente abbia preso" + v

910 print " Riprova"

950 end

1000 input "Allora quanti voti ha lo studente?";q

1050 end


6000 input"Quanti voti ha lo studente?";q

6050  rem la variabile e conterrà si o no

6100  if q=0 then input" Sei sicuro che abbia 0 voti?";e else goto 6300

6200   if e = "si" then goto 800 else goto 1000

6300  if q > 6  then goto 6400 else return

6399 rem attenzione la variabile f dovrebbe contenere si o no

6400 input "Sei sicuro che abbia più di 6 voti?";f

6500 if f = "si" then return else goto 850

6800  return


8000 for i=1 to q

8100 input " voto?" ;v

8110 if v >10 then goto 900 else goto 8200

8200 print " il voto è " +v

8300 let s=s+v

8400 next i

8500 let m= s/q

8600 print "la media dei voti è " + m

8700  return


cosa significa saper programmare bene e avere idee buone...


mappa degli D'aloisio in italia

27 marzo


esempio di utilizzo di dichiarazione di array (ogni elemento di "a" in questo caso è una stringa)
8 aprile: conteggio delle A e di altri caratteri in una stringa (soluzione di Matteo Iacomini)
idem, soluzione di Zanna
idem, soluzione di Federico Barberi
100 rem dichiaro la variabile a come array
130 array a
140 rem ora lancio un ciclo di letture da tastiera per riempire a
200 for i=1 to 3
250    input "stringa! ";b$
280    print b$
300    let a(i)=b$
400 next I
450 rem ora uso una seconda variabile come indice : I1
460 rem e stampo il contenuto dell'array di stringhe a
500 for i1=1 to 5
600    let c$=a(i1)
700    print c$
800 next i1
1000 end

100 rem programma che conta le "A" e "B" in una stringa in input

200 cls
220 let c=0
300 input "digita la stringa ";s
320 rem s è la stringa
330 print "stringa digitata: "+s
400 for i=0 to len(s)
410     rem la seguente è una istruzione di debug
420     print "i= "+i+" car= "+mid(s,i,1)
450     if uppercase(mid(s,i,1))= "A" then let c=c+1
460     if uppercase(mid(s,i,1))= "B" then let d=d+1
500 next i
600 print "numero di A trovate "+c
650 print "numero di B trovate "+d
700 end

100 rem programma che conta le "A" in una stringa in input

120 rem by zanna

200 cls

220 let c=0

300 input "digita la stringa ";s

320 rem s è la stringa

330 print "stringa digitata: "+s

400 for i=0 to len(s)

410     rem la seguente è una istruzione di debug

420     print "i= "+i+" car= "+mid(s,i,1)

450     if uppercase(mid(s,i,1))= "A" then let c=c+1

500 next i

600 print "numero di A trovate "+c

650 for b=0 to len(s)

700     rem la seguente è una istruzione di debug

750     print "b= "+b+" car= "+mid(s,b,1)

800     if uppercase(mid(s,b,1))= "B" then let c=c+1

850 next b

900 print "numero di B trovate "+c

950 end


100 rem programma che conta le "A le B e le C" in una stringa in input


200 cls

220 let c=0

300 input "digita la stringa ";s

320 rem s è la stringa

330 print "stringa digitata: "+s

340 for i=0 to len(s)

410 rem la seguente è una istruzione di debug

420 print "i= "+i+" car= "+mid(s,i,1)

450 if uppercase(mid(s,i,1))= "A" then let c=c+1

455 if uppercase(mid(s,i,1))= "B" then let d=d+1

456 if uppercase(mid(s,i,1))= "C" then let f=f+1

500 next i

600 print "numero di A  trovate "+c

650 print "numero di B trovate" + d

660 print "numero di C trovate" + f

700 end



Ultra gosub di Franco Basteri (Gosub nidificati)
qui utilizziamo le array per leggere una stringa, invertirla e stamparla
p.s. manco a dirlo funziona male... chi me lo sistema spiegando perchè non funziona? (un 8 come premio)
dichiarazione, riempimento e stampa di una matrice di dimensioni 10 per 10
10 rem insieme di sottoprogrammi
20 cls
30 print "sono il programma principale"
40 gosub 2000
50 print "ho terminato"
60 end

2000 rem primo sottoprogramma
2100 print "sono il primo sottoprogramma, vengo richiamato dal
programma principale , ora chiamo il secondo"
2150 pause 50
2200 gosub 4000
2300 return

4000 rem secondo sottoprogramma, richiamato dal primo
4100 print "sono il secondo sottoprogramma, vengo richiamato dal primo
, ora chiamo il terzo"
4150 pause 500
4170 gosub 6000
4200 return

6000 rem terzo sottoprogramma, richiamato dal secondo
6100 print "sono il terzo sottoprogramma, vengo richiamato dal secondo
, ora chiamo il quarto"
6150 pause 500
6170 gosub 8000
6200 return

8000 rem quarto sottoprogramma, richiamato dal terzo
8100 print "sono il quarto sottoprogramma, vengo richiamato dal terzo
, ora chiamo il quinto"
8150 pause 500
8170 gosub 8600
8200 return

8600 rem quinto sottoprogramma, richiamato dal quarto
8700 print "sono il quinto sottoprogramma, vengo richiamato dal quarto
, ora chiamo il sesto"
8800 pause 500
8900 gosub 9000
8999 return


9000 rem sesto sottoprogramma, richiamato dal quinto
9900 print "sono il sesto sottoprogramma, vengo richiamato dal quinto
, torno all ' inizio "
9990 pause 500
9999 return

100 rem dichiaro le variabili a$ e b$ come array
130 array a$
135 array b$
140 rem ora leggo una stringa da tastiera
150 input "stringa"; S
160 rem prendo i caratteri della stringa e li carico negli elementi dell'array
200 for i=0 to len(s)
250    let a$(i)= mid(s,i,1)
400 next I
450 rem a questo punto stampo la stringa a rovescio
440 let l1=len(s)
500 for i1=l1  to 1 step -1
600    let b$(i1) = a$(l1-i1)
800 next i1
810 rem ora stampo la stringa invertita
840 for i2=1 to l1-1
850    print b$(i2);
860 next i2
1000 end
120 cls
200 dim a1 (10,10)
210 rem ho dichiarato a1 matrice 10 per 10
215 rem ora la riempio di zeri (è necessario?)
220 for i=1 to 10
230    for j=1 to 10
250       let a1(i,j)=0
270    next j
280 next i
290 rem stampo l'intera matrice con una sola "Print"
300 print a1
2000 end
3000 rem p.s. il programma contiene un errore, uno dei soliti... qual'è?? come si corregge??



8-04
I "bug" software e il "debugging"
Un programma che contiene un gran numero di bug che interferiscono con la sua funzionalità è detto bacato (in inglese "to be buggy").

Sintassi basic,
Quello che usiamo è un dialetto basic
Esistono altri dialetti basic, per esempio:

programma scritto in Quickbasic, si notano subito:



altro esempio quickbasic, qui c'è un'etichetta (label) ovvero un numero di istruzione, perchè c'è un goto


ecco il risultato dell'esecuzione



terzo esempio, potenze di due

esecuzione

il logo (turtle) è un linguaggio per creare disegni, ha pochissimi comandi: quelli fondamentali sono:


10-04


quite basic su tablet (basta un browser che riconosca javascript)


15-04
esercizio in laboratorio con valutazione

18-04 continuazione esercizio
i nomi variabili di quitebasic possono essere lunghi anche due caratteri!! utilizzateli!
si scrive "sufficiente" con la i!
attenzione a non inserire print prima della CLS!! è come se non ci fossero!
attenzione all'inglese! si scrive iNput, non iMput!
attenzione all'uso per due cose diverse della stessa variabile!!!
verifica sempre di avere descritto con commenti tutte le variabili che usi!
esempio di indentazione corretta idem sbagliata
600    print "ciao"
700       for i=1 to q
800          input "voto? "; v
900          print "il voto è "+v
1000        let s=s+v
1100     next i
1200 print "ciao"
600    print "ciao"
700          for i=1 to q
800          input "voto? "; v
900          print "il voto è "+v
1000        let s=s+v
1100        next i
1200 print "ciao"

Le maiuscole sono differenti dalle minuscole, quindi "si" è diverso da "Si" e da "SI" e da "sI"
Quando ci si aspetta un "si" o "no" da tastiera, conviene sempre fare l'uppercase e confrontare con maiuscolo, così non si sbaglia! (oppure lowercase e confronto con le minuscole)
notare il suggerimento all'utente nella "input" utilizzali sempre, ricorda, l'utente può essere poco intelligente!
sbagliato/pericoloso
giusto
6399 rem attenzione la variabile f dovrebbe contenere si o no
6400 input "Sei sicuro che abbia più di 6 voti?";f
6500 if f = "si" then return else goto 850

6399 rem attenzione la variabile f dovrebbe contenere si o no
6400 input "Sei sicuro che abbia più di 6 voti? rispondere si o no";f
6500 if uppercase(f) = "SI" then return else goto 850

inserisci sempre commenti all'inizio delle subroutines spiegando cosa fanno.
I numeri di istruzione di solito conviene farli di 10 in 10 e in ordine crescente
esempio di else superfluo, alla 400 ci va comunque

100 rem
200 let i= 3
300 if i= 3 then print "i vale 3" else goto 400
400 print "sono l'istruzione 400"
500 end


nel programma che calcola la media dei voti, gestire anche numero voti negativo, voti negativi ecc.

Il "bubble sort" in quite basic. come funziona?? riesci a capire come funziona?


La battaglia navale!!!! ho dovuto utilizzare un font a spaziatura fissa (courier) per fare restare incolonnati i caratteri delle navi/mare
Ah, ecco la frase inglese che contiene tutti i caratteri dell'alfabeto, serve a far vedere i vari font.
"the quick brown fox jumps over the lazy dog"

battaglia navale: specifiche e regole
matrice 10 per 10 (mare)
navi da disporre:
- 1 portaerei lunga 5
- 1 corazzata lunga 4
- 2 incrociatori lunghi 3
- 3 cacciatorpediniere lunghi 2
- 4 sottomarini lunghi 1

regole:
le navi non possono essere sovrapposte
le navi non si possono toccare neanche con l'angolo
esempio giusto: c:corazzata p:portaerei s:sottomarino
**********
***cccc***
**********
*********p
*********p
***iii***p
*********p
****s****p
**********
**s*******

disposizione sbagliata il "destroyer" tocca l'incrociatore e la corazzata tocca un sottomarino

**********
***cccc***
*******s**
*********p
*dd******p
***iii***p
*********p
****s****p
**********
**s*******

mare di colore blue o light blue, navi colore sensato a piacere
nave colpita rosso
mare colpito da decidere.


battaglia navale, primi pezzettini di codice
programma disegna due mari 10 per 10 (mio e del nemico) notare che c'è almeno un errore sugli indici
dislocazione navi : il mare e i 4 sottomarini
sparo un colpo a caso                   
non funziona bene ancora. scarta sottomarini in posizioni errate controllando le caselle vicine

100 rem battaglia navale (speriamo!)

200 cls

300 rem mare mio

400 for i = 1 TO 10

450    for j= 1 to 10

500       plot i,j,"lightblue"

600    NEXT j

800 NEXT I

1000 rem mare nemico

1400  for i = 14 TO 23

1450    for j= 1 to 10

1500       plot i,j,"lightblue"

1600    NEXT j

1800  NEXT I

2000 end

100 rem battaglia navale (speriamo!)

200 cls

300 rem mare mio

400 for i = 1 TO 10

450 for j= 1 to 10

500 plot i,j,"lightblue"

600 NEXT j

800 NEXT I

1000 rem mare nemico

1400  for i = 14 TO 23

1450    for j= 1 to 10

1500       plot i,j,"lightblue"

1600    NEXT j

1800  NEXT I

1850 for i1= 1 to 4

1900    gosub 4000

1950 next i1

2000 END


4000 rem dispongo sottomarino

4050 let x = rand(10)

4100 let y = rand(10)

4150 rem contiene due errori nell'uso di rand()

4150 plot x,y,"black"

4200 return



100 rem battaglia navale (speriamo!)
200 cls
300 rem mare mio
400 for i = 1 TO 10
450    for j= 1 to 10
500       plot i,j,"lightblue"
600    NEXT j
800 NEXT I
1000 rem mare nemico
1400  for i = 14 TO 23
1450    for j= 1 to 10
1500       plot i,j,"lightblue"
1600    NEXT j
1800  NEXT I
1850 for i1= 1 to 20
1900    gosub 4000
1950 next i1
2000 END

4000 rem dispongo sottomarino nella prima matrice
4050 let x = int(rand(9))+1
4100 let y = int(rand(9))+1
4110 print " x e y "+x+" "+y
4120 gosub 4500
4130 rem se variabile o = 0 la sub 4500 NON ha trovato vicini
4150 if o=0 then plot x,y,"black"
4160 if o=0 then PRINT "POSIZIONATO SOTTOMARINO IN "+X+" "+Y
4200 return

4500 rem controllo se sottomarino va bene
4510 rem verifico se negli 8 quadratini intorno al sottomarino ci sono altre navi
4515 rem usa variabili interne x1 y1 ritorna o
4517 let v1=0
4518 rem v1 contatore di caselle Vicine occupati
4520 for x1= x-1 to x+1
4530    for y1=y-1 to y+1
4540     rem   print x1+" "+y1+" "+color (x1,y1)
4550       if color (x1,y1) = "black" then let v1=v1+1
4560    next y1
4570 next x1
4572 print "numero vicini "+V1
4575 if v1 > 1 then let o=1 else let o=0
4576 if v1 > 1 then print "v1= "+v1+" scartata posizione "
4578 rem v1 vale almeno 1 (lui stesso)
4580 return

esempio di pseudocodice per il posizionamento dei sottomarini
posizionamento sottomarini
esegui quattro volte il blocco sottostante
    [genera due coordinate a caso comprese fra 1 e 10
    verifica che nella posizione scelta non ci sia già un sottomarino o altra nave
    verifica che nelle caselle confinanti con quella scelta non ci siano altre navi
    se le due verifiche sono state positive posiziona il sottomarino]
fine posizionamento sottomarini



esempio di pseudocodice per la gestione dei colpi verso il nemico
sparo al nemico
passo1 genera due coordinate a caso fra 1 e 10
verifica se in quella posizione hai già sparato in precedenza
se si ritorna al passo1
se l'avversario ti dice che hai colpito acqua marca con colore blu scuro la casella
se l'avversario ti dice che hai colpito una nave marca con colore rosso la casella e ricordane le coordinate



Scomposizione del problema "battaglia navale" in sottoproblemi (esempio)
Si può procedere per gradi giocando, per esempio, solo con i sottomarini.


24-04
disposizione intelligente delle navi per ridurre il numero di caselle scartate dopo l'affondamento.

disposizione errata
disposizione corretta ma inefficiente il numero di caselle scartate è di 14+16+12+8+8=58
disposizione corretta ma più efficiente il numero di caselle scartate è di 14+9+7+8+8=46 ancora meglio, siamo scesi a 6+5+9+5+3=28!!
Si può fare ancora di meglio!
**********
***cccc***
*******s**
*********p
*dd******p
***iii***p
*********p
****s****p
**********
**s*******
**********
***cccc***
**********
********p*
***iii**p*
********p*
*s******p*
****s***p*
**********
**********
**********
***cccc***
**********
****iii**p
*********p
*********p
*s*******p
****s****p
**********
**********
cccc******
**********
iii*******
*********p
*********p
*********p
s********p
*********p
**********
s*********

La seguente routine contiene due errori nell'uso della rand() spiega quali sono e come si correggono.
Puoi inserire delle print di debug su x e y per vedere gli errori

4000 rem dispongo sottomarino

4050 let x = rand(10)

4100 let y = rand(10)

4150 rem contiene due errori nell'uso di rand()

4150 plot x,y,"black"

4200 return


come usare il quickbasic:

29-04



ho aggiunto una slide sul  NUC (ultimo strillo di Intel ed altri.)


03-05
come si collauda il programma media dei voti per verificare che sia a "prova di scemo"
i seguenti pezzettini di codice "code snippets" fanno la stessa cosa.  (esempio)
versione originale
primo compattamento
secondo compattamento, un IF che utilizza condizioni multiple con OR   (esiste anche  "AND")
2040 let z = "black"
2050 let h = x+1 
2060 let v = x-1
2065 let e = y+1
2070 let p = y-1
2100 if h = z then goto 4050
2110 if v = z then goto 4050
2120 if e = z then goto 4050
2130 if p = z then goto 4050


2100 if x+1 = z then goto 4050
2110 if x-1 = z then goto 4050
2120 if y+1 = z then goto 4050
2130 if y-1 = z then goto 4050

2080 if z = x+1 or z=x-1 or z=y+1 or z=y-1 then goto 4050

primo video sui sottomarini, disposizione e affondamento.
subroutine per lo "smarcamento" delle caselle intorno ad un sottomarino


5500 rem esclusione caselle, affondato sottomarino
5520 let c1=c1+1
5522 rem c1 contatore affondamenti
5523 rem le coordinate del sottomarino colpito sono x e y
5225 for x2= x-1 to x+1
5530    for y2=y-1 to y+1
5540       rem   print x2+" "+y2+" "+color (x2,y2)
5550       if x2> 0 and y2 > 0 and x2 < 11 and y2 < 11 then plot x2+13,y2,"blue"
5560    next y2
5570 next x2
5575 plot x+13,y,"red"
5578 rem la matrice con le navi del nemico inizia a x+13, le y sono le stesse della mia matrice
5580 return


tre diverse modalità per controllare le otto caselle vicine ad un sottomarino
prima versione, otto if ognuno con le coordinate di ogni casella vicina                                                          
seconda versione, gli otto if sono stati compattati in un unico IF... OR...OR...
terza versione, doppio loop  (controlla le NOVE caselle, compresa quella in cui c'è o si vuole piazzzare il sottomarino.)                 
4517 let v1=0
4518 rem v1 contatore di caselle Vicine occupate
4520 if color(x-1,y-1) = "black" then let v1=v1+1
4530 if color(x,  y-1) = "black" then let v1=v1+1
4540 if color(x+1,y-1) = "black" then let v1=v1+1
4550 if color(x-1,y) = "black" then let v1=v1+1
4560 if color(x+1,y) = "black" then let v1=v1+1
4570 if color(x-1,y+1) = "black" then let v1=v1+1
4580 if color(x,y+1) = "black" then let v1=v1+1
4590 if color(x+1,y+1) = "black" then let v1=v1+1
4600 print "numero vicini "+v1
4610 return
4520 if color(x-1,y-1) = "black" OR color(x,y-1) = "black" OR color (x+1,y-1) = "black" OR color(x-1,y) = "black" OR color(x+1,y) = "black" OR color(x-1,y+1) ="black" OR color(x,y+1) = "black" OR color(x+1,y+1) = "black" then return
4500 rem controllo se sottomarino è posizionabile in x y
4510 rem verifico se negli 8 quadratini intorno al sottomarino (x,y) ci sono altre navi
4515 rem usa variabili interne x1 y1 ritorna v1
4517 let v1=0
4518 rem v1 contatore di caselle Vicine occupate
4520 for x1= x-1 to x+1
4530    for y1=y-1 to y+1
4540     rem   print x1+" "+y1+" "+color (x1,y1)
4550       if color (x1,y1) = "black" then let v1=v1+1
4560    next y1
4570 next x1
4572 print "numero vicini "+V1

Comunicatemi le squadre (2, max 3 giocatori l'una) compilando questo form
Ricordate che le squadre di tre giocatori sono permesse ma dovranno  sviluppare programmi molto migliori degli  altri.

15-05
Come potrebbe essere lo pseudocodice per la disposizione dei cacciatorpediniere? (due caselle)
Ragionaci insieme ai compagni di squadra  e scrivilo, poi inviatemelo per e-mail.

Regolamento per torneo battaglia navale (bozza)


17-05
Subroutines e parametri in ingresso-uscita

Esercizio a casa: (con voto) scrivere lo pseudocodice per la dislocazione dei cacciatorpediniere.
Per chi  riesce anche a scrivere del codice funzionante con almeno 5 cacciatorpediniere c'è un 8 in palio.
perchè usiamo  int(rand(10))+1 per generare gli indici della matrice mare.
esempio di esecuzione
50 let x = rand(10)
60 print "rand (10): "+x
65 let y = int(x)
70 print "int(rand(10)): "+y
80 let z = y+1
90 print "int(rand(10))+1: "+z
100 end

rand (10): 7.442241956014186
int(rand(10)): 7
int(rand(10))+1: 8

esempio di disposizione cacciatorpediniere
le limitazioni attuali sono che:


(click)

20-05
per lunedì sera, come già comunicato venerdì scorso,
Esercizio a casa: (con voto) scrivere lo pseudocodice per la dislocazione dei cacciatorpediniere.
consegna tramite gmail
Per chi  riesce anche a scrivere del codice funzionante che disponga correttamente  almeno 5 cacciatorpediniere c'è un 8 in palio.

in quitebasic e in molti altri linguaggi di programmazione gli spazi e la differenza fra MAIUSCOLE-minuscole vengono ignorati, esempio:


spazi e minus-maiuscOLE
10 cls
20 rem le MAIUSCOLE e minuscole sono considerate uguali
30 rem a meno che non siano parte di stringhe fra doppi apici
50 rem esempio
60 let a1 = 10
70 print "A1 vale: "+A1
80 LET a4=" ciao"
90 Let A5 = "CIAO"
100 PRint "A4 = "+A4+" A5 = "+a5
110 rem gli spazi fra i vari elementi di una istruzione non vengono considerati
120 rem ovvero che ci siano, che siano doppi o tripli o che non ci siano proprio nulla cambia (tranne la leggibilità)
130 printa4+a5+a1
140 print a4 + a5 + a1
150 fori=1to10step2
160printi;
170nexti
1000end

ecco gli incrociatori, (con i soliti errori e limitazioni.)

il concetto di LOOP (CICLO) infinito
DEBUG: l'esecuzione passo-passo e l'esame delle variabili
identificazione a posteriori di frammenti di codice utilizzati in varie parti del programma e inserimento in subroutines
es:
5050 let x = int(rand(10))+1p
5100 let y = int(rand(10))+1

come gestire il diverso comportamento (dovuto al browser?) nel riconoscimento del colore dei pixel azzurri aggiungendo un secondo IF

6025 if color(x,y) <> "lightblue" then goto 6010
6027 if color(x,y) <> "rgb(173, 216, 230)"  then goto 6010

nel controllo se ci sono navi vicino al cacciatorpediniere posizionato in x,y e x+1,y , perchè queste istruzioni sono sbagliate?

6400 rem vicini del cacciatorpediniere
6417 let v1=0
6418 rem v1 contatore di caselle Vicine al cacciatorpediniere occupate
 6420 for x1= x-1 to x+3
6430    for y1=y-1 to y+4
6440     rem   print x1+" "+y1+" "+color (x1,y1)
6450       if color (x1,y1) = "black" then let v1=v1+1
6460    next y1
6470 next x1
 6472 print "x e y "+x+" "+y+" numero vicini caccia "+V1
6480 if v1=0 then plot x,y,"black"
6490 if v1=0 then plot x,y+1,"black"
6550 return

leggete il contenuto del sito!!
Lo pseudocodice non  l'ha consegnato quasi nessuno.
Luca e Nicolò (e altri) inserite sempre l'oggetto negli e-mail!
guarda qui le squadre


24-05
Ci siamo vicini   (gli  spari però ancora da vedere) Le navi possono essere anche in verticale!!!

i connettivi AND e OR negli IF

29-05
Oggi un simpatico brownout ci ha interrotto il lavoro.
Uso del debug, "goto cursor " ed esecuzione passo passo con display delle variabili.
Riutilizzo delle variabili.
Spaziatura adeguata dei numeri delle istruzioni
uso delle combinazioni di tastiera ctrl-x (taglia) ctrl-c (copia) ctrl-v (incolla) ctrl-z (elimina ultima operazione)

la regola delle 12 P del Programmatore:
Prima Pensa Poi Programma Perché Programmi Poco Pensati Possono Produrre Puttanate Pazzesche.

Lunedì verifica scritta online
esercitati provando questo modulo (form) di prova
puoi vedere le tue risposte qui


verifica scritta online:   eccola    svolgimenti
è stata creata con google docs
scegli "crea nuovo modulo"
le risposte, con il time-stamp vengono inserite in una riga di un foglio elettronico.
correzione:


I programmi sulla media dei voti e sui sottomarini sono in gran parte identici fra di loro!!

P1