Sei sulla pagina 1di 5

TEOREMA DI JACOPINI

Il teorema di Bhm-Jacopini, enunciato nel 1966 dagli informatici Corrado Bhm e Giuseppe Jacopini, afferma che qualunque algoritmo pu essere realizzato utilizzando le sole tre strutture di controllo fondamentali: la sequenza, la selezione ed il ciclo. Questo teorema riveste un'importanza fondamentale per lo sviluppo dei linguaggi di programmazione, in quanto dimostra che un linguaggio che permetta di realizzare sequenze, selezioni e cicli permette anche di implementare qualsiasi algoritmo. In sostanza la possibilit di eseguire i tre tipi di strutture fondamentali rende un linguaggio di programmazione "completo", nel senso che non sono necessarie altre strutture per eseguire qualsiasi algoritmo. Algoritmo complessi possono essere costituiti da molte sequenze, selezioni e cicli a volte anche annidati uno dentro l'altro. A titolo di esempio si consideri il seguente diagramma di flusso relativo a un algoritmo per il calcolo della radice quadrata di un numero:

Quindi qualsiasi Algoritmo (Soluzione di un Problema) si pu sviluppare o riscrivere adoperando i soli tre costrutti fondamentali:

Blocco Sequenza : ogni operazione del blocco deve devce essere svolta in modo singolo e solo dopo averla eseguita completamente sin pu passare ad eseguire la successiva operazione. Nell'intero blocco si deve necessariamente entrare dall'alto per eseguire la 1 operazione della sequenza e obbligatoriamente uscire dal basso dopo aver eseguito l'ultima operazione della sequenza.

Blocco Decisionale : utilizzato quando si deve effettuare una decisione per scegliere se fare una o pi operazioni. Pu essere di 3 tipi diversi
o

Se (condizione vera) allora .... fine se si sceglie di fare o non fare una o pi operazioni comprese fra il se ed il fine se
o

Se (condizione vera) allora .... altrimenti ...... fine se si sceglie di fare una o pi operazioni o fare altre operazioni le prime scritte dopo allora e le altre scritte dopo altrimenti In ogni caso bisogna fare uno o l'altro gruppo Non si pu evitare di fare qualcosa Un gruppo di operazioni sempre obbligatorio

Seleziona il caso numerato Caso 1 : .... Caso 2 : ...... Caso n : .... Altrimenti ..... Fine caso si sceglie di fare una o pi operazioni divise in vari gruppi che si possono eseguire indicando il numero del gruppo a seconda il caso (enumerato) prescelto Si pu anche decidere se fare altro indicando un gruppo alternativo (altrimenti) o di non farne nessuno (se non si indica l'alternativa)

Blocco Iterativo : utilizzato quando si deve scegliere se fare o non fare una o pi operazioni e se eventualmente ripeterle per pi di una volta Si divide in due tipi fondamentali
o

Definiti : Quando il numero di ripetizioni ben definito e controllato attraverso un contatore di ripetizione (in modo crescente o decrescente, automatico o meno) che parte da un valore iniziale fino ad arrivare ad un valore finale attraverso un incremento di un passo particolare (normalmente a passo 1 - passo negatico per il decremento)
o

Non Definiti : Quando non chiaro il numero di volte che si effettuano le operazioni perch la condizione di uscita legata ad un particolare avvenimento non controllabile ( raggiungimento di un valore casuale , Istante temporale ecc.) NOTA : in entrambi i casi fare attenzione a non cadere i quello che si chiama LOOP INFINITO che impedisce l'uscita dal blocco.

Ci sono tre possibilit

Controllo a Posteriori : Ciclo Repeat Ripeti ...... Fino a quando (condizione vera) una o pi operazioni vengono svolte e eventualmente ripetute per pi di una volta fino a quando la condizione viene verificata Se la condizione verificata si esce dal ciclo altrimenti si rimane nel ciclo (Se non si verifica mai si cade nel Loop Infinito) NOTA : Le operazioni vengo comunque sempre fatte non si possono evitare , eventualmente si pu solo decidere se rifarle
o

Controllo a Priori : Ciclo While FAI Fintantoche (condizione vera) ...... Fine Ciclo una o pi operazioni vengono svolte e eventualmente ripetute per pi di una volta per tutto il tempo che la condizione verificata Se la condizione non verificata si esce dal ciclo altrimenti si rimane nel ciclo (Se la condizione si verifica sempre si cade nel Loop Infinito) NOTA : Le operazioni si possono evitare,non si fanno per bulla se la condizione non viene verificata all'entrata nel ciclo.