Monday, March 5, 2012

Algoritma dan struktur data

Pada catatan ini akan membahas mengenai “ Struktur Algoritma “. Pemrograman pascal merupakan bahasa pemrograman terstruktur prosedural yang berarti pembacaan algoritma dilakukan secara beurutan. Namun demikian, pemrograman Pascal juga menyediakan alur pembacaan program yang melompat (seleksi).

STRUKTUR PEMROGRAMAN/ STRUKTUR KONTROL :
Ada tiga macam struktur pemrograman yaitu :
a)    Runtutan/ Sequential
b)    Seleksi/ Conditional
c)    Perulangan/ Repetition/ Looping       

1.  SEQUENTIAL/ RUNTUTAN
   
Berfungsi mengontrol program sehingga berjalan secara berurutan. Program dibaca dari mulai perintah yang pertama dituliskan kemudian turun ke perintah selanjutnya demikian seterusnya sampai pada akhir perintah. Secara umum program akan dibaca oleh compailer secara terurut.

      Contoh :

       Program_Selisih_Jam;
Uses crt;
var j1,j2,m1,m2,d1,d2,B1,B2,J,M,S,Delta,sisa: integer;
begin
clrscr;
write('Baca jam mulai =');readln(j1,m1,d1);
writeln;
write('Baca jam selesai =');readln(j2,m2,d2);
B1:= 3600 * j1 + 60 * m1 + d1;
B2:= 3600 * j2 + 60 * m2 + d2;
Delta:= B2 - B1;
J:= Delta div 3600;
sisa:= Delta mod 3600;
M:= sisa div 60;
S:= sisa mod 60;
 write('Selisih jam =',J);
 writeln;
 write('Selisih menit =',M);
 writeln;   
 write('Selisih detik =',S);readln;
       end.
   
    Hasil Run program:

           Baca jam mulai = 3 23 29
Baca jam selesai = 4 30 27
Selisih jam = 1
Selisih menit = 6
Selisih detik =58

    Catatan :


    Tanda (:= ) disebut sebagai Operator Penugasan.


2.  SELECTION/ CONDITION
       
        Sistem kontrol ini memungkinkan programmer untuk membuat program yang dapat memilih satu langkah di antara sejumlah langkah untuk dikerjakan.
    Dalam Turbo Pascal disediakan 2 buah struktur kontrol seleksi, yaitu:
a.    Struktur IF……THEN…..
b.    Struktur CASE…OF…

      a). Struktur IF

    Merupakan struktur kontrol di mana suatu aksi dilaksanakan berdasarkan kondisi logikanya (benar atau salah). Bentuk umum :
        if (kondisi) then aksi ; 
                {Jika kondisi benar maka aksi akan dilaksanakan dan sebaliknya }
        if (kondisi) then aksi1 else aksi2 ;
{Jika kodisi benar maka aksi1 diaksanakan, jika kondisi salah
  maka aksi2 akan dilaksanakan}
        if (kondisi1) then aksi1 else
            if (kondisi2) then aksi2 else
                ……………………..
                if (kondisi-n) then aksi-n ;
            {Jika kondisi1 benar maka aksi1 dilaksanakan tanpa membaca
kondisi2 dan seterusnya. Jika kondisi1 salah maka aksi2 dilaksanakan tanpa membaca aksi3 dan selanjutnya. Demikian
seterusnya}
        if (kondisi1) then aksi1 ;
            if (kondisi2) then aksi2 ;
                   ……………………….
                       if (kondisi-n) then aksi-n ;
    {Masing-masing kondisi akan dibaca dan aksi akan tetap dilaksanakan. Jadi masing-masing struktur terpisah satu dengan yang lain}

    Contoh :

                  program_menghitung_akar_kwadrat:
uses crt;
var A,B,C:integer;
    x1,x2,D:real;
begin
   clrscr;
       write('Baca koofisien:');readln(A,B,C);writeln;
       writeln(A,'x*x + (',B,') x +',C);
       if A=0 then writeln('Bukan persamaan kwadrat') else
       begin
D:=(B*B) - (4*A*C);
writeln('Determinannya :',D:2:2);readln;
if D>0 then
  begin
       writeln('Persamaan kwadrat mempunyai 2 akar yang berbeda');

       x1:= (-B + sqrt(D))/(2*A);
       x2:= (-B - sqrt(D))/(2*A);
       writeln('Akar-akarnya adalah:',x1:2:2,'dan',x2:2:2);
   end   else
if D=0 then
    begin
       writeln('Persamaan kwadrat mempunyai akar yang sama'
       x1:= -B/(2*A);
       x2:= -B/(2*A);
       writeln('Akar-akanya adalah:',x1:2:2);
     end   else
       writeln('Tidak memiliki akar riil');
end;
readln;
end.

    Hasil Run Program :
         -Baca koofisien: 1 -4 4

1x*x + (-4) x +4
Determinannya :0.00

Persamaan kwadrat mempunyai akar yang sama
Akar-akanya adalah:2.00

        -Baca koofisien: 1 -5 6

1x*x + (-5) x +6
Determinannya :1.00

Persamaan kwadrat mempunyai 2 akar yang berbeda
Akar-akarnya adalah:3.00dan2.00


              -Baca koofisien: 1 3 4

1x*x + (3) x +4
Determinannya :-7.00

Tidak memiliki akar riil

    Program_Konversi_nilai:
Uses Crt;
var Nilai : Byte;
begin
        clrscr;
             write('Baca nilai :');readln(Nilai);
if nilai>=80 then write('Nilai = A') else
   if nilai>=65 then write('Nilai = B') else
      if nilai>=41 then write('Nilai = C') else
         if nilai>=26 then write('Nilai = D') else
            write('Nilai = E');
                      readln;
    end.

    Hasil Run Program :
    Baca nilai : 90                Baca nilai :55
Nilai = A                 Nilai = C
Baca nilai :75                Baca nilai :25
Nilai = B                Nilai = E

Catatan :


Pada pernyataan else if ataupun else, tidak diperkenankan didahului dengan menggunakan tanda titik koma (;)


    b).  Struktur CASE…OF..

            Merupakan peluasan dari struktur IF. Karena kalau dalam struktur IF hanya disediakan dua pilihan (berdasarkan kondisi logikanya) maka dalam struktur Case ..of dimungkinkan untuk memilih satu pilihan di antara banyak pilihan yang ada.
       
        Bentuk umumnya :

            Case  var.pilih  of        atau         Case  var.pilih   of
                Pilih1 : aksi1 ;            pilih1 : aksi1 ;
                Pilih2 : aksi2 ;            pilih2 : aksi2 ;
                ……………. ;                ……………. ;
                pilih-n : aksi-n ;            pilih-n : aksi n;
                                     else aksi-n+1
            end;                    end;

        Catatan :


Ekspresi yang digunakan dalam statemen Case adalah yang mempunyai tipe ordinal yaitu dengan batas antara (-32768 s/d 32767). Sehingga tipe lain seperti integer yang bertipe longint, tipe string atau word tidak boleh digunakan.

Contoh :

    Program_Konversi_nilai2;
Uses Crt;
Var  Nilai : integer;
begin
         Clrscr;
write('Baca nilai =');readln(Nilai);
Case Nilai of
     0..25 : writeln('Nilainya = E');
    26..39 : writeln('Nilainya = D');
    40..64 : writeln('Nilainya = C');
    65..79 : writeln('Nilainya = B');
    80..100: writeln('Nilainya = A');
    else
          writeln('Tidak ada nilai yang dimaksud');
end;readln;
        end.

        Catatan :

   
Program ini akan memberikan nilai yang sama persis dengan yang menggunakan struktur IF.

   
3. PERULANGAN/ LOOPING/ REPETITION

        Dalam membuat suatu program kadang-kadang diinginkan agar program tersebut mampu memproses hal yang sama secara berulang-ulang sampai ditemukan suatu nilai tertentu yang diinginkan atau mencapai batas yang telah ditentukan. Untuk itu maka Turbo Pascal telah menyediakan suatu struktur perulangan yang memudahkan untuk melakukan proses tersebut, sehingga kode-kode dalam program menjadi lebih sederhana. Ada beberapa struktur perulangan, yaitu :
-    Struktur FOR….DO….
-    Struktur WHILE…DO……
-    Struktur REPEAT…UNTIL….

    a). Struktur FOR

        Ada 2 jenis struktur FOR, yaitu :
-    Ascendant (Naik)
-    Descendant (Turun)
        Naik
        Format :  For  count := awal  to  akhir  do  aksi/ blok aksi ;
    Catatan :     - awal <=  akhir
            - Variabel count akan naik satu setelah menyelesaikan aksi
    Turun
    Format :  For  count := awal  downto  akhir  do aksi1/ blok aksi ;
    Catatan :     - awal >= akhir
            - Variabel count akan turun satu setelah menyelesaikan aksi
        Struktur FOR hanya dpat digunakan pada cacah perulangan yang diketahui (berapa kali perulangan tersebut akan dilakukan).
   
Contoh :

    Program Latihan:                    Program Latihan 2:
uses Crt;                        uses Crt;
var N,i,j :integer;                    var N, I, j, data : integer;

begin                            begin
         clrscr;                            clrscr;
write('Baca nilai : ');readln(N);                write(‘Baca nilai:’);
for i:= 1 to N do                     readln(N);Data:=N;
begin                            for i:=1 to N do
  for j:=1 to i  do                   begin
     write(i:3);                          for j:=1 to N do
  writeln;                                         write(data:3);
end;                              writeln;
readln;                              data := data -1;
              end.                                end;
                            End.
   
    Hasil Run Program :                    Hasi Run Program :
    Baca nilai : 7                        Baca nilai : 7
  1                            7
  2  2                            6  6
  3  3  3                        5  5  5
  4  4  4  4                        4  4  4  4
  5  5  5  5  5                        3  3  3  3  3
  6  6  6  6  6  6                    2  2  2  2  2  2
  7  7  7  7  7  7  7                    1  1  1  1  1  1  1

b).    Struktur WHILE .. DO..

    Format : While (kondisi) do Aksi/blok aksi
        Kondisi: Ekspresi Boolean
   
    Pengecekan untuk melakukan perulangan dilakukan pada awal proses dan perulangan akan dikerjakan selama kondisi benar. Oleh karena itu, perlu adanya suatu proses yang dapat mengontrol kondisi agar dapat menghentikan proses.

    Contoh :

uses crt;
var i:integer;
begin
     clrscr;
write('Masukkan angka :');readln(i);
while i<5 do
begin
     write('Matematika UGM');
     i:=i+1;
end;
 readln;
end.

    Hasil Run program :
Masukkan angka :1
Matematika UGMMatematika UGMMatematika UGMMatematika UGM
Matematika UGM

Keterangan :
Program di atas akan dilaksanakan jika angka yang kita masukkan kurang dari atau sama dengan lima. Dan dalam program di atas yang bertugas menghentikan perulangan adalah proses i:= i+1; sebab jika tidak ada statement itu, apabila angka yang kita masukkan benar <= 5 maka program akan berulang sampai tak hingga banyak.

Catatan :


Struktur perulangan while..do dapat digunakan untuk melakukan perulangan baik yang diketahui maupun yang tidak diketahui jumlah perulangannya.


c).  Struktur REPEAT..UNTIL..

    Format    :  Repeat  aksi/ blok aksi  until (kondisi) ;
    (kondisi) di sini berupa Boolean.
       
        Perulangan dilakukan terus-menerus hingga diperoleh kondisi bernilai benar. Dalam hal inipun diperlukan adanya kondisi yang dapat mengontrol program agar program dapat berhenti namun berbeda dengan while do yang kontrolnya ditempatkan pada awal proses, maka repeat until kontrolnya diletakkan pada akhir proses.
   
    Contoh :
   
PROGRAM CONTOH_REPEAT;
Uses crt;
var
   n,tot,x: integer;
   Mean: real;
begin
     clrscr;
tot:=0;
n:=0;
write ('Baca data :');readln(x);
repeat
tot:= tot + x;
n:= n + 1;
write('Data lagi :');readln(x);
until x=0;
              end.

    Hasil Run Program :
    Baca data :12
Data lagi :3
Data lagi :4
Data lagi :5
Data lagi :0
{setelah dimasukkan nol maka pembacaan akan berhenti dan akan kembali ke menu awal}

Catatan :


Pada perulangan menggunakan repeat..until ini, proses pembacaan program dilaksanakan paling tidak satu kali karena proses pengecekan syarat dilakukan pada akhir.

0 komentar:

Post a Comment

comment as you like..