October 2010 | Uphik Lamers

Saturday, October 30, 2010

Tugas Algoritma dan Pemrograman

 
Buatlah Susunan Algoritma dari soal dibawah ini:

  1. Tiga pasang suami istri akan menyeberang sungai dari desa A ke desa B. Terdapat sebuah perahu dengan batas muatan hanya 2 orang saja yang akan digunakan untuk menyeberang. Permasalahan pun terjadi ternyata para suami-suami memiliki sifat cemburu, sehingga tidak bisa meninggalkan istrinya dengan suami lain. Susunlah algoritma untuk menyeberangkan ketiga pasang suami istri dari desa A ke desa B tanpa ada satu orang pun suami yang cemburu..
  2. Algoritma untuk mengisi voucher telepon genggam (HP)
  3. Algoritma untuk membuat sebuah pakaian jadi (baju atau celana) dari bahan mentah (kain) yang disediakan.
Buatlah Algoritma kemudian terjemahkan ke dalam bahasa pemrograman pascal 

4. Menampilkan bilangan kelipatan tiga dari angka 1 s/d 20
5. Menampilkan bilangan ganjil dari angka 1 s/d 100
6. Menampilkan bilangan genap dari angka 1 s/d 50
7. Menampilkan bilangan prima dari angka 1 s/d 20
8. Menampilkan bilangan kelipatan 3 dan kelipatan 5 dari angka 1 s/d 30
9. Masukkan sebuah bilangan kemudian tentukan apakah bilangan yang diinput adalah
    bilangan ganjil atau bilangan genap. Gunakan metode pemilihan.
     Layout:
     Masukkan sebuah bilangan: 3 --> ENTER
     Bilangan yang anda input adalah bilangan ganjil
10. Masukkan bilangan 1, setelah itu bilangan 2, kemudian lakukan proses penjumlahan,
     perkalian, pengurangan, dan pembagian. Hasil dari keempat proses aritmatika tersebut
     ditampilkan.
      Layout:
      Bilangan 1:  6
      Bilangan 2:  3
      Hasil penjumlahan  = 9
      Hasil pengurangan = 3
      Hasil perkalian      = 18
      Hasil pembagial     = 2
11. Masukkan nilai jari-jari sebuah lingkaran. Kemudian program akan menampilkan
      hasil perhiutungan luas lingkaran.

       Layout:
       Jari-jari lingkaran: 7
       Luas lingkaran adalah: 154
 12. Buat algoritma dan program untuk menghitung luas yang diarsir pada gambar berikut.

13. Buat tampilan program di bawah ini dengan menggunakan metode perulangan:
       1 2 3 4                         2 2 2                           3 2 1
       1 2 3 4                         1 1 1                           3 2 1
       1 2 3 4                         0 0 0                           3 2 1
       1 2 3 4


       1                                  4 3 2 1                        1
       1 2                               4 3 2                           3   5
       1 2 3                            4 3                              7   9   11
       1 2 3 4                         4                                 13 15 17 19

14.  Buat urutan angka dari terkecil sampai terbesar dari 5 (lima) nilai yang
       diinput. Gunakan metode urutan, pemilihan dan pengulangan.
       Layout:
       Angka 1         : 8
       Angka 2         : 17
       Angka 3         : 5
       Angka 4         : 7
       Angka 5         : 18
       Hasil urutan sebagai berikut:
       5          7          8          17        18

15. Buat program sederhana menggunakan metode pemilihan untuk
      menampilkan keterangan umur di mana:

Umur         Keterangan           
0-5Balita
6-13Anak-anak
14-25Remaja
26-40Dewasa
> 41Orang Tua

      Dengan memasukkan nama, nim, program studi, dan tahun lahir, maka
      akan ditampilkan umur dan keterangan umur.
      Layoutnya:
      Nama              :Ma'ruf Zainuddin
      Nim                 : 21015135
      Program studi  : Sistem Informasi
      Tahun lahir       : 1991

      Umur                 : 19
      Keterangan        : Remaja

 


Jawab

    1. ket : s1 = Suami Pasangan Pertama
                s2 = Suami Pasangan Kedua
                s3 = Suami Pasangan Ketiga
                i1 = Istri Pasangan Pertama
                i2 = Istri Pasangan Kedua
                i3 = Istri Pasangan Ketiga
penyelasaian
        1.i1 dan i2 menyebrang ke Desa sebelah
        2.i1 kembali ke Desa A
        3.i1 dan i3 menyebrang Ke Desa B
        4.i3 kembali ke desa A
        5. s1 dan s2 menyebrang ke desa B
        6. s2 dan i2 Kembali ke Desa A
        7.s2 dan s3 menyebrang ke desa B
        8. i1 kembali ke Desa A
        9. i1 dan i2 menyebrang ke Desa B
        10. i2 Kembali Kedesa A
        11.i2 dan i3 menyebrang KeDesa B




2.  1. Menggosok Bagian Berhologram pada Voucher
     2. Ketik Kode yang Tertera sesuai perintah (Setiap Operator Berbeda)
     3. Kirim
     4. Cek Pulsa ( Setiap Operator Berbeda)

3.  1. Menyiapkan Bahan Berupa Kain,Gunting Jarum, Benang, Dan Alat Pengukur
     2. Menetukan Pola Yang akan dibuat
     3. Mengukur Kain Sesuai Ukuran
     4. Menggunting Kain Tersebut Sesuai Pola
     5. Menjahit Sesuai Model
     6. Merapikan Pakaian tersebut
4. Algoritma untuk menampilkan bilangan kelipatan 3 dari 1 s/d 20:
  1. menentukan nilai awal A:=3
  2. untuk i:=1 sampai 6 lakukan:
    • cetak A (nilai awal)
    • berikutnya cetak A:=A+3 lakukan sampai i ke 6, berhenti.
          Program Pascalnya
             program pascal:

uses crt;
var A, i: byte;
begin
    clrscr;
    A:=3;
    for i:=1 to 6 do
    begin
        write(A:4);
        A:=A+3;
    end;
    readln;
end.

5. Algoritmanya untuk menampilkan bilangan ganjil dari 1 s/d 100:
  • untuk a:=1 sampai 100 lakukan:
    • jika a mod 2=1 maka
    • cetak a
    program pascal:
uses crt;
var a: byte;
begin
    for a:= 1 to 100 do
    begin
        if a mod 2= 1 then
        write(a:4);
    end;
    readln
end.
 6. Algoritma untuk menampilkan bilangan genap dari 1 s/d 50:
  • untuk a:=1 sampai 50 lakukan:
    • jika a mod 2= 0 maka
    • cetak a.
    program pascal:
uses crt;
var a: byte;
begin
    clrscr;
    for a:= 1 to 50 do
    begin
        if a mod 2= 0 then
        write(a:4);
    end;
    readln
end.
7. Algoritma untuk menampilkan bilangan prima dari 1 s/d 20:
  1. bilangan prima hanya akan habis bila dibagi 1 dan bilangan itu sendiri.
  2. sehingga pasti akan ada sisa hasil bagi (mod) jika dibagi bilangan lebih dari 1 (kecuali 2) sampai bilangan sebelum bilangan itu (x-1).
  3. mencetak 2 terlebih dahulu ke layar.
  4. mengeset status bilangan prima menjadi true.
  5. beri nilai  =1 (menandakan bilangan prima).
  6. melakukan pengecekan mulai dari 2 sampai x-1.
  7. jika x habis dibagi bilangan yang ada antara 2 sampai x-1, berarti x bukan bilangan prima. Variabel prima yang awalnya true berubah jadi false dan pengecekan tidak perlu dilanjutkan (break).
  8. jika dari bilangan antara 2 sampai x-1 tak satupun yang habis dibagi, maka variabel prima yang dideklarasikan sebagai true tidak berubah nilai (tetap true). Sehingga bilangan tersebut adalah bilangan prima dan akan ditampilkan ke layar.
  9. tambahkan nilai x dengan 1 dan ulangi dari langkah ke-5 sampai nilai x= 20.
     Program pascal:
uses crt;
var x, y: byte; prima: boolean;
begin
    clrscr;
    write('2':4);
    for x:= 1 to 20 do
    begin
        prima:=true;
        for y:=2 to x-1 do
        begin
            if x mod y =0 then
            begin
                prima:=false;
                break;
            end;
        end;
        if prima then write(x:4);
    end;
    readln;
end.
8. Algoritma untuk menampilkan bilangan kelipatan 3 dan kelipatan 5 secara
    bersamaan dari angka 1 s/d 30:

  • Untuk i:= 1 sampai 30 lakukan:
    • jika i mod 3= 0 atau i mod 5 =0
    • maka cetak i.
     Program pascal:
uses crt;
var i: byte;
begin
    for i:= 1 to 30 do
       if (i mod 3=0) or (i mod 5=0) 
        then write(i:4);
    readln
end.
9. Program pascal untuk menentukan bilangan bulat yang diinput adalah bilangan
    ganjil atau genap:

uses crt;
var lagi: char; x: longint; ket: string;
begin
   clrscr;
   lagi:='Y';
   while lagi='Y' do
   begin
   clrscr;
   write('Masukkan sebuah bilangan bulat: ');readln(x);
     if x mod 2= 0 then ket:='genap'
     else ket:='ganjil';
   writeln;
   writeln('Bilangan yang diinput adalah bilangan ',ket);
   write('Coba lagi (Y/N ): '); read(lagi);
   end; readln
end.
10. Program pascal untuk menghitung hasil proses aritmatika dari dua bilangan
      bulat yang diinput:

uses crt;
var  b1, b2: longint;
begin
    clrscr;
    write('Bilangan 1: '); read(b1);
    write('Bilangan 2: ');readln(b2);
    writeln(#10);
    writeln('Hasil penjumlahan= ', b1+b2);
    writeln('Hasil pengurangan= ', b1-b2);
    writeln('Hasil perkalian  = ', b1*b2);
    writeln('Hasil pembagian  = ', b1/b2 :0:0);
    readln;
end.
 11. Program pascal untuk menghitung luas lingkaran dengan menginput jari-jari
       lingkaran (r):

uses crt;
var L,r: real;
begin
    clrscr;
    write('Jari-jari lingkaran= '); readln(r);
    L:= pi * sqr(r);
    writeln('Luas lingkaran   = ', L:0:0);
    readln
end.
12. Algortma untuk menghitung luas daerah yang diarsir pada gambar:

  1. Menentukan nilai panjang sisi luar (pL): pL= 18, lebar sisi luar (lL): lL= 12, panjang sisi dalam (pT): pT= 10, dan lebar sisi dalam (lT): lT= 5.
  2. Menghitung luas total, LTotal= pL x lL
  3. Menghitung luas tengah, LTengah= pT x lT
  4. Didapat luas yang diarsir, LArsir= LTotal-LTengah
      Program pascal:
uses crt;
var pL, lL, pT, lT, L_total, L_tengah: integer;
begin
    clrscr;
    pL:=18;  lL:=12;  pT:=10;  lT:=5;
    L_total:= pL*lL;
    L_tengah:= pL*lL;
    writeln('Luas total     = ', L_total);
    writeln('Luas tengah    = ', L_tengah);
    writeln('Luas yg diarsir= ', L_total-L_tengah);
    readln;
end.
13.     1) uses crt;
var i, j: byte;
begin
    clrscr;
    for i:= 1 to 4 do
    begin
        for j:= 1 to 4 do
        write(j:4); writeln(#10);
    end;
    readln;
end.
         2) uses crt;
var A, i, j: byte;
begin
    clrscr;
    A:=2;
    for i:= 1 to 3 do
    begin
        for j:= 1 to 3 do
        write(A:4);
        A:=A-1; writeln(#10);
    end;
    readln
end.
        3) uses crt;
var i, j: byte;
begin
    clrscr;
    for i:= 1 to 3 do
    begin
        for j:= 3 downto 1 do
        write(j:4); writeln(#10);
    end;
    readln
end.
         4) uses crt;
var i, j: byte;
begin
    clrscr;
    for i:= 1 to 4 do
    begin
        for j:= 1 to i do
        write(j:4); writeln(#10);
    readln
end.
          5) uses crt;
var i, j: byte;
begin
    clrscr;
    for i:= 1 to 4 do
    begin
        for j:= 4 downto i do
        write(j:4);
        writeln(#10);
    end;
    readln
end.
       6) uses crt;
var A, i, j: byte;
begin
    A:=1;
    for i:= 1 to 4 do
    begin
        for j:=1 to i do
        begin
            write(A:4);
            A:=A+2;
        end;
        writeln(#10);
    end;
    readln
end.


14. uses crt;
var i, j: byte;
begin
    clrscr;
    for i:= 1 to 7 do
    begin
        for j:= 1 to 1 do
        write(j:4); writeln(#10);
    end;
    readln;
end.
15. Program pascal untuk mengisi biodata mahasiswa serta menampilkan umur
      dan keterangan umur secara otomatis:
uses crt;
var lahir, umur: integer;
    ket: string;
begin
    write('NIM          : ');readln;
    write('Nama         : ');readln;
    write('Program Studi: ');readln;
    write('Tahun Lahir  : ');readln(lahir);
    writeln(#10);
    umur:=2010-lahir;
      if umur<=5 then ket:='balita'
      else if umur<=13 then ket:='anak-anak'
      else if umur<=25 then ket:='remaja'
      else if umur<=40 then ket:='dewasa'
      else ket:='orang tua';
    writeln('Umur      : ', umur);
    writeln('Keterangan: ', ket);
    readln
end.

Saturday, October 2, 2010

ALOGARITMA SORTING

 
Penjelasan Alogaritma Sorting .


Istilah sorting tentu tidak asing di telinga kita, yaitu istilah untuk mengurutkan data. Ada dua bentuk sorting yaitu secara ascending dan descending. Sorting secara ascending adalah cara mengurutkan data mulai data bernilai terkecil sampai terbesar. Sedangkan descending mengurutkan data mulai dari data terbesar sampai terkecil. Sebagai contoh misalkan diberikan data berupa bilangan berikut ini:
3 9 1 4 0 2
Hasil sorting ascending adalah 0 1 2 3 4 9, dan hasil secara descending adalah 9 4 3 2 1 0.
Nah pada artikel kali ini akan dibahas bagaimana kita mencari algoritma untuk melakukan sorting ini sekaligus implementasinya.
OK, misalkan diberikan data sebagaimana data di atas. Bagaimana cara kita mengurutkan data secara ascending? Yup… untuk memudahkan pemrosesan data, lebih enak kalau kita nyatakan terlebih dahulu data bilangan di atas ke dalam bentuk notasi xi dengan i = 1, 2, …, 6. Sehingga dalam hal ini x1=3, x2=9, x3=1, x4=4, x5=0 dan x6=2.
Nah… selanjutnya apabila kita ingin mengurutkan data secara ascending, maka harapan kita urutan data pertama adalah data yang memiliki nilai paling kecil. Oleh karena itu kita harus mencari data terkecil dari semua data yang ada, lalu tempatkan ia ke data urutan pertama. Lho… lantas, bagaimana dengan data urutan pertama sebelumnya? Bukankah nantinya dia akan tertimpa dengan data terkecil itu? Oh tidak… data urutan pertama sebelumnya akan kita tukar tempatnya dengan milik data terkecil. Misalkan data terkecil terletak pada urutan ke-4 dari seluruh data, maka data pertama kita tempatkan ke urutan ke-4 dan data terkecil diletakkan ke urutan pertama.
Ini dia pseudocode dalam Pascal untuk mencari nilai terkecil dari semua data (x1, x2, …, x6) sekaligus mencari tempatnya.
01.min := x[1];
02.for i:=1 to 6 do
03.begin
04.    if (x[i] <= min) then
05.    begin
06.       min := x[i];
07.       tempatnya_min := i;
08.    end;
09.end;
Jadi pertama-tama, kita anggap nilai minimum adalah x1. Lalu nilai minimum ini kita bandingkan dengan semua data yang ada. Jika ditemukan nilai xi yang lebih kecil atau sama dengan nilai minimum, maka xi itulah nilai minimum yang baru, sekaligus tempat miliknya data minimum ini (i) kita catat. Nah setelah nilai minimum dari semua data ditemukan, maka selanjutnya kita tukar tempat nilai minimum tadi dengan tempat data pertama.
1.temp := x[1];
2.x[1] := x[tempatnya_min];
3.x[tempatnya_min] := temp;
Sehingga pseudocode proses mencari nilai terkecil dan menukar tempatnya dengan data pertama menjadi
01.min := x[1];
02.for i:=1 to 6 do
03.begin
04.    if (x[i] <= min) then
05.    begin
06.       min := x[i];
07.       tempatnya_min := i;
08.    end;
09.end;
10. 
11.temp := x[1];
12.x[1] := x[tempatnya_min];
13.x[tempatnya_min] := temp;
Nah setelah ditukar tempat antara data pertama dengan data terkecil maka urutan data menjadi
0 9 1 4 3 2
Proses selanjutnya, kita ulangi lagi proses yang sama yaitu mencari data terkecil dari kelompok data urutan ke-2 sampai dengan ke-6. Lalu tukar tempat data terkecil tersebut dengan tempat data urutan ke-2. Berikut ini pseudocodenya
01.min := x[2];
02.for i:=2 to 6 do
03.begin
04.    if (x[i] <= min) then
05.    begin
06.       min := x[i];
07.       tempatnya_min := i;
08.    end;
09.end;
10. 
11.temp := x[2];
12.x[2] := x[tempatnya_min];
13.x[tempatnya_min] := temp;
Tukar tempat antara data minimum dengan data ke-2 menghasilkan urutan data
0 1 9 4 3 2
Proses yang sama kembali dilakukan untuk kelompok data mulai urutan ke-3 sampai ke-6. Cari nilai minimumnya, lalu tukar tempat dengan data ke-3. Begitu seterusnya sampai dengan kelompok data ke-6 sampai ke-6. Berikut ini hasil urutan data untuk setiap proses
hasil urutan untuk kelompok data x3 s/d x6 : 0 1 2 4 3 9
hasil urutan untuk kelompok data x4 s/d x6 : 0 1 2 3 4 9
hasil urutan untuk kelompok data x5 s/d x6 : 0 1 2 3 4 9
hasil urutan untuk kelompok data x6 s/d x6 : 0 1 2 3 4 9
Nah… setelah proses selesai diperolehlah data yang terurut secara ascending. Pada contoh ini sebenarnya proses sorting ascending selesai pada kelompok data x4 s/d x6. Namun untuk keperluan generalisasi (bisa diterapkan ke semua kasus) maka kita selesaikan proses sampai dengan kelompok data terakhir.
Dengan demikian secara umum, untuk data x1 … xn, berikut ini pseudocode untuk sorting secara ascending
01.for kelompok := 1 to n do
02.begin
03.   min := x[kelompok];
04.   for i := kelompok to n do
05.   begin
06.      if (x[i] <= min) then
07.      begin
08.         min := x[i];
09.         tempatnya_min := i;
10.      end;
11.   end;
12. 
13.   temp := x[kelompok];
14.   x[kelompok] := x[tempatnya_min];
15.   x[tempatnya_min] := temp;
16.end;
Sedangkan berikut ini contoh implementasi algoritma sorting ascending di atas pada kasus yang diberikan di atas.
01.program sorting;
02.var x : array[1..100] of integer;
03.    i, n, min, kelompok, temp, tempatnya_min : integer;
04.begin
05.    { membuat data array yang terdiri dari data : 3 9 1 4 0 2 }
06. 
07.    x[1] := 3;
08.    x[2] := 9;
09.    x[3] := 1;
10.    x[4] := 4;
11.    x[5] := 0;
12.    x[6] := 2;
13. 
14.    n := 6; {jumlah data}
15. 
16.    { proses sorting ascending }
17. 
18.    for kelompok := 1 to n do
19.    begin
20.       min := x[kelompok];
21.       for i := kelompok to n do
22.       begin
23.          if (x[i] <= min) then
24.          begin
25.             min := x[i];
26.             tempatnya_min := i;
27.          end;
28.       end;
29. 
30.       temp := x[kelompok];
31.       x[kelompok] := x[tempatnya_min];
32.       x[tempatnya_min] := temp;
33.    end;
34. 
35.    { menampilkan hasil sorting }
36. 
37.    for i:=1 to n do
38.    begin
39.       writeln(x[i], ' ');
40.    end;
41.end.
Lantas bagaimana dengan sorting descending? Ya… berarti kita tidak lagi mencari data minimum, tapi data maksimum. Bagaimana caranya? ya… tinggal ubah saja tanda <= menjadi >=. Oya, jangan lupa ubah pula nama variabel min menjadi max :-) karena nantinya menjadi lucu, wong mencari nilai maksimum kok nama variabelnya ‘min’, meskipun gak pengaruh di output.