La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Algoritmi su Tipi Semplici

Presentazioni simili


Presentazione sul tema: "Algoritmi su Tipi Semplici"— Transcript della presentazione:

1 Algoritmi su Tipi Semplici
Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari

2 Successione di Fibonacci
problema: generare e stampare i primi n termini della successione di Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, ... soluzione: nuovo = precedente + precedente del precedente c b a a:= 0; b:= 1; c:= a+b; … poi gestire lo scambio dei ruoli: il nuovo termine diventa quello corrente il precedente diventa il precedente del precedente

3 Successione di Fibonacci (2)
i := 2; while i < n do begin i := i + 1; c := a + b; a := b; b := c; end

4 Successione di Fibonacci (3)
program Fibonacci (input,output); var a,b,i,n: integer; begin a := 0; b := 1; i := 2; write('Quanti termini della serie devo stampare ?: '); readln(n); while i < n do begin write(a,',',b,','); a := a + b; b := a + b; i := i + 2; end; if i = n then writeln(a,',',b) else writeln(a) end.

5 Calcolo del Massimo Comun Divisore
problema: dati due interi positivi, n e m, calcolare il loro massimo comun divisore supponiamo n > m soluzione banale: scomporre i due numeri separatamente nei loro fattori nelle due liste di fattori trovare il massimo elemento comune

6 Calcolo del Massimo Comun Divisore Algoritmo Euclideo
x p segmenti di dimensione x q segmenti di dimensione x n m A B C Osservazioni: un divisore esatto spezza un intero in parti uguali il MCD di n e m non è maggiore di m il MCD di n e m è anche MCD di m e n-m Strategia: dividere il n per m se il resto è nullo allora m è il MCD cercato altrimenti ripetere la procedura su m e n-m

7 Implementazione Algoritmo Euclideo
program mcd (input,output); var n,m,r: integer; begin writeln('Massimo Comun Divisore'); write('Immettere l''intero maggiore: '); readln(n); write('Immettere l''intero minore: '); readln(m); repeat r := n mod m; n := m; m := r; until r = 0; writeln('MCD = ',n) end.

8 Generazione Numeri Pseudo-Casuali
problema: utilizzare il metodo delle congruenze per produrre un insieme uniforme di numeri pseudo-casuali successione lineare congruente: xn+1 = (axn + b) mod m parametri: m modulo 1. modulo senza arrotondamenti maggiore della lunghezza della sequenza x0 seme 0  x0  m a moltiplicatore sqrt(m)  a  m - sqrt(m) b incremento dispari, non multiplo di 5 primo rispetto a m

9 Implementazione Generazione Numeri Pseudo-Casuali
program random (input,output); var x,a,b,m: integer; c: char begin m := 4096; b := 853; a := 109; write('Immettere il numero seme x_0: '); readln(x); repeat x := (a * x + b) mod m; writeln(x); write('continua [S/n] ?'); readln(c) until c = 'n' end.


Scaricare ppt "Algoritmi su Tipi Semplici"

Presentazioni simili


Annunci Google