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.
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
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)
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
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
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");
}
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.
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 =).
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
#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+");
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
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()
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
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
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 ;}
}
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
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.
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
#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
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
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);
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;
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.
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++;
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) {
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
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);} }
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
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
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);
{
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.
#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
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.
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
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
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;
…
}
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);
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
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
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;
{
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
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
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);
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.
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
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");
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
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
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);
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]; }
}
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
Gambar 6.3 Tampilan ketika input salah
Analisa program
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");
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
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
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
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);
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() {
/* 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
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;
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++)
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
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");
}
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
(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);
}
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.
tipe_data *nama_pointer;
Pointer dapat diubah ubah jumlah datanya selama proses berlangsung dan dapat didealokasikan apabila tidak digunakan lagi.
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]); }
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");