Sei sulla pagina 1di 61

Presentazione del Corso

Fondamenti di Programmazione
Corso di Studio: Ingegneria Informatica e dell'Informazione
Università di Siena, A.A. 2020-2021
Lezione 1
Sara Brunetti (Matricole A-L)
sara.brunetti@unisi.it
0577 2345886, Ufficio 236

Stefano Melacci (Matricole M-Z)


mela@diism.unisi.it
0577 233786, Ufficio 111
Sommario

Informazioni generali
Introduzione al corso
Motivazioni e Obiettivi
Algoritmi per la risoluzione di problemi
Programmi
Il calcolatore
• Hardware e software
Linguaggi di programmazione
Informazioni generali


Regolamento Covid-19 accesso aule e lezioni:
https://www.unisi.it/unisilife/notizie/coronavirus-2019-ncov-cosa-ce-da-sapere


Rilevamento presenze

Tracciamento
Informazioni generali

Orario delle lezioni e luogo:


Matricole A-L

Lunedì: 10:15-11:45 – aula 149

Martedì: 14:30-17:45 – Lab. 124(+143)


Eccezione: Martedì 29 Settembre la lezione
si terrà in aula 149
Informazioni generali

Orario delle lezioni e luogo:


Matricole M-Z

Lunedì: 10:15-11:45 – aula 8

Venerdì: 10:15-13:30 – Lab. 124(+143)


Eccezione: Venerdì 2 Ottobre la lezione si
terrà in aula A (padiglione esterno)
Informazioni generali

Webpage: http://elearning.unisi.it/

Ricerca del corso per titolo: FONDAMENTI DI PROGRAMMAZIONE
2020/2021

Qui troverete materiale didattico, informazioni sul corso, link al webex
meeting, link alle lezioni registrate,...


ATTENZIONE: attualmente l'accesso è pubblico, ma successivamente
richiederà l'iscrizione
Informazioni generali

Per l'iscrizione al corso:


Visitare: http://elearning.unisi.it/

Login con credenziali istituzionali (UnisiPass)
– È sufficiente la preiscrizione

Ricerca del corso per titolo: FONDAMENTI DI PROGRAMMAZIONE
2020/2021

Inserimento della chiave d'iscrizione:
FondamentiProgrammazione2021
Informazioni generali

Didattica mista (3 fasi):


1. accesso pubblico al corso e accesso alla lezione live
tramite link alla stanza personale
( https://unisi.webex.com/meet/nome.cognome)
2. accesso tramite iscrizione al corso e e accesso alla
lezione live tramite link alla stanza personale
( https://unisi.webex.com/meet/nome.cognome)
3. accesso ristretto tramite iscrizione e lezione live tramite
link webex raggiungibile dal sito del corso
Le lezioni saranno registrate
Libri di Testo
Manuali:

B.W. Kernighan, D.M.Ritchie. Linguaggio C, Jackson

B.W. Kernighan, R.Pike. Programmazione nella pratica,
Addison-Wesley

Testi consigliati:

J.R.Hanly, E.B.Koffman: Problem solving e
programmazione in C, APOGEO

P.Deitel, H.Deitel. Il Linguaggio C-Fondamenti e tecniche
di programmazione, PEARSON
Informazioni generali

Modalità d’esame:
A) Prova pratica (al calcolatore) di programmazione (linguaggio C)

Esercizi da svolgere in 3 ore

E' ammessa la consultazione di materiale didattico
B) Successivamente (alcuni giorni dopo e solo in caso di superamento
della prova pratica), orale con discussione della prova e domande sul
linguaggio C

Esercitazione:
 Durante il corso (circa a metà e a fine corso), due prove scritte con
domande di teoria
 Breve durata (1 ora)
 Non è ammessa la consultazione di materiale didattico
Messaggio chiave

Il laboratorio non basta!

Imparare a programmare richiede acquisizione di


praticità: lavoro a casa!

11
Sommario

Informazioni generali
Introduzione al corso
Motivazioni e Obiettivi
Algoritmi per la risoluzione di problemi
Programmi
Il calcolatore
• Hardware e software
Linguaggi di programmazione
Motivazioni

Cos'è l'ingegneria?
“Engineering is the creative application of
scientific principles used to plan,
build,direct,guide,manage,or work on
systems to maintain and improve our daily
lives.”
National society of Professional Engineers
https://www.nspe.org/
Alcuni esempi

 Sistemi di ausilio alla guida


 Identificazione delle linee di mezzeria
 Riconoscimento di targhe
 Sistemi di video-sorveglianza
 Analisi di transazione bancarie
 Videogiochi
 ...
Idea, Progettazione, Sviluppo
Obiettivi
Imparare le tecniche alla base della
programmazione (teoriche e pratiche) al fine
di risolvere problemi di ambito scientifico
Obiettivi
Imparare le tecniche alla base della
programmazione (teoriche e pratiche) al fine
di risolvere problemi di ambito scientifico
Obiettivi
Imparare le tecniche alla base della
programmazione (teoriche e pratiche) al fine
di risolvere problemi di ambito scientifico

Scientifico:
Tipo di problemi
Approccio
Obiettivi
Imparare le tecniche alla base della
programmazione (teoriche e pratiche) al fine
di risolvere problemi di ambito scientifico

Scientifico:
Tipo di problemi
Approccio

Programmazione:
Attività che consente di scrivere programmi
Sequenze di istruzioni “comprensibili al calcolatore”
Basi teoriche
Paradigmi

Obiettivi

Linguaggi e grammatiche

Compilatori

Imparare le tecniche alla base della


programmazione (teoriche e pratiche) al fine
di risolvere problemi di ambito scientifico

Problem solving
Scientifico:

Analisi del problema

Metodo risolutivo
Tipo di problemi 
Complessità
Approccio

Programmazione:
Attività che consente di scrivere programmi
Sequenze di istruzioni “comprensibili al calcolatore”
Sommario

Informazioni generali
Introduzione al corso
Motivazioni e Obiettivi
Algoritmi per la risoluzione di problemi
Programmi
Il calcolatore
• Hardware e software
Linguaggi di programmazione
Problem solving

Analisi del problema



Rappresentazione dei dati Informazione

Modellazione del problema

Mezzo per elaborarla


Procedimenti, algoritmi
Metodo risolutivo Mezzo fisico, calcolatore
L'informazione

Le entità (dati e risultati) su cui opera un calcolatore
prendono il nome di informazione

L'informazione si misura in bit

si/no, falso/vero, 0/1..
 Interruttore acceso/spento
 Tensione V=0/V=-0.8 (NIM)
 Condensatore Carico/Scarico

8 bit=1byte

Kilo: 2 10

Mega: 2 20

Giga: 2 30
L'Informazione e gli algoritmi

(informalmente)

Descrizione di un procedimento o di un metodo
per la soluzione di un problema

In modo non ambiguo

Da un esecutore
Algoritmo (un esempio)

1. inizio dell’algoritmo;
2. acquisire dall’esterno i valori dei coefficienti a, b e c;
3. calcolare il valore b2-4ac;
4. se , allora non esistono radici reali: eseguire 8;
5. se , allora x1=x2=-b/2a: eseguire 7;
6. se , allora x1=(-b+)/2a e x2=(-b-)/2a;
7. comunicare all’esterno i valori di x1 ed x2;
8. fine dell’algoritmo.
Algoritmo (un esempio)
1. inizio dell’algoritmo;
2. acquisire dall’esterno i valori dei coefficienti a, b e c;
3. calcolare il valore b2-4ac;
4. se , allora non esistono radici reali: eseguire 8;
5. se , allora x1=x2=-b/2a: eseguire 7;
6. se , allora x1=(-b+)/2a e x2=(-b-)/2a;
7. comunicare all’esterno i valori di x1 ed x2;
8. fine dell’algoritmo.
Es. a =1, b =5, c =2

Soluzione di ax2+bx+c=0
x1=(-5+)/2 ,x2=(-5-)/2
Algoritmo


Sequenza finita di istruzioni elementari

Eseguibili

Non ambigue
Esecutori e algoritmi


Un esecutore è definito in base a tre elementi:
 L'insieme delle istruzioni che capisce (sintassi)
 L'insieme delle operazioni che è capace di compiere;
 Quali operazioni associa ad ogni istruzione che riconosce
(semantica)
Sommario

Informazioni generali
Introduzione al corso
Motivazioni e Obiettivi
Algoritmi per la risoluzione di problemi
Programmi
Il calcolatore
• Hardware e software
Linguaggi di programmazione
Programmi


Se l'esecutore è un calcolatore, l'algoritmo è detto
programma

Il linguaggio utilizzato per implementare l'algoritmo è detto linguaggio
di programmazione

L'unico linguaggio di programmazione che un calcolatore capisce è il
linguaggio macchina


Programmatore: figura professionale che si occupa di
scrive programmi
Programmi


Sistema Operativo
 Programma “supervisore”

Windows, MacOS, UNIX, Linux, iOS, Android, ...

Applicazioni esistenti
 word-processor/editor
 web browser
 compilatori o assembler

Applicazioni create dall’utente
Il sistema operativo

Il sistema operativo è l’insieme di programmi che
gestisce il computer:
 permette l’interazione con il mondo esterno
(Input/Output)
 permette di eseguire programmi dell’utente
 bilancia le risorse del sistema


Sullo stesso PC possono convivere o alternarsi
diversi sistemi (es.Linux e Microsoft Windows o
MacOS)

32
Microsoft Windows

Prodotto da Microsoft
Gestisce architetture hardware basate su CPU Intel x86 (da
80386)

Windows 1.0.1 Windows 10


(1985) (2015)
33
Versioni Windows
Albero genealogico di Windows
Linux

Basato su UNIX, nasce nel ‘91, grazie a Linus Torvalds,


studente finlandese dell’Università di Helsinki
Sviluppato su piattaforma Intel 80386, fu distribuito da
subito su Internet
Free
Open Source
Portabile

Molteplici distribuzioni esistenti (Ubuntu, Red Hat,


Slackware, Suse)
Unix/Linux
Il mondo Macintosh

Nel 1984 Apple propone il Mac


Mac OS, il sistema operativo
E’ il primo sistema a supportare un’interfaccia grafica e il mouse

Nel 2000 Apple produce il nuovo sistema operativo Mac


OS X, basato su UNIX, poi rinominato in “macOS”

macOS “Mojave” è la quindicesima versione del sistema


operativo macOS sviluppato da Apple Inc (4 giugno 2018)
Sommario

Informazioni generali
Introduzione al corso
Motivazioni e Obiettivi
Algoritmi per la risoluzione di problemi
Programmi
Il calcolatore
• Hardware e software
Linguaggi di programmazione
Software e hardware

Software: Istruzioni per far eseguire ai computer delle
azioni e prendere decisioni

Hardware: Computer

Il software controlla l'hardware

Per risolvere problemi complessi abbiamo bisogno di
avvalerci della velocità di calcolo di un computer

Pc possono eseguire miliardi di calcoli in un secondo

Più di quanto un essere umano possa eseguire in tutta la
sua vita!!!

Il supercomputer Summit è in grado di eseguire oltre
200000 miliardi di miliardi di “calcoli” al secondo
(sviluppato da IBM)
Il calcolatore “in astratto”

Macchina
Programma
elettronica
programmabile

Input Calcolatore Output

Compiti:
Eseguire operazioni logiche e/o numeriche
Operazioni complesse “spezzate” in operazioni elementari
Componenti hardware principali

Dispositivi di input
Organizzazione hardware  Ad es.: mouse, tastiera,
touch screen,dispositivi
standard audio...

Dispositivi di output
Memoria  Ad es.: monitor,
stampante

Insieme in uno stesso
Dispositivi Dispositivi contenitore
Processore  Processore (CPU)
di input (CPU) di output

Central Processing Unit

Interpreta e esegue le
Motherboard istruzioni
 Memoria

CPU
Due Tipi di Memoria

•Principale (o centrale)/memorie elettroniche a semiconduttore


con tecnologia VLSI
 mantiene temporaneamente programmi e dati (mentre il
programma è in esecuzione)
area di lavoro, capacità limitata (2-8GB,128GB)
 Accesso veloce (ordine di 100ns)
 RAM; ROM

Ausiliaria (o memoria di massa)/memorie magnetiche o


ottiche
 permanente
 salva programmi e risultati
 Capacità (2-6TB), accesso lento (ordine di ms)
 Esempi: hard disk, CD, DVD, memorie flash
Organizzazione della
Memoria Principale
Byte = 8 bit
La memoria principale è
una lista di locazioni (o
celle) numerate
ciascuna di un byte
Il dato memorizzato in una
cella è il suo contenuto
Il numero di byte utilizzato
per memorizzare un
dato varia con il tipo di
dato...
Organizzazione della
Memoria Principale
Byte = 8 bit
La memoria principale è
una lista di locazioni (o
celle) numerate
ciascuna di un byte
Il dato memorizzato in una
cella è il suo contenuto
Il numero di byte utilizzato
per memorizzare un
dato varia con il tipo di
dato.. Una locazione di memoria
Accesso tramite indirizzo contiene sempre qualcosa!
Organizzazione della
Memoria Ausiliaria
Radice

File Directory Directory

File Directory Directory

Directory File File

File Directory

File
Organizzazione della
Memoria Ausiliaria
Organizzazione ad albero
Ogni nodo dell'albero è un file
Una directory indicizza più file
Un file è identificato da un path name assoluto
(dalla radice della gerarchia), o relativo (dalla
posizione dell'utente nel file system)

c:\Users\Mario\Documents\Mario\Didattica\Fondamenti di Programmazione\Lezione1.pdf

.\Didattica\Fondamenti di Programmazione\Lezione1.pdf
Central Processing Unit (CPU)
Dispositivo realizzato da uno o più chip (multiprocessori)
capace di eseguire istruzioni
Gli elementi della CPU:

Unità di controllo:
Coordina e supervisiona le operazioni delle altre unità

legge le istruzioni dalla memoria e ne determina il tipo


Unità aritmetico-logica:
Esegue operazioni necessarie per eseguire le istruzioni
(somme,sottrazione,moltiplicazione,divisione,meccanismi di
decisione)

Registri: locazioni di memoria interna usata per i risultati
intermedi e info di controllo (decine di byte)
Il processore


La CPU può svolgere un insieme limitato di
operazioni:

Spostamento di dati
(accesso,lettura,scrittura,copia)
– Leggi un byte da una locazione di memoria

Calcolo
– Somma tra loro il contenuto di due registri

Controllo di flusso
– Salta ad una locazione di memoria

49
Il processore

Ad ogni istruzione è associato un codice di N bit
– (codice operazione, parametro)

La CPU inizia caricando il byte presente nella
locazione 0 e lo interpreta come istruzione


Segnale di clock
– Utilizzato per sincronizzare il funzionamento dei dispositivi elettronici
digitali all’interno della CPU
– Frequenze di clock nei personal computer moderni: 2-3GHz
• Ad ogni ciclo di clock, sequenzialmente, a seconda
dell’istruzione si interpretano i byte successivi

50
Esempio


Supponiamo che i seguenti codici binari
corrispondano alle seguenti istruzioni

51
Esempio

supponiamo che la memoria del nostro


computer sia così riempita (i registri a e b non
sono visibili):

52
Esempio

supponiamo che la memoria del nostro


computer sia così riempita (i registri a e b non
sono visibili):

viene interpretato come una istruzione


set_a
Di conseguenza il byte successivo
contiene il parametro 11111110

53
Esempio

supponiamo che la memoria del nostro


computer sia così riempita (i registri a e b non
sono visibili):

viene interpretato come una istruzione


set_a
Di conseguenza il byte successivo
contiene il parametro 11111110

Risultato: il registro “a” contiene


il valore 00000010

54
Esempio

supponiamo che la memoria del nostro


computer sia così riempita:

viene interpretato come una istruzione


set_b
Di conseguenza il byte successivo
contiene il parametro 11111111

55
Esempio

supponiamo che la memoria del nostro


computer sia così riempita:

viene interpretato come una istruzione


set_b
Di conseguenza il byte successivo
contiene il parametro 11111111

Risultato: il registro b contiene


il valore 00000011

56
Esempio

supponiamo che la memoria del nostro


computer sia così riempita:

viene interpretato come una istruzione


sum_ab

57
Esempio

supponiamo che la memoria del nostro


computer sia così riempita:

viene interpretato come una istruzione


out_a

58
Chi coordina CPU e memorie?


Gli O.S. sono costituiti da un insieme di moduli,
ciascuno dedicato a svolgere una determinata funzione

L’insieme dei moduli per la gestione della CPU e della
memoria centrale è il kernel
Interfaccia utente

Gestore del
Gestore dell’I/O
File System

Gestore della
Gestore dei Processi
Memoria Centrale
KERNEL

59
Sommario

Informazioni generali
Introduzione al corso
Motivazioni e Obiettivi
Algoritmi per la risoluzione di problemi
Programmi
Il calcolatore
• Hardware e software
Linguaggi di programmazione
Il linguaggio macchina


Il linguaggio macchina è il linguaggio della
CPU

Un programma in linguaggio macchina è una
sequenza di bit che indica alla CPU le azioni
da compiere sui dati (codificati in bit)

Linguaggio di programmazione (LP):
 Informalmente: modo di esprimere le
sequenze di operazioni da far svolgere a
un computer mediante istruzioni