Algoritmo. Obiettivo: dato un problema definire un procedimento che possa essere eseguito automaticamente da un esecutore per risolvere il problema

Documenti analoghi
Informatica A. Introduzione al Corso. A.a. 2007/2008 (PF-Z) Allievi Ingegneria Gestionale


Introduzione agli algoritmi

Algoritmi e Programmi. Wednesday, September 29, 2010

Risoluzione di un problema

Algoritmi. Informatica B. Daniele Loiacono

Algoritmi. Informatica B. Daniele Loiacono

Sviluppo di programmi

Introduzione alla programmazione

Corso di Informatica. Problemi ed algoritmi. Ing Pasquale Rota

Sviluppo di programmi

Sommario. Problema computazionale Sviluppo software Algoritmi. Istruzioni Sequenziali, Condizionali, Cicliche; Javascript

Introduzione agli Algoritmi

Diagrammi di flusso - Flowcharts. E un formalismo che consente di rappresentare graficamente gli algoritmi

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

Algoritmi e (cenni sul) calcolatore

Università degli Studi di Verona. Algoritmie Diagrammidiflusso. Gennaio Sergio Marin Vargas. Dipartimento di Biotecnologie

CAPITOLO 3 - ALGORITMI E CODIFICA

Corso di Informatica di Base

Caratteristiche di un calcolatore elettronico

Paolo Bison. Fondamenti di Informatica A.A. 2006/07 Università di Padova

Informatica e elementi di informatica medica. Laboratori del 19 e del 22 Marzo 2010

Pseudo codice. Paolo Bison. Fondamenti di Informatica 1 A.A. 2003/04 Università di Padova. Pseudo codice, Paolo Bison, A.A , p.

Paolo Bison. Fondamenti di Informatica Ingegneria Meccanica Università di Padova A.A. 2008/09

Programmazione I. Fondamenti di programmazione. Problemi, Algoritmi, Diagrammi di flusso

Sviluppo di programmi

Pseudo codice. Pseudo codice, Paolo Bison, FI07, p.1 / Pseudo codice, Paolo Bison, FI07, p.3

Esercitazione 3. Espressioni booleane I comandi if-else e while

Rappresentazione degli algoritmi

Elementi di programmazione

Introduzione. Informatica B. Daniele Loiacono

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Diagrammi a blocchi 1

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Istruzioni di controllo: SEQUENZA

Fasi di creazione di un programma

Linguaggio Testuale. E un formalismo che consente di rappresentare gli algoritmi mediante semplici istruzioni in linguaggio «parlato»

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

L ELABORATORE ELETTRONICO

Le strutture di controllo

Come scrivere bene codice? (1 di 1)

Formalismi per la descrizione di algoritmi

Flow-chart. Introduzione agli algoritmi e ai diagrammi a blocchi.

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati Termine algoritmo da:

Diagrammi a blocchi 1

Rappresentazione degli algoritmi

La ripetizione. Cicli ed iterazioni. Flusso di esecuzione ciclico. La ripetizione. Flusso di esecuzione ciclico. Errore frequente

L ELABORATORE ELETTRONICO!

Fondamenti di Informatica A. A. 2018/19

Strutture di controllo

ELEMENTI DI INFORMATICA L. Ing. Claudia Chiusoli

del Linguaggio C Istruzioni di iterazione

Dal problema a un programma comprensibile dal calcolatore. Il Progetto degli Algoritmi. Dall analisi del problema all esecuzione

5. Codifica degli Algoritmi in C

le operazioni base per la realizzazione di un algoritmo sono 4: visualizzazione risultati intermedi, scrittura risultati finali

2. Algoritmi e Programmi

Lezione 8. Soluzione di un problema Problema. Soluzione di un problema. Comprensione del Problema. Analisi. Introduzione agli algoritmi

Scienza dei calcolatori elettronici (Computer Science) Scienza dell informazione. è uno strumento in grado di eseguire insiemi di azioni elementari.

Sistemi di Elaborazione delle Informazioni

Analisi strutturata 1

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

Come ragiona il computer

Istruzioni Condizionali

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

I/O e strutture di controllo

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica.

Strutture di Controllo

Cosa si intende con stato

Gli algoritmi: definizioni e proprietà

Fondamenti di Informatica Laurea in Ingegneria Civile e Ingegneria per l ambiente e il territorio

Laboratorio di Programmazione

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Pag. 1. La formalizzazione dell informazione: Dati e Diagrammi di Flusso. Codifica degli algoritmi

Istruzioni decisionali

Introduzione all informatica

Strutture di controllo in C. Strutture di controllo in C -- Flow Chart --

Inf matica C.I. Metodologia Scientifica & Linguistica Mario&Pavone& &

Capitolo 3 L elaborazione e la strutturazione dell informazione

La formalizzazione dell informazione: Dati e Diagrammi di Flusso

Elaboratore Elettronico

Dall analisi alla codifica (1)

Ing. Lorenzo Vismara

Strutture di Controllo

Informatica. Informatica. Problema - soluzione. Algoritmi, dati e programmi. Introduzione ai concetti di: Distinguiamo tra: problema

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

INFORmazione+autoMATICA. Perché saperne di piu? Le fasi della programmazione. Cosa intendiamo per programmazione

Esempi comparati while, do...while

Algoritmi e Programmi

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

Esercizio: divisibilità

Corso Informatica di Base. Flow Chart

Elementi di programmazione

RAPPRESENTAZIONE GLI ALGORITMI NOTAZIONE PER LA RAPPRESENTAZIONE DI UN ALGORITMO

Rappresentazione con i diagrammi di flusso (Flow - chart)

Transcript:

Algoritmo Obiettivo: dato un problema definire un procedimento che possa essere eseguito automaticamente da un esecutore per risolvere il problema Definizione di Algoritmo Dato un problema e un esecutore, l algoritmo è: una succesone finita di pas elementari (operazioni e direttive) eseguibili senza ambiguità dall esecutore che risolve il problema dato Proprietà degli Algoritmi Procedimenti sequenziali: un passo dopo l altro secondo un ordine specificato (flusso di esecuzione) I pas elementari devo essere eseguiti in modo univoco dall esecutore devo essere descritti in una forma eseguibile per l esecutore La descrizione di un algoritmo per un esecutore deve avere una formulazione generale la soluzione individuata n deve dipendere solo da valori predefiniti dei dati, co che l algoritmo a utilizzabile nel maggior numero posbile di ca gli algoritmi prevedo particolari pas destinati ad acquire i valori dei dati da utilizzare ed elaborare in ogni particolare esecuzione L esecutore deve terminare in tempo finito per ogni ineme di valori in ingresso L esecutore deve essere in grado di eseguire l algoritmo con le risorse a sua dispozione (informazioni + teclogia) 1

Proprietà degli Algoritmi Ogni operazione o direttiva deve: terminare entro un intervallo finito di tempo Es.: calcolare le cifre decimale di π, NO! produrre un effetto osservabile (stato prima dell esecuzione, stato dopo l esecuzione) Es.: pensare al numero 5, NO! Produrre lo stesso effetto ogni volta che viene eseguita a a partire dalle stesse condizioni iniziali Es. X=5, y=10 x+y=15 Elementi degli Algoritmi Oggetti: le entità su cui opera l algoritmo Dati iniziali del problema, informazioni auliarie, risultati parziali e finali Le informazioni so dette dati (anche i risultati parziali e finali) e posso essere variabili o costanti Operazioni: Interventi da effettuare sui dati Calcoli, confronti, ricopiature,acquizioni, emisoni, ecc. Flusso di controllo: l indicazione delle posbili succesoni dei pas dell algoritmo La correttezza dei risultati dipende n solo dalla corretta esecuzione delle ngole operazioni, ma anche dalla corretta sequenza con cui so eseguite NOTA: Flusso di controllo: la descrizione a priori di tutte le posbili sequenze nell esecuzione dei pas dell algoritmo, in particolare di operazioni in alternativa e di operazioni da ripetere più volte ciclicamente Flusso di esecuzione: la sequenza di operazioni effettivamente seguita durante una particolare esecuzione dell algoritmo e che dipende dai particolari valori che i dati assumo in quell esecuzione 2

Rappresentazione di un algoritmo destinato all esecuzione automatica Rappresentazione di un algoritmo Descrizione, univoca per l esecutore, di tutte le posbili sequenze di operazioni da eseguire per risolvere il problema dato Descrizione del flusso di controllo, delle operazioni eseguibili, e degli oggetti su cui agisco le ngole operazioni E necessario un formalismo di rappresentazione, cioè un linguaggio costituito da: Vocabolario: ineme di elementi per la descrizione di oggetti, operazioni e flusso di controllo Sintas: ineme di regole di compozione degli elementi in fra eseguibili e costrutti di controllo (istruzioni) Semantica: ineme di regole per l interpretazione degli elementi e delle istruzioni ntatticamente corrette Linguaggi di descrizione di algoritmi Formalismi descrittivi costituiti da LINGUAGGI (artificiali) DI PROGRAMMAZIONE Oggetti rappresentati tramite mi mbolici (identificatori) Variabile: una rappresentazione mbolica dei dati a cui posso attribuire diver valori di un certo tipo Operazioni rappresentate mediante operatori (es. +) o funzioni (es. cos(x)) Sequenza di operazioni (flusso di controllo) con appoti costrutti di controllo Corrispondenza tra concetti e loro rappresentazione nei linguaggi di rappresentazione CONCETTO oggetto operazione direttiva flusso di controllo algoritmo RAPPRESENTAZIONE identificatore operatore, funzione istruzione costrutti di controllo programma 3

Linguaggi di descrizione I linguaggi per descrivere gli algoritmi devo essere ti all uomo che progetta gli algoritmi e al calcolatore che deve eseguirli Fa iniziali di progetto: struttura generale dell algoritmo descrizione rigorosa del flusso di controllo descrizione semplificata delle direttive, per es. mediante l uso di linguaggio naturale Due esempi di linguaggi semiformali: schemi a blocchi (o diagrammi di flusso) elementi grafici per indicare il flusso di controllo e i tipi di operazioni elementi testuali per descrivere le operazioni e gli oggetti pseudo-codice completamente testuale costrutti di controllo descritti con la forma e le parole chiave dei linguaggi di programmazione le operazioni posso essere descritte in modo informale Schemi a Blocchi Elementi di base Blocco esecutivo operazione Blocco di inizio Blocco di terminazione Fine Flusso di controllo delle operazioni Blocco condizionale vera Condizione falsa Blocco di ingresso dati Blocco di uscita dati Operazione di ingresso Operazione di uscita 4

Schemi a blocchi Variabili: rappresentate tramite mi mbolici Le operazioni descritte posso essere eseguite di volta in volta sui diver valori assegnabili alle variabili (formulazione generale) Variabile: contenitore di valori Proprietà: una variabile n può essere vuota, cioè ad una variabile è sempre associato un valore Negli schemi a blocchi operazioni e condizioni so rappresentate in modo testuale e tramite mboli che rappresenta le operatori aritmetici, di confronto, ecc. Regole di compozione ed interpretazione degli elementi Compozione degli elementi flusso di controllo dell algoritmo, cioè tutte le posbili sequenze di blocchi da eseguire Un solo blocco di inizio Alme un blocco di terminazione Dal blocco di inizio e da ogni blocco esecutivo deve uscire una sola freccia Se per ogni blocco c e un solo blocco succesvo: flusso di controllo sequenziale (sequenza) operazione Da ogni blocco condizionato devo uscire due frecce contrassegnate dalle indicazioni vero () e falso () vera Condizione falsa 5

Regole di compozione ed interpretazione degli elementi Il flusso di controllo n è più sequenziale se dopo un blocco posso presentare diverse alternative. In questo caso usa un blocco di selezione Dal blocco di selezione esco due frecce che devo essere contrassegnate dal valore vero o falso.il succesvo blocco da eseguire dipende dal valore della condizione vera operazione1 Condizione falsa operazione2 In tutti i ca -in esecuzione- è unica la scelta del blocco succesvo da eseguire vera operazione1 Condizione falsa operazione2 Esempio Prodotto di due numeri interi potivi Diagramma di flusso con direttive in italia Leggi(W) Leggi(Y) Acquizione dall utente dei particolari valori da conderare per i due fattori del prodotto e da assegnare alle variabili W e Y Moltiplica intero W per intero Y e deta il risultato con Z Operazioni di elaborazione, valide per quala valore dei dati Scrivi (Z) Emisone all utente del risultato dell elaborazione Fine Variabili W, Y, Z intere W, Y, fattori di ingresso Z risultato in uscita 6

Operatori ed espresoni Operatori aritmetici: +, -,, /,... agisco sugli operandi (variabili o costanti) produco un valore numerico Operatori di confronto: >, =, <, agisco sugli operandi (variabili o costanti) produco un valore logico (vero o falso) Funzioni: cos(x), log(x), agisco su valori detti parametri (variabili oppure costanti) produco un valore Procedure: Leggi(X), Scrivi(N), agisco su valori detti parametri effettua operazioni Espresone: 5+cos(Y),... compozione di operatori, funzioni, variabili e costanti ad essa è associato un valore Assegnamento: X := 6, Y := X, Z := X+6,... Il valore dell espresone a destra dell operatore di assegnamento è assegnato alla variabile a nistra Esempio 2 Prodotto di due interi tramite somme ripetute Algoritmo: somma W a se stesso tante volte quanto vale Y Variabili: W,Y intere (valori in ingresso) Z intera (valore in uscita) Variabili auliari: NS intera (contatore del numero di somme ancora da eseguire) SP intera (valore della somma parziale) 7

Schema a Blocchi con ciclo a condizione finale (l algoritmo è corretto se Y>0) Leggi(W) Leggi(Y) Acquizione dei dati in ingresso e attribuzione dei loro valori a W e Y SP:=0 Inizializzazione delle variabili auliarie NS:=Y SP:=SP+W Corpo del ciclo NS:=NS-1 NS>0 Z:=SP Valutazione della condizione di uscita dal ciclo Scrivi (Z) Emisone del risultato Fine Flusso di controllo ciclico Permette di esprimere l iterazione di un ineme di istruzioni (corpo del ciclo) Il corpo del ciclo è ripetuto un numero finito di volte La ripetizione è controllata dalla valutazione della condizione di permanenza del ciclo variabile di controllo del ciclo inizializzata prima di entrare nel ciclo condizione di permanenza funzione della variabile di controllo corpo del ciclo contiene la modifica della variabile di controllo CICLO A CONDIZIONE FINALE CICLO A CONDIZIONE INIZIALE 8

Schema a blocchi con ciclo a condizione iniziale (l algoritmo è corretto per Y>=0) Leggi(W) Leggi(Y) SP:=0 NS:=Y SP:=SP+W NS:=NS-1 NS>0 SP:=SP+W NS>0 Z:=SP NS:=NS-1 Scrivi (Z) Fine Algoritmo con esecutore calcolatore per l esempio precedente (ciclo a condizione finale) main () { int w,y,z,sp,ns; /*dichiarazione delle variabili */ leggi(w); leggi(y); sp=0; ns=y; /*inizializzazione*/ /*inizializzazione*/ /*ciclo a condizione finale: l algoritmo e corretto solo nell ipote y>0 */ do { sp=sp+w; ns=ns-1; while (ns>0); z=sp; scrivi (z); 9

Algoritmo con esecutore calcolatore per l esempio precedente (ciclo a condizione iniziale) main () { int w,y,z,sp,ns; /*dichiarazione delle variabili */ leggi(w); leggi(y); sp=0; ns=y; /*inizializzazione*/ /*inizializzazione*/ /*ciclo a condizione iniziale: l algoritmo e corretto solo nell ipote y>=0 */ while (ns>0) { sp=sp+w; ns=ns-1; z=sp; scrivi (z); Raffinamenti Succesvi Nelle prime fa di progetto trascura i dettagli Man ma che il progetto evolve cosce meglio il problema U dei raffinamenti tipici: VERIFICA DEI DATI IN INGRESSO L utente può commettere errori nell immisone dei dati verifica che i dati immes a accettabili rispetto alle ipote di correttezza dell algoritmo Esempio precedente: l algoritmo n fornisce valori corretti per valori negativi di Y Y >= 0? 10

ESEMPIO: verifica dei dati in ingresso Leggi(W) Ipote: l algoritmo n calcola il prodotto nei ca in cui Y è < 0 Leggi(Y) Y>=0 SP:=0 NS:=Y Scrivi: Secondo fattore Negativo NS>0 SP:=SP+W NS:=NS-1 Z:=SP Scrivi (Z) Fine Flusso di controllo condizionale Costrutto di selezione semplice Si utilizza quando alcune operazioni posso essere o n essere eseguite, in dipendenza del verificar di una condizione Si esprime tramite un un blocco condizionale. Lungo u dei due rami uscenti so collocati i blocchi che descrivo le operazioni da eseguire; l altro riguarda le operazioni da n eseguire Costrutto di selezione doppia Si utilizza quando, in dipendenza del verificar di una condizione, devo eseguire operazioni alternative Si esprime tramite un blocco condizionale. Lungo u dei due rami uscenti so collocati i blocchi che descrivo le operazioni da eseguire in un caso; l altro riguarda le operazioni da eseguire in alternativa 11

Ipote: i due fattori posso essere potivi, nulli o negativi Leggi(W) NS:=Y CS:=1 Leggi(Y) Y>=0? NS:=-Y CS:=-1 SP:=0 NS> 0? SP:=SP+W NS:=NS-1 Z:=SP CS=1? Z:=-SP Scrivi (Z) Fine Codifica in C main () {int w,y,z,sp,ns,cs;/*dichiarazione variabili*/ leggi(w); leggi(y); if (y>=0) { ns=y; cs=1; else /*y è negativo*/ { ns=-y; cs=-1; sp=0; /*inizializzazione*/ while (ns>0) { sp=sp+w; ns=ns-1; if (cs==1) {z=sp; else {z=-sp; scrivi(z); 12

Esempio Problema: date le coordinate di tre punti corrispondenti ai vertici di un triangolo, ricoscere se tratta di un triangolo degenere o, e nel caso di triangolo n degenere calcolare il suo perimetro Leggere i valori delle coordinate dei vertici Triangolo degenere? SI NO Calcolare la lunghezza dei lati Calcolare il perimetro come somma delle lunghezze Scrivere il valore del perimetro Scrivere il triangolo è degenere Vuoi continuare? SI NO Fine Stesura iniziale in pseudo-codice Costrutti di controllo e parole chiave del linguaggio C main () do { while (); if () { else { Operazioni in linguaggio naturale main () /*inizio dell algoritmo*/ { do { leggi (coordinate); if (triangolo degenere) { scrivi ( Il triangolo è degenere ); else { calcola lunghezza dei lati; perimetro = somma dei lati; scrivi (perimetro); while ( vuole continuare); /*fine dell algoritmo*/ 13

Raffinamento 1 Leggere coord. punto A Leggere coord. punto B Leggere coord. punto C Coincido (A,B)? Coincido (B,C)? Coincido (C,A)? Allineati (A,B,C)? LAB:=distanza(A,B) LBC:=distanza(B,C) LCA:=distanza(C,A) Raffinamento della lettura dei valori delle coordinate Raffinamento della valutazione della condizione di triangolo degenere Raffinamento del calcolo della lunghezza dei lati e del perimetro PERIMETRO:= LAB+LBC+LCA Scrivere il valore del perimetro Scrivere il triangolo è degenere Scrivere Vuoi Continuare(s/n)? Leggere carattere RISP RISP= s? Fine Raffinamento della valutazione della condizione Vuoi continuare? Direttive Complesse Introduzione al concetto di sottoprogramma Operazioni elementari: direttamente eseguibili dall'esecutore Direttive complesse: devo essere raffinate ed espresse in termini di operazioni elementari Raffinamento di direttive complesse: realizzabile a parte rispetto all'algoritmo principale Le direttive complesse posso essere conderate come sottoproblemi da risolvere con un algoritmo dedicato Sottoprogrammi: descrizioni di questi algoritmi "accessori" Direttive Complesse: so chiamate ai sottoprogrammi all'inter dei programmi principali 14

Vantaggi nell'impiego dei sottoprogrammi Chiarezza del programma principale Tutti i dettagli so descritti nei sottoprogrammi Il programma principale descrive la struttura di controllo generale Si evita ripetizioni Alcuni sottoproblemi devo essere affrontati piu' volte nella soluzione di un problema principale il sottoprogramma può essere richiamato tutte le volte che a necessario Disponibilità di "sottoprogrammi" prefabbricati Sottoproblemi ricorrenti gai' sviluppati da programmatori esperti, raccolti nelle coddette "librerie" di sotoprogrammi Raffinamento 2: espanone delle direttive complesse Leggere valore reale AX Leggere coord. punto A Leggere coord. punto B Leggere coord. punto C Leggere valore reale AY Leggere valore reale BX Leggere valore reale BX Leggere valore reale CX Leggere valore reale CY Coincido (A,B)? AX=BX? AY=YX? 15

Raffinamento 2 - seguito Y B DXAB A DYAB C DXAC DYAC X Se i punti A, B, e C so allineati vale la proporzione DYAB:DXAB=DYAC:DXAC In cui il prodotto dei medi è uguale al prodotto degli estremi Coincido (A,B,C)? DYAB:=AY-BY DXAB:=AX-BX DYAC:=AY-CY DXAC:=AX-CX DYAB*DXAC=DXAC*DYAC? LAB:=distanza(A,B) LBC:=distanza(B,C) LCA:=distanza(C,A) LAB:=radiceq(quad(AX-BX)+quad(AY-BY) LBC:=radiceq(quad(BX-CX)+quad(BY-CY) LCA:=radiceq(quad(CX-AX)+quad(CY-AY) quad(n) indica N*N radiceq(n) indica N 16