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