Top Banner
Elementi di Informatica Modulo I Prof. Mauro Gaspari: [email protected]
36

Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Feb 23, 2019

Download

Documents

vuongcong
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Elementi di Informatica Modulo I

Prof. Mauro Gaspari: [email protected]

Page 2: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Cosa facciamo oggi

Cosa vorrei trasmettere: to think like a computer scientist.

Organizzazione del Corso. Esami. Materiale didattico. Introduzione agli strumenti per i linguaggi di

programmazione: strumenti computazionali. Getting started.

Page 3: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

To think like a Computer Scientist.....

Comprendere la terminologia. Utilizzare gli strumenti computazionali per scrivere

piccoli programmi. Comprendere programmi scritti da altri. Comprendere le potenzialita e le limitazioni degli

strumenti computazionali. Mappare problemi (fisici, astronomici) nelle

corrispondenti soluzioni computazionali.

Page 4: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Python

Per relizzare le nostre soluzioni computazionali utilizzeremo Python, un linguaggio di programmazione moderno.

NB il corso non c’e’ un corso su Python (studiare I dettagli di questo linguaggio), ma un corso che utilizza questo linguaggio per imparare a pensare e a relizzare soluzioni computazionali.

Warning!!! leggere il libro non basta, sono importantissimi gli esercizi.

Page 5: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Organizzazione del Corso

Approccio interattivo - learning by doing Lezioni Interattive:

Esercizi risolti in classe (workgroup sessions)

Supporto individuale (tutor)

Compiti a casa…….

Page 6: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Programma● Strumenti computazionali e problem solving, conoscenza dichiarativa ed imperativa. I linguaggi di programmazione. Interpreti e compilatori. Il ruolo del debugging.●Linguaggi per script. L'interprete Python. Introduzione alla programmazione in Python. Variabili, espressioni e comandi;● Approfondimento sulla rappresentazione dei numeri nei calcolatori e approccio seguito da Python; ●Funzioni, condizionali e ricorsione; Iterazione; Tipi di dati; ●Tabelle; come esportare dati il formato csv; creazione di fogli elettronici; ●Strutture dati offerte da Python e tipi di dato definiti dall'utente. ● Cenni sulla programmazione ad oggetti e relativa notazione.

Page 7: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Materiale DidatticoModulo I

TESTO ADOTTATO: How to Think Like a Computer Scientist: Learning with Python, by Allen Downey, Jeff Elkner and Chris Meyers. Gree Tea Press (disponibile in rete: http://thinkpython.com/). NB Versione per Python 2.7.

Esiste disponibile in rete anche in la versione Italiana aggiornata: https://github.com/AllenDowney/ThinkPythonItalian/tree/master/2.0/

Materiale in Rete:

Sito ufficiale di Python: http://www.python.org/

Sito italiano di Python: http://www.python.it/

TESTO DI CONSULTAZIONE PER INFORMATICA DI BASE (sistemi operativi, reti di calcolatori): Informatica per l’Impresa tra Soluzioni Proprietarie ed Open Source, Mauro GASPARI, Gianluigi ROVEDA, 2017, Terza EDIZIONE Pitagora Eitrice.

Page 8: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

L’esame

Modulo I: scritto Modulo II: discussione di un progetto Regole:

Il risultato è la media matematica tra i due voti.

Per poter discutere il progetto è necessario passare lo scritto.

Page 9: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Introduzione agliStrumenti Computazionali

Gli strumenti computazionali non sono altro che strumenti per risolvere problemi.

Anche noi siamo risolutori di problemi: utilizziamo la conoscenza per farlo.

Ma cosa è la conoscenza? Possiamo classificarla in almeno due categorie:

Conoscenza Dichiarativa Conoscenza Imperativa

Page 10: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Esempio: Massimo Comune Divisore

CONOSCENZA DICHIARATIVA: A, B interi positivi, X = MCD(A,B) se:

- Il resto di A/X e B/X è uguale a 0 e,

- Se esiste Y≠X tale che il resto di A/Y e B/Y è uguale a 0 allora X > Y

Page 11: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Esempio: Massimo Comune Divisore

CONOSCENZA IMPERATIVA (EUCLIDE)SE A<B, scambiare A e B.

Dividere A per B, sia R il resto. SE R=0, MCD(A,B) = B.

Rimpiazzare A con B and rimpiazzare B con R. Ritornare al passo precedente.

LA CONOSCENZA IMPERATIVA E’ LA RICETTA!

Page 12: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Cosa è una Computazione? Una computazione è una ricetta: una sequenza di

(semplici) istruzioni (si dice un programma). E’ possibile realizzare un processo meccanico in

grado di modellare l’insieme di queste computazioni?

Si, per esempio tramite un semplice circuito, ovvero un computer con un unico programma cablato (come un elettrodomestico, una lavastoviglie).

I computer General purpose sono piu complessi, si tratta di circuiti capaci di prendere in ingresso elaborare una ricetta (una lista di semplici istruzioni), riconfigurarsi e operare come prescrive la ricetta..

Page 13: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Come funzionano?

IR

Registers

ALU

CU

CPU

Von Neumann Machine

R

A

M

Op code. op1 op2 ris

Speed in Hertz

How many instructions in a second

Capacity in

Bytes (8 bit)

BUS

Instructions

PC

instr1instr2.........instrn

Program

PC

MEMORY

Page 14: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Programmi

I linguaggi di programmazione servono per scrivere programmi.

Il codice di un programma si dice anche codice sorgente (source code)

Un programma P scrittonel linguaggio L

L

P

Si tratta di codice sorgente di P e' scritto nel linguaggio L che in genere e' memorizzato su un file

....

......

....

.....

Page 15: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Linguaggi di Programmazione

Linguaggio di programmazione ad alto livello come Python, C, C++, Perl, Java, Lisp, Prolog.

Significa che esistono anche linguaggi a basso livello

linguaggio macchina assembler

Page 16: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Alto livello e basso livello

Linguaggi ad alto livello

....print b*h/2....

Assembler

LOAD r1,bLOAD r2,hMUL r1,r2DIV r1,#2RET

Linguaggi a aasso livello

0001001001000101001001001110110010101101001..

Linguaggio macchina

Page 17: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Il linguaggio macchina

Solo il linguaggio macchina e' eseguibile direttamente da un computer

Ogni computer ha un suo linguaggio macchina

M

Un computer con linguaggio macchina M

Page 18: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Esecuzione

Ogni computer e' in grado di eseguire programmi solo nel suo linguaggio macchina M

P

M

Page 19: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Problematiche

Difficile e dispendioso scrivere programmi in linguaggio macchina e in generale con i linguaggi a basso livello.

Accadeva una volta con i primi computer. Ora i linguaggi a basso livello si usano solo in poche

applicazioni molto specializzate.

Page 20: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Vantaggi dei linguaggi ad alto livello

E' più semplice programmare con i linguaggi ad alto livello.

I programmi si scrivono più velocemente. I programmi scritti con linguaggi ad alto livello

sono portabili (eseguibili su computer diversi con poche o nessuna modifica).

Mentre un programma in linguaggio macchina gira solo sul un certo tipo di computer.

Page 21: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Pero'

I programmi scritti nei linguaggi ad alto livello non si possono eseguire direttamente sui computer.

Un programma P scrittonel linguaggio ad alto livello Lnon può essere eseguito su uncomputer con linguaggio macchina M.

L

P

M

Page 22: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Esecutori per linguaggi di programmazione

Sono necessari dei programmi di supporto per eseguire il linguaggi ad alto livello:

Interpreti. Compilatori.

Page 23: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Interpreti

Un interprete per un linguaggio L permette di eseguire programmi scritti nel linguaggio L.

Un interprete per un linguaggio L e' un programma che prende come ingresso un programma sorgente scritto nel linguaggio L e lo esegue istruzioni dopo istruzione.

Un interprete può essere scritto in linguaggio macchina.

LM

Un interprete per il linguaggio L scritto in M.

Page 24: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Esecuzione di programmi python

L'interprete python permette di eseguire un programma P scritto in python in una macchina M.

NB. Python e' un linguaggio interpretato, in altre parole un linguaggio eseguito con un interprete.

Python

P

M

PythonM

Page 25: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

I complilatori

L'alternativa all'interprete è tradurre i programmi sorgenti in linguaggio macchina.

Questo è il ruolo del compilatore. Anche il compilatore è un

programma che traduce codice sorgente di un linguaggio ad alto livello in un linguaggio a basso livello (in genere linguaggio macchina).

L -> M

M

Un compilatore che traduce codice sorgente scritto nel linguaggio L in codice oggetto del linguaggio macchina M.

Page 26: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Un programma scritto in un linguaggio ad alto livello L

una volta tradotto da un compilatore diventa eseguibile.

L -> M

M

M

P

M

M

L

P

NB. anche il compilatoredeve essere eseguito (in questo caso) sulla macchina M per potereffettuare la traduzione.

Codice sorgenteCodice oggettoeseguibile

Page 27: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Ma cosa è un programma?

Un programma e’ una sequenza di istruzioni che specifica come eseguire un certo calcolo detto anche computazione.

Una computazione puo’ essere di tipo matematico ma puo' essere anche di tipo simbolico. Ad esempio cercare e rimpiazzare alcune frasi in un documento di testo.

Page 28: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Alcune tipologie di istruzioni di base comuni a più linguaggi di

programmazione

Input Output Matematiche Esecuzioni condizionali Ripetizioni (cicli) La programmazione si può vedere come un processo che scompone i

problemi da risolvere in tanti sotto problemi fino a quando questi sono risolvibili con una di queste istruzioni di base.

Page 29: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Bugs e Debugging!

Bug (o baco in italiano) Debugging (o debuggare! in italiano)

Si tratta di una capacita' necessaria per poter programmare.

NB. Non esistono mai programmi senza errori! Se un programma non funziona....si parte con il

debugging!

Page 30: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Tipologie di bugs (errori)

Errori sintattici --> “syntax error”il programma e' scritto male e non puo' essere eseguito. Se c'e' un errore sintattico l'interprete python termina immediatamente.

Errori a tempo di esecuzione (runtime) sono spesso chiamati eccezioni (exceptions). Rari nei programmi piccoli.

Errori semantici: il programma viene eseguito con successo e termina ma non fa' quello per cui era stato scritto. Questo vuol dire che il significato del programma, la semantica, e' sbagliato.

Page 31: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Debugging

Task creativo come quello di un investigatore. Come mai un programma non funziona? In genere si procede per ipotesi e si prova... il

programma corretto. Se l'ipotesi era sbagliata bisogna cercarne un altra

fino ad escludere tutte le possibilita'.

Page 32: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Linguaggi formali e naturali

Linguaggi naturali: sono le lingue normalmente parlate nelle varie nazioni.

Linguaggi formali: linguaggi progettati per applicazioni specifiche. Per esempio i linguaggi della matematica o della logica.

I linguaggi di programmazione sono linguaggi formali progettati per esprimere calcoli (computazioni)

Page 33: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Linguaggi Formali: la sintassi

Regole strette rispetto alla sintassi. Sintassi organizzata a due livelli:

token: singoli elementi che costituiscono un programma ad esempio: l'istruzione print, il numero 1, l'operatore +, l'operatore =, etc etc....

strutture di frase: regole grammaticali che dicono come comporre i token per realizzare un programma.

Il parsing e' quel processo che ci permette date le regole grammaticali di “comprendere” la struttura di una frase.

Page 34: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Differenze tra linguaggi formali e naturali

Ambiguità: Il linguaggio naturale e' pieno di ambiguita', mentre i linguaggi formali sono stati progettati per essere quasi o completamente non ambigui.

Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le stesse cose. I linguaggi formali sono meno ridondanti e più concisi.

Nonletteralita': I linguaggi naturali hanno molti idiomi e metafore che non sono presenti nei linguaggi formali.

Page 35: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Linguaggi formali semantica Semantica: esprime il significato dei costrutti del

linguaggio. Puo' essere informale (ad esempio un manuale) o

formale (espressa tramite formalismo matematico). Diverse tipologie di semantica:

Operazionale: descrive in modo preciso il funzionamento dei costrutti del linguaggio.

Dichiarativa: esprime il significato dei costrutti del linguaggio dicendo cosa esprimono ma non come funzionano.

Page 36: Elementi di Informatica Modulo I - cs.unibo.itgaspari/www/teaching/astro1.pdf · Ridondanza: tipicamente i linguaggi naturali sono molto ridondanti, ci sono molti modi per dire le

Classificazione dei Linguaggi di

Programmazione Linguaggi imperativi

Sequenze di istruzioni: la computazione si ottiene eseguendo le istruzioni una dopo l'altra (macchina di Von Neumann).

Linguaggi dichiarativi: Funzionali: la computazione e' espressa tramite il

calcolo di funzioni. Logici: la computazione e' espressa come

inferenza logica.