Fondamenti di Informatica I - dis.uniroma1.itlembo/teaching/Introduzione.pdf · C. Horstmann, R. D....

40
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)

Transcript of Fondamenti di Informatica I - dis.uniroma1.itlembo/teaching/Introduzione.pdf · C. Horstmann, R. D....

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

7

Registrazione l  Andate sul sito https://piazza.com l  Selezionate Sign Up

8

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

Registrazione

11

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

l  Inserire la mail istituzionale (studenti.uniroma.it) l  Selezionare Submit Email

Registrazione

14

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

38

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