La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Terza Lezione Introduzione alla programmazione lll.

Presentazioni simili


Presentazione sul tema: "Terza Lezione Introduzione alla programmazione lll."— Transcript della presentazione:

1 Terza Lezione Introduzione alla programmazione lll

2 Schema di iterazione Schema di iterazione (ciclo o loop) Modo conciso per descrivere azioni che devono essere ripetute Sub() C S End Sub Sub() C S End Sub falso vero

3 Schema di iterazione Nota: 1.I due schemi non sono equivalenti: in un caso lo schema S è eseguito almeno una volta e nellaltro potrebbe non essere mai eseguito 2.La condizione vero/falso può essere invertita: si parla di iterazione per vero quando S è eseguito finché la condizione su C è vera e iterazione per falso nellaltro caso

4 Note sullo schema di iterazione Quando è necessario eseguire lo stesso insieme di operazioni più volte si adotta un particolare schema di iterazione: una sequenza di azioni di assegnazione dette istruzioni di inizializzazione Una iterazione (ripetizione) di una sequenza di azioni (iterazione) per un numero specificato di volte

5 Note sullo schema di iterazione Inizializzazione Iterazione Inizializzazione Iterazione Condizione di fine ciclo Condizione di fine ciclo vero falso

6 Uscita dal ciclo La condizione di fine ciclo viene controllata dopo lesecuzione di ogni blocco di iterazione Può essere con controllo in coda al ciclo o con controllo in testa

7 Ciclo enumerativo Un ciclo è detto enumerativo quando è noto a priori il numero di volte che deve essere eseguito Si usa la tecnica del contatore per controllarne lesecuzione, si usa cioè una variabile detta contatore del ciclo che viene inizializzata opportunamente prima di iniziare il ciclo e poi viene incrementata (o decrementata) fino a raggiungere un valore prefissato, permettendo così di eseguire una iterazione un numero specificato di volte

8 Ciclo indefinito Un ciclo è detto 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 che o dipendono dallinterazione con lesterno o vengono modificate allinterno delliterazione in modo complesso

9 Esempio: Diagramma di flusso Assegna ad a,b,c i valori dingresso Metti il valori di b 2 -4ac in delta Inizio: ingressi 1,2,1 delta<0? delta=0? MESSAGGIO: nessuna soluzione MESSAGGIO: radici coincidenti= -b/2a MESSAGGIO: radici distinte= (-b-radice(delta))/2a Fine vero falso RADICI RADICI: Diagramma di Flusso a : float 1 b : float 2 c : float 1 delta : float 0 MESSAGGIO: radici coincidenti = -1 Stato della memoria

10 Esercizi Ricerca di un elemento in un vettore Media di un vettore

11 Soluzione: Trova i=0 Sub() V(i)=k i=100 insuccesso end i=i+1 successo

12 I programmi Per fare sì che un algoritmo sia effettivamente utilizzabile da un esecutore automatico occorre eliminare le ambiguità circa la codifica dei dati e linterazione con gli esseri umani In generale durante la stesura di un programma ci si deve preoccupare dei limiti nellintervallo di rappresentazione dei numeri, della durata non nulla delle operazioni, ecc. La soluzione integrata di queste problematiche e di quelle dellalgoritmo in sé risulta complessa e richiede alta competenza

13 D. Il programma Disegnato il diagramma di flusso e quindi delineato in tutte le sue parti lalgoritmo non resta che tradurlo in un programma che il calcolatore sarà in grado di eseguire Il programma verrà scritto usando un linguaggio di programmazione (ad es. C, Java, Matlab, ecc.)

14 Linguaggi di programmazione Linguaggi di Basso Livello. Sono linguaggi di programmazione caratterizzati da istruzioni molto elementari (ad es. lAssembler). Richiedono uno sforzo di codifica maggiore da parte del programmatore. Linguaggi di Alto Livello. Sono linguaggi di programmazione in cui ad ogni istruzione corrisponde un insieme di azioni più articolato. Richiedono uno sforzo di codifica inferiore.

15 Esempio Il linguaggio L 1 mette a disposizione i comandi: Aggiungi_una_unità_al_dato_A Leggi_dato_A Leggi_dato_B Esegui_per Il linguaggio L 2 mette a disposizione i comandi: Leggi_dato_A Leggi_dato_B Somma

16 Esempio (segue) Vogliamo scrivere un programma per la somma di due numeri memorizzati rispettivamente nei registri A e B. L 2 è un linguaggio di livello più alto rispetto a L 1, perché offre al programmatore la possibilità di usare istruzioni che sono meno vicine al modo i cui lavora il processore. In L 1 : Leggi_dato_A Leggi_dato_B Esegui_per B volte: Aggiungi_una_unità_al_dato_A In L 2 : Leggi_dato_A Leggi_dato_B Somma (A,B)

17 Il linguaggio macchina Il processore è in grado è in grado di riconoscere (e quindi di eseguire) solo programmi scritti in un proprio linguaggio di basso livello. Ogni modello di processore (es: Intel, Pentium, Motorola, PowerPC) ha un proprio linguaggio macchina diverso da quello degli altri processori. Un programma scritto in un linguaggio diverso dal linguaggio macchina deve essere quindi tradotto nel linguaggio che il processore sa individuare

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

19 Linguaggi di alto livello Per facilitare la stesura dei programmi sono stati definiti linguaggi di programmazione di alto livello che permettono di descrivere le soluzioni dei problemi ad un livello di astrazione di poco inferiore a quanto visto fino ad ora per gli algoritmi permettono di descrivere le operazioni di ingresso/uscita sono traducibili automaticamente in linguaggio macchina

20 Diversità dei linguaggi Sono stati sviluppati diversi linguaggi Fortran, Lisp, Cobol, Basic, Pascal, C, C++, Java, Prolog I linguaggi si caratterizzano per sintassi: linsieme delle regole che specificano come comporre istruzioni ben formate semantica: linsieme delle regole che specificano come associare ad una istruzione una azione da compiere La diversità fra i vari linguaggi può consistere nella sintassi (le stesse azioni vengono descritte con termini diversi) o nella semantica

21 Larte della programmazione La soluzione di un problema tramite un programma è un procedimento che non si esaurisce solo nello scrivere linee di codice in un dato linguaggio di programmazione, ma comprende una fase di progetto che precede e una di verifica che segue la scrittura del codice

22 Larte della programmazione Definizione del problema Algoritmo per la soluzione del problema Codifica Debugging Validazione Documentazione Manutenzione

23 Definizione del problema Definizione degli ingressi e delle uscite quali variabili quale dominio per ogni variabile Risoluzione delle ambiguità Scomposizione in problemi più semplici

24 Algoritmo Soluzione in pseudocodice Soluzione in diagramma a blocchi strutturato

25 Codifica Traduzione dellalgoritmo in istruzioni del linguaggio di programmazione

26 Debugging Correzione degli errori sintattici e semantici: Errori sintattici espressioni non valide o non ben formate nel linguaggio di programmazione Errori semantici Comportamento non aderente alle aspettative/alla intenzionalità del programmatore

27 Validazione Test su tutte le condizioni operative del programma Caso degli input estremi (vettori di dimensioni 0 o 1, variabili nulle, file vuoti, ecc.)

28 Documentazione Inserimento di commenti esplicativi nelle varie parti del programma per facilitarne la comprensione dopo molto tempo dalla sua stesura per terze persone

29 Manutenzione Modifica del programma per soddisfare il cambiamento delle specifiche con cui deve operare

30 Commenti Limportanza dei commenti e della documentazione: i programmi possono essere utilizzati più volte nel corso di tempi lunghi (mesi, anni) fare cambiamenti (aggiunta di caratteristiche) risolvere errori documentare il programma serve per rendere chiaro ed evidente lo scopo delle varie parti del codice

31 Scrittura del programma: nozione di variabile Come si indirizzano le celle di memoria? Invece di usare gli indirizzi fisici si usano dei nomi simbolici (es. x, y, nome, …) che vengono mappati n indirizzi fisici attraverso la fase di compilazione Le variabili vanno dichiarate allinizio del programma (celle diverse, nomi diversi) Valorecontenuto Valore di una variabile = contenuto corrente della cella di memoria associata alla variabile

32 Scrittura del programma: nozione di costante Per esprimere direttamente valori prefissati (cioè che non devono essere modificati dal programma) si utilizzano le costanti costante Una costante è una rappresentazione simbolica di un numero, stringa, ecc. (es. 1, ciao, 3.14, ecc.) Il set di costanti disponibile dipende dal linguaggio di programmazione

33 Scrittura del programma: espressioni Le espressioni servono per rappresentare calcoli a livello simbolico espressione 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

34 Programma VBA La sintassi di un programma consiste di due blocchi Dichiarazione di variabili e costanti: Const pi As Single = 3,14, nome As String= Beatrice Dim x As Integer, y As String, z As Variant Sono liste di dichiarazioni introdotte rispettivamente dalla keyword const e dim Sub (nome()) … End Sub ; Sequenza di istruzioni racchiusa tra le parole chiave Sub (nome()) … End Sub e separate dal punto e virgola ;

35 Esecuzione di un programma Qual è il significato (semantica) di un programma? Trasformazione da Input iniziale a Output finale Un programma deve essere eseguito per poter calcolare la trasformazione Input Output stato iniziale, corrente e finale Lesecuzione modifica lo stato del programma. Si parla di stato iniziale, corrente e finale Lesecuzione dipende dalla semantica dei singoli costrutti

36 Lettura e scrittura Le operazioni di lettura e scrittura servono per ottenere valori in input (es. tastiera) o fornire valori in output (es. video) Assumiamo che input e output siano sequenze di valori: write(Variabile) Variabile write(Variabile): aggiunge il valore corrente di Variabile alloutput read(Variabile) Variabile read(Variabile): toglie il primo valore della lista input e lo assegna a Variabile

37 Assegnamento corrente Si utilizza per assegnare il valore corrente di unespressione ad una variabile Variabile = Espressione valval Se nello stato corrente Espressione si valuta in val allora Variabile varrà val dopo lesecuzione dellassegnamento Es. x=x+1 Lespressione x+1 va valutata nello stato corrente. Il risultato dellespressione è assegnato nuovamente a x.

38 Istruzione condizionale Sintassi: CondizioneLista Istruzioni 1 If Condizione Then Lista Istruzioni 1 Lista Istruzioni 2 Else Lista Istruzioni 2 End If Condizione Condizione = Espressione booleana Condizione Lista Istruzioni 1 Lista Istruzioni 2 verofalso vero Se la condizione si valuta vero si esegue il ramo then, altrimenti si esegue il ramo else

39 Esempi Leggi da tastiera e scrivi su video: Sub Es1() Dim s As String read(s) write(s) End Sub Leggi due numeri, sommali e stampa il risultato: Sub Es2() Dim x As Integer, y As Integer, somma As integer read(x) read(y) somma=x+y write(somma) End Sub Trova il massimo tra 2 numeri: Sub Es3() Dim x As Integer, y As Integer read(x) read(y) If x>y Then write(x) Else write(y) End If End Sub

40 Istruzione ciclica Sintassi: Condizione Do While Condizione Lista Istruzioni Lista Istruzioni Loop Lista Istruzioni Condizionevero. Lista Istruzioni viene eseguita fintantoché Condizione si valuta in vero. Condizione falso Quando Condizione si valuta in falso si passa allistruzione seguente del programma. Condizione ListaIstruzioni - Iterazione vero falso

41 Esempio: somma di k numeri Problema: leggere k e quindi calcolare la somma di k valori letti dallinput. Memorizziamo k, la somma e i valori letti V 1, V 2, …,V k poiché si usa ogni V i una sola volta, bastano 3 variabili: k, x ed S x manterrà il valore V i corrente, S la somma progressiva Sub Es4() Dimr k As Integer,x As Integer,S As Integer read(k) S=0 Do While k>0 read(x) S=S+x k=k-1 Loop write(S) End Sub

42 Esecuzione del while Inizialmente: val(x),val(k)=indefiniti, val(S)=0 Si legge il valore 3: val(k)=3 Poiché val(k)>0, si entra nel ciclo Si legge il primo valore in input V 1 su cui fare la somma e si memorizza in x Si calcola S=S+x e si decrementa k Quindi, dopo lesecuzione delle istruzioni dentro il ciclo, val(x)=3, val(S)=3, val(k)=2 Si prosegue con il ciclo fino a che val(k)=0 A questo punto si esce dal ciclo e si scrive il valore finale di S

43 Esempio: Calcolo MCD algoritmo di Euclide 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

44 Algoritmo di Euclide Leggo m e n (*) Fino a che m diverso da n se m>n allora sottraggo n ad m se n>m allora sottraggo m ad n torno a (*) Quando m=n stampo, ad esempio, n

45 Es. Calcolo MCD Sub Es5() Dim m As Integer,n As Integer read(m) read(n) Do While m<>n If m>n Then m=m-n Else n=n-m End If Loop write(n)(Nota: a questo punto n=m!) End Sub

46 Strutture dati complesse interostringa 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 list LP arrayrecord Nel linguaggio didattico LP abbiamo solo array e record

47 Array Un array (vettore) 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(N) Dim NomeVarArray(N) As Integer (N costante) Nelle espressioni, assegnamenti, ecc. si utilizza poi: NomeVarArray NomeVarArray(Exp) dove Exp è un espressione che si valuta in un valore da 0…N-1

48 Esempio: Array Leggere k<=10 valori e stamparli in ordine inverso: Dobbiamo leggere V 1, …,V k, memorizzarli e poi stamparli in ordine V k, …, V 1. 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. Sub Dim A(10) As Integer Dim i As Integer, k As Integer read(k) i=1 Do While ik read(A(i)) i=i+1 Loop i=k Do While i>0 write(A(i)) i=i-1 Loop End Sub

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

50 Esempio di record Coordinate var Punto:record x,y:int end; z:int; Punto.x=3; Punto.y=2; z=Punto.x*Punto.y;

51 Compilatore e Loader compilatore Un compilatore è un programma che traduce un programma scritto in linguaggio ad alto livello in un programma scritto in linguaggio macchina Un compilatore produce quindi un programma eseguibile (Es..exe in Windows) loader Il loader è il programma che carica un programma in linguaggio macchina in memoria centrale ( e quindi mappa indirizzi logici in indirizzi fisici)

52 Come funziona la compilazione Un compilatore (che abbia anche la funzione di loader) deve: riconoscere la sintassi del linguaggio ad alto livello associare uno spazio in memoria centrale per poter gestire le variabili dichiarate nel programma tradurre i costrutti di alto livello in sequenze di istruzioni in linguaggio macchina


Scaricare ppt "Terza Lezione Introduzione alla programmazione lll."

Presentazioni simili


Annunci Google