Fondamenti di Informatica Fondamenti di Informatica Fondamenti di Informatica A Fondamenti di Informatica A
2019-2020 2019-2020
Introduzione al corso Introduzione al corso
Moreno Marzolla
Dipartimento di Informatica—Scienza e Ingegneria (DISI) Università di Bologna https://www.moreno.marzolla.name/
Introduzione 3/61
Il corso
●
Pagina del corso:
http://www.moreno.marzolla.name/teaching/FINFA
●
Moreno Marzolla
–
Lezioni in aula
●
Sara Montagna
–
Esercitazioni in laboratorio
–
MATLAB
●
Michele Braccini
–
Tutor per il laboratorio
Libro di testo
Paul J. Deitel, Harvey M. Deitel, Il linguaggio C: Fondamenti e Tecniche di Programmazione, Pearson (2016, ottava ed.)
–
Vanno bene anche edizioni precedenti
Altro materiale sulla pagina del corso:
–
Lucidi
–
Dispensa (sulla teoria)
Introduzione 5/61
Programma del corso
●
Fondamenti teorici dell'informatica
–
Logica binaria
–
Rappresentazione dell'informazione
–
Reti di calcolatori
–
Sicurezza e Crittografia
–
Teoria della calcolabilità e Macchine di Turing
–
Correttezza degli algoritmi e invarianti
●
Programmazione in linguaggio C
–
“Hello, world!”
–
Tipi e valori
–
Espressioni
–
Strutture di controllo
–
Funzioni e ricorsione
–
Array e puntatori
–
Strutture
●
Programmazione in
linguaggio MATLAB
Struttura del corso
Lezioni
in aula
Laboratorio C (bio) turno 1
Moreno Marzolla Sara Montagna + Michele Braccini
Laboratorio C (bio) turno 2
MATLAB turno 1 MATLAB turno 2 Laboratorio C (ele)
Introduzione 7/61
Quali lezioni devo seguire?
Lezioni
in aula
Laboratorio C (bio) turno 1 Laboratorio C (bio) turno 2
MATLAB turno 1 MATLAB turno 2 Laboratorio C (ele)
●
Chi ha in piano di studio due corsi distinti (6 + 3 CFU), cioè gli studenti biomedici immatricolati 2019/20
●
Lezioni in aula + lab. C (bio) + lab. MATLAB
Lun/Mar Mercoledì
Quali lezioni devo seguire?
Lezioni
in aula
Laboratorio C (bio) turno 1 Laboratorio C (bio) turno 2
LAB o 1 LAB o 2 Laboratorio C (ele)
●
Chi ha in piano di studio un solo corso da 9 CFU, cioè gli studenti elettronici, e i biomedici in debito d'esame
●
Lezioni in aula + lab. C (ele)
Introduzione 9/61
Orario
●
Fino al 11 marzo:
–
Lunedì 11—13 aula 2.12
–
Martedì 14—17 aula 2.12
–
Mercoledì 12—14 aula 2.12
●
Dal 13 marzo in poi:
–
Lunedì 11—13 aula 2.12
–
Martedì 14—17 aula 2.12
–
Mercoledì 13:00—15:30 lab 2.2 (lab bio primo turno)
–
Mercoledì 15:30—18:00 lab 2.2 (lab bio secondo turno)
–
Venerdì 12:00–14:30 lab 2.2 (lab ele)
●
Eventuali modifiche saranno pubblicate sulla pagina
del corso
Laboratori
●
Primo laboratorio elettronici: venerdì 13/3
●
Primo laboratorio biomedici: mercoledì 18/3
–
Matricole pari: primo turno (ore 13:00)
–
Matricole dispari: secondo turno (ore 15:30)
–
Ogni settimana i turni dei biomedici si scambiano
● Fare riferimento alla pagina del corso per sapere di volta in volta quale è il proprio turno
Per evitare i disagi che si sono verificati negli anni precedenti non saranno ammessi cambi di turno
per nessun motivo
Introduzione 11/61
In caso di dubbi
●
È sempre possibile (e incoraggiato!) fare domande a lezione e in laboratorio
●
Oppure
–
Domande “brevi”: durante le pause, o via mail
–
Domande “non brevi”: al termine delle lezioni, oppure a ricevimento
●
Ricevimento (Marzolla)
–
previo appuntamento da concordare via mail
–
stanza 4139 piano 2
Netiquette
ossia, le “buone maniere” nell'era di Internet
●
Usare esclusivamente il proprio indirizzo istituzionale
@studio.unibo.it
●
Indicare sempre l'oggetto (subject) del messaggio
●
“Firmare” la mail con nome, cognome e matricola
●
Specificare che il messaggio è relativo al corso FINFA
–
Es., iniziare l'oggetto con “[FINFA] ...”
●
La posta elettronica è un mezzo di comunicazione asincrono
–
Non sempre siamo in grado di rispondere immediatamente
–
Non date per scontato che leggiamo la posta a mezzanotte
Introduzione 13/61
Esempio di mail che viola tutte le regole
From: xxxx@yahoo.it
Date: 20XX/XX/XX 23:47 Subject:
Salve, volevo sapere se è disponibile domani per un ricevimento.
Indirizzo non istituzionale
Assume che la mail
venga letta a mezzanotte
Manca oggetto
Manca la firma e l'indicazione del corso cui si riferisce
….
“Il mio programma non va...”
●
Cosa c'è che non va?
–
Il compilatore riporta un errore?
Quale?
–
Che risultato ci si aspetta, e che risultato si ottiene?
●
Non inviare MAI foto/screenshot
–
È uno spreco di spazio
–
Non si può compilare né modificare
●
Se proprio bisogna inviare un programma
–
allegare il file sorgente, oppure
–
incollare il testo nel corpo della mail
Introduzione 15/61
L'esame
Cosa viene proposto all'esame
●
L'esame si svolge in laboratorio
●
6 domande (su carta) sul programma svolto in aula e nella parte comune di lab.
●
Tre esercizi di programmazione in C
●
Alcuni esercizi di programmazione in MATLAB
●
Cosa svolgere dipende dall'esame che dovete
sostenere
Introduzione 17/61
Chi sostiene l'esame di
Fondamenti di Informatica (6 CFU)
●
(Studenti biomedici iscritti per la prima volta nell'AA 2019/2020)
●
Parte da svolgere:
–
Le 6 domande di teoria
–
I primi due esercizi di programmazione in C
Chi sostiene l'esame di
Ing. informatica biomedica (3 CFU)
●
(Studenti biomedici iscritti per la prima volta nell'AA 2019/2020)
●
Parte da svolgere:
–
Esercizi di programmazione in MATLAB
Introduzione 19/61
Chi sostiene l'esame di
Fondamenti di Informatica A (9 CFU)
●
(Studenti iscritti in anni precedenti, e studenti elettronici)
●
Parte da svolgere:
–
Le 6 domande di teoria
–
Tutti e tre gli esercizi di programmazione in C
L'esame
●
Tutti i tipi di esame si svolgono contemporaneamente e hanno una durata complessiva di 2 ore
●
Chi ha esami separati da 6 + 3 CFU può
–
svolgere solo la parte di Fond. di Inf. (6 CFU), oppure
–
svolgere solo la parte di Lab. ing. inf biomedica (3 CFU), oppure
–
svolgere entrambe le parti (6 + 3 CFU)
–
NB: l'esame è calibrato per poter agevolmente svolgere entrambe le parti in 2 ore, per chi lo desidera
●
Chi ha un esame da 9 CFU
–
Lo deve sostenere per intero
Introduzione 21/61
Valutazione domande di teoria
●
Nel caso di domande V/F:
–
Risposta corretta +1/3, errata -1/3, mancante 0
●
Nel caso di domande a risposta aperta:
–
Da 0 a 4/3 di punto
Valutazione esercizi in C
●
Potrà essere fornito uno scheletro da completare
●
Potranno essere inclusi alcuni test non esaustivi
●
Valutazione (per l'esame da 9 CFU):
–
Mancante o non compila: 0 pt
–
Fallisce i test o non conforme alle specifiche: max 3 pt
–
Corretto ma inefficiente o incomprensibile/ridondante: max 6 pt
–
Corretto con lievi imperfezioni: max 7 pt
–
Corretto: max 8 pt
–
Per l'esame da 6 CFU i punteggi si moltiplicano per 3/2
●
Un programma è corretto se e solo se soddisfa le specifiche
– Un programma che supera i test non è necessariamente corretto
Introduzione 23/61
Iscrizione all'esame obbligatoria
●
Iscrizione obbligatoria su AlmaEsami
–
La lista chiude ~7/10 giorni prima per consentire la
predisposizione degli aspetti logistici (aule, turni, creazione directory per la consegna...)
–
Chi non si iscrive non viene ammesso
●
Come da regolamento, 6 appelli d'esame
–
3 nella sessione estiva (giugno/luglio)
–
1 nella sessione autunnale (settembre)
–
2 nella sessione invernale (gennaio/febbraio)
●
Non ci saranno altri appelli
Verbalizzazione del voto
●
Voto finale = (voto quiz +) voto programmi
–
Se ci si ritira durante l'esame viene verbalizzato “Ritirato”
–
Se il voto è minore di 18 viene verbalizzato “Respinto”
●
Un voto ≥ 18 può essere rifiutato entro la data indicata nella mail di notifica (tipicamente 1 settimana)
–
In tal caso verrà verbalizzato “Rifiutato”
–
“Respinto” e “Ritirato” non si possono rifiutare!
●
I voti non rifiutati esplicitamente entro la scadenza si considerano accettati e verranno verbalizzati
●
Non si tengono voti in sospeso
–
Chi intende migliorare un voto ≥ 18 deve rifiutare e ripresentarsi
Introduzione 25/61
“Cheating policies”
●
...ovvero cosa succede se copiate
●
In caso di copiatura, vengono annullati i compiti di tutti gli studenti coinvolti
–
Sia chi ha “copiato”, sia chi “ha fatto copiare”
●
Casi di copiatura potranno essere rilevati anche dopo
la conclusione della prova
Simulazioni d'esame
●
Due, a metà e alla fine del corso
●
Verrà richiesta l'iscrizione
–
per creare le cartelle condivise per la consegna come succederà all'esame
●
Partecipare alle simulazioni è importante
–
prendere confidenza con le modalità d'esame vi consentirà
di non sprecare tempo prezioso durante l'esame vero
Introduzione 27/61
Per superare l'esame...
●
“Spannometricamente”
–
9 CFU ´ 25 ore/CFU = 225 ore di impegno totale
60
30 135
Lezioni in aula Laboratorio
Come si studia
Introduzione 29/61
Sul metodo di studio
Come studiare
●
Programmare!!!
–
Frequentando le esercitazioni in lab.
–
Esercitandosi con esercizi di programmazione dei vecchi esami
–
Confrontare la propria soluzione con quella proposta
● Più comprensibile?
● Più efficiente?
● Più compatta?
Dove studiare
●
Sul libro
–
I lucidi non sono fatti per studiarci sopra...
–
...ma vanno bene come
ausilio per il ripasso
Le esercitazioni in laboratorio
●
In laboratorio vengono proposti degli esercizi di programmazione sugli argomenti visti a lezione
●
I laboratori saranno parzialmente guidati
–
Alcuni esercizi svolti dal docente
–
Altri da svolgere in autonomia, chiedendo aiuto al docente e/
o al tutor
Introduzione 31/61
Ascolto, e dimentico Vedo, e ricordo Faccio, e capisco
Confucio
By 仇英 - http://www.chinatimes.com/realtimenews/20140517001774-260405, Public Domain, https://commons.wikimedia.org/w/index.php?curid=61343601
Sui lucidi delle lezioni
I lucidi delle lezioni visti da voi I lucidi delle lezioni visti da me
Introduzione 33/61
Perché i lucidi vengono modificati?
●
Perché ho corretto errori
●
Perché riguardando il materiale mi sono reso conto che la spiegazione sarebbe più chiara se...
●
Perché nelle precedenti lezioni è emerso che certi argomenti vanno approfonditi di più
●
Perché nelle precedenti lezioni è emerso che certi argomenti vanno approfonditi di meno
●
Perché i colleghi del laboratorio mi segnalano lacune
●
Perché abbiamo saltato delle lezioni e devo riorganizzare al volo il programma del corso
●
...
L'opinione degli studenti
Introduzione 35/61
Questionari di valutazione del corso
●
Da compilare verso la fine del corso
●
Tre questionari distinti
–
Per le lezioni in aula (Marzolla)
–
Per la parte in laboratorio (Montagna)
–
Per la parte MATLAB (Montagna)
●
I questionari vengono letti/discussi da
–
docente
–
consigli dei corsi di studio
–
commissione paritetica di scuola
–
...
Questionari di valutazione del corso
●
Strumento imperfetto, ma è l'unico che abbiamo
●
Si mescolano domande su aspetti molto diversi
–
"Sei interessato a questo insegnamento?"
–
"I locali dove si svolgono le lezioni sono adeguati?"
–
"Il docente spiega in modo chiaro?"
–
"Il docente stimola/motiva l'interesse per la materia?"
●
Prima di lamentarsi, è importante essere onesti con se stessi
–
Ho frequentato le lezioni?
–
Ho frequentato i laboratori?
–
Ho studiato sul libro?
Introduzione 37/61
Cosa è l'informatica?
●
Parole chiave
–
INFORMazione
–
Elaborazione automATICA
“Lo studio sistematico degli algoritmi che descrivono e trasformano l'informazione: la loro teoria, analisi, progetto, efficienza, realizzazione e applicazione”
[Association for Computing Machinery (ACM)]
“La scienza della rappresentazione ed elaborazione
[automatica] dell'informazione”
Introduzione 40/61
Perché studiare informatica?
Il Therac-25
● Dispositivo computerizzato per la
radioterapia di pazienti affetti da tumore
● Terza generazione (Therac-6, Therac-20)
● I modelli precedenti disponevano di controlli hardware per impedire
sovradosaggio di radiazioni
● I controlli hardware sono stati rimpiazzati da controlli software per ridurre i costi
● Nel funzionamento nominale eroga 6000 rad complessive in 3 settimane di utilizzo
● A causa di grossolani errori di
programmazione, ha erogato fino a 60000 rad in una singola sessione
● Tra giugno 1985 e gennaio 1987 sei
pazienti sono morti o seriamente feriti da dosi eccessive di radiazioni
● http://www.computer.org/computer/
homepage/misc/Leveson/index.htm
Perché studiare informatica?
Ariane 5
Perché studiare informatica?
Lo scandalo Volkswagen sulle emissioni
Cosa è un computer?
●
Un computer è un dispositivo programmabile in grado di svolgere in modo automatico una sequenza di
operazioni aritmetiche o logiche
●
È uno strumento per la rappresentazione,
memorizzazione ed elaborazione di informazioni
Introduzione 44/61
Informatica e computer
“Computer Science is no more about computers than astronomy is about telescopes, biology is about microscopes or
chemistry is about beakers and test tubes.”
Michael R. Fellows and Ian Parberry
Computing Research News, vol. 5, n. 1, 1993
I passi per risolvere un problema
Problema
Algoritmo
Programma
Analisi
Implementazione
●
Diagramma a blocchi
●
Pseudocodice
●
Descrizione testuale
Linguaggio di programmazione (C, Java, Matlab, Python, ...)
Esecuzione
Introduzione 46/61
Esempio
●
Ricerca sull'elenco del telefono
–
Input: un cognome e nome qualsiasi
–
Output: numero di telefono, se presente
●
Ipotesi
–
Nell'elenco del telefono non ci sono omonimi
Esempio
Parti dal primo abbonato sull'elenco
Il nome è quello cercato?
Passa all'abbonato successivo
Sì No
Stampa num.
di telefono
●
Ricerca del numero di telefono consultando l'elenco
–
Input: cognome e nome di un individuo qualsiasi
–
Output: numero di telefono
Inizio
Fine
Introduzione 48/61
Esempio
Parti dal primo abbonato sull'elenco
Il nome è quello cercato?
Passa all'abbonato successivo
Sì No
Sei arrivato alla fine?
Sì
No “non trovato”
Stampa num.
di telefono
●
Ricerca del numero di telefono consultando l'elenco
–
Input: cognome e nome di un individuo qualsiasi
–
Output: numero di
telefono, oppure “non trovato”
Inizio
Fine
Esempio
Parti dal primo abbonato sull'elenco
Il nome è quello cercato?
Passa all'abbonato successivo
Sì No
Sei arrivato alla fine?
Sì
No “non trovato”
Stampa num.
di telefono
●
Corretto?
●
Completo?
●
Efficiente?
–
Quante pagine dell'elenco devo esaminare nel caso migliore?
–
Quante pagine dell'elenco devo esaminare nel caso peggiore?
Inizio
N 1
Introduzione 50/61
Ricerca binaria
1.Dividi la pila di pagine in due pile composte da circa metà delle pagine ciascuna
2.Scarta la metà che sicuramente non contiene il nome che stai cercando
3.Se la parte che rimane è costituita da una singola pagina, cerca il nome su quella pagina
4.Se la parte che rimane è più di una pagina, vai al
passo 1
Esempio
cerchiamo “Marzolla”
Viesti …... 7746734
Zulian ….... 7716632 Soru ….. 3763343
Tancredi …. 91874363 Rossi … 3764634
Serafini ….. 37465374 Nicoletti …. 2873643
Pasquini … 34676473 Ligure ….. 277382
Marotta ….. 7365263 Franchini ….. 63343
Gaiardo ... 7632554 Derossi ….. 219387
Fortunati ….. 348726 Albano …... 1312412
Introduzione 52/61
Esempio
cerchiamo “Marzolla”
Viesti …... 7746734
Zulian ….... 7716632 Soru ….. 3763343
Tancredi …. 91874363 Rossi … 3764634
Serafini ….. 37465374 Nicoletti …. 2873643
Pasquini … 34676473 Ligure ….. 277382
Marotta ….. 7365263 Franchini ….. 63343
Gaiardo ... 7632554 Derossi ….. 219387
Fortunati ….. 348726 Albano …... 1312412
Cadorna ….. 13123412
Prima divisione
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Marotta ….. 7365263 Franchini ….. 63343
Gaiardo ... 7632554 Derossi ….. 219387
Fortunati ….. 348726 Albano …... 1312412
Cadorna ….. 13123412
Introduzione 54/61
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Marotta ….. 7365263 Franchini ….. 63343
Gaiardo ... 7632554 Derossi ….. 219387
Fortunati ….. 348726 Albano …... 1312412
Cadorna ….. 13123412
Seconda divisione
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Marotta ….. 7365263 Franchini ….. 63343
Gaiardo ... 7632554
Introduzione 56/61
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Marotta ….. 7365263 Franchini ….. 63343
Gaiardo ... 7632554
Terza divisione
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Marotta ….. 7365263
Introduzione 58/61
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Marotta ….. 7365263
Non trovato
Analisi della ricerca binaria
●
Corretto?
–
Quale proprietà dell'elenco telefonico è fondamentale per garantire la correttezza dell'algoritmo?
●
Completo?
●
Efficiente?
–
Quante divisioni devo fare nel caso migliore?
–
Quante divisioni devo fare nel caso peggiore?
Introduzione 60/61
Analisi della ricerca binaria
●
Iniziamo con N pagine
●
Dopo 1 dimenzzamento ne abbiamo N/2
●
Dopo 2 dimezzamenti ne abbiamo N/2
2●
Dopo 3 dimezzamenti ne abbiamo N/2
3●
…
●
Dopo k dimezzamenti ne abbiamo N/2
k●
Terminiamo quando ne resta una sola, cioè N/2
k= 1
–
N/2
k= 1
–
N = 2
k–
log
2N = log
22
k–
log
2N = k
Analisi della ricerca binaria
●
Corretto?
–
Quale proprietà dell'elenco telefonico è fondamentale per garantire la correttezza dell'algoritmo?
●
Completo?
●
Efficiente?
–
Quante divisioni devo fare nel caso migliore?
–
Quante divisioni devo fare nel caso peggiore?
log2 N
log2 N
Introduzione 62/61