{ File: driveint.pas } { Scopo: esercizio su funzioni ricorsive } { Si richiede di aggiungere al programma la definizione delle funzioni per il calcolo di somma, prodotto ed elevamento a potenza tra due interi nonnegativi, realizzate sfruttando la definizione induttiva di tali operazioni, e senza usare gli operatori + e - del PASCAL e il valore 1, ma solo: - il valore 0, - il confronto tra due variabili di tipo intero - l'istruzione di assegnazione, - le funzioni predefinite pred e succ - definizione induttiva di somma tra due interi nonnegativi somma(x,y) = x se y = 0 somma(x,y) = 1 + (somma(x, y-1)) se y > 0 - definizione induttiva di prodotto tra due interi nonnegativi prodotto(x,y) = 0 se y = 0 prodotto(x,y) = somma(x, prodotto(x, y-1)) se y > 0 - definizione induttiva di elevamento a potenza tra due interi nonnegativi esponente(x,y) = 1 se y = 0 esponente(x,y) = prodotto(x, esponente(x, y-1)) se y > 0 } program OperazioniSuInteriRicorsive; { Realizza un'interfaccia utente per l'attivazione di un insieme di funzioni per eseguire le operazioni di somma, prodotto ed esponenziazione tra due interi nonnegativi. } var i, j : integer; { interi su cui opera il programma principale } ch : char; { carattere per la scelta } { Inserire in questo punto la definizione della funzione ricorsiva Somma } { Inserire in questo punto la definizione della funzione ricorsiva Prodotto } { Inserire in questo punto la definizione della funzione ricorsiva Esponente } procedure LeggiIntero (var int: integer); { Restituisce in i un intero letto da tastiera. } begin { LeggiIntero } write('Immetti un intero ! '); readln(int) end; { LeggiVettore } begin { OperazioniSuInteriRicorsive } repeat writeln; writeln('*** IMMETTI UN CARATTERE A SCELTA FRA I SEGUENTI ***'); writeln('***** 1: leggi il primo intero'); writeln('***** 2: leggi il secondo intero'); writeln('***** 3: stampa il primo intero'); writeln('***** 4: stampa il secondo intero'); writeln; writeln('***** s: somma i due interi'); writeln('***** p: moltiplica i due interi'); writeln('***** e: eleva il primo intero al secondo'); writeln; writeln('***** Q: per terminare il programma'); writeln; readln(ch); { ATTENZIONE: read NON va bene } case ch of '1' : LeggiIntero(i); '2' : LeggiIntero(j); '3' : writeln('Primo intero : ', i); '4' : writeln('Secondo intero: ', j); 's', 'S' : writeln('Somma di ', i, ' e ', j, ' = ', Somma(i,j)); 'p', 'P' : writeln('Prodotto di ', i, ' e ', j, ' = ', Prodotto(i,j)); 'e', 'E' : writeln(i, ' elevato a ', j, ' = ', Esponente(i,j)); 'q', 'Q' : writeln('CIAO :-)'); end; { case } until (ch = 'Q') or (ch = 'q') end. { OperazioniSuInteriRicorsive }