PROGRAMMAZIONE: linguaggi Linguaggi ad alto livello : Java, Basic, C++, HTML Linguaggi a basso livello: assembly Linguaggio macchina 1 PROGRAMMAZIONE: traduttori COMPILATORI: da linguaggio evoluto a linguaggio macchina (eventualmente attraverso assembly) INTERPRETI: da linguaggio evoluto a linguaggio macchina, una istruzione alla volta ASSEMBLATORI: da linguaggio assembly a linguaggio macchina 2 ELEMENTI DEI LINGUAGGI Ogni linguaggio ha un alfabeto costituito da differenti caratteri. Un insieme di caratteri costituisce una parola. Istruzione è un elemento del linguaggio di programmazione con cui si richiede l’esecuzione di una operazione. • Ingresso • Uscita • Assegnazione • Confronto • Operazione logica o matematica • Salto 3 ELEMENTI DEI LINGUAGGI Funzione: insieme di espressioni il cui risultato dipende dal valore assunto da una o più variabili. Struttura: insieme razionale e ordinato di varie istruzioni • Sequenza • Selezione • Ripetizione 4 ALGORITMI Un algoritmo (detto anche procedura, prescrizione, processo, routine, metodo) è un insieme di regole (dette anche direttive o istruzioni) che, eseguite secondo un ordine prestabilito, consentono di trovare il risultato di un problema a partire dai dati in ingresso. 5 ALGORITMI Le caratteristiche fondamentali degli algoritmi sono: 1.non ambiguità: le operazioni indicate devono essere sufficientemente semplici e ben definite da poter essere comprese da un esecutore non particolarmente esperto (uomo o macchina); 2.eseguibilità: l’esecutore deve essere in grado di eseguire ogni singola regola con le risorse a sua disposizione; 3.finitezza: ogni algoritmo deve terminare dopo un numero finito di passi, cioè in un intervallo finito di tempo. 6 DIAGRAMMI DI FLUSSO Il diagramma di flusso è una rappresentazione grafica di un algoritmo costituita da un insieme di simboli (figure geometriche standard) collegate da frecce. 7 DIAGRAMMI DI FLUSSO 8 RAPPRESENTAZIONE A BLOCCHI DI SELEZIONI 9 RAPPRESENTAZIONE A BLOCCHI DI SELEZIONI 10 RAPPRESENTAZIONE A BLOCCHI DI RIPETIZIONI 11 Esempio: Massimo Comun Divisore. Un esempio di algoritmo contenente due selezioni binarie con una sola azione è fornito da quello che calcola il Massimo Comun Divisore (MCD) di due interi positivi secondo il seguente metodo di Euclide Per calcolare il MCD di due interi positivi: • si divide il maggiore per il minore • se il resto è 0 il minore rappresenta il MCD cercato • altrimenti il minore sostituisce il maggiore, il resto sostituisce il minore e il procedimento ricomincia da capo. La corrispondente espressione in pseudo istruzioni è la seguente: 1. leggi x, y; 2. if (x < y) scambiali; 3. dividi x per y e chiama r il resto; 4. poni x = y; 5. poni y = r; 6. if (r == 0) stampa x ; fine 7. vai a 3); Il relativo diagramma di flusso è indicato in figura. Come si può osservare, nella forma strutturata sono scomparse le istruzioni di salto e i riferimenti numerici delle singole istruzioni. Esempio: lati di un triangolo. Come esempio di selezioni binarie in cascata si può considerare il seguente PROBLEMA: “scrivere un algoritmo che consenta di stabilire se tre numeri, a, b, c possono essere i lati di un triangolo”. ALGORITMO: come è noto, in un triangolo la somma di due lati qualsiasi è maggiore del terzo. Perciò dovranno essere contemporaneamente soddisfatte le tre condizioni: a + b > c a + c > b b + c > a Esse si traducono nelle seguenti pseudo istruzioni: 1) 2) 3) 4) 5) 6) 7) 8) leggi a, b, c; se (a + b <= c) vai a 7); se (a + c <= b) vai a 7); se (b + c <= a) vai a 7); stampa “Lati validi”; fine; stampa “Lati non validi”; fine; e quindi nel diagramma di flusso indicato a lato: Esempio: divisione con sottrazioni ripetute. Un esempio di ciclo con guardia all’inizio è costituito dall’algoritmo che esegue la divisione intera fra due numeri naturali con il seguente metodo delle sottrazioni ripetute: Per dividere tra loro due numeri naturali: • si sottrae il divisore dal dividendo; • si continua a sottrarlo dal risultato dell’ultima sottrazione fino a che tale risultato sia maggiore o uguale al divisore • il numero di sottrazioni effettuate fornisce il quoziente • il risultato dell’ultima fornisce il resto della divisione Questo algoritmo si traduce facilmente nel diagramma di flusso seguente, dove la variabile res contiene inizialmente il dividendo, la variabile den il divisore. res contiene poi i risultati delle successive sottrazioni, l’ultimo dei quali fornisce appunto il resto. Il quoziente è fornito dal contatore quoz, che inizialmente vale 0 e viene incrementato di 1 a ogni sottrazione eseguita. Esempio: moltiplicazione con addizioni ripetute. Un esempio di ciclo con guardia alla fine è costituito dall’algoritmo che esegue la moltiplicazione di due numeri naturali con il metodo delle addizioni ripetute: per moltiplicare tra loro due numeri naturali si somma uno di essi a se stesso un numero di volte uguale all’altro. Questo algoritmo si traduce facilmente nel seguente diagramma di flusso dove indichiamo con •A, B i due numeri da moltiplicare •prod il prodotto •K una variabile contatore, posta inizialmente uguale a uno dei due numeri. K viene diminuita di 1 ogni volta che si esegue un’addizione, e quando raggiunge il valore 0 determina la fine del ciclo.