Parte 1 - dmi.unipg.it .Problema della fattorizzazione ... dei numeri interi o reali ... in ingresso

  • View
    215

  • Download
    0

Embed Size (px)

Text of Parte 1 - dmi.unipg.it .Problema della fattorizzazione ... dei numeri interi o reali ... in ingresso

Parte 1

Introduzione alla programmazionee all'algoritmica

Programmazione

La programmazione la scienza che studia come si programmano i computer

La programmazione importante perch un computer, opportunamente programmato, pu svolgere i compiti pi disparati gestione di una centrale nucleare automazione ufficio controllo aereo grafica tridimensionale video giochi

Definizione di programma

Un programma un procedimento (finito) descritto in un linguaggio di programmazione mediante il quale un computer in grado di svolgere un compito complesso

Un computer sa svolgere operazioni elementari sa eseguire programmi pu svolgere operazioni non elementari eseguendo

programmi

Fasi della programmazione

Requisiti (descrizione del

compito

Algoritmo

Programma

Algoritmo

L'algoritmo una generalizzazione del concetto di programma

Un algoritmo infatti un procedimento finito che consente ad un esecutore di svolgere un compito complesso

Esecutore

Un esecutore pu essere un essere umano un computer un robot un dispositivo programmabile

Un esecutore sa svolgere operazioni elementari sa eseguire dei procedimenti pu svolgere operazioni non elementari eseguendo

programmi

Esempi di algoritmi

Algoritmi in senso lato possono essere ricette di cucina protocolli medici istruzioni per l'utilizzo di apparecchiature di vario

tipo metodi per lo svolgimento delle operazioni

aritmetiche (ad esempio come si addizionano due numeri interi)

Compito complesso

I compiti complessi che possono essere svolti da un computer sono compiti di elaborazione dati (calcolo di risultati a partire da dati)

Sono chiamati anche problemi computazionali Sono descritti da

INPUT: elenco di tutti i dati disponibili ed utili per il calcolo

OUTPUT: elenco dei risultati e descrizione della relazione con i dati

Esempio

Il primo esempio il calcolo del massimo comun divisore INPUT a,b numeri naturali OUTPUT m numero naturale, il loro M.C.D.

Ad esempio se a=14 e b=77, allora m 7 a=14 e b=16, allora m 2 a=14 e b=15, allora m 1

Altri esempi

Problema della primalit INPUT n, numero naturale OUTPUT

vero se n un numero primo falso se n non un numero primo

I problemi con output vero/falso sono chiamati problemi decisionali

Altri esempi

Problema della fattorizzazione INPUT n, numero naturale OUTPUT

d, numero naturale, diverso da 1 e da n, che un divisore di n, oppure

fallimento se n un numero primo Si tratta di un problema di ricerca Ha come sotto-problema quello della primalit:

una volta risolto il problema della fattorizzazione, so anche se n primo

Altri esempi

Problema della ricerca su grafo INPUT: elenco di citt e lunghezza delle strade di

collegamento tra le varie cittdue citt s e d

OUTPUT: il percorso pi breve che porta da s a d Si tratta di un problema di ottimizzazione

Altri esempi

Problema dell'ordinamento INPUT un elenco di n stringhe (ad esempio

cognome e nome) OUTPUT lo stesso elenco con gli elementi disposti

in un certo ordine (ad esempio in ordine alfabetico) Si tratta di un problema di elaborazione di tipo

non matematico

Metodi per la descrizione degli algoritmi

Gli algoritmi possono essere descritti in linguaggio naturale, cio a parole tramite diagrammi di flusso tramite lo pseudo-codice tramite un linguaggio di programmazione

Si preferiscono descrizioni formali, anzich informali (a parole)

L'uso di un linguaggio di programmazione invece introduce troppi dettagli che sono inutili per la comprensione dell'algoritmo

Diagrammi di flusso

Nella slide successiva vediamo un esempio di diagramma di flusso: l'algoritmo di Euclide

La descrizione a parole Dati due numeri interi a e b, si sottragga il pi piccolo al pi grande dei due numeri tante volte fino a quando i due numeri non diventano uguali. Il numero cos ottenuto il massimo comun divisore di a e b

Diagrammi di flusso

Elementi di un diagramma di flusso

Quattro tipi di nodi ellissoidali: INIZIO e FINE parallelogrammi: istruzioni di ingresso (Leggi) e di

uscita (Scrivi) rettangoli: istruzioni elementari (assegnamento o

altre) rombi: punti di scelta, contengono una condizione

(che pu essere vera o falsa) Ogni nodo ha una sola freccia uscente, tranne

FINE, che non ne ha rombo, che ne ha due, una con S, una con No

Esecuzione di un diagramma di flusso

Si parte da INIZIO Si eseguono le operazioni indicate, nell'ordine

in cui si trovano Se si arriva ad un nodo rombo, si valuta la

condizione e a seconda del valore (vero/falso) si segue l'arco corrispondente

Si termina quando si arriva a FINE

Esempio di esecuzione

Se l'utente introduce i numeri 70 e 42 al primo passo a=70 e b=42 al secondo passo a=70-42=28 e b=42 al terzo passo a=28 e b=42-28=14 al quarto passo a=28-14=14 e b=14 l'algoritmo termina perch a=b e restituisce 14

Pseudo-codice

Si pu ottenere uno pseudo-codice tramite una semplificazione di un linguaggio di programmazione (Pascal, C, ecc.), togliendo dettagli sintattici

Anche se all'apparenza non esiste uno standard conclamato, gli pseudo-codici sono tutti molto simili tra di loro

Si possono avere pseudo-codici in italiano, in inglese, ecc.

Esempio di pseudo-codice

Inizio Leggi a,b Mentre a b Ripeti Se a>b Allora a a-b

Altrimenti b b-a

Fine-se Fine-Ripeti Scrivi aFine

Esempio di pseudo-codice in inglese

Begin Read a,b While a b Repeat If a>b Then a a-b

Else b b-a

End-If End-Repeat Write aEnd

Istruzioni dello pseudo-codice

Inizio e Fine Leggi e Scrivi Operazioni elementari (assegnamento), Se Allora Altrimenti Fine-se Mentre...Ripeti...Fine-ripeti

Istruzione Se L'istruzione Se ha la forma

Se C Allora S1Altrimenti S2Fine-se

in cui C una condizione e S1,S2 sono sequenze di istruzioni

Se la condizione C vera, esegui S1; se falsa esegui S2

Istruzione Se

L'istruzione Se equivalente al seguente diagramma di flusso

Istruzione Mentre

Ha la formaMentre CRipeti SFine-ripeti

C una condizione e S una sequenza di istruzioni

Esegui S ripetutamente fino a che C non diventa falsa

Istruzione Mentre L'istruzione Mentre equivalente al seguente

diagramma di flusso

Corrispondenza con i diagrammi di flusso

E' facile tradurre un algoritmo da pseudo-codice a diagramma di flusso

E' infatti sufficiente sostituire tutte le istruzioni Se e Mentre con i diagrammi di flusso corrispondenti

Poi necessario collegare con delle frecce le varie parti

Traduzione da pseudo-codice a programma

Uno pseudo-codice pu essere agevolmente tradotto in un programma scritto in un linguaggio di programmazione moderno

Ad esempio in Pascal serve poco pi che tradurre in inglese lo pseudo-codice ... Leggi diventa read Scrivi diventa write o writeln Se diventa if Mentre diventa while ...

Esempio in Pascalprogram Euclide;var a,b: integer;begin

write('inserisci a e b ');read(a,b);while ab dobegin if a>b then a:=a-b else

b:=b-a end; writeln('il MCD e'' ',a)end.

Problemi con i diagrammi di flusso

Non altrettanto facile tradurre un diagramma di flusso in un linguaggio di programmazione moderno

Infatti in un diagramma di flusso (mal strutturato) le frecce possono congiungere parti arbitrarie dell'algoritmo e l'istruzione che permette un simile comportamento in un programma (istruzione GOTO) non si usa pi

Addirittura nei linguaggi pi moderni (Java, C#) il GOTO non esiste

Diagrammi di flusso strutturati

Un diagramma di flusso pu essere tradotto agevolmente solo se scritto in modo strutturato

Si devono solo usare sequenza, ovvero nodi collegati in sequenza lineare scelta, cio il diagramma equivalente a Se iterazione, cio il diagramma equivalente a Mentre

Non si possono collegare tra di loro istruzioni arbitrarie Il Teorema di Jacopini-Bohm ci dice che sempre

possibile riscrivere un diagramma di flusso in modo da rispettare queste condizioni

Diagramma di flusso e pseudo-codice

In sostanza invitiamo ad usare solo lo pseudo-codice pi leggibile facilmente traducibile in un linguaggio di

programmazione moderno molto diffuso nella letteratura scientifica

In alternativa si possono usare i diagrammi di flusso strutturati

Propriet degli algoritmi

Eseguibilit: l'esecutore deve essere in grado di eseguire l'algoritmo in modo autonomo

Terminazione (o finitezza): l'algoritmo deve sempre arrivare al termine

Correttezza: l'algoritmo deve sempre fornire la risposta giusta

sempre significa per qualsiasi valore legale dei dati in ingresso

Terminazione dell'algoritmo di Euclide

A titolo di esempio analizziamo l'algoritmo di Euclide

Termina sempre perch ad ogni passo a e b diminuiscono ed anche la loro

differenza diminuisce sempre poich la differenza comunque un numero intero,

non pu diminuire un numero infinito di volte quindi prima o poi la differenza diventer 0, ovvero

a sar uguale a b

Correttezza

L'algoritmo corretto perch ad ogni passo a e b cambiano ma resta