LAPORAN RESMI PRAKTIKUM ALGORITMA PEMROGRAMAN MODUL V “ARRAY”
Disusun Oleh : TGL. PRAKTIKUM NAMA NRP KELOMPOK DOSEN
: 06 November 2012 : Gabriel Juan Evangeli : 120411100102 : D1 : Arik Kurniawati
TELAH DISETUJUI TANGGAL : ........................................... ASISTEN PRAKTIKUM
SHOHIB (1004111000101)
LABORATORIUM COMMON COMPUTING JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS TRUNOJOYO MADURA 2012
BAB I PENDAHULUAN 1.1 Latar Belakang
Mengatasi masalah ketika kita menemukan permasalaahn yang membtutuhkan sejumlah data yang harus disimpan tetapi memiliki tipe yang sama, berdasarkan modul – modul sebelumnya bahwa pemrograman tersebut sangat tidak efektif. Misalkan apabila kita ingin me nyimpan sejumlah 100 data yang bertipe sama dan kita perlu menyimpan sementara, untuk kemudian dipanggil sewaktu – waktu dan setelah itu digunakan untuk diproses di algoritma selanjutnya, maka tidak mungkin kita akan menggunakan 100 buah peubah yang sama. Untuk itu dalam modul ini akan dibahas mengenai, pemrograman yang berstruktur array. Array menrupakan pemrograman yang berguna untuk menyimpan beberapa data yang bertipe sama, disimpan sementara, dan kita dapat memanggil nilai tersebut untuk kemudian dipro ses pada algoritma selanjutnya. Dengan menggunakan array, praktikan dapat mengetahui fungsi dan keguunaan array untuk memudahkan dan mempersingkat ketika coding program. 1.2 Tujuan Tujuan mahasiswa mengikuti praktikum Algortima Pemrograman Modul IV ini adalah : 1. Mengetahui dan mampu menerapkan pemrograman arrray yang ada dalam algoritma. Salah satunya yang berjalan dalam pascal. 2. Mengetahui
dan
mampu
menerapkan
beberapa
teknik
pemrograman array yang digunakan untuk menyimpan nilai 3. Mengetahui teknik kerja yang berbeda dari beberapa struktur pemrograman array satu dimensi dengan array dua dimensi. 4. Mengetahui dan mampu menerapkan perbedaan penggunaan array satu dimensi (larik) dan array dua dimensi (matriks). 5. Mengetahui manfaat penggunaan larik maupun matriks.
BAB II DASAR TEORI
2.1 Teori Larik adalah tipe terstruktur yang terdiri dari sejumlah elemen – elemen yang bertipe sama. Banyaknya elemen dalam suatu larik ditunjukkan oleh suatu indeks yang harus merupakan tipe data yang menyatakan keterurutan, misalnya integer atau karakter (karena ia menyatakan posisi data). Tiap – tiap elemen di larik dapat diakses langsung melalui indeksnya. Suatu larik memiliki jumlah elemen yang jumlahnya tetap, sehingga jumlah elemen larik tidak dapat diubah selama pelaksanaan program. Gambar 5.1. memperlihatkan struktur deklarasi Larik di dalam Bahasa Pascal. (* DEKLARASI *) var NamaLarik : array[1..JumlahElemen] of TipeElemen; Gambar 5.1. Struktur Deklarasi Bahasa Pascal Untuk Larik
Cara mengacu elemen larik : NamaLarik[indeks]
Larik dapat berupa larik satu dimensi ataupun lebih dari satu dimensi. Matriks merupakan contoh larik yang memiliki dimensi lebih dari satu. Struktur penyimpanan matriks di dalam memori utama yang setiap individu elemennya diakses dengan menggunakan dua buah indeks (yang biasanya dikonotasikan dengan baris dan kolom). Karena matriks sebenarnya adalah larik, konsep umum dari larik juga berlaku untuk matriks, yaitu:
Kumpulan elemen yang bertipe sama dapat berupa tipe dasar (integer, real,boolean,char, dan string), atau tipe terstruktur seperti record.
Setiap elemen data dapat diakses secara langsung jika indeksnya (baris dan kolom ) diketahui.
Merupakan struktu data yang statik, artinya jumlah elemennya sudah dideklarasikan terlebih dahulu di dalam bagian DEKLARASI dan tidak bisa diubah selama pelaksanaan program
Elemen matriks diakses melalui indeks baris dan indeks kolomnya, Jika indeks baris dinyatakan dengan i dan indeks kolom dinyatakan dengan j, maka notasi algoritmik untuk mangakses elemen pada baris i dan kolom j adalah nama_matriks[i,j]
BAB III TUGAS PENDAHULUAN Kerjakan tugas – tugas di bawah ini sebelum praktikum dimulai. 1. Sebutkan dan jelaskan keuntungan – keuntungan penggunaan larik dan matriks! Jawab: Keuntungan penggunaan larik dan matriks Menghemat penggunaan banyak variable Menghindari penggunaan variable yang banyak Lebih praktis menggunakan larik dan matriks bila dibandingkan dengan menggunakan program tanpa larik maupun matriks Struktur yang lebih praktis,dengan pengaksesan cepat karena langsung mengakses melalui indeksnnya
2. Kapankah sebaiknya larik dan matriks digunakan Jelaskan! Jawab: Kapan penggunaan larik dan matriks Larik o Larik digunakan bila sejumlah data yang banyak bertipe sama o Menyimpan sejumlah data yang besar tersebut kemudian mengolahnya o Data yang telah disimpan dapat diakses bila kita memerlukannya untuk diproses Matriks:Penggunaan yang sama dengan larik karena matrik merupakan konsep yang berasal dari larik
o Kumpulan elemen yang bertipe sama. o Setiap elemen yang kita butuhkan untuk diakses langsung melalui indeks baris dan kolom , kemudian diproses seuai kebutuhan kita. o Struktur yang praktis dan bersifat statis, yang setiap anggotanya dideklarasikan
terlebih dahulu,
sebelum
program diolah.
3. Buat algoritma untuk nilai min, kuartil bawah, kuartil tengah, kuartil atas da n nilai max dari sejumlah bilangan bulat yang dimasukkan melalui piranti masukkan. Contoh : Jumlah bilangan yang dimasukkan: 11 Bilangan ke-1: 75 Bilangan ke-2: 60 Bilangan ke-3: 70 Bilangan ke-4: 55 Bilangan ke-5: 85 Bilangan ke-6: 65 Bilangan ke-7: 80 Bilangan ke-8: 90 Bilangan ke-9: 50 Bilangan ke-10: 95 Bilangan ke-11: 100
Nilai Min
:50
Kuartil Bawah :60 Kuartil Tengah:75 Kuartil Atas
:90
Nilai Max
:100
Jawab: Algoritma, Coding, Running Algoritma: program kuartilminmak {mencari nilai min, kuartil bawah, tengah dan atas, serta nilai maks } DEKLARASI type int : array [1..100] of real {tipe bentukan untuk menentukan sejumlah larik}
procedure diurutkan(output x,y : real) {untuk mengurutkan / pengurutan } DEKLARASI simpan : real DESKRIPSI simpan ← x x← y y ←simpan
procedure tampung(output x:int input n: integer) {menampung sejumlah data} DEKLARASI i,j : integer DESKRIPSI for i←1 to n-1 do {menampung sejumlah data} for j←1 to n-i do if x[j] > x[j+1] then diurutkan(x[j],x[j+1])
procedure ganjil(output x:int input n: integer) {bila data yang dicari nilai min, kuartil(bawah,tengah,atas), max),mak merupakan data ganjil} DEKLARASI q1,q2,q3:integer DESKRIPSI q1 ←(n+1) div 4 q2 ←(n+1) div 2 q3 ←(3*(n+1)) div 4 write('Kuartil bawah : ',x[q1]:2:2) writeln write('Kuartil tengah : ',x[q2]:2:2) writeln write('Kuartil atas : ',x[q3]:2:2) writeln
procedure genap(output x:int input n: integer) {bila data yang dicari nilai min, kuartil(bawah,tengah,atas), max),mak merupakan data genap} DEKLARASI q1,q2,q3:integer median:real DESKRIPSI q1 ←(n+2) div 4 q2←n div 2 median ←((x[q2])+(x[q2+1])) / 2 q3 ←(3*n+2) div 4 write('Kuartil bawah : ',x[q1]:2:2) writeln write('Kuartil tengah : ',median:2:2) writeln write('Kuartil atas : ',x[q3]:2:2)
writeln
{PROGRAM UTAMA} DEKLARASI n,i : integer data : int
DESKRIPSI write('Jumlah bilangan yang dimasukkan : ') readln(n) for i←1 to n do begin write('Bilangan ke-',i,' = ') readln(data[i]) endfor
tampung(data,n){memanggil upa program pengurutan } writeln write('Nilai Min =', data[1]:0:0) writeln if n mod 2 = 1 then ganjil(data,n) else genap(data,n) writeln ('Nilai Max =',data[n]:0:0) Coding: program kuartilminmak; uses wincrt; type int = array [1..100] of real;
procedure diurutkan(var x,y : real); var simpan : real; begin
simpan := x; x := y; y := simpan; end;
procedure tampung(var x:int ; n: integer); var i,j : integer; begin for i:=1 to n-1 do for j:=1 to n- i do if x[j] > x[j+1] then diurutkan(x[j],x[j+1]); end;
procedure ganjil(var x:int ; n: integer); var q1,q2,q3:integer; begin q1 :=(n+1) div 4; q2 :=(n+1) div 2; q3 :=(3*(n+1)) div 4; write('Kuartil bawah : ',x[q1]:2:2); writeln; write('Kuartil tengah : ',x[q2]:2:2); writeln; write('Kuartil atas : ',x[q3]:2:2); writeln; end;
procedure genap(var x:int ; n: integer); var q1,q2,q3:integer; median:real; begin
q1 :=(n+2) div 4; q2 :=n div 2; median:= ((x[q2])+(x[q2+1])) / 2; q3 :=(3*n+2) div 4; write('Kuartil bawah : ',x[q1]:2:2); writeln; write('Kuartil tengah : ',median:2:2); writeln; write('Kuartil atas : ',x[q3]:2:2); writeln; end;
var n,i : integer;data : int;
begin write('Jumlah bilangan yang dimasukkan : '); readln(n); for i:= 1 to n do begin write('Bilangan ke-',i,' : '); readln(data[i]); end;
tampung(data,n); writeln; write('Nilai Min :', data[1]:0:0); writeln; if n mod 2 = 1 then ganjil(data,n) else genap(data,n); writeln ('Nilai Max :',data[n]:0:0);
end. Running:
4. Buat algoritma untuk menghitung hasil perkalian antara dua buah matriks. Masukkan :nilai – nilai dalam dua buah matriks Keluaran
:hasil perkalian dua buah matriks
Jawab : Algoritma , Coding, Running Algoritma: program perkalian2Matriks {MENGALIKAN 2 BUAH MATRIKS} DEKLARASI type z: array [1..50,1..50] of integer DEKLARASI a,b,c : z i,j,k,x,y,p : integer DESKRIPSI
writeln('Ordo matrik A') {mengisi ukuran matriks A} write('Baris : ') readln(x) write('Kolom : ') readln(y) writeln writeln writeln('Ukuran matrix B') {mengisi ukuran matriks B} writeln('Baris : ',y) write('Kolom : ') readln(p) for i←1 to x do for j←1 to y do write('Anggota A[',i,',',j,'] : ') {mengisi ANGGOTA matriks A} readln(a[i,j]) endfor writeln for i←1 to y do for j←1 to x do begin write('Anggota B[',i,',',j,'] : ') {mengisi ANGGOTA matriks A} readln(b[i,j]) endfor for i←1 to x do {cara mengalikan Matriks A dengan Matriks B} for j←1 to p do for k←1 to y do c[i,j] ← c[i,j] + a[i,k]*b[k,j]; writeln writeln writeln('Hasil perkalian Matriks A dengan Matriks B = ') Writeln for i←1 to x do { Hasil perkalian Matriks A dengan Matriks B } begin for j←1 to p do write(c[i,j],' ');
writeln endfor writeln
Coding: program perkalian2Matriks; uses wincrt; type z= array [1..50,1..50] of integer; var a,b,c : z; i,j,k,x,y,p : integer; begin writeln('Ordo matrik A'); write('Baris : '); readln(x); write('Kolom : '); readln(y); writeln; writeln; writeln('Ukuran matrix B'); writeln('Baris : ',y); write('Kolom : '); readln(p); clrscr; for i:=1 to x do for j:=1 to y do begin write('Anggota A[',i,',',j,'] : '); readln(a[i,j]); end; writeln; for i:=1 to y do for j:=1 to p do begin
write('Anggota B[',i,',',j,'] : '); readln(b[i,j]); end; for i:=1 to x do for j:=1 to p do for k:=1 to y do c[i,j] := c[i,j] + a[i,k]*b[k,j]; writeln; writeln; writeln('Hasil perkalian Matriks A dengan Matriks B = '); Writeln; for i:=1 to x do begin for j:=1 to p do write(c[i,j],' '); writeln; end; writeln; end. Running:
BAB IV IMPLEMENTASI 4.1 Kegiatan Praktikum 1.
Buat program untuk tugas prepraktikum 3! Jawaban : Coding : program kuartilminmak; type int = array [1..100] of real;
procedure diurutkan(var x,y : real); var simpan : real; begin simpan := x; x := y; y := simpan; end;
procedure tampung(var x:int ; n: integer); var i,j : integer; begin for i:=1 to n-1 do for j:=1 to n- i do if x[j] > x[j+1] then diurutkan(x[j],x[j+1]); end;
procedure ganjil(var x:int ; n: integer); var q1,q2,q3:integer; begin q1 :=(n+1) div 4; q2 :=(n+1) div 2;
q3 :=(3*(n+1)) div 4; write('Kuartil bawah : ',x[q1]:2:2); writeln; write('Kuartil tengah : ',x[q2]:2:2); writeln; write('Kuartil atas : ',x[q3]:2:2); writeln; end;
procedure genap(var x:int ; n: integer); var q1,q2,q3:integer; median:real; begin q1 :=(n+2) div 4; q2 :=n div 2; median:= ((x[q2])+(x[q2+1])) / 2; q3 :=(3*n+2) div 4; write('Kuartil bawah : ',x[q1]:2:2); writeln; write('Kuartil tengah : ',median:2:2); writeln; write('Kuartil atas : ',x[q3]:2:2); writeln; end;
var n,i : integer;data : int;
begin write('Jumlah bilangan yang dimasukkan : '); readln(n);
for i:= 1 to n do begin write('Bilangan ke-',i,' : '); readln(data[i]); end;
tampung(data,n); writeln; write('Nilai Min :', data[1]:0:0); writeln; if n mod 2 = 1 then ganjil(data,n) else genap(data,n); writeln ('Nilai Max :',data[n]:0:0); end. Running :
2.
Buat program untuk tugas prepratikum no.4! Jawaban : Coding : program perkalian2Matriks; uses wincrt; type z= array [1..50,1..50] of integer; var a,b,c : z; i,j,k,x,y,p : integer; begin writeln('Ordo matrik A'); write('Baris : '); readln(x); write('Kolom : '); readln(y); writeln; writeln; writeln('Ukuran matrix B'); writeln('Baris : ',y); write('Kolom : '); readln(p); clrscr; for i:=1 to x do
for j:=1 to y do begin write('Anggota A[',i,',',j,'] : '); readln(a[i,j]); end; writeln; for i:=1 to y do for j:=1 to p do begin write('Anggota B[',i,',',j,'] : '); readln(b[i,j]); end; for i:=1 to x do for j:=1 to p do for k:=1 to y do c[i,j] := c[i,j] + a[i,k]*b[k,j]; writeln; writeln; writeln('Hasil perkalian Matriks A dengan Matriks B = '); Writeln; for i:=1 to x do begin for j:=1 to p do write(c[i,j],' '); writeln; end; writeln; end. Running:
4.2 Tugas Akhir Buatlah algoritma dan terjemahkan dalam Bahasa Pascal untuk operasi invers matriks ordo N! Jawaban : Algoritma: program inversmatriks type matriks←array [1..50,1..50] of real DEKLARASI n,i,j,b,l: integer a:matriks DESKRIPSI writeln ('Program Pencarian Invers Matriks Menggunakan Matriks Identitas') writeln ('Masukkan ordo matrik (N x N)') write ('N : ') readln (n) for i←1 to n do write ('Masukkan elemen matriks baris ke-',i)
for j←1 to n do write ('Matriks m(',i,',',j,') = ') readln (a[i,j]) endfor endfor for i←1 to n do write ('Elemen matriks yang dimasukkan baris ke-',i) for j←1 to n do write ('Matriks m(',i,',',j,')= ',a[i,j]:0:0,' ') endfor for j←n+1 to n+n do i←j-n a[i,j]←1 endfor for j←n+1 to n+n do begin if (i<>j-n) then a[i,j]:=0 endfor for i←1 to n do for j:=1 to n+n do if i<>j then a[i,j]:=a[i,j]/a[i,i]; endif for j:=1 to n+n do if i=j then a[i,i]←1; endif for l←1 to n do if i<>l then for j←i+1 to n+n do a[l,j]←a[l,j]-(a[i,j]*a[l,i]); endfor endif endfor for b←1 to n do
if i<>b then a[b,i]←0 endif endfor endfor writeln writeln('Maka invers dari matrik adalah :') for i←1 to n do begin for j←n+1 to n+n do write (' m(',i,',',i,') ',a[i,j]:0:2) endfor endfor Coding : program inversmatriks;
type matriks=array [1..50,1..50] of real;
var n,i,j,b,l: integer; a:matriks;
begin writeln ('Program Pencarian Invers Matriks Menggunakan Matriks Identitas'); writeln; writeln ('Masukkan ordo matrik (N x N)'); write ('N : '); readln (n); writeln; for i:=1 to n do begin write ('Masukkan elemen matriks baris ke-',i);
writeln; writeln; for j:=1 to n do begin write ('Matriks m(',i,',',j,') = '); readln (a[i,j]); end; end; writeln; for i:=1 to n do begin write ('Elemen matriks yang dimasukkan baris ke-',i); writeln; writeln; for j:=1 to n do write ('Matriks m(',i,',',j,')= ',a[i,j]:0:0,' '); writeln; end;
for j:=n+1 to n+n do begin i:=j- n; a[i,j]:=1; end;
for j:=n+1 to n+n do begin if (i<>j-n) then a[i,j]:=0; end;
for i:=1 to n do begin
for j:=1 to n+n do begin if i<>j then a[i,j]:=a[i,j]/a[i,i]; end; for j:=1 to n+n do begin if i=j then a[i,i]:=1; end;
for l:=1 to n do begin if i<>l then begin for j:=i+1 to n+n do begin a[l,j]:=a[l,j]-(a[i,j]*a[l,i]); end; end; end;
for b:=1 to n do begin if i<>b then begin a[b,i]:=0; end; end; end; writeln;
writeln('Maka invers dari matrik adalah :'); for i:=1 to n do
begin for j:=n+1 to n+n do write (' m(',i,',',i,') ',a[i,j]:0:2); writeln; end; end. Running :
4.3 Tugas Tambahan Buatlah algoritma dan terjemahkan dalam Bahasa Pascal untuk operasi transpose matriks ordo N! Algoritma: program matriks_transpose type matriktranspose = array [1..10,1..10] of integer; DEKLARASI n,m,i,j: integer
a:matriktranspose writeln ('Program Pencarian TRANSPOSE Matriks ') writeln ('Masukkan ordo matrik (baris ).') readln (n) writeln ('Masukkan ordo matrik (kolom ).') readln (m) for i←1 to n do for j←1 to m do write ('masukkan elemen matrik a(',i,',',j,') : ')readln (a[i,j]) endfor endfor writeln('MATRIKS ASAL') for i←1 to n do for j←1 to m do write(a[i,j]) endfor endfor writeln('MATRIKS TRANPOSENYA') for i←1 to m do for j←1 to n do write (a[j,i]) endfor endfor Coding : program matriks_transpose;
type matriktranspose = array [1..10,1..10] of integer; var n,m,i,j: integer; a:matriktranspose; begin writeln ('Program Pencarian TRANSPOSE Matriks '); writeln; writeln ('Masukkan ordo matrik (baris ).'); readln (n);
writeln ('Masukkan ordo matrik (kolom ).'); readln (m);
for i:=1 to n do begin for j:=1 to m do begin write ('masukkan elemen matrik a(',i,',',j,') : ');readln (a[i,j]); end; end; writeln; writeln('MATRIKS ASAL'); for i:=1 to n do begin for j:=1 to m do begin write(a[i,j]); end; writeln; end; writeln; writeln('MATRIKS TRANPOSENYA'); for i:=1 to m do begin for j:=1 to n do begin write (a[j,i]); end; writeln; end; end.
Running :
BAB V PENUTUP 5.1 Kesimpulan Dari materi dan implementasi diatas dapat disimpulkan bahwa pemrograman menggunakan larik ataupun matriks sangat berguna untuk pemrograman yang memiliki sejumlah data yang bertipe sama, tetapi kita perlu menyimpannya, untuk selanjutnya diproses. Selama pelaksanaan program , larik maupun matriks tetap menyimpan nilai. Dengan ini, kita dapat menggunakan larik dan matriks yang telah menyimpan nilai tersebut, sewaktu –waktu yang artinya kita dapat memproses nilai – nilai tersebut pada bagian algoritma selanjutnya. Keuntungan menggunakan larik ataupun matriks adalah bahwa larik ataupun matriks, kita dapat menggunakan larik atupun matriks untuk menghindari penggunaan nama peubah yang banyak. 5.2 Saran Untuk mas Shohib selaku Asisten Praktikum, untuk tetap menambah durasi praktikum.