Ir para o conteúdo
thoga31

Módulo/unidade "Primes"

Mensagens Recomendadas

thoga31    611
thoga31

Um pequeno snippet útil de início de ano. :)

Um pequeno Módulo (ou Unidade) que vai permitir fazer 3 coisas:

[*]Verificar se um número é múltiplo de outro;

[*]Verificar se um número é primo;

[*]Obter uma lista de nºs primos até um certo limite.

Este código mostra a forma como podemos aproveitar uns procedimentos e funções para simplificar ao máximo todos. Neste caso, o GetPrimes torna-se simplíssimo devido ao facto de depender do IsPrime que trata do processo de verificar se um nº é primo, e este torna-se, por si, uma função útil.

Vejam, usem e enjoy it! :)



{$MODE objfpc}
UNIT Primes;

INTERFACE

function IsPrime(const Number : cardinal) : boolean;
function IsMultiple(const num1, num2 : cardinal) : boolean;
procedure GetPrimes(const Limit : cardinal; var SaveList : array of cardinal);


IMPLEMENTATION

function IsPrime(const Number : cardinal) : boolean;
var i, j : longword;
    Prime, Verified : boolean;
begin
    Prime := true;
    Verificado := false;
    i := 2;
    repeat
          if IsMultiple(Number, i) then begin
              Verified := true;
              Prime := false;
          end else begin
              i := i + 1;
              if (i > Number div 2) then Verified := true;
          end;
    until Verified;
    IsPrime := Prime;
end;


function IsMultiple(const num1, num2 : cardinal) : boolean;
begin
    if (num1 mod num2 = 0) then IsMultiple := true
    else IsMultiple := false;
end;


procedure GetPrimes(const Limit : cardinal; var SaveList : array of cardinal);
var i, j : cardinal;
begin
    SaveList[1] := 2;
    j := 2;
    for i := 3 to Limit do begin
        if IsPrime(i) then begin
            SaveList[j] := i;
            j := j + 1;
        end;
        // o FPC pode considerar a seguinte linha de código ilegal:
        inc(i);
    end;
end;

END.

Nota: não está comentado, pois retirei de um programa que não tinha comentado à data. Posso comentá-lo assim que puder. :P

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade