La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Algoritmi e Programmazione Giorgio Delzanno. Algoritmi e Programmi Algoritmo=Successione di operazioni elementari che possono essere eseguite da un calcolatore.

Presentazioni simili


Presentazione sul tema: "Algoritmi e Programmazione Giorgio Delzanno. Algoritmi e Programmi Algoritmo=Successione di operazioni elementari che possono essere eseguite da un calcolatore."— Transcript della presentazione:

1 Algoritmi e Programmazione Giorgio Delzanno

2 Algoritmi e Programmi Algoritmo=Successione di operazioni elementari che possono essere eseguite da un calcolatore Programma = Algoritmo codificato nel linguaggio di calcolatore Linguaggio macchina = Basato sul set di istruzioni della macchina, rappresentato da sequenze di 0 e 1 Linguaggio di alto livello = Linguaggio più vicino al linguaggio naturale, rigoroso e non ambiguo

3 Istruzioni di un calcolatore Le istruzioni di un linguaggio macchina servono a gestire registri, memoria, e le capacità logico- matematiche della ALU. Istruzione macchina = sequenza di 0,1 Es.: loperazione loadA ind (es ) carica il contenuto della cella di memoria con indirizzo ind nel registro A (loadA=codice dellistruzione)

4 Linguaggi di Programmazione Invece di codificare algoritmi in linguaggi macchina si utilizzano linguaggi ad alto livello Le istruzione dei linguaggi ad alto livello sono facilmente comprensibili ai programmatori. Compilatore: (programma che) traduce automaticamente un programma ad alto livello in linguaggio macchina

5 LP: Linguaggio Didattico di Programmazione Vedremo il funzionamento delle istruzioni fondamentali di un linguaggio di programmazione Utilizzeremo un linguaggio semplificato che chiameremo LP Utilizzeremo il linguaggio per programmare il funzionamento di un calcolatore astratto con struttura semplificata

6 Calcolatore Astratto Memoria CPU Input Output Bus x y 3 4 maret

7 Calcolatore astratto CPU: componente di calcolo Memoria centrale: sequenza di celle di memorie Input: sequenza di dati in input (ad es. da un file, terminale, ecc.) Output: sequenza di dati in output

8 Nozione di Variabile Come si indirizzano le celle di memoria? Invece di usare gli indirizzi fisici utilizziamo dei nomi simbolici (es., x, y, nome,...) che vengono mappati in indirizzi fisici attraverso la fase di compilazione Le variabili vanno dichiarate allinizio del programma (celle diverse, nomi diversi) Valore di una variabile = contenuto corrente della cella di memoria associata alla variabile

9 Nozione di Costante Per esprimere direttamente valori prefissati (cioè che non devono essere modificati dal programma) si utilizzano le costanti Una costante è una rappresentazione simbolica di un numero, stringa, ecc. Ad esempio, 1, ciao, 3.14, ecc. Il set di costanti disponibile dipende dal linguaggio di programmazione

10 Espressioni Le espressioni servono per rappresentare calcoli a livello simbolico Unespressione può coinvolgere nomi di variabili, costanti, operatori aritmetico-logici, ecc Es: 3+4, x+y-1 (dove x è una variabile), x>0 and y>1

11 Programma LP La sintassi astratta di un programma LP consiste di due blocchi Dichiarazione di variabili: –x: intero, y:stringa, z: numero reale, ecc. Sequenza di istruzioni racchiusa tra le parole chiave begin …. end e separate dal punto e virgola ;

12 Esecuzione di un programma Qual è significato (semantica) di un programma? Trasformazione da Input iniziale a Output finale ! Un programma deve essere eseguito per poter calcolare la trasformazione Input-Output. Lesecuzione modifica lo stato del programma: stato iniziale, corrente, e finale: valore iniziale, corrente e finale delle variabili, dellinput e delloutput. Lesecuzione dipende dalla semantica operazionale dei singoli costrutti

13 Lettura e scrittura Servono per leggere e scrivere il valore di una variabile dallinput o sulloutput (ad es. lettura da tastiera e scrittura su video) Assumiamo che input e output siano liste di valori –write(Variabile): aggiunge il valore corrente della Variabile alloutput; –read(Variabile): toglie il primo valore della lista input e lo assegna alla Variabile.

14 Esempio 1 Programma che legge una stringa e la scrive sul video: var s: stringa begin read(s); write(s); end.

15 Esecuzione del programma 1 Si utilizza una sola cella di memoria chiamata s Inizialmente: –valore(s)=indefinito; input=ciao, mare, …; output=vuoto Dopo read(s): –valore(s)=ciao, input=mare,…. Dopo write(s): –valore(s)=ciao,….,output=ciao Semantica: trasformazione identica da I-O

16 Assegnamento Si utilizza per assegnare il valore corrente (cioè valutata nello stato corrente del programma) di unespressione ad una variabile Lassegnamento cambia il valore della variabile Sintassi: –Variabile := Espressione, se nello stato corrente lespressione si valuta in val allora valore(Variabile)=val, dopo lesecuzione dellassegnamento

17 Esempio Valutazione Assegnamento Es. x:=x+1 Lespressione x+1 va valutata nello stato corrente. Il risultato dellespressione viene assegnato nuovamente ad x. Se valore(x)=2 prima dellesecuzione, valore(x)=3 dopo lesecuzione

18 Esempio 2 Leggere due numeri, calcolare e stampare la loro somma var x,y,somma: numero intero; begin read(x); read(y); somma:=x+y; write(somma); end.

19 Istruzione condizionale Sintassi: if Condizione then Lista Istruzioni else Lista Istruzioni Condizione = espressione Booleana (con valore vero o falso) Se la condizione si valuta in vero si esegue ramo then, altrimenti si esegue il ramo else

20 Esempio 3 Calcolare e stampare il massimo tra 2 valori letti in input Algoritmo informale: leggo(x), leggo(y) se x>y stampo(x) altrimenti stampo(y)

21 Programma per esempio 3 var x,y:numero intero; begin read(x); read(y); if x>y then write(x) else write(y); end

22 Istruzione ciclica Sintassi while Condizione do Lista Istruzioni end Lista Istruzioni viene eseguita fintantochè Condizione si valuta in vero Quando Condizione si valuta in falso si passa allistruzione seguente nel programma

23 Esempio 4 Problema: leggere K, e quindi calcolare la somma di K valori letti dallinput Devo memorizzare K, la somma, e i valori letti V1,V2,…,VK Poiche uso ogni Vi una sola volta, mi bastano 3 variabili: K, x ed S x manterrà il valore Vi corrente Algoritmo informale: leggo K, inizializzo S con 0 per tutti i valori da V1 a VK, leggo(x) sommo x a S (S=S+x) stampo S

24 Programma per lesempio 4 var K, x, somma: numero intero; begin read(K); somma:=0; while K>0 do read(x); somma:=somma+x; K:=K-1; endw; write(somma); end

25 Esecuzione del while Inizialmente: val(x),val(K)=indefiniti,val(somma)=0. Leggo il valore 3: val(K)=3 Poiché val(K)>0, entro nel ciclo. Leggo il primo valore in input V1 su cui fare la somma e lo memorizzo in x. Calcolo somma=somma+x, e decremento K. Cioè dopo lesecuzione delle istruzioni dentro il ciclo val(x)=3, val(somma)=3, val(K)=2 Proseguo con il ciclo fino a che val(K)=0. A tal punto esco dal ciclo e scrivo il valore finale di somma

26 Esempio 5 Calcolare il massimo comun divisore tra due numeri interi letti da input, utilizzando lalgoritmo di Euclide: –mcd(m,n)=m=n se n=M –mcd(m,n)=mcd(m-n,n) se m>n –mcd(m,n)=mcd(m,n-m) se n>m

27 Algoritmo di Euclide Leggo m and n (*) Fino a che m diverso da n, –se m>n allora sottraggo n ad m –se n>m sottraggo m ad n –torno a (*) Quando m=n stampo, ad es, n

28 Programma esempio 5 var m,n: numero intero; begin read(m); read(n); while not(m=n) do if m>n then m:=m-n else n:=n-m; endw; write(n); (Nota: a questo punto n=m!) end

29 Strutture dati complesse Oltre a variabili di tipo intero, stringa, ecc può essere molto utile utilizzare dati strutturati (ad es. liste, insiemi, ecc) Molti linguaggi di programmazione forniscono vari tipi di dato quali –array, –record, –liste Vediamo alcuni esempi nel nostro linguaggio LP

30 Array Un array rappresenta una sequenza di celle consecutive contenenti dati omogenei (es. interi) Una variabile V di tipo array denota la sequenza di celle Per accedere direttamente alla cella i-esima si utilizza il suo indice i come segue: V[i] Sintassi dichiarazione: –NomeVarArray: array 1..N of Tipo; (N costante) Nelle espressioni, assegnamenti, ecc si utilizza poi –NomeVarArray[Exp] dove Exp è un espressione che si valuta in un valore da 1…N

31 Esempio uso array Leggere 3 valori e memorizzarli in un array var A : array 1..3 of intero; i : intero; i := 1; while i<4 do read(A[i]); i:=i+1; endw;

32 Esempio 6 Leggere K=<10valori e stamparli in ordine inverso Dobbiamo leggere V1,…,VK,,memorizzarli e poi stamparli in ordine VK,…,V1 Usiamo un array A di N>K posizioni per memorizzare i dati in input Dopo aver memorizzato i dati, li scriviamo scorrendo larray dallindice K allindice 1

33 Programma per esercizio 6 var A : array of intero; i,K : intero; read(K); i := 1; while i= 0 do write(A[i]); i:=i-1; endw;

34 Record Tipo di dato per gestire dati strutturati di tipo eterogeneo; ogni dato viene chiamato campo del record Sintassi: Variabile: record Campo-1:Tipo1; … Campo-N:TipoN; end Per accedere ai campi di un record si utilizza: Variabile.Campo-i (rappresenta li-esimo campo)

35 Esempio di record Dati anagrafici var Punto:record x,y:numero end; z:intero; Punto.x=3; Punto.y=2; z:=Punto.x*Punto.y;


Scaricare ppt "Algoritmi e Programmazione Giorgio Delzanno. Algoritmi e Programmi Algoritmo=Successione di operazioni elementari che possono essere eseguite da un calcolatore."

Presentazioni simili


Annunci Google