Esercizi: tabelle

Esercizio 1

Scrivere una funzione trova_tabella(t, v) che restituisce la posizione del valore v nella tabella t sotto forma di una tupla (num_riga, num_colonna), o restituisce None se v non compare in t.  La funzione deve operare correttamente anche con liste frastagliate. Ad esempio, se 

t = [
[ 5 ],
[ 4, 1 ],
[ 1, 2, 4 ]
]

allora trova_tabella(t, 1) restituirà o la tupla (1,1) o la tupla (2,0)

Esercizio 2

Scrivere un test con il framework PyTest per la vostra soluzione all'Esercizio 1.

Esercizio 3

Scrivete un funzione stampa_tabella(t) che stampa su schermo il contenuto della tabella t su varie righe, come una vera  tabella. Ad esempio, se 

t = [
[ 5 ],
[ 4, 1 ],
[ 1, 2, 4 ]
]

mentre il comando print(t) stampa semplicemente [[5], [4, 1], [1, 2, 4]], la chiamata a stampa_tabella(t) stamperà qualcosa di simile:

5
4 1
1 2 4

Esercizio 4

Scrivere una funzione matrice_identica(n) che prende in input un intero positivo n e restituisce una tabella con n righe ed n colonne riempita di zeri tranne che per gli elementi nelle posizioni (0,0), (1,1), etc... che contengono 1 (per chi sa un po' di calcolo matriciale, deve restituire la matrice identica di ordine n). 

Ad esempio, matrice_identica(3) restituirà la lista

[ 
[ 1, 0, 0 ],
[ 0, 1, 0 ],
[ 0, 0, 1 ]
]

Suggerimento: create inizialmente una tabella di dimensione n * n riempita di zeri (potete usare allo scopo la funzione crea_tabella vista nella lezione sulle tabelle), quindi rimpiazzate la diagonale con il valore 1.

Esercizio 5

Scrivere una funzione tavola_pitagorica(n) che prende in input un numero intero positivo n e restituisce un tabella di dimensione n * n tale che, in posizione (i, j) contiene il prodotto i * j.

Ad esempio, tavola_pitagorica(3) restituirà la lista:

[
[ 0, 0, 0 ],
[ 0, 1, 2 ],
[ 0, 2, 4 ]
]

Suggerimento:  create inizialmente una tabella di dimensione n * n riempita di zeri (potete usare allo scopo la funzione crea_tabella vista nella lezione sulle tabelle), quindi rimpiazzate i valori con quelli corretti. Si tratta di una piccolissima modifica della soluzione all'esercizio precedente.

Esercizio 6

Scrivere un test con il framework PyTest per la vostra soluzione all'Esercizio 5.

Esercizio 7

Scrivere una funzione moltiplica_tabella_inplace(t, v) che moltiplica tutti gli elementi di t per v. La funzione non deve restituire nulla ma modificare direttamente la tabella t. Si noti che si tratti della variante sul posto della funzione simile a moltiplica_tabella(t, v) che abbiamo visto nella lezione sulle tabelle.

Esercizio 8

Questo esercizio è simile all'esercizio 7. Fatelo solo se avete trovato difficoltà con l'esercizio 2, altrimenti passate pure al successivo. 

Scrivere una funzione fill_table(t,v) che prende in input una tabella t ed un valore v, e modifica la tabella t sul posto inserendo in ogni cella il valore v. Ad esempio, se t è la tabella [ [1, 2, 3], [4, 5] ], se viene chiamata la funzione fill_table(t, 8), dopo l'esecuzione della funzione la tabella t varrà [ [8, 8, 8], [8 ,8] ].

Esercizio 9

Scrivere una funzione somma_tabelle_inplace(a, b) che prende in input due tabelle a e b (anche frastagliate) e modifica sul posto la tabella a aggiungendo ad ogni elemento il corrispondente elemento di b. Potete supporre che le matrici a e b siano compatibili, ciò abbiano lo stesso numero di riga e le righe della stessa lunghezza. Ad esempio, se

a = [
[ 1, 2, 3 ],
[ 4, 5 ]
]

e

b = [
[ 0, 1, -1 ],
[ 2, 3 ]
]

dopo l'esecuzione di somam_tabelle_inplace(a, b) la lista b sarà invariata ma la lista a conterrà:

[
[ 1, 3, 2 ],
[ 6, 8 ]
]

Esercizio 10

Scrivere una funzione somma_tabelle(a, b) simile a quella dell'esercizio precedente ma che non modifica né ab. La matrice somma viene invece restituita come valore di ritorno della funzione. Potete supporre che le matrici a e b siano compatibili, ciò abbiano lo stesso numero di riga e le righe della stessa lunghezza. 

In linea di principio la funzione dovrebbe operare correttamente anche con tabelle frastagliate, ma se avete difficoltà, provare con tabelle rettangolari, creando prima la tabella della dimensione corretta con crea_tabella e poi rimpiazzando i valori con quelli corretti.

Esercizio 11

Scrivere la funzione tabella_2_stringa(t) che opera come stampa_tabella(t) dell'Esercizio 3, ma che invece di stampare sullo schermo, restituisce una stringa contenente l'output normalmente generato da stampa_tabella(t). Pertanto,  print(tabella_2_stringa(t)) deve generare lo stesso output di  stampa_tabella(t) 

Last modified: Tuesday, 10 December 2024, 9:40 AM