fork download
  1. (displayln "Programma per la Congettura di Collatz")
  2. (displayln "-----------------------------------------")
  3.  
  4. ; --- Definizione della funzione Collatz ---
  5. ; (Questa funzione è identica a prima)
  6. (define (collatz n)
  7. (displayln "Inizio della sequenza:")
  8.  
  9. (let loop ([current n])
  10. (displayln current)
  11.  
  12. (cond
  13. [(= current 1)
  14. (displayln "Sequenza completata.")]
  15.  
  16. [(even? current)
  17. (loop (/ current 2))]
  18.  
  19. [(odd? current)
  20. (loop (+ (* 3 current) 1))]
  21. )))
  22.  
  23. ; --- Esecuzione principale (con input validato) ---
  24.  
  25. ; Usiamo un 'let loop' per chiedere l'input
  26. ; finché non è un intero positivo.
  27. (define start-number
  28. (let loop () ; Loop senza parametri di partenza
  29.  
  30. (displayln "Inserisci un numero intero positivo (es. 7):")
  31. (define input (read)) ; Legge l'input a ogni ciclo
  32.  
  33. ; Controlla se l'input è valido
  34. (if (and (integer? input) (> input 0))
  35. input ; SE VALIDO: restituisce l'input.
  36. ; Questo valore esce dal loop e viene assegnato a 'start-number'.
  37.  
  38. (begin ; SE NON VALIDO:
  39. (displayln "Errore: L'input deve essere un numero intero positivo. Riprova.")
  40. (loop))))) ; Richiama il loop per chiedere di nuovo.
  41.  
  42. ; A questo punto, siamo sicuri che 'start-number' contenga un numero valido.
  43. ; Avviamo la funzione Collatz.
  44. (collatz start-number)
Success #stdin #stdout 0.49s 83392KB
stdin
7
stdout
Programma per la Congettura di Collatz
-----------------------------------------
Inserisci un numero intero positivo (es. 7):
Inizio della sequenza:
7
22
11
34
17
52
26
13
40
20
10
5
16
8
4
2
1
Sequenza completata.