الگوریتمهای کلاسیک
الگوریتمهای محبوب: تشخیص عدد اول، عدد کامل، مجموع ارقام و ب.م.م.
باشگاه الگوریتمها!
اینها الگوریتمهایی هستند که در هر زبانی تمرین میشوند — و پاسکال زبان ایدهآل تمرین الگوریتم است!
۱. تشخیص عدد اول
عدد اول فقط بر ۱ و خودش بخشپذیر است (مثل ۲، ۳، ۵، ۷، ۱۱...):
function IsPrime(n: integer): boolean;
var
i: integer;
begin
if n < 2 then exit(false);
if n = 2 then exit(true);
if n mod 2 = 0 then exit(false);
Result := true;
i := 3;
while i * i <= n do
begin
if n mod i = 0 then
begin
Result := false;
break;
end;
i := i + 2; { فقط فردها }
end;
end;
ترفند سرعت: فقط تا
√n بررسی میکنیم — اگر مقسومعلیهی بالاتر از √n باشد، جفتی زیر √n هم هست!۲. عدد کامل (Perfect Number)
عددی که برابر مجموع مقسومعلیههایش (غیر از خودش) است: ۶ = ۱+۲+۳
function IsPerfect(n: integer): boolean;
var
i, s: integer;
begin
s := 0;
for i := 1 to n div 2 do
if n mod i = 0 then
s := s + i;
Result := (s = n);
end;
۳. ب.م.م با الگوریتم اقلیدس
function GCD(a, b: integer): integer;
begin
while b <> 0 do
begin
a := a mod b;
{ جابجایی }
if b <> 0 then
begin
temp := a; a := b; b := temp;
end;
end;
Result := a;
end;
نسخه بازگشتی تمیزتر:
function GCD(a, b: integer): integer;
begin
if b = 0 then exit(a)
else exit(GCD(b, a mod b));
end;
۴. عدد آرمسترانگ (Armstrong)
عددی که برابر مجموع مکعب ارقامش است: ۱۵۳ = ۱³+۵³+۳³
function IsArmstrong(n: integer): boolean;
var
m, s, d: integer;
begin
m := n;
s := 0;
while m > 0 do
begin
d := m mod 10;
s := s + d * d * d;
m := m div 10;
end;
Result := (s = n);
end;
۵. دنباله فیبوناچی (نسخه حلقه)
procedure PrintFib(count: integer);
var
a, b, temp, i: integer;
begin
a := 0;
b := 1;
for i := 1 to count do
begin
write(a, ' ');
temp := a + b;
a := b;
b := temp;
end;
writeln;
end;
۶. عدد دودویی (Binary)
procedure PrintBinary(n: integer);
var
bits: string;
m: integer;
begin
m := n;
bits := '';
if m = 0 then bits := '0';
while m > 0 do
begin
if m mod 2 = 0 then
bits := '0' + bits
else
bits := '1' + bits;
m := m div 2;
end;
writeln(n, ' = ', bits);
end;
خلاصه
- اول بودن: بررسی تا √n
- کامل بودن: مجموع مقسومعلیهها
- ب.م.م: اقلیدس (بازگشتی یا حلقه)
- ارقام: mod 10 و div 10 جادو میکنند!
این مبحث بخشی از دوره آموزش کامل پاسکال است.