Program Arnold;
Uses wincrt;
Var
a, b, m, mb, n, nb, p, i, j, k, l, z : integer;
periode : array[1..1000] of integer;
Label 1, 2, 3, 4;
Begin
1:
{Input: besar pixel.}
write('Masukkan ukuran pixel (P x P): ');readln(p);
if p > 500 then
begin
writeln;
write('Maaf ukuran pixel terlalu besar untuk dikalkulasi.');readln;
clrscr;
goto 1;
end;
{Optional 1: disarankan untuk memilih "Tidak" jika pixel terlalu besar.
Hal ini dimaksudkan untuk menghindari adanya "crash" pada
sistem karena banyaknya data yang harus dikalkulasi.}
writeln('Tampilkan periode tiap titik? 1. Ya 2. Tidak');readln(z);
{Proses}
{i dan j adalah titik awal}
for i:= 0 to p-1 do
begin
m:= i;
for j:= 0 to p-1 do
begin
n:= j;
{Proses "Repeat...Until" adalah proses pencarian (m+n)/p
disimbolkan dengan (m), (m+2n)/p disimbolkan dengan (n),
dan pencarian periode disimbolkan dengan (k).}
repeat
a:= m;
m:= a + n;
n:= a + 2*n;
3:
{Proses penghentian iterasi ketika sudah kembali ke titik asal.}
if m = i then
begin
if n = j then
begin
k:= k+1;
goto 4;
end;
end;
{Proses pengubahan (m+n) = p dan (m+2n) = p
dimaksudkan untuk menghindari penggunaan bilangan
yang bernilai terlalu besar.}
if m >= p then
begin
m:= m - p;
goto 3;
end;
if n >= p then
begin
n:= n - p;
goto 3;
end;
k:= k+1;
until k = 1000;
4:
{Proses pencetakan titik dan periode: hanya akan ditampilkan
jika pada Optional 1 dipilih "Ya".}
if z = 1 then
begin
write('Titik (',i,'/',p,' , ',j,'/',p,')............Periodenya: ',k);readln;
end;
periode[k]:= k; {pencatatan periode}
k:= 0;
end;
end;
{Pencetakan periode-periode yang tercatat: semua periode yang telah
dikalkulasi oleh sistem akan ditampilkan pada pencetakan ini. Hal ini
dimaksudkan agar memudahkan user untuk melihat seluruh period
yang mungkin terlewat saat proses pencetakan titik dan periode.}
writeln;
write('Jadi, periodenya adalah ');
for i:= 1 to 1000 do
begin
if periode[i] <> 0 then write('',periode[i],', ');
end;
{Optional 2: pilihan untuk mengulangi proses dengan pixel yang
berbeda.}
writeln;
writeln;
writeln('Ingin mencoba lagi? 1. Ya 2. Tidak');readln(z);
{Proses penghapusan data yang tercatat: hanya terjadi jika
dipilih "Ya".}
if z = 1 then
begin
for i:= 1 to 1000 do
begin
periode[i]:= 0;
end;
clrscr;k:= 0;goto 1;
end
else
begin
writeln;writeln;writeln;
write('Terima kasih sudah menggunakan program ini.');
end;
End.
Preview Program:
Silahkan pilih apakah anda akan menampilkan periode tiap titik atau tidak. Jika anda memilih 1 (Ya), maka hasilnya akan seperti dibawah ini.
Jika anda memilih 2 (Tidak), maka hasilnya akan seperti gambar berikut.
Tidak ada komentar:
Posting Komentar