programma - Dipartimento di Ingegneria dell`informazione e scienze

Fondamenti di Programmazione
-Presentazione del CorsoCdL Ingegneria Informatica e dell'Informazione

Sara Brunetti
[email protected]

0577 234850 1168

Ufficio 236
Fondamenti di
Programmazione
Orario di lezione:
Mercoledì: 14:00-16:00;

Giovedì: 14:00-17:00.

Aula: C/D est - Lab143(+124)

Ricevimento previa email

Il laboratorio NON basta
Lavoro a casa!
−
Compilatore C per Windows (DEVC++5.1.0)
3
Modalità d’esame
• Prova scritta con domande di Teoria
–
Deve essere superato per poter effettuare
la prova pratica
• Prova pratica al calcolatore di
programmazione in C
Testi consigliati
L.M.Barone, E.Marinari, G.Organtini,
F.Ricci-Tersenghi: Programmazione
Scientifica, ed. Pearson




B.W. Kernighan, D.M.Ritchie. Linguaggio C,
Jackson
B.W. Kernighan, R.Pike. Programmazione
nella pratica, Addison-Wesley
A. Bellini, A. Guidi. Linguaggio C-guida alla
programmazione, McGraw-Hill
...
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”
Introduzione
INFORMATIQUE =
INFORMATION AUTOMATIQUE

L'Informatica
Gli algoritmi
L'esecutore e il linguaggio
I programmi
L'Informatica e gli algoritmi
(informalmente)
•Descrizione di un procedimento o di un metodo
per la soluzione di un problema
Soluzione di ax2+bx+c=0
1. inizio dell’algoritmo;
2. acquisire dall’esterno i valori dei coefficienti a, b e c;
3. calcolare il valore ∆=b2-4ac;
4. se ∆<0, allora non esistono radici reali: eseguire 8;
5. se ∆=0, allora x1=x2=-b/2a: eseguire 7;
6. se ∆>0, allora x1=(-b+√∆)/2a e x2=(-b-√∆)/2a;
7. comunicare all’esterno i valori di x1 ed x2;
8. fine dell’algoritmo.
Algoritmo di Euclide
1. Siano x e y due numeri
2. Calcola il resto della divisione di x per y
3. Se il resto è diverso da 0, vai al passo 2
i.
Usa y come valore attuale di x, il resto come y
ii.
Altrimenti prosegui con il passo successivo
4. Il valore di y è la soluzione
•Sequenza finita di azioni elementari, eseguibili e non ambigue
Esecutori e linguaggi


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)
Se l'esecutore è un calcolatore, l'algoritmo è detto
programma
−
Il linguaggio utilizzato per descrivere l'algoritmo
è detto linguaggio di programmazione
−
L'unico linguaggio di programmazione che
un calcolatore capisce è il linguaggio
macchina
Il calcolatore

Macchina elettronica programmabile
Programma
Input
Calcolatore
Output
Compiti:
Eseguire operazioni logiche e/o numeriche
Operazioni complesse “spezzate” in operazioni elementari
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
Il calcolatore

Principali componenti hardware


Tipi di memoria
Processore
Motherboard
CPU
Hard Disk
14
Componenti hardware principali

Organizzazione hardware
standard
Dispositivi di input
−

Dispositivi di output
−
Memoria

Processore
(CPU)
Ad es.: monitor,
stampante
Insieme in uno stesso
contenitore
−
Dispositivi
di input
Ad es.: mouse, tastiera
Dispositivi
di output
Processore (CPU)


Motherboard
−
CPU
Central Processing
Unit
Interpreta e esegue le
istruzioni
Memoria
Due Tipi di Memoria

Principale (o centrale)
−
−
−
−

area di lavoro
mantiene temporaneamente programmi e dati (mentre il
programma è in esecuzione)
Accesso veloce (ordine di 100ns)
RAM; ROM
Ausiliaria (o memoria di massa)
−
−
−
−
permanente
salva programmi e risultati
Accesso lento (ordine di ms)
Esempi: hard disk, CD...
Organizzazione della
Memoria Principale

Bit = una cifra binaria
−



Valori 0 o 1
Byte = 8 bit
La memoria principale è
una lista di locazioni
numerate ciascuna di
un byte
Il numero di byte
utilizzato per
memorizzare un dato
varia con il tipo di dato...
indirizzo
contenuto
2021
11110000
2022
01111000
2023
10101011
2024
11110111
2025
01100011
2026
01010000
2027
11110100
...
...
Dato 1: 2 byte
Dato 2:1 byte
Dato 3:3 byte
Organizzazione della
Memoria Ausiliaria
Radice
File
File
Directory
Directory
File
Directory
File
Directory
Directory
File
Directory
File
Software

Sistema Operativo
−
Programma supervisore


Applicazioni esistenti
−
−
−

DOS, Windows, MacOS, UNIX, Linux
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
Windows o MacOS)
20
Il processore
Gli elementi della CPU (Central Processing Unit):

Unità di controllo:


Unità aritmetico-logica:


Legge le istruzioni dalla memoria e ne determina
il tipo
Esegue operazioni necessarie per eseguire le
istruzioni
Registri:
locazioni di memoria interna usata per i risultati
intermedi e info di controllo
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
22
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
Ad ogni ciclo di clock, sequenzialmente
– A seconda dell’istruzione si
interpretano i byte successivi
23
Esempio

Supponiamo che i seguenti codici binari
corrispondano alle seguenti istruzioni
24
Esempio
supponiamo che la memoria del nostro
computer sia così riempita (i registri a e b non
sono visibili):
25
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
26
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
27
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
28
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
29
Esempio
supponiamo che la memoria del nostro
computer sia così riempita:
viene interpretato come una istruzione
sum_ab
30
Esempio
supponiamo che la memoria del nostro
computer sia così riempita:
viene interpretato come una istruzione
out_a
31
Linguaggio di
programmazione



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
Linguaggi di programmazione

Linguaggio macchina:
−
−
−

Linguaggio assembly:
−
−

sequenze di 0 ed 1
rigoroso
essenziale
simbolico (es. set_a)
semplice traduzione aggiuntiva (assembler)
Però: dipende dal processore
−
Il programmatore deve conoscere in dettaglio le
caratteristiche della macchina che usa
−
Impossibile trasferire programmi da una
macchina ad un'altra
Linguaggi di programmazione

Linguaggio di programmazione ad alto livello
−
−
−

Indipendente dal processore utilizzato
È più semplice comprenderne la struttura
Meno errori
Gerarchia di linguaggi: da basso livello ad
alto livello
set_a,2
set_b,3
sum_ab
out_a
print 2+3
Linguaggi di
programmazione
Efficienza del programma
Programmazione
a basso livello
Programmazione
ad alto livello
Facilità e velocità di programmazione
Linguaggi di alto livello
Ad es. C, FORTRAN,C++,JAVA) ...altri

Linguaggi sintatticamente complessi
facili da usare dagli umani: la
traduzione in linguaggio macchina
viene fatta “dietro le scene”

sono definiti da una grammatica

Il compilatore verifica la correttezza
sintattica di un programma
conoscendone la grammatica
36