P_49-E18-Listar+numeros+amigos+y+perfectos

=__**Mostrar lista de numeros amigos y perfectos**__=

Escribir un progra que lee un valor limite y muestra los numeros menores que el limite que son numeros amigos o números perfectos

Numeros amigos: Nums_1 y Num_2 son amigos si la suma de los divisores propios de Num_1 es Num_2 y la suma de los divisores propios de Num_2 es Num_1

Numeros perfectos: Son aquellos que son "amigos de si mismo"

code format="pascal" PROGRAM ListaNumerosAmigos ;

FUNCTION fniSumaDeDivisores (iNum : Integer) : Integer ; VAR i, iSuma : Integer ; BEGIN iSuma := 0 ; FOR i := 1 TO iNum - 1 DO       IF iNum MOD i = 0 THEN iSuma := iSuma + i ;

fniSumaDeDivisores := iSuma END ;

FUNCTION fnboComprobarSiSonAmigos (iNum_1, iNum_2 : Integer) : Boolean ; BEGIN fnboComprobarSiSonAmigos := FALSE ;

IF (fniSumaDeDivisores (iNum_1) = iNum_2) AND (fniSumaDeDivisores (iNum_2) = iNum_1) THEN fnboComprobarSiSonAmigos := TRUE ELSE fnboComprobarSiSonAmigos := FALSE ; END ;

VAR iNumLimite, iNum_1, iNum_2 : Integer ; BEGIN Write ('Escribe un número entero positivo: '); ReadLN ( iNumLimite) ;

For iNum_1 := 1 TO iNumLimite DO     BEGIN iNum_2 := fniSumaDeDivisores (iNum_1) ;

IF iNum_2 = iNum_1 THEN IF fnboComprobarSiSonAmigos (iNum_1, iNum_2) THEN Writeln ('Número perfecto:', iNum_1) ;

IF iNum_2 > iNum_1 THEN IF fnboComprobarSiSonAmigos (iNum_1, iNum_2) THEN Writeln ('Números amigos: ', iNum_1, ' e ', iNum_2) ; END ; readln ; END. code