Sei sulla pagina 1di 47

03MNO Algoritmi e Programmazione

Corso di Laurea in Ingegneria Informatica


Obiettivi
Corso fondante del CdL Ing. Informatica,
prosegue e approfondisce Informatica

Algoritmi e strutture dati:


 analisi di complessità
 strutture dati e algoritmi fondamentali
Problem
-solving
Programmazione avanzata in C:
 ricorsione
 puntatori e strutture dinamiche
 modularità

A.A. 2019/20 Introduzione al corso 2


Problem-solving:
 sapere (concetti, modelli, linguaggio, etc)
 progettare (formalizzazione, scelte)
 saper fare (programmazione)
Difficoltà:
 oggettiva: è un’attività creativa e
progettuale
 soggettiva:
 disuniformità di preparazione pregressa
 disuniformità di capacità/applicazione
 tempi diversi di apprendimento
A.A. 2019/20 Introduzione al corso 3
Obiettivi in dettaglio
Programmi modulari:
 scomposizione in sotto-problemi
 uso di funzioni
 strutture dati modulari
 in pratica: norme di buona progettazione
(«non fare i praticoni»)
Puntatori e allocazione dinamica:
 C avanzato (puntatori)
 possibili strutture dati dinamiche, per
collezioni di dati

A.A. 2019/20 Introduzione al corso 4


Obiettivi in dettaglio
Algoritmi ricorsivi:
 estendono i limiti di costrutti condizionali e
iterativi
 difficili perché richiedono formulazione e
progettazione di tipo «divide et impera»
 presentati con modelli dal calcolo
combinatorio
Algoritmi classici: come sono stati risolti in
letteratura (in modo efficiente) problemi su:
 ordinamento di vettori, collezioni di dati e
code, tabelle di simboli, grafi.
A.A. 2019/20 Introduzione al corso 5
SAPERE: non basta appiccicare malamente
qualche concetto, occorre capirli per :
 applicarli (ai problemi di programmazione,
agli esercizi dello scritto di teoria)
 esprimerli CORRETTAMENTE (all’esame
orale)

A.A. 2019/20 Introduzione al corso 6


DAL SAPERE AL SAPER FARE: per risolvere
i problemi di programmazione:
 atteggiamento errato: illudersi di risolvere
un problema come se si ponesse per la
prima volta, senza conoscere quanto già
scoperto
 atteggiamento corretto: conoscere e capire
la teoria sottostante per poi applicarla.

A.A. 2019/20 Introduzione al corso 7


SAPER FARE BENE: non basta che il
programma «funzioni»:
 deve essere efficiente, leggibile,
manutenibile, affidabile etc etc

A.A. 2019/20 Introduzione al corso 8


coordinatiCamurati Cabodi
Cumani
II
 Classi di problemi
 Raccordo I anno
II
 Analisi di complessità
 Problem-solving
elementare
III  Ordinamenti semplici
 Matematica discreta
IV
 Puntatori
V  Allocazione dinamica
 Strutture dati dinamiche
VI  Ricorsione e ricorsive
 Ordinamenti avanzati
VII  Problem-solving
ricorsivo
VIII
 Modularità
IX  Tipi di dato astratto
(ADT)
X  ADT «classici» (liste,
pile, code)
XI  Strutture dati e
algoritmi «classici»
XII (alberi, tabelle, grafi)
XIII  Problem-solving
avanzato
XIV
A.A. 2019/20 Introduzione al corso 9
A cosa serve il corso?
 Corsi successivi (L, LM)
 Tirocini

 Lavoro

 Ambiti di uso degli algoritmi e delle strutture dati:


tutta l’Informatica/Data Science
 Ambiti di uso del C:
 Sistemi Operativi
 Sistemi Embedded
 Internet of Things

A.A. 2019/20 Introduzione al corso 10


A cosa serve il corso?

Preparing for Google


Technical Internship
Interviews
https://www.youtube.com/watch?v=ko-KkSmp-Lk#action=share

A.A. 2019/20 Introduzione al corso 11


Statistiche superi
2017/18 2018/19
Nuovi frequentanti 475 420
>= 1 volta mai >= 1 volta mai
prenotati 401 74 332 88
prenotati && presentati 359 42 293 39
prenotati && presentati
305 54 246 47
&& relazione
superi <30/09 254 (53,5%) 204 (48,6%)

Tasso di supero rispetto a chi ha consegnato


almeno una volta la relazione:
 2017/18: 254/305 = 83,3%
 2018/19: 204/246 = 82,9%
A.A. 2019/20 Introduzione al corso 12
Cosa ci dicono le statistiche?
Perché il 46,5% dei nuovi frequentanti dell’A.A.
2018/19 non ha superato ancora l’esame?
 Lato corso: difficile e impegnativo

 Lato studente:
 cattiva o mancata pianificazione delle proprie attività (“carico
tutto quanto possibile e poi non seguo”, “sono sotto i 28 cfu
e non do la precedenza agli esami in arretrato”, etc)
 a metà novembre lascio perdere tutto invece di impegnarmi
di più
 se mi metto in gioco, seguo le lezioni, svolgo i laboratori,

studio, passo l’esame con il voto che mi merito per capacità


e per applicazione.
A.A. 2019/20 Introduzione al corso 13
Cosa serve per il corso?

 Prerequisito: conoscenza base del C (Informatica)


 imparato magari poco e male, in tempi lontani,
dimenticato
 2/3 settimane di ripasso
 Capacità logiche: comprensione del problema,
identificazione di una strategia risolutiva
 Capacità pratiche: trasformare la strategia
risolutiva in un programma efficiente e
funzionante

A.A. 2019/20 Introduzione al corso 14


 Impegno personale continuo sul semestre:
 seguire le lezioni per capire
 programmare implementando i concetti capiti (richiede
tempo!)
 frequentare i laboratori e svolgere gli esercizi
 non rinunciare a metà corso, dicendo «lo lascio come
ultimo esame»
 non basta «svegliarsi» 2 settimane prima dell’appello e
poi stupirsi se non lo si passa!

A.A. 2019/20 Introduzione al corso 15


 NO: studio solo teorico senza provare a
programmare
 NO: limitarsi alla comprensione di programmi altrui

 NO: approccio puramente «smanettone»: «non so


cosa ho fatto, ma funziona»
 NO: essere fuori dal contesto del corso: seguire il
percorso proposto con le proprie tempistiche

A.A. 2019/20 Introduzione al corso 16


 SI’: mettere in pratica le nozioni apprese
 SI’: cimentarsi con un problema senza cercare di
adattare soluzioni altrui («scopiazzare» in Rete)
 SI’: applicare una metodologia di programmazione

 SI’: frequentare i laboratori e svolgere gli esercizi

A.A. 2019/20 Introduzione al corso 17


 SI’: attenzione, concentrazione, precisione (anche i
dettagli contano!)
 SI’: atteggiamento attivo/responsabile (il
programma fa tutto e solo quello che il
programmatore scrive)
 SI’: uso intelligente degli strumenti disponibili
(matriale, rete, compilatore, debugger, etc.)
 SI’: tempo dedicato: studio e pratica

 SI’: preparazione adeguata in vista dell’esame


A.A. 2019/20 Introduzione al corso 18
Organizzazione

Corso del I semestre del II anno

Organizzazione:
 Lezioni: 6 ore/settimana

 Esercitazioni: 1.5 ore/settimana

 Laboratori assistiti: 1.5 ore/settimana per


squadra (richiesto lavoro personale preliminare)

A.A. 2019/20 Introduzione al corso 19


Orario: I corso

Lezioni/esercitazioni:
 lunedì 08.30-11.30 aula 29B

 martedì 08.30-10.00 aula 29B

 giovedì 11.30-14.30 aula 3I

Laboratorio:
 mercoledì 08.30-10.00 (sq. 1, LAIB5)

 mercoledì 10.00-11.30 (sq. 2, LAIB5)

 i laboratori iniziano il 02/10/2019

A.A. 2019/20 Introduzione al corso 20


Orario: II corso

Lezioni/esercitazioni:
 martedì 10.00-13.00 aula 14

 giovedì 08.30-11.30 aula 14

 venerdì 08.30-10.00 aula 2M

Laboratorio:
 venerdì 11.30-13.00 (sq. 1, LAIB4)

 venerdì 13.00-14.30 (sq. 2, LAIB4)

 i laboratori iniziano il 04/10/2019

A.A. 2019/20 Introduzione al corso 21


Orario: III corso

Lezioni/esercitazioni:
 lunedì 14.30-17.30 aula 14

 mercoledì 10.00-13.00 aula 10

 giovedì 17.30-19.00 aula 1I

Laboratorio:
 giovedì 08.30-10.00 (sq. 1, LAIB4)

 giovedì 10.00-11.30 (sq. 2, LAIB4)

 i laboratori iniziano il 03/10/2019

A.A. 2019/20 Introduzione al corso 22


Libri fortemente consigliati
Problem-solving elementare in C:

 G. Cabodi, P. Camurati,
P. Pasini, D. Patti,
D. Vendraminetto:
Dal problema a
programma:
introduzione al
problem-solving in
linguaggio C
II ed., Apogeo, 2016

A.A. 2019/20 Introduzione al corso 23


Ricorsione e problem-solving

 G. Cabodi, P. Camurati,
P. Pasini, D. Patti,
D. Vendraminetto:
Ricorsione e problem-
solving: strategie
algoritmiche in
linguaggio C,
Apogeo, 2015

A.A. 2019/20 Introduzione al corso 24


Puntatori, strutture
dinamiche, modularità
 G. Cabodi, P. Camurati,
P. Pasini, D. Patti,
D. Vendraminetto:
Puntatori e strutture
dati dinamiche:
allocazione della
memoria e modularità
in linguaggio C
Apogeo, 2016

A.A. 2019/20 Introduzione al corso 25


Esercizi di teoria con richiami

 P. Camurati, S.
Quer: Algoritmi e
Programmazione:
richiami di teoria
con esercizi svolti
IV edizione ,
CLUT, 2017

A.A. 2019/20 Introduzione al corso 26


Esercizi svolti e commentati

 G. Cabodi, P. Camurati,
P. Pasini, D. Patti,
D. Vendraminetto:
Algoritmi e
programmazione in
pratica: da specifiche a
codice C
Apogeo, 2018

A.A. 2019/20 Introduzione al corso 27


Altri testi / materiale
 R. Sedgewick,
Algoritmi in C (con
MyLab – extext), IV
edizione, Pearson,
2015
 P.J. Deitel, H.M.
Deitel Il linguaggio C.
Fondamenti e
tecniche di
Programmazione
8/Ed. Pearson
A.A. 2019/20 Introduzione al corso 28
 T.H. Cormen, C.E.
Leiserson, R.L. Rivest,
Introduzione agli
algoritmi e strutture
dati, seconda
edizione, McGraw Hill
2005
 R. Sedgewick,
Algorithms in C, 3rd
edition, Part 5: Graph
Algorithms, Addison-
Wesley, 2002
A.A. 2019/20 Introduzione al corso 29
 P. Crescenzi, G. Gambosi,
R. Grossi, Strutture di
dati e algoritmi, Pearson
Addison-Wesley 2006
 A. Bertossi, A. Montresor,
Algoritmi e strutture di
dati, III ediz., Città Studi
edizioni, 2014
 R. Sedgewick, K. Wayne,
Algorithms Part I & II,
www.coursera.org
A.A. 2019/20 Introduzione al corso 30
Lucidi del corso +
 Classi di problemi
 Analisi di  Raccordo I anno
complessità  Problem-solving
 Ordinamenti elementare
semplici
 Matematica
discreta  Puntatori
 Allocazione dinamica
 Ricorsione  Strutture dati
 Ordinamenti dinamiche e ricorsive
avanzati
 Problem-solving
ricorsivo
 Modularità
 Tipi di dato astratto
(ADT)
 ADT «classici»
 Strutture dati e
algoritmi «classici»
 Problem-solving
avanzato

A.A. 2019/20 Introduzione al corso 31


Materiale
Attraverso il portale della didattica verrà reso
disponibile il seguente materiale relativo al
corso:
 lezioni videoregistrate

 materiale usato in lezioni, esercitazioni e


laboratori
 regole d’esame

 programma del corso

Sul portale compariranno anche orari, temi


d’esame, risultati, avvisi.
A.A. 2019/20 Introduzione al corso 32
Modalità d’esame

Appelli : febbraio (2 appelli), luglio (1 appello)


settembre (1 appello).

L’esame si compone di:


 una prova scritta:
 con esercizi/domande sugli argomenti teorici
 soluzione di un problema con un programma C
 un esame orale

A.A. 2019/20 Introduzione al corso 33


Prova scritta

 Durata: max 2h30


 Teoria:
 max 50min
 esercizi e risposte a domande teoriche
 punteggio: massimo 12 punti

A.A. 2019/20 Introduzione al corso 34


 Programmazione C in 2 modalità:
 orientata al progetto: progettazione e
realizzazione di un programma in grado di
risolvere un problema. Punteggio: massimo 18
punti
 orientata alla padronanza del C avanzato
(puntatori, allocazione dinamica, ricorsione),
delle strutture dati e degli algoritmi
fondamentali. Punteggio: massimo 12 punti.
NB: la preparazione richiesta è identica.

A.A. 2019/20 Introduzione al corso 35


 Materiale consultabile:
 Manuale di riferimento di C: Kernighan-Ritchie,
Deitel & Deitel, o simili
 NON è possibile consultare altri testi,
appunti, dispense, etc.
 NON è possibile utilizzare supporti di tipo
elettronico (cellulari, palmari, portatili, etc.)

A.A. 2019/20
2009/10 Introduzione al corso 36
Correzione

Ciascuno studente è tenuto a :


 produrre (ad esempio tramite carta
carbone, fotocamera o cellulare!) una copia
del programma
 verificare la correttezza e la funzionalità del
programma

A.A. 2019/20 Introduzione al corso 37


 Caricare sul Portale il seguente materiale
(entro tre giorni dalla data dello scritto)
 relazione (max 3 pagine) sulla soluzione adottata
(strutture dati, algoritmo, etc.)
 copia del programma corretto, con evidenziate le
modifiche rispetto al programma consegnato.
 Qualora lo studente non carichi il materiale
indicato entro la data prevista, la prova scritta
non viene corretta.

A.A. 2019/20 Introduzione al corso 38


 Ammissione all’orale:

votoTeoria≥soglia1 && votoC ≥soglia2 && votoTeoria+votoC ≥15/30

soglia1 e soglia2 definite di volta in volta in funzione


della difficoltà

A.A. 2019/20 Introduzione al corso 39


Esame orale

 Gli orali si svolgono indicativamente 10 giorni


dopo lo scritto
 Teoria: mira ad accertare le conoscenze
teoriche acquisite in termini di comprensione dei
concetti e di loro esposizione
NB: non basta imparare meccanicamente
come si risolvono gli esercizi della parte di
Teoria

A.A. 2019/20 Introduzione al corso 40


Esame orale

 Programmazione C:
 realizzazione e manipolazione di strutture dati
mediante funzionalità avanzate del linguaggio
 implementazione di varianti di algoritmi visti a Teoria
 Laboratorio: domande sugli esercizi consegnati

NB: bisogna saper scrivere del codice in


tempo reale senza tentennamenti.

A.A. 2019/20 Introduzione al corso 41


Esame orale

In conclusione:
non basta preparare l’orale in pochi giorni
dopo la pubblicazione dei voti dello scritto
appiccicando qualche nozione o
memorizzando qualche funzione C.

L’orale è la sintesi della preparazione svolta


durante il corso.

A.A. 2019/20 Introduzione al corso 42


Laboratorio
 13 laboratori:
 1 laboratorio di azzeramento
 12 laboratori raggruppati in 4 gruppi
 testo pubblicato sul Portale la settimana
prima
 esercizi propedeutici/opzionali
 esercizi valutati
 da svolgere a casa e nelle ore in laboratorio
individualmente, non in gruppo
A.A. 2019/20 Introduzione al corso 43
 Per ognuno dei 4 gruppi di laboratori:
 caricamento sul Portale entro le date indicate
 obbligatorio per NUOVI FREQUENTANTI che
vogliono usufruire del bonus
 facoltativo per CHI HA GIÀ FREQUENTATO
 di tutti gli esercizi valutati. Mancato rispetto
tenuto in conto in fase di valutazione.
Facoltativo il caricamento degli altri
 valutazione ai fini bonus per soli NUOVI
FREQUENTANTI CON AP NEL CARICO
DIDATTICO SIN D’ORA
A.A. 2019/20 Introduzione al corso 44
 Valutazione (per soli NUOVI FREQUENTANTI
CON AP IN CARICO DIDATTICO SIN D’ORA):
 presenziale in orario, tranne quarto gruppo (on
line)
 esercizi scelti dal valutatore
 il punteggio tiene conto di qualità e quantità
del lavoro
 il punteggio viene reso pubblico terminate le
valutazioni dei 4 gruppi di laboratori

A.A. 2019/20 Introduzione al corso 45


 Bonus complessivo massimo di 2/30 incluso
nel voto complessivo a valle dell’esame
orale (per soli NUOVI FREQUENTANTI CON
AP IN CARICO DIDATTICO SIN D’ORA)
 Validità del laboratorio ai fini del punteggio:
30 settembre 2020

A.A. 2019/20 Introduzione al corso 46


Reperibilità dei docenti
 Gianpiero Cabodi, Paolo Camurati
Dip. di Automatica Informatica
011090 {7082, 7062}
{paolo.camurati, gianpiero.cabodi}@polito.it
 Sandro Cumani, Marco Palena, Paolo Pasini, Denis
Patti, Danilo Vendraminetto
algoritmi@polito.it
 Consulenze: su appuntamento

A.A. 2019/20 Introduzione al corso 47