1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono...

113
1 Dal problema all’ Dal problema all’ algoritmo algoritmo

Transcript of 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono...

Page 1: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

1

Dal problema all’ Dal problema all’ algoritmoalgoritmo

Page 2: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

2

Analisi e programmazione Analisi e programmazione

Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere formulato in modo opportuno, perché sia possibile utilizzare un elaboratore per la sua soluzione.

Per analisi e programmazioneanalisi e programmazione si intende l’insieme delle attività preliminari atte a risolvere problemi utilizzando un elaboratore, dalla formulazione del problema fino alla predisposizione dell’elaboratore

Scopo dell’analisi:Scopo dell’analisi: definire un algoritmoalgoritmoScopo della programmazione:Scopo della programmazione: tradurre l’algoritmo in un programma utilizzando un programma utilizzando un linguaggio di programmazionelinguaggio di programmazione

Page 3: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

3

Definizione di AlgoritmoDefinizione di Algoritmo

Un algoritmo è sequenza finita di azioni elementari che descrivono la soluzione di un problema in modo completoOgni algoritmo è un insieme finito di azioni e deve terminare dopo un numero finito di istruzioni.Completo: deve considerare tutti i casi possibili che si possono verificare durante l’esecuzione e per ogni caso può indicare la soluzione da seguire.

Page 4: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

4

Un algoritmo non può essere eseguito direttamente Un algoritmo non può essere eseguito direttamente dall’elaboratoredall’elaboratoreProgramma Programma insieme di istruzioni (o comandi) insieme di istruzioni (o comandi) che traducono l’algoritmo in un linguaggio comprensibile ed eseguibile da parte di un elaboratore

Un programma è strutturato in: - una parte di dichiarazione in cui si dichiarano tutte le

variabili del programma e il loro tipo (intero, reale, stringa, ecc.) - una parte che descrive l’algoritmo risolutivo utilizzato Linguaggio di programmazione Linguaggio di programmazione linguaggio che permette la

formalizzazione di un algoritmo in un programma traducendolo con un insieme di istruzioni (codice)

Programma=algoritmo + dati Programma=algoritmo + dati

Page 5: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

5

Le fasi del procedimento di Le fasi del procedimento di analisi analisi e programmazionee programmazione

Risultati

Problema

ANALISIANALISI

ELABORAZIONEELABORAZIONE Dati

PROGRAMMAZIONPROGRAMMAZIONEE

Algoritmo

Programma

Page 6: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

6

Dati su cui opera un Algoritmo:Dati su cui opera un Algoritmo:Costanti e variabiliCostanti e variabili

I dati su cui opera un algoritmo sono costanticostanti e variabilivariabili Una costantecostante è una locazione (cella) di memoria che mantiene lo stesso valore per tutta la durata dell'esecuzione del programma. Una variabilevariabile identifica una locazione (cella) di memoria destinata a contenere dei dati, che possono essere modificati nel corso dell'esecuzione di un programma.

Una variabile è caratterizzata da un nome (una sequenza di caratteri e/o cifre) e da un tipo di variabile numerica, alfabetica o alfanumerica (in Visual Basic: integer, double, string).

Rappresentazione di una variabile

NomeNome

ValoreValore

Page 7: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

7

Assegnazione Assegnazione

L’istruzione di assegnazioneassegnazione definisce il valore di una variabile, che resta inalterato fino all’assegnazione successiva Es. A 5 (a=5)

L’assegnazione si rappresenta con il simbolo “” nome di variabile nome di variabile espressione espressione

Es. A 5 si legge “assegna alla variabile A il valore di 5 5

I nomi delle variabili possono essere scelti in modo arbitrario, ma è opportuno selezionare nomi significativi del contenuto della variabile (senza spazi o caratteri speciali)

Page 8: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

8

EsempiEsempi

Assegnazione Assegnazione

x x+3

c

4

x

14

x17

Dopo l’assegnazione

Prima dell’assegnazione

a b*c

b

6Prima dell’assegnazione

4

ca

24

b

6Dopo l’assegnazione

a = b*c

x = x+3

Page 9: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

9

Le Istruzioni operativeLe Istruzioni operative in un programma possonono essere:

Istruzioni di controlloIstruzioni di controllo, che controllano il verificarsi di condizioni specificate e, in base al risultato del controllo, determinano il flusso di istruzioni da eseguire

Esistono tre tipi di istruzioni di controllo: sequenza, selezione (alternativa), ripetizione (ciclo)

Istruzioni di ingresso/uscitaIstruzioni di ingresso/uscita, che specificano come debba essere effettuata una trasmissione di dati tra l’algoritmo risolutivo e l’ambiente esterno

Istruzioni di inizio/fine esecuzioneIstruzioni di inizio/fine esecuzione, che indicano l’inizio/la fine dell’algoritmo

Le istruzioni Le istruzioni

Page 10: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

10

I diagrammi a blocchiI diagrammi a blocchi (flowchart) (flowchart)

Il linguaggio dei diagrammi a blocchidiagrammi a blocchi è un possibile formalismo per la descrizione di algoritmi; il diagramma a blocchi, o flowchartflowchart, è una rappresentazione grafica dell’algoritmo

Un diagramma a blocchi definisce il flussoflusso sequenziale di operazioni da eseguire per realizzare la soluzione del problema, descritta nell’algoritmo

 

Ogni istruzione è rappresentata all’interno di un blocco la cui forma grafica è determinata dal tipo di istruzione (blocco di elaborazione, di lettura o di scrittura, di scelta, ecc.)

 

I blocchi sono collegati tra loro da linee di flussolinee di flusso, munite di frecce, che indicano il susseguirsi di azioni elementari

Page 11: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

11

I diagrammi a blocchiI diagrammi a blocchi

Blocchi Blocchi elementarielementari

Blocco di lettura (input)Blocco di lettura (input)

leggi xleggi x inizioinizio

Blocco Blocco inizialeiniziale Blocco di elaborazioneBlocco di elaborazione

finefine

Blocco finale Blocco finale

Blocco di Blocco di scrittura scrittura (output)(output)

scriviscrivi X X

Blocco di Blocco di controllocontrollo

falsovero

scrivi xscrivi xCondizione

Elaborazione

Page 12: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

12

Un diagramma a blocchi è un insieme di blocchi elementari composto da:

un blocco inizialeun blocco finaleun numero finito di blocchi di elaborazione e blocchi di lettura/scritturaun numero finito di blocchi di controllo

I diagrammi a blocchiI diagrammi a blocchi

Page 13: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

13

Page 14: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

14

Il valore di una variabile deve appartenere all’insieme insieme di definizionedi definizione, su cui si opera (numeri interi, reali o stringhe).Una variabile è caratterizzata dal nomenome e dal suo valore valore che è = 0 in fase di definizione dell’algoritmo, ma assume poi valori ben precisi durante ogni esecuzione

EsempioEsempio: Nell’algoritmo di risoluzione delle equazioni di 2° grado, a, b, c non corrispondono a nessun valore finché non si esegue l’algoritmo per trovare le soluzioni di una specifica equazione:

ad esempio x29x4=0: in fase di esecuzione il valore delle variabili a,b,c sarà:

a=1, b= 9, c= 4 e nell’istruzione =b24ac viene calcolato il valore della variabile

(discriminante)

Costanti e variabili Costanti e variabili

Page 15: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

15

Page 16: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

16

Page 17: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

17

Esempio di diagramma a blocchi

N

S =

A

S= S+A

N=N-1

N= S

FINE

SINO

inizioSomma di una sequenza di N numeri

Page 18: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

18

Linguaggio di progetto o pseudocodifica

E un linguaggio formale con regole prive di ambiguità che esprimono i vari tipi di istruzioni. Es.

inizio

input N (Leggi N)

S

ripeti

input A

S S+A

N N-1

finché N=

output S

fine

Page 19: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

19

Algoritmo Un algoritmo non può essere eseguito direttamente Un algoritmo non può essere eseguito direttamente

dall’elaboratoredall’elaboratore

Codifica dell’algoritmo Programma Programma: sequenza ordinata di istruzioni, scritte in un

determinato linguaggio di programmazione, che specificano le azioni da compiere dall’esecutore (il computer).

Programma

ALGORITMI e PROGRAMMI

Algoritmo

Page 20: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

20

Un programma è strutturato in: - una parte dichiarativa in cui si dichiarano tutte le

variabili del programma e il loro tipo (intero, reale, stringa, ecc.)

- una parte che descrive l’algoritmo risolutivo utilizzato

Linguaggio di programmazione Linguaggio di programmazione linguaggio che permette la formalizzazione di un algoritmo in un programma traducendolo con un insieme di istruzioni (codice)

Programma = algoritmo + dati Programma = algoritmo + dati

Page 21: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

21

ALGORITMI e PROGRAMMI

PROBLEMA ALGORITMO PROGRAMMA

metodo risolutivo

linguaggio di programmazione

Page 22: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

22

LINGUAGGI: SINTASSI E SEMANTICA

Sintassi: l’insieme delle regole che consentono di scrivere parole e frasi riconoscibili come appartenenti ad un determinato linguaggio.

(collegamento ordinato delle parole nel discorso)

Semantica : la disciplina che studia il significato delle parole e delle frasi.

Page 23: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

23

LINGUAGGI a BASSO e ALTO LIVELLO

Linguaggi di Programmazione a basso livelloLinguaggi di Programmazione a basso livello impostano la soluzione di un problema a partire da “passi elementari”: risolvono il problema con efficienza ma sono molto vasti per risolvere algoritmi complesssi. Esempio: Assembly

Linguaggi di Programmazione ad alto livelloLinguaggi di Programmazione ad alto livello (di astrazione) le istruzioni corrispondono ad operazioni più complesse esempi: Pascal, Basic, C, C++, Java, Visual Basic

ASTRAZIONE: processo di aggregazione di informazioni e dati per costruire un modello del mondo esterno.

Page 24: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

24

Linguaggi di programmazione

Problema

Algoritmo

Programma sorgente

Programma traduttore

Programma oggetto

Elaborazione

Risultati

Dalla formulazione del problema

alla sua soluzione

Page 25: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

25

Linguaggi Orientati

agli Oggetti

LinguaggiIbridi

Linguaggi di Programmazione Imperativa

Evoluzione dei Linguaggi

Esistono numerosi linguaggi differenti per funzionalità e tecnologia

metà anni ’50FORTRAN

metà anni ’60BASIC

1968Pascal

1974C

1990C++

1994Java

2000Java

1991VB

anni ‘60COBOL

Page 26: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

26

Programma sorgente

Programma sorgenteL’algoritmo risolutivo viene trasformato in un programma che può contenere:

Istruzioni di dichiarazione Istruzioni di

assegnazione

Istruzioni di controllo

Istruzioni di input e output

Descrivono le variabili utilizzate dal programma, definendone tipo e struttura

Consentono di assegnare alle variabili un valore

Strutture alternativa e strutture di ripetizione o cicli

Richiedono l’ingresso o l’uscita di una informazione da una periferica alla memoria centrale e viceversa

Page 27: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

27

La traduzione da Linguaggio di programmazione a Linguaggio macchina viene fatta da un programma traduttore di linguaggioDue diversi approcci alla traduzione basata su interprete basata su compilatore

I linguaggi di programmazione che richiedono un interprete sono definiti linguaggi interpretati, mentre quelli che richiedono un compilatore sono chiamati linguaggi compilati

Programma

Page 28: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

28

Programma

Linguaggi Interpretati La traduzione avviene per mezzo di un interprete, che traduce una riga del

programma per volta, ed la esegue immediatamente, Analogia: gli interpreti simultanei nelle trasmissioni televisive o nei

congressi Vantaggi: controllo del codice è immediato Svantaggi: i programmi scritti con linguaggi interpretati, per essere eseguiti,

hanno bisogno dell'interprete (es. Visual Basic, Java)

Linguaggi Compilati La traduzione avviene per mezzo di un compilatore, che traduce per intero

il programma in un nuovo oggetto Analogia: i traduttori di libri o riviste Vantaggi: generano un eseguibile, che può essere eseguito senza bisogno

di altri supporti (es. C) Svantaggi: correggere gli errori richiede più tempo

Page 29: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

29

Linguaggi compilati C, C++, Fortran

Linguaggi interpretati Perl, PHP, Visual Basic

Linguaggi interpretati e compilati Java

Page 30: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

30

Compilazione

Compilazionecodicesorgentees:primo.c

Collegamento

codiceoggetto(ling. macchina)es: primo.obj

librerieesterneprecompilatees: stdio.h

Compilatore

Linker

codiceeseguibilees: primo.exe

Page 31: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

31

Ambiente di sviluppo

E’ necessario disporre di vari strumenti

Scrittura del codice del programma editor di testi (es: Blocco Note o TextPad)

Compilatore e Linker delle librerie DevC++ Compilatore Borland BCC 5.5 (si utilizza dalla

shell DOS)

Page 32: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

32

Il Mio primo programma

/* Calcolo area rettangolo */

#include <iostream>

int main(){

using namespace std;

int base=13;

int altezza=5;

int AreaRettangolo;

AreaRettangolo = base*altezza;

cout << "Area rettangolo con base " << base;

cout << " e altezza " << altezza;

cout << " e' uguale a " << AreaRettangolo << endl;

}

Page 33: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

33

Modifichiamo il primo programma

/* Calcolo area rettangolo */

#include <iostream>

int main(){

using namespace std;

int base=13;

int altezza=5;

int AreaRettangolo;

cout<< "Iserisci base ";

cin>>base;

cout<< "Inserisci altezza ";

cin>>altezza;

AreaRettangolo = base*altezza;

cout << "Area Rettangolo: " << AreaRettangolo << endl;

}

Page 34: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

34

Struttura di Base di un Programma

#include <iostream><altre eventuali direttive><altre eventuali direttive>

void main(){void main(){

<dichiarazioni><dichiarazioni>

<operazioni><operazioni>

}}

Page 35: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

35

Direttive di preprocessore

servono ad “includere” nel programma codice già scritto (librerie)

in particolare: #include <iostream>

((in C #include <stdio.h>)in C #include <stdio.h>)include il codice relativo alle operazioni di lettura e stampa dei dati da console

è necessaria un’operazione di collegamento tra le librerie incluse ed il codice del programma

(linker)

Page 36: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

36

Tipi di Dato e Dichiarazione variabili

Tipi di datoParole chiave: int float double bool char string

Dichiarazione variabili

Esempi: int x, y; string cognome; bool trovato;

Page 37: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

37

Dichiarazioni di Costanti

Parole chiave: constEsempio: const int N=10; const float pigreco = 3.14; const char segno = ‘X’; const string corso = “Informatica”;

Page 38: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

38

Operatori e Funzioni Predefinite

Principali operatori: + - * / % && || ! == > >= < <= != Principali funzioni predefinite: abs() pow() sqrt() exp() cos() atan() log() log10()

Page 39: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

Istruzioni di Assegnazione

Esempio:

int x,y;

bool z;

x = 3;

x = x+1;

x = pow(y,2);

z = (x>y) && (y <=10);

39

Page 40: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

Procedure Predefinite di Lettura e Stampa

Lettura da tastiera:

>> operatore di lettura cin input stream

Stampa su video:

<< operatore di stampa cout output stream

Esempio:

float x;

cout << “Immetti il valore di x: “;

cin >> x;

cout << “Il valore di x e’ :” << x;

40

Page 41: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

Strutture di Controllo Istruzioni Condizionali

Parole chiave: if ..... else

Esempio1:

int x,y;

if (x>2) cout << x;

41

Esempio2:if ((x==3) || (x==5)) { cout << x; x = x+1; };

Esempio3:if ((x==3) || (x==5)) { cout << x; x = x+1; };

Esempio4:#include <iostream>int main(){using namespace std; int primo, secondo,maggiore, minore; cout<<"Inserire primo numero"; cin>>primo; cout<<"Inserire secondo numero"; cin>>secondo; if (primo<=secondo) {minore=primo; maggiore=secondo;}else{ minore=secondo; maggiore=primo; } cout<<"Numero minore"<<minore<<endl; cout<<"Numero maggiore"<<maggiore<<endl;}

Page 42: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

Cicli di tipo “FOR”

Parole chiave: for

Esempio1:

#include <iostream>

int main(){

int i,j;

for (i=1; i<=10; i++)

cout << i << endl;

42

for (i=1; i<=10; i++) { for (j=1; j<=10; j++) cout << i*j<<"\t"; cout << endl; }}

Page 43: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

Cicli di tipo “WHILE”

Parole chiave: while

Esempio1:

int main(){

using namespace std;

int i,j;

i=1;

while (i<=10)

{ cout << i << endl;

i=i+1;

}

43

Esempio2: i=1;while (i<=10) { j=1; while (j<=10) { cout << i*j<<" "; j=j+1; } cout << endl; i++; }

Page 44: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

Sottoprogrammi Procedure

#include <iostream.>

using namespace std;

void stampaLogo() // dichiarazione e definizione della procedura{

cout<<endl;

cout<<"********************************"<<endl;

cout<<"*** Classe II Informatica ***"<<endl;

cout<<"*** Itis Scano - Monserrato***"<<endl;

cout<<"********************************"<<endl;}

int main(){

stampaLogo(); // chiamata della procedura

cout<<endl<<"Programma di prova"<<endl;

stampaLogo(); // chiamata della procedura

system ("PAUSE");

return 0; }

44

Page 45: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

Funzioni #include <iostream.h>

int addizione (int a, int b); // Prototipo della funzione addizione

int main() {

int z= addizione (5,3);

cout<<"il risultato e': "<<z<<endl;

system("PAUSE");

return 0;

}

int addizione (int a, int b) { // Funzione

int r;

r=a+b;

}

45

Page 46: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

Esercizio

#include <iostream.h>

#include <math.h>

int main ()

{int a;

a = pow(2, 3); // 2 e' la base e 3 e' l'esponente

cout << a<< endl;

system("Pause");

return 0;

}

46

Page 47: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

47

Fine

Page 48: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

48

La programmazione strutturata

È stato dimostrato (Teorema fondamentale della programmazione strutturata di Jacopini e Böhm) che ogni programma può essere codificato attenendosi esclusivamente a tre strutture fondamentali:

1. Sequenziale

2. Condizionale o alternativa

3. Iterativa o di ripetizione

v f

Page 49: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

49

Le strutture di controllo

• La sequenza

• Struttura condizionale o alternativa

• Il ciclo con controllo alla fine

• Il ciclo con controllo all'inizio

• Il ciclo con contatore

Page 50: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

50

La sequenza

È una struttura di controllo che permette di inserire una successione di elaborazioni che saranno eseguite una di seguito all'altra.

Sintassi

Le istruzioni vengono scritte una di seguito all'altra, una per riga:

istruzione1

istruzione2

... ….

Page 51: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

51

La Struttura alternativa

• È una struttura di controllo che permette di inserire una scelta tra due possibilità, che porteranno a due elaborazioni distinte (ovvero due distinti percorsi nel diagramma di flusso).

•Se la condizione risulterà vera, saranno eseguite le istruzioni del ramo VERO, se invece risulta falsa, saranno eseguite le istruzioni del ramo FALSO.

Page 52: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

52

Struttura di controllo iterativa o ciclo

Il ciclo con controllo alla fine

È una struttura di controllo che permette di ripetere un blocco di istruzioni finché la condizione indicata è falsa. L'uscita dal ciclo si ha solo quando la condizione diventa vera.In questo tipo di ciclo il blocco delle istruzioni viene sempre eseguito almeno una volta.

Page 53: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

53

Struttura di controllo iterativa o ciclo

Il ciclo con controllo all'inizio

È una struttura di controllo che permette di ripetere un blocco di istruzioni fintanto che la condizione indicata risulta vera. L'uscita dal ciclo si ha solo quando la condizione diventa falsa.In questo tipo di ciclo il blocco delle istruzioni può non essere mai eseguito, a seconda della condizione impostata.

Page 54: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

54

Strutture di controllo

Mediante i blocchi fondamentali, è possibile costruire delle strutture tipicamente utilizzate per il controllo del flusso di esecuzione dell’algoritmo:

• Selezione• Iterazione o cicli

SelezioneEsprime la scelta tra due possibili azioni

Page 55: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

55

Strutture di controlloIterazione o cicli

Esprime la ripetizione di una sequenza di istruzioni.

Nel caso piu` generale, e` costituita da:

Inizializzazione: assegnazione dei valori iniziali alle variabili caratteristiche del ciclo (viene eseguita una sola volta);

Corpo: esecuzione delle istruzioni fondamentali del ciclo che devono essere eseguite in modo ripetitivo;

Modifica: modifica dei valori delle variabili che controllano l'esecuzione del ciclo (eseguito ad ogni iterazione);

Controllo: determina se il ciclo deve essere ripetuto o meno.

Page 56: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

56

Il ciclo con contatore FOR

È una struttura di controllo che permette di ripetere un blocco di istruzioni un numero prestabilito di volte.

La variabile contatore verrà inizializzata con il valore minimo (I=0) e, alla fine di ogni ripetizione (NEXT), la variabile verrà incrementata di uno.

Solo quando la variabile assume un valore superiore al massimo previsto si uscirà dal ciclo.

I<NUM

I=0 I=0

I=I+1

I=I+1

ISTRUZIONI

ISTRUZIONI

I>NUM

Page 57: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

57

Un ciclo è detto enumerativo quando è noto a priori il numero di volte che deve essere eseguito si usa la tecnica del contatore per controllarne

l’esecuzione: si usa cioè una variabile detta contatore del ciclo che viene incrementata (o decrementata) fino a raggiungere un valore prefissato

Un ciclo è indefinito quando non è noto a priori il numero di volte che deve essere eseguito Questo accade quando la condizione di fine ciclo dipende dal valore di una o più variabili contenute nell’interazione.

Ciclo Enumerativo

Ciclo Indefinito

Page 58: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

58

Somma di due valori forniti dall’utente

Page 59: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

59

Note sullo schema di iterazione enumerativa

E’costituito da una sequenza di azioni di assegnazione dette istruzioni

di inizializzazione e una iterazione (ripetizione) di una sequenza di azioni per un numero specificato di volte

Page 60: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

60

Fra tutti i possibili schemi di flusso ne esistono alcuni che sono detti schemi fondamentali di composizioneschemi fondamentali di composizione

Schema di sequenza:Schema di sequenza: è uno schema elementare o uno schema di sequenza

Struttura di sequenzaStruttura di sequenza

finefine

AA

inizioinizio

Page 61: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

61

Struttura di selezioneStruttura di selezione

Schema di selezione:Schema di selezione: un blocco di controllo subordina l’esecuzione di due possibili schemi di flusso al verificarsi di una condizione

Nel primo caso, lo schema S viene eseguito solo se la condizione C è vera; se C è falsa, non viene eseguita alcuna azione

Nel secondo caso, viene eseguito solo uno dei due schemi Sv o Sf, in dipendenza del valore di verità della condizione

Page 62: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

62

Il ciclociclo o looploop è uno schema di flusso per descrivere, in modo conciso, situazioni in cui uno gruppo di operazioni deve essere ripetuto più volte

Struttura iterativa o di Struttura iterativa o di ripetizione ripetizione

La condizione di fine ciclocondizione di fine ciclo viene verificata ogni volta che si esegue il ciclo; se la condizione assume valore vero (falso), le istruzioni vengono reiterate, altrimenti si esce dal cicloesce dal ciclo La condizione di fine ciclo può essere verificata prima o dopo l’esecuzione dell’iterazioneLe istruzioni di istruzioni di inizializzazioneinizializzazione, assegnano valori iniziali ad alcune variabili (almeno a quella che controlla la condizione di fine ciclo)

Ciclo con controllo in Ciclo con controllo in codacoda

Ciclo con controllo in Ciclo con controllo in testatesta

Page 63: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

63

Gli algoritmi iterativi Gli algoritmi iterativi

ProblemaProblema: Calcolare la somma di tre interi consecutivi( es. 13+14+15)

NoteNote: La fase di inizializzazione riguarda la somma e l’indice del cicloIl controllo di fine ciclo viene effettuato in coda

Page 64: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

64

Un ciclo è definitodefinito quando è noto a priori il numero di iterazioni: un ciclo definito è detto anche enumerativoenumerativo

Un contatore del ciclocontatore del ciclo tiene memoria di quante iterazioni sono state effettuate; può essere utilizzato in due modi:

incremento del contatoreincremento del contatore: il contatore viene inizializzato ad un valore minimo (ad es. 0) e incrementato ad ogni esecuzione del ciclo; si esce dal ciclo quando il valore del contatore eguaglia il numero di iterazioni richieste

decremento del contatoredecremento del contatore: il contatore viene inizializzato al numero di iterazioni richiesto e decrementato di uno ad ogni iterazione; si esce quando il valore del contatore raggiunge 0

Gli algoritmi iterativi Gli algoritmi iterativi 4 4

Page 65: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

65

Un ciclo è indefinitoindefinito quando non è possibile conoscere a priori quante volte verrà eseguito

La condizione di fine ciclo controlla il valore di una o più variabili modificate da istruzioni che fanno parte dell’iterazione

Comunque, un ciclo deve essere eseguito un numero finito di volte, cioè si deve verificare la terminazioneterminazione dell’esecuzione del ciclo

Gli algoritmi iterativi Gli algoritmi iterativi 5 5

Page 66: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

66

Gli algoritmi iterativi Gli algoritmi iterativi

ProblemaProblema: Calcolo della media di un insieme di numeri; non è noto a priori quanti sono i numeri di cui deve essere calcolata la media

I numeri vengono letti uno alla volta fino a che non si incontra un x = 0, che segnala la fine dell’insieme

Page 67: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

67

Fine

Page 68: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

68

Proposizioni e predicati Proposizioni e predicati

Una proposizioneproposizione è un costrutto linguistico del quale si può asserire o negare la veridicità

EsempiEsempi“Roma è la capitale della Gran Bretagna” falsafalsa“3 è un numero intero” vera vera

Il valore di veritàvalore di verità di una proposizione è il suo essere vera o falsa

Una proposizione è un predicatopredicato se il suo valore di verità dipende dall’istanziazione di alcune variabili

EsempiEsempi“la variabile età è minore di 30” “la variabile base è maggiore della variabile altezza”

Page 69: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

69

La valutazione di un predicatovalutazione di un predicato è l’operazione che permette di determinare se il predicato è vero o falso, sostituendo alle variabili i loro valori attualiI valori verovero e falsofalso sono detti valori logicivalori logici o booleanibooleaniProposizioni e predicati possono essere espressi concisamente per mezzo degli operatori relazionalioperatori relazionali:

= (uguale) (diverso) > (maggiore) < (minore) (maggiore o uguale) (minore o

uguale)

I predicati che contengono un solo operatore relazionale sono detti semplicisemplici

Proposizioni e predicati Proposizioni e predicati

Page 70: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

70

Dato un predicato pp, il predicato notnot pp, detto oppostoopposto o negazione logicanegazione logica di pp, ha i valori di verità opposti rispetto a ppDati due predicati pp e qq, la congiunzione logicacongiunzione logica di pp e qq, p p and qand q, è un predicato vero solo quando pp e q q sono entrambi veri, e falso in tutti gli altri casiDati due predicati pp e qq, la disgiunzione logicadisgiunzione logica di pp e qq, p p or qor q, è un predicato falso solo quando pp e qq sono entrambi falsi, e vero in tutti gli altri casiI predicati nei quali compare almeno uno fra gli operatori logici notnot, andand, oror sono detti composticompostiLa tavola di veritàtavola di verità di un predicato composto specifica il valore del predicato per ognuna delle possibili combinazioni dei suoi argomenti

Proposizioni e predicati Proposizioni e predicati

Page 71: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

71

Proposizioni e predicati Proposizioni e predicati

EsempioEsempioLe tavole di verità per i predicati pp and qand q e p or qp or q sono le seguenti:

pp qq p and qp and q p or p or qq

falso falso falso falso

falso vero falso vero

vero falso falso vero

vero vero vero vero

Page 72: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

72

EsempioEsempio notnot (base > altezza)

è vero solo quando il valore di base è minore o uguale del valore di altezza

età > 30 andand età < 50

è vero solo quando il valore di età è compreso tra 30 e 50

base > altezza oror base > 100

è vero quando il valore di base è maggiore del valore di altezza, o quando il valore di base è maggiore di 100, o quando entrambe le condizioni sono verificate

Proposizioni e predicati Proposizioni e predicati

Page 73: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

73

Le variabili, definite come coppie <nomenome, , valorevalore>, sono scalariscalari

Una coppia <nome, insieme di valorinome, insieme di valori > è una variabile vettorevettore o arrayarray e può essere immaginata come un contenitore diviso in scomparti; ciascun scomparto può contenere un valore, detto elementoelemento o componentecomponente del vettore

Ciascuna componente è individuata dal nome del vettore, seguito dal relativo numero progressivo, racchiuso fra parentesi tonde: l’indiceindice del vettore

La dimensionedimensione di un vettore è il numero dei suoi elementi

I vettori sono particolarmente utili per collezionare dati fra loro correlati, sui quali devono essere effettuate le stesse operazioni

I vettori I vettori

Page 74: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

74

L’utilizzo di variabili vettoriali, in un algoritmo, presuppone la dichiarazione esplicita della loro dimensioneLa dimensione del vettore costituisce un limite invalicabile per la selezione delle componenti del vettore

EsempioEsempio: v(100) asserisce che il vettore v è costituito da 100 elementi; possono essere selezionati v(12), v(57), v(89), ma non v(121) o v(763), che non esistono

I vettoriI vettori

vv(4)(4)vv(1)(1) vv(2)(2) vv(3)(3)

Vettore v, costituito dai 4 elementi v(1), v(2), v(3), v(4)

Page 75: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

75

I vettori I vettori

EsempioEsempio: Calcolare il vettore somma di due vettori di uguale dimensione n

aa(4)(4)aa(1)(1) aa(2)(2) aa(3)(3)

3355 77 00

bb(4)(4)bb(1)(1) bb(2)(2) bb(3)(3)

5566 99 11

cc(4)(4)cc(1)(1) cc(2)(2) cc(3)(3)

881111 1616 11

Page 76: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

76

EsempioEsempio: algoritmo per calcolare il vettore somma di due vettori

NoteNote: L'utilità dei vettori consiste nel-l’impiego della tecnica iterativa in modo da effettuare la stessa operazione su tutti gli elementi del vettoreUsando la variabile contatore di un ciclo come indice degli elementi di un vettore è possibile considerarli tutti, uno alla volta, ed eseguire su di essi l’operazione desiderata

I vettori I vettori

Page 77: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

77

I vettori I vettori

EsempioEsempio: Algoritmo per il calcolo del massimo elemento di un vettore

vero

Page 78: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

78

La pseudocodificaLa pseudocodifica 1 1

La pseudocodificapseudocodifica è un linguaggio per la descrizione di algoritmi

La descrizione di un algoritmo mediante pseudocodifica si compone di due parti...

la dichiarazione delle variabilidichiarazione delle variabili usate nell’algoritmola descrizione delle azionidescrizione delle azioni dell’algoritmo

Page 79: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

79

Tipo delle variabiliTipo delle variabili Il tipotipo di una variabile indica l’insieme dei valori che possono essere assegnati a quella variabile

Su costanti e variabili di un tipo è possibile effettuare le operazioni che sono proprie di quel tipo e tutte le operazioni di confronto (utilizzando gli operatori relazionali)

Sono permessi i seguenti 4 tipi: integerinteger, single, single, doubledouble, booleanboolean, stringstring

La pseudocodificaLa pseudocodifica 2 2

Page 80: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

80

integerinteger: sono le variabili cui possono essere assegnati numeri interi; le costanti di tipo integer sono numeri interi, ad es. 1, 3, 150realreal: sono le variabili cui possono essere assegnati numeri razionali; le costanti real possono essere rappresentate in notazione decimale, con un “.” che separa la parte intera dalla parte decimale (ad es., 5.17, 12.367, 123., 0.005) o in notazione notazione scientificascientifica (23.476E+2=2347.6, 456.985E4=0.0456985)booleanboolean: sono le variabili cui possono essere assegnati i valori logici; le costanti logiche sono truetrue e falsefalsestringstringqq: sono le variabili cui possono essere assegnate parole (o stringhestringhe) costituite da q caratteri; le costanti stringq sono costituite da parole di q caratteri racchiusi tra apici (che non fanno parte della costante); ad es., ‘FABIO’ è una costante string5,‘+’ è una costante string1 e ‘124’ string3

La pseudocodificaLa pseudocodifica 3 3

Page 81: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

81

Dichiarazione delle variabiliDichiarazione delle variabiliLa dichiarazione delle variabili è un elenco, preceduto dalla parola varvar, delle variabili sulle quali l’algoritmo operaLe variabili sono suddivise per tipo: quelle dello stesso tipo sono separate l’una dall’altra da una “,”; l’elenco delle variabili dello stesso tipo è seguito dai “:” e dall’indicazione del tipo; gli elenchi di variabili di tipo diverso sono separati dal “;”, l’ultimo elenco è seguito da un “.”

EsempioEsempio: varvar i, j, a(20): integerinteger; p, q: realreal; nome: stringstring2020; sw: booleanboolean.

La pseudocodificaLa pseudocodifica 4 4

Page 82: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

82

Descrizione delle azioniDescrizione delle azioniGli schemi di flusso fondamentali sono descritti utilizzando convenzioni linguistiche: ad ogni schema di composizione corrisponde una convenzione linguisticaLa descrizione di un algoritmo deve soddisfare le seguenti regole:

a) La prima azione dell’algoritmo è preceduta dalla parola beginbegin;b) L’ultima azione dell’algoritmo è seguita dalla parola endend;c) L’azione di lettura è rappresentata dalla parola readread;d) L’azione di scrittura è rappresentata dalla parola writewrite;e) Lo schema di sequenza di n flussi S1, S2,…, Sn è rappresentato

daS1;

S2;

Sn;

La pseudocodificaLa pseudocodifica 5 5

Page 83: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

83

f) Gli schemi di selezione sono rappresentati come:

g) Gli schemi di iterazione sono rappresentati come:

La pseudocodificaLa pseudocodifica 6 6

S, Sf, Sv, sono schemi

Page 84: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

84

Esistono convezioni linguistiche alternative in relazione a particolari schemi di flusso

EsempioEsempio: Ciclo enumerativo

La pseudocodificaLa pseudocodifica 7 7

Nel caso che il valore di “incremento” sia 1, la parte “stepstep incremento” della frase forfor...endforendfor può essere omessa

Page 85: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

85

EsempioEsempio: Algoritmo per il calcolo del vettore somma di due vettori di numeri razionali

La pseudocodificaLa pseudocodifica 8 8

varvar a(100), b(100), c(100): real real; i, n: integerinteger.  

beginbegin readread n; forfor i fromfrom 1 toto n dodo

readread a(i), b(i); c(i) a(i) + b(i); writewrite c(i)

endforendforendend

Page 86: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

86

EsempioEsempio: Algoritmo per il calcolo del massimo elemento di un vettore di numeri razionali

La pseudocodificaLa pseudocodifica 9 9

varvar max, v(100): realreal; i, n: integerinteger. beginbegin readread n; forfor i fromfrom 1 toto n dodo readread v(i) endforendfor max v(1); forfor i from from 2 toto n dodo ifif max < v(i)

thenthen max v(i) endifendif endforendfor writewrite max endend

Page 87: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

87

La pseudocodificaLa pseudocodifica 10 10

EsempioEsempio: Algoritmo per il calcolo delle radici di equazioni di 2° grado

varvar x1, x2, a, b, c, delta: realreal. beginbegin readread a, b, c; delta b24ac; if if delta < 0 then writethen write “non esistono radici reali” else ifelse if delta = 0 thenthen x1 b/2a; x2 x1 elseelse x1 (b + delta)/2a; x2 (b delta)/2a endifendif writewrite x1, x2 endifendifendend

Page 88: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

88

Introduzione ai linguaggi di Introduzione ai linguaggi di programmazione di alto livelloprogrammazione di alto livello

Page 89: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

89

Benché siano macchine in grado di compiere operazioni complesse, i calcolatori devono essere “guidati” per mezzo di istruzioni appartenenti ad un linguaggio specifico e limitato, a loro comprensibile A livello hardware, i calcolatori riconoscono solo comandi semplici, del tipo “copia un numero”, “addiziona due numeri”, “confronta due numeri” : questi comandi definiscono il set di istruzioniset di istruzioni della macchina e i programmi che li utilizzano direttamente sono i programmi in linguaggio macchinalinguaggio macchina In linguaggio macchina ogni operazione richiede l’attivazione di numerose istruzioni base (il linguaggio riflette l’organizzazione della macchina più che la natura del problema da risolvere); inoltre, qualunque entità istruzioni, variabili, dati è rappresentata da numeri binari: i programmi sono difficili da scrivere, leggere e mantenere

Cenni storiciCenni storici 1 1

Page 90: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

90

Negli anni `50, tutti i programmi erano scritti in linguaggio macchina o in assembly assembly (o assembler assembler)

In assemblyassembly ogni istruzione è identificata da una sigla piuttosto che da un numero e le variabili sono rappresentate da nomi piuttosto che da numeri

EsempioEsempio: carica il numero 8 nel primo registro libero della CPU

0011 1000 0011 1000 LOAD 8LOAD 8

I programmi scritti in assembly necessitano di un apposito programma assemblatoreassemblatore per tradurre le istruzioni tipiche del linguaggio in istruzioni macchina

Cenni storiciCenni storici 2 2

AssemblyAssemblyLinguaggio macchinaLinguaggio macchinaCodice Codice istruzionistruzionee

Page 91: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

91

Cenni storici Cenni storici 3 3

L’assembly definisce una notazione simbolica che è in stretta relazione con i codici in linguaggio macchina

LOAD R1, MEM1 CMP R1, R2 BEQ RISZERO STORE R1, MEM1RISZERO: LOAD R2, MEM2

AssemblatoreAssemblatore

1000100011011010110101010101010001001001001000000000000000000101110000000000000000000000000010001001100011011010110101010101010010001001010110101101001000001100

OPCODE(LOAD)

registro

Page 92: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

92

Oggi si utilizza l’assembly solo se esistono vincoli stringenti sui tempi di esecuzione; viceversa si usano linguaggi più vicini al linguaggio naturale, i linguaggi di alto livellolinguaggi di alto livello

I linguaggi di alto livello sono elementi intermedi di una varietà di linguaggi ai cui estremi si trovano il linguaggio macchina, da un lato, ed i linguaggi naturali, come l’italiano e l’inglese, dall’altro

Cenni storiciCenni storici 4 4

I linguaggi di programmazione, progettati per manipolare informazioni, differiscono dai linguaggi naturali: sono infatti meno espressivi ma più precisi (non ambigui)

Page 93: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

93

I linguaggi di programmazione di alto livello consentono al programmatore di trattare oggetti complessi senza doversi preoccupare dei dettagli della particolare macchina sulla quale il programma viene eseguito

Richiedono un compilatorecompilatore o un interpreteinterprete che sia in grado di tradurre le istruzioni del linguaggio di alto livello in istruzioni macchina di basso livello eseguibili dal calcolatore

Un compilatore è un programma “simile” ad un assemblatore, ma più complesso, infatti…

esiste una corrispondenza biunivoca fra istruzioni in assembler ed istruzioni macchinaogni singola istruzione di un linguaggio di alto livello corrisponde a molte istruzioni in linguaggio macchina: quanto più il linguaggio di programmazione si discosta dal linguaggio macchina, tanto più il lavoro di traduzione del compilatore è difficile

Scopi e caratteristiche Scopi e caratteristiche 1 1

Page 94: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

94

Scopi e caratteristiche Scopi e caratteristiche 2 2

EsempioEsempio: In PASCALPASCAL, l’assegnazionee := (a+b)(c+d);

calcola l’espressione e, ottenuta eseguendo una serie di operazioni aritmetiche sulle variabili a, b, c, e d, salvando opportunamente il risultato nella posizione di memoria etichettata da e ; in linguaggio assembly la stessa istruzione potrebbe essere riscritta nel modo seguente:

LOADLOAD a, %r0LOADLOAD b, %r1 ADDADD %r0, %r1 LOADLOAD c, %r2 LOADLOAD d, %r3 ADDADD %r2, %r3MULTMULT %r1, %r3 STORESTORE %r3, e

Page 95: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

95

I linguaggi che non dipendono dall’architettura della macchina offrono due vantaggi fondamentali:

i programmatori non devono cimentarsi con i dettagli architetturali di ogni calcolatore

i programmi risultano più semplici da leggere e da modificare

portabilitàportabilità, leggibilitàleggibilità, mantenibilitàmantenibilità

Scopi e caratteristiche Scopi e caratteristiche 3 3

Page 96: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

96

Scopi e caratteristiche Scopi e caratteristiche 4 4

PortabilitàPortabilità: i programmi scritti per un calcolatore possono essere utilizzati su qualsiasi altro calcolatore, previa ricompilazione

LeggibilitàLeggibilità: la relativa similitudine con i linguaggi naturali rende i programmi più semplici, non solo da scrivere, ma anche da leggere

MantenibilitàMantenibilità: con questo termine si intende far riferimento a modifiche di tipo correttivo, perfettivo, evolutivo e adattivo; i programmi scritti in linguaggi di alto livello sono più semplici da modificare e da correggere

La possibilità di codificare algoritmi in maniera astratta si traduce in una migliore comprensibilità del codice e quindi in una più facile analisi di correttezzaanalisi di correttezza

L’essenza della programmazione di alto livello, ovvero dell’uso di linguaggi di elevata potenza espressiva, risiede nella capacità di astrazioneastrazione, cioè nella possibilità di prescindere dai dettagli considerati inessenziali ai fini della soluzione di un problema, favorendo con ciò la concentrazione sugli elementi fondamentali. Un linguaggio di programmazione deve fornire all'utente buoni meccanismi per definire autonomamente tutte le astrazioni di cui ha bisogno: il programmatore, deve disporre di strumenti sufficienti per spiegare al calcolatore tutte le operazioni che intende effettuare.

La funzione svolta da un programma ben strutturato in un linguaggio di programmazione di alto livello può essere facilmente compresa da un lettore: i simboli e le istruzioni utilizzate si avvicinano più ai simboli ed alle istruzioni di uso comune che non a quelle interne del calcolatore.

L’essenza della programmazione di alto livello, ovvero dell’uso di linguaggi di elevata potenza espressiva, risiede nella capacità di astrazioneastrazione, cioè nella possibilità di prescindere dai dettagli considerati inessenziali ai fini della soluzione di un problema, favorendo con ciò la concentrazione sugli elementi fondamentali. Un linguaggio di programmazione deve fornire all'utente buoni meccanismi per definire autonomamente tutte le astrazioni di cui ha bisogno: il programmatore, deve disporre di strumenti sufficienti per spiegare al calcolatore tutte le operazioni che intende effettuare.

La funzione svolta da un programma ben strutturato in un linguaggio di programmazione di alto livello può essere facilmente compresa da un lettore: i simboli e le istruzioni utilizzate si avvicinano più ai simboli ed alle istruzioni di uso comune che non a quelle interne del calcolatore.

Page 97: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

97

Eventuale svantaggio dell’uso dei linguaggi di alto livello è la riduzione di efficienzariduzione di efficienza:

È possibile utilizzare istruzioni macchina diverse per scrivere programmi funzionalmente equivalenti: il programmatore ha un controllo limitato sulle modalità con cui il compilatore traduce il codiceTuttavia… i compilatori attuali ricorrono a trucchi di cui molti programmatori ignorano l’esistenza

La ragione fondamentale per decretare la superiorità La ragione fondamentale per decretare la superiorità dei linguaggi di alto livello consiste nel fatto che la dei linguaggi di alto livello consiste nel fatto che la maggior parte dei costi di produzione del software è maggior parte dei costi di produzione del software è localizzata nella fase di manutenzione, per la quale la localizzata nella fase di manutenzione, per la quale la leggibilità e la portabilità sono crucialileggibilità e la portabilità sono cruciali

Scopi e caratteristiche Scopi e caratteristiche 5 5

Page 98: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

98

Un esempio di programma Un esempio di programma PASCALPASCAL

ProblemaProblema: Si legga una lista di valori, la cui lunghezza non è nota a priori (è un dato in ingresso), stampando un opportuno messaggio se un certo valore, anch’esso letto a runruntimetime, appartiene o non appartiene alla lista

“trovato un numero uguale”

Falso

leggi ncorr

trovato FALSEi 1

begin

Falso

ncorr = ncomp

Vero

leggi n, ncomp

i i+1

trovato TRUE

i n

Vero

trovato = TRUE “non trovato un numero uguale”

Vero

Falso

end

Page 99: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

99

PROGRAMPROGRAM Search(input,output); (* Ricerca di un valore desiderato in una lista *) VARVAR n: INTEGERINTEGER; (* lunghezza della lista *) ncomp: INTEGERINTEGER; (* termine di paragone *) ncorr: INTEGERINTEGER; (* valore nella lista *) trovato: BOOLEANBOOLEAN; (* TRUE se si è trovato *) i: INTEGERINTEGER; (* contatore dei valori della lista *) BEGINBEGIN READREAD(n); WRITELNWRITELN(‘Ci sono’, n, ‘valori.’); READREAD(ncomp); WRITELNWRITELN(‘Ricerca di’, ncomp, ‘.’); trovato := FALSEFALSE; (* non ancora trovato alcun valore *) FORFOR i = 1 TOTO n DODO BEGINBEGIN READREAD(ncorr); WRITELNWRITELN(ncorr); IFIF ncorr = ncomp THENTHEN trovato := TRUETRUE; (* trovato un valore uguale

*) ENDEND (* fine ciclo for *) IFIF trovato THEN WRITELNTHEN WRITELN (‘Trovata corrispondenza’) ELSE WRITELNELSE WRITELN (‘Non trovata corrispondenza’); ENDEND (* fine programma Search *)

Page 100: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

100

Schema di iterazione:Schema di iterazione: si itera l’esecuzione di un dato schema di flusso

Nel primo caso, S può non venire mai eseguito, se la condizione C è subito falsa; nel secondo caso, S viene eseguito almeno una voltaQuando lo schema S viene eseguito finché la condizione C si mantiene vera si parla di iterazione per veroiterazione per vero; si ha un’iterazione per falsoiterazione per falso quando S viene eseguito finché C è falsa

Schemi di composizioneSchemi di composizione 3 3

Page 101: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

101

Gli algoritmi iterativi Gli algoritmi iterativi 1 1

NoteNote: La variabile sommasomma è un contenitore di somme parziali, finché non si ottiene la somma totale richiestaLa soluzione del problema viene raggiunta eseguendo azioni simili per un numero opportuno di volte

Accade spesso che, per risolvere un problema, un certo insieme di operazioni debba essere eseguito un dato numero di volte EsempioEsempio: Calcolare la somma di tre interi consecutivi

Page 102: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

102

Affinché un elenco di istruzioni, possa essere considerato un algoritmo, devono essere soddisfatti i seguenti requisiti:

Finitezza:Finitezza: ogni algoritmo deve essere finito, cioè composto da un numero finito di istruzioni, ciascuna delle quali deve essere eseguita in tempo finito ed un numero finito di volteGeneralità:Generalità: ogni algoritmo deve fornire la soluzione per una classe di problemi; deve pertanto essere applicabile a qualsiasi insieme di dati appartenenti all’ insieme di insieme di definizionedefinizione o dominio dell’algoritmodominio dell’algoritmo e deve produrre risultati che appartengono all’insieme di arrivoinsieme di arrivo o codominiocodominioNon ambiguità:Non ambiguità: devono essere definiti in modo chiaro i passi successivi da eseguire; devono essere evitati paradossi, contraddizioni ed ambiguità; il significato di ogni istruzione deve essere univoco per chiunque esegua l’algoritmoInoltre sono importanti la correttezza e l’efficienza di un algoritmo

Proprietà degli algoritmi Proprietà degli algoritmi

Page 103: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

103

Sintassi

La condizione è sempre un'espressione di tipo booleano (VERO/FALSO). Il ramo ELSE (corrispondente all'alternativa falsa) può essere omesso.

If condizione Then

Istruzione1

Istruzione2

………..

Else istruzioni

End If

Esempio:

If valore > 0 Then Label1.Caption= "Il valore è positivo“Else Label1.Caption= "Il valore è minore o uguale a zero“End If

Page 104: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

104

Il ciclo con controllo alla fine

Do istruzioni

Loop Until condizione

(La condizione è una espressione di tipo booleano).

Esempio: Somma di N numeri

Dim numero, somma As Single

Do

numero = Val(InputBox("Inserisci un numero (zero per finire)", "Inserimento"))

somma = somma + numero

Loop Until numero = 0

Label1.Caption = CStr(somma)

Page 105: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

105

Il ciclo con controllo all'inizio

Do While condizione

Istruzioni

Loop

(La condizione è una espressione di tipo booleano).

Esempio: Somma N numeri

Dim numero, somma As Single

Do While numero <> -1

numero = Val (InputBox("Inserisci un numero (-1 per finire)", "Inserimento"))

somma = somma + numero

Loop

Label1.Caption = CStr(somma)

Page 106: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

106

Compiti del ProgrammatoreCompiti del Programmatore

Analizzare il problema riducendolo in termini astratti, eliminando ogni componente non indispensabile e formulando un modello del problema.

Individuare una strategia risolutiva e ricondurla ad un algoritmo.

Codificare l’algoritmo in modo tale da renderlo comprensibile al calcolatore (programma).

Analizzare il risultato dell’elaborazione evidenziando eventuali errori nella formulazione del problema, nella strategia risolutiva, nella codifica dell’algoritmo (debugging, errori di sintassi o logici)

Page 107: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

107

Definizione di AlgoritmoDefinizione di Algoritmo

Un algoritmo è correttocorretto se perviene alla soluzione del compito cui è prepostoUn algoritmo è efficienteefficiente se perviene alla soluzione del problema nel modo più veloce possibile e/o usando la minor quantità di risorse fisiche (memoria, tempo di esecuzione, ecc.)Gli algoritmi devono essere formalizzati per mezzo di un linguaggio di programmazione, dotato di precise strutture linguistiche (sintassi e semantica)

Page 108: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

108

Il ciclo con contatore FOR

For contatore = minimo To massimo

Istruzioni

Next (La variabile contatore è sempre di tipo numerico intero)

Esempio

Dim cont As Integer

For cont = 1 To 10

Print "Il valore di CONT è: " + CStr(cont)

Picture1.Print "Il valore di CONT è: " + CStr(cont) ‘con PictureBox

Next

Page 109: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

109

Cicli

Page 110: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

110

maggiore

Page 111: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

111

Problema: Problema: Calcolo delle radici reali dell’equazione di secondo grado ax2+bx+c=0

Algoritmo:Algoritmo:1) Acquisire i coefficienti a,b,c2) Calcolare = b24ac

3) Se <0 non esistono radici reali, eseguire l’istruzione 7)

4) Se = 0, x1= x2 = b/2a, poi eseguire l'istruzione 6)

5) Calcolare x1 = (b +)/2a x2 = (b )/2a

6) Comunicare i valori x1, x2

7) Fine

Esempio Esempio Radici di equazioni di 2 Radici di equazioni di 2°° grado grado

Page 112: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

112

Problema: Problema: Calcolo delle radici reali dell’equazione di secondo grado ax2+bx+c=0

Algoritmo:Algoritmo:1) Acquisire i coefficienti a,b,c2) Calcolare = b24ac

3) Se <0 non esistono radici reali, eseguire l’istruzione 7)

4) Se = 0, x1= x2 = b/2a, poi eseguire l'istruzione 6)

5) Calcolare x1 = (b +)/2a x2 = (b )/2a

6) Comunicare i valori x1, x2

7) Fine

Esempio Esempio Radici di equazioni di 2 Radici di equazioni di 2°° grado grado

Page 113: 1 Dal problema all’ algoritmo. 2 Analisi e programmazione Tramite un elaboratore si possono risolvere problemi di varia natura. Il problema deve essere.

113

I diagrammi a blocchi I diagrammi a blocchi

Diagramma a blocchi dell’algoritmo per il calcolo delle radici dell’equazione di 2° grado ax2

+ bx + c = 0

fine

Leggi a,b,c

delta b2 4ac

delta=0

delta<0

x2 (bsqrt(delta))/2a

x1 (b+sqrt(delta))/2a

x2 b/2a

x1 b/2a

scrivix1 e x2

scrivi“non ci sono radici reali”

inizio

Vero Falso

Vero FalsoAlgoritmo (pseudocodifica):Algoritmo (pseudocodifica):

1. Acquisire i coefficienti a,b,c2. Calcolare = b24ac3. Se <0 non esistono radici reali, eseguire l’istruzione 74. Se = 0, x1= x2 = b / 2a, poi eseguire l'istruzione 65. Calcolare x1 = (b +) / 2a

Calcolare x2 = (b ) / 2a6. Stampare i valori x1, x27. Fine