Jumat, 27 Juni 2014

Mencari Periode dari Arnold's Cat Map

Algoritma Program Pascal untuk Mencari Periode Gambar pada Metode Arnold's Cat Map
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);
  if z = 1 then clrscr;

  {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

Related Posts Plugin for WordPress, Blogger...