Sei sulla pagina 1di 6

Il problema di fondo

Dipartimento di Ingegneria dellInformazione

Universit degli Studi di Parma

Fondamenti di Informatica

Laurea in
Ingegneria Civile e Ingegneria per lambiente 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

Dall'arabo al-Khuwarizmi, a sua volta dal


greco arithms

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.

FI - Algoritmi e Programmazione

FI - Algoritmi e Programmazione

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

Il prodotto della codifica un programma

FI - Algoritmi e Programmazione

Un algoritmo pu non essere lunica soluzione al


problema

Codifica di un algoritmo

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

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 linsieme 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

Esecuzione
n

Algoritmo

Lesecuzione delle azioni nellordine


specificato dallalgoritmo consente di ottenere
i risultati che risolvono il problema a partire
dai dati in ingresso
Problema : algoritmo programma

Un algoritmo deve avere le seguenti propriet:


q

Metodo
risolutivo

Codifica in un
linguaggio di
programmazione

FI - Algoritmi e Programmazione

Algoritmo

FI - Algoritmi e Programmazione

Per definire un algoritmo necessario:


q

Il crivello di Eratostene
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.

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

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:

3,5,7,9,11,13,15,17,19
q 3 primo; lo elimino con tutti i suoi multipli:

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

Diagrammi di flusso
n

Diagrammi di flusso

Operazioni rappresentabili con un diagramma


di flusso

Ingresso/Uscita dati (rappresentate come schede )


q Operazioni sui dati (rappresentate come rettangoli)
q

Trasferimento di informazione (Assegnamenti)


n Calcolo di espressioni aritmetiche e logiche
Assunzione di decisioni (rappresentate come rombi)

Esecuzione di iterazioni, o cicli (combinazioni di

Un diagramma di flusso costituito da due tipi di


entit:
q

Nodi
n

Possono contenere costanti e variabili


FI - Algoritmi e Programmazione

Archi orientati
n

rettangoli e rombi)

rappresentano le operazioni e gli stati di inizio e fine


dellalgoritmo
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 larco
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

No

O1

No
O2

S
No

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

FI - Algoritmi e Programmazione

Stop
Var3

17

FI - Algoritmi e Programmazione

18

Esempio: Somma di N Numeri


Start

No

I<N

Il Linguaggio C

Var

N
Somma Somma + Var
II+1
I0
Somma 0

Somma

Stop
FI - Algoritmi e Programmazione

19

Caratteristiche

Caratteristiche

Linguaggio sequenziale (lineare), imperativo,


strutturato a blocchi

usabile anche come linguaggio di sistema

basato su pochi concetti elementari


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

Un elaboratore un manipolatore di simboli


Larchitettura 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

Tipi di dato primitivi in C


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

Un nome
Un valore modificabile

Il risultato di unespressione contenente delle


variabili, si ottiene sostituendo ad ogni variabile il
suo valore.

Lassegnamento (simbolo =) consente di modificare


il valore di una variabile
FI - Algoritmi e Programmazione

Caratteri
q

singolo carattere racchiuso fra apici

caratteri speciali

int a = 0, b = 100;
char a_capo = \n;

n
n

Costanti: possibile dichiarare un dato come


costante; il compilatore rifiuta un qualunque
assegnamento effettuato su di esso
q

ciao

FI - Algoritmi e Programmazione

n
n

hello\n

In C le stringhe sono semplici sequenze di


caratteri di cui lultimo 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

A C

const float Pi_greco = 3.14;


FI - Algoritmi e Programmazione

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

Consentono di aumentare notevolmente la potenza


espressiva.
Una variabile caratterizzata da:

25

Variabili e Costanti
n

ciao equivale alla sequenza {c,i,a,o,\0}

FI - Algoritmi e Programmazione

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

Classificazione degli operatori


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

Uguaglianza
Diversita`
Maggiore di
Minore di
Maggiore o uguale a
Minore o uguale a

==
!=
>
<
>=
<=

!
&&
||

3 ? 10 : 20

x ? 10 : 20
q
q

in particolare se condiz vera il valore assunto


dallespressione nel suo complesso espr1

FI - Algoritmi e Programmazione

Unario
Binario
Binario

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

lespressione denota

Connettivo logico

34

Espressioni condizionali : esempi

Una espressione condizionale introdotta


dalloperatore ternario

32

Anche esse denotano un valore intero da


interpretare come vero (1) o falso (0)

33

Espressioni condizionali

+
*
/
/
%

Espressioni e operatori logici

FI - Algoritmi e Programmazione

Unario
Binario
Binario
Binario
Binario
Binario
Binario

FI - Algoritmi e Programmazione

operatore

Inversione di segno
Somma
Differenza
Moltiplicazione
Divisione fra interi
Divisione fra reali
Modulo (fra interi)

31

Operatori relazionali

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