Esercitazione quinta Esercitazione quinta Questa esercitazione è strutturata in due parti : Nella prima parte è presentato il flowchart della funzione di Ackermann con la relativa codifica in Pascal, in maniera da poter calcolare la detta funzione in maniera iterativa ; Nella seconda parte è presentata la codifica in Pascal di un programma che calcoli ancora la funzione di Ackermann, ma, questa volta, in maniera ricorsiva . E' da notare che all'inizio di entrambi i codici è stato posto un controllo sui valori di ingresso ; questa operazione è resa necessaria dall'estrema ricorsività della funzione di Ackermann a causa della quale, valori troppo alti potrebbero richiedere al calcolatore tempi di esecuzione troppo lunghi . Flowchart della funzione di Ackermann Programma Ackermann iterativo (V --> [Author:DCJ] ) Program Ackerman; uses crt ; type vettore = array [1..1000] of integer ; var x, y, i, z : integer ; var v : vettore ; begin clrscr ; writeln ( 'Per quali valori si vuole calcolare la funzione di Ackerman : ' ) ; read ( x, y ) ; if ( ( x > 3) or ( y > 3) or ( x + y > = 4 ) ) { condizioni di controllo sui valori immessi } then writeln ( 'Questi valori potrebbero richiedere tempi di calcolo troppo lunghi ') ; else begin { incomincia la funzione di Ackermann } v [ 1 ] := x ; v [ 2 ] := y ; v [ 3 ] := 0 ; i :=2 ; while i < > 1 do begin if v [ i-1 ] =0 then begin v [ i-1 ] := v[ i ] +1 ; i := i-1 ; end else begin if v[ i ] =0 then begin v [ i-1 ] := v[ i-1 ] -1 ; v [ i ] :=1; end else begin v [ i+1 ] := v [ i ]-1 ; v [ i ] := v[ i-1 ] ; v [ i-1 ] := v [ i-1 ]-1 ; i := i+1 ; end ; end ; z := v [ 1 ] ; writeln ( z ) ; readln ; end . Esempi pratici Per quali valori si vuole calcolare la funzione di Ackermann : Input : 0, 0 Output :1 Per quali valori si vuole calcolare la funzione di Ackermann : Input :0, 1 Output : 2 Per quali valori si vuole calcolare la funzione di Ackermann : Input : 0, 2 Output : 3 Per quali valori si vuole calcolare la funzione di Ackermann : Input : 0, 3 Output : 4 Per quali valori si vuole calcolare la funzione di Ackermann : Input : 1, 0 Output : 2 Per quali valori si vuole calcolare la funzione di Ackermann : Input : 1, 1 Output : 3 Per quali valori si vuole calcolare la funzione di Ackermann : Input : 1, 2 Output : 4 Per quali valori si vuole calcolare la funzione di Ackermann : Input : 1, 3 Output : Questi valori potrebbero richiedere tempi di calcolo troppo lunghi Per quali valori si vuole calcolare la funzione di Ackermann : Input : 2, 0 Output : 3 Per quali valori si vuole calcolare la funzione di Ackermann : Input : 2, 1 Output : 5 Per quali valori si vuole calcolare la funzione di Ackermann : Input : 2, 2 Output : Questi valori potrebbero richiedere tempi di calcolo troppo lunghi Per quali valori si vuole calcolare la funzione di Ackermann : Input : 3, 0 Output : 5 Programma Ackermann ricorsivo ( V bis ) program Ack_ric ;uses crt ; var x, y, z : integer ; function Ack ( x, y : integer ) :integer ; { funzione che calco Continua »