Fondamenti di Informatica I Corso di Laurea in Ingegneria
Informatica e Automatica
Aspetti amministrativi e introduzione
Professori: Marco Schaerf (canale 1: A-H)
Domenico Lembo (canale 2: I-Z)
Prima lezione l Benvenuti
l Aspetti amministrativi
– Orario, Pagina WWW del corso (piattaforma Piazza), Laboratorio, Esami, Ricevimento, ecc.
l Descrizione del corso: due parti – Programmazione: Python – Teoria: “Modelli dell’informatica”
l Breve storia dei calcolatori l Introduzione ai linguaggi di programmazione e
a Python l Introduzione alla parte di Modelli
2
l 9 CFU (a partire dallo scorso anno, in precedenza era da 12 CFU)
l Orario delle lezioni (24 Settembre 2018 – 21 Dicembre 2018) – Canale 1: A–H (prof. Marco Schaerf)
l Lunedì 14:00–16:00 (Aula 105 – Complesso M. Polo) l Martedì 11:00–15:00 (Lab. 15/16 – Via Tiburtina 205) l Mercoledì 16:00–18:00 (Aula 105 – Complesso M. Polo) l Giovedì 17:00-19:00 (Aula 105 – Complesso M. Polo)
– Canale 2: I–Z (prof. Domenico Lembo) l Lunedì 11:00–13:00 (Aula 204 – Complesso M. Polo) l Martedì 11:00–15:00 (Lab. 15/16 – Via Tiburtina 205) l Mercoledì 10:00–12:00 (Aula 204 – Complesso M. Polo) l Venerdì 08:00-10:00 (Aula 204 – Complesso M. Polo)
Informazioni generali sul corso
3
Esercitazioni presso il laboratorio Paolo Ercoli
Via Tiburtina, 205
Le esercitazioni in laboratorio si svolgeranno ogni martedì a partire dal 1/10/2018. Saranno organizzate (almeno inizialmente) in due turni da 2 ore ciascuno. (ulteriori dettagli saranno comunicati in aula e sul sito web)
4
l 2 Appelli fra il 7 gennaio ed il 21 febbraio 2019
l 2 Appelli fra il 3 giugno ed il 26 luglio 2019
l 1 Appello fra il 2 settembre ed il 19 settembre 2019
Appelli straordinari: 1 Appello fra il 18 marzo ed il 16 aprile 2019, riservato a studenti part-time o fuori corso nell’A.A. 2018-2019 1 Appello fra il 7 ottobre ed il 7 novembre 2019, riservato a studenti part-time, fuori corso, o iscritti per l’A.A. 2018-2019 al terzo anno della laurea
Appelli d’esame
5
l Sulla piattaforma Piazza https://piazza.com/uniroma1.it/fall2018/1056024/home
l Sul sito verranno pubblicate tutte le informazioni relative al corso, gli avvisi, il materiale didattico.
l Si raccomanda la registrazione al sito. Questa consente
l’accesso a tutte le risorse ed al forum del corso. l Chi è già registrato al sito Piazza, può accedere con le sue
credenziali e selezionare ‘Add Another Class’ dal menu in alto a sinistra
Sito Web del Corso
6
Registrazione l Andate sul sito https://piazza.com l Selezionate Sign Up l Selezionate Student Get Started
9
l Andate sul sito https://piazza.com l Selezionate Sign Up l Selezionate Student Get Started l Inserite Sapienza l Selezionate Sapienza University of Rome
Registrazione
10
l Selezionate il Term: Fall 2018 l Inserite il codice del corso: 1056024 l Selezionate il corso
Registrazione
12
l Selezionate il Term: Fall 2018 l Inserite il codice del corso: 1056024 l Selezionate il corso l Selezionate Join as: Student e Join classes
Registrazione
13
Registrazione l Riceverete una mail contenente un link
l Selezionare il link (copiate ed incollate sul browser se non venite ridirezionati automaticamente alla pagina)
l Riempite la form come Major (corso di laurea)
l Scrivete Ingegneria Informatica e Automatica
l In Graduation Date (data di laurea) selezionare la data in cui pensate di laurearvi (alla triennale!)
15
Il corso in estrema sintesi l Prerequisiti: Nessuno (veramente) l Due parti
– Programmazione: semplici programmi scritti in un linguaggio comprensibile da un calcolatore (in questo corso studiamo il linguaggio Python)
– Teoria (modelli dell’Informatica): l’informatica non è solo programmazione
Il corso non è facile: – Impegnarsi e studiare fin dall’inizio (anche
se non ci sono interrogazioni in classe) – Esercitarsi nella programmazione (Laboratorio) 16
Materiale Didattico
l Per la parte di Programmazione – Libro di Testo:
C. Horstmann, R. D. Necaise. Concetti di Informatica e fondamenti di Python. Maggioli Editore
– Dispense integrative – Slide – Testi e soluzioni delle esercitazioni
l Per la parte di Modelli
– Slide e dispense distribuite sul sito
17
Ambiente di Lavoro per la Programmazione – Python 3.6.5 nella distribuzione Anaconda (v.5.2)
(https://www.anaconda.com/)
– Editor Spider (v. 3.2.8), incluso in Anaconda
18
Modalità d’Esame
– L’esame si svolge mediante una prova al calcolatore ed una prova scritta con domande sulla parte di Modelli
– La prova è identica e si svolge nello stesso giorno per i due canali
– Maggiori informazioni sulle modalità di svolgimento e sulla valutazione saranno a breve sul sito del corso
19
Programma: Programmazione in Python
l Nozioni introduttive: Il calcolatore. Algoritmi e Programmi. Linguaggi di programmazione. La compilazione.
l Nozioni elementari sulla programmazione in Python: I/O di base. Uso dell'ambiente di sviluppo Spider.
l Aspetti di base della programmazione in Python: Espressioni aritmetiche e tipi di dati elementari. Variabili e istruzioni di assegnazione. Il tipo di dato stringa.
l Decisioni: costrutti if ed else-if (elif). l Cicli: Ciclo for. Ciclo while. Cicli annidati. l Funzioni e moduli: Introduzione alla programmazione Python con
funzioni. Moduli e loro uso. Esecuzione delle funzioni. l Liste: Proprietà di base. Operazioni sulle liste. Algoritmi elementari
che fanno uso di liste. Rappresentazione di tabelle e matrici. l Dizionari: Proprietà di base. Accesso e manipolazione di dizionari. l File e file system: Apertura, chiusura e manipolazione di file di testo.
Funzioni di base per l'accesso al file system. 20
Programma: Modelli dell’Informatica l Architettura dei calcolatori: Architettura di von Neumann. Esempi di
Linguaggio Macchina. La legge di Moore. l Rappresentazione dell’Informazione: Rappresentazione di caratteri e
stringhe, Rappresentazione dei numeri positivi. Rappresentazione in complemento a due. Rappresentazione in virgola mobile.
l Logica Proposizionale: Tavole di verità. Connettivi logici. Soddisfacibilità, validità, equivalenza logica. Conseguenza Logica. Forme normali. Deduzione automatica.
l Calcolabilità e complessità: Problemi di decisione. Problemi indecidibili. Tempo di esecuzione di un programma e la notazione O-grande. Le classi di complessità P ed NP.
l Espressioni regolari: Funzione di ricerca. Esempi di utilizzo di espressioni regolari. Sintassi e semantica delle espressioni regolari.
l Automi a Stati finiti: Espressioni regolari vs. automi. Funzionamento degli automi. Progettazione di automi. Automi non deterministici.
l Ricerca e Ordinamento: Algoritmi di ricerca e ordinamento: Ricerca sequenziale; Ricerca binaria; Ordinamento per selezione.
21
Elaborazione delle Informazioni
Un sistema per la rappresentazione e l’elaborazione di informazioni può
– raccogliere impressionati quantità di dati – elaborare i dati secondo le istruzioni fornite
producendo nuovi dati – rendere disponibili questi dati in modo
istantaneo e con prospettive diverse a utenti diversi e in parti diverse del mondo
Esempi: Facebook, banca via internet, calcolo scientifico, video giochi 22
23
Elaborazione delle Informazioni
l Computer (calcolatore, microprocessore…) – Esegue semplici operazioni aritmetiche e logiche
ad una velocità molto maggiore degli esseri umani (1 nanosecondo per operazione = 1 milionesimo di millesimo di secondo)
l Programma – Insieme di istruzioni eseguibili da un computer
l Hardware – Dispositivi fisici di un sistema di elaborazione
l Software – Programmi eseguiti su un elaboratore
Cos’è l’informatica? L'informatica NON è lo studio dei computer come artefatti. Non studieremo come si costruisce un computer (o come lo si ripara). Siamo interessati a USARE i Computer
24
- L'informatica ha a che fare con lo studio di risoluzione di problemi (“problem solving”) per la cui soluzione si scrive un programma che viene eseguito da un computer - L'informatica si basa su una serie di tradizioni intellettuali che comprende aspetti della matematica e dell'ingegneria
Cos’è l’informatica? L'informatica svolge un ruolo sempre più importante in altre discipline: • Biologia: analizzare il genoma umano. • Economia: la creazione di migliori modelli economici e
finanziari. • Psicologia: l'intelligenza artificiale ci aiuta a capire il
cervello. • Ambiente: i modelli climatici richiedono la moderna
tecnologia informatica. • Letteratura: Analisi computerizzata aiuta a risolvere
paternità contestata. • Cinema e intrattenimento: utilizzo di informatica grafica
nei film e nei videogiochi. 25
Programma e dati di ingresso Un programma è una sequenza di istruzioni scritte in un linguaggio di programmazione (e comprensibili da un calcolatore) che realizzano un algoritmo Dati di ingresso: di solito un problema non deve essere eseguito una sola volta ma molte volte con dati (di ingresso) diversi
Esempi: Trovare il percorso più breve in una rete stradale: dati di ingresso: rete stradale in esame, punto di partenza e punto di arrivo Eseguire una ricerca nel web: dati di ingresso: web (in quel momento), parole date nella ricerca
26
Elaborazione dell’informazione
Risoluzione di un problema 1. Dato un problema si trova un algoritmo di
soluzione 2. Si scrive l’algoritmo di soluzione in un
programma comprensibile da un calcolatore 3. Dato un programma, un calcolatore e dei dati
di ingresso, l’esecuzione del programma con i dati di ingresso sul calcolatore risolve il problema su quei dati
27
Elaborazione dell’informazione
Come viene risolto un problema :
Dati diingresso
Descrivono il caso in esame
Elaborazione
Manipolazione dei dati di ingresso in modo da costruire la soluzione cercata
Rappresentano lasoluzione del caso in esame
Dati diuscita
28
Algoritmi e Programmi L'informatica studia la risoluzione di problemi (“problem solving”) realizzando un programma di soluzione che viene eseguito da un computer Un algoritmo è una “ricetta”, ovvero un procedimento, composto da una sequenza di istruzioni elementari, che consente di risolvere un problema. Esempio ordinare alfabeticamente una serie di nomi, trovare le pagine più interessanti in una ricerca su un motore di ricerca (google), trovare il percorso più breve (tom tom)
29
Algoritmo In modo informale, si può pensare a un algoritmo come ad una procedura per risolvere un problema Una definizione più formale richiede che un algoritmo deve verificare: • I passi (le istruzioni) dell’algoritmo devono
essere definiti in modo chiaro e non ambiguo • Efficace, nel senso che i suoi passi siano
eseguibili da una macchina • Finito, nel senso che termina dopo un
numero fissato di operazioni 30
I calcolatori e la programmazione
Programmare: capacità di specializzare il dispositivo per attività complesse di elaborazione dell’informazione
Programma: sequenza di istruzioni, ciascuna istruzione specifica una operazione da eseguire sui dati
Un programma é un algoritmo scritto in un linguaggio non ambiguo e direttamente comprensibile dal computer.
31
Componenti del computer
Hardware
Sistema Operativo
Applicazioni
Applicazioni: È il livello di SW con cui interagisce l’utente e comprende programmi quali: Word, PowerPoint, Excel, Explorer, …..
Software
È il livello di SW che interagisce direttamente con l’HW e che si occupa di un uso corretto ed efficiente delle risorse fisiche
WindowsUnix/LinuxMac OS 32
Linguaggi di programmazione Dato un problema un algoritmo di soluzione deve essere scritto in un lingaggio comprensibile da una macchina I calcolatori sono in grado di comprendere solo programmi scritti in linguaggio macchina un linguaggio specifico della CPU e complicato per gli uomini I programmi sono scritti in un linguaggio piu’ facile da utilizzare; ce ne sono tantissimi che sono detti linguaggi ad alto livello; Python è uno molto semplice con cui inizieremo; altri sono C, Java, SQL …. 33
Linguaggi di programmazione I linguaggi ad alto livello non sono direttamente eseguibili da un elaboratore. Per eseguire un programma scritto in un linguaggio ad alto livello dobbiamo tradurlo nel linguaggio macchina Due possibilità principali
• Compilatore: programma che traduce un linguaggio ad alto livello in un linguaggio macchina eseguibile dal sistema operativo
• Interprete: il programma scritto in linguaggio ad alto livello viene simulato senza tradurlo completamente.
34
Il processo di compilazione
#include <stdo.h> main() { printf("hello\n"); }
0100100101011001000 1000010100011101011 0110100111010101100
Comp.
Programma Programma tradotto
1001011010110001011 0100100101001011011 0101101011010100101
Altri programmi
utili (es grafica)
0100100101011001000 1000010100011101011 0110100111010101100 1001011010110001011 0100100101001011011 0101101011010100101
Programma eseguibile
Linker
35
Obiettivi del corso L'obiettivo del corso è far acquisire allo studente alcune tecniche fondamentali della programmazione ad oggetti, funzionale e imperativa attraverso il linguaggio di programmazione Python, nonchè lo studio di modelli per l'informatica. Al termine del corso lo studente è in grado di scrivere programmi in Python che comportano l'uso delle tecniche di programmazione e delle strutture dati introdotte. L'acquisizione dei contenuti e, in particolare, della capacità di programmazione, richiede l'uso del calcolatore. 36
Che significa? l I calcolatori (presenti anche nei telefonini e
nelle macchine fotografiche nelle automobili nei robot…) eseguono programmi
l Scrivere buoni programmi per le applicazioni odierne è molto molto difficile.
l Per questa ragione è impossibile imparare a farlo bene in un solo corso universitario
l Programmazione: Python (linguaggio semplice per apprendere e quindi buono per iniziare)
l Modelli di informatica: per programmare bene non è sufficiente conoscere un linguaggio di programmazione
37
Un esempio di programma d’esame Una squadra di basket memorizza in un documento (file) il numero di punti fatti da ogni giocatore in ogni partita. Ogni riga del file è del tipo Nome1 punti1;Nome2 punti2;Nome3 punti3;….. Ogni riga può avere un numero diverso di giocatori elencati e i giocatori sono in un ordine qualunque. Scrivere un programma che restituisce l’elenco dei giocatori della squadra in ordine alfabetico. Ogni riga è del tipo Nome1 partite giocate, punti totali Nome2 partite giocate, punti totali Il primo valore rappresenta il totale delle partite giocate ed il secondo il numero totale di punti segnati.
39
Linguaggi di programmazione
Ci sono molti linguaggi di programmazione: Pascal, C, C++, Java, Ada, Perl, Php, Python… - Questi linguaggi condividono gli stessi principi - Ognuno però ha caratteristiche specifiche che lo distinguono dagli altri
Nelle applicazioni di oggi - Elaborazione complesse dei dati sono spesso fatte usando linguaggi diversi
- Imparando I concetti fondamentali sarete in grado di apprendere da soli nuovi linguaggi
40