Realizziamo un algoritmo sui numeri perfetti utilizzando Algobuild e quindi rappresentandolo con il diagramma di flusso e con la pseudo-codifica.
Definizione di numeri perfetti
In matematica un numero si dice perfetto quando è uguale alla somma dei divisori propri (tutti i divisori tranne il numero stesso).
Ad esempio il numero 6 è perfetto perché è divisibile per 1, 2, 3 e la somma dei suoi divisori è proprio 6.
Il numero 28 è un altro numero perfetto, infatti i suoi divisori sono 1, 2, 4, 7, 14. Altri numeri perfetti sono dunque 496, 8128, ecc…
Abbiamo già visto in precedenza l’algoritmo sui numeri amicabili, se vuoi consultarlo vai al link.
Algoritmo in Algobuild per trovare i numeri perfetti
Proviamo adesso a realizzare un diagramma a blocchi, utilizzando Algobuild, per calcolare se un numero preso in input è perfetto oppure no.
Per prima cosa chiediamo in input il nostro numero n. Dopo controlliamo che n sia positivo perché i numeri perfetti sono solo numeri positivi.
Se non è positivo allora si richiede di inserirlo nuovamente tramite il ciclo do-while, facciamo così un controllo dell’input.
Se invece é positivo andiamo avanti nel nostro algoritmo e impostiamo una variabile div uguale a 2, in quanto so già che ogni numero è divisibile per 1.
Poi creiamo un’altra variabile che contiene la somma di tutti i divisori.
Chiamiamo la variabile somma e la inizializziamo ad 1 per il discorso che abbiamo fatto prima, ovvero che ciascun numero è divisibile per uno.
Adesso iniziamo il ciclo che consentirà di dividere il numero preso in input n per il divisore div. Se il numero n è divisibile per div lo aggiunge alla somma dei divisori e quindi alla variabile somma, altrimenti va avanti.
In ogni caso si incrementa la variabile div di uno e si continua a dividere così per il nuovo numero.
Il ciclo terminerà quando il div raggiungerà la metà del numero n.
Alla fine controllerà se la somma dei divisori coincide con il numero stesso e dirà quindi se il numero n è perfetto oppure no.
Ecco dunque l’algoritmo sui numeri perfetti realizzato con i diagrammi di flusso.
Pseudo-codifica
Inserisco lo pseudo-codice dell’algoritmo sui numeri perfetti che abbiamo realizzato prima.
PROG main
DO_WHILE //n<=0
IN n
END DO_WHILE n<=0
ASSIGN div=2
ASSIGN somma=1
WHILE div<=n/2
IF n%div==0
ASSIGN somma=somma+div
ELSE //if n%div==0
END IF //n%div==0
ASSIGN div=div+1
END WHILE //div<=n/2
IF somma==n
OUT "perfetto"
ELSE //if somma==n
OUT "non perfetto"
END IF //somma==n
END PROG //main
Alcuni link utili
Indice argomenti diagramma a blocchi
Divisori di un numero con algobuild
Algoritmi di selezione sugli angoli