Laboratorio di calcolo
AA 2005/06
Prova individuale del 22/6/2006
secondo turno

Create sul solito account una cartella prova_cognome e svolgete li' la prova. La prova e' valutata su 10 punti.
Se il programma non compila perdete 5 punti, se il programma compila ma ha seri problemi in fase di esecuzione (loop infiniti, mancanza di protezioni...) perdete 3 punti, se il programma compila, gira ma non fornisce i risultati richiesti perdete 2 punti. I punti rimenenti possono essere ulteriormente ridotti se non sono state seguite tutte le indicazioni (ad esempio se si sceglie di non tulizzare delle funzioni) o se non viene stampato il risultato o specificato quali valori ci si aspetta che l'utente inserisca, o se il programma non sia comprensibile per mancanza di commenti.


Scrivere un programma che data un coppia di numeri interi positivi, A e B, ne determini il massimo comune divisore.

Si suggerisce di implementare nel main solo
    la lettura di A e B (ed il controllo che siano >=0)
    la chiamata ad una funzione apposita
    la stampa del risultato
e di implementare una funzione (prototipo int max_com_den(int A, int B);)
che restituisca il risultato.

Nella funzione max_com_den potete implementare l'algoritmo seguente (di Euclide) o un altro di vostra scelta.
L'algoritmo suggerito e' un algoritmo ricorsivo ovvero la funzione max_com_den richiama se' stessa: conterra' qualcosa del tipo
return max_com_den(......);
Partendo dalla coppia di interi (A,B) sostiuirla ripetutamente con la coppia (B%A,A) fino a quando il primo valore della coppia non si annulla. Quando cio' si verifica il secondo valore e' il massimo comune divisore.


Esempio

    A       B
1710      808
808      1710
94          808
56            94
38            56
18            38
 2             18
 0               2

il risultato e' 2 !

Suggerimenti:
scrivere un file .h con il prototipo della funzione
scrivere un file .cc contenente la funzione inizialmente vuota (con solo un return 1;)
scrivere un file .cc contenente il programma main
nel main leggere i due valori di A e B, controllarli, chiamare la funzione, stampare il risultato.
solo quando questa parte compila e gira (stampando solo 1) dedicatevi allo sviluppo dell'algoritmo da inserire nella funzione.