Pascal‎ > ‎

Lopis

Permasalahan

Kita ingin menampilkan sebuah lopis (atau segitiga) dengan tinggi 17 baris seperti dibawah ini:
 

                 *
                ***
               *****
              *******
             *********
            ***********
           *************
          ***************
         *****************
        *******************
       *********************
      ***********************
     *************************
    ***************************
   *****************************
  *******************************
 *********************************

Kode Sumber


{
solusi untuk tugas praktikum 01
Algoritma dan Pemrograman 1
Materi: FOR..DO
}

uses crt;
const
tinggi=17;
var
baris,spasi,bunga:byte;
begin
for baris:= 1 to tinggi do
begin
for spasi:=baris to tinggi do
write(' ');{spasi}
for bunga:=1 to 2*baris-1 do
write('*');{bunga}
writeln;
end;
end.


Analisis

Kodesumber di atas sebenarnya mendemokan penggunaan FOR dua lapis dan penggunaan CONST. Mahasiswa yang dapat menemukan sendiri solusi permasalahan ini tanpa melihat kodesumber biasanya mereka yang akan mendapatkan nilai A, dan biasanya hanya mereka yang akan dapat mendapatkan nilai C ke atas yang akan mengerti dengan kode sumber (jawaban/solusi) ini. Jika Anda setelah membaca penjelasan ini tapi masih juga tidak mengerti, perbanyaklah berlatih, karena Anda dikhawatirkan akan gagal kuliah ini.

CONST

Perhatikan, pada kode sumber terdapat perintah
const
  tinggi=17;
yang berfungsi untuk membuat sebuah konstanta bernama tinggi yang isinya bilangan bulat 17.
Konstanta itu seperti variable, tapi dia tidak dapat diubah oleh program.

Penggunaan konstanta biasanya untuk
  • membuat program kita lebih mudah dibaca dan
  • membuat kita lebih mudah mengubah nilai suatu tetapan, jadi tidak harus mengganti semua nilai, tapi cukup mengganti isi konstanta saja di awal program.
Dengan adanya konstanta ini, kita dapat mengubah-ubah tinggi lopis (segitiga) kita.

Cara Memecahkan Permasalahan

Perhatikan setiap baris lopis/segitiga yang akan ditampilkan, terdapat spasi yang banyaknya 17 dan kemudian diikuti sebuah karakter bunga/asterik.
 BarisSpasi
Asterik
 1 171
 2 163
 3 155
 4 147

Coba amati bahwa untuk setiap barisnya, jumlah spasi berkurang satu persatu mulai dari 17 (dibaris ke-1), 16 dibaris ke-2 hingga nantinya cuma tinggal 1 di baris terakhir, baris 17.

Setelah dicetak spasi, kita harus mencetak bunga atau karakter asterik ( * ) sebanyak 1 dibaris ke-1, 3 dibaris ke-2, 5 dibaris ke-3, 7 dibaris ke-4 ... begitu terus sehingga banyak bunga/asterik yang dicetak adalah (2*baris - 1)

Jangan lupa, bahwa setelah itu, kita harus mencetak sebuah garis baru, newline, makanya kita akan menambahkan writeln di sana.


Untuk mencetak baris ke-1

  • cetak spasi 17kali
    • perintah write(' '); sebanyak 17kali

      write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');
    • dengan for, kita dapat menyederhanakan perintah diatas menjadi
         
      for spasi:= 1 to 17 do
      write(' ');

  • cetak bunga 1 kali
    • write('*');

  • cetak barisbaru /newline dengan writeln;
    • writeln;


Untuk mencetak baris ke-2


  • cetak spasi 16kali
    • perintah write(' '); sebanyak 16kali

      write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');write(' ');
    • dengan for, kita dapat menyederhanakan perintah diatas menjadi
         
      for spasi:= 1 to 16 do
      write(' ');

  • cetak bunga 3 kali
    • write('*');write('*');write('*');
    • atau dapat disederhanakan dengan for
    • for bunga:=1 to 3 do
      write('*');
  • cetak barisbaru /newline dengan writeln;
    • writeln;

Untuk mencetak setiap baris selanjutnya

Begitu seterusnya untuk_setiap_baris dengan algoritma

  • Cetak spasi sebanyak baris
  • Cetak bunga sebanyak 2*baris -1
  • Cetak barisbaru (writeln;)

Sedangkan karena baris itu sendiri juga perulangan, yang akan berulang mulai dari 1 hingga 17 (tinggi lopis kita adalah 17), maka kita juga dapat melakukan FOR terhadap baris, sehingga algoritma untuk permasalahan kita adalah:


for baris:=1 to 17 do
  • cetak untuk_setiap_baris
sehingga, jika untuk_setiap_barisnya diganti dengan senarai diatas, algoritmanya menjadi:

for baris:=1 to 17 do
  • Cetak spasi sebanyak baris
  • Cetak bunga sebanyak 2*baris -1
  • Cetak barisbaru (writeln;)

Final

Hasil akhir dari kode kita dapat Anda lihat di atas, atau pada attachment dibawah ini.
ċ
lopis01.pas
(0k)
Muhammad Jazman,
16 Dec 2010, 02:43
Comments