Algoritmi Introduzione Definizione Caratteristiche Propriet Rappresentazione Flow Chart

  • Slides: 10
Download presentation
Algoritmi Introduzione Definizione Caratteristiche Proprietà Rappresentazione Flow Chart Codifica Linguaggi per la programmazione Il

Algoritmi Introduzione Definizione Caratteristiche Proprietà Rappresentazione Flow Chart Codifica Linguaggi per la programmazione Il Codice Modelli Astrazioni Strutture di controllo Tipi di dati

Algoritmi -> Introduzione -> Definizione Algoritmo significato simile a quello di ricetta, processo, tecnica,

Algoritmi -> Introduzione -> Definizione Algoritmo significato simile a quello di ricetta, processo, tecnica, metodo, procedura, routine, . . , ossia un insieme finito di comandi (istruzioni) che producono una sequenza di operazioni in grado di risolvere uno specifico problema Il termine algoritmo deriva dal nome del matematico persiano: Abu Ja’far Mohammed Ibn Musa Al-Khowarizmi.

Algoritmi -> Caratteristiche -> Proprietà Un algoritmo deve essere caratterizzato dalle seguenti proprietà •

Algoritmi -> Caratteristiche -> Proprietà Un algoritmo deve essere caratterizzato dalle seguenti proprietà • FINITEZZA: un numero finito di passi • DEFINITEZZA: passi ben definiti, non ambigui • EFFETTUABILE: passi eseguibili in tempo finito, passi eseguibili ‘meccanicamente’ • INPUT: zero o più valori d’ingresso • OUTPUT: uno o più valori di uscita. In pratica si vuole qualche cosa di più da un algoritmo: si desidera che sia un buon algoritmo ( buono secondo una metrica appropriata ). Importante è anche il problema di ‘raccontarlo’ ad una macchina in grado di eseguirlo.

Algoritmi -> Rappresentazione -> Flowchart Il flowchart (o diagramma di flusso) consente una rappresentazione

Algoritmi -> Rappresentazione -> Flowchart Il flowchart (o diagramma di flusso) consente una rappresentazione grafica dell'algoritmo mediante alcuni simboli (o blocchi) caratteristici delle azioni e le linee orientate (o archi) che descrivono il flusso dell'esecuzione.

Algoritmi -> Codifica -> Linguaggi di programmazione Caratteristiche generali dei linguaggi I linguaggi di

Algoritmi -> Codifica -> Linguaggi di programmazione Caratteristiche generali dei linguaggi I linguaggi di programmazione sono repertori di comandi e parole chiave, da utilizzarsi nel rispetto di regole rigorose di composizione, che costituiscono la sintassi di tali linguaggi, mentre le parole chiave sono il loro lessico. I linguaggi che si sono affermati nel tempo, il FORTRAN, C, COBOL, il BASIC, il Pascal, che sono linguaggi generalizzati e procedurali. • Un linguaggio generalizzato permette di fare al computer qualiasi cosa: creare tabelle, eseguire calcoli matematici, aggregare sequenze di caratteri in modo da formare parole che hanno un senso compiuto (per gli umani, non per i computer), tracciare segni grafici sul monitor di un computer e altro ancora. • Un linguaggio procedurale è dotato di istruzioni e comandi con i quali si indica al computer come deve operare per arrivare al risultato che interessa al programmatore. Un lingllaggio procedurale serve per scrivere procedure, che il computer esegue con sovrana imperturbabilità.

Algoritmi -> Codifica -> Il codice L’algoritmo di Euclide in PASCAL Ad esempio questo

Algoritmi -> Codifica -> Il codice L’algoritmo di Euclide in PASCAL Ad esempio questo algoritmo, può essere rappresentato usando un linguaggio di codifica (Pascal), come un insieme di parole-chiave che traducono le operazioni più comuni di un algoritmo (acquisizione dei dati, controllo del flusso dei dati, assegnazioni, uscita dei risultati, . . . ) 01 PROGRAM Euclide ( INPUT, OUTPUT ); 02 VAR m, n, r, MCD, temp : INTEGER; 03 (*---------------*) 04 BEGIN 05 READ (m); READ (n); 06 (*---------------*) 07 IF m < n THEN BEGIN 08 temp : = n; n : = m; m : = temp 09 END; 10 (*---------------*) 11 REPEAT 12 r : = m MOD n; 13 m : = n; 14 n : = r 15 UNTIL r = 0; 16 (*---------------*) 17 MCD : = m; 18 WRITELN ( 'MCD = ', MCD ) 19 END. Osservazioni • Struttura generale del programma: intestazione (PROGRAM. . . ), dichiarazione dei dati (VAR. . . ) corpo dell'algoritmo (BEGIN. . . END) • Le dichiarazioni ed i commenti: VAR dichiara nome e tipo di dato, commenti tra (*. . . *) • Ordine di esecuzione delle istruzioni: ordine con cui compaiono nel testo del programma • L'ordine puo' essere modificato con le istruzioni IF. . . THEN (controllo di condizioni) e REPEAT. . . UNTIL (ripetizione di istruzioni)

Algoritmi -> Modelli -> Astrazione Gli Algoritmi come modelli del mondo reale Una differente

Algoritmi -> Modelli -> Astrazione Gli Algoritmi come modelli del mondo reale Una differente visione di un algoritmo è quella che lo considera un MODELLO (Astratto) della realtà. In questa visione dallo studio del comportamento del modello (in relazione ad un dato problema) si ottengono informazioni sulla soluzione di quel problema nella realtà. Il passaggio dalla realtà al modello avviene mediante il meccanismo dell’ASTRAZIONE; il passaggio inverso dal modello al mondo reale prende il nome di INTERPRETAZIONE. Esempi • Una carta geografica od una mappa stradale • Un programma di statica per il calcolo delle strutture in cemento armato di un edificio • Le relazioni: ST = V · T; SV=0 = ½ V 2/ D che descrivono lo spazio percorso in T secondi da un oggetto in movimento a velocità costante e, rispettivamente, lo spazio necessario per fermare un corpo in movimento a velocità V sottoposto ad una decelerazione costante D.

Algoritmi -> Modelli -> Strutture di controllo STRUTTURE DI CONTROLLO Dall’esame di alcuni esempi

Algoritmi -> Modelli -> Strutture di controllo STRUTTURE DI CONTROLLO Dall’esame di alcuni esempi di algoritmo ci si convince facilmente della necessità di affiancare ai comandi, o istruzioni, che descrivono le azioni da eseguire, opportune istruzioni con lo scopo di controllare l’ordine di esecuzione delle azioni da eseguire. Gli elementi linguistici atti a governare l’ordine di esecuzione delle istruzioni prendono il nome di STRUTTURE DI CONTROLLO e costituiscono un capitolo importante di ogni linguaggio di programmazione. Alcune domande: • Quali sono le strutture di controllo disponibili, normalmente, nei linguaggi di programmazione ? • Più in particolare: quali strutture di controllo sono disponibili in linguaggio Pascal ? • Con tali strutture si può esprimere qualsiasi algoritmo ? Una risposta a queste domande si ha dal seguente, fondamentale, Teorema di Jacopini-Bohm (semplificato): Le strutture di controllo dei linguaggi di tipo assemblativo (linguaggi a salti) sono equivalenti alle tre strutture di controllo: Sequenza, Selezione binaria ( IF. . . THEN. . . ELSE. . . ), Iterazione ( WHILE. . . DO. . . ), ovvero tutti gli algoritmi che possono essere codificati con un tipo di strutture possono esserlo anche con l’altro e viceversa. Esse sono anche complete, nel senso che con

Algoritmi -> Modelli -> Le tre strutture LE TRE STRUTTURE DI CONTROLLO L’uso di

Algoritmi -> Modelli -> Le tre strutture LE TRE STRUTTURE DI CONTROLLO L’uso di strutture di controllo predefinite gioca un ruolo importante nella pratica della programmazione strutturata, che tende a privilegiare una programmazione metodica ed ordinata secondo principi architetturali basati su: • uso di strutture di controllo standard • sviluppo di tipo top-down. Le tre strutture di controllo standard predefinite sono: Sequenza BEGIN S 1; S 2; . . . Sn END Selezione binaria IF L-exp THEN S 1 ELSE S 2 ; Iterazione WHILE L-exp DO S;

Tipi di dati -> I Dati -> Caratteristiche I DATI I dati in memoria

Tipi di dati -> I Dati -> Caratteristiche I DATI I dati in memoria sono un insieme anonimo di bit. I dati sono interpretati tramite la Dichiarazione. L’insieme dei bit e la struttura interpretativa definiscono il valore del dato. I dati sono caratterizzati da: • Nome • Tipo • Valore Il Tipo non è solo un metodo per interpretare un insieme di bit ma definisce anche: • I valori che una variabile può assumere • Le operazioni ammissibili su una variabile • Il modo per riferirsi a un dato o una sua sottoparte Esempi: VAR Numero. Giorni : Integer; Capitale, Tasso : Real; Finito, Divisibile : Boolean; Nome : String [ 30 ]; Cognome : String [ 30 ]; Nome. Completo : String [ 33 ]; Begin. . . Nome. Completo : = Nome + ‘. ’ + ’ ‘ + Cognome;