Fondamenti di Informatica - Università degli Studi di Parma

Il problema di fondo
Dipartimento di Ingegneria dell’Informazione
Università degli Studi di Parma
Fondamenti di Informatica
n
Laurea in
Ingegneria Civile e Ingegneria per l’ambiente e il territorio
Descrizione di un problema
þindividuazione di una soluzione
q
Algoritmi e Programmazione (in C)
q
q
Stefano Cagnoni e Monica Mordonini
Quale è il giusto punto di partenza? Cioè, di quali
dati abbiamo bisogno ?
Quali metodologie o tecniche utilizzare?
In quale ordine eseguire le operazioni consentite
da tali tecniche ?
FI - Algoritmi e Programmazione
Algoritmo
Algoritmo
n
Dall'arabo al-Khuwarizmi, a sua volta dal
greco arithmós
n
Un algoritmo è un metodo generale che
risolve in un tempo finito e con una sequenza
finita di passi qualsiasi istanza di un dato
problema di elaborazione.
n
FI - Algoritmi e Programmazione
FI - Algoritmi e Programmazione
4
Programma
n
Fase di descrizione (scrittura) di un algoritmo
attraverso un insieme ordinato di codici
(istruzioni), appartenenti a un qualche
linguaggio di programmazione, che
specificano le azioni da compiere
n
n
n
Il prodotto della codifica è un programma
FI - Algoritmi e Programmazione
Un algoritmo può non essere l’unica soluzione al
problema
3
Codifica di un algoritmo
n
E’ possibile “trovare” algoritmi anche per la
risoluzione di problemi non strettamente informatici
Esempi:
q Spiegare un percorso stradale
q Istruzioni per il montaggio di un mobile
q Istruzioni per la realizzazione di una torta
n
n
2
n
5
Testo scritto in accordo alla sintassi e alla semantica di
un linguaggio di programmazione
Un programma può non essere un algoritmo (basta che la
sequenza di mosse non sia finita cioè che il programma
non termini)...
... e tuttavia può essere molto utile (es. gestione semafori)
Un programma rappresenta l’insieme delle istruzioni che
descrivono un processo espresse in un qualche
linguaggio
Un processo trasforma un insieme di dati iniziali nei
risultati finali mediante una successione di azioni
elementari
FI - Algoritmi e Programmazione
6
1
Esecuzione
n
n
Algoritmo
L’esecuzione delle azioni nell’ordine
specificato dall’algoritmo consente di ottenere
i risultati che risolvono il problema a partire
dai dati in ingresso
Problema : þ algoritmo þ programma
n
Un algoritmo deve avere le seguenti proprietà:
q
q
q
Metodo
risolutivo
Codifica in un
linguaggio di
programmazione
FI - Algoritmi e Programmazione
q
7
Algoritmo
FI - Algoritmi e Programmazione
Per definire un algoritmo è necessario:
q
q
q
8
Il crivello di Eratostene
n
n
Finitezza: composto da un numero finito di passi
elementari.
Non ambiguità (determinismo): i risultati non variano in
funzione della macchina/persona che esegue
l'algoritmo.
Realizzabilità: deve essere eseguibile con le risorse a
disposizione.
Efficienza (auspicabile): eseguire il numero minimo di
operazioni
Condurre un'attenta analisi del problema ed
eventualmente suddividere il problema in
sottoproblemi più piccoli.
Individuare i possibili ingressi e precisare le uscite
(definizione dei dati).
Definire completamente e dettagliatamente la
sequenza dei passi che portano alla soluzione.
FI - Algoritmi e Programmazione
1. Si costruisca una sequenza ordinata dei numeri fra
2 e n.
2. Si estragga il primo numero dalla sequenza. E’
necessariamente un numero primo.
3. Si eliminino dalla sequenza tutti i multipli del
numero estratto al passo 2).
4. Se la sequenza non è vuota si torna la passo 2)
altrimenti si termina.
9
Il crivello di Eratostene
Si vogliono trovare tutti i numeri primi
compresi fra 2 e n (in modo efficiente).
FI - Algoritmi e Programmazione
10
Diagrammi di flusso (Flow-Chart)
Esempio
Sequenza iniziale (da 2 a 20):
n
2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,19,20
q 2 è primo; lo elimino con tutti i suoi multipli:
n
3,5,7,9,11,13,15,17,19
q 3 è primo; lo elimino con tutti i suoi multipli:
n
5,7,11,13,17,19
q 5 è primo; lo elimino con tutti i suoi multipli:
I diagrammi di flusso sono un formalismo
grafico per descrivere gli algoritmi.
I diagrammi di flusso scompongono in passi
successivi gli algoritmi.
Un diagramma di flusso è una descrizione più
efficace e meno ambigua di una descrizione
a parole.
…
q 19 è primo, la sequenza e’ vuota, termino.
FI - Algoritmi e Programmazione
11
FI - Algoritmi e Programmazione
12
2
Diagrammi di flusso
n
Diagrammi di flusso
Operazioni rappresentabili con un diagramma
di flusso
n
Ingresso/Uscita dati (rappresentate come schede )
q Operazioni sui dati (rappresentate come rettangoli)
q
q
Trasferimento di informazione (Assegnamenti)
n Calcolo di espressioni aritmetiche e logiche
Assunzione di decisioni (rappresentate come rombi)
q
Esecuzione di iterazioni, o cicli (combinazioni di
Un diagramma di flusso è costituito da due tipi di
entità:
q
Nodi
n
n
q
n
Possono contenere costanti e variabili
FI - Algoritmi e Programmazione
Archi orientati
n
rettangoli e rombi)
n
rappresentano le operazioni e gli stati di inizio e fine
dell’algoritmo
rappresentano con frecce il ‘flusso’ dei dati, quindi la
sequenza delle operazioni: il risultato prodotto da un nodo è
successivamente elaborato dal nodo a cui punta l’arco
uscente dal primo nodo
Una struttura di questo tipo è detta grafo (orientato)
13
Tipi di Nodi
FI - Algoritmi e Programmazione
14
Strutture di Controllo
Start
Var1
Var1 ← Espr1
Inizio
Lettura dati
Elaborazione / Assegnamento
Stop
Var1
Fine
Scrittura dati
O
No
C
Sì
C
O1
No
O2
C
Sì
No
Sì
O
Si
No
Espr1
Espr1
Espr1
Espr1
Espr1
Espr1
=
≠
>
≥
<
≤
Espr2
Espr2
Espr2
Espr2
Espr2
Espr2
While - Do
Ripete una stessa
operazione O
finché la condizione
C resta vera
Decisione
FI - Algoritmi e Programmazione
15
Programmazione Strutturata
n
n
n
Repeat - Until
Ripete una stessa
operazione O
finché la condizione
C non diventa vera
If - Then - Else
Se C è vera
esegue O1,
altrimenti esegue
O2
FI - Algoritmi e Programmazione
16
Esempio: Somma di Tre Numeri
Si compone di sequenze di azioni, decisioni
(if then, if then else) e cicli (while-do, repeat
until).
Ogni diagramma ha esattamente un ingresso
ed una uscita.
Ogni azione può essere
una operazione semplice
q una azione composta da altri diagrammi
strutturati
Start
Var1
Somma ← Var1 +Var2 + Var3
Somma
Var2
q
FI - Algoritmi e Programmazione
Stop
Var3
17
FI - Algoritmi e Programmazione
18
3
Esempio: Somma di N Numeri
Start
No
I<N
Sì
Il Linguaggio C
Var
N
Somma ← Somma + Var
I←I+1
I←0
Somma ← 0
Somma
Stop
FI - Algoritmi e Programmazione
19
Caratteristiche
Caratteristiche
n
Linguaggio sequenziale (lineare), imperativo,
strutturato a blocchi
n
usabile anche come linguaggio di sistema
n
basato su pochi concetti elementari
q
q
q
q
q
q
software di base
sistemi operativi
compilatori
...
FI - Algoritmi e Programmazione
q
q
q
21
Esempio di programma in C
FI - Algoritmi e Programmazione
22
Dati
n
#include <stdio.h>
int main() {
printf(" Hello World!! ");
return 0;
}
FI - Algoritmi e Programmazione
dati (tipi primitivi, tipi di dato)
espressioni
dichiarazioni/definizioni
funzioni
istruzioni/blocchi
23
n
Un elaboratore è un manipolatore di simboli
L’architettura fisica di ogni elaboratore è
intrinsecamente capace di trattare vari domini di dati
detti tipi primitivi
q
q
q
q
dominio dei numeri interi
dominio dei caratteri
dominio dei numeri reali
dominio delle stringhe di caratteri
FI - Algoritmi e Programmazione
24
4
Tipi di dato primitivi in C
n
n
n
n
n
Variabili
Caratteri
q char
caratteri ASCII (A<->65, {<->123, ..),
interi ([0,255], [-127,128]
Interi con segno (più lunghi di 8 bit)
q short
int
long
Naturali (interi senza segno)
q unsigned short
unsigned
unsigned long
Reali
q float
double
long double
I dati Booleani non esistono in C come tipo primitivo, si usano gli
interi :
q 0 indica falso
q 1 indica vero (in realtà qualsiasi valore diverso da 0 indica vero)
FI - Algoritmi e Programmazione
q
q
q
Un nome
Un valore modificabile
n
Il risultato di un’espressione contenente delle
variabili, si ottiene sostituendo ad ogni variabile il
suo valore.
n
L’assegnamento (simbolo =) consente di modificare
il valore di una variabile
FI - Algoritmi e Programmazione
n
Caratteri
q
singolo carattere racchiuso fra apici
q
caratteri speciali
n
int a = 0, b = 100;
char a_capo = ‘\n’;
n
n
n
Costanti: è possibile dichiarare un dato come
costante; il compilatore rifiuta un qualunque
assegnamento effettuato su di esso
q
n
“ciao”
FI - Algoritmi e Programmazione
n
n
“hello\n”
In C le stringhe sono semplici sequenze di
caratteri di cui l’ultimo sempre presente in
modo implicito è ‘\0’ (codificato come valore 0
su 8 bit)
q
a capo
tabulazione
apice
28
Espressioni
Una stringa è una collezione di caratteri
delimitata da virgolette
q
‘\n’
‘\t’
‘\’’
27
Stringhe
n
‘A’ ‘C’
const float Pi_greco = 3.14;
FI - Algoritmi e Programmazione
n
26
Costanti di tipi primitivi
Inizializzazione variabile : è possibile assegnare
un valore iniziale ad una variabile al momento della
sua dichiarazione (obbligatoria! Non si possono
usare variabili che non siano state dichiarate)
q
n
Consentono di aumentare notevolmente la potenza
espressiva.
Una variabile è caratterizzata da:
25
Variabili e Costanti
n
n
q
q
“ciao” equivale alla sequenza {‘c’,’i’,’a’,’o’,’\0’}
FI - Algoritmi e Programmazione
n
Il C è un linguaggio basato su espressioni
Una espressione è una notazione che denota un
valore mediante un processo di valutazione
Una espressione può essere semplice (una
costante, un simbolo di variabile) o composta
29
ogni linguaggio introduce un insieme di operatori che
permettono di aggregare altre espressioni (operandi) per
formare espressioni composte
esempi : 4*8-2arcsin(x)
a&&(b||c)
FI - Algoritmi e Programmazione
30
5
Classificazione degli operatori
n
n
Operatori aritmetici
In base al tipo di operandi (aritmetici,
logici,relazionali)
In base al numero degli operandi (unari,
binari, ternari..)
FI - Algoritmi e Programmazione
Relazione
C
Uguaglianza
Diversita`
Maggiore di
Minore di
Maggiore o uguale a
Minore o uguale a
==
!=
>
<
>=
<=
!
&&
||
3 ? 10 : 20
n
x ? 10 : 20
q
q
n
in particolare se condiz è vera il valore assunto
dall’espressione nel suo complesso è espr1
FI - Algoritmi e Programmazione
C
Unario
Binario
Binario
n
q
o il valore denotato da espr1
o quello denotato da espr2
in base al valore della espressione condiz
n
operatore
Not
And
Or
FI - Algoritmi e Programmazione
condiz ? espr1 : espr2
l’espressione denota
q
Connettivo logico
34
Espressioni condizionali : esempi
Una espressione condizionale è introdotta
dall’operatore ternario
q
32
Anche esse denotano un valore intero da
interpretare come vero (1) o falso (0)
33
Espressioni condizionali
q
+
*
/
/
%
Espressioni e operatori logici
FI - Algoritmi e Programmazione
n
C
Unario
Binario
Binario
Binario
Binario
Binario
Binario
FI - Algoritmi e Programmazione
n
q
operatore
Inversione di segno
Somma
Differenza
Moltiplicazione
Divisione fra interi
Divisione fra reali
Modulo (fra interi)
31
Operatori relazionali
n
Operazione
denota 10 se x è vera (diversa da zero)
oppure 20 se x è falsa
(x>y) ? x : y
q
35
denota sempre 10 (3 è sempre vera)
denota il maggiore fra x e y
FI - Algoritmi e Programmazione
36
6