Struktur pengulangan FOR digunakan untuk menghasilkan pengulangan sejumlah kali yang dispesifikasikan. Jumlah pengulangan diketahui atau dapat ditentukan sebelum eksekusi. Untuk mencacah sudah berapa kali pengulangan dilakukan, kita memerlukan sebuah peubah (variable) pencacah (counter). Peubah ini nilainya selalu bertambah satu setiap kali pengulangan dilakukan.
Jika cacah pengulangan sudah mencapai jumlah yang
dispesifikasikan, maka proses pengulangan berhenti
Bentuk umum struktur FOR ada dua macam : menaik (ascending) atau menurun (descending).
FOR menaik :
Keterangan :
i. pencacah haruslah dari tipe data yang memiliki predecessor dan successor, yaitu integer atau karakter. Tipe riil tidak dapat digunakan sebagai pencacah.
ii. Aksi adalah satu atau lebih instruksi yang diulang.
iii. nilai_awal harus lebih kecil atau sama dengan nilai_akhir. Jika nilai_awal lebih besar dari nilai_akhir, maka badan pengulangan tidak dimasuki.
for pencacah←nilai_awal to nilai_akhir do
aksi endfor
iv. Pada awalnya,pencacah diinisialisasi dengan nilai_awal.Nilai pencacah secara otomatis bertambah satu setiap kali pengulangan dimasuki, sampai akhirnya nilai pencacah sama dengan nilai_akhir.
v. Jumlah pengulangan yang tejadi adalah nilai_akhir - nilai_awal + 1. Contoh analisis :
Buatlah algoritma dan program mencetak angka 1, 2, .., N, yang dalam hal ini nilai N dibaca terlebih dahulu dari piranti masukan. Jadi, program CETAK_N_ANGKA dalam bahasa pascal adalah sebagai berikut :
Hasil Output Program:
program CETAK_N_ANGKA;
{ mencetak 1, 2, …, N ke piranti keluaran }
uses wincrt; (* DEKLARASI *) var N : integer; k : integer; (* DESKRIPSI *) begin
write('jumlah pengulangan = ');read(N);
for k:=1 to N do { ulangi sebanyak N kali }
writeln(k) end.
Pertanyaan :
Apa yang terjadi bila N=0? N=-1? N=1? Jawab :
Jika N = 0 atau N = -1, proses pengulangan tidak terjadi, karena nilai akhir pencacah pengulangan lebih besar dari nilai awalnya (1).
Jika N = 1, pengulangan yang terjadi adalah 1 kali, karena 1 – 1 + 1 = 1.
For menurun :
Keterangan :
i. Pencacah haruslah dari tipe data yang memiliki predecessor dan successor, yaitu integer atau karakter. Tipe riil tidak dapat digunakan sebagai pencacah.
ii. Aksi adalah satu atau lebih instruksi yang diulang.
iii. nilai_akhir harus lebih besar atau sama dengan nilai_awal. Jika nilai_akhir lebih kecil dari nilai_awal, maka badan pengulangan tidak dimasuki.
for pencacah←nilai_akhir downto nilai_awal do
aksi endfor
iv. Pada awalnya, pencacah diinisialisasi dengan nilai_akhir. Nilai pencacah secara otomatis berkurang satu setiap kali aksi diulang, sampai akhirnya nilai pencacah sama dengan nilai_awal.
v. Jumlah pengulangan yang terjadi adalah nilai_awal-nilai_akhir+1. Contoh analisis :
Algorima dan program peluncuran roket dengan hitung mundur, mulai dari 10, 9, 8, …, 0.
Struktur WHILE
Bentuk umum :
program PELUNCURAN_ROKET;
{ hitung mundur peluncuran roket } uses wincrt; (* DEKLARASI *) var k : integer; (* DESKRIPSI *) begin for k:=10 downto 0 do writeln(k);
write('Go!!!!'); { roket meluncur } end.
Algoritma PELUNCURAN_ROKET
{ Hitung mundur peluncuran roket }
DEKLARASI K : integer DESKRIPSI for k←100 downto 0 do write(k) endfor
write(‘Go!’) {roket meluncur }
while kondisi do aksi endwhile
Aksi (atau runtunan aksi) akan dilaksanakanberulangkali selama kondisi benilai true. Jika kondisi bernilai false, badan pengulangan tidak akan dilaksanakan, yang berarti pengulangan selesai.
Yang harus diperhatikan adalah pengulangan harus berhenti. Pengulangan yang tidak pernah berhenti menandakan bahwa logika algoritma tersebut salah. Pengulangan berhenti apabila kondisi bernilai false. Agar kondisi suatu saat bernilai false, maka di dalam badan pengulangan harus ada instruksi yang mengubah nilai peubah kondisi.
Contoh analisa :
Dibuat sejumlah data bilangan bulat positif dari piranti masukan. Banyaknya data tidak diketahui sebelumnya, tetapi akhir pemasukan data adalah bila data yang dimasukkan bernilai -99. Bilangan -99 akan diinterpretasikan sebagai tanda berhenti proses pengisian data. Kita diminta menghitung jumlah seluruh nilai yang dimaskkan (-99 tidak termasuk data yang dijumlahkan).
Sebagai ilustrasi :
misalkan dibaca berturut-turut data: 10, 4, 5, 8, -99, maka jumlah seluruh nilai adalah 10 + 4 + 5 + 8 = 27
misalkan dibaca berturut-turut data : 9, -99, maka jumlah seluruh nilai adalah 9
misalkan dibaca berturut-turut data : -99, maka jumlah seluruh nilai adalah 0
Algoritma JUMLAH_DATA;
{ menghitung jumlah seluruh nilai bilangan bulat positif yang dibaca dari piranti masukan. akhir pembacaan data: -99 }
DEKLARASI
x : integer { data yang dibaca }
jumlah : integer { pencatat jumlah seluruh data }
DESKRIPSI
jumlah←0 {inisialisasi penjumlah bilangan} read(x)
while x ≠ -99 do jumlah←jumlah + x
read(x) endwhile
{ kondisi di akhir pengulangan: x = -99} write(jumlah) {terminasi}
program JUMLAH_DATA;
{ menghitung jumlah seluruh nilai bilangan bulat positif yang dibaca dari piranti masukan. akhir pembacaan data: -99 }
uses wincrt; (* DEKLARASI *) var x, jumlah : integer; (* DESKRIPSI *) begin jumlah:=0;
write('Ketikkan sembarang bilangan bulat ( -99 mengakhiri )'); readln(x);
while x <> -99 do begin
jumlah:=jumlah + x;
write('Ketikkan sembarang bilangan bulat ( -99 mengakhiri )'); readln(x);
end;
writeln('Jumlah seluruh nilai = ',jumlah); end.
Struktur REPEAT
Bentuk umum :
Notasi ini mendasarkan pengulangan pada kondisi boolean. Aksi di dalam badan kalang diulang samopai kondisi boolean bernilai true. Dengan kata lain, jika kondisi boolean masih false, pengulangan masih terus dilakukan. Karena proses pengulangan suatu saat harus berhenti, maka di dalam badan pengulangan harus ada aksi yang mengubah nilai peubah kondisi.
Struktur REPEAT memiliki makna yang sama dengan WHILE, dan dalam beberapa masalah kedua struktur tersebut komplemen satu sama lain.
Contoh analisa :
Algoritma dan program untuk menghitung jumlah angka dari 1 sampai N. Nilai N dibaca dari papan kunci. Misalnya N = 5, maka 1 + 2 + 3 + 4 + 5 = 15. repeat aksi until kondisi Algoritma PENJUMLAHAN_DERET; { menjumlahkan deret 1 + 2 + 3 + ... + N
dengan N adalah bilangan bulat positif yang dibaca dari piranti masukan. jumlah deret dicetek ke piranti keluaran. }
DEKLARASI
N, k, jumlah : integer;
DESKRIPSI
read(N) {banyaknya suku deret}
jumlah←0 { inisialisasi jumlah deret } k←1 { suku deret yang pertama } repeat
jumlah←jumlah + k {jumlah deret sekarang} k←k+1 {suku deret berikutnya} until k > N
program PENJUMLAHAN_DERET; { menjumlahkan deret
1 + 2 + 3 + ... + N
dengan N adalah bilangan bulat positif yang dibaca dari piranti masukan. jumlah deret dicetek ke piranti keluaran. }
uses wincrt; (* DEKLARASI *) var N, k, jumlah : integer; (* DESKRIPSI *) begin
write('N = ');readln(N); {banyaknya suku deret} jumlah:=0; { inisialisasi jumlah deret }
k:=1; { suku deret } repeat
jumlah:=jumlah + k; {jumlah deret sekarang} k:=k+1; {suku deret berikutnya} until k > N;
writeln('jumlah deret = ', jumlah); end.
SATUAN ACARA PERKULIAHAN
(SAP)
Mata Kuliah : Algoritma & Pemrograman Komputer Kode Mata Kuliah : TIS2223
SKS : 3
Semester : 2
Waktu Pertemuan : 2x3x50 Menit
Pertemuan : XIV
A. Standar Kompetensi
Setelah perkuliahan ini, mahasiswa dapat memecahkan masalah dengan algoritma yang berbasis pada bahasa Pascal dan dapat mengimplementasikan konsep dasar pemrograman terstruktur
B.Kompetensi Dasar
Mahasiswa dapat:
Menjelaskan konsep dasar dan definisi prosedur dan fungsi Mengerti dan memahami cara deklarasi dan pemanggilan