Sei sulla pagina 1di 43

FTP

Modulo A
CLAUDIO GALLICCHIO

?
Secondo Compitino
Sabato 18 Dicembre
dalle ore 11h00 alle ore 13h00
Ricevimento
Mercoledi’ 15 Dicembre
dalle ore 16h30 alle ore 17h30
Programma del Modulo A
La programmazione in JavaScript:

■ Espressioni ■ Costrutti di Controllo


■ Variabili e – Condizionali
– Iteratori
assegnamento
■ Array
■Funzioni ■ Array Associativi
ARRAY ASSOCIATIVI
Array associativi
■ In JavaScript e' possibile usare come indici
di un array anche valori di tipo stringa
– questo tipo di array possono essere usati come
dizionari
Array associativi
Dichiarazione ed inizializzazione esplicita di
un array associativo
var nome_array = {
"s1" : espressione1,
"s2" : espressione2,
//...
"sk" : espressionek
}
Esempio
■ Definizione della data usando un array
associativo
var d1 = {
"giorno": 25,
"mese":"dicembre",
"anno":2017
}
Esempio
■ Definizione di una funzione che verifica se
e' Natale
function Natale(d){
return ((d["giorno"] == 25) && (d["mese"] == "dicembre"));
}

if (Natale(d1))
console.log('BUON NATALE!');
else
console.log('DOVRESTI STUDIARE!');
Esempio
■ Con gli array associativi non e' significativo
l'ordine in cui sono elencati gli elementi
dell'array
var d1 = { var d2 = {
"giorno": 25, "mese": "dicembre",
"mese":"dicembre", "giorno": 25,
"anno":2019 "anno":2019
} }
Esempio
La funzione Natale va bene anche cosi'

function Natale(d){
return ((d["mese"] == "dicembre") && (d["giorno"] == 25));
}
Creazione implicita di un array
associativo
■ Un'alternativa alla creazione esplicita consiste in
assegnamenti successivi
■ L'array associativo viene creato in modo dinamico
var d = {};
d["giorno"] = 25;
d["anno"] = 2019;
d["mese"] = "dicembre";
Accesso agli elementi
■ Per gli array associativi la lunghezza non e'
definita, in quanto gli indici degli elementi
non hanno un valore numerico.
■ Per scandire gli elementi di un array
associativo si usa il costrutto for-in
For-in
■ Sintassi for (id in nome_array_assoc)
istruzione;

– nome_array_assoc e' il nome della variabile il cui valore


e' un array associativo
– id e' un identificatore che assume i valori degli indici
(stringhe) degli elementi dell'array associativo (nell'ordine
in cui sono elencati)
– istruzione e' il corpo del ciclo
– come al solito può essere un blocco { … }
Esempio
■ Scrivere una funzione che visualizzi tutti gli
elementi contenuti in un array associativo
function stampa_associativo(d){
var id;
for (id in d)
console.log(id + " = " + d[id]);
}
Scrivere una funzione con due
parametri: d ed l. Il parametro d e’
un array associativo che
Esercizio rappresenta una data (come negli
esempi precedenti). Il parametro l e'
una stringa che rappresenta una
citta' (es. "Pisa"). La funzione deve
stampare un'intestazione in cui si
indichino il luogo e la data.

Ad esempio
Pisa, 13 Dicembre 2021.
Array o array associativi?
■ Usare array quando gli elementi sono tutti dello stesso
tipo e rappresentano dati semanticamente omogenei
– es. la temperatura di una stanza misurata ad intervalli regolari
di 1 minuto
■ Usare array associativi negli altri casi. Cioe' nei casi di
elementi di tipo diverso o che rappresentino dati
semanticamente eterogenei
– es. una data, altezza e peso di una persona, ecc.
Esempio: anagrafe
■ Supponiamo di voler definire i dati relativi
ad una persona, es. nome, cognome, eta',
sesso.
var p = {"nome":"Mario","cognome":"Rossi","eta":27,
"sesso":"M"};
Esempio: anagrafe
■ Usiamo la data di nascita al posto dell'eta'
var p =
{"nome":"Mario","cognome":"Rossi","sesso":"M",
"nascita":{"giorno":26,"mese": "ottobre","anno":1991}};

Nota: in questo caso l'elemento di indice "nascita" e' un array associativo come
quelli visti in precedenza per rappresentare una data
Esempio: anagrafe
■ Ciascun elemento (entry) di un'anagrafe e'
composta da entita' eterogenee, quindi uso
un array associativo per rappresentare i
dati di una singola persona
Esempio: anagrafe
■ Una collezione di dati anagrafici di piu'
persone contiene elementi omogenei (ogni
elemento si riferisce ad una persona),
quindi posso usare un array (non
associativo)
Esempio: anagrafe
var p1 = {"nome":"Mario","cognome":"Rossi","sesso":"M",
"nascita":{"giorno":26,"mese":"ottobre","anno":1991}};
var p2 = {"nome":"Antonio","cognome":"Bonocore","sesso":"M",
"nascita":{"giorno":12,"mese":"gennaio","anno":1924}};
//...
var anagrafe = new Array();
anagrafe[0] = p1;
anagrafe[1] = p2;
//...
ARRAY
MULTIDIMENSIONALI
matrici
Matrici
Una matrice di dimensione M x N e' una
tabella con M righe ed N colonne in cui ogni
elemento e' un valore numerico

esempio di matrice 3 x 4
Matrici
■ In JavaScript le matrici si possono rappresentare
con array multidimensionali in cui ogni array
interno ha la stessa lunghezza
– Numero di righe -> numero di elementi dell'array
(esterno)
– Numero di colonne -> numero di elementi di ogni array
interno
■ Una matrice si dice quadrata (NxN) quando ha lo
stesso numero di righe e di colonne
Matrici: esempi
Matrice 3 x 4 Matrice 3 x 3
1 2 3 4 1 2 3
2 4 6 8 2 4 6 diagonale principale
4 8 12 16 4 8 12 elementi di indice [i][i] per i = 0,...,N

Matrice 3 x 3 diagonale Matrice 3 x 3 identica Matrice 3 x 3 di permutazione


1 0 0 1 0 0 0 1 0
0 4 0 0 1 0 0 0 1
0 0 12 0 0 1 1 0 0
Esempio
■ Scrivere una funzione con due parametri
numerici M ed N. La funzione deve costruire un
array multidimensionale che rappresenti una
matrice M x N, riempiendo tutti gli elementi
della matrice con valori casuali compresi tra 0 e
1. La funzione deve restituire in output l'array
(multidim.) che rappresenti la matrice.
Esempio function matrice_random(M,N){
// M -> numero righe
// N -> numero colonne
var i,j; //indici
var A = new Array(M);
for (i = 0;i<M;i++){
//creo un nuovo array
//che contenga le N colonne
//della riga i-esima
A[i] = new Array(N);
for (j = 0;j<N;j++)
//genero il j-esimo elemento
//della riga i-esima
A[i][j] = Math.random();
}
return A;
}
Somma tra matrici
■ Date due matrici A e B, entrambe M x N, e'
possibile calcolare la loro somma A+B
■ C = A+B e' una matrice MxN in cui ogni
elemento e' dato dalla somma tra i
corrispondenti elementi nelle matrici A e B
Esempio

10
Somma tra matrici
Scrivere una funzione con due parametri A e
B. Considerando i parametri come matrici
della stessa dimensione, la funzione calcola e
restituisce un array (multidim.) che
rappresenta la matrice A+B.
Somma tra matrici
function somma_matrici(A,B){
var M = A.length;
var N = A[0].length;
var C = new Array(M);
var i,j;
for (i = 0;i<M;i++){
C[i] = new Array(N);
for (j = 0;j<N;j++)
C[i][j] = A[i][j]+B[i][j];
}
return C;
}
Prodotto matrice di una matrice
per uno scalare
Data una matrice A di tipo MxN, ed un valore
numerico a (detto scalare), il risultato del prodotto
𝑎·𝐴
e' una matrice MxN che si ottiene da A,
moltiplicando ogni suo elemento individualmente
per lo scalare a
Esempio
Esercizio
Scrivere una funzione in JavaScript che dati due
parametri a e A calcoli e restituisca la matrice che si
ottiene dal prodotto della matrice A per lo scalare
a. La funzione assuma che a abbia un valore
numerico e che A sia un array multidimensionale
che rappresenta una matrice.
Prodotto tra matrici (righe per
colonne)
■ Date due matrici
– A di tipo M x N, B di tipo N x P
e' possibile calcolare il prodotto di A per B. La matrice
risultante e' di tipo M x P
■ Posto 𝐶 = 𝐴×𝐵, l'elemento di C in riga i e colonna j
e' definito come
𝐶 𝑖, 𝑗 = 𝐴 𝑖, 1 ⋅ 𝐵 1, 𝑗 + 𝐴 𝑖, 2 ⋅ 𝐵 2, 𝑗 + ⋯ + 𝐴 𝑖, 𝑁 ⋅ 𝐵 𝑁, 𝑗
$
=. 𝐴(𝑖, 𝑘) · 𝐵(𝑘, 𝑗)
!"#
Esempio

1x1 + 2x2 + 3x4 = 1+4+12

1 2

x =
1 2 3 17 0
2 -1
2 -1 1 4 5
4 0
2x2 + (-1)x(-1) + 1x0 = 4+1+0
Prodotto tra matrici
Scrivere una funzione con due parametri A e B,
array multidimensionali che rappresentano
matrici. Supponendo che le due matrici siano
compatibili per il prodotto, la funzione calcola e
restituisce in output un array multidimensionale
che rappresenta il prodotto A x B.
function prodotto_matrici(A,B){
// Assumiamo A di tipo M x N
// Assumiamo B di tipo N x P
var M = A.length;
var N = A[0].length;
var P = B[0].length;
// C = A x B e' di tipo M x P
var C = new Array(M);
var i,j,k;
var sommaP; // questa variabile per calcolare la somma dei prodotti
for (i = 0;i<M;i++){
C[i] = new Array(P);
for (j = 0;j<P;j++){
//calcolo il prodotto della riga i per la colonna j
sommaP = 0;
for(k = 0;k<N;k++)
sommaP +=A[i][k]*B[k][j];
C[i][j] = sommaP;
}
}
return C;
}
Esercizi 1) Verificare che il prodotto tra
matrici non e' commutativo (cioe':
supponendo di poter calcolare
sia A*B, sia B*A, verificare che le
matrici che si ottengono nei due
casi possono essere diverse)
2) Verificare cosa accade se si
moltiplica una matrice per la
matrice identica.
2a) …e cosa accade se si moltiplica
una matrice per una matrice di
permutazione?
Esercizi
3) Scrivere una funzione con un parametro A, array
multidimensionale che rappresenta una matrice
quadrata NxN. La funzione deve calcolare e restituire un
array che contiene gli elementi della diagonale
principale di A.
4) Scrivere una funzione con un parametro A, array
multidim. che rappresenta una matrice. La funzione
deve verificare se la matrice e' una matrice identica
(quadrata e con elementi diagonali uguali a 1, ed
extradiagonali uguali a 0). La funzione deve quindi
restituire true o false in base al risultato ottenuto.
Programma del Modulo A
La programmazione in JavaScript:

■ Espressioni ■ Costrutti di Controllo


■ Variabili e – Condizionali
– Iteratori
assegnamento
■ Array
■Funzioni ■ Array Associativi
45

Potrebbero piacerti anche