Fondamenti di Informatica A
Introduzione al corso
Moreno Marzolla
Dipartimento di Informatica—Scienza e Ingegneria (DISI)
Università di Bologna
http://www.moreno.marzolla.name/
Introduzione
2
Il corso
●
●
http://www.moreno.marzolla.name/teaching/FINFA
I docenti
–
Moreno Marzolla ([email protected])
●
●
–
Sara Montagna ([email protected])
●
●
–
Lezioni in laboratorio
Web: https://www.unibo.it/sitoweb/sara.montagna
Raffaele Cappelli ([email protected])
●
●
–
Lezioni in aula
Web: https://www.unibo.it/sitoweb/moreno.marzolla
Lezioni in laboratorio
Web: https://www.unibo.it/sitoweb/raffaele.cappelli
Michele Braccini ([email protected])
●
●
Tutor in laboratorio
Web: https://www.unibo.it/sitoweb/m.braccini
Introduzione
3
Il corso
●
Organizzazione
–
–
●
Teoria: 60 ore
Laboratorio: 30 ore (2 turni)
Contenuti
–
–
–
–
–
–
–
–
Architettura dei calcolatori
Aritmetica binaria
Rappresentazione dell'informazione
Algoritmi e "problem solving"
Programmazione in C
Sistemi Operativi e Reti di calcolatori
Sicurezza e crittografia
Fondamenti teorici dell'informatica
Introduzione
4
Libro di testo
J. Glenn Brookshear,
Stephen G. Kochan,
Fondamenti di Informatica e
Programmazione in C,
Pearson, 2014, ISBN
9788865183694
–
Introduzione
Fortemente consigliato
soprattutto a chi non
frequenta le lezioni
5
Per chi vuole approfondire il
linguaggio C
Paul J. Deitel, Harvey M.
Deitel, Il linguaggio C:
Fondamenti e Tecniche di
Programmazione, Pearson
–
–
Introduzione
L'edizione più recente è
l'ottava del 2016
Vanno bene anche
edizioni precedenti
6
Altro materiale
●
Lucidi delle lezioni
–
–
●
Dispensa a cura del docente
–
–
●
Disponibili sul sito del corso
Soggetti a modifiche "last minute"
Sarà resa disponibile sul sito del corso
Copre alcuni (non tutti) argomenti di teoria
Alcuni esercizi della parte di teoria
–
Simili a quelli che verranno assegnati all'esame
Introduzione
7
Orario delle lezioni
●
Prime due settimane:
–
–
–
●
A partire dalla terza settimana (7 marzo):
–
–
–
–
●
Lunedì 11—13 GPT
Martedì 14—17 G1P
Mercoledì 12—14 G1P (NO LAB)
Lunedì 11—13 GPT
Martedì 14—17 G1P
Mercoledì 13:00—15:30 VELA (primo turno)
Mercoledì 15:30—18:00 VELA (secondo turno)
Attenzione a eventuali cambi di orario
–
Fare riferimento alla pagina del corso
Introduzione
8
Laboratori
●
●
Divisione in due turni in base alla matricola
Primo laboratorio mercoledì 15/3
–
–
●
Matricole pari: primo turno (ore 13:00)
Matricole dispari: secondo turno (ore 15:30)
Ogni settimana i turni si scambiano
–
Fare riferimento alla pagina del corso per sapere di volta in
volta quale è il proprio turno
Introduzione
9
A chi chiedere cosa
●
Moreno Marzolla
–
–
●
Sara Montagna
–
●
Tutti gli argomenti trattati in aula
Questioni di carattere generale relative al corso
Lezioni in laboratorio
Raffaele Cappelli
–
Lezioni in laboratorio
Introduzione
10
Come chiedere
●
●
E' sempre possibile (e incoraggiato!) fare domande
durante le lezioni
Oppure:
–
–
Domande “brevi”: via mail
Domande “non brevi”: a ricevimento, oppure dopo le lezioni
Introduzione
11
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
–
●
La posta elettronica è un mezzo di comunicazione
asincrono
–
–
●
Ad esempio, iniziare l'oggetto con “[FINF-A] ...”
Non sempre siamo in grado di rispondere immediatamente
Non date per scontato che leggiamo la posta a mezzanotte
Queste regole valgono anche per noi nei vs confronti!
Introduzione
12
Esempio di mail che viola tutte le regole
From: [email protected]
Date: 20XX/XX/XX 23:47
Subject:
Salve, volevo sapere se è disponibile domani
per un ricevimento.
Introduzione
13
Esempio di mail che viola tutte le regole
Indirizzo non istituzionale
Assume che la mail
venga letta a mezzanotte
From: [email protected]
Date: 20XX/XX/XX 23:47
Subject:
Salve, volevo sapere se è disponibile domani
per un ricevimento.
Manca oggetto
Manca la firma e l'indicazione
del corso cui si riferisce
Introduzione
14
Modalità d'esame
●
●
●
Prova in laboratorio sul programma svolto nell'ultimo anno
accademico in cui si è svolto il corso
– Teoria: domande a quiz e a risposta aperta
– Esercizi di programmazione in C
Una unica prova: l'esame si supera o si fallisce per intero
Voti pubblicati su AlmaEsami
– Chi intende rifiutare il voto deve comunicarlo al docente
entro la scadenza riportata nella mail di notifica; in tal caso
verrà verbalizzato “Ritirato”
– Chi intende accettare il voto non deve fare nulla
– Non si tengono voti in sospeso: chi intende migliorare il voto
deve rifiutare e ripresentarsi
Introduzione
15
Modalità d'esame
●
Per chi deve sostenere il vecchio esame da 6 CFU
– Contattare il docente per definire un programma ridotto
Introduzione
16
Modalità d'esame
●
Obbligatorio iscriversi tramite AlmaEsami
–
–
●
Come da regolamento, 6 appelli d'esame all'anno
–
–
–
●
La lista chiude alcuni giorni prima dell'esame per consentire
la predisposizione degli aspetti logistici (aule, turni,
creazione directory per la consegna...)
Chi non si iscrive non viene ammesso
3 nella sessione estiva (giugno/luglio)
1 nella sessione autunnale (settembre)
2 nella sessione invernale (gennaio/febbraio)
Non ci saranno altri appelli.
Introduzione
17
Per superare l'esame...
●
“Spannometricamente”
–
–
9 CFU = 9  25 = 225 ore di impegno totale
90 ore in aula/laboratorio, il resto (135 ore) studio individuale
●
●
●
135 ore = 16 giorni full time...
...solo per rendersi conto dell'impegno! NON chiudetevi in casa per
16 giorni!
Come superare l'esame
–
–
–
–
Seguire le lezioni
Approfondire su libro/appunti/dispensa/lucidi
Chiedere in caso di dubbi (e chiedere un ricevimento)
Esercizi, esercizi, esercizi!!
●
●
Sia sulla parte teorica che (soprattutto) di programmazione
L'informatica non è uno “sport” da praticare come spettatori
Introduzione
18
Domande?
Introduzione
19
Questo corso
●
Cosa imparerete
–
–
–
●
Principi generali
Metodi
Fondamenti di
programmazione
Cosa non imparerete
–
–
–
–
Introduzione
Come si installa X
Come si usa Y
Riparare un PC
Scrivere una app
20
Cosa è l'informatica?
“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”
●
Parole chiave
–
–
INFORMazione
Elaborazione automATICA
Introduzione
21
Informatica
–
–
Tutti i problemi sono risolubili
“meccanicamente”?
Esistono problemi “troppo
difficili” per essere risolti
meccanicamente?
Introduzione
Fondamenti teorici
dell'informatica
●
Algoritmi
●
Informatica
Linguaggi di
programmazione
●
Costruzione di calcolatori
efficienti
Studio dei paradigmi di
programmazione
Sviluppo di algoritmi efficienti
per risolvere problemi
Studio dei limiti teorici della
risoluzione meccanica di
problemi
Hardware
●
22
Perché studiare informatica?
Il Therac-25
●
●
●
●
●
●
●
●
Dispositivo computerizzato per la
radioterapia di pazienti affetti da cancro
Terza generazione (Therac-6, Therac-20)
I modelli precedenti disponevano di
controlli hardware per impedire un
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/ho
mepage/misc/Leveson/index.htm
Introduzione
23
Perché studiare informatica?
Ariane 5
Perché studiare informatica?
Lo scandalo Volkswagen sulle emissioni
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
Introduzione
26
Cosa è un computer?
"Human computers - Dryden" by NACA (NASA) - Dryden Flight Research Center Photo Collection http://www.dfrc.nasa.gov/Gallery/Photo/Places/HTML/E49-54.html. Licensed under Public Domain via Commons https://commons.wikimedia.org/wiki/File:Human_computers_-_Dryden.jpg#/media/File:Human_computers_-_Dryden.jpg
Introduzione
27
Cosa è un computer?
●
●
Un computer è un dispositivo programmabile in grado
di svolgere in modo automatico una sequenza di
operazioni aritmetiche o logiche
E' uno strumento per la rappresentazione,
memorizzazione ed elaborazione di informazioni
Introduzione
28
Conoscenza
●
Dichiarativa
–
●
Consiste nella descrizione
di fatti o proprietà
“La radice quadrata di x è il
numero non negativo y tale
che y2 = x”
Imperativa
–
L'informatica si
occupa di questo
Consiste nella descrizione
di regole o procedure che
consentono di ottenere
determinati risultati
Trova una stima G della radice
quadrata di x
Ripeti
Se G2 ≈ x allora
il risultato è G; stop
altrimenti
G ← (G + x/G) / 2
Introduzione
29
Conoscenza Imperativa
●
●
Due modi per "realizzare" la conoscenza imperativa
Fixed program computer
–
●
Dispositivi specializzati per risolvere un tipo specifico di
problema
Stored program computer
–
–
–
Dispositivi che ricevono in ingresso una sequenza di
istruzioni che descrivono i passi da eseguire per risolvere un
certo problema
Possono risolvere problemi diversi, ricevendo sequenze di
istruzioni specializzate per il problema da risolvere
Esistono molti linguaggi di programmazione che possono
essere usati per descrivere le istruzioni da eseguire
Introduzione
30
Conoscenza imperativa e algoritmi
●
Un algoritmo è un procedimento per
risolvere un problema mediante una
sequenza finita di passi elementari
–
●
Descritto in modo preciso allo scopo di
automatizzarne l'esecuzione
Il termine deriva dal nome del
matematico persiano Muhḥammad
ibn Mūsā al-Khwārizmī (‫نب دمحمحمد بن‬
‫)نب دمحموسى الخوارزنب دمحمی‬
–
–
Autore di un primo fondamentale
trattato di algebra
Un cratere lunare porta il suo nome
Introduzione
Muhḥammad ibn Mūsā al-Khwārizmī (c. 780 – c. 850) (francobollo sovietico
commemorativo; Fonte: Wikipedia)
31
Algoritmo vs Programma
●
Un algoritmo è una
sequenza finita di passi
elementari per risolvere
un problema dato
–
●
Solitamente espresso in
modo informale, ad es., in
linguaggio naturale
oppure mediante
diagrammi
Introduzione
Un programma è
l'implementazione di un
algoritmo mediante un
linguaggio di
programmazione
–
Espresso formalmente nel
linguaggio adottato
32
I passi per risolvere un problema
Problema
Analisi
Diagramma a blocchi
●Pseudocodice
●Descrizione testuale
●
Algoritmo
Implementazione
Programma
Linguaggio di programmazione
(C, Java, Matlab, Python, ...)
Esecuzione
Risultati
Introduzione
33
Esempio
●
Ricerca sull'elenco del telefono
–
–
Input: un cognome e nome qualsiasi
Output: numero di telefono dell'abbonato
Introduzione
34
Esempio
●
Inizio
Parti dal primo abbonato
sull'elenco
Ricerca del numero di
telefono consultando
l'elenco
–
–
Input: cognome e nome di
un individuo qualsiasi
Output: numero di
telefono
No
Passa all'abbonato
successivo
Introduzione
Il nome è
quello cercato?
Sì
Stampa num.
di telefono
35
Inizio
Esempio
●
Parti dal primo abbonato
sull'elenco
Ricerca del numero di
telefono consultando
l'elenco
–
–
Input: cognome e nome di
un individuo qualsiasi
Output: numero di
telefono, oppure “non
trovato”
Sei arrivato
alla fine?
No
No
Passa all'abbonato
successivo
Introduzione
Il nome è
quello cercato?
Sì
“non trovato”
Sì
Stampa num.
di telefono
36
Inizio
Esempio
●
●
●
Parti dal primo abbonato
sull'elenco
Corretto?
Completo?
Efficiente?
–
–
Quante pagine dell'elenco
devo esaminare nel caso
migliore?
Quante pagine dell'elenco
devo esaminare nel caso
peggiore?
Sei arrivato
alla fine?
No
No
Passa all'abbonato
successivo
Introduzione
Il nome è
quello cercato?
Sì
“non trovato”
Sì
Stampa num.
di telefono
37
Ricerca binaria
1.Dividi la pila di pagine in due parti uguali 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
Introduzione
38
Esempio
cerchiamo “Marzolla”
Viesti …... 7746734
Soru ….. 3763343
Rossi … 3764634
Nicoletti …. 2873643
Ligure ….. 277382
Franchini ….. 63343
Derossi ….. 219387
Albano …... 1312412
Zulian ….... 7716632
Tancredi …. 91874363
Serafini ….. 37465374
Pasquini … 34676473
Marotta ….. 7365263
Gaiardo ... 7632554
Fortunati ….. 348726
Cadorna ….. 13123412
Introduzione
39
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Franchini ….. 63343
Derossi ….. 219387
Albano …... 1312412
Viesti …... 7746734
Soru ….. 3763343
Rossi … 3764634
Nicoletti …. 2873643
Marotta ….. 7365263
Gaiardo ... 7632554
Fortunati ….. 348726
Cadorna ….. 13123412
Zulian ….... 7716632
Tancredi …. 91874363
Serafini ….. 37465374
Pasquini … 34676473
Prima divisione
Introduzione
40
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Franchini ….. 63343
Derossi ….. 219387
Albano …... 1312412
Marotta ….. 7365263
Gaiardo ... 7632554
Fortunati ….. 348726
Cadorna ….. 13123412
Introduzione
41
Esempio
cerchiamo “Marzolla”
Derossi ….. 219387
Albano …... 1312412
Ligure ….. 277382
Franchini ….. 63343
Fortunati ….. 348726
Cadorna ….. 13123412
Marotta ….. 7365263
Gaiardo ... 7632554
Seconda divisione
Introduzione
42
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Franchini ….. 63343
Marotta ….. 7365263
Gaiardo ... 7632554
Introduzione
43
Esempio
cerchiamo “Marzolla”
Franchini ….. 63343
Ligure ….. 277382
Gaiardo ... 7632554
Marotta ….. 7365263
Terza divisione
Introduzione
44
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Marotta ….. 7365263
Introduzione
45
Esempio
cerchiamo “Marzolla”
Ligure ….. 277382
Non trovato
Marotta ….. 7365263
Introduzione
46
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
47
Informatica per ingegneria?
●
●
●
Spenderemo molto tempo su dettagli tecnici...
...ma non sono la parte più importante del corso
Aspetti realmente importanti
–
Come risolvere un problema complesso?
●
–
–
Come "istruire" un calcolatore su come risolvere un
problema?
Come è fatto un calcolatore?
●
–
Decomporre, risolvere, ricomporre
Verrà approfondito nel corso apposito di Calcolatori Elettronici...
Esistono problemi "troppo difficili" per essere risolti da un
calcolatore, presente o futuro?
Introduzione
48