logo sapienza

Informatica, Primo canale (A-D), anno accademico 2019-2020

9 CFU
Statistica, Economia, Finanza e Assicurazioni
Statistica Gestionale
Statistica, Economia e Società
Docente: Paolo Franciosa


Obiettivi Programma Materiale didattico
Orario delle lezioni Ricevimento studenti Modalità d'esame
Diario delle lezioni

Per commenti e segnalazioni, contatta il docente all'indirizzo
paoloQUIUNPUNTOfranciosaQUIUNACHIOCCIOLAuniroma1QUIUNPUNTOit


Obiettivi e contenuti del corso

Vengono illustrati i principi fondamentali del'informatica e della programmazione, utilizzando il linguaggio Python.

Vengono presentati alcuni algoritmi fondamentali per problemi di ordinamento, ricerca e selezione, alcuni problemi numerici, evidenziandone le caratteristiche di efficienza attraverso l'analisi di complessità asintotica.

Vengono descritti i principali metodi di codifica dell'informazione.

Alla fine del corso lo studente sarà in grado di:

torna all'inizio


Programma

Componenti di un sistema di elaborazione: hardware, software, principali unità periferiche. Interazione con un sistema operativo basato su finestre. Il sistema operativo: funzioni principali, gestione dei processi, gestione della memoria, file system. Concetto di cartella, documento, applicazione/programma.

Rappresentazione dell'informazione: codifica di informazioni numeriche - sistemi di numerazione posizionali, codifica binaria, ottale, esadecimale, conversioni di base. Rappresentazione di numeri interi negativi. Rappresentazione in virgola mobile. Codifica di caratteri.

Concetto di algoritmo. Esempi di algoritmi in linguaggio naturale. Generalità sui linguaggi di programmazione, compilatori.

Programmazione in linguaggio Python: uso dell'interprete interattivo, ambienti di programmazione, preparazione di script in linguaggio Python. Costrutti essenziali del linguaggio: variabili, espressioni. Assegnazioni, metodi di input/output, istruzioni di selezione, ed iterazione. Sequenze, slicing di sequenze. Definizione di funzioni, parametri. Accesso a file e scrittura su file. Consultazione della documentazione Python. Principi di programmazione orientata agli oggetti.

Algoritmi fondamentali: Ricerca sequenziale, ricerca dicotomica su un vettore ordinato. Ordinamento: selection sort, merge sort, quick sort, bubble sort. Algoritmo di Euclide per la ricerca del Massimo Comun Divisore (MCD). Algoritmo per la ricerca del k-esimo elemento. Algoritmi di base su matrici.

Introduzione alla complessità computazionale: concetto di complessità di un algoritmo, notazioni asintotiche. Equazioni di ricorrenza e metodi per la loro soluzione. Complessità computazionale degli algoritmi studiati.

torna all'inizio


Materiale didattico

Testi consigliati

Testo di riferimento per il linguaggio Python:
Allen Downey, Pensare in Python - Come pensare da Informatico, seconda edizione
versione pdf (in italiano) disponibile gratuitamente su github secondo la GNU Free Documentation License
versione cartacea (in italiano) edita da Egea.
Per approfondimenti sulla programmazione in Python:
Cay S. Horstmann, Rance D. Necaise
Concetti di informatica e fondamenti di Python
Apogeo, 2019.
Tavola sinottica Python3:
può essere consultata durante la prova di esame di programmazione: versione PDF
Per gli argomenti di algoritmi e complessità:
Materiale di riferimento per la codifica dell'informazione:
Ceri, Mandrioli, Sbattella: Informatica arte e mestiere, McGraw-Hill.
Cap. 11, pagg. 243-255,
o in alternativa
Ceri, Mandrioli, Sbattella: Informatica istituzioni, McGraw-Hill.
Cap. 2 fino a 2.2.2 compreso e ad 2.3 alla fine del capitolo, pagg. 29-43

Strumenti di programmazione

Gli studenti che hanno difficoltà nel reperire il software possono rivolgersi al docente.

Altri link rilevanti

torna all'inizio


Modalità d'esame

L'esame consiste in:

La votazione deriva dalla media dei voti riportati nella prova di programmazione e nella prova scritta, integrata eventualmente dall'esito del colloquio. È necessario riportare la sufficienza sia nella prova di programmazione che nella prova scritta. Il colloquio è richiesto a discrezione del docente.

Esempi di prove di esame

torna all'inizio


Diario delle lezioni a.a. 2019-2020

23 Settembre 2019 25 Settembre 2019 (lab) 25 Settembre 2019
30 Ottobre 2019 2 Ottobre 2019 (lab) 2 Ottobre 2019
7 Ottobre 2019 9 Ottobre 2019 (lab) 9 Ottobre 2019
14 Ottobre 2019 16 Ottobre 2019 (lab) 16 Ottobre 2019
21 Ottobre 2019 23 Ottobre 2019 (lab) 23 Ottobre 2019
28 Ottobre 2019 30 Ottobre 2019 (lab) 30 Ottobre 2019
4 Novembre 2019 6 Novembre 2019 (lab) 6 Novembre 2019
interruzione dell'attività didattica per lo svolgimento delle prove intermedie
18 Novembre 2019 20 Novembre 2019 (lab) 20 Novembre 2019
25 Novembre 2019 27 Novembre 2019 (lab) 27 Novembre 2019
2 Dicembre 2019 4 Dicembre 2019 (lab) 4 Dicembre 2019
9 Dicembre 2019 11 Dicembre 2019 (lab) 11 Dicembre 2019
16 Dicembre 2019 18 Dicembre 2019 (lab) 18 Dicembre 2019

Per commenti e segnalazioni, contatta il docente all'indirizzo
paoloQUIUNPUNTOfranciosaQUIUNACHIOCCIOLAuniroma1QUIUNPUNTOit

torna all'inizio


23 Settembre 2019
Argomenti
  • Introduzione al corso
  • Concetto di problema e di algoritmo
  • Linguaggi ed esecutori, architettura di Von Neumann
  • Esempi di algoritmi
  • Linguaggi di programmazione
    • dall'algoritmo al programma eseguibile
    • compilazione/interpretazione
    • errori sintattici/in esecuzione/semantici
    • il caso del linguaggio Python
Materiale Compilare il questionario con informazioni generali sugli studenti

torna all'elenco delle lezioni

25 Settembre 2019 (lab)
Argomenti

Cenni sulla struttura di un file system gerarchico: dischi logici, files, cartelle

Uso della shell Linux (o Terminale in Mac OS, o Prompt dei comandi in Windows)

Navigazione nel file system: comando ls (o dir in Windows) comando cd. Path assoluti e relativi.

Uso dell'interprete Python 3 in modalità interattiva

Operatori aritmetici, espressioni, variabili, assegnazioni

Esempi di semplici problemi risolubili in modalità interattiva

Funzione print(...)

Esercizi proposti

Verificare, utilizzando l'interprete Python 3, qual è il massimo valore float rappresentabile

Verificare, utilizzando l'interprete Python 3, qual è il massimo valore int rappresentabile

Sperimentare la differenza tra l'operatore / e l'operatore //

Esprimere 8430 secondi in ore, minuti e secondi.

Calcolare quanti secondi sono 3 ore, 5 minuti e 18 secondi

Trovare la lunghezza dell'ipotenusa di un triangolo rettangolo i cui cateti misurano rispettivamente 18.6 metri e 15 metri

torna all'elenco delle lezioni

25 Settembre 2019
Argomenti

Precedenza tra operatori, valutazione di una espressione: albero sintattico

Istruzione di assegnazione, binding nome - valore

Regole per la definizine di identificatori, parole riservate

La funzione type(...)

Funzioni di conversione

Stringhe, operatori su stringhe.

Uso di funzioni matematiche con import math

torna all'elenco delle lezioni

30 Settembre 2019
Argomenti

Script vs. modalità interattiva

Funzione print()

Istruzione if :

Espressioni boolean, le costanti True e False

Indentazione del codice

Istruzione if : else:

Istruzione if : elif: else:

Istruzioni if nidificate

Listati ed esercizi proposti
  1. Dati tre valori float distinti a piacere, che rappresentano i coefficienti di una equazione di secondo grado in una variabile, trovare le soluzioni (se reali) oppure stampare un messaggio (se complesse). Il programma deve funzionare correttamente per qualsiasi terna di interi.
  2. Ordina tre numeri. Dati tre numeri interi distinti stamparli in ordine crescente. Si può decidere di eseguire i confronti e stampare i tre valori nell'ordine richiesto oppure di usare altre tre variabili alle quali assegnare rispettivamente il valore minimo, mediano e massimo e poi stampare le tre variabili.
  3. Verifica se tre interi possono essere le misure dei lati di un triangolo e individua il tipo di triangolo. Per esempio, 3, 2 e 8 non possono esserlo perché ... non si riesce a "chiudere" il triangolo!
  4. Come al punto precedente, ma in caso affermativo decidere se il triangolo è rettangolo, acutangolo od ottusangolo (suggerimento: se vale il teorema di Pitagora è rettangolo, altrimenti ...)
  5. Dati due intervalli I1=[a, b] e I2=[c, d], rappresentati nel programma da quattro variabili int a, b, c, d;, con a<b e c<d, decidere se l'intervallo I1 contiene l'intervallo I2 (come ad esempio nel caso I1=[3, 40] e I2=[12, 25]) oppure I2 contiene I1, oppure non c'è relazione di contenimento (come ad esempio nel caso I1=[11, 56] e I2=[28, 80]. Visualizzare gli intervalli e un messaggio che indica l'eventuale contenimento.

torna all'elenco delle lezioni

2 Ottobre 2019 (lab)
Argomenti

Invocazione di metodi e uso del valore restituito

Generazione di numeri pseudocasuali con random.random() e random.randint(a, b)

Semplici programmi con l'istruzione if

Esercizi proposti

Esercitazione 2

torna all'elenco delle lezioni

2 Ottobre 2019
Argomenti

Espressioni bool: gli operatori logici and. or e not

Variabili bool

Esempi di programmi con istruzioni condizionali

Esempi di programmi con uso di contatori e flag

torna all'elenco delle lezioni

7 Ottobre 2019
Argomenti

Chiamata di funzioni. Significato in una espressione.

Funzioni vuote, funzioni che restituiscono valori. Parametri ed argomenti.

Funzioni di conversione.

La funzione input(...)

Definizione di funzioni con def .... :

Listati ed esercizi proposti
  1. Funzione che restituisce la somma di due numeri, con esempio di uso
  2. Funzione che date le misure di due cateti di un triangolo rettangolo restituisce la misura dell'ipotenusa, con esempio di uso
  3. Funzione che verifica se tre numeri costituiscono una terna pitagorica, cioè se il quadrato di uno dei tre è uguale alla somma dei quadrati degli altri due, con esempi di uso

torna all'elenco delle lezioni

9 Ottobre 2019 (lab)
Argomenti

Esercizi sulla definizione di funzioni

Esercizi proposti

Esercitazione 3

torna all'elenco delle lezioni

9 Ottobre 2019
Argomenti

Stack di attivazione delle funzioni. Variabili locali.

Passaggio dei parametri. Assenza di effetti collaterali su parametri semplici.

Passaggio dei parametri con nome, parametri opzionali

Esempi di definizione di funzioni.

Listati ed esercizi proposti
  1. Funzione che a partire da una durata, espressa cme un numero intero di secondi, restituisce la sua rappresentazione come stringa di caratteri nel formato hh:mm:ss. Ad esempio, partendo da 39744 secondi, che corrisponde a 11 ore, due minuti e 24 secondi, si deve restituire 11:02:24. Analogamente, a partire dal valore 8 secondi, si deve restituire 00:00:08. Notare che il numero di ore, minuti e secondi deve essee sempre espresso da due cifre, eventualmente nella forma 0x oppure 00. Si può assumere che la durata sia sempre inferiore a 100 ore, oppure ammettere che il numero di ore restituite possa anche essere espresso da più di due cifre
  2. Funzione che, dato un importo in euro, espresso con al massimo due decimali, e una percentuale di sconto (ad esempio 25 per indicare uno sconto del 25%), restituisce il valore scontato arrotondato al secondo decimale. Ad esempio, a partire da un importo 100.34 e uno sconto 21 si deve restituire 79.27. Si noti che è disponibile in Python3 la funzione round(...), il comando help(round) fornisce indicazioni sul suo utilizzo.

torna all'elenco delle lezioni

14 Ottobre 2019
Argomenti

L'istruzione di ciclo while

Esercizi sull'uso di cicli e istruzioni condizionali

Listati ed esercizi proposti
  • Scrivere un programma che mostra quante volte bisogna ripiegare in due un foglio dello spessore di 0.1 millimetri affinché si raggiunga lo spessore di 500 mm.. Stampare lo spessore ottenuto dopo ciascun ripiegamento.
  • Modificare il programma precedente, stampando solo il numero di riipegamenti necessari. Deve essere stampato un solo numero. Provare poi a raggiungere la distanza Terra-Luna, circa 380000 km.
  • Modificare il programma precedente, definendo una funzione che prende come parametri lo spessore del foglio e la distanza che si intende raggiungere, e restituisce il numero di ripiegamenti necessari. Scrivere un programma che chiama la funzione appena definita con vari valori dei parametri.
  • Scoprire cosa fa il programma ignoto.py
  • Fare in modo che il programma ignoto.py funzioni anche quando a e/o b contengono valori negativi
  • Scrivere un programma che, dati due numeri naturali a e b, stampi il valore di ab, senza utilizzare l'operatore **
  • Definire una funzione che restituisce il numero di anni necessari per raggiungere un dato importo a partire da un capitale iniziale e un tasso di interesse annuo. Alla fine di ciascun anno gli interessi maturati vengono aggiunti al capitale, in modo che nell'anno successivo anche gli interessi aggiunti al capitale diano luogo ad interessi.
  • Verifica se un naturale è primo. La funzione ha come parametro il numero naturale e restituisce True o False.
  • Stampa il numero di divisori di un naturale (si possono utilizzare alcune delle idee a proposito del test di primalità)
  • Scrivere una funzione che stampi i numeri della successione di Fibonacci minori o uguali a un parametro dato.
  • Scrivere un programma che stampi i primi n elementi della successione di Fibonacci

torna all'elenco delle lezioni

16 Ottobre 2019 (lab)
Argomenti

Esercizi sull'uso di cicli e istruzioni condizionali

Esercizi proposti

Esercitazione 4

torna all'elenco delle lezioni

16 Ottobre 2018
Argomenti

Istruzioni di assegnazione con modifica += -= *= /= %=

Uso di variabili boolean per il controllo di cicli

Semplici programmi con cicli

Istruzione break;

Esempi di programmi con cicli e istruzioni di selezione

Listati ed esercizi proposti
  • Dato un numero naturale n, stampare un quadrato (pieno) di asterischi di lato n. Il quadrato sarà formato da n righe, ciascuna contenente n asterischi.
      **********
      **********
      **********
      **********
      **********
      **********
      **********
      **********
      **********
      **********
    
    
  • Dato un numero naturale n, stampare un quadrato (solo il bordo) di asterischi di lato n. Il quadrato dovrà avere l'aspetto seguente:
      ********** . . . ****
      *                   *
      *                   *
      *                   *
        . . . . . . . .
        
      *                   *
      ********** . . . ****
    
    
  • Dati due numeri naturali n e b, con b < n/2, stampare un quadrato di asterischi di lato n con il bordo di spessore b. Ad esempio, se il valore di b fosse 3, il quadrato dovrebbe avere l'aspetto seguente:
      ********** . . . ****
      ********** . . . ****
      ********** . . . ****
      ***               ***
      ***               ***
      ***               ***
        . . . . . . . .
        
      ***               ***
      ********** . . . ****
      ********** . . . ****
      ********** . . . ****
    
    
  • Dato un numero naturale n, stampare un triangolo rettangolo (pieno) di asterischi di lato n. Il triangolo sarà formato da n righe di lunghezza crescente.
      *
      **
      ***
      ****
       . . .
      
      *********
      **********
    
    
  • Dato un numero naturale n, stampare un triangolo rettangolo (solo il bordo) di asterischi di lato n. Il triangolo dovrà avere l'aspetto seguente:
      *
      **
      * *
      *  *
       . . .
      
      *      *
      *       *
      **********
    
    
  • Stampare la somma dei primi n termini della serie armonica: 1/1 + 1/2 + 1/3 + ... + 1/n
  • Come sopra, mostrando la differenza tra il risultato ottenuto eseguendo la somma in un senso o in senso opposto: 1/1 + 1/2 + 1/3 + ... + 1/n rispetto a 1/n + 1/(n-1) + 1/(n-2) + ... + 1/2 + 1/1

  • Mostrare l'andamento della somma della serie armonica, visualizzandone il valore ogni 100 termini aggiunti fino a un massimo numero di termini immesso da tastiera.
    Mostrare che la differenza tra la somma dei primi n termini e il logaritmo naturale (Math.log) di n, al crescere di n, tende a una costante.
  • Stampa della tavola pitagorica n per n assumendo che che l'input (n) sia compreso nell'intervallo [1,18] (Suggerimento: per ottenere la tabella ben incolonnata usare il cosiddetto "modulo tra stringhe" o "string interpolation")

Somme di quadrati

Scrivere un programma che, dato in input un numero naturale n, stampa tutte le coppie di naturali x, y tali che x^2 + y^2 = z^2, con x, y <= n e z naturale.

Per n = 20 le soluzioni dovrebbero essere le seguenti:

3^2 + 4^2 = 5^2
5^2 + 12^2 = 13^2
6^2 + 8^2 = 10^2
8^2 + 15^2 = 17^2
9^2 + 12^2 = 15^2
12^2 + 16^2 = 20^2
	

Soluzione: cercaTernePitagoriche.py

torna all'elenco delle lezioni

21 Ottobre 2019
Argomenti

Algoritmo per approssimare uno zero di una funzione continua ricercaZero.py

Esempi di programmi con cicli multipli e istruzioni di selezione

Introduzione alle stringhe. Indicizzazione, slicing, funzione len, metodi upper e find, operatore in

Listati ed esercizi proposti
  • funzione che verifica se una stringa è palindroma
  • funzione che conta gli spazi in una stringa
  • funzione che conta le vocali in una stringa
  • funzione che, data una stringa, stampa una parola della stringa su ciascuna riga
  • migliorare la funzione precedente facendo ì che NON vengano stampati a capo multipli in presenza di spazi adiacenti nella stringa

torna all'elenco delle lezioni

23 Ottobre 2019 (laboratorio)
Argomenti

Esercizi su stringhe, cicli.

Istruzione for ... in .... Uso del range(...)

Listati ed esercizi proposti Esercitazione 5

torna all'elenco delle lezioni

23 Ottobre 2019
Argomenti

Eccezioni: l'istruzione raise

Esercizi su cicli, istruzioni condizionali, stringhe

Commento della funzione di ricerca binaria ricercaZero.py

Listati ed esercizi proposti
  • funzione che verifica se un numero è perfetto
  • funzione che restituisce il k-esimo elemento della sequenza di Fibonacci
  • funzione che restituisce il primo elemento della successione di Fibonacci maggiore di un valore dato come parametro
  • funzione che a partire da una stringa di caratteri restituisce la stessa stringa privata degli eventuali spazi iniziali e finali
  • funzione che, a partire da una parola, restituisce la stessa parola privata delle vocali
  • funzione che dato n restituisce il minimo numero primo maggiore di n
  • funzione che dati due naturali a, b restituisce il Massimo Comun Divisore di a e b
  • funzione che dati due naturali a, b restituisce il minimo comune multiplo di a e b

torna all'elenco delle lezioni

28 Ottobre 2019
Argomenti

Liste

Accesso e modifica di elementi di una lista. Slicing di liste

Cicli su liste. Istruzione for ... in ... su liste. Operatore in

I metodi append(...), pop(...) ed extend(...) delle liste

Liste disomogenee. La funzione isinstance(val, tipo)

Listati ed esercizi proposti

Esercizi di base su liste:

  • Leggi da tastiera una sequenza di numeri, memorizzala in una lista, stampa la somma degli elementi sommaSequenzaInLista.py
  • Leggi da tastiera una sequenza di double, memorizzala in una lista, crea un lista che contiene una copia degli elementi della prima lista, ma in ordine inverso copiaOrdineInverso.py
  • Leggi da tastiera una sequenza di interi che rappresentano delle frequenze, memorizzala in una lista, crea una lista che contiene le frequenze cumulate e stampa, in due colonne, la sequenza delle frequenze (sulla sinistra) e la sequenza delle frequenze cumulate (sulla destra) cumula.py


Data in input una sequenza di interi che rappresentano frequenze:

  • stampare la frequenza massima e la frequenza minima;
  • calcolare la lista delle frequenze relative e stamparlo;
  • calcolare la lista delle frequenze relative cumulate e stamparlo;
  • stampare in quale posizione si trovano la frequenza massima e la frequenza minima.

torna all'elenco delle lezioni

30 Ottobre 2019 (laboratorio)
Argomenti

Esercizi su liste.

Listati ed esercizi proposti Esercitazione 6

torna all'elenco delle lezioni

30 Ottobre 2019
Argomenti

Scansione di liste con for elem in lista: oppure con for i in range(len(lista)):

Ricerca sequenziale su liste, ricerca binaria su liste ordinate.

Complessità della ricerca binaria

Listati ed esercizi proposti

torna all'elenco delle lezioni

4 Novembre 2019
Argomenti

Introduzione alla ricorsione.

Esempio di algoritmo ricorsivo per il calcolo del fattoriale fattorialeRicorsivo.py

Esempio di algoritmo oiterativo per il calcolo del fattoriale fattorialeIterativo.py

Il paradigma divide et impera.

Somma di una sequenza applicando il paradigma divide et impera sommaListaRicorsiva.py.

L'algoritmo di Euclide per il calcolo del Massimo Comun Divisore: versione ricorsiva MCDEuclideRicorsivo.py

L'algoritmo di Euclide per il calcolo del Massimo Comun Divisore: versione iterativa MCDEuclideIterativo.py

Complessità computazionale dell'algoritmo MCD di Euclide

Riferimenti al testo Cormen, Leiserson, Rivest
Listati proposti
  • scrivere un metodo ricorsivo che dato un array di numeri restituisce il massimo elemento dell'array
  • scrivere un metodo ricorsivo che dato un array di numeri restituisce il numero di elementi negativi contenuti nell'array

torna all'elenco delle lezioni

6 Novembre 2019 (laboratorio)
Argomenti

Esercizi su liste.

Listati ed esercizi proposti Esercitazione 7

torna all'elenco delle lezioni

6 Novembre 2019
Argomenti

Passaggio di parametri riferimento: il caso delle liste.
Effetti collaterali.

Esempi di programmi che modificano liste.

Funzioni che restituiscono liste. Assegnazione tra riferimenti.

Riferimenti al testo Cormen, Leiserson, Rivest
Listati proposti

torna all'elenco delle lezioni

18 Novembre 2019
Argomenti

Algoritmo di ordinamento insertion sort insertionSort.py

Listati ed esercizi proposti
  • Creare una lista contenente 20 interi random in [0, 100) e stampare il numero di elementi pari, il numero di elementi maggiori di 70, media e varianza degli elementi;
  • leggere da tastiera una sequenza di interi (la lunghezza è data anch'essa da tastiera), memorizzala in una lista, verifica se la sequenza è in ordine non decrescente;
  • modificare il programma precedente per verificare se la sequenza è crescente, non decrescente, non crescente o decrescente
  • data una lista di interi, creare un altra lista contenente solo gli elementi di posizione pari della prima lista;
  • data una lista di interi, creare un altra lista contenente solo gli elementi di posizione dispari della prima lista;
  • data una lista di interi, creare un altra lista contenente solo gli elementi pari (deve essere pari il valore, indipendentemente dalla posizione) della prima lista;
  • date due liste di interi A e B, con len(A) ≥ len(B), verificare se la sequenza B compare in A, e in caso positivo indicare in quale posizione. Ad esempio, la sequenza B = 3, 2, 10 compare nella sequenza A = 12, 2, 3, 2, 8, 3, 2, 10, 4, 2 in posizione 5

torna all'elenco delle lezioni

20 Novembre 2019 (laboratorio)
Argomenti

Esercizi su liste bidimensionali.

Listati ed esercizi proposti Esercitazione 8

torna all'elenco delle lezioni

20 Novembre 2019
Argomenti

Esercizi di programmazione su liste bidimensionali

Listati ed esercizi proposti
  • scrivere una funzione simmetrica(m) che:
    • riceve una matrice come parametro
    • verifica che sia quadrata (altrimenti solleva ValueError)
    • restituisce True se la matrice è simmetrica (rispetto alla diagonale principale), False altrimenti
  • scrivere una funzione trasposta(m) che, data una matrice m di r righe e c colonne costruisce un'altra matrice e la restituisce. La matrice restituita deve essere la trasposta della matrice m, quindi avrà c righe e r colonne
  • scrivere una funzione che verifica (restituisce True o False) se una matrice quadrata è triangolare SUPERIORE (tutti gli elementi SOTTO la diagonale principale sono 0)
    5  2  7  0  3  5
    0  4  7  0  2  2
    0  0  6  8  4  2
    0  0  0  4  3  1
    0  0  0  0  7  3
    0  0  0  0  0  1
    
  • scrivere una funzione che verifica (restituisce True o False) se una matrice quadrata è una matrice diagonale (tutti gli elementi tranne la diagonale principale sono 0)
    6  0  0  0
    0  4  0  0
    0  0  7  0
    0  0  0  0
    

torna all'elenco delle lezioni

25 Novembre 2019
Argomenti

Algoritmo di ordinamento a bolle - Bubble Sort (codice Bubble sort semplice) e suoi miglioramenti (codice Bubble sort migliorato)

Analisi della prestazioni del bubble sort

Link utili Animazione di algoritmi di ordinamento https://www.toptal.com/developers/sorting-algorithms

torna all'elenco delle lezioni

27 Novembre 2019 (laboratorio)
Argomenti

Esercizi su liste e liste bidimensionali.

Listati ed esercizi proposti Esercitazione 9

torna all'elenco delle lezioni

27 Novembre 2019
Argomenti

Algoritmo di ordinamento per fusione - Merge Sort (codice merge sort)

Analisi della prestazioni del merge sort

Link utili Animazione di algoritmi di ordinamento https://www.toptal.com/developers/sorting-algorithms

torna all'elenco delle lezioni

2 Dicembre 2019
Argomenti

Introduzione alla complessità computazionale

Le notazioni asintotiche O(), Ω(), Θ()

Esempi di classi di funzioni

Uso delle notazioni asintotiche per esprimere limitazioni superiori e inferiori della complessità di algoritmi

Complessità computazionale di semplici algoritmi: selection sort, bubble sort, ricerca sequenziale e ricerca binaria

Riferimenti al testo

dispense del corso, oppure Cormen, Leiserson, Rivest

torna all'elenco delle lezioni

4 Dicembre 2019 (laboratorio)
Argomenti

Esercizi su stringhe di caratteri e liste.

Listati ed esercizi proposti Esercitazione 10

torna all'elenco delle lezioni

4 Dicembre 2019
Argomenti

Dimostrazione della complessità minima possibile (lower bound) per il problema dell'ordinamento basato su confronti

Algoritmo di ordinamento Quick Sort (codice quick sort)

Analisi della prestazioni del quick sort

Riferimenti al testo

dispense del corso, oppure Cormen, Leiserson, Rivest

Link utili Aminazione di algoritmi di ordinamento https://www.toptal.com/developers/sorting-algorithms

torna all'elenco delle lezioni

9 dicembre 2019
Argomenti

Analisi della complessità computazionale di algoritmi ricorsivi.

  • Equazioni di ricorrenza.
  • Soluzione di equazioni di ricorrenza attraverso il teorema principale (senza dimostrazione).
  • Esempi di applicazione del teorema principale: ricerca binaria, merge sort, quick sort.

Complessità computazionale del quick sort nel caso migliore e nel caso peggiore

Riferimenti al testo

dispense del corso, oppure Cormen, Leiserson, Rivest

torna all'elenco delle lezioni

11 Dicembre 2019 (laboratorio)
Argomenti

Esercizi di programmazione.

torna all'elenco delle lezioni

11 Dicembre 2019
Argomenti

Algoritmo per il calcolo del k-esimo elemento: selection.py e sua complessità computazionale

Analisi della prestazioni dell'algoritmo pe ril k-esimo elemento

Codifica dell'informazione.

  • Generalità sulla notazione posizionale per numeri naturali, interpretazione di numeri espressi in base b
  • conversione da base b a base 10 e da base 10 a base 2
  • codifica esadecimale, conversione dalla base 2 alla base 16
  • codifica di caratteri: codice ASCII, codice Unicode, rappresentazione UTF-8

Riferimenti al testo

dispense del corso, oppure Cormen, Leiserson, Rivest

torna all'elenco delle lezioni

16 dicembre 2019
Argomenti

Lettura e scrittura di file di testo.

Dizionari.

Listati ed esercizi proposti
  1. Funzione che a partire dal nome di un file, che si assume present enella stessa cartella del sorgente Python, legge le righe contenute nel file e le stampa stampa file di testo, con esempio di uso
  2. Funzione che a partire da una stringa contenente parole separate da spazi, restituisce un dizionario con le parole come chiavi e le rispettive frequenze come valori frequenzeDizionario.py
  3. Funzione che a partire da un dizionario che contiene frequenze assolute delle chiavi, restituisce il dizionario contenente le frequenze relative delle chiavi frequenzeRelative.py

torna all'elenco delle lezioni

18 Dicembre 2019 (laboratorio)
Argomenti

Simulazione della prova d'esame di programmazione in Python.
Materiale disponibile in questo link sarà attivo dal 20 dicembre 2019.
È ammesso l'uso della tavola sinottica Python3, disponibile in versione PDF

torna all'elenco delle lezioni

18 Dicembre 2019
Argomenti

Simulazione della prova d'esame di teoria.
Materiale disponibile in questo link sarà attivo dal 20 dicembre 2019.

Riferimenti al testo

dispense del corso, oppure Cormen, Leiserson, Rivest

torna all'elenco delle lezioni