Programmazione strutturata

Documenti analoghi
3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)

Introduzione alla programmazione Algoritmi e diagrammi di flusso. Sviluppo del software

Il linguaggio di programmazione Python

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Concetti di Base sulla Programmazione. Prof.Ing.S.Cavalieri

= < < < < < Matematica 1

Cos è un algoritmo. Si dice algoritmo la descrizione di un metodo di soluzione di un problema che sia

3. Indicare cosa sta a significare la figura geometrica del rombo in un diagramma a blocchi

Rappresentazione con i diagrammi di flusso (Flow - chart)

Informatica Generale Andrea Corradini I linguaggi di programmazione

Altrimenti, il M.C.D. di a e b è anche divisore di r (e.g. a=15,b=6,r=3 che è il M.C.D.)

INFORMATICA. Scienza degli elaboratori elettronici (Computer. informazione

PROGRAMMAZIONE STRUTTURATA

Dal Problema all Algoritmo. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

Come ragiona il computer. Problemi e algoritmi

Introduzione alla programmazione. Walter Didimo

Unità Didattica 2 I Linguaggi di Programmazione

PROGRAMMAZIONE: Le strutture di controllo

Appunti del corso di Informatica 1 (IN110 Fondamenti) 2 Algoritmi e diagrammi di flusso

LA METAFORA DELL UFFICIO

Lez. 5 La Programmazione. Prof. Salvatore CUOMO

Algoritmi e loro proprietà. Che cos è un algoritmo? Un esempio di algoritmo

Elaborazione dell informazione

STRUTTURA E LOGICA DI FUNZIONAMENTO DEL COMPUTER

Programmazione C Massimo Callisto De Donato

LA METAFORA DELL UFFICIO

Linguaggi, compilatori e interpreti

Concetti Introduttivi. Il Computer

Istruzioni macchina. Dove sono gli operandi? Ciclo della CPU. Elementi di un istruzione macchina. Rappresentazione delle istruzioni

DAGLI ALGORITMI AI LINGUAGGI. Linguaggi di Programmazione

Algoritmi e diagrammi di flusso

Algoritmi e soluzione di problemi

Istruzioni Condizionali

PROGRAMMA DI SCIENZE E TECNOLOGIE APPLICATE 2015/2016 Classe 2ª Sez. C Tecnologico

Corso di Informatica di Base

Teoria dell Informazione

Modulo 1. Concetti base della Tecnologia dell informazione. Prof. Nicolello Cristiano. Modulo 1

Sistemi Web per il turismo - lezione 3 -

Formalismi per la descrizione di algoritmi

Le etichette nei programmi. Istruzioni di branch: beq. Istruzioni di branch: bne. Istruzioni di jump: j

Architettura di un calcolatore e linguaggio macchina. Primo modulo Tecniche della programmazione

LINGUAGGI DI ALTO LIVELLO

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Dispensa di Informatica II.1

Il processore. Istituzionii di Informatica -- Rossano Gaeta

ALGORITMI. Obiettivo: risolvere problemi mediante l uso di un elaboratore elettronico. Elaboratore elettronico

Capitolo 3 L elaborazione e la strutturazione dell informazione

Dall algoritmo al programma

Indice. Prefazione. 3 Oggetti e Java 53

Codifica dei Numeri. Informatica ICA (LC) 12 Novembre 2015 Giacomo Boracchi

Algoritmi e Linguaggi

Algoritmi e Programmi

Linguaggi di Programmazione

Linguaggi di alto livello, compilatori e interpreti

Linguaggi di programmazione

Linguaggi di Programmazione

Algebra di Boole X Y Z V. Algebra di Boole

Istruzioni iterative (o cicliche)

Fondamenti di programmazione!! Parte 2!

Diagrammi a blocchi 1

(1) (2) (3) (4) 11 nessuno/a (1) (2) (3) (4) X è il minore tra A e B nessuno/a X è sempre uguale ad A X è il maggiore tra A e B

PROCESSI NON SEQUENZIALI E TIPI DI INTERAZIONE

in termini informali: un algoritmo è una sequenza ordinata di operazioni che risolve un problema specifico

Richiami sull architettura del processore MIPS a 32 bit

Cosa è l Informatica?

La codifica digitale

ALGORITMI 2 FINALITÁ

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Architettura hardware

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Compitino di Laboratorio di Informatica CdL in Matematica 13/11/2007 Teoria Compito A

Algebra di Boole Algebra di Boole

Diagrammi a blocchi 1

PROBLEMI ALGORITMI E PROGRAMMAZIONE

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

Informatica Generale 1 - Esercitazioni Flowgraph, algebra di Boole e calcolo binario

Introduzione al Linguaggio C Corso di Informatica Laurea in Fisica

Fondamenti di Informatica - 1. Prof. B.Buttarazzi A.A. 2011/2012

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Introduzione alla programmazione

Rappresentazione di numeri relativi (interi con segno) Rappresentazione di numeri interi relativi (con N bit) Segno e Valore Assoluto

Componenti e connessioni. Capitolo 3

Corso di Fondamenti di Informatica Linguaggi di Programmazione

Transcript:

Corso di Fondamenti di Informatica Corso di Laurea in Ingegneria Gestionale (L-Z) 3. (testo di riferimento: Bellini-Guidi) Ing. Michele Ruta 1di 29

Linguaggi di programmazione Un programma è un algoritmo espresso in un linguaggio formale, detto linguaggio di programmazione: interpretabile ed eseguibile da un calcolatore non ambiguo perché governato da regole grammaticali precise Classificazione: linguaggi di basso livello (linguaggi macchina e linguaggi assembler): dipendono dalla struttura fisica del tipo di computer per cui sono stati progettati linguaggi di alto livello: più vicini alla forma mentis dell uomo, ma da tradurre in codice di basso livello per l interpretazione da parte dell elaboratore (C, Java, ) 2di 29

Linguaggio Macchina Linguaggio formale che il computer è in grado di interpretare ed eseguire senza mediazioni Programmi, codice oggetto, rappresentati da una sequenza di cifre binarie che codificano le istruzioni e i dati su cui lavora la CPU istruzioni fortemente correlate all architettura del calcolatore, perché corrispondenti ad operazioni direttamente eseguibili dall hardware esempio di istruzione ad un solo operando : codice operativo dell istruzione operando 00000010 000000000011100 3di 29

Esempio di Codice Macchina Istruzioni Codice operativo Operando Codice mnemonico 00000010 000000011011100 LOAD 220 00000110 000000011111100 SUM 252 00000100 000000011011100 MEM 220 Le istruzioni fanno uso del registro operando della CPU chiamato A (detto anche accumulatore) Codice mnemonico (istruzioni in assembler) 4di 29

Esempio di Codice Macchina La prima istruzione (00000010) legge il valore nella cella di memoria specificata dall operando (220 in decimale) e lo carica in A Stato della macchina dopo la prima istruzione: Memoria CPU indirizzo. 220.. contenuto. 6.. Accumulatore (A) 6 5di 29

Esempio di Codice Macchina La seconda istruzione somma il contenuto di A e il valore contenuto nella cella di memoria specificata dall operando (252 in decimale) e la scrive in A Stato della macchina dopo la seconda istruzione Memoria CPU indirizzo. 220. 252 contenuto. 6. 31 Accumulatore (A) 37 6di 29

Esempio di Codice Macchina La terza istruzione memorizza il contenuto di A nella cella di memoria specificata dall operando (la stessa da cui era stato caricato il primo addendo) Stato della macchina dopo la terza istruzione: Memoria CPU indirizzo. 220. 252 contenuto. 37. 31 Accumulatore (A) 37 7di 29

Linguaggio assembler Le singole istruzioni binarie sono rappresentate con un codice mnemonico LOAD 220 SUM 252 MEM 220 Traduzione in linguaggio macchina ad opera di programmi detti assemblatori, forniti dai costruttori 8di 29

Microlinguaggi Usati per i microprogrammi: corrispondono ad ogni istruzione del linguaggio macchina costituiti da insiemi di microistruzioni: sequenze di bit (microordini) che costituiscono i segnali di controllo per pilotare i componenti del processore ed eseguire le istruzioni cablate dal costruttore nell unità di controllo (fisicamente risiedono in specifiche ROM) della CPU per eseguire le operazioni corrispondenti alle istruzioni del linguaggio macchina Obbediscono alla necessità di mediazione tra linguaggio macchina e hardware (lo stesso processore può essere programmato per finalità diverse) 9di 29

Linguaggi di alto livello Più simili al linguaggio naturale rispetto a linguaggio macchina o assembler Utilizzano simboli matematici e parole tipiche delle lingue naturali (inglese) Usati per scrivere le istruzioni che compongono il codice sorgente Appositi software, detti compilatori, provvedono a tradurre il codice sorgente nell equivalente codice eseguibile dalla macchina 10 di 29

Linguaggi di alto livello La precedente somma codificata in linguaggio C diventa: a = 6; b = 31; a = a+b; a e b non sono registri o locazioni di memoria ma variabili identificate da: Nome (possibilità di usare nomi simbolici del contenuto, per facilitare la leggibilità del programma) Tipo (insieme di valori che può assumere) Vantaggi Programma portabile su ogni macchina con compilatore per il linguaggio in cui è scritto il programma Gestione indirizzi di memoria totalmente delegata al calcolatore 11 di 29

Algoritmi come sequenze di stati Esempio: determina il Massimo Comune Divisore (MCD) a. prendi due numeri b. calcola il resto della divisione intera del numero maggiore per il minore c. sostituisci il numero maggiore con il resto della divisione d. finché tale resto è diverso da zero torna all istruzione b. e. il numero maggiore (e non nullo) è il MCD cercato 12 di 29

Algoritmi come sequenze di stati Flusso di esecuzione dell algoritmo MCD con i valori 924 e 120 passo 1 924 e 120 passo 2 84 è il resto della divisione intera di 924 per 120 passo 3 120 e 84 passo 4 il resto è diverso da zero, torna all istruzione b. passo 5 36 è il resto della divisione intera di 120 per 84 passo 6 84 e 36 passo 7 il resto è diverso da zero, torna all istruzione b. passo 8 12 è il resto della divisione intera di 84 per 36 passo 9 36 e 12 passo 10 il resto è diverso da zero, torna all istruzione b. passo 11 0 è il resto della divisione intera di 36 per 12 passo 12 12 e 0 passo 13 il resto è uguale a zero, prosegui con l istruzione successiva passo 14 12 è il MCD 13 di 29

Algoritmi come sequenze di stati Sequenza di stati nel flusso dell algoritmo MCD(924,120) Istruzioni all interno dei cerchi Passi in esecuzione dell istruzione all esterno del relativo cerchio Passaggio da un istruzione all altra tramite archi L esecuzione di un passo determina uno stato Il susseguirsi dei passi di esecuzione determina una sequenza di stati Il flusso è sequenziale ed ordinato perché l algoritmo segue le regole della programmazione strutturata 14 di 29

Programmazione non strutturata Esempio: algoritmo equivalente per il calcolo del Massimo Comune Divisore (MCD) a. prendi due numeri b. calcola il resto della divisione intera del numero maggiore per il minore c. se il resto è uguale a zero vai all istruzione f. d. sostituisci il numero maggiore con il resto della divisione e. vai all istruzione b. f. il numero minore è il MCD cercato Salto incondizionato Salto condizionato 15 di 29

Programmazione non strutturata Flusso di esecuzione dell algoritmo MCD con i valori 924 e 120 passo 1 924 e 120 passo 2 84 è il resto della divisione intera di 924 per 120 passo 3 il resto è diverso da zero (prosegui in sequenza) passo 4 120 e 84 passo 5 vai all istruzione b. passo 6 36 è il resto della divisione intera di 120 per 84 Passo 7 il resto è diverso da zero(prosegui in sequenza) Passo 8 84 e 36 passo 9 vai all istruzione b. passo 10 12 è il resto della divisione intera di 84 per 36 Passo 11 il resto è diverso da zero(prosegui in sequenza) passo 12 36 e 12 passo 13 vai all istruzione b. passo 14 0 è il resto della divisione intera di 36 per 12 passo 13 il resto è uguale a zero, vai all istruzione f. passo 14 12 è il MCD 16 di 29

Programmazione non strutturata Sequenza di stati nel flusso dell algoritmo MCD(924,120) 5,9,13 e a b c d 3,7,11,15 4,8,12 1 2,6,10,14 f 16 Si parte dal nodo iniziale e poi si passa ai nodi successivi selezionando il cammino in base allo stato che si viene a creare dopo l esecuzione delle operazioni specificate nel nodo L arco e-b corrisponde ad un salto incondizionato (goto) L uso dei goto : porta a sequenze non lineari di stati, molto contorte specie per programmi complessi (si parla di spaghetti programming ) ha un numero di istruzioni minori e riusa parti di programma tramite salti porta a programmi difficili da correggere, manutenere ed estendere 17 di 29

L obiettivo della programmazione strutturata è di rendere il passaggio tra le istruzioni dall inizio alla fine di un programma come flusso ordinato Realizzazione: Condizione ideale: sequenza lineare di operazioni, senza alternative possibili (limite: ridotta potenza degli algoritmi) Condizione reale: regole coerenti con il pensiero naturale che portano ad effetti equivalenti all esecuzione sequenziale di operazioni Costrutti consentiti (strutture di controllo del flusso): Sequenze: fai questo Diramazioni: se è verificata la condizione fai questo altrimenti fai quello Cicli: finché è verificata una condizione fai questo Costrutti non consentiti: Salto incondizionato (goto): ancora nella sintassi solo per compatibilità verso il basso (era necessario nel linguaggio macchina e assembler) 18 di 29

TEOREMA DI BÖHM-JACOPINI tutti i programmi possono essere scritti con l utilizzo delle sole strutture di controllo: sequenza, diramazione e ciclo (senza l uso del salto goto) Corrado Böhm e Giuseppe Jacopini hanno dimostrato che la potenza di calcolo dei programmi strutturati (più chiari, più facili da scrivere e da modificare e probabilisticamente più esenti da errori) non è inferiore a quella dei programmi che usano il goto 19 di 29

Sequenza: flow-chart Operazioni: fai questo fai quello Esempio: a = 5; b = 3; z = a+b; 20 di 29

Diramazione: flow-chart Operazioni: se è verificata una condizione fai questo se è verificata una condizione fai questo altrimenti fai quello Sintassi: if (espressione) istruzione Esempio: prendi numero; resto = numero % 2; if (resto==0) scrivi numero pari"; if (espressione) istruzione1 else istruzione2 Esempio: prendi numero; resto = numero % 2; if (resto==0) scrivi numero pari" else scrivi numero dispari"; 21 di 29

Ciclo: flow-chart Operazioni: finché è verificata una condizione fai questo fai questo finché è verificata una condizione Sintassi: while (espressione) istruzione; Esempio: i=0; while (i<101) i=i+1; do istruzione while (espressione); Esempio: i=0; do i=i+1; while (i<100); 22 di 29

Blocchi di istruzioni Blocco di istruzioni: insieme d istruzioni con un solo ingresso, da dove inizia sempre l elaborazione, e una sola uscita, dove termina sempre l elaborazione del blocco (nessuna uscita laterale con istruzioni di salto) Black box: non possono essere utilizzate delle sottoparti Sintassi: {blocco} blocco I blocchi possono contenersi l un l altro ma mai intersecarsi 23 di 29

Esempi 1. Calcolo della somma algebrica tra due numeri relativi utilizzando le operazioni di somma e differenza tra numeri senza segno 2. Calcolo della media 3. Calcolo dei valori massimo e minimo 4. Visualizzazione di caratteri letti da tastiera 5. Calcolo di una potenza 24 di 29

Esempio 1 inizio Problema: Calcolo della somma algebrica tra due numeri relativi utilizzando le operazioni di somma e differenza tra numeri senza segno vero a, b a, b concordi vero falso a < b Algoritmo: acquisizione dei due numeri a,b se a, b sono concordi s = a + b se a, b sono discordi se a < b si scambiano i valori di a e b s = a - b la somma ha il segno di a e modulo s s a+b t a a b b t falso s a-b modulo di s e segno di a fine 25 di 29

Esempio 2 inizio Problema: Acquisizione di 10 numeri interi e calcolo della media Algoritmo: 1. Azzerare la somma s 2. Se non si sono acquisiti tutti i numeri: 2.1 Acquisire un numero n 2.2 Sommare n ad s e tornare al passo 2 3. La media è s/10 4. Fine falso s 0 i 0 i < 10 vero n s s + n i i + 1 m s/10 m fine 26 di 29

Esempio 3 inizio Problema: Acquisizione di 10 numeri interi; determinazione e visualizzazione dei valori maggiore e minore Algoritmo: 1. Leggi il primo numero n 2. Poni il massimo e il minimo corrente (variabili max e min) pari a n 3. Finché i numeri inseriti sono meno di 10 3.1 Leggi un nuovo numero n 3.2 Se n<min: min=n altrimenti se n>max: max=n 4. Visualizza min e max 5. Fine falso n > max max n min n i 1 falso i < 10 vero vero n n n< min max n i i +1 min, max falso vero min n fine 27 di 29

Esempio 4 inizio Problema: Scrivere un programma che consenta, acquisito un numero intero n, di acquisire un carattere c e visualizzarlo n volte sulla stessa riga finché n è maggiore di zero vero n n > 0 i 1 falso connettore Inizio blocco 2.2 Algoritmo: 1. Leggi il primo numero n 2. Finché n>0 2.1 Leggi c 2.2 Visualizza c nvolte 2.3 Visualizza a capo 2.3 Leggi nuovo numero n 3. Fine c blocco 2.2 a capo n i<= n c vero i i+1 Fine blocco 2.2 falso fine 28 di 29

Esempio 5 inizio Problema: Calcolo e visualizzazione di una potenza pot, acquisiti la base x e l esponente n x, n pot 1 i 1 Algoritmo: 1. Acquisisci x ed n (intero) 2. Poni pot pari ad 1 3. Esegui per n volte: pot pot * x 4. Visualizza pot 5. Fine i<= n vero pot = pot * x i i+1 falso pot fine 29 di 29