• Tidak ada hasil yang ditemukan

Laporan Praktikum Algoritma dan Pemrogra

N/A
N/A
Protected

Academic year: 2018

Membagikan "Laporan Praktikum Algoritma dan Pemrogra"

Copied!
163
0
0

Teks penuh

(1)

V.Tugas Praktikum

V.1 Program Sederhana Dalam C Analisa Program

Pada percobaan program 1 dengan memodifikasi program tersebut dapat dianalisa sebagai berikut:

1. Pada saat program ditambahkan #include<stdio.h> program menjadi compiled. Hal ini karena sintaks tersebut library standar untuk operasi input/output atau fungsi lain yang mana library tersebut terdapat di dalam file header studio.h.

2. Pada saat sintaks /* . . . */ dan // dihapus, muncul pesan error ketika program

decompile. Hal ini dikarenakan kode yang dimasukan setelah sintaks komentar dihapus tidak dapat didefinisikan atau tidak dikenali tipe seperti itu. Namun program bias di run dan dijalankan dengan benar.

3. Pada saat main() diganti dengan Main(), program tidak dapat dicompile karena

Main() tidak dikenali, dan akibat lainnya program tersebut tidak memiliki fungsi utama (main()) sehingga fungsi lain tidak akan dieksekusi.

4. Setelah tamda \n dihapus, tampilan program setelah di-run baris kedua pada program dengan output “Selamat belajar Algoritma dan Pemrograman” menjadi berada di baris pertama. Hal ini dikarenakan \n adalah fungsi yang digunakan untuk membuat baris yang baru.

5. Setelah tanda “;” dihapus, saat dicompile terdapat pesan error bahwa program tidak dapat dicompile. Tanda “;” adalah tanda yang digunakan sebagai akhir dari sebuah fungsi atau statement, sehingga ketika tanda tersebut dihapus, program atau statement yang ada tidak dapat dikenali.

6. Setelah tanda { atau } dihapus terjadi error dimana fungsi dan statement yang ditulis tidak dapat dikenali.

(2)

8. Setelah sintaks return 0; dihapus, program masih bias dicompile dan ditampilkan dengan tampilan yang sama dengan pemakaian return 0;. Sintaks

ini berfungsi untuk mengembalikan nilai ke angka 0.

V.2 Mengoperasikan Dua Buah Bilangan Listing Program

#include<stdio.h> main()

{

int bil1, bil2, jumlah;

printf("Input bilangan 1 : \n"); scanf("%d", &bil1);

printf("Input bilangan 2 : \n"); scanf("%d", &bil2);

jumlah=bil1+bil2;

printf("Penjumlahan %d dengan %d adalah %d", bil1, bil2, jumlah);

return 0; }

Tampilan Program

Tabel 5.1 Operator aritmatika dalam C

Operator C Operator Aritmatika Ekspresi Aljabar Ekspresi C

(3)

Analisa Program

Program menggunakan output dan input yaitu printf() dan scanf() dimana sebelumnya dideklarasikan bahwa dua bilangan yang dipakai adalah bilangan bulat dengan sintaks int bil1, bil2, jumlah;. pintf() digunakan untuk

menampilkan perintah apa yang akan diinput ke dalam program, sedangkan scanf(“%d”, &bil) berfungsi membaca nilai bertipe integer (bilangan bulat) dari variable bil. jumlah dideklarasikan dengan operator assignment, yaitu jumlah=bil1+bil2.

Operator penjumlahan diganti dengan operator perkalian dengan simbol “*”. Hasil yang ditampilkan adalah sama dengan hasil perkalian aritmatika perkalian.

V.3 Menggunakan statement “if” dan operator relasi Listing Program

#include<stdio.h> main()

{

int bil1, bil2;

printf("Masukan dua bilangan integer, \n"); scanf("%d %d", &bil1, &bil2);

printf("Hubungan antara dua bilangan tersebut adalah : "); if (bil1 == bil2)

printf("%d sama dengan %d \n", bil1, bil2); if (bil1 != bil2)

printf("%d tidak sama dengan %d \n", bil1, bil2); if (bil1 < bil2)

printf("%d lebih kecil dari %d \n", bil1, bil2); if (bil1 > bil2)

printf("%d lebih besar dari %d \n", bil1, bil2); if (bil1 <= bil2)

(4)

printf("%d lebih besar atau sama dengan %d", bil1, bil2); }

Tampilan Program

Analisa Program

Pada program ini dilakukan pendeklarasian dimana bil1 dan bil2 adalah integer. Sintaks printf() untuk menampilkan perintah input pada layar, dan sintaks scanf(“%d”, variable) digunakan untuk menginput data dari perintah yang ditampilkan, dan memberikan nilai pada variable yang ditulis. Sintaks if digunakan dalam pengkondisian saat statement memiliki dua kemungkinan yaitu true atau false. Operator relasi yang digunakan akan mengecek hubungan antara dua bilangan yang diinput, dan setelah if digunakan sintaks printf() untuk menampilkan hubungan dua bilangan tersebut dilayar sesuai dengan operator yang digunakan pada sintaks if. Data yang diinput akan diproses oleh semua sintaks if (dengan operan yang berbeda) dan akan menghasilkan output yang bernilai benar mengenai relasi dua bilangan tersebut.

VI. Tugas Akhir

1. Buatlah program C untuk memasukkan tiga buah bilangan integer melalui keyboard. Kemudian program akan menampilkan jumlah, rata-rata, product (perkalian ketiga bilangan tersebut), nilai terkecil dan nilai terbesar dari ketiga bilangan tersebut, Sebagai contoh, tampilan yang diinginkan adalah sebagai berikut

(5)

Rata-rata : 5,67 Product : 112

Listing program #include<stdio.h> main()

{

int a, b, c, sum=0, product=0; float average;

printf("Input tiga bilangan integer : \n"); scanf("%d %d %d", &a, &b, &c);

sum=a+b+c;

printf("Penjumlahan : %d \n", sum); average=sum/3;

printf("Rata-rata : %.2f \n", average); product=a*b*c;

printf("Product : %d \n", product);

if(a>=b && a>=c) printf("Bilangan Terbesar : %d \n", a); if(b>=a && b>=c) printf("Bilangan Terbesar : %d \n", b); if(c>=a && c>=b) printf("Bilangan Terbesar : %d \n", c); if(a<=b && a<=c) printf("Bilangan Terkecil : %d \n", a); if(b<=a && b<=c) printf("Bilangan Terkecil : %d \n", b); if(c<=a && c<=b) printf("Bilangan Terkecil : %d \n", c); return 0;

}

Tampilan Program

Analisa Program

(6)

dan hasil pengoperasian. Sum, average, dan product diberikan nilai dengan menggunakan operator assignment. Sedangkan dalam menentukan nilai/bilangan terbesar dan terkecil digunakan sintaks if dengan memakai operator relasi ( <=, dan >=) dan operator AND. Operator AND ini berarti apabila kedua kondisi dalam statement if tersebut terpenuhi maka statement tersebut bernilai true, sehingga akan memberikan output berdasarkan operator yang memenuhi.

2. Buatlah program yang menghasilkan keluaran sebagai berikut:

Listing Program #include<stdio.h> main()

{

printf("**********\t * \t * \t **********\t 123456789\n");

printf("* *\t * * \t * * \t * ** *\t 21 8\n");

printf("* *\t * * \t * * *\t * ** *\t 3 1 7\n");

printf("* *\t * * \t * \t * ** *\t 4 1 6\n");

printf("* *\t * * \t * \t **********\t 5 1 5\n");

printf("* *\t * * \t * \t * ** *\t 4 1 4\n");

printf("* *\t * * \t * \t * ** *\t 3 1 3\n");

printf("* *\t * * \t * \t * ** *\t 2 12\n");

printf("**********\t * \t * \t **********\t 123456789\n");

}

(7)

Analisa Program

Pada program statement/fungsi output yang digunakan hanya printf(). Bentukan disesuaikan dengan output yang ingin dihasilkan. Tanda \t digunakan untuk menambah tab pada output agar terdapat jarak yang cukup antargambar, sehingga tidak perlu menggunakan spasi untuk memberi jarak bentukan/gambar.

VII.Kesimpulan

Dari praktikum yang dilakukan, dapat disimpulkan beberapa hal sebagai berikut:

1. Bahasa program C adalah salah satu bahasa program tingkat tinggi (sebagian mengkategorikan sebagai bahasa tingkat menengah) yang banyak digunakan dan dipelajari.

2. Statement input pada bahasa C diantaranya degan menggunakan scanf(), yaitu fungsi input standar library. Sintaks dari statement scanf() adalah:

scanf(“convention specifier”, variable);

Sedangkan sintaks dasar output adalah statement print(). Sintaks ini akan menampilkan statement di monitor. Sintaks dari statement printf() adalah: printf(“convention specifier”, variable);

3. Tipe data dalam bahasa C dapat dibagi menjadi tiga tipe data, yaitu yaitu tipe data dasar, tipe data bentukan, dan tipe data enumerasi.

(8)

b. Tipe data bentukan adalah tipe data yang didefinisikan sendiri pada program yang dibuat. Tipe ini diantaranya adalah tipe array dan struktur. c. Tipe data enumerasi adalah tipe data yang nilainya telah didefinisikan

secara pasti pada saat pembuatan tipe tersebut.

4. Operator dalam bahasa C digunakan untuk mengoperasikan operand dengan bentuk simbol-simbol. Operator dapat dikelompokan menjadi empat.

a. Operan assignment, yaitu untuk memasukan nilai ke suatu variable (simbol =).

(9)

V. Tugas Praktikum

V.1 Struktur if … else if …

Menampilkan Huruf Mutu dari Nilai Ujian Listing Program

/* Program 2 - Menampilkan Huruf Mutu dari Nilai*/ #include<stdio.h>

main() {

int nilai;

printf("Masukkan nilai ujian : \n"); scanf("%d", &nilai);

if(nilai>=80 && nilai<=100) printf("Huruf Mutu : A"); else if(nilai>=68 && nilai<=79) printf("Huruf Mutu : B"); else if(nilai>=58 && nilai<=67) printf("Huruf Mutu : C"); else if(nilai>=45 && nilai<=57) printf("Huruf Mutu : D"); else if(nilai<=45) printf("Huruf Mutu : E");

return 0; }

Tampilan Program

Gambar 5.1 Tampilan program 2 – Menampilkan huruf mutu dari nilai ujian

Analisa Program

Program ini memberikan output yang sesuai yang diinginkan. Program menggunakan struktur else if. Variable yang dideklarasikan adalah nilai, yang akan diinput untuk menentukan huruf mutu dari nilai. Ketika nilai dimasukkan dan dibaca melalui sintaks scanf(), nilai akan diproses ke dalam perintah if.. else if.. Ketika kondisi nilai memenuhi salah satu kondisi if, maka statement dalam if akan dieksekusi yaitu berupa huruf mutu.

Modifikasi 1 – Memunculkan Pesan Error Listing Program

(10)

#include<stdio.h> main()

{

int nilai;

printf("Masukkan nilai ujian : \n"); scanf("%d", &nilai);

if(nilai>=80 && nilai<=100) printf("Huruf Mutu : A"); else if(nilai>=68 && nilai<=79) printf("Huruf Mutu : B"); else if(nilai>=58 && nilai<=67) printf("Huruf Mutu : C"); else if(nilai>=45 && nilai<=57) printf("Huruf Mutu : D"); else if(nilai>=0 && nilai<=45) printf("Huruf Mutu : E"); else printf("Nilai yang anda masukan salah");

return 0; }

Tampilan Program

Gambar 5.2 Pesan error ketika nilai diluar rentang 0 hingga 100

Analisa Program

Program ini memiliki rentang 0 sampai 100 karena ketika kondisi nilai tidak ada yang memenuhi maka akan dieksekusi perintah else di akhir berupa pesan kesalahan (else printf("Nilai yang anda masukan salah");).

Modifikasi 2 – Memberikan ketentuan tanda plus (+) dan minus (-) dalam

printf("Masukkan nilai ujian : \n"); scanf("%d", &nilai);

if(nilai>=80 && nilai<=100) { r=100-80;

a=(0.7*r)+80; b=(0.4*r)+80;

if(nilai>=a) printf("Huruf Mutu : A+");

(11)

else if(nilai>=68 && nilai<=79){ r=100-80;

a=(0.7*r)+68; b=(0.4*r)+68;

if(nilai>=a) printf("Huruf Mutu : B+");

else if (nilai<=b) printf("Huruf Mutu : B-"); else printf("Huruf Mutu : B"); }

else if(nilai>=58 && nilai<=67){ r=100-80;

a=(0.7*r)+58; b=(0.4*r)+58;

if(nilai>=a) printf("Huruf Mutu : C+");

else if (nilai<=b) printf("Huruf Mutu : C-"); else printf("Huruf Mutu : C"); }

else if(nilai>=45 && nilai<=57){ r=100-80;

a=(0.7*r)+45; b=(0.4*r)+45;

if(nilai>=a) printf("Huruf Mutu : D+");

else if (nilai<=b) printf("Huruf Mutu : D-"); else printf("Huruf Mutu : D"); }

else if(nilai>=0 && nilai<=45) { r=100-80;

a=(0.7*r)+0; b=(0.4*r)+0;

if(nilai>=a) printf("Huruf Mutu : E+");

else if (nilai<=b) printf("Huruf Mutu : E-"); else printf("Huruf Mutu : E"); }

else printf("Nilai yang anda masukan salah"); return 0;

}

Tampilan Program

Gambar 5.3 Modifikasi program 2 dengan menambah tanda + atau

-Analisa Program

Program diberikan inisialisai diantara rentang nilai dari tiap kasus dimana

(12)

V.2 Struktur switch… case… break

Mengkonversi Hururf Mutu Menjadi Angka Mutu

Listing Program #include<stdio.h> main()

{

char a; // a = huruf mutu

printf("Masukan Huruf Mutu : \n"); scanf("%c", &a);

switch(a) {

case 'A' : printf("Angka Mutu %c adalah 4", a); break;

case 'B' : printf("Angka Mutu %c adalah 3", a); break;

case 'C' : printf("Angka Mutu %c adalah 2", a); break;

case 'D' : printf("Angka Mutu %c adalah 1", a); break;

case 'E' : printf("Angka Mutu %c adalah 0", a); break;

default : printf("Angka yang anda masukkan salah");} return 0;

}

Tampilan Program

Gambar 5.4 Program mengkonkersi huruf mutu menjadi angka mutu

Analisa Program

Program menampilkan perintah untuk memasukan huruf mutu dengan sintaks printf(),dengan menginput huruf berupa karakter melalui scanf()

(13)

ke case lainnya karena dihentikan oleh perintah break. Namun apabila kondisi tidak bernilai benar (false) di semua case, maka statemen yang akan dieksekusi

adalah default, dengan output “Angka yang anda masukkan salah”.

VI. Tugas Akhir

1. Buatlah program C untuk menghitung jumlah hari dengan data masukan berupa tanggal, bulan, dan tahun. Luaran yang diharapkan adalah sebagai berikut

Masukkan tanggal pertama (tt bb thn) : 01 04 2007 Masukkan tanggal kedua (tt bb thn) : 01 03 2007 Jumlah hari adalah : 31 hari

Perhatikan pula perhitungan kabisat.

2. Buatlah program untuk menghitung IP (Indeks Prestasi) mahasiswa dengan data masukan berupa jumlah mata kuliah, SKS mata kuliah, serta huruf mutu untuk tiap mata kuliah. Keluaran yang diharapkan berupa nilai IP mahasiswa. Jangan lupa tampilkan pesan kesalahan apabila huruf mutu tidak berada dalam rentang A hingga E.

VI.1 Menghitung Jumlah Hari dari Dua Tanggal Listing Program

/*AP-2 Tugas Akhir 1 - Menghitung hari dari dua tanggal*/ #include <stdio.h>

int bulan2hari(int m, int y) { if (m==1) {m=0;} else if (m==2) {m=31;} else

if ((m==3) && (y%4==0)) {m=60;} else if ((m==3) && (y%4!=0)) {m=59;} else

if ((m==4) && (y%4==0)) {m=91;} else if ((m==4) && (y%4!=0)) {m=90;} else

if ((m==5) && (y%4==0)) {m=121;} else if ((m==5) && (y%4!=0)) {m=120;} else

if ((m==6) && (y%4==0)) {m=152;} else if ((m==6) && (y%4!=0)) {m=151;} else

if ((m==7) && (y%4==0)) {m=182;} else if ((m==7) && (y%4!=0)) {m=181;} else

if ((m==8) && (y%4==0)) {m=213;} else if ((m==8) && (y%4!=0)) {m=212;} else

(14)

if ((m==10) && (y%4==0)) {m=274;} else if ((m==10) && printf("Masukkan tanggal pertama (tt bb thn) : ");

scanf("%d %d %d", &d1,&m1,&y1);

printf("Masukkan tanggal kedua (tt bb thn) : "); scanf("%d %d %d", &d2,&m2,&y2);

m1=bulan2hari(m1,y1); m2=bulan2hari(m2,y2); s1=d1+m1+((y1-1)*365); s2=d2+m2+((y2-1)*365);

if(s1<s2) r=s2-s1; else r=s1-s2;

printf("Jumlah hari adalah : %d hari", r); //Output }

Tampilan Program

Gambar 5.5 Program menghitung selisih hari dari dua tanggal

Analisa Program

(15)

Output yang dihasilkan dengan perintah printf() yaitu tanggal dan jumlah hari memberikan tampilan yang benar.

VI.2 Menghitung IP (Indeks Prestasi) Mahasiswa Listing Program

/* AP-2 Tugas Akhir-2 Menghitung IP*/ #include<stdio.h>

printf("Masukkan jumlah mata kuliah : "); scanf("%d", &mk);

for(i=1; i<=mk; i++) {

dk=dk+1;

printf("Masukkan jumlah SKS mata kuliah ke-%d: ", dk); scanf("%f", &SKS);

printf("Masukkan huruf mutu mata kuliah ke-%d: ", dk); scanf("%s", &h);

if(angka>=1 && angka<=4)

printf("Jumlah IP=%.2f\n", total); else

{printf("Huruf mutu yang anda masukkan salah, silahkan ulangi!\n"); goto label ;}

}

(16)

Gambar 5.6 Program menghitung IP

Gambar 5.7 Pesan erro ketika huruf mutu yang diinput diluar rentang A sampai E

Analisa Program

Program mendeklarasikan tipe data integer, float, dan character. Tipe float dideklarasikan untuk angka karena pada pengoperasian IP dibutuhkan tipe float untuk menghasilkan IP berupa bilangan riil. Statement for dingunaka untuk mengulangi input data SKS dan huruf mutu berdasarkan jumlah mata kuliah yang diinput. Statement switch digunakan di dalam blok statemen for untuk pengecekan angka yang memiliki beberapa kondisi dari huruf mutu yang diinput. Dalam blok for juga dilakukan pengoperasian IP. Huruf mutu berada pada rentang A sampai E sehingga digunakan statement if else untuk kondisi tersebut. Apabila kondisi bernilai benar maka akan menghasilkan output berupa nilai IP, sedangkan apabila inputan huruf mutu bernilai salah maka yang akan dieksekusi adalah statemen pada else berupa pesan kesalahan.

VII. Kesimpulan

(17)

1. Statement if.. digunakan dalam pengkondisian dengan satu kasus, dimana akan terdapat dua kemungkinan dari kondisi tersebut, yaitu kondisi bernilai benar (true) atau kondisi bernilai salah (false), pada kondisi true maka program akan mengeksekusi statemen true, sedangkan ketika kondisi bernilai salah maka program tidak akan mengeksekusi dan akan langsung keluar dari pemrosesan. 2. Statement else digunakan pada satu pengkondisian untuk dua kasus, dimana pada kondisi bernilai benar akan ada statement yang dieksekusi, dan apabila pada kasus bernilai salah aka nada juga statement yang dieksekusi.

3. Statement else if digunakan untuk pengkondisian dengan banyak kemungkinan kasus (lebih dari dua). Sehingga pada beberapa kondisi akan menyebabkan beberapa kasus yang memungkinkan untuk dieksekusi.

(18)

V. Tugas Praktikum

VI.1. Menghitung Nilai Faktorial Listing Program

#include<stdio.h> main()

{

int i, bil, n;

printf("Masukkan bilangan : "); scanf("%d", &bil); n=1;

for (i=1; i<=bil ; i++) {

n=n*i; }

printf("Faktorial dari %d adalah %d", bil, n); }

Tampilan Program

Gambar 5.1 Program menghitung nilai factorial menggunakan struktur for

Analisa Program

Program menampilkan output yang benar. Program mendeklarasikan nilai bilangan sebagai integer, lalu dilakukan perintah memasukan bilangan dengan sintaks printf() dan menginput bilangan dengan sintaks scanf() yang dimasukan sebagai nilai variable bil. Dengan menggunakan struktur for, dimana di dalam blok for terdapat statement n=n*i. Pengeksekusian statemen tersebut akan berlangsung dari i=1 sampai i=9. Setiap I akan menghasilkan nilai n yang baru dan akan dimasukan untuk i yang selanjutnya sehingga pada akhir eksekusi akan didapat nilai factorial sesuai definisi matematisnya yakni 𝑛! = 1 𝑥 2 𝑥 3 𝑥 . . . 𝑥 𝑛.

V.2 Struktur while… dan do-while…

1. Modifikasi Program 1 – Menentukan Nilai Rata-rata dengan struktur while

(19)

#include<stdio.h> main()

{

int i, N, bil;

float jumlah=0, rata2; i=1;

printf("Masukkan jumlah bilangan : "); scanf("%d", &N); while (i<=N)

{

printf("Masukan bilangan ke %d: ", i); scanf("%d", &bil);

jumlah+=bil; i++;

}

rata2=jumlah/N;

printf("Nilai rata-rata adalah : %.2f \n", rata2); return 0;

}

Tampilan Program

Gambar 5.2 Program menghitung nilai rata-rata menggunakan struktur while

Analisa Program

(20)

memenuhi kondisi. Dengan pengoperasian rata2=jumlah/N dimana jumlah diperoleh dari struktur while maka dioperasikan atau dieksekusi dan dioutputkan nilai rata-rata dengan perintah printf() berupa nilai rata-rata dalam bilangan real 2 digit angka dibelakang koma.

2. Modifikasi Program 1 – Menentukan Nilai Rata-rata dengan struktur do-while

Listing Program

#include<stdio.h> main()

{

int i, N, bil;

float jumlah=0, rata2; i=1;

printf("Masukkan jumlah bilangan : "); scanf("%d", &N); do

{

printf("Masukan bilangan ke %d: ", i); scanf("%d", &bil);

jumlah+=bil; i++;

} while (i<=N); rata2=jumlah/N;

printf("Nilai rata-rata adalah : %.2f \n", rata2); return 0;

}

Tampilan program

Gambar 5.3 Program menentukan nilai rata-rata menggunakan struktur do-while

(21)

Gambar 5.5 Program dengan struktur while ketika i>N

Analisa Program

Program ini hampir sama dengan struktur while, namun yang membedakan adalah program akan terlebih dahulu mengeksekusi statemen di blok do yaitu inputan bilangan dan pengoperasian jumlah+=bil, dan baru ketika setelah eksekusi akan dicek nilai i apakah masih memenuhi kondisi di while atau tidak. Kasus akan berbeda apabila i diinisialisasikan lebih dari N, maka program akan tetap mengeksekusi statement didalam blok do-while seperti gambar 5.4 dan akan memberikan nilai bagi variable jumlah dan akan dioperasikan pada operasi rata2 walaupun tidak akan sesuai yang diinginkan. Sedangkan pada struktur while, statemen tidak akan dieksekusi dan output seperti gambar 5.5.

3. Modifikasi Program 2 – Menampilkan Deret Fibonacci dengan Struktur while

printf("Program Deter Fibonacci\n");

printf("Masukkan jumlah bilangan yang ingin ditampilkan : ");

scanf("%d", &n);

printf("Masukkan bilangan pertama : "); scanf("%d", &bil1);

printf("Masukkan bilangan ke dua : "); scanf("%d", &bil2);

(22)

i++; }

return 0;}

Tampilan Program

Gambar 5.6 Program Deret Fibonacci menggunakan struktur while

Analisa Program

Program ini menggunakan deklarasi integer untuk bilangan ke 1 dan 2, dan jumlah bilangan serta output deret bilangan. Sintaks printf() menampilkan tulisan Program Deret Fibonacci, perintah untuk memasukkan jumlah bilangan yang ditampikan, bilangan pertama dan kedua dan sintaks scanf() akan membaca inputan keyboard tersebut yang akan memberikan nilai bagi variable n, bil1, dan bil2. Dengan struktur while, dimana dikondisikan untuk i<=N akan dieksekusi statement berupa operasi aritmatik di dalam blok while, bilangan 3 diperoleh dari bil3=bil1+bil2, setelah itu bil1 akan diinisialkan sebagai bil2 dan bil2 akan diinisialkan sebagai bil3, dan bil3 diawal akan dioutputkan, ketika nilai i masih memenuhi kondisi maka akan dieksekusi lagi statement sampai kondisi tidak memenuhi. Perintah \t dalam sintaks printf("\tOutput : %d,%d", bil1, bil2); akan memberikan tab kepada tampilan sintaks tersebut.

4. Modifikasi Program 2 – Menampilkan Deret Fibonacci dengan struktur do-while

Listing Program

#include<stdio.h> main()

{

int n, i, bil1, bil2, bil3;

(23)

printf("Masukkan jumlah bilangan yang ingin ditampilkan : ");

scanf("%d", &n);

printf("Masukkan bilangan pertama : "); scanf("%d", &bil1);

printf("Masukkan bilangan ke dua : "); scanf("%d", &bil2);

printf("\tOutput : %d,%d", bil1, bil2); i=1;

Gambar 5.7 Program Deret Fibonacci menggunakan struktur do-while

Analisa Program

Program ini menghasilkan output yang sama dengan program yang menggunakan struktur while hanya dalam prosesnya program akan mengeksekusi terlebih dahulu statement dalam blok do-while selanjutnya mengecek kondisi di while(i<n-2) apakah masih memenuhi atau tidak. Perbedaan dengan struktur while akan terjadi apabila penginisialan diawal untuk i yang lebih dari n-2.

(24)

printf("Masukkan bilangan : "); scanf("%d", &bil);

printf("Faktorial dari %d adalah %d", bil, n); }

Tampilan Program

Gambar 5.8 Program menentukan nilai factorial menggunakan struktur while

Analisa Program

Program mendeklarasikan variable yang digunakan dengan integer. Sintaks printf() akan menampilkan perintah inputan bilangan dan scanf() akan membaca bilangan yang diinput dan akan menyimpan nilai inputan sebagai nilai variable bil. Dengan menggunakan while, program akan melakukan operasi matematis seseuai statement di dalam blok pengulangan yaitu n=n*1 yang berupa operasi perhitungan nilai factorial sampai kondisi i tidak memenuhi. Setelah pengulangan berhenti akan ditampilkan nilai factorial dengan sintaks printf() yang diambil dari variable n hasih pengulangan.

6. Modifikasi Program 3 – Menghitung Nilai Faktorial Mengggunakan Struktur do-while

printf("Masukkan bilangan : "); scanf("%d", &bil); do

{

n=n*i; i++;

(25)

printf("Faktorial dari %d adalah %d", bil, n); }

Tampilan Program

Gambar 5.9 Program menentukan nilai factorial menggunakan struktur do-while

Gambar 5.10 Program ketika i diinisialisasikan lebih dari bil (i=5, bil=3), statement akan dieksekusi pertama kali tanpa melakukan pengecekan kondisi terlebih dahulu

Analisa Program

Program menghasilkan output yang sama dengan menggunakan struktur while. Hanya saja program pertama kali akan mengeksekusi statement yang berada di blok do-while lalu mengecek kondisi di while(). Seperti program lain dengan menggunakan struktur do-while. Hasil akan berbeda apabila kondisi langsung tidak terpenuhi sementara program akan mengeksekusi terlebih dahulu, seperti gambar 5.10.

VI. Tugas Akhir

VI.1 Menghitung Nilai Permutasi dan Kombinasi Listing Program

#include<stdio.h> main()

{

int i, n, r, N, nr, R, P, C; printf("Masukkan nilai n : "); scanf("%d", &n);

printf("Masukkan nilai r : "); scanf("%d", &r);

if (n>=r) {

(26)

for (i=1; i<=n; i++) {

N=N*i; }

R=1;

for (i=1; i<=r; i++) {

R=R*i; }

nr=1;

for (i=1; i<=n-r; i++) {

nr=nr*i; }

P=N/nr; C=N/(R*nr);

printf("Nilai permutasi P(%d,%d) adalah %d\n", n, r, P);

printf("Nilai kombinasi C(%d,%d) adalah %d\n", n, r, C);

} else printf("Nilai n harus lebih besar atau sama dengan r (n>=r)");

}

Tampilan Program

Gambar 6.1 Program menghitung nilai permutasi dan kombinasi

Gambar 6.2 Program dengan nilai 𝑛 < 𝑟 akan ada pesan error

Analisa Program

(27)

inputan sebagai nilai variable n dan r. Struktur if digunakan untuk mengecek hubungan antara n dan r, karena pada permutasi dan kombinasi nilai n harus lebih dari atau sama dengan r. Sehingga untuk hubungan n dan r yang bernilai benar maka akan masuk ke statement if yang terdapat struktur pengulangan, dan apabila bernilai salah maka akan ditampilkan pesan seperti Gambar 6.2. Digunakan 3 struktur for untuk mencari nilai dari rumusan permutasi dan kombinasi 𝑃 = 𝑛!/(𝑛 − 𝑟)! 𝑑𝑎𝑛 𝐶 = 𝑛!/(𝑟! (𝑛 − 𝑟)!) yaitu factorial n, n-r, dan r. Statement yang digunakan bentuknya sama dengan statement mencari factorial pada program 3. Setelah struktur pengulangan diinisialkan P=N/nr; dan C=N/(R*nr); yang secara pengoperasian

sesuai dengan rumusan sebelumnya. Dengan menggunakan sintaks printf(“..”,

variable) ditampilkan nilai permutasi dan kombinasi dengan menampilkan nilai variable P dan C.

VI.2 Membuat Program dengan Output Membentuk Pola Gambar Listing Program if (j!=9) printf("%d",j); else printf("%d\n",j);}

} else if (i==9) {for (j=9; j>=1; j--) {printf("%d",j);}} else {printf("%d",i);

for (j=1; j<i-1; j++) printf(" "); printf("1");

for (j=1; j<=8-i; j++) printf(" "); printf("%d\n",10-i);} }

(28)

Tampilan Program

Gambar 6.3 Program Tugas Akhir 2

Analisa Program

Program menggunakan dua variable yang dideklarasikan integer (int) yaitu i dan j. Pada struktur program digunakan struktur pengulangan for dan struktur pemilihan if. struktur if digunakan untuk melakukan pengkondisian yang memerlukan eksekusi yang berbeda dari tiap nilai i. Pada statement pertama dengan struktur for (i=1; i<=9; i++)dan diteruskan dengan struktur if , dimana untuk baris 1 dan 9 akan menampilkan ∗∗∗∗∗∗∗∗∗∗ , sedangkan else mengeksekusi untuk i selain 1 dan 9 dengan output ∗ ∗. Begitu seterusnya untuk pola bintang pada sebelahnya berupa belah ketupat, yang menggunakan if else if untuk pengkondisian outpu yang sama. Pada pola terakhir berupa tampilan angka-angka. Variable j digunakan dan dengan statement yang dieksekusi berupa angka. Karena angka tersebut membentuk pola/deret maka digunakan pengulangan dengan penambahan nilai 1 (j++) atau pengurangan 1 (j--), seperti pada statement if (j!=9) printf("%d",j);else printf("%d\n",j);}. Penggunakan perintah \t

(29)

V. Tugas Praktikum

V.1 Menggunakan Fungsi dalam Librari C

Program Menampilkan deret table sin(x), cos(x), tan(x) Listing Program

for (i=1; i<=45; i++) printf("_"); printf("\n"); }

main() {

float x, rad; garis();

printf("SUDUT\t\tSIN\t COS\tTAN\n"); garis();

rad=3.14/180;

for (x=0; x<=360 ; x+=30) {

if(x==90 || x==270)

printf("%5.f%14.2f%13.2f%12s \n", x, sin(x*rad), cos(x*rad), "~" );

else printf("%5.f%14.2f%13.2f%12.2f \n", x, sin(x*rad), cos(x*rad), tan(x*rad));

if (x==30 || x==120 || x==210 || x==300)

printf("%5.f%14.2f%13.2f%12.2f\n", x+15, sin((x+15)*rad), cos((x+15)*rad), tan((x+15)*rad));

}

Tampilan Program

(30)

Analisa Program

Program meggunakan header file math.h (#include<math.h>) agar bias menggunakan fungsi matematika sin, cos, dan tan. Untuk menambahkan garis untuk table dibuat fungsi garis() dengan pajang hingga 45 karakter, disesuaikan dengan isi table. Fungsi garis() dideklarasikan sebelum fungsi main agar lebih mudah, walaupun fungsi ini berupa fungsi tanpa nilai balik (tanpa menghasilkan nilai). Dalam fungsi garis() digunakan bentuk pengulangan for. Dalam fungsi main, dideklarasikan tipe data float karena yang dibutuhkan adalah bentuk bilangan real. Diantara printf() untuk keterangan table sudut, sin, cos, dan tan, dipanggil fungsi garis() sehingga menampilkan garis seperti tampilan pada gambar. rad=3.14/180 diinisialisasikan karena fungsi yang digunakan yaitu dalam bentuk radian. Digunakan struktur for untuk mengulang nilai x dengan nilai ditambah 30 (x+=30) untuk sekali eksekusi statemen for. Dalam struktur for digunakan pengkondisian if karena pengoperasian beberapa sudut berbeda. %f digunakan karena tipe data berupa float dan %s digunakan untuk mengeprint simbol ~. Tampilan akhir berupa nilai sin cos tan untuk beberapa sudut (sudut istimewa dan kelipatannya).

V.2 Fungsi yang Menghasilkan Nilai Program Deret Fibonacci

Listing Program

#include<stdio.h>

float fibonacci(int a, int b) {

printf("Masukkan banyaknya bilangan yang akan ditampilkan : "); scanf("%d", &N);

printf("Masukkan bilangan pertama : "); scanf("%d", &bil1); printf("Masukkan bilangan kedua : "); scanf("%d", &bil2); printf("%d,%d,", bil1, bil2);

(31)

{

bil3=fibonacci(bil1,bil2); printf("%d,", bil3);

bil1=bil2; bil2=bil3; }

printf("\n"); return 0; }

Tampilan Program

Gambar 5.2 Program deret Fibonacci

Analisa Program

Program berjalan dengan baik dengan hasil yang benar. Digunakan fungsi Fibonacci untuk operasi penambahan bil1 dan bil2 yang akan dipanggil di fungsi main. Dalam fungsi main dideklarasikan semua variabel dalam bentuk bilangan bulat (integer). Sintaks print() digunakan untuk menampilkan perintah inputan nilai dan menampilkan hasil operasi. Sintaks scanf() digunakan untuk membaca inputan keyboard yang akan dimasukkan sebagai nilai variabel berdasarkan perintah inputan. Untuk pengoperasian digunakan struktur for yang mana di dalam blok for terdapat pemanggilan fungsi fibonacci(), sehingga ketika dipanggil fungsi tersebut akan dieksekusi/digunakan. Dengan struktur for yang mengeksekusi sebanyak N-2 kali maka didapat hasil deret yang diminta. Modifikasi ini lebih efisien dibanding program awal karena proses operasi untuk fibonacci dilakukan di fungsi khusus, dan di fungsi main() hanya tinggal memanggil fungsi fibonacci tersebut.

(32)

#include<stdio.h>

float fibonacci(int a, int b, int c) {

printf("Masukkan banyaknya bilangan yang akan ditampilkan : "); scanf("%d", &N);

printf("Masukkan bilangan pertama : "); scanf("%d", &bil1); printf("Masukkan bilangan kedua : "); scanf("%d", &bil2); printf("%d, %d", bil1, bil2);

fibonacci(bil1, bil2, N); printf("\n");

return 0; }

Tampilan Program

Gambar 5.3 Modifikasi program deret fibonacci Analisa Program

(33)

Program Menghitung Nilai Faktorial Listing Program

#include<stdio.h> int Faktorial (int N){

if (N==0){ return 1; } else {

return N*Faktorial(N-1); }

} main() {

int bil;

printf("Masukkan bilangan bulat yang akan dihitung : "); scanf("%d", &bil);

printf("Faktorial dari %d adalah %d", bil, Faktorial(bil)); return 0;

}

Tampilan Program

Gambar 5.4 Program menghitung nilai factorial

Analisa Program

Program menggunakan fungsi Faktorial (int N) dalam tipe integer dimana

menggunakan pengkondisian if, dan berupa fungsi rekursi karena terdapat pemanggilan fungsinya sendiri dalam fungsi tersebut (return N*Faktorial(N-1);). Dengan perintah return maka fungsi akan mengembalikan atau memberikan hasil nilai dari proses operasi pada fungsi tersebut.

VI. Tugas Akhir

1. Buatla program C untuk menghitung nilai permutasi dan kombinasi daro suatuu bilangan dengan menggunakan fungsi.

(34)

Rumus kombinasi : nCr = n!/(r!(n-r)!)

Program Menghitung Nilai Permutasi dan Kombinasi Listing Program

#include<stdio.h> int faktorial(int N) {

if (N==0) return 1;

else return N*faktorial(N-1); }

main() {

int i, n, r, C, P;

printf("Masukkan nilai n : "); scanf("%d", &n); printf("Masukkan nilai r : "); scanf("%d", &r); P=faktorial(n)/faktorial(n-r);

C=faktorial(n)/(faktorial(r)*faktorial(n-r));

printf("Nilai permutasi P(%d,%d) adalah %d\n", n,r,P); printf("Nilai kombinasi C(%d,%d) adalah %d", n,r,C); }

Tampilan Program

Gambar 6.1 Program menghitung nilai permutasi dan kombinasi

Analisa Program

Program menggunakan fungsi int faktorial(int N) untuk mencari nilai

(35)

Hasil tampilan berupa berupa proses input nilai dan nilai permutasi dan kombinasi yang benar.

2. Buatlah program untuk menghitung nilai 𝜋 dengan menggunakan deret bilangan seperti berikut menggunakan fungsi.

𝜋 = 4 −43 +45 −47 +49 −11 + ⋯4

Program Menghitung Nilai 𝝅 dengan Deret Leibniz Listing Program

#include<stdio.h>

double DeretL(double n) {

double i, pi=0, s=1; for(i=1; i<=(n*2); i+=2) {

pi=pi+s*(4/i); s=-s;

}

return pi; }

main() {

double n;

printf("Menghitung Nilai Pi dengan Deret Leibniz\n");

printf("\tpi = 4 - 4/3 + 4/5 - 4/7 + 4/9 - 4/11 + .... \n"); printf("\nMasukkan iterasi n : "); scanf("%lf", &n);

printf("Niilai pi = %.16lf", DeretL(n)); }

Tampilan Program

(36)

Analisa Program

Program menggunakan fungsi deret Leibniz (DeretL(n)) yang di dalamnya terdapat operasi matematis menghitung nilai 𝜋 menggunakan pengulangan for. fungsi dideklarasikan bertipe data double karena untuk nilai 𝜋 memerlukan digit dibelakang angka dan ketelitian yang lebih banyak. begitupun variabel n, dan parameter n dideklarasikan dalam double. Iterasi n dimasukkan secara bebas karena untuk n yang bernilai tak hingga (~) maka program akan lama mengeksekusi dan tidak tampil hasil eksekusinya. sehingga n, yang menentukan banyaknya deret yang dihitung, diperkirakan dimasukkan nilai yang relatif besar seperti pada gambar 6.2. Perintah %.16lf digunakan untuk mengoutputkan 16 digit angka dibelakang koma dari nilai yang diambil yang bertipe double. Hanya 16 digit angka dibelakang koma ketelitian yang bias digunakan dalam program ini. Pemanggilan fungsi DeretL(n) yaitu ketika dalam perintah printf() untuk menampilkan nilai 𝜋.

VII. Kesimpulan

Berdasarkan praktikum yang telah dilakukan, dapat disimpulkan beberapa hal sebagai berikut.

1. Fungsi adalah blok program yang berisi statement yang dapat dipanggil berulang ulang. Fungsi dalam bahasa C memiliki struktur umum:

tipe_data nama_fungsi(parameter1,…)

{

statement1;

}

(37)

V. Tugas Praktikum

V.1. Mengurutkan data secara naik (ascending) dan turun (descending) menggunakan metode bubble sort

Program Mengurutkan Data dengan Metode Bubble Sort Listing Program

#include<stdio.h>

int bubbles_asc(int a[], int N){ int i, j, temp;

int bubbles_desc(int a[], int N){ int i, j, temp;

printf("Masukkan banyak bilangan : "); scanf("%d", &N);

for(i=0; i<N; ++i){

printf("Bilangan ke %d : ", i+1); scanf("%d", &a[i]);

}

bubbles_asc(a, N); printf("Ascending : "); for (i=0; i<N; i++) {

printf("%d ", a[i]); }

bubbles_desc(a, N);

(38)

printf("%d ", a[i]); }

}

Tampilan Program

Gambar 5.1 Program mengurutkan data dengan bubble sort

Analisa Program

Program pengurutan bubble sort ini dibuat dengan membuat fungsi pengurutan untuk ascending dan descending yang terpisah di atas fungsi main(). Untuk ascending yaitu bubbles_asc(a ,N)dimana fungsi dan parameternya menggunakan tipe data

(39)

V.2. Menentukan nilai tengah (median) dari suatu kumpulan data Program Menentukan Median

Listing Program

#include<stdio.h>

int bubbles_asc(float a[], int n){ int i, j, temp;

printf("Masukkan banyak bilangan : "); scanf("%d", &n);

for(i=0; i<n; ++i){

printf("Bilangan ke %d : ", i+1); scanf("%f", &a[i]);

printf("Median adalah %.2f", med); }

Tampilan Program

(40)

Analisa Program

Program menginputkan data bilangan sama seperti program sebelumnya, dengan perintah bilangan ke-i, yang mana akan dimasukkan ke array a[i] yang dimulai dari 0 sampai n-1. Sebelum eksekusi median dilakukan pengurutan, biasanya menggunakan ascending sort. Dibuat fungis ascending sort (bubbles_asc(a, N). Untuk mencari median dibuat dua pengkondisian untuk data berjumlah ganjil dan genap. Jika n mod 2 = 0 (if n%2==0) maka data berjumlah genap sehingga akan dieksekusi statement dengan rumusan median data genap, dan apabila data tidak memenuhi kondisi diatas berarti data berjumlah ganjil. Nilai median (med) dideklarasikan float karean untuk median akan berupa bilangan real, khususnya data berjumlah genap. Sehingga a[] dideklarasi float jiga karena digunakan dalam operasi matematis median.

Modifikasi pada yang dibuat saat prosedur II.2 Listing Program

#include<stdio.h>

int bubbles_asc(float a[], int N){ int i, j, temp;

(41)

{

int N, i, j; float med, a[50];

printf("Masukkan banyak bilangan : "); scanf("%d", &N);

for(i=0; i<N; ++i){

printf("Bilangan ke %d : ", i+1); scanf("%f", &a[i]);

}

bubbles_asc(a, N); printf("Ascending : "); for (i=0; i<N; i++) {

printf(" %.2f", a[i]); }

bubbles_desc(a, N);

printf("\nDescending : "); for (i=0; i<N; i++){

printf(" %.2f", a[i]); }

bubbles_asc(a, N); if (N%2==0){

med=(a[N/2-1]+a[N/2])/2.0; } else med=a[N/2];

printf("\nMedian adalah %.2f", med); }

Tampilan Program

Gambar 5.3 Modifikasi program

Analisa Program

(42)

VI. Tugas Akhir

1. Buatlah program C untuk menghitung deret Fibonacci menggunakan array 1 dimensi.

Program Menghitung Deret Fibonacci Listing Program

#include<stdio.h> main()

{

int f[100], N, i, sum;

printf("Program Deret Fibonacci\n");

printf("Masukkan banyak bilangan yang ingin ditampilkan : "); scanf("%d", &N);

printf("Masukkan bilangan pertama : "); scanf("%d", &f[0]);

printf("Masukkan bilangan kedua : "); scanf("%d", &f[1]);

printf("Deret bilangan : %d, %d", f[0], f[1]); sum=f[0]+f[1];

for (i=2; i<=N-1; i++){ f[i]=f[i-1] + f[i-2]; printf(", %d", f[i]); sum+=f[i];

}

printf("\nJumlah deret bilangan = %d", sum); }

Tampilan Program

Gambar 6.1 Program menghitung deret fibonacci Analisa Program

(43)

selanjutnya dimulai dari f[2] sampai f[N-1], yang mana f[i]=f[i-1] + f[i-2]. Deret dijumlahkan dengan operasi sum+=f[i] dimana sebelumnya sum diinisialisasikan sebagai penambahan bilangan yang diinpukan.

2. Buatlah program C untuk menampilkan deret Pascal menggunakan array 1 dimensi.

Program Menampilkan Deret (Segitiga) Pascal Listing Program

#include<stdio.h> main()

{

int i, j, n;

typedef int Deret[100]; Deret d1, d2;

printf("Masukkan banyak baris (tinggi) : "); scanf("%d",&n);

(44)

Tampilan Program

Gambar 6.2 Tampilan program segitiga pascal

Analisa Program

Program ini menggunakan dua array satu dimensi dengan pendeklarasian Deret[100]. Agar terdapat spasi dari sisi kiri yang akan membentuk segitiga digunakan pengulangan yang mana dari jumlah n spasi dari atas sampai 1 spasi di baris terbawah dengan perintah pengulangan for(int h=p; h>=1; h--). Untuk mencari nilai untuk deret di bawah maka dijumlahkan antara bilangan di atas yang mengapitnya misan 4=1+3, yang dalam kode program dipakai d2[j]+=d1[j-1];. Pengkondisian dilakukan untuk deret di dalam akan dioperasikan secara metematis, sementara angka terluar akan bernilai 1 semua. Untuk baris berikutnya maka akan dipakai nilai d1 baru yaitu d1=d2, dan akan dieksekusi pada statement for (pengulangan) diatas sebelumnya. Hasil tampilan untuk 5 baris terlihat simetris, namun untuk baris > 5 akan dihasilkan tampilan segitiga yang tidak simetris karena angka yang tertampil sudah dua digit tiap deret.

VIII. Kesimpulan

Berdasarkan praktikum yang telah dilakukan dapat disimpulkan beberapa hal sebagai berikut.

(45)

minimum sort bekerja dengan membandingkan nilai satu elemen, dengan elemen lain, dan akan ada pertukaran ketika kondisi memenuhi. Satu elemen ini adalah letak dari nilai maksimum atau minimum itu sendiri. Nilai tengan dicari dengan mengurutkan data yang diinput secara acak lalu mencari nilai untuk data di urutan tengah sesuai kondisi banyaknya data bilangan apakah genap atau ganjil.

2. Array dapat digabungkan dengan fungsi dimana fungsi tersebut dapat berupa

(46)

V. Tugas Praktikum

V.1 Penjumlahan dan Pengurangan Matriks

Telah diselesaikan pada saat praktikum.

V.2 Transpose Matriks

Telah diselesaikan pada saat praktikum.

V.3 Perkalian Matriks

Program Menampilkan Hasil Perkalian Matriks Listing Program

#include<stdio.h>

int In(int b, int k, int I[15][15]){ for(int i=0; i<b; i++){

for(int j=0; j<k; j++){

printf("Elemen matriks [%d][%d] : ", i+1, j+1); scanf("%d", &I[i][j]);

} }

}

int Out(int b, int k, int Out[15][15]){ for(int i=0; i<b; i++){

int Kali(int b1, int k2, int b2, int a[15][15], int b[15][15], int M[15][15]){

typedef int Mat[15][15]; Mat A, B, C;

int b1, k1, b2, k2, r; Awal:

printf("Masukkan Matriks A\n");

printf("Jumlah baris : "); scanf("%d", &b1); printf("Jumlah kolom : "); scanf("%d", &k1); In(b1, k1, A);

UlangB:

printf("\nMasukkan Matriks B\n");

(47)

printf("\nMatriks A\n"); Out(b1, k1, A);

printf("Matriks B\n"); Out(b2, k2, B);

if(k1==b2){

printf("Hasil kali matriks A dan B adalah\n"); Kali(b1, k2, b2, A, B, C);

Out(b1, k2, C); } else {

printf("\nMatriks A dan B tidak dapat dikalikan\n"); printf("Jumlah kolom matriks A harus sama dengan jumlah baris matriks B. Silahkan ulangi!\n");

error:

printf("Pilih : 1. Mengulang dari awal; 2. Mengulang matriks B\n");

printf("Pilihan : "); scanf("%d", &r); if(r==1) goto Awal;

else if(r==2) goto UlangB; else {

printf("Pilihan salah\n"); goto error; }

} }

Tampilan Program

(48)

Gambar 5.2 Tampilan untuk syarat matriks tidak dipenuhi Analisa Program

Program ini menggunakan 3 fungsi tambahan selain fungsi main, yaitu fungsi untuk input elemen matriks (In), fungsi untuk menampilkan matriks (Out) dan fungsi untuk melakukan perkalian matriks (Kali). Dalam fungsi In dan Out digunakan pengulangan untuk baris ke-i dan kolom ke-j, dimana pada fungsi In akan memberikan nilai ke alamat memori array matriks. Untuk fungsi Out akan menampilkan array matriks dari proses fungsi In. Dalam fungsi Kali dilakukan 3 kali pengulangan yaitu untuk baris matriks hasil perkalian, kolom matriks, dan jumlah dari elemen perkalian untuk tiap satu elemen matriks hasil perkalian. Matriks A dan B diinputkan dengan jumlah baris dan kolom terpisah. Digunakan tipe data bentukan array M untuk menjadi tipe data array A, B, dan C dengan jumlah elemen 15. Untuk persyaratan operasi perkalian matriks digunakan pengkondisian if, ketika jumlah kolom matriks A sama dengan baris matriks B maka akan statemen yang akan dieksekusi adalah operasi perkalian di fungsi Kali. Apabila tidak memenuhi (bernilai salah) maka program memberikan tampilan kesalahan, dan meminta pilihan untuk mengulangi input array matriks seperti Gambar 5.2. Statement goto akan membuat proses eksekusi menuju label goto yang telah diletakan, yaitu di label Awal, UlangB dan error.

VI. Tugas Akhir

(49)

2. Buatlah program C untuk menguji sifat kesimetrisan dari suatu matriks bujursangkar. Suatu matriks baru dapat dikatakan simentris apabila memenuhi

𝑨 = 𝑨𝑻

3. Buatlah program C untuk menghitung nilai trace suatu matriks bujursangkar.

𝒕𝒓(𝑨) = ∑ 𝑨𝒊𝒊

VI.1 Program menghitung perkalian suatu matriks dengan suatu bilangan skalar

printf("Elemen matriks [%d][%d] : ", i+1, j+1); scanf("%d", &I[i][j]);

} }

}

int Out(int b, int k, int Out[15][15]){ for(int i=0; i<b; i++){

int KaliSkalar(int b, int k, int num, int M[15][15]){ for(int i=0; i<b; i++){

printf("Program perkalian matriks dengan bilangan skalar \n\n");

printf("Jumlah baris : "); scanf("%d", &b); printf("Jumlah kolom : "); scanf("%d", &k); In(b, k, M);

printf("Matriks M\n"); Out(b, k, M);

printf("Masukkan bilangan yang akan dikalikan: "); scanf("%d", &num);

printf("Perkalian matriks M dengan %d adalah\n", num); KaliSkalar(b, k, num, M);

Out(b, k, M);

(50)

Tampilan program

Gambar 6.1 Program perkalian matriks dengan bilangan skalar

Analisa program

Program menggunakan 3 fungsi tambahan yaitu fungis In, untuk memasukkan elemen array (matriks), fungsi Out untuk menampilkan matriks yang telah diberikan nilai ke alamat memori array matriks dan fungsi KaliSkalar untuk proses eksekusi perkalian matriks dengan skalar. Pada fungis KaliSkalar digunakan parameter b, k, num, dan M[10][10]. Dalam eksekusi dilakuakan pengulangan baris baris ke-i dan kolom ke-j lalu tiap elemen matriks tersebut dikalikan dengan bilangan yang diinputkan (num).

VI.2 Program menguji sifat kesimetrisan matriks bujursangkar Listing program

#include<stdio.h>

int In(int b, int k, int I[10][10]){ for(int i=0; i<b; i++){

for(int j=0; j<k; j++){

printf("Elemen matriks A[%d][%d] : ", i+1, j+1); scanf("%d", &I[i][j]);

} }

}

int Transpose(int b, int k, int M[10][10], int t[10][10]){ for(int i=0; i<b; i++){

for(int j=0; j<k; j++) t[j][i]=M[i][j]; }

}

(51)

for(int j=0; j<k; j++)

printf("%d\t", Out[i][j]); printf("\n");

} }

int CekSimetris(int b, int k, int M[10][10], int t[10][10]){ int i, j, h;

if (h==1) printf("\nMatriks A tidak simentris"); else printf("\nMatriks A simentris");

}

main(){

int b, k, A[10][10], T[10][10];

printf("Program Menguji Kesimetrisan Matriks Bujursangkar \n\n");

Ulang:

printf("Jumlah baris : "); scanf("%d", &b); printf("Jumlah kolom : "); scanf("%d", &k); if(b!=k){

printf("Matriks bukan merupakan matriks bujursangkar, silahkan ulangi\n\n"); CekSimetris(b, k, A, T); }

}

Tampilan program

(52)

Gambar 6.3 Tampilan ketika input salah

Analisa program

(53)

VI.3 Program menghitung nilai trace suatu matriks bujursangkar

printf("Elemen matriks A[%d][%d] : ", i+1, j+1); scanf("%d", &I[i][j]);

} }

}

int Out(int b, int k, int Out[10][10]){ for(int i=0; i<b; i++){

int Trace(int b, int k, int T[10][10]){ int t=0;

printf("Nilai trace matriks A adalah : %d", t); }

main(){

int b, k, A[10][10];

printf("Program Menghitung Nilai Trace Matriks Bujursangkar \n\n");

Ulang:

printf("Jumlah baris : "); scanf("%d", &b); printf("Jumlah kolom : "); scanf("%d", &k); if(b!=k){

printf("Matriks bukan merupakan matriks bujursangkar (tidak memiliki nilai trace), silahkan ulangi.\n\n");

(54)

Tampilan program

Gambar 6.4 Program menghitung nilai trace suatu matriks

Analisa program

Program menggunakan 3 fungsi tambahan, yaitu fungis In, untuk memasukkan elemen array (matriks), fungsi Out untuk menampilkan matriks yang telah diberikan nilai ke alamat memori array matriks dan fungsi Trace untuk menghitung nilai trace matriks. Nilai trace hanya terdapat pada matriks bujursangkar sehingga setelah input jumlah baris dan kolom dilakukan pengecekan apakah jumlah baris tidak sama dengan kolom, jika memenuhi maka akan dieksekusi statemen dari printf() berupa pesan kesalahan seperti pada Gambar 6.4. Jika tidak memenuhi maka akan dieksekusi ketiga fungsi diatas. Nilai trace terjadi saat letak baris sama dengan kolom. Sehingga dalam fungsi Trace akan dijumlahkan elemen tersebut.

VII. Kesimpulan

(55)

V. Tugas Praktikum V.1 Deklarasi Pointer

Telah diselesaikan pada saat praktikum.

V.2 Pointer ke pointer

Modifikasi – Penunjukan pointer→pointer→pointer→variabel Listing program

printf("Nilai dari x adalah %f\n", x); printf("Alamat dari x adalah %p\n\n", &x); printf("Nilai dari *P adalah %f\n", *P); printf("Alamat dari P adalah %p\n\n", &P); printf("Nilai dari **Q adalah %f\n", **Q); printf("Nilai dari *Q adalah %p\n", *Q); printf("ALamat dari Q adalah %p\n\n", &Q); printf("Nilai dari ***R adalah %f\n", ***R); printf("Nilai dari **R adalah %p\n", **R); printf("Nilai dari *R adalah %p\n", *R);

printf("Alamat dari ***R adalah %p\n", &***R); printf("Alamat dari **R adalah %p\n", &**R); printf("Alamat dari *R adalah %p\n", &*R); printf("Alamat dari R adalah %p\n", &R); return 0;

}

Tampilan Program

Gambar 5.1 Tampilan modifikasi program Analisa program

(56)

untuk membaca data float dan tanda %p untuk membaca pointer. Untuk ***R digunakan %f karena penunjukan berarti sampai ke variabel x, dan untuk **R dan *R digunakan %p karena penunjukan sampai ke pointer Q dan P yang akan menghasilkan nilai berupa alamat pointer Q dan P.

V.3 Pointer dan fungsi

Program Menghitung Luas Persegi Listing program

/* Program 3 - menghitung luas persegi */ #include<stdio.h>

/* deklarasi fungsi */ void luaspersegi(int *);

main() {

int sisi;

printf("Input panjang sisi persegi : "); scanf("%d", &sisi); luaspersegi(&sisi);

printf("Luas persegi adalah %d \n", sisi); return 0;

}

void luaspersegi(int *ptr_sisi) {

*ptr_sisi = *ptr_sisi * *ptr_sisi; }

Tampilan Program

Gambar 5.2 Program menghitung luas persegi dengan pointer

Analisa Program

(57)

Program Menghitung Volume Kubus Listing program

#include<stdio.h>

void volumekubus(int *);

main(){

int sisi;

printf("Input panjang sisi kubus : "); scanf("%d", &sisi); volumekubus(&sisi);

printf("Volume kubus adalah %d \n", sisi); return 0;

}

void volumekubus(int *ptr_sisi){

*ptr_sisi = *ptr_sisi * *ptr_sisi * *ptr_sisi; }

Tampilan program

Gambar 5.3 Program menghitung volume kubus

Analisa Program

Program menggunakan operasi perkalian pada fungsi volume kubus sesuai rumusan 𝑉 = 𝑠. 𝑠. 𝑠 dimana ada tiga pointer yang dikalikan. Selain menggunakan tipe data void fungsi tersebut dapat berupa tipe data int karena data yang dipakai bertipe integer (bilangan bulat).

Program Deret Fibonacci Listing program

#include<stdio.h>

int fibonacci(int *a, int *b){ return (*a+*b);

}

main(){

int i, N, bil1, bil2, bil3;

printf("Banyak bilangan yang akan ditampilkan : "); scanf("%d", &N);

(58)

printf("Bilangan kedua : "); scanf("%d", &bil2);

printf("\nDeret Fibonacci : \n"); printf("%d, %d", bil1, bil2); for(i=1; i<=N-2; i++){

bil3 = fibonacci(&bil1, &bil2); printf(", %d", bil3);

bil1 = bil2;

Gambar 5.4 Program menghitung deret fibonacci

Analisa program

Program mengkombilasikan pointer dengan fungsi dimana dua parameter dari fungsi tersebut menjadi pointer. Fungsi di deklarasikan sebagai data integer karena pemakaian bilangan pada pengoperasian berupa bilangan bulat. Dalam pemanggilan fungsi digunakan tanda ampersand (&). Program dapat berjalan dengan baik.

V.4 Pointer, fungsi dan array

Program Mengurutkan Data dengan Metode Bubble Sort Secara Ascending Listing program

/* Program 4- Aplikasi pointer pada fungsi dan array */ #include<stdio.h>

#define n 100

void bubblesort(int *, int); void swap(int *, int *);

main() {

(59)

/* input banyak bilangan */

printf("Masukkan banyak bilangan (Maksimum 20) : "); scanf("%d", &N);

for(i=0; i<N; i++) {

printf("Input bilangan ke %d : ", i+1); scanf("%d", &bil[i]);

}

printf("Bilangan sebelum diurutkan \n"); for(i=0; i<N; i++)

printf("%d\n", bil[i]); bubblesort(bil, N);

printf("Bilangan sesudah diurutkan \n"); for(i=0; i<N; ++i)

printf("%d\n", bil[i]); return 0;

}

void bubblesort(int *data, int size) {

int j, k;

for(j=1; j<=size-1; j++) for(k=0; k<=size-2; k++) if (data[k]>data[k+1]) swap(&data[k], &data[k+1]); }

void swap(int *ptr_data1, int *ptr_data2) {

int temp;

temp = *ptr_data1;

*ptr_data1 = *ptr_data2; *ptr_data2 = temp;

}

Tampilan program

(60)

Analisa program

Program menggunakan dua fungsi tambahan yaitu fungsi bubblesort untuk mengecek hubungan antar dua elemen dan fungsi swap untuk menukarkan (swap) dua elemen apabila memenuhi pengkondisian fungsi bubblesort. Array 1 dimensi dijadika masukkan dalam pemanggilan fungsi swap dengan menambahkan tanda ampersand di arraynya. Pada bubblesort dan swap dijadikan pointer ebagai parameternya. Pengoperasian pada fungsi swap melibatkan pointer yang dioperasikan secara assigment. Dalam fungsi bubblesort apabila elemen k lebih besar dari elemen k+1 maka akan dieksekusi fungsi swap. Fungsi dideklarasikan void sehingga dapat dipakai untuk tipe data yang lebih beragam.

Program Mengurutkan Data dengan Metode Bubble Sort Secara Descending Listing program

#include<stdio.h> #define n 100

void bubblesort(int *, int); void swap(int *, int *);

main(){

/* deklarasi variabel*/ int i, j, N, bil[n];

/* input banyak bilangan */

printf("Masukkan banyak bilangan (Maksimum 20) : "); scanf("%d", &N);

for(i=0; i<N; i++){

printf("Input bilangan ke %d : ", i+1); scanf("%d", &bil[i]);

}

printf("Bilangan sebelum diurutkan \n"); for(i=0; i<N; i++)

printf("%d\n", bil[i]); bubblesort(bil, N);

printf("Bilangan sesudah diurutkan \n"); for(i=0; i<N; ++i)

printf("%d\n", bil[i]); return 0;

}

void bubblesort(int *data, int size){ int j, k;

(61)

void swap(int *ptr_data1, int *ptr_data2){ int temp;

temp = *ptr_data1;

*ptr_data1 = *ptr_data2; *ptr_data2 = temp;

}

Tampilan program

Gambar 5.6 Program Mengurutkan Data dengan Metode Bubble Sort Secara Descending

Analisa program

Program ini hampir sama dengan program bubblesort ascending hanya saja pada descending fungsi swap akan dieksekusi apabila data[k]<data[k+1], sehingga akan diurutkan data dari nilai terbesar ke nilai terkecil.

VI. Tugas Akhir

VI.1 Program Perkalian Skalar Matriks Listing program

#include<stdio.h>

int In(int *b, int *k, int I[15][15]){ for(int i=0; i<*b; i++){

for(int j=0; j<*k; j++){

printf("Elemen matriks [%d][%d] : ", i+1, j+1); scanf("%d", &I[i][j]);

} }

}

int Out(int *b, int *k, int Out[15][15]){ for(int i=0; i<*b; i++){

for(int j=0; j<*k; j++)

(62)

printf("\n"); }

}

int KaliSkalar(int *b, int *k, int *num, int M[15][15]){ for(int i=0; i<*b; i++){

for(int j=0; j<*k; j++) M[i][j]=*num*M[i][j]; }

}

main(){

int M[15][15], b, k, num;

printf("Program perkalian matriks dengan bilangan skalar \n\n");

printf("Jumlah baris : "); scanf("%d", &b); printf("Jumlah kolom : "); scanf("%d", &k); In(&b, &k, M);

printf("Matriks M\n"); Out(&b, &k, M);

printf("Masukkan bilangan yang akan dikalikan: "); scanf("%d", &num);

printf("Perkalian matriks M dengan %d adalah\n", num); KaliSkalar(&b, &k, &num, M);

Out(&b, &k, M);

}

Tampilan program

Gambar 6.1 Program perkalian skalar matriks

Analisa program

(63)

parameter b, k, num, dan M[10][10]. Dalam eksekusi dilakuakan pengulangan baris baris ke-i dan kolom ke-j lalu tiap elemen matriks tersebut dikalikan dengan bilangan yang diinputkan (num). Pada ketiga fungsi tersebut digunakan pointer di parameter yang mana pointer tersebut adalah baris, kolom dan number (b, k, dan num) dimana pada saat pemanggilan digunakan ampersan (&). Pada program ini parameter array 2 dimensi tidak bisa langsung dijadikan pointer seperti b dan k karena saat dilakukan hal itu terjadi error dimana variabel di pemanggilan fungsi tidak dapat dikonversi ke fungsi.

VI.2 Menguji Kesimetrisan Matriks Bujur Sangkar Listing program

#include<stdio.h>

int In(int *b, int *k, int I[10][10]){ for(int i=0; i<*b; i++){

for(int j=0; j<*k; j++){

printf("Elemen matriks A[%d][%d] : ", i+1, j+1); scanf("%d", &I[i][j]);

} }

}

int Transpose(int *b, int *k, int M[10][10], int t[10][10]){ for(int i=0; i<*b; i++){

for(int j=0; j<*k; j++) t[j][i]=M[i][j]; }

}

int Out(int *b, int *k, int Out[10][10]){ for(int i=0; i<*b; i++){

int CekSimetris(int *b, int *k, int M[10][10], int t[10][10]){ int i, j, h;

if (h==1) printf("\nMatriks A tidak simentris"); else printf("\nMatriks A simentris");

}

(64)

int b, k, A[10][10], T[10][10];

printf("Program Menguji kesimetrisan Matriks bujursangkar \n\n");

Ulang:

printf("Jumlah baris : "); scanf("%d", &b); printf("Jumlah kolom : "); scanf("%d", &k); if(b!=k){

printf("Matriks bukan merupakan matriks bujursangkar, silahkan ulangi!\n\n");

goto Ulang; } else {

In(&b, &k, A);

printf("Matriks A\n"); Out(&b, &k, A);

Transpose(&b, &k, A, T); CekSimetris(&b, &k, A, T); }

}

Tampilan program

Gambar 6.2 Program menguji kesimetrisan matriks bujur sangkar

Analisa program

(65)

(b, k) dimana pada saat pemanggilan digunakan ampersan (&). Pada program ini parameter array 2 dimensi tidak bisa langsung dijadikan pointer seperti b dan k karena saat dilakukan hal itu terjadi error dimana variabel di pemanggilan fungsi tidak dapat dikonversi ke fungsi.

VI.3 Menghitung Nilai Trace Matriks Bujur Sangkar Lisitng program

#include<stdio.h>

int In(int *b, int *k, int I[10][10]){ for(int i=0; i<*b; i++){

for(int j=0; j<*k; j++){

printf("Elemen matriks A[%d][%d] : ", i+1, j+1); scanf("%d", &I[i][j]);

} }

}

int Out(int *b, int *k, int Out[10][10]){ for(int i=0; i<*b; i++){

int Trace(int *b, int *k, int T[10][10]){ int t=0;

printf("Nilai trace matriks A adalah : %d", t); }

main(){

int b, k, A[10][10];

printf("Program Menghitung Nilai Trace Matriks Bujursangkar \n\n");

Ulang:

printf("Jumlah baris : "); scanf("%d", &b); printf("Jumlah kolom : "); scanf("%d", &k); if(b!=k){

printf("Matriks bukan merupakan matriks bujursangkar, silahkan ulangi!\n\n");

goto Ulang; } else {

In(&b, &k, A);

printf("Matriks A\n"); Out(&b, &k, A);

(66)

}

Tampilan progam

Gambar 6.3 Program menghitung nilai trace matriks bujur sangkar

Analisa program

Program menggunakan 3 fungsi tambahan, yaitu fungis In, untuk memasukkan elemen array (matriks), fungsi Out untuk menampilkan matriks yang telah diberikan nilai ke alamat memori array matriks dan fungsi Trace untuk menghitung nilai trace matriks. Nilai trace hanya terdapat pada matriks bujursangkar sehingga setelah input jumlah baris dan kolom dilakukan pengecekan apakah jumlah baris tidak sama dengan kolom. Pada ketiga fungsi tersebut digunakan pointer di parameter yang mana pointer tersebut adalah baris dan kolom (b, k) dimana pada saat pemanggilan digunakan ampersan (&). Pada program ini parameter array 2 dimensi tidak bisa langsung dijadikan pointer seperti b dan k karena saat dilakukan hal itu terjadi error dimana variabel di pemanggilan fungsi tidak dapat dikonversi ke fungsi.

VII. Kesimpulan

Berdasarkan praktikum yang telah dilakukan dapat disimpulkan beberapa hal sebagai berikut.

(67)

tipe_data *nama_pointer;

Pointer dapat diubah ubah jumlah datanya selama proses berlangsung dan dapat didealokasikan apabila tidak digunakan lagi.

(68)

V. Tugas Praktikum V.1 Pembacaan file

Telah diselesaikan pada saat praktikum.

V.2 Penulisan file

Program penulisan file berupa matriks Listing program

printf("Input jumlah baris : "); scanf("%d", &m); printf("Input jumlah kolom : "); scanf("%d", &n); for (i=0; i<m; i++){

for (j=0; j<n; j++){

printf("Masukkan elemen matriks A[%d][%d] : ", i+1, j+1);

fprintf(B, "%d", A[i][j]); }

(69)

Analisa program

Program ini menginputkan elemen matriks dari keyboard dan menyimpannya ke sebuah file. Pada deklarasi di listing program yang terdapat pada modul, tidak ada pemesanan memori untuk jumlah elemen array. Seharusnya Jumlah maksimum elemen array harus dimasukan atau jumlah memori yang di pesan harus diisi. Inputan yang dilakukan seperti pada Gambar 5.1 akan disimpan ke sebuah file txt dengan fungsi fprintf() yang bernama sesuai yang ditulis yaitu Matriks.txt yang dibuat dengan fungsi sprintf(). File ini akan dibuat di direktori yang sama dengan program. Pada saat menutup file dalam modul ditulis fclose(fp) yang seharusnya diganti menjadi fclose(B) karena variabel yang menjadi pointer untuk menunjuk file adalah B bukan fp.

Modifikasi 1 – Operasi penjumlahan dan pengurangan matriks dengan inputan dari keyboard

Listing program

printf("Masukan Matriks A\n");

printf("Input jumlah baris : "); scanf("%d", &m1); printf("Input jumlah kolom : "); scanf("%d", &n1); In(m1, n1, A);

sprintf(namafile, "Matriks1.txt"); P=fopen(namafile, "w");

fprintf(P, "Matriks A\n"); for (i=0; i<m1; i++){

for (j=0; j<n1; j++){

fprintf(P, "%d\t", A[i][j]); }

fprintf(P, "\n"); }

printf("\nMasukan Matriks B\n");

Gambar

Gambar 5.1 Tampilan program 2 – Menampilkan huruf mutu dari nilai ujian
Gambar 5.2 Pesan error ketika nilai diluar rentang 0 hingga 100
Gambar 5.3 Modifikasi program 2 dengan menambah tanda + atau -
Gambar 5.5 Program menghitung selisih hari dari dua tanggal
+7

Referensi

Dokumen terkait

 Menyiapkan sumber daya manusia, sarana, prasarana, alat, bahan, fasilitas dan sistem informasi yang mendukung pelayanan sebagai rumah sakit rujukan regional sesuai standar;

Berikut ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally: Notasi blok bersifat perintah Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya

Termasuk dalam pendapatan ini yaitu jasa yang diberikan oleh anggota rumah atau orang lain untuk kepentingan rumah tangga yang dapat dinilai dengan uang.. Pendapatan yang

EDGE (Enhanced Data rate GSM Evolution) merupakan salah satu standard untuk wireless data yang diimplementasikan pada jaringan selular GSM diperkenalkan pertama

Dari hasil pada Tabel 6 terlihat per- bandingan nilai rata-rata prosentase kese- luruhan untuk tiap kata pada masing-masing pengujian dengan jumlah data standar yang

Pengaruh jumlah laju alir fase air dan fase organik pacta stripping uranium proses purex siklus 1 menggunakan pelarut asam nitrat encer (0,025 N) :;~cara kontinyu, untuk

Tanaman tebu dapat tumbuh dengan baik didaerah dengan curah hujan.. berkisar antara 1.000 – 1.300 mm per tahun dengan sekurang-kurangnya

Pelatihan ketangguhan yang dimaksud dalam penelitian merupakan kegiatan pelatihan untuk mereduksi burnout yang dialami oleh mahasiswa, dengan meningkatkan kemampuan