10 INPUT T 20 K = 100/T 30 INPUT D 40 PRINT D*K 50 GOTO 30 |
10 INPUT "T = ? "; T 15 K = 100/T 20 PRINT "K = 100/T = ", K 30 INPUT "D = ? "; D 40 PRINT "D*K = ", D*K 50 GOTO 30 |
Ricarica (o "Aggiorna") per introdurre ed eseguire un nuovo programma
Qualche spiegazione. Ogni riga del programma è preceduta da un numero intero (0, 1, 2, ..., 10,..., 200, ...) che rappresenta l'ordine di esecuzione. Nelle istruzioni di INPUT puoi far precedere la varibile di input da un commento racchiuso tra " e seguito da un punto e virgola. I comandi (INPUT, PRINT, ...) possono essere scritti in maiuscolo o minuscolo. Come variabili si possono usare singole lettere o più lettere, eventualmente seguite da una o più cifre.
| Nel caso di un programma come il seguente si possono ottenere l'uscita "Infinity" nel caso in cui il programma si trovi a fare la divisione 5/0, a indicare che se si dividesse un numero positivo per un numero piccolissimo si otterrebbe un numero grandissimo, e l'uscita "NaN", che sta per "non è un numero", quando si trova di fronte al calcolo di 0/0. |
10 INPUT "x = ? "; x 20 PRINT "x/(SQR(4)-2) = ", x/(SQR(4)-2) 30 GOTO 10 |

Di fronte al programma 10 PRIMT 2+3 compare un messaggio che inizia con "ERROR" a indicare che si è scritto un comando in modo errato.
| In una riga si possono inserire più comandi, separati da un due punti (:). Si possono utilizzare come input ed output oltre ai numeri anche "testi", ossia sequenze di lettere, racchiuse tra virgolette ("). Se una variabile viene usata per memorizzare un testo occorre che il suo nome finisca con $. Posso concatenere più uscite usando un "+". | 10 a$ = "2"+"3" : b = 3/4 20 PRINT "pippo" + a$ + "; " + b ![]() |
![]() |
Un'altra istruzione importante: IF ... THEN ... ("se ... allora ..."). Vediamo anche come si scrivono "≠", "≥" e "≤" ?
10 input "A = "; A 20 input "B = "; B 30 if A <> B then print "A diverso da B" 40 if A >= B then print "A maggiore o uguale a B" 50 if A <= B then print "A minore o uguale a B" 60 if A > B then print "A maggiore di B" 70 if A < B then print "A minore di B" 80 if A = B then print "A uguale a B" 90 goto 10 |
Di seguito sono indicate le principali parole chiave della versione del BASIC che stiamo usando, cioè le parole "riservate" che in tale linguaggio si utilizzano per indicare comandi, funzioni, Le parole chiave possone essere scritte sia in maiuscolo che in minuscolo. Sono riportati anche vari esempi d'uso. Altri esempi sono riportati più avanti
Classe Parole chiave comprese nella classe -------------------------------- ------------------------------------- Controllo del flusso END, FOR...NEXT, IF...THEN..ELSE del programma GOSUB...RETURN, GOTO, WHILE...WEND Commenti REM (o ') Dichiarazione di costanti e va- DATA, DIM, READ riabili, assegnazione di valori Periferica di input/output CLS, INPUT, PRINT Elaborazione delle stringhe ASC, CHR$, INSTR, LEFT$, LEN MID$, RIGHT$, STR$, STRING$, VAL Esecuzione di calcoli ^ , ABS, ASC, COS, INT, RND SIN, SQR, TAN |
05 I=1 10 A = RND : PRINT A; 15 IF A > 1/2 THEN PRINT " > 1/2" ELSE PRINT " < 1/2" 20 I = I+1 : IF I=11 THEN END 35 GOTO 10 0.3309791684150696 < 1/2 0.9956300258636475 > 1/2 0.9195851683616638 > 1/2 0.33149659633636475 < 1/2 0.731931746006012 > 1/2 0.05961799621582031 < 1/2 0.17708414793014526 < 1/2 0.4606109857559204 < 1/2 0.889754593372345 > 1/2 0.2006514072418213 < 1/2
05 REM i primi 10 interi positivi, e quelli dispari 10 for i=1 to 10 : print i+" "; : next 20 print 30 for i=1 to 10 step 2: print i+" "; : next 1 2 3 4 5 6 7 8 9 10 1 3 5 7 9
05 ' pari o dispari? 10 input "N = "; N 20 if N/2 = int(N/2) then gosub 50 else gosub 60 30 goto 10 50 print " numero pari" : return 60 print " numero dispari" : return N = 0 numero pari N = 31 numero dispari N = 17 numero dispari N = 12 numero pari N = ...
10 PRINT "Introduci un qualunuque numero" 15 OK=1 20 WHILE OK=1 30 INPUT "N = "; N 40 IF N/2 = INT(N/2) THEN risp$ = "pari" ELSE risp$ = "dispari" 50 PRINT risp$ 60 INPUT "batti 1 per altro numero, 0 per smettere "; OK 70 WEND Introduci un qualunuque numero N = 17 dispari batti 1 per altro numero, 0 per smettere 1 N = 20 pari batti 1 per altro numero, 0 per smettere ...
10 DATA 1,2,3,4,5,6,7,8,9,10 20 READ a,b,c,d,e 30 PRINT a+b+c+d+e 40 READ a,b,c,d,e 50 PRINT a+b+c+d+e 15 40
05 ' la somma e il prodotto di 5 numeri 10 dim x(4) 15 ' le varibili indiciate partono dall'indice 0; quindi per 5 dati bastano x(0),...,x(4) 20 for i=0 to 4 : input x(i): next 30 sum=0 : prod=1 40 for i=0 to 4 : sum=sum+x(i) : prod=prod*x(i) : next 50 print "somma = "; sum; ", prodotto = "; prod ? 1 ? 2 ? 3 ? 4 ? 5 somma = 15, prodotto = 120
10 INPUT "x = ";x : INPUT "y = ";y 20 PRINT "radice quadrata di x^2+y^2 = "; SQR(x^2+y^2) 30 GOTO 10 x = 3 y = 4 radice quadrata di x^2+y^2 = 5 x = 4 y = 5 radice quadrata di x^2+y^2 = 6.4031242374328485
10 INPUT "x = ";x 20 PRINT "valore assoluto di x = "; ABS(x) 30 PRINT "parte intera di x = "; INT(x) 40 PRINT "arrotondamento agli interi = "; INT(x+1/2) 50 PRINT "arrotondamento ai centesimi = "; INT(x*100+1/2)/100 60 PRINT "arrotondamento alle centinaia x = "; INT(x/100+1/2)*100 70 GOTO 10 x = 12345.6789 valore assoluto di x = 12345.6789 parte intera di x = 12345 arrotondamento agli interi = 12346 arrotondamento ai centesimi = 12345.68 arrotondamento alle centinaia x = 12300
01 ' LEN = lunghezza di una frase, LEFT$(frase,i) carattere i-mo di 02 ' frase da sinistra, RIGHT$(frase,i) carattere i-mo da destra 10 PRINT "Inversione delle lettere di una frase" 15 INPUT "Premi a capo "; x$ 20 CLS 30 INPUT "Scrivi la frase "; frase$ 40 PRINT : PRINT "La frase inverita: "; 50 FOR lettera = 1 TO LEN(frase$) 60 PRINT LEFT$(RIGHT$(frase$,lettera),1); 70 NEXT

05 ' La funzione VAL produce il numero all'inizio di una frase 10 INPUT "batti una frase iniziante con dei numeri "; x$ 20 PRINT VAL(x$) 30 GOTO 10 batti una frase iniziante con dei numeri 75 per 180 75 batti una frase iniziante con dei numeri 12.45 = 1245/100 12.45
05 ' ASC produce la codifica numerica (codice ASCII) di un carattere 06 ' CHR$ produce il carattere corrispondente ad una codifica numerica 10 INPUT "batti un carattere "; x$ : PRINT ASC(x$) : PRINT CHR$(ASC(x$)) : GOTO 10 batti un carattere a 97 a batti un carattere b 98 b batti un carattere 0 48 0 batti un carattere 1 49 1
05 ' INSTR(f1,f2) trova dove inizia la sottofrase f2 in f1 10 INPUT "Frase = "; frase$ : INPUT "sotto frase = "; frase1$ 20 PRINT INSTR(frase$, frase1$) 30 GOTO 10 Frase = Che bella giornata! sotto frase = ella 6 Frase = Che bella giornata! sotto frase = essa 0
05 ' STR$ trasforma un numero in una stringa 10 INPUT x 20 PRINT x+x 30 PRINT STR$(x)+STR$(x) 40 GOTO 10 ? 50 100 5050 ? 4.5 9 4.54.5
10 INPUT "Frase = "; frase$ 20 INPUT "Sottofrase dal posto iniziale "; j : INPUT "avanti di "; n 30 PRINT MID$(frase$, j, n) 40 GOTO 10 Frase = Che bella giornata! Sottofrase dal posto iniziale 5 avanti di 9 bella gio
10 text$ = "A" + STRING$(20, "1") + "B" 20 PRINT text$ A11111111111111111111B
10 GOSUB 1000 20 INPUT "gradi = "; gradi 30 PRINT "radinati = "; gradi/180*PI 40 GOTO 20 1000 PI = 3.1415926535897932 RETURN gradi = 90 radinati = 1.5707963267948966 gradi = 360 radinati = 6.283185307179586 gradi = 45 radinati = 0.7853981633974483 gradi = 180 radinati = 3.141592653589793
10 GOSUB 1000 20 INPUT "gradi = "; gradi 30 PRINT "seno = "; SIN(gradi/180*PI) 40 PRINT "coseno = "; COS(gradi/180*PI) 50 PRINT "tangente = "; TAN(gradi/180*PI) 69 PRINT "Devi arrotondare con 2 cifre in meno i risultati" 70 GOTO 20 1000 PI = 3.1415926535897932 RETURN gradi = 30 seno = 0.49999999999999994 coseno = 0.8660254037844387 tangente = 0.5773502691896257 Devi arrotondare con 2 cifre in meno i risultati
Altri ESEMPI
05 ' Calcolo senza tener conto delle priorita' tra le operazioni 10 INPUT "numero "; x : u$=STR$(x) 20 INPUT "operazione (+,-,*,/,^ o =) "; op$; : u$=u$+" "+op$ : op$=" "+op$+" " 25 ' Ho aggiunto spazi bianchi ai simboli di operazione 40 IF op$=" + " THEN goto 100 50 IF op$=" - " THEN goto 110 60 IF op$=" * " THEN goto 120 70 IF op$=" / " THEN goto 130 80 IF op$=" ^ " THEN goto 140 90 print "Calcolo a catena "+u$+" "+ x : print "" : goto 10 100 INPUT "numero "; y : u$=u$+" "+STR$(y) : x=x+y : print x : goto 20 110 INPUT "numero "; y : u$=u$+" "+STR$(y) : x=x-y : print x : goto 20 120 INPUT "numero "; y : u$=u$+" "+STR$(y) : x=x*y : print x : goto 20 130 INPUT "numero "; y : u$=u$+" "+STR$(y) : x=x/y : print x : goto 20 140 INPUT "numero "; y : u$=u$+" "+STR$(y) : x=x^y : print x : goto 20 numero 20 operazione (+,-,*,/,^ o =) * numero 5 100 operazione (+,-,*,/,^ o =) / numero 40 2.5 operazione (+,-,*,/,^ o =) + numero 11.5 14 operazione (+,-,*,/,^ o =) ^ numero 2 196 operazione (+,-,*,/,^ o =) = Calcolo a catena 20 * 5 / 40 + 11.5 ^ 2 = 196 Invece il calcolo usuale (che tiene conto delle priorità) di 20 * 5 / 40 + 11.5 ^ 2 - che equivale a ( (20 * 5) / 40 ) + (11.5 ^ 2) - avrebbe dato: 10 PRINT 20 * 5 / 40 + 11.5 ^ 2 134.75-----------------------------------------------
05 ' Istogramma avente per colonne i 5 dati 127,585,430,1256,148 06 ' Posso modificare lung per avere istogrammi di divesa lunghezza 10 lung=80 : n=5 15 dim dati(n-1) 25 dati(0)=127 : dati(1)=585 : dati(2)=430: dati(3)=1256 : dati(4)=148 30 max=0 : totale = 0 35 for i=0 to n-1 : totale = totale+dati(i) : next 40 for i=0 to n-1 45 p = INT(dati(i)/totale*lung+0.5) 50 s="" : for k=1 to p : s=s+"#" : next 55 print s + " " + dati(i) 60 next #### 127 ################## 585 ############## 430 ####################################### 1256 ##### 148 05 ' Istogramma avente per colonne i 5 dati 127,585,430,1256,148 06 ' Posso modificare lung per avere istogrammi di divesa lunghezza 10 lung=150 : n=5 15 dim dati(n-1) 25 dati(0)=127 : dati(1)=585 : dati(2)=430: dati(3)=1256 : dati(4)=148 30 max=0 : totale = 0 35 for i=0 to n-1 : totale = totale+dati(i) : next 40 for i=0 to n-1 45 p = INT(dati(i)/totale*lung+0.5) 50 s="" : for k=1 to p : s=s+"#" : next 55 print s + " " + dati(i) 60 next ####### 127 ################################## 585 ######################### 430 ########################################################################## 1256 ######### 148 05 'ISTOGRAMMA morti nel 2006 per eta' negli intervalli delimitati da 0, 5, 10,..., 105, 110 10 lung = 400 : n = 22 : DIM x(n-1) 15 DATA 43,5,6,16,23,26,28,37,56,88,141,225,350,518,814,1245,1771,2027,1643,727,195,17 20 for i=0 to n-1: READ x(i) : next 25 tot = 0 : for i=0 to n-1 : totale = totale+x(i) : next 30 for i=0 to n-1 35 p = INT(x(i)/totale*lung+0.5) 40 s="" : for k=1 to p : s=s+"#" : next 45 print s + " " + x(i) 50 next ## 43 5 6 # 16 # 23 # 26 # 28 # 37 ## 56 #### 88 ###### 141 ######### 225 ############## 350 ##################### 518 ################################# 814 ################################################## 1245 ####################################################################### 1771 ################################################################################# 2027 ################################################################## 1643 ############################# 727 ######## 195 # 17-----------------------------------------------
05 ' mettiamo in ordine i seguenti (24) numeri 10 DATA 43, 5, 36, 16, 23,126, 28, 37, 56,88 15 DATA 141,225,350,518, 7,643,727,195,17, 8 20 DATA 1210, 83, 409, 345 25 n = 24 : dim x(n-1) : for i=0 to n-1: READ x(i) : next 30 for i=0 to n-1 : print x(i)+" "; : next : print "" 35 ' man mano se trovo un numero piu' piccolo lo metto in testa 40 for i=0 to n-1 : for j=i to n-1 45 if x(j) < x(i) then gosub 100 50 next : next 55 for i=0 to n-1 : print x(i)+" "; : next 60 end 100 c=x(i) : x(i)=x(j) : x(j)=c : return 110 ' ho scambiato x(i) e x(j) 43 5 36 16 23 126 28 37 56 88 141 225 350 518 7 643 727 195 17 8 1210 83 409 345 5 7 8 16 17 23 28 36 37 43 56 83 88 126 141 195 225 345 350 409 518 643 727 1210-----------------------------------------------
01 ' Trucco per contare dei dati (conto fino a un numero con cui segno la fine; 02 ' qui ho preso 12345; poi prendo come nuovo n il numero a cui sono arrivato) 10 n = 50 : DIM x(n-1) 15 DATA 43,5,6,16,49,26,28,37,56,88,141,225,330,3,32,78,89,123,73,24,12,7,245 20 DATA 12345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 25 for i=0 to n-1: READ x(i) : if x(i)=12345 then k = i 30 next 35 n = k : print n+" dati" 40 for i=0 to n-1 : print x(i)+" "; : next : print "" 23 dati 43 5 6 16 49 26 28 37 56 88 141 225 330 3 32 78 89 123 73 24 12 7 245-----------------------------------------------
05 ' Lancio una moneta equilibrata 200 volte. 06 ' Qual e' la probabilita' di ottenere 100 testa? 07 ' Provo 10 mila, 20 mila e 30 mila volte 10 n=10^4 : x=0 : for i=0 to n 15 testa=0 : for j=0 to 200 20 if RND>0.5 then testa = testa+1 25 next 30 if testa=100 then x=x+1 35 next : print x/n*100 40 for i=0 to n 45 testa=0 : for j=0 to 200 50 if RND>0.5 then testa = testa+1 55 next 60 if testa=100 then x=x+1 65 next : print x/(n+n)*100 70 for i=0 to n 75 testa=0 : for j=0 to 200 80 if RND>0.5 then testa = testa+1 85 next 90 if testa=100 then x=x+1 95 next : print x/(n+n+n)*100 5.88 5.86 5.576666666666666 La probabilità è circa del 5.6%-----------------------------------------------
10 a = 0 : b = 3 15 n = 4321 : s = 0 : h = (b-a)/n 20 for j=1 to n : x = a+(j-1/2)*h : gosub 1000 : s=s+y : next 25 print "n = "; n ; " integrale = "; s*h 30 n = n*2 : s = 0 : h = (b-a)/n 35 for j=1 to n : x = a+(j-1/2)*h : gosub 1000 : s=s+y : next 40 print "n = "; n ; " integrale = "; s*h 45 n = n*2 : s = 0 : h = (b-a)/n 50 for j=1 to n : x = a+(j-1/2)*h : gosub 1000 : s=s+y : next 55 print "n = "; n ; " integrale = "; s*h 60 end 1000 y = ABS(x*(x-2)) : RETURN n = 4321 integrale = 2.666666599728399 n = 8642 integrale = 2.6666666499282217 n = 17284 integrale = 2.666666662482534 L'integrale di |x·(x-2)| tra 0 e 3 è 2.666... = 8/3-----------------------------------------------
05 ' min e max della funzione definita in 1000 10 a = -1 : b = 2 : h=b-a 15 x=a : gosub 1000 : fa=y : x=b : gosub 1000 : fb=y 20 min = fa : max = fb : x1=a : x2=b 25 if fa > fb then min = fb : max = fa : x1=b : x2=a 30 for i=1 to 10^6 : x = RND*h+a : gosub 1000 35 if y < min then gosub 1001 40 if y > max then gosub 1002 45 next 50 print "min="+min+" x="+xmin: print "max="+max+" x="+xmax : END 1000 y = 9*sin(x-1)-x^3 : return 1001 min=y : xmin=x : x1=x : return 1002 max=y : xmax=x : x2=x : return min=-8.852992318037892 x=-0.490509569644928 max=0.9879560565027785 x=1.582704246044159 ripeto min=-8.852992318038371 x=-0.4905104637145996 max=0.9879560564804764 x=1.5827046036720276 cambio a = -0.6 : b = -0.4 min=-8.852992318039329 x=-0.490510094165802 min=-8.852992318039334 x=-0.4905100703239441 cambio a = 1.5 : b = 1.6 max=0.9879560566264289 x=1.5827001154422762 max=0.9879560566264276 x=1.582700127363205 Concludendo tra -1 e 2 9*sin(x-1)-x^3 ha: min = -8.852992318 in -0.4905101 max = 0.9879560566264 in 1.5827001-----------------------------------------------
05 ' I primi numeri di Armstrong: numeri di k cifre uguali alla somma delle cifre elevata alla k 10 n=1 : for a=1 to 9 15 if a=a^n then print a;" "; 20 next 25 n=2 : for a=1 to 9 : for b=0 to 9 30 if a*10+b = a^n+b^n then print a;b;" "; 35 next : next 40 n=3 : for a=1 to 9 : for b=0 to 9 : for c=0 to 9 45 if a*100+b*10+c = a^n+b^n+c^n then print a;b;c;" "; 50 next : next : next 55 n=4: for a=1 to 9: for b=0 to 9: for c=0 to 9: for d=0 to 9 60 if a*1000+b*100+c*10+d = a^n+b^n+c^n+d^n then print a;b;c;d;" "; 65 next : next : next : next 70 n=5: for a=1 to 9: for b=0 to 9: for c=0 to 9: for d=0 to 9: for e=0 to 9 75 if a*10000+b*1000+c*100+d*10+e = a^n+b^n+c^n+d^n+e^n then print a;b;c;d;e;" "; 80 next : next : next : next : next 1 2 3 4 5 6 7 8 9 153 370 371 407 1634 8208 9474 54748 92727 93084 Ad esempio 407 = 4^3+0^3+7^3 = 64+49*7 = 64+343-----------------------------------------------
10 for n=0 to 10
20 x = 1/(2^n) : gosub 100 : print "y(" + x + ") = "+ y
30 next
40 end
100 y = (sin(x)-x)/(x^3) : return
y(1) = -0.1585290151921035
y(0.5) = -0.16459569116637596
y(0.25) = -0.16614660771053202
y(0.125) = -0.16653650676342124
y(0.0625) = -0.16663411761069824
y(0.03125) = -0.16665852883500065
y(0.015625) = -0.16666463217325145
y(0.0078125) = -0.16666615804024332
y(0.00390625) = -0.16666653950960608
y(0.001953125) = -0.16666663487558253
y(0.0009765625) = -0.16666665871161968
Il limite di (sin(x)-x)/(x^3) per x -> 0 è -1/6
10 for n=6 to 16
20 x = 10^n : gosub 100 : print "y("+ x + ") = " + y
30 next
40 end
100 y = (1+x)^(1/5)-x^(1/5) : return
y(1000000) = 0.0000031697851170520153
y(10000000) = 5.023772651213676e-7
y(100000000) = 7.96214294496167e-8
y(1000000000) = 1.261914661654373e-8
y(10000000000) = 1.9999930600533844e-9
y(100000000000) = 3.169873252772959e-10
y(1000000000000) = 5.0249582272954285e-11
y(10000000000000) = 7.958078640513122e-12
y(100000000000000) = 1.2505552149377763e-12
y(1000000000000000) = 2.2737367544323206e-13
y(10000000000000000) = 0
Il limite di 5√(1+x)- 5√x per x -> ∞ è 0