Fondamenti Teorici e Programmazione Modulo A
Transcript
Fondamenti Teorici e Programmazione Modulo A
Le funzioni in JavaScript Funzioni Funzioni predefinite della libreria matematica Funzioni disponibili: Math.sqrt(x) radice quadrata Math.log(x) logaritmo naturale in base e di x Math.abs(x) valore assoluto di x Math.ceil(x) arrotonda all’intero più piccolo ≥ x Math.floor(x) arrotonda all’intero più grande ≤ x Math.round(x) arrotonda all’intero più vicino ad x Math.pow(x,y) xy Math.random() restituisce un numero casuale n tale che 0 < n < 1 Esempio: print((Math.floor(1345/10)%10); print (Math.floor(1345/100)%10); E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 1 Le funzioni in JavaScript Funzioni Visibilità delle variabili: globali e locali Riconsideriamo la funzione succ definita precedentemente var y=10, z; function succ (x) {x=x+1; return x;} z = succ(y); print(z); I Le variabili definite nel programma principale e sono visibili nella funzione e si dicono globali. I Le variabili definite nella funzione si dicono locali. I Le variabili locali della funzione non sono visibili nel programma principale. E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 2 Le funzioni in JavaScript Funzioni Visibilità delle variabili - continua I essendo y e z visibili nella funzione, potremmo anche scrivere: var y=10, z; function foo (x) {x=y+1; return x;} z = foo(y); print(z); I utilizzando il valore di y per assegnare un nuovo valore a x. ma le variabili globali possono anche essere modificate. In questo caso y è modificata, e x diventa superflua. var y=10, z; function foo (x) {y=y+1; return y;} z = succ(y); print(z); Questo uso delle variabili globali è sconsigliato perchè foriero di errori. Deve essere utilizzato solo quando è strettamente necessario, in un particolare tipo di funzioni (che chiamiamo procedure) che vedremo più avanti. E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 3 Le funzioni in JavaScript Funzioni I blocchi in JavaScript I blocchi in JavaScript sono diversi dai blocchi in altri linguaggi di programmazione (Java, C ecc.). In realtà sono solo delle parentesi. var z, y=4; if (y>0) {var x=24; print(x+y);} else {var w=2; z=y;} print(z); print(x); print(w); Ad esempio cosa stampa il programma precedente? E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 4 Le funzioni in JavaScript Funzioni I blocchi in JavaScript - segue Il programma precedente è equivalente al seguente programma: var z,x,w,y=4; if (y>0) { x=24; print(x+y);} else { w=2; z=y;} print(z); print(x); print(w); La situazione è ancora più complessa se non si dichiarano le variabili. Per questo motivo si richiede di definire tutte le variabili globali nella porzione iniziale del programma principale, evitando di definire variabili nei blocchi, interni. E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 5 Le funzioni in JavaScript Funzioni Visibilità delle variabili - segue Dalle considerazioni precedenti sulla visibilità delle variabili nei blocchi deriva che tutte le variabili definite nel programma principale sono visibili nella funzione, anche quelle definite dopo la definizione della funzione, come y, nel seguente esempio: var z; function foo (x) {y=x+1; return x;} var y=10; z = foo(y); print(z); Si sconsiglia fortemente l’uso di queste funzionalità del linguaggio e si richiede: I I E. Occhiuto di definire tutte le variabili globali nella porzione iniziale del programma principale e tutte le variabili locali di una funzione nella porzione iniziale del corpo della funzione – Fondamenti Teorici e Programmazione- 437AA – pag. 6 Le funzioni in JavaScript Istruzioni iterative Iterazione determinata e indeterminata I Le istruzioni iterative permettono di ripetere determinate azioni più volte: I I E. Occhiuto un numero di volte fissato =⇒ iterazione determinata Esempio: fai un giro del parco di corsa per 10 volte finchè una condizione rimane vera =⇒ iterazione indeterminata Esempio: finche’ non sei sazio prendi una ciliegia dal piatto e mangiala – Fondamenti Teorici e Programmazione- 437AA – pag. 7 Le funzioni in JavaScript Istruzioni iterative Istruzione while Permette di realizzare l’iterazione in JavaScript. Sintassi: while (espressione) istruzione I espressione è la guardia del ciclo I istruzione è il corpo del ciclo (può essere un blocco) Semantica: 1. viene valutata l’espressione 2. se è vera si esegue istruzione e si torna ad eseguire l’intero while 3. se è falsa si termina l’esecuzione del while I Nota: se espressione è falsa all’inizio, il corpo non viene mai eseguito. E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 8 Le funzioni in JavaScript Istruzioni iterative Iterazione determinata Esempio: Leggere 10 interi, calcolarne la somma e stamparla. I Si utilizza un contatore per contare il numero di interi letti. var conta=0, dato, somma=0; while (conta < 10) { dato=asknum(); somma = somma + dato; conta = conta + 1; } print("La somma e’ "+ somma); E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 9 Le funzioni in JavaScript Istruzioni iterative Esempio: Leggere un intero N seguito da N interi e calcolare la somma di questi ultimi. I Simile al precedente: il numero di ripetizioni necessarie non è noto al momento della scrittura del programma ma lo è al momento dell’esecuzione del ciclo. var lung=asknum(), conta=0, dato, somma=0; while (conta < lung) { dato=asknum(); somma = somma + dato; conta = conta + 1; } print("La somma e’ "+ somma); E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 10 Le funzioni in JavaScript Istruzioni iterative Esempio: Leggere 10 interi positivi e stamparne il massimo. I Si utilizza un massimo corrente con il quale si confronta ciascun numero letto. var conta, dato, massimo; massimo = 0; conta = 0; while (conta < 10) { dato=asknum(); if (dato > massimo) massimo = dato; conta = conta + 1; } print("Il massimo e’ "+massimo); Esercizio Leggere 10 interi arbitrari e stamparne il massimo. E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 11 Le funzioni in JavaScript Istruzioni iterative Istruzione for I I cicli visti fino ad ora hanno queste caratteristiche comuni: I I I I utilizzano una variabile di controllo la guardia verifica se la variabile di controllo ha raggiunto un limite prefissato ad ogni iterazione si esegue un’azione al termine di ogni iterazione viene incrementato (decrementato) il valore della variabile di controllo Esempio: Stampare i numeri pari da 0 a N. i = 0; /* Inizializzazione della var. di controllo */ while (i <= N) { /* guardia */ print(i); /* Azione da ripetere */ i=i+2; /* Incremento var. di controllo */ } I L’istruzione for permette di gestire direttamente questi aspetti: for (i = 0; i <= N; i=i+2) print(i); E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 12 Le funzioni in JavaScript Istruzioni iterative Sintassi: for (istr-1; espr-2; istr-3) istruzione I istr-1 serve a inizializzare la variabile di controllo I espr-2 è la verifica di fine ciclo I istr-3 serve a incrementare la variabile di controllo alla fine del corpo del ciclo I istruzione è il corpo del ciclo Semantica: l’istruzione for precedente è equivalente a istr-1; while (espr-2) { istruzione istr-3 } E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 13 Le funzioni in JavaScript I I Esempio: for (i = 1; i <= 10; i=i+1) =⇒ i: 1, 2, 3, . . . , 10 for (i = 10; i >= 1; i=i-1) =⇒ i: 10, 9, 8, . . . , 2, 1 for (i = -4; i <= 4; i = i+2) =⇒ i: -4, -2, 0, 2, 4 for (i = 0; i >= -10; i = i-3) =⇒ i: 0, -3, -6, -9 In realtà, la sintassi del for è for (espr-1; espr-2; espr-3) istruzione dove espr-1, espr-2 e espr-3 sono delle espressioni qualsiasi (in JavaScript anche l’assegnamento è un’espressione . . . ). È buona prassi: I I I usare ciascuna espr-i in base al significato descritto prima non modificare la variabile di controllo nel corpo del ciclo Ciascuna delle tre espr-i può anche mancare: I I I Istruzioni iterative i “;” vanno messi lo stesso se manca espr-2 viene assunto il valore vero Se manca una delle tre espr-i è meglio usare un’istruzione while E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 14 Le funzioni in JavaScript Istruzioni iterative L’esempio del massimo di 10 interi positivi si puo‘ riscrivere anche cosi‘ Esempio: Leggere 10 interi positivi e stamparne il massimo. var conta, dato, massimo=0; for (conta=0; conta<10; conta=conta+1) { dato=asknum(); if (dato > massimo) massimo = dato; } print("Il massimo e‘ "+massimo); E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 15 Le funzioni in JavaScript Istruzioni iterative Precisazione a proposito delle funzioni e degli esercizi proposti Esempio: Si scriva una funzione in JavaScript che dato un parametro k legge in input kvalori interi e calcola la media dei valori letti. Si scriva un programma che verifica il corretto funzionamento della funzione. Il programma deve leggere in input un valore k, invocare la funzione e stampare il risultato. var x=asknum(); function max(k) { var conta, dato, massimo=asknum(); for (conta=1; conta< k; conta++) { dato=asknum(); if (dato > massimo) massimo = dato; } return massimo;} //fine function max print("Il massimo e‘ "+max(x)); E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 16 Le funzioni in JavaScript Istruzioni iterative Iterazione indeterminata I In alcuni casi il numero di iterazioni da effettuare non è noto prima di iniziare il ciclo, perché dipende dal verificarsi di una condizione. Esempio: Leggere una sequenza di interi che termina con 0 e calcolarne la somma. Input: n1 , . . . , nk , 0 (con ni 6= 0) k P ni Output: i=1 var dato, somma = 0; dato=asknum(); while (dato != 0) { somma = somma + dato; dato=asknum(); } print(somma); Questo tipo di iterazioni e‘ meglio espressa usando il while piuttosto che il for, anche se i due costrutti sono equivalenti E. Occhiuto – Fondamenti Teorici e Programmazione- 437AA – pag. 17