buku tutorial pemprograman c
TRANSCRIPT
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page i “)
Kata Pengantar
Puji syukur kami panjatkan kepada Allah SWT yang mana dengan rahmat dan
hidayahnya kami dapat menyelesaikan buku yang berjudul “Tutorial Pemrogaman C”. Buku ini
kami buat dalam rangka menyelesaikan tugas akhir praktikum konsep pemrogaman di semester
satu prodi diploma 3 teknik informatika Politeknik Elektronika Negeri Surabaya. Buku ini
merupakan dokumentasi dari praktikum konsep pemrgaman yang telah kami ikuti selama satu
semester.
Tujuan lain dibuatnya buku ini adalah agar dapat digunakan sebagai acuan praktikum
konsep pemrogaman di tahun ajaran berikutnya. Di dalam buku ini tersusun materi pemrogaman
dasar C secara terurut mulai dari pengenalan hingga materi yang cukup rumit. Didalamnya juga
terangkum teori singkat, contoh-contoh kasus, code pengerjaan atau penyelesaian kasus dan juga
tampilan dari hasil keluarannya.
Kami harapkan dengan adanya buku ini dapat membantu mahasiswa selanjutnya dalam
menghadapai perkuliahan praktikum konsep permogaran. Kami yakin dalam penyusunan buku
ini masih banyak kekurangan dan kesalahan untuk itu kritik dan saran yang membangun kami
harapkan untuk penyempurnaan buku ini.
Surabaya, 20 Januari 2013
ttd
Tim Penyusun
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page ii “)
Tim Penyusun
Tim Utama
Riza Budi Prasetya (7412030002)
Fajar Teguh Kurniawan (7412030006)
Abdurachman Rizal Bachmid (7412030007)
Zulfan Fathoni (7412030026)
Dwi Puteri Hidta Yunia (7412030028)
Desain Cover
Vizzca Indra Pratama
Editing
Riza Budi Prasetya (7412030002)
Terima Kasih Kepada
Jauari Akhmad
(Dosen Pengampu Praktikum Konsep Pemorgaman)
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page iii “)
Daftar Isi
Kata Pengantar ................................................................................................................................. i
Tim Penyusun ................................................................................................................................. ii
Daftar Isi ........................................................................................................................................ iii
Bab 1 PENGANTAR KONSEP PEMROGRAMAN ..................................................................... 1
A. TUJUAN .......................................................................................................................... 1
B. DASAR TEORI ............................................................................................................... 1
C. PERCOBAAN ................................................................................................................. 4
Bab 2 PENGENALAN BAHASA C ............................................................................................ 10
A. TUJUAN ........................................................................................................................ 10
B. DASAR TEORI ............................................................................................................. 10
C. PERCOBAAN ............................................................................................................... 11
Bab 3 TIPE DATA DAN OPERASI I/O ....................................................................................... 18
A. TUJUAN ........................................................................................................................ 18
B. DASAR TEORI ............................................................................................................. 18
C. PERCOBAAN ............................................................................................................... 19
Bab 4 PENGAMBILAN KEPUTUSAN ...................................................................................... 25
A. TUJUAN ........................................................................................................................ 25
B. DASAR TEORI ............................................................................................................. 25
C. PERCOBAAN ............................................................................................................... 27
Bab 5 PERULANGAN ................................................................................................................. 43
A. TUJUAN ........................................................................................................................ 43
B. DASAR TEORI ............................................................................................................. 43
C. PERCOBAAN ............................................................................................................... 44
Bab 6 FUNGSI.............................................................................................................................. 64
A. TUJUAN ........................................................................................................................ 64
B. DASAR TEORI ............................................................................................................. 64
C. PERCOBAAN ............................................................................................................... 64
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page iv “)
Bab 7 ARRAY ............................................................................................................................... 82
A. TUJUAN ........................................................................................................................ 82
B. DASAR TEORI ............................................................................................................. 82
C. PERCOBAAN ............................................................................................................... 83
Bab 8 STRING.............................................................................................................................. 95
A. TUJUAN ........................................................................................................................ 95
B. DASAR TEORI ............................................................................................................. 95
C. PERCOBAAN ............................................................................................................... 96
Bab 9 POINTER ......................................................................................................................... 106
A. TUJUAN ...................................................................................................................... 106
B. DASAR TEORI ........................................................................................................... 106
C. PERCOBAAN ............................................................................................................. 108
Bab 10 STRUCT ......................................................................................................................... 118
A. TUJUAN ...................................................................................................................... 118
B. DASAR TEORI ........................................................................................................... 118
C. PERCOBAAN ............................................................................................................. 119
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 1 “)
Bab 1 PENGANTAR KONSEP
PEMROGRAMAN
A. TUJUAN
B. DASAR TEORI
Beberapa langkah dalam proses pembuatan suatu program atau software :
1. Mendefinisikan masalah dan menganalisanya
Langkah awal yang harus dilakukan adalah
mengidentifikasikan masalah antara lain tujuan
dari pembuatan program, parameter-parameter
yang digunakan, fasilitas apa saja yang akan
disediakan oleh program. Kemudian
menentukan metode atau algoritma apa yang
akan diterapkan untuk menyelesaikan
masalah tersebut dan terakhir menentukan
bahasa program yang digunakan untuk
pembuatan program.
2. Merealisasikan dengan langkah-langkah berikut :
1. Mampu memahami
2. Mendesain penyelesaian persoalan ke dalam
3. Menotasikan algoritma yang sudah dibuat menggunakan notasi
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 2 “)
Algoritma
Algoritma adalah urutan langkah-langkah logika yang menyatakan suatu tugas
dalam menyelesaikan suatu masalah atau problem.
Contoh : Buat algoritma untuk menentukan apakah suatu bilangan merupakan
bilangan ganjil atau bilangan genap.
Algoritmanya :
1. Masukkan sebuah bilangan sembarang
2. Bagi bilangan tersebut dengan bilangan 2
3. Hitung sisa hasil bagi pada langkah 2.
4. Bila sisa hasil bagi sama dengan 0 maka bilangan itu adalah bilangan genap
tetapi bila sisa hasil bagi sama dengan 1 maka bilangan itu adalah bilangan
ganjil.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 3 “)
Dari contoh algoritma di atas tentang menentukan apakah suatu bilangan adalah
bilangan ganjil atau bilangan genap, flowchart dari program adalah sebagai
berikut :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 4 “)
C. PERCOBAAN
1. Menjumlahkan 2 buah bilangan dan mencetak hasilnya.
Algoritma:
FlowChart:
a. Start
b. Masukkan 2 bilangan
c. Hitung hasil penjumlahan 2 bilangan tersebut
d. Cetak hasil dari proses c
e. end
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 5 “)
2. Mengalikan 2 buah bilangan dan mencetak hasilnya
Algoritma:
FlowChart:
3. Memberikan opsi menjumlahkan dan mengalikan 2 buah bilangan dan menampilkan
hasilnya
a. Start
b. Masukkan 2 bilangan
c. Hitung hasil perkalian 2 bilangan tersebut
d. Cetak hasil dari proses c
e. end
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 6 “)
Algoritma:
FlowChart:
4. Menghitung Luas Lingkaran dan menampilkan hasilnya
Algoritma:
FlowChart:
a. Start
b. Masukkan 2 bilangan
c. Tentukan operasi (penjumlahan / perkalian)
d. Jika operasi penjumlahan hitung hasil penjumlahan 2 bilangan jika tidak hitung
hasil perkalian 2 bilangan.
e. Cetak hasil dari proses d
f. end
a. Start
b. Masukkan jari-jari lingkaran
c. Luas = 3.14 * jari-jari * jari-jari
d. Cetak Luas dari proses c
e. end
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 7 “)
5. Mengecek bilangan di antara 2 bilangan masukan, apakah sama ataukah lebih besar
salah satunya, dan tampilkan hasilnya
Algoritma:
FlowChart:
a. Start
b. Masukkan 2 bilangan
c. Jika bilangan 1 sama dengan bilangan 2 maka cetak “2 Bilangan sama” jika
billangan 1 lebih besar dari bilangan 2 maka cetak “Bilangan 1 lebih besar dari
bilangan 2” jika tidak maka cetak “Bilangan 2 lebih besar dari bilangan 1”
d. end
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 8 “)
6. Menghitung sigma (akumulasi) dari bilangan 1 sampai dengan n, dan menampilkan
hasilnya
Algoritma:
FlowChart:
a. Start
b. Deklarasikan n, i, hasil = 0
c. Masukkan n
d. Loop i dari 1 sampai n
Hasil = hasil + i
e. Cetal hasil
f. end
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 9 “)
Kesimpulan :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 10 “)
Bab 2 PENGENALAN BAHASA C
A. TUJUAN
B. DASAR TEORI
Akar dari bahasa C adalah bahasa BCPL yang dikembangkan oleh Martin
Richards pada tahun 1967. Bahasa ini memberikan ide kepada Ken Thompson yang
kemudian mengembangkan bahasa yang disebut dengan B pada tahun 1970.
Perkembangan selanjutnya dari bahasa B adalah bahasa C oleh Dennis Ritchie sekitar
tahun 1970-an di Bell Telephone Laboratories Inc. (sekarang adalah AT&T Bell
Laboratories). Bahasa C pertama kali digunakan pada komputer Digital Equipment
Corporation PDP-11 yang menggunakan sistem operasi UNIX.
Standar bahasa C yang asli adalah standar dari UNIX. Sistem operasi, kompiler C
dan seluruh program aplikasi UNIX yang esensial ditulis dalam bahasa C. Kepopuleran
bahasa C membuat versi-versi dari bahasa ini banyak dibuat untuk komputer mikro.
Untuk membuat versi-versi tersebut menjadi standar, ANSI (American National
Standards Institute) membentuk suatu komite (ANSI committee X3J11) pada tahun 1983 yang
kemudian menetapkan standar ANSI untuk bahasa C. Standar ANSI ini didasarkan kepada
standar UNIX yang diperluas.
Pengenalan Fungsi-Fungsi Dasar
a. Fungsi main()
Fungsi main() harus ada pada program, sebab fungsi inilah yang menjadi titik awal dan
titik akhir eksekusi program.
b. Fungsi printf().
Fungsi printf() merupakan fungsi yang umum dipakai untuk menampilkan suatu
keluaran pada layar peraga. Untuk menampilkan tulisan
Selamat belajar bahasa C
1. Mengenal sintaks dan fungsi-fungsi dasar dalam
bahasa
2. Mampu membuat flowchart untuk algoritma untuk
memecahkan suatu selanjutnya
mengimplementasikannya dalam bahasa
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 11 “)
misalnya, pernyataan yang diperlukan berupa:
printf(“Selamat belajar bahasa C”);
Dalam bentuk yang lebih umum, format printf()
printf(“string kontrol”, daftar argumen);
C. PERCOBAAN
1. Mencetak kalimat “Hello World!” dalam satu baris.
Listing Program :
1
2
3
4
5
6
7
8
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 02 no 01\n");
//Jawaban
printf("Hello World!\n");
return 0;
}
Output Program :
Analisa :
Progam diatas hanya menerapkan system dasar output yaitu printf()
2. Mencetak kalimat dalam beberapa baris, dengan tampilan sebagai berikut :
Hello...
..oh my
...when do i stop?
1
..2
...3
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 12 “)
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 02 no 02\n");
//Jawaban
printf("Hello...\n");
printf("..oh my\n");
printf("...when do i stop?\n\n");
printf("1\n");
printf("..2\n");
printf("...3\n");
return 0;
}
Output Program :
Analisa :
Progam diatas hanya menerapkan system dasar output yaitu printf() dan juga syntax new
line “\n” untuk ganti baris baru.
3. Menghitung penjumlahan 1024 + 4096 dan mencetak hasilnya.
Listing Program :
1
2
3
4
5
6
7
8
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 02 no 03\n");
//Jawaban
printf("1024 + 4096 = %d\n", 1024 + 4096);
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 13 “)
9
10
return 0;
}
Output Program :
Analisa :
Program diatas menggunakan syntax printf dalam format umum yaitu
printf(“string control”, daftar argument) dengan string control berupa %d yang artinya
data yang ditampilkan berupa bilangan bulat atau integer, dan daftar argument berupa
penjumlahan 2 bilangan.
4. Mengisi nilai 2 variable int, menjumlahkan kedua isi variable tersebut dan mencetak
hasilnya.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 02 no 04\n");
//Jawaban
int bil1, bil2;
printf("Masukkan bilangan 1 : "); scanf("%d",&bil1);
printf("Masukkan bilangan 2 : "); scanf("%d",&bil2);
printf("bilangan1 + bilangan2 = %d\n", bil1 + bil2);
return 0;
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 14 “)
Analisa :
Program diatas menggunakan system I/O dalam C yaitu printf() dan scanf(), dengan
daftar argumen berupa variable yang telah dideklarasikan terlebih dahulu dengan format :
Type_data nama_variable; lalu variable tersebut diinisialisasi menggunakan fungsi
scanf() dengan format : scanf(“string control”, daftar argument). String control coding
diatas menggunakan %d yang artinya bahwa tipe data yang diinputkan berupa bilangan
integer, dan daftar argumentnya menggunakan penjumlahan 2 variable yang telah
dideklarasikan tadi.
5. Mengisi nilai sebuah variable float, mengalikan isi variable dengan 50 dan mencetak
hasilnya.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main()
{
printf ("Project Title : Tugas Pendahuluan Bab 02 no 05\n");
//Jawaban
float bil;
printf("Masukkan bilangan : "); scanf("%f",&bil);
printf("Hasil penghitungan bilangan = %f\n", bil * 50);
return 0;
}
Output Program :
Analisa :
Sama dengan project no 4, perbedaannya adalah disini tipe datanya adalah float yang
artinya string control dalam fungsi printf() dan juga scanf() harus menggunakan %f.
Perbedaan lainya adalah pada argument controlnya yang menggunakan operasi perkalian.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 15 “)
6. Menampilkan nilai sebuah bilangan float dengan tanpa menentukan format tampilannya
(default).
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 02 no 06\n");
//Jawaban
float bil;
printf("Masukkan bilangan : "); scanf("%f",&bil);
printf("Hasil penghitungan bilangan = %f\n", bil);
return 0;
}
Output Program :
Analisa :
Tipe data float memiliki medan dan digit angka di belakang koma yang cukup lebar
secara default. Hasilnya bisa terlihat di Output yang menampilkan angka 2.500000
padahal angka aslinya 2.5
7. Menampilkan nilai sebuah bilangan float dengan format lebar medan 10 digit dan juga 2
digit di belakang koma.
Listing program :
1
2
3
4
5
6
7
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 02 no 07\n");
//Jawaban
float bil;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 16 “)
8
9
10
11
12
printf("Masukkan bilangan : "); scanf("%f",&bil);
printf("Hasil penghitungan bilangan = %10.2f\n", bil);
return 0;
}
Output Prorgam :
Analisa :
Program hampir sama dengan project 6. Yang membedakan di sini adalah bahwa tipe
data float dalam string control dapat diatur lebar medan dan jumlah digit angkanya di
belakang koma. Contoh %10.2f artinya bahwa variable dalam argument control bernilai
float dan memiliki panjang medan sebesar 10 digit dan 2 digit angka di belakang koma.
8. Menerima masukkan dengan format int dan car kemudian menampilkannya kembali
dengan format yang sesuai.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 02 no 08\n");
//Jawaban
int bil;char kar;
printf("Masukkan karakter : "); scanf("%c",&kar);
printf("Masukkan bilangan : "); scanf("%d",&bil);
printf("Hasil Input bilangan = %d\n", bil);
printf("Hasil Input karakter = %c\n", kar);
return 0;
}
Output Prorgam :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 17 “)
Analisa :
Project di atas menggunakan system I/O dengan syntax printf() dan juga scanf(). Dengan
tahap awal yaitu pendeklarasian variable integer dan character, lalu kedua variable
tersebut diinisialisasi menggunakan fungsi scanf(), dan nilai dari variable tersebut dicetak
ke layar dengan fungsi printf(). String control yang digunakan untuk kedua fungsi
tersebut antara lain %d untuk bilangan integer dan %c untuk variable character.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 18 “)
Bab 3 TIPE DATA DAN OPERASI I/O
A. TUJUAN
B. DASAR TEORI
Data berdasarkan jenisnya dapat dibagi menjadi lima kelompok, yang dinamakan sebagai
tipe data dasar. Kelima tipe data dasar adalah:
Bilangan bulat (integer)
Bilangan real presisi-tunggal
Bilangan real presisi-ganda
Karakter
Tak-bertipe (void)
Kata-kunci yang berkaitan dengan tipe data dasar secara berurutan di antaranya
adalah int (short int, long int, signed int dan unsigned int), float, double, dan char.
Variabel
Aturan penulisan pengenal untuk sebuah variabel, konstanta atau fungsi yang
didefinisikan oleh pemrogram adalah sebagai berikut :
Pengenal harus diawali dengan huruf (A..Z, a..z) atau karakter garis bawah ( _ ).
Selanjutnya dapat berupa huruf, digit (0..9) atau karakter garis bawah atau
tanda dollar ($).
Panjang pengenal boleh lebih dari 31 karakter, tetapi hanya 31 karakter pertama
yang
akan dianggap berarti.
Pengenal tidak boleh menggunakan nama yang tergolong sebagai kata-kata
1. Menjelaskan tentang beberapa tipe data dasar (jenis dan
2. Menjelaskan tentang
3. Menjelaskan tentang
4. Menjelaskan tentang berbagai jenis operator dan
5. Menjelaskan tentang instruksi
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 19 “)
cadangan
(reserved words) seperti int, if, while dan sebagainya.
Konstanta
Konstanta menyatakan nilai yang tetap. Penulisan konstanta mempunyai aturan
tersendiri, sesuai dengan tipe masing-masing.
Konstanta karakter misalnya ditulis dengan diawali dan diakhiri dengan tanda petik
tunggal, contohnya : „A‟ dan „@‟.
Konstanta integer ditulis dengan tanda mengandung pemisah ribuan dan tak
mengandung bagian pecahan, contohnya : –1 dan 32767.
Konstanta real (float dan double) bisa mengandung pecahan (dengan tanda berupa
titik) dan nilainya bisa ditulis dalam bentuk eksponensial (menggunakan tanda e),
contohnya : 27.5f (untuk tipe float) atau 27.5 (untuk tipe double) dan 2.1e+5
(maksudnya 2,1 x 105 ).
Konstanta string merupakan deretan karakter yang diawali dan diakhiri dengan tanda
petik-ganda (“), contohnya :“Pemrograman Dasar C”.
Operator Aritmatika
Operator untuk operasi aritmatika yang tergolong sebagai operator binary adalah :
* perkalian
/ pembagian
% sisa pembagian
+ penjumlahan
- pengurangan
C. PERCOBAAN
1. Diketahui variable – variable sebagai berikut :
var_bulat = 32767
var_pecahan1 = 339.2345678f
var_pecahan2 = 3.4567e+40
var_karakter = „S‟;
buat program untuk menampilkan semua variable diatas.
Listing Program :
1
2
3
4
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 04A no 01”);
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 20 “)
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//Jawaban
int var_bulat = 32767;
float var_pecahan1 = 339.2345678f;
double var_pecahan2 = 3.4567e+40;
char var_karakter = 'S';
printf("var_bulat = %d\n", var_bulat);
printf("var_pecahan1 = %f\n", var_pecahan1);
printf("var_pecahan2 = %g\n", var_pecahan2);
printf("var_karakter = %c\n", var_karakter);
return 0;
}
Output Prorgam :
Analisa :
Soal nomor 1 merupakan penerapan dari syntax printf(“string control”, daftar argument)
dengan menngunakan beberapa variable dengan tipe data berbeda. String control yang
digunakan juga harus sesuai dengan tipe data variable yang akan kita gunakan. Contoh
utnuk variable dengan tipe data Integer kita menggunakan %d, tipe data float %f, tipe
data double %g (range lebih luas dari pada float) dan untuk karakter %c.
2. Diketahui variable-variable sebagai berikut : int a = 12, b = 2, c = 3, d = 4
buat program untuk mencetak hasil :
a % b
a – c
a + b
a / d
a / d * d + a % d
a % d / d * a – c
Listing Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 21 “)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 04A no 02”);
//Jawaban
int a = 12, b = 2, c = 3, d = 4;
printf("a = %d, b = %d, c = %d, dan d = %d\n", a, b, c, d);
printf("a %% b = %d\n", a % b);
printf("a - b = %d\n", a - b);
printf("a + b = %d\n", a + b);
printf("a / d = %d\n", a / d);
printf("a / d * d + a %% d = %d\n", a / d * d + a % d);
printf("a %% d / d * a - c = %d\n", a % d / d * a - c);
return 0;
}
Output Prorgam :
Analisa :
Soal nomor 2 lebih ditekankan kepada operasi yang dilakukan dalam bagian daftar
argument syntax printf(). Dengan melakukan perhitungan langsung seperti Listing coding
diatas, penulisan code akan lebih sederhana daripada menampungnya di variable lain dan
juga memori yang terpakai tidak terlalu banyak.
3. Buatlah program menghitung diskriminan dari sebuah persamaan kuadrat dengan nilai a,
b, c diinputkan.
Listing Program :
1
2
#include <stdio.h>
int main()
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 22 “)
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
printf("Project Title : Tugas Pendahuluan Bab 04A no 03”);
//Jawaban
int a, b, c; float D;
printf("Menghitung Diskriminan dari Pers. Kuadrat aX^2 + bX + c\n");
printf("Masukkan a : "); scanf("%d", &a);
printf("Masukkan b : "); scanf("%d", &b);
printf("Masukkan c : "); scanf("%d", &c);
D = b*b - 4*a*c;
printf("Nilai Diskriminan dari Pers. Kuadrat %dX^2 + %dX + %d adalah
%.0f\n", a, b, c, D);
return 0;
}
Output Program :
Analisa :
Soal diatas menekankan pada perhitungan matematika dengan menghitung nilai
Diskriminan dari suatu persamaan kuadrat. Ada 3 variable Integer yaitu a, b dan c dan
juga 1 variable float yaitu D. Variable a, b, dan c menggunakan fungsi input scanf() lalu
dihitung dengan rumus :
D = b x b – 4 * a * c Sesuai konsep hirerarki operator, penghitungan dimulai dengan
mengalikan b dengan b lalu dikurangi hasil dari perkalian 4 dengan a dan juga dengan c.
4. Buatlah program untuk mengkonversi suhu dari Celcius ke Fahrenheit dengan rumus :
F = C * 1.8 + 32
Listing Program :
1
2
3
4
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Percobaan Bab 04B no 1\n");
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 23 “)
5
6
7
8
9
10
11
float cel, fah;
printf("Masukkan suhu dalam derajat Celcius : ");
scanf("%f",&cel);
fah = 1.8 * cel + 32;
printf("Hasil konversi dari %.2f Celcius adalah %.2f Fahrenheit\n", cel,
fah);
return 0;
}
Output Program :
Analisa :
Langkah pertama deklarasi 2 variable bertipe float yaitu cel dan fah. Cel diberikan nilai
dengan menggunakan fungsi scanf() lalu dimasukkan ke dalam rumus untuk menentukan
fah yaitu fah = 1.8 * cel + 32 hasil dari perhitungan tersebut kemudian di tampilkan ke
layar dengan fungsi printf().
5. Buat program untuk menginputkan satu karakter dari keyboard dan kemudian cetak
karakter tersebut ke layar.
Listing Program :
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Percobaan Bab 04B no 2\n");
char kar;
printf("Masukkan 1 karakter lalu press enter : ");
kar = getchar();
printf("Hasil dari Input Keyboard adalah : %c\n", kar);
return 0;
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 24 “)
Analisa :
Pertama adalah deklarasi variable bertipe char, lalu diberikan nilai dengan menggunakn
fungsi getchar(). Fungsi getchar() sendiri memang khusus digunakan untuk menerima
masukkan berupa sebuah karakter dari keyboard. Setelah variable kar meiliki nilai maka
langkah selanjutnya di cetak di layar menggunakan fungsi printf().
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 25 “)
Bab 4 PENGAMBILAN KEPUTUSAN
A. TUJUAN
B. DASAR TEORI
Untuk keperluan pengambilan keputusan, C menyediakan beberapa jenis
pernyataan, berupa
Pernyataan if
Pernyataan if-else, dan
Pernyataan switch
Pernyataan-pernyataan tersebut memerlukan suatu kondisi, sebagai basis dalam
pengambilan keputusan. Kondisi umum yang dipakai berupa keadaan benar dan salah.
Operator Relasi
Operator relasi biasa dipakai untuk membandingkan dua buah nilai. Hasil
pembandingan berupa keadaan benar atau salah. Keseluruhan operator relasi pada
C
ditunjukkan pada Tabel 3-1
Tabel 3-1. Operasi relasi
Operator Makna >
>=
<
<=
==
!=
Lebih dari
Lebih dari atau sama dengan
Kurang dari
Kurang dari atau sama dengan
Sama dengan
Tidak sama dengan
1. Menjelaskan tentang operator kondisi (operator relasi dan
logika)
2. Menjelaskan penggunaan pernyataan if
3. Menjelaskan penggunaan pernyataan if-else
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 26 “)
Operator Logika.
Operator logika biasa dipakai untuk menghubungkan ekspresi relasi. Keseluruhan
operator logika ditunjukkan pada tabel 3-2.
Tabel 3-2. Operator logika
Operator Makna
&&
||
!
dan (AND)
atau (OR)
tidak (NOT)
Bentuk pemakaian operator && dan || adalah
operand1 operator operand2
Pernyataan if
Pernyataan if mempunyai bentuk umum :
if (kondisi )
pernyataan;
Pernyataan if-else
Pernyataan if-else memiliki bentuk :
if (kondisi)
pernyataan-1;
else
pernyataan-2;
Pernyataan if di dalam if
Di dalam suatu pernyataan if (atau if-else) bisa saja terdapat pernyataan if (atau if-
else) yang lain. Bentuk seperti ini dinamakan sebagai nested if. Secara umum, bentuk
dari pernyataan ini adalah sebagai berikut :
if (kondisi-1)
if (kondisi-n)
.
.
else
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 27 “)
else
Pernyataan else-if
Else if juga merupakan nested if ( if di dalam if )
if (kondisi-1)
.
.
else if (kondisi-n)
.
.
else
Pernyataan switch
Pernyataan switch merupakan pernyataan yang dirancang khusus untuk
menangani pengambilan keputusan yang melibatkan sejumlah alternatif, misalnya untuk
menggantikan pernyataan if bertingkat.
Bentuk umum pernyataan switch adalah :
switch (ekspresi)
{
case konstanta-1:
pernyataan-1;
......
break;
case konstanta-2:
.
.
.
case konstanta-n:
pernyataan-n;
.......
break;
default:
.......
.......
break;
}
C. PERCOBAAN
1. Buat program untuk menginputkan sebuah bilangan, kemudian cetak ke layar bilangan
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 28 “)
tersebut dan beri komentar apakah bilangan tersebut ganjil atau genap.
Contoh input = 15
Output = Bilangan yang diinputkan adalah 15. Bilangan tersebut adalah
bilangan ganjil.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"
#include <stdio.h>
int main()
{
int Bil, b;
printf("MENENTUKAN BILANGAN GANJIL ATAU GENAP\n\n");
printf("Masukan bilangan = ");
scanf("%d", &Bil);
b = Bil % 2;
if(b == 0)
printf("Bilangan GENAP\n");
else
printf("Bilangan GANJIL\n");
}
Output Prorgam :
Analisa :
Program diatas menentukan bilangan ganjil/genap dengan menggunakan logika modulus
2. Dimana jika hasil modulus suatus bilangan dengan 2 maka akan dicetak “Bilangan
GENAP”, sebaliknya jika hasil modulusnya bukan 0 maka akan dicetak “Bilangan
GANJIL” (lihat Output).
2. Buat program menggunaan pernyataan if adalah untuk menentukan besarnya
potongan harga yang diterima oleh seorang pembeli, berdasarkan kriteria :
tidak ada potongan harga jika total pembelian kurang dari Rp. 100.000 (dalam
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 29 “)
hal ini potongan harga diinisialisasi dengan nol).
bila total pembelian lebih dari atau sama dengan Rp. 100.000, potongan harga
yang diterima dirubah menjadi sebesar 5% dari total pembelian.
Contoh input = 50.000
Output = Total pembelian adalah Rp. 50.000
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include <stdio.h>
int main()
{
float harga, discount;
printf("Masukan Total Pembelian = Rp.");
scanf("%f",&harga);
discount = harga * 0.05f;
if(harga>=100000)
{
printf("Discount = %.0f\n", discount);
printf("Total Pembelian = %.0f\n", harga - discount);
}
else{
printf("Total Pembelian = %.0f\n", harga);
printf("Tidak ada discount");
}
}
Output Prorgam :
Analisa :
Program diatas adalah langkah utama dalam menentukan apakah harga yang diinputkan
mendapatkan diskon atau tidak untuk mengerjakan program kasir, yang lebih kompleks.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 30 “)
Menggunakan decision, dengan sebelumnya mendeklarasikan discount = harga *
0.05f , maka akan mendapatkan hasil jika harga pembelian melebihi 100.000 sebanyak
5%. Selain itu total pembelian akan tetap
3. Gunakan pernyataan if…else untuk membuat program yang menerima 2 buah
bilangan bulat masukan. Tampilkan hasil dari pembagian bilangan pertama dengan
bilangan kedua, dengan ketelitian 3 desimal.
Input : bil1 dan bil2
Output : hasil bagi bil1 dengan bil2
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main()
{
float Bil1, Bil2;
printf("OPERASI PEMBAGIAN\n\n");
printf("Masukan bilangan = ");
scanf("%f", &Bil1);
printf("Masukan bilangan = ");
scanf("%f", &Bil2);
if(Bil2 > 0)
printf("Hasil = %.3f\n", Bil1/Bil2);
else
printf("Division by zero\n");
}
Output Prorgam :
Analisa :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 31 “)
Program pembagian ini hanya bias dibagi bilangan apapun kecuali 0, sebab dalam
perintah decision-nya jika, bilangan pembaginya 0, otomatis hasilnya yang dicetak adalh
“Division by zero”, selain itu tetap bias dibagi dengan disimpan pada variabel Hasil
dengan tipe data float.
4. Buatlah program untuk menghitung diskriminan dan mencari akar-akar dari
persamaan kuadrat :
ax2 + bx + c = 0 , dengan ketentuan sbb :
D = b2 - 4ac
- Jika D = 0 , maka terdapat 2 akar real yang kembar, yaitu : x1 = x2 = -b / 2a
- Jika D > 0 , maka terdapat 2 akar real yang berlainan, yaitu :
o x1 = (-b + sqrt(D)) / 2a x2 = (-b - sqrt(D)) / 2a
- Jika D < 0 , maka terdapat 2 akar imaginair yang berlainan, yaitu :
o x1 = -b / 2a + (sqrt(-D)/2a) i
o x2 = -b / 2a - (sqrt(-D) / 2a) i
- Input : a, b, c (float)
- Output : Nilai Diskriminan serta nilai akar-akar persamaan tsb (x1& x2).
- Petunjuk :
o untuk mencari akar dari x, gunakan : sqrt(x) yang didefinisikan pada
<math.h>.
o gunakan else if
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, D;
printf("Diskriminan dan akar akar dari persamaan kuadrat\n\n");
printf("Masukkan a = ");
scanf("%f",&a);
printf("Masukkan b = ");
scanf("%f",&b);
printf("Masukkan c = ");
scanf("%f",&c);
D = (b * b) - (4 * a * c);
if(D!=0)
{
if(D > 0)
{
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 32 “)
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
printf("Diskriminan = %.2f\n", D);
printf("X1 = %.2f\n", (-b + sqrt(D)) / (2 * a));
printf("X2 = %.2f\n", (-b - sqrt(D)) / (2 * a));
}
else
{
printf("Diskrimanan = %.2f\n", D);
printf("X1 = %.2f\n", (-b / (2 * a) + (sqrt(-D)) / (2 * a)));
printf("X2 = %.2f\n", (-b / (2 * a) - (sqrt(-D)) / (2 * a)));
}
}
else
{
printf("Diskriminan = %.2f\n", D);
printf("X1 = %.2f\n", -b / (2 * a));
printf("X2 = %.2f\n", -b / (2 * a));
}
}
Output Prorgam :
Analisa :
Program yang ini untuk menentukan diskriminan, 𝑥1 dan 𝑥2 suatu persamaan yang setiap
variabelnya berupa input-an dari user. Logika yang dipakai adalah jika D (diskriminan
dari hasil 𝑏2 − 4 𝑎 𝑐) sama dengan 0 atau tidak. Jika D ≠0 maka akan masuk ke dalam
nested decision. Antara D > 0 atau D < 0. Selanjutnya akan disesuaikan dengan rumus
matematika untuk mencari 𝑥1 dan 𝑥2-nya. Setelah 𝑥1 dan 𝑥2 sudah ditemukan, maka
akan dicetak 𝑥1 dan 𝑥2-nya.
5. Dengan menggunakan pernyataan else..if , buatlah program kalkulator sederhana,
untuk mendapatkan tanpilan hasil sebagai berikut :
Masukkan bilangan pertama : 5
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 33 “)
Masukkan bilangan kedua : 3
Menu Matematika
1. Penjumlahan
2. Pengurangan
3. Pembagian
4. Perkalian
Masukkan pilihan anda : 4
Hasil operasi tersebut = 15
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
int main()
{
float a, b;
int Menu;
printf("OPERASI MATEMATIKA\n\n");
printf("Masukkan a = ");
scanf("%f",&a);
printf("Masukkan b = ");
scanf("%f",&b);
printf("\n");
printf("PILIH MENU OPERASI MATEMATIKA\n\n");
printf("1. Penjumlahan\n");
printf("2. Pengurangan\n");
printf("3. Pembagian\n");
printf("4. Perkalian\n");
printf("Masukan Pilihan = ");
scanf("%d",&Menu);
if(Menu == 1)
printf("Hasil Penjumlahan = %.1f\n", a + b);
else if(Menu == 2)
printf("Hasil Pengurangan = %.1f\n", a - b);
else if(Menu == 3)
printf("Hasil Pembagian = %.1f\n", a / b);
else if (Menu == 4)
printf("Hasil Perkalian = %.1f\n", a * b);
else
printf("Tidak dalam menu\n");
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 34 “)
32 }
Output Prorgam :
Analisa :
Pada program matematika sederhana ini yang menjadi patokannya adalah input-an dari
user untuk menentukan operasi matematika yang dipakai, yang sebelumnya variabel a
dan b sudah diisi user. Decision utamanya terdapat pada pilihan menunya, jika user
memasukkan pilihan 1 maka yang diproses adalah decision penjumlahan, begitu
seterusnya. Untuk pembagian tidak ada larangan untuk pembaginya.
6. Buat program untuk mengkonversikan nilai angka ke nilai huruf.
Petunjuk :
nilai_angka<=40 = E
40<nilai_angka<=55 = D
55<nilai_angka<=60 = C
60<nilai_angka<=80 = B
80<nilai_angka<=100 = A
Input : nilai_angka = 62
Output : Nilai huruf adalah B
Listing Program :
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main()
{
int Nilai;
printf("Masukkan nilai = ");
scanf("%d", &Nilai);
if (Nilai <= 100 && Nilai >= 0)
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 35 “)
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{
if(Nilai <= 40)
printf("Nilai Huruf = E\n");
else
if(Nilai > 40 && Nilai <= 55)
printf("Nilai Huruf = D\n");
else
if(Nilai > 55 && Nilai <= 60)
printf("Nilai Huruf = C\n");
else
if(Nilai > 60 && Nilai <= 80)
printf("Nilai Huruf = B\n");
else
if(Nilai > 80 && Nilai <= 100)
printf("Nilai Huruf = A\n");
}
else
printf("Nilai yang dimasukkan salah\n");
}
Output Prorgam :
Analisa :
Dalam program ini untuk mengubah nilai angka menjadi nilai huruf, dimana setelah user
sudah meng-input-kan nilai, akan diolah pada decision-nya sesuai dengan ketentuan yang
ada, jika user salah menginputkan nilai atau yang diisi bukan berupa angka akan muncul
“NILAI YANG DIMASUKKAN SALAH”.
7. Tulislah kembali pernyataan-pernyataan di bawah ini dengan menggunakan pernyataan
switch
if( letter == 'X' )
sum = 0;
else if ( letter == 'Z' )
valid_flag = 1;
else if( letter == 'A' )
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 36 “)
sum = 1;
else
printf("Unknown letter -->%c\n", letter );
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 04A no 01”);
//Jawaban
int var_bulat = 32767;
float var_pecahan1 = 339.2345678f;
double var_pecahan2 = 3.4567e+40;
char var_karakter = 'S';
printf("var_bulat = %d\n", var_bulat);
printf("var_pecahan1 = %f\n", var_pecahan1);
printf("var_pecahan2 = %g\n", var_pecahan2);
printf("var_karakter = %c\n", var_karakter);
return 0;
}
Output Prorgam :
Analisa :
Soal nomor 1 merupakan penerapan dari syntax printf(“string control”, daftar argument)
dengan menngunakan beberapa variable dengan tipe data berbeda. String control yang
digunakan juga harus sesuai dengan tipe data variable yang akan kita gunakan. Contoh
utnuk variable dengan tipe data Integer kita menggunakan %d, tipe data float %f, tipe
data double %g (range lebih luas dari pada float) dan untuk karakter %c.
8. Ubahlah program di bawah ini, implementasikan kembali dengan menggunakan
pernyataan switch
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 37 “)
main()
{
int valid_operator = 1;
//valid_operator diinisialisasi dengan logika 1 char
operator;
float number1, number2, result;
printf("Masukkan 2 buah bilangan & sebuah operator\n");
scanf("%f %c %f", &number1, &operator, &number2);
if(operator == '*')
result = number1 * number2;
else if(operator == '/')
result = number1 / number2;
else if(operator == '+')
result = number1 + number2;
else if(operator == '-')
result = number1 - number2;
else
valid_operator = 0;
if(valid_operator)
printf("\n%g %c %g is %g\n", number1, operator, number2,
result );
else
printf("Invalid operator!\n");
}
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 04A no 01”);
//Jawaban
int var_bulat = 32767;
float var_pecahan1 = 339.2345678f;
double var_pecahan2 = 3.4567e+40;
char var_karakter = 'S';
printf("var_bulat = %d\n", var_bulat);
printf("var_pecahan1 = %f\n", var_pecahan1);
printf("var_pecahan2 = %g\n", var_pecahan2);
printf("var_karakter = %c\n", var_karakter);
return 0;
}
Output Prorgam :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 38 “)
Analisa :
Soal nomor 1 merupakan penerapan dari syntax printf(“string control”, daftar argument)
dengan menngunakan beberapa variable dengan tipe data berbeda. String control yang
digunakan juga harus sesuai dengan tipe data variable yang akan kita gunakan. Contoh
utnuk variable dengan tipe data Integer kita menggunakan %d, tipe data float %f, tipe
data double %g (range lebih luas dari pada float) dan untuk karakter %c.
9. Buatlah program untuk menampilkan menu dan melakukan proses sbb :
Menu :
1. Menghitung volume kubus
2. Menghitung luas lingkaran
3. Menghitung volume silinder. Input : pilihan user (1, 2 atau 3)
Jika pilihan = 1, maka :
Input : panjang sisi kubus
Output : Volume kubus (vol = sisi3)
Jika pilihan = 2, maka :
Input : panjang jari-jari lingkaran
Output : Luas lingkaran (luas = 3.14 * r2)
Jika pilihan = 3, maka :
Input : panjang jari-jari lingkaran & tinggi silinder
Output : Volume silinder (vol = 3.14 * r2 * t)
Jika pilihan selain 1, 2 & 3 (default) : Tampilkan pesan kesalahan.
Petunjuk : gunakan switch-case
Listing Program :
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main()
{
printf("Project Title : Tugas Pendahuluan Bab 04A no 01”);
//Jawaban
int var_bulat = 32767;
float var_pecahan1 = 339.2345678f;
double var_pecahan2 = 3.4567e+40;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 39 “)
10
11
12
13
14
15
16
17
18
char var_karakter = 'S';
printf("var_bulat = %d\n", var_bulat);
printf("var_pecahan1 = %f\n", var_pecahan1);
printf("var_pecahan2 = %g\n", var_pecahan2);
printf("var_karakter = %c\n", var_karakter);
return 0;
}
Output Prorgam :
Analisa :
Soal nomor 1 merupakan penerapan dari syntax printf(“string control”, daftar argument)
dengan menngunakan beberapa variable dengan tipe data berbeda. String control yang
digunakan juga harus sesuai dengan tipe data variable yang akan kita gunakan. Contoh
utnuk variable dengan tipe data Integer kita menggunakan %d, tipe data float %f, tipe
data double %g (range lebih luas dari pada float) dan untuk karakter %c.
10. Tulislah kembali pernyataan-pernyataan di bawah ini dengan menggunakan pernyataan switch
if( letter == 'X' )
sum = 0;
else if ( letter == 'Z' )
valid_flag = 1;
else if( letter == 'A' )
sum = 1; else
printf("Unknown letter -->%c\n", letter );
Listing Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 40 “)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
int main()
{
char letter;
int sum, valid_flag;
printf("Masukkan satu abjad = ");
scanf("%c",&letter);
switch(letter)
{
case 'X':
sum = 0;
break;
case 'Z':
valid_flag = 1;
break;
case 'A':
sum = 1;
break;
default :
printf("Unknown letter --> %c\n", letter );
break;
}
}
Output Prorgam :
Analisa :
Pada program ini adalah untuk menyaring sebuah input-an huruf. Antara lain hanya huruf
X, Z, dan A, dimana kasus decision yang dipakai adalah jika input kata yang dimasukkan
X maka variabel sum akan bernilai 0, jika A maka variabel sum bernilai 1, selain itu
huruf yang di inputkan tidak bernilai namun dicetak kembali huruf yang tadi di-input-
kan.
11. Ubahlah program di bawah ini, implementasikan kembali dengan menggunakan pernyataan
switch main()
{
int valid_operator = 1;
//valid_operator diinisialisasi dengan logika 1
char operator;
float number1, number2, result;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 41 “)
printf("Masukkan 2 buah bilangan & sebuah operator\n");
printf("dengan format : number1 operator number2\n\n");
scanf("%f %c %f", &number1, &operator, &number2);
if(operator == '*')
result = number1 * number2;
else if(operator == '/')
result = number1 / number2;
else if(operator == '+')
result = number1 + number2;
else if(operator == '-')
result = number1 - number2;
else
valid_operator = 0;
if(valid_operator)
printf("\n%g %c %g is %g\n", number1, operator,
number2, result );
else printf("Invalid operator!\n");
}
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include<stdio.h>
int main()
{
int valid_operator = 1;
//valid_operator diinisialisasi dengan logika 1
char op;
float number1, number2, result;
printf("Masukkan 2 buah bilangan & sebuah operator\n");
printf("dengan format : number1 operator number2\n\n");
scanf("%f %c %f", &number1, &op, &number2);
switch(op){
case '*':
result = number1 * number2;break;
case '/':
result = number1 / number2;break;
case '+':
result = number1 + number2;break;
case '-':
result = number1 - number2;break;
default :
valid_operator = 0;break;
}
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 42 “)
25
26
27
28
29
30
if(1)
printf("\n%g %c %g is %g\n", number1, op, number2, result );
else
printf("Invalid operator!\n");
}
Output Prorgam :
Analisa :
Sama seperti kasus pada PRAKTIKUM 5.2 nomor 2, namun kali ini menggunakan
decision berupa switch case, bedanya yang menjadi patokan decision-nya di
program ini langsung ke operasi matematikanya(e,g +, -. *, /) , tanpa menggunakan angka
(e.g 1, 2, 3, etc) sebagai patokan operasi matematikanya. Jika terjadi default atau
opearsi yang dimasukkan tidak ada dalam operasi matematika variabel
valid_operator akan bernilai 0, yang selanjutnya dilanjutkan pada decision if
untuk mencetak kalimat “INVALID OPERATOR”. Selain itu pada decision if nya akan
mencetak hasil sesuai yang di-input-kan
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 43 “)
Bab 5 PERULANGAN
A. TUJUAN
B. DASAR TEORI
1. Perulangan For
Bentuk pernyataan for :
for (ungkapan1; ungkapan2; ungkapan3)
pernyataan;
Keterangan:
Ungkapan1 : digunakan untuk memberikan inisialisasi terhadap variabel
pengendali loop.
Ungkapan2 : dipakai sebagai kondisi untuk keluar dari loop.
Ungkapan3 : dipakai sebagai pengatur kenaikan nilai variabel pengendali loop.
Ketiga ungkapan dalam for tersebut harus dipisahkan dengan tanda titik koma (;).
Dalam hal ini pernyatan bisa berupa pernyataan tunggal maupun jamak. Jika
pernyataannya berbentuk jamak, maka pernyataan-pernyataan tersebut harus diletakkan
di antara kurung kurawal buka ({) dan kurung kurawal tutup (}), sehingga formatnya
menjadi :
for (ungkapan1; ungkapan2; ungkapan3)
{
pernyataan;
pernyataan;
.
.
.
}
2. Perulangan While
1. Menjelaskan tentang perulangan loop for, while dan do
while
2. Menjelaskan variasi-variasi looping
3. Menggunakan continue dan break
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 44 “)
while atau do-while digunakan jika loop belum ditentukan berapa banyak
perulangannya. Menggunakan pernyataan while ketika kondisi perluangan diperiksa
sebelum menjalankan pernyataan dan menggunakan do_while ketika perulangan
kodisi perulangan tersebut diperiksa setelah mejalankan pernyataan.
Pada pernyataan while, pemeriksaan terhadap loop dilakukan di bagian
awal (sebelum tubuh loop). Pernyataan while akan diulangi terus selama kondisi
bernilai benar, atau diulangi selama kondisinya benar, jika kondisinya salah maka
perulangan (loop) dianggap selesai. Lebih jelasnya, bentuk pernyataan while adalah
sebagai berikut :
while (kondisi)
pernyataan;
3. Break dan Continue
Fungsi break digunakan untuk keluar dari perulangan, sedangkan continue
digunakan agar program kembali ke perulangan awal dan mengabaikan list code
selanjutnya.
4. Perulangan Nested Loop
Nested loop memungkinkan adanya loop di dalam suatu loop. Contoh nesteed
loop dengan loop for
for (baris = 1; baris <= MAKS; baris++) {
for (kolom = 1; kolom <= MAKS; kolom++) {
hasil_kali = baris * kolom;
printf ("%2d", hasil_kali);
}
printf("\n"); /* pindah baris */
}
C. PERCOBAAN
1. Gunakan loop for untuk menampilkan nilai 1 sampai dengan 20 dalam baris-baris yang
terpisah
Listing Program :
1
2
3
4
#include<stdio.h>
#include<conio.h>
int main(){
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 45 “)
5
6
7
8
9
int nilai;
for(nilai = 1; nilai <=20; nilai ++)
printf("nilai %d\n", nilai);
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan nilai mulai 1 sampai <= 20 dengan
menggunakan for dan while
2. Hitunglah bilangan triangular dari masukan pengguna, yang dibaca dari keyboard
dengan menggunakan scanf(). Bilangan triangular adalah penjumlahan dari bilangan
masukan dengan seluruh bilangan sebelumnya, sehingga bilangan triangular dari 7
adalah : 7 + 6 + 5 + 4 + 3 + 2 + 1
Listing Program :
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
#include<conio.h>
int main(){
int bil, n, hasil = 0;
printf("Masukan bil tringular yang kamu inginkan = ");
scanf("%d", &n);
printf("Output: ");
for (bil=n; bil >=1; bil--){
if(bil==1)
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 46 “)
11
12
13
14
15
16
17
18
printf("%d", bil);
else
printf("%d + ", bil);
hasil += bil;
}
printf(" = %d\n", hasil);
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan bilangan triangular dangan sesuai yang
diinputkan oleh user. Dengan menggunakan for dan while.
3. Gunakan loop for untuk menampilkan seluruh karaker dari A sampai dengan Z dalam
baris-baris yang terpisah.
Listing Program :
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
#include<conio.h>
int main(){
char huruf;
for (huruf='A'; huruf <='Z'; huruf++){
printf("huruf %c\n", huruf);
}
getch();
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 47 “)
Analisa :
Dalam program ini diminta untuk menampilkan huruf mulai A sampai >= Z dengan
menggunakan for dan while.
4. Gunakan loop for dengan kenaikan varibel negatif untuk menampilkan seluruh karaker
dari Z sampai dengan A dalam baris-baris yang terpisah.
Listing Program :
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
#include<conio.h>
int main(){
char huruf;
for (huruf='Z'; huruf >='A'; huruf--){
printf("huruf %c\n", huruf);
}
getch();
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 48 “)
Analisa :
Dalam program ini diminta untuk menampilkan huruf mulai Z sampai >= A dengan
menggunakan for dan while.
5. Gunakan loop while untuk membuat program yang dapat menampilkan semua
karakter yang diketikkan di keyboard sampai yang diketikkan pada keybord huruf
„X‟ (x besar).
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>
#include<conio.h>
int main(){
char kar;
printf("\t\t.'KARAKTER'.\n");
printf("Input karakter yang anda inginkan adalah ");
scanf("%c", &kar);
while (kar!='X'){
printf("%c", kar);
scanf("%c",& kar);
}
getch();
}
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 49 “)
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan karakter yang diinputkan oleh user
ketika inputkan X maka progam akan berhenti dan mencetak karakter sebelum X.
6. Gunakan loop while untuk membuat program yang dapat mencari total angka yang
dimasukkan dengan tampilan sebagai berikut :
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<conio.h>
int main(){
int bil, n=1, total=0;
char jawaban = 'y';
while (jawaban == 'y'){
printf("masukkan bil ke-%d= ", n);
scanf("%d", &bil);
printf("mau masukkan data lagi [y/t] ? ");
scanf(" %c", &jawaban);
total += bil;
n++;
}
printf("total bilangan = %d", total);
getch();
}
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 50 “)
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan bilangan sesuai yang diinputkan oleh
user ketika menjawab „y‟ maka akan diminta untuk menginputkan bilangan, ketika
menjawab „t‟ maka akan dijumlahkan bilangan tersebut kemudian dicetak.
7. Pada program no 6 tambahkan rata-rata, maksimum dan minimum dari angka yang
dimasukkan.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>
#include<conio.h>
int main(){
int bil, max, min;
float n=1, total=0;
float mean;
char jawaban = 'y';
while (jawaban == 'y'){
printf("masukkan bil ke-%.0f= ",n);
scanf("%d", &bil);
if(n==1){
max = bil;
min = bil;
}
printf("mau masukkan data lagi [y/t] ? ");
scanf(" %c", &jawaban);
total += bil;
n++;
if(bil >= max)
max=bil;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 51 “)
26
27
28
29
30
31
32
33
34
35
if (bil <= min)
min=bil;
}
printf("total bil = %.2f\n", total);
printf("mean = %.2ff\n", (total/(n-1)));
printf("bil max = %d\n", max);
printf("bil min = %d\n", min);
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan bilangan sesuai yang diinputkan oleh
user ketika menjawab „y‟ maka akan diminta untuk menginputkan bilangan, ketika
menjawab „t‟ maka akan dijumlahkan bilangan tersebut dan dicetak , kemudian mencetak
rata bilangan max dan min.
8. Gunakan while pada program yang digunakan untuk menghitung banyaknya
karakter dari kalimat yang dimasukkan melalui keyboard (termasuk karakter spasi).
Untuk mengakhiri pemasukan kalimat, tombol ENTER („\n‟) harus ditekan
Input : Ketikkan sembarang kalimat
Output : jumlah karakter = m jumlah spasi =n
Listing Program :
1
2
3
4
5
6
7
#include<stdio.h>
#include<conio.h>
int main(){
char kar = 'A';
int m=0, n=0;
printf("Input: ");
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 52 “)
8
9
10
11
12
13
14
15
16
17
18
19
20
while(kar!=13){
kar = getch();
putchar(kar);
m++;
if(kar == ' ')
n++;
}
printf("\nOutput: \n");
printf("Jumlah karakter = %d", m-1);
printf("\nJumlah spasi = %d", n);
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan jumlah karakter dan jumlah spas
Karakter diinputkan oleh user kemudian akan mencetak jumlah karakter dan jumah spasi.
9. Dengan menggunakan pernyataan break, buatlah program yang dapat menampilkan
semua tampilan karakter yang diketikkan dan program berakhir ketika ditekan tombol
Enter.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<conio.h>
int main(){
char kar;
printf("Ketik sembarang kalimat\n");
printf("Dan diakhiri dengan Enter\n\n");
while(1){
kar=getchar();
if(kar=='\n')
break;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 53 “)
12
13
14
15
}
printf("Selesai\n");
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan karakter yang diinputkan oleh user
ketika inputkan enter maka program akan selesai dan mencetak selesai.
10. Dengan menggunakan pernyataan continue, buatlah program yang dapat menampilkan
bilangan ganjil dari 1 sampai < n (n diinputkan), kecuali bilangan ganjil tersebut
kelipatan 3
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<conio.h>
int main(){
int n, i;
printf("\t.'Bilangan Ganjil dari 1 < n kecuali bilangan keliapatan 3'.\t\n");
printf("masukkan n =");
scanf("%d",&n);
for (i=1; i<n; i++){
if(i%2==1){
if(i%3==0)
continue;
printf("%d ", i);
}
}
getch();
}
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 54 “)
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan bilangan ganjil mulai 1 sampai kurang
dari yang inputkan oleh user, kemudian ketika bilangan tersebut kelipatan 3 maka akan di
continue, dan bilangan ganjil tersebut dicetak.
11. Dengan menggunakan pernyataan break dan continue, buatlah program untuk membuat
program dengan input n, dan output, bilangan ganjil kecuali kelipatan 7 dan 11 mulai dari
1 sampai < n atau bilangan tersebut < 100.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
#include<conio.h>
int main(){
int n, i;
printf("\t.'Bilangan Ganjil tanpa Kelipatan 7 dan 11'.\t\n\n");
printf("masukkan n = ");
scanf("%d",&n);
for (i=1; i<n; i++){
if(i>=100)
break;
if(i%2==1){
if(i%7==0)
continue;
if(i%11==0)
continue;
printf("%d ", i);
}
}
printf("\nSelesai\n");
getch();
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 55 “)
Analisa :
Dalam program ini diminta untuk menampilkan bilangan ganjil mulai 1 sampai kurang
dari yang inputkan oleh user, kemudian ketika bilangan tersebut kelipatan 3, 7 dan 11
maka akan di continue, dan bilangan ganjil tersebut dicetak.
12. Buatlah program untuk menerima daftar nilai mahasiswa sbb:
Input : - Jumlah data (n)
- Nilai ke-1 s/d Nilai ke-n
Output : - Nilai minimal
- Nilai maksimal
- Nilai rata-rata (rata-rata= nilai total / jumlah data)
(Petunjuk : Gunakan loop For dan seleksi kondisi dengan if)
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<conio.h>
int main(){
int n, i;
float mean=0;
int total=0, nilai, max, min;
printf("\t\t.'Menerima Daftar Nilai Mahasiswa'.\t\t\n\n");
printf("masukan jumlah data = ");
scanf("%d", &n);
for(i=1;i<=n;i++){
printf("jumlah data ke-%d= ", i);
scanf("%d", &nilai);
if(i==1){
max=nilai;
min=nilai;
}
total += nilai;
if(nilai >= max)
max=nilai;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 56 “)
21
22
23
24
25
26
27
28
29
30
if(nilai <= min)
min=nilai;
}
printf("total nilai = %d\n", total);
mean=(float)total/n;
printf("mean = %.2f\n", mean);
printf("nilai max = %d\n", max);
printf("nilai min = %d\n", min);
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan daftar nilai mahasiswa. Jumlah data yang
diinputkan oleh user kemudian user menginputkan nilai tersebut, lalu menjumlahkan nilai
tersebut
13. Dengan menggunakan pernyataan nested loop, buatlah program berikut:
Input: n
output:
1 2 3 4 5…n
1 2 3 4 5…n
1 2 3 4 5…n
……
1 2 3 4 5…n
Listing Program :
1
2
3
4
5
#include<stdio.h>
#include<conio.h>
int main(){
int i, j, n;
n kali
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 57 “)
6
7
8
9
10
11
12
13
14
printf("Masukan bilangan n = ");
scanf("%d", &n);
for (i= 1;i<=n;i++){
for (j=1;j<=n;j++)
printf("%d ", j);
printf("\n");
}
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan mengurutkan bilangan dimulai dari 1
sampai n, yang dimana n adalah inputan dari user. Menggunakan nested loop yang
dicetak j, j merupakan untuk kolom sehingga mencetak jumlahnya baris dan kolom
sesuai n dan setiap ganti baris dimulai dari 1.
14. Dengan menggunakan pernyataan nested loop, buatlah program berikut:
input: n
output:
1
2 2
3 3 3
…….
n n n n n
Listing Program :
1
2
3
4
5
#include<stdio.h>
#include<conio.h>
int main(){
int i, j, n;
n kali
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 58 “)
6
7
8
9
10
11
12
13
14
printf("masukkan n= ");
scanf("%d", &n);
for (i=1;i<=n;i++){
for (j=1;j<=i;j++)
printf("%d ", i);
printf("\n");
}
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan mengurutkan bilangan dimulai dari 1
sampai n, yang dimana n adalah inputan dari user. Menggunakan nested loop yang
dicetak i, i merupakan untuk baris sehingga mencetak jumlahnya kolom dan baris sesuai
n dan setiap ganti baris dimulai dari 1 kemudian diincremen sampai n.
15. Dengan menggunakan pernyataan nested loop, buatlah program berikut:
input: n
output:Bilangan prima ke n 3 5 7 11….
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
#include<stdio.h>
#include<conio.h>
int main(){
int n, i, j, faktor, hitung=0;
printf("\t\t.'Bilangan Prima.'\t\t\n");
printf("masukkan n= ");
scanf("%d", &n);
i=2;
while(1){
faktor=0;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 59 “)
12
13
14
15
16
17
18
19
20
21
22
23
24
25
for(j=1;j<=i;j++){
if(i%j==0)
faktor++;
}
if(faktor==2){
printf("%d ", i);
hitung++;
}
if(hitung==n)
break;
i++;
}
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan bilangan prima dimulai dari 2 sampai n,
yang dimana n adalah inputan dari user. Menggunakan nested loop, bilangan prima
merupakan bilangan yang memiliki factor pembaginya adalah 1 dan bilangan itu sendiri.
16. Dengan menggunakan pernyataan nested loop, buatlah program berikut:
input: n
output: 0 1 3 6 10 15 21 28…..Bilangan ke n
Listing Program :
1
2
3
4
5
6
7
8
#include<stdio.h>
#include<conio.h>
int main(){
int i=0, j, n, nilai=0;
printf("masukkan n= ");
scanf("%d", &n);
while(i<n){
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 60 “)
9
10
11
12
13
14
15
16
for(j=0;j<i;j++){
nilai++;
}
i++;
printf("%d ", nilai);
}
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan bilangan dimulai dari 0 sampai n, yang
dimana n adalah inputan dari user. Menggunakan nested loop, kemudian untuk bilangan
selanjutnya dijumlahkan dengan bilangan sesuai urutannya.
17. Pada program nomor 16 diatas tambahkan tanyaan “apakah anda inginkan keluar
(y/t)?”, erntaan tersebut hanya bias di jawab dengan huruf „y‟ (y kecil) dan „t‟ (t kecil).
Dan akan keluar dari program setelah dijawab dengan „y‟ (y keci
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main(){
int i, j, n, nilai;
char jawab;
do{
nilai = 0;i = 0;
printf("masukkan n= ");
scanf("%d", &n);
while(i<n){
for(j=0;j<i;j++){
nilai++;
}
i++;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 61 “)
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
printf("%d ", nilai);
}
printf("\napakah anda ingin keluar(y/t) ? ");
fflush(stdin);
jawab = getchar();
if(jawab != 't')
exit(0);
else
jawab = 'y';
}
while(jawab == 'y');
getch();
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan daftar nilai mahasiswa. Jumlah data yang
diinputkan oleh user kemudian user menginputkan nilai tersebut, lalu menjumlahkan nilai
tersebut
18. Buatlah program untuk menghitung factorial dari bilangan yang diinputkan dengan syarat
tidak boleh menggunakan operator perkalian hanya dengan operator tambahan! Contoh:
Input : 4
Output: 24 (faktorial dari 4)
Listing Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 62 “)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main(){
int hasil,i,j,a,b,c;
printf("\t\t.'Faktorial'.\t\t\n\n");
printf ("Input nilai a: ");
scanf ("%d",&a);
printf("\n");
if(a == 0){
printf("Nilai faktorial = 0\n");
}else{
hasil = a;
b = a - 2;
for(i=b;i>=1;i--){
c = hasil;
for(j=i;j>=1;j--){
hasil = hasil + c;
}
}
if ( hasil == 0)
printf("Nilai faktorial = 1\n\n");
else
printf ("Nilai faktorial = %d\n\n",hasil);
}
getch();
}
Output Program :
Analisa :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 63 “)
Dalam program ini diminta untuk menampilkan daftar nilai mahasiswa. Jumlah data yang
diinputkan oleh user kemudian user menginputkan nilai tersebut, lalu menjumlahkan nilai
tersebut
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 64 “)
Bab 6 FUNGSI
A. TUJUAN
B. DASAR TEORI
Fungsi adalah suatu bagian dari program yang dirancang untuk melaksanakan
tugas tertentu dan letaknya dipisahkan dari program yang menggunakannya. Elemen
utama dari program bahasa C berupa fungsi-fungsi, dalam hal ini program dari bahasa C
dibentuk dari kumpulan fungsi pustaka (standar) dan fungsi yang dibuat sendiri oleh
pemrogram. Fungsi banyak digunakan pada program C dengan tujuan :
a. Program menjadi terstruktur, sehingga mudah dipahami dan mudah dikembangkan.
Dengan memisahkan langkah-langkah detail ke satu atau lebih fungsi-fungsi, maka
fungsi utama (main()) menjadi lebih pendek, jelas dan mudah dimengerti.
b. Dapat mengurangi pengulangan (duplikasi) kode. Langkah-langkah program yang
sama dan dipakai berulang-ulang di program dapat dituliskan sekali saja secara
terpisah dalam bentuk fungsi-fungsi. Selanjutnya bagian program yang
membutuhkan langkah-langkah ini tidak perlu selalu menuliskannya, tetapi cukup
memanggil fungsi-fungsi tersebut.
Parameter Formal dan Parameter Aktual Parameter formal adalah variabel yang ada pada daftar parameter dalam definisi
fungsi. Pada contoh program di atas misalnya, maka dalam fungsi jumlah() variabel x
dan y dinamakan sebagai parameter formal. Adapun parameter aktual adalah parameter
(tidak selalu berupa variabel) yang dipakai dalam pemanggilan fungsi.
C. PERCOBAAN
1. Buatlah sebuah fungsi yang berfungsi untuk menampilkan sebuah string (di layar)
1. Memecah program dalam fungsi-fungsi yang sederhana
2. Menejelaskan tentang pemrogaman terstruktur
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 65 “)
= “Pilihan Menu” (misalkan nama fungsinya = menu). Fungsi tersebut tidak
memiliki nilai kembalian (return value) dan juga tidak menerima parameter masukan
apapun.
Tulislah prototipe fungsi untuk fungsi tersebut.
Buat function main untuk memanggil function menu() secara berulang-ulang, dengan
jumlah perulangan yang merupakan input dari user.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
void menu(void);
main()
{
int n, i;
printf("Masukkannilaiperulangan : ");
scanf("%d", &n);
for (i=0; i<n; i++)
{
menu();
}
}
void menu(void)
{
printf("Pilihan Menu\n");
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 66 “)
Analisa :
Progam diatas menggunakan dua fungsi. Fungsi void main() digunakan untuk mencetak
sebuah string dan fungsi main() digunakan untuk menginputkan berapa kali string
tersebut dicetak.
2. Buatlah sebuah fungsi untuk menghitung jumlah triangular n (misal nama
fungsinya = triangular). Fungsi tersebut memiliki sebuah parameter berupa bilangan
int (n) yang akan dicari triangularnya serta tidak memiliki nilai kembalian (return
value)
Tulislah prototipe fungsi untuk fungsi tersebut.
Buat function main untuk memanggil function triangular() tersebut dengan nilai n
yang merupakan input dari user.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int triangular (int);
main()
{
int n;
printf("Masukkan nilai n : ");
scanf("%d", &n);
triangular(n);
}
int triangular (int n)
{
int c=0, a;
n;
for (a=0; a<=n; a++)
c=a+c;
printf("Hasilnya = %d\n", c);
return n;
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 67 “)
Analisa :
Program diatas menggunakan dua fungsi. Fungsi main() digunakan untuk memasukkan
berapa banyak triangular dan fungsi int triangular() terdapat looping dari 0 sampai ke n
dimana dalam proses looping tersebut terdapat proses perjumlahan kemudian dicetak.
3. Buatlah sebuah fungsi untuk menghitung nilai bilangan kuadrat (misal nama
fungsinya = kuadrat). Fungsi tersebut memiliki sebuah parameter bertipe float, yaitu
bilangan yang akan dikuadratkan serta memiliki sebuah return value bertipe float,
yaitu hasil kuadratnya
Tulislah prototipe fungsi untuk fungsi tersebut.
Buat function main untuk memanggil function kuadrat() tersebut dengan
bilangan x yang akan dicari kuadratnya merupakan input dari user.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
float kuadrat(float);
main()
{
float bil;
printf("Masukkannilai x : ");
scanf("%f", &bil);
kuadrat(bil);
}
float kuadrat(float bil)
{
float hasil;
hasil;
hasil=bil*bil;
printf("Hasilsetelahdikuadratkanadalah = %g\n", hasil);
return hasil;
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 68 “)
Analisa :
Program diatas menggunakan dua fungsi. Fungsi main() digunakan untuk memasukkan
berapa banyak triangular dan fungsi int triangular() terdapat looping dari 0 sampai ke n
dimana dalam proses looping tersebut terdapat proses perjumlahan kemudian dicetak.
4. Definisikan sebuah fungsi ganjil() yang memilliki sebuah parameter
bilangan bulat dan mengembalikan nilai 1 jika parameter yang diberikan adalah
bilangan ganjil dan mengembalikan nilai 0 jika parameter tsb bukan bilangan ganjil
Tulislah prototipe fungsi untuk fungsi tersebut.
Buat function main untuk memanggil function ganjil() yang menerima input
sebuah bilangan bulat yang akan ditentukan ganjil/genapnya. Tampilkan pesannya
(ganjil/genap) dalam main().
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int ganjil (int);
int main()
{
int bil;
printf("Masukkan Bilangan = ");
scanf("%d", &bil);
ganjil(bil);
if (ganjil(bil)==0)
printf("Bilangan Genap\n");
else if (ganjil(bil)==1)
printf("Bilangan Ganjil\n");
}
int ganjil (int x)
{
if (x%2==0)
return 0;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 69 “)
22
23
24
else
return 1;
}
Output Program :
Analisa :
Program diatas menggunakan dua fungsi. Fungsi main() digunakan untuk memasukkan
suatu nilai dan memanggil fungsi int ganjil dan fungsi int ganjil() digunakan untuk
mencari sisa hasil bagi 2 dari bilangan yagn telah dimasukkan, kemudian memberikan
nilai kembalian yang kembali ke fungsi main() untuk dicetak apakah bilangan tersebut
ganjil atau genap.
5. Buatlah program untuk menghitung faktorial dengan menggunakan 2 fungsi
(main() dan faktorial()). Fungsi faktorial() memberikan return value
bertipe long int yang akan dicetak ke layar dalam fungsi main().
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
long int faktorial (int);
int main()
{
int bil;
printf("Masukkan Bilangan = ");
scanf("%d", &bil);
printf("= %d \n", faktorial(bil));
}
long int faktorial (int x)
{
int i=x, hasil=1;
while (i>0)
{
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 70 “)
19
20
21
22
23
24
25
26
27
printf("%d ", i);
if (i>0)
printf("* ");
hasil*=i;
i--;
}
return hasil;
}
Output Program :
Analisa :
Program diatas menggunakan dua fungsi. Fungsi main() digunakan untuk memasukan
suatu nilai yang sebagai parameter dari faktorialnya dan fungsi long int faktorial (int x)
digunakan untuk menampilkan bilangan mulai dari parameter tersebut secara besar ke
kecil dengan proses looping yang dikurangi dengan 1 kemudian semuanya dikalikan dan
dikembalikan ke fungsi main() untuk menampilkan hasilnya.
6. Buatlah fungsi prima(), yang memberikan nilai balik 1 bila bilangan yang
dimasukkan adalah prima, dan 0 bila bukan bilangan prima.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int cek prima (int);
int main()
{
int bil;
printf("Masukkan Bilangan = ");
scanf("%d", &bil);
if(cek prima(bil)==1)
printf("Bilangan Prima\n");
else
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 71 “)
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
printf("Bukan Bilangan Prima\n");
}
int cek prima (int x)
{
int i, fak=0;
i=1;
while (i<=x)
{
if(x%i==0)
fak++;
i++;
}
if(fak==2)
return 1;
else
return 0;
}
Output Program :
Analisa :
Pada program tersebut menggunakan dua fungsi. Fungsi main() digunakan untuk
memasukkan suatu nilai bilangan yang akan ditentukan apakah bilangan tersebut
termasuk prima atau bukan dan fungsi int cek prima (int x) digunakan untuk mencari
apakah bilangan tersebut termasuk bilangan prima atau bukan dan memiliki nilai
kembalian.
7. Definisikan sebuah fungsi radian() yang berfungsi untuk mengkonversi
besaran sudut dari derajat ke radian dengan rumus sbb : rad = drjt / 180.0f * PI. Fungsi
tersebut memiliki sebuah parameter yaitu derajat yang akan dikonversi, dan memiliki
sebuah return value berupa hasil konversi dalam radian.
Tulislah prototipe fungsi untuk fungsi tersebut.
Buat function main untuk memanggil function radian(), setelah sebelumnya
meminta masukan nilai derajat yang akan dikonversi.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 72 “)
Definisikan PI sebagai sebuah konstanta yang bernilai : 3.14159f
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
include <stdio.h>
float radian (float);
int main()
{
float n;
printf("Masukkan sudut yg akan dikonfersikan = ");
scanf("%f", &n);
printf("Nilai radiannya adalah = %f\n", radian(n));
}
float radian (float drjt)
{
float rad;
rad=drjt/180.0f*3.14159f;
return rad;
}
Output Program :
Analisa :
Program diatas menggunakan dua fungsi. Fungsi main() digunakan untuk memasukan
nilai sudut yang akan dikonversi dan fungsi float radian (float drjt) digunakan untuk
mengkonversi nilai dari derajat ke radian dan memiliki nilai kembalian yang kembali ke
fungsi main() untuk dicetak hasilnya.
8. Definisikan sebuah fungsi float konversi(suhu, asal, tuj), untuk
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 73 “)
mengkonversikan suhu dari Celsius ke Fahrenheit, Celsius ke Reamur,
Fahrenheit ke Celsius, Fahrenheit ke Reamur, Reamur ke Celsius, dan Reamur ke
Fahrenheit. Dimana suhu adalah suhu sumber, asal adalah satuan awal suhu yang
akan dikonversi dan tuj adalah satuan hasil konversi
prototipe fungsi untuk fungsi tersebut.
Buat function main() untuk memanggil function konversi(), setelah
sebelumnya meminta masukan nilai suhu, satuan asal dan satuan tujuannya.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
float konversi (float, char, char);
int main()
{
float suhu, hasil;
char asal, tuj;
printf("masukkan nilai suhu : ");
scanf("%f", &suhu);
printf("masukkan suhu asal: ");
scanf("\n%c", &asal);
printf("masukkan suhu tujuan: ");
scanf("\n%c", &tuj);
hasil = konversi(suhu, asal, tuj);
printf("hasil konversi suhu %g %c = %g %c\n", suhu, asal, hasil, tuj);
}
float konversi(float x, char y, char z)
{
float sum;
if(y == 'C' && z == 'R')
sum = 0.8 * x;
else if(y == 'C' && z == 'F')
sum = (1.8 * x) + 32;
else if(y == 'F' && z == 'C')
sum = 0.55 * (x - 32);
else if(y == 'F' && z == 'R')
sum = 0.4 * (x - 32);
else if(y == 'R' && z == 'F')
sum = (2.25 * x) + 32;
else if(y == 'R' && z == 'C')
sum = 1.25 * x;
return sum;
}
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 74 “)
Output Program :
Analisa :
Program diatas menggunakan dua fungsi. Fungsi main() digunakan untuk memasukkan
nilai suhu, suhu asal, suhu tujuan dan fungsi float konversi(float x, char y, char z)
digunakan untuk mengkonversi suhu dari suhu asal ke suhu tujuan dimana terdapat
proses if else dan mempunyai nilai kembalian yang akan dikembalikan ke fungsi main()
yang kemudian dicetak hasilnya.
9. Definisikanlah function untuk menentukan bilangan terbesar dari 2 bilangan yang
diinputkan di main(). Function mempunyai parameter berupa 2 buah bilangan yang
akan dibandingkan dan memberikan return value berupa bilangan yang terbesar.
Sertakan pula prototype function tsb.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
int maximum (int, int);
int main()
{
int a, b, besar;
printf("MasukkanBilangan a : ");
scanf("%d", &a);
printf("MasukkanBilangan b : ");
scanf("%d", &b);
besar = maximum(a,b);
printf("Bilanganterbesarantara %d dan %d adalah : %d\n", a, b, besar);
}
int maximum (int x, int y)
{
if (x>y)
return(x);
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 75 “)
21
22
23
else
return(y);
}
Output Program :
Analisa :
Program diatas menggunakan dua fungsi. Fungsi main() digunakkan untuk
menginputkan dua buah bilangan yang akan dibandingkan untuk mencari mana yang
terbesar dan fungsi int maximum () digunakan untuk mencari nilai yang terbesar dari
dua bilangan dan memiliki nilai kembalian yang dikembalikan ke fungsi main() untuk
dicetak hasilnya.
10. Buatlah suatu fungsi permutasi() dan kombinasi() untuk menghitung permutasi dan
kombinasi dari suatu pasangan bilangan, yang dinyatakan dengan formula:
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
int permutasi(int, int);
int kombinasi(int, int);
int main()
{
int n, r;
printf("Masukkan n = ");
scanf("%d", &n);
printf("Masukkan r = ");
scanf("%d", &r);
permutasi(n, r);
kombinasi(n, r);
}
int permutasi(int n, int r)
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 76 “)
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{
Int nilai, atas = 1, bawah = 1, x, y;
y = n - r;
for(x=n;x>=1;x--)
{
atas = atas * x;
}
for(x=y;x>=1;x--)
{
bawah = bawah * x;
}
nilai = atas / bawah;
printf("Permutasi = %d\n", nilai);
}
int kombinasi(int n, int r)
{
int x, y, z = 1, atas = 1, bawah = 1, hasil;
y = n - r;
for(x=n;x>=1;x--)
{
atas = atas * x;
}
for(x=y;x>=1;x--)
{
bawah = bawah * x;
}
for(x=r;x>=1;x--)
{
z = z * x;
}
hasil = atas/(z*bawah);
printf("Kombinasi = %d\n", hasil);
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 77 “)
Analisa :
- Pada fungsi main() digunakan untuk memasukan n dan r.
- Padafungsipermutasi, terdapat 2 looping yaitudimulaidari n dankuranghingga 1.
Kurangdidapatdari n-r. Didalam looping terjadiperkalianuntukmendapatkanfaktordari
n danfaktordarikurang. Untukpermutasididapatdarifaktordari n / faktordarikurang
- Padafungsikombinasi, terdapat 3 looping yaitudimulaidari n, r dankuranghingga 1.
Kurangdidapatdari n-r. Didalam looping terjadiperkalianuntukmendapatkanfaktordari
n, faktordari r danfaktordarikurang. Untukkombinasididapatdarifaktordari n / (
faktordarikurang * faktordari r )
11. Buatlah sebuah fungsi untuk mengubah dua bilangan masukan, masing-masing
dinaikkan dengan 2. Masukan dilakukan di main(). Selanjutnya tampilkan hasil
akhir bilangan setelah dirubah di main().
Gunakan pass by reference !
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
void tambah(int* nilai1, int* nilai2);
int main()
{
int nilai1, nilai2;
printf("Masukkan nilai 1 = ");
scanf("%d", &nilai1);
printf("Masukkan nilai 2 = ");
scanf("%d", &nilai2);
tambah(&nilai1, &nilai2);
printf("Hasil setelah dinaikan adalah : %d, %d\n", nilai1, nilai2);
}
void tambah(int* x, int* y)
{
*x=*x+2;
*y=*y+2;
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 78 “)
Analisa :
Program diatas menggunakan dua fungsi. Fungsi main() digunakan untuk mengiputkan
bilangan dan fungsi tambah() digunakan untuk menaikkan bilangan tersebut dengan cara
menjumlahkannya dengan 2 kemudian menampilkan hasilnya.
12. Definisikanlah fungsi main(), masukan() dan average(), sebagai berikut
Fungsi masukan() menerima satu parameter berupa jumlah data yang akan
dimasukkan dan memberikan return value berupa nilai total dari seluruh data yang
dimasukkan. Fungsi ini bertugas menerima masukan data sebanyak n kali dan
sekaligus menghitung total nilai seluruh data.
Fungsi average() menerima dua parameter berupa jumlah data yang telah
dimasukkan dan nilai total seluruh data. Fungsi ini memberikan return value
berupa nilai rata-rata dari seluruh data yang dimasukkan.
Pada fungsi main()mintalah masukan jumlah data yang akan diinputkan.
Selanjutnya lakukan pemanggilan fungsi masukan() dan average(),
kemudian tampilkan nilai rata-rata dari seluruh datanya.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<stdio.h>
float masukkan(float);
float average(float, float);
int main()
{
float n;
printf("Masukkan banyak data = ");
scanf("%g", &n);
printf("Rata-rata = %.2g\n", average(n,masukkan(n)));
}
float masukkan(float a)
{
float i, nilai, hasil=0;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 79 “)
19
20
21
22
23
24
25
26
27
28
29
30
31
32
for(i=1; i<=a; i++)
{
printf("Data ke-%g bernilai = ", i);
scanf("%g", &nilai);
hasil=hasil+nilai;
}
return hasil;
}
float average(float b, float hasil)
{
return hasil/b;
}
Output Program :
Analisa :
Program diatas menggunakan tiga fungsi. Fungsi main() digunakan untuk memasukan
nilai banyak data, fungsi masukkan () digunakan untuk memasukkan data melalui proses
looping dari 1 sampai ke banyak data dan menjumlahkannya tetapi tidak ditampilkan
hasilnya akan tetapi langsung masuk ke fungsi average () untuk menghitung rata-rata dan
mengembalikan ke fungsi main() untuk dicetak hasilnya.
13. Definisikanlah fungsi-fungsi sebagai berikut :
Fungsi f_to_i() untuk mengubah ukuran dari satuan kaki (feet) ke inci
Fungsi i_to_cm() untuk mengubah ukuran dari satuan inci ke centimeter
Fungsi c_to_m()untuk mengubah ukuran dari satuan centimeter ke meter
Dalam main() mintalah masukan ukuran dalam satuan kaki (feet) kemudian lakukan
konversi sampai mendapatkan keluaran berupa ukuran dalam meter. Tentukan
jumlah dan tipe parameter dan return value yang dibutuhkan
Keterangan : 1 kaki = 12 inchi, 1 inchi = 2.54 cm, 100 cm = 1 meter
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 80 “)
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include<stdio.h>
float f_to_i(float);
float i_to_cm(float);
float c_to_m(float);
int main()
{
float f;
printf("Mengkonversi ukuran dalam satuan kaki ke meter\n");
printf("Masukkan ukuran dalam satuan kaki (feet): ");
scanf("%f", &f);
printf("Hasil konversi adalah = %.2f meter.\n", c_to_m(i_to_cm(f_to_i(f))));
}
float f_to_i(float a)
{
float inci;
inci = 12*a;
return inci;
}
float i_to_cm(float b)
{
float centi;
centi = b*2.54f;
return centi;
}
float c_to_m(float c)
{
float meter;
meter = c/100;
return meter;
}
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 81 “)
Output Program :
Analisa :
Program tersebut terdapat 4 fungsi. Fungsi main() digunakan untuk memasukan suatu
ukaran yang akan dikonversi, fungsi f_to_i() untuk mengkonversi dari satuan kaki ke
inchi dan langsung meneruskan ke fungsi i_to_cm () untuk mengkonversi dari satuan
inchi ke cm dan langsung meneruskan ke fungsi cm_to_m () untuk mengkonversi dari
satuan cm ke meter dan langsung mengembalikan fungsi main() untuk kemudian dicetak
hasilnya.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 82 “)
Bab 7 ARRAY
A. TUJUAN
B. DASAR TEORI
Dalam beberapa literatur, array sering disebut (diterjemahkan) sebagai larik.
Array adalah kumpulan dari nilai-nilai data bertipe sama dalam urutan tertentu yang
menggunakan sebuah nama yang sama. Nilai-nilai data di suatu array disebut dengan
elemen-elemen array. Letak urutan dari elemen-elemen array ditunjukkan oleh suatu
subscript atau indeks.
Contoh pendeklarasian array : float nilai_tes[5];
Inisialisasi Array Berdimensi Satu
Sebuah array dapat diinisialisasi sekaligus pada saat dideklarasikan. Untuk
mendeklarasikan array, nilai-nilai yang diinisialisasikan dituliskan di antara kurung
kurawal ({}) yang dipisahkan dengan koma.
int jum_hari[12] =
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
Array Berdimensi Dua
Array berdimensi satu dapat disimpan pada sebuah array berdimensi dua. Pendeklarasian
array berdimensi dua adalah sebagai berikut :
int data_lulus[4][3];
Array Berdimensi Banyak.
C memungkinkan untuk membuat array yang dimensinya lebih dari dua. Bentuk
umum pendeklarasian array berdimensi banyak :
tipe nama_var[ukuran 1][ukuran2}…[ukuranN];
sebagai contoh :
int data_huruf[2][8][8];
1. Menjelaskan array berdimensi satu
2. Menjelaskan array berdimensi banyak
3. Menjelaskan array sebagai parameter fungsi
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 83 “)
C. PERCOBAAN
1. Deklarasikan sebuah variabel array of int, selanjutnya isi array tsb kemudian tampilkan
isi variabel tersebut menggunakan statement for(). Ingat apabila jumlah deklarasi index
adalah n maka nilai index-nya adalah dimulai dari 0 sampai dengan n-1.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <conio.h>
#define maks 100
void input (int);
int main(){
int n;
printf("Masukkan batas n: ");
scanf("%d", &n);
input(n);
getch();
}
void input (int n){
int a[maks],i;
for(i=0; i<n; i++){
printf("masukkan data ke-%d = ", i+1);
scanf("%d", &a[i]);
}
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan data sebanyak kurang dari n,
yang dimana n tersebut diinputkan oleh user. Program ini menggunakan fungsi, pada
fungsi main() digunakan untuk menginputkan n dan memanggil fungsi array(), sehingga
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 84 “)
pada fungsi array() digunakan untuk proses looping mulai dari indeks[0] sampai kurang
dari n-1 dan memasukkan data mulai 1, karena data ke 1 itu indeks [0] sehingga yang
tampil hanya bilangan sebelum angka n.
2. Deret fibonacci adalah deret yang dimulai dengan dua angka yang bernilai 0 dan
1, kemudian deret ketiga ditentukan dari penjumlahan kedua angka tersebut,
sedangkan deret keempat ditentukan dari dua angka sebelumnya begitu seterusnya.
Sehingga didapatkan deret fibonanci sebagai berikut: 0 1 1 2 3 5 8 13 21 …
Buatlah program untuk meminta input dari user berupa sebuah bilangan, kemudian
tampilkan deret fibonacci mulai dari 1 sampai dengan bilangan tsb.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <conio.h>
void fibonacci (int);
int main()
{
int n;
printf("Masukkan batas n : ");
scanf("%d",&n);
fibonacci (n);
printf("\n");
getch();
}
void fibonacci (int n){
int i, a[100];
for(i=0;i<n;i++){
if(i==0){
a[i]=0;
printf("0 ");
}else if(i==1){
a[i]=1;
printf("1 ");
}else{
a[i]=a[i-1]+a[i-2];
printf(" %d ", a[i]);
}
}
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 85 “)
Analisa :
Dalam program ini diminta untuk menampilkan bilangan fibonaci, dimulai dari 0 sampai
n, n merupakan bilangan yang diinputkan oleh user. Jika indeks[0] maka cetak 0, jika
indeks[1] maka cetak 1, jika tidak maka melakukan proses
a[i]=a[i-1]+a[i-2] kemudian di cetak.
3. Buat penjumlahan dua matriks A[2][2]dengan B[2][2]. Hasil penjumlahan tersebut
disimpan dalam matrik C. Tampilkan di layar masing-masing isi dari matriks A, B dan C
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <conio.h>
void Input_A(int baris, int kolom);
void Input_B(int baris, int kolom);
void jumlah(int baris, int kolom);
int A[5][5], B[5][5], C[5][5];
int main(){
int b,k;
printf("Masukkan ordo matriks(2-5) = ");
scanf("%d * %d", &b,&k);
jumlah(b, k);
getch();
}
void Input_A(int baris, int kolom){
int i,j;
printf("Input Matriks A :\n");
for(i=0;i<baris;i++){
for(j=0;j<kolom;j++){
printf("A[%d][%d] = ", i,j);
scanf("%d", &A[i][j]);
}
}
printf("\nHasil Inputan A:\n\n");
for(i=0;i<baris;i++){
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 86 “)
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
for(j=0;j<kolom;j++){
printf("%d ",A[i][j]);
}
printf("\n\n");
}
}
void Input_B(int baris, int kolom){
int i,j;
printf("Input Matriks B :\n");
for(i=0;i<baris;i++){
for(j=0;j<kolom;j++){
printf("B[%d][%d] = ", i,j);
scanf("%d", &B[i][j]);
}
}
printf("\nHasil Inputan B:\n\n");
for(i=0;i<baris;i++){
for(j=0;j<kolom;j++){
printf("%d ",B[i][j]);
}
printf("\n\n");
}
}
void jumlah(int baris, int kolom){
int i,j;
Input_A(baris,kolom);
Input_B(baris,kolom);
printf("\n\nHasil Penjumlahan : \n\n");
for(i=0;i<baris;i++){
for(j=0;j<kolom;j++){
C[i][j]=A[i][j] + B[i][j];
printf("%d ",C[i][j]);
}
printf("\n\n");
}
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 87 “)
Analisa :
Dalam program ini diminta untuk menampilkan perhitungan penjumlahan matriks,
dimulai dengan memilih matriks, kemudian menginputkan matriks A dan matriks B,
kemudian proses perhitungan, jika sudah selesai maka dicetak hasil dari penjumlahan
tersebut.
4. Buatlah sebuah variabel array of int yang memiliki ukuran MAKS. Dengan
menggunakan looping for(), masukkan sebanyak n data ke dalam array tsb
kemudian carilah nilai terbesar yang ada dalam array tsb
Listing Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 88 “)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h>
#include<conio.h>
#define maks 100
void input(int n);
int main(){
int n;
tanya:
printf("Berapa banyak data = ");
scanf("%d", &n);
if(n>maks){
goto tanya;
}
input(n);
getch();
}
void input(int n){
int a[maks], i, max;
for(i=0; i<n; i++){
printf("masukkan data ke-%d = ", i+1);
scanf("%d", &a[i]);
if(i==0){
max=a[0];
}
else{
if(max<=a[i])
max=a[i];
}
}
printf("max =%d", max);
}
Output Program :
Analisa :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 89 “)
Dalam program ini sama dengan program no 1, hanya saja program ini di minta untuk
mencari dan menampilkan bilangan maxnya.
5. Buatlah program yang terdiri atas :
Fungsi input() yang bertugas menanyakan jumlah data sekaligus memasukkan data
bilangan sebanyak yang diminta ke dalam array nilai[]
Fungsi findmax()yang bertugas mencari nilai terbesar yang ada pada array nilai[] tsb
fungsi main() yang memanggil fungsi input() dan fungsi findmax() , selanjutnya
menampilkan nilai terbesar yang ada pada array nilai[]
Petunjuk : jadikan array sebagai parameter fungsi
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<stdio.h>
#include<conio.h>
#define maks 100
void input (int);
int findmax(int[],int);
int main(){
int n;
tanya:
printf("Berapa banyak data = ");
scanf("%d", &n);
if(n>maks){
goto tanya;
}
input(n);
getch();
}
void input (int n){
int a[maks], max, i;
for(i=0; i<n; i++){
printf("masukkan data ke-%d = ", i+1);
scanf("%d", &a[i]);
}
max=findmax(a, n);
printf("\nmax = %d", max);
}
int findmax(int a[maks], int n){
int i, max;
for(i=0; i<n; i++){
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 90 “)
30
31
32
33
34
35
36
37
38
39
if(i==0){
max=a[0];
}
else{
if(max<=a[i])
max=a[i];
}
}
return max;
}
Output Program :
Analisa :
Dalam program ini diminta untuk menampilkan data sebanyak kurang dari n,
yang dimana n tersebut diinputkan oleh user. Program ini menggunakan fungsi, pada
fungsi main() digunakan untuk menginputkan n dan memanggil fungsi array(), sehingga
pada fungsi input() digunakan untuk proses looping mulai dari indeks[0] sampai kurang
dari n-1 dan memasukkan data mulai 1, karena data ke 1 itu indeks [0] sehingga yang
tampil hanya bilangan sebelum angka n. Kemudian memanggil fungsi findmax(), fungsi
ini digunakan untuk mencari dan menampilkan bilangan max.
6. Diketahui daftar nilai siswa sebagai berikut:
Buatlah program untuk menampilkan laporan sebagai berikut:
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 91 “)
Petunjuk: Gunakan variable array dua dimensi untuk menyimpan data
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include<stdio.h>
#include<conio.h>
#define maks 100
void input(int n);
int main(){
int n;
tanya:
printf("Berapa banyak data = ");
scanf("%d", &n);
if(n>maks){
goto tanya;
}
input(n);
getch();
}
void input(int n){
int a[maks], i, max;
for(i=0; i<n; i++){
printf("masukkan data ke-%d = ", i+1);
scanf("%d", &a[i]);
if(i==0){
max=a[0];
}
else{
if(max<=a[i])
max=a[i];
}
}
printf("max =%d", max);
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 92 “)
Analisa :
Dalam program ini diminta untuk menampilkan daftar nilai, dengan menginputkan nilai
bahasa inggris, matematika, dan digital yang diinputkan oleh user, kemudian mencari
rata-ratanya.
7. Buat program untuk menampilkan tabel berikut ini dengan menggunakan looping for()
dan 2 buah array :
x[] sbg array berdimensi satu yang diinisialisasi dgn sudut 0 s/d 360 data[] sbg array
berdimensi dua. data adalah array yg berisi nilai sin, cos dan tan dari masingmasing nilai
sudut yang ada dalam array x.
Petunjuk : gunakan fungsi radian() untuk mengkonversi nilai derajat menjadi radian.
rad = drjt / 180.0 * PI.
PI = 3.14159
Listing Program :
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define pi 3.14159
float rad (int x);
int main(){
int x[]={0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330, 360}, i, j;
double data[13][3];
float r;
printf("------------------------------------\n");
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 93 “)
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
printf(" x | sin x | cos x | tan x |\n");
printf("------------------------------------\n");
for(i=0; i<13; i++){
printf(" %-6d |",x[i]);
r=rad(x[i]);
for(j=0; j<3; j++){
if(j==0){
data[i][j]=sin(r);
printf(" %-6.0f |", data[i][0]);
}else if(j==1){
data[i][j]=cos(r);
printf(" %-6.0f |", data[i][1]);
}else if(j==2){
data[i][j]=tan(r);
printf(" %-6.0f |", data[i][2]);
}
}
printf("\n");
}
printf("------------------------------------\n");
getch();
}
float rad (int x){
float radian;
radian=(x/180.0*pi);
return (radian);
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 94 “)
Analisa :
Dalam program ini diminta untuk menampilkan besar sudut x sesuai dari sin x, cos x, dan
tan x. Sudut sudah diinisialisasikan kemudian melakukan proses dengan rumus
radian=(x/180.0*pi).
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 95 “)
Bab 8 STRING
A. TUJUAN
B. DASAR TEORI
Konstanta String
Suatu konstanta string ditulis dengan diawali dan diakhiri tanda petik ganda,
misalnya:
“ABCDE”
Variabel String
Variabel string adalah variabel yang dipakai utuk menyimpan nilai string.
Misalnya :
char name[15];
merupakan instruksi untuk mendeklarasikan variabel string dengan panjang maksimal 15
karakter (termasuk karakter NULL). Deklarasi tersebut sebenarnya tidak lain merupakan
deklarasi array bertipe char.
Inisialisasi String
Suatu variabel string dapat diinisialisasi seperti halnya array yang lain. Namun
tentu saja elemen terakhirnya haruslah berupa karakter NULL. Sebagai contoh :
char name[] = {'R','I','N', 'I',‟\0‟};
yang menyatakan bahwa name adalah variabel string dengan nilai awal berupa string :
“RINI” . Bentuk inisialisasi yang lebih singkat :
char name[] = “RINI”;
Fungsi strcpy() Digunakan untuk Menyalin Nilai String
1. Memahamkan konsep tipe data
2. Memahamkan string sebagai array dari
3. Dapat memasukkan dan menampilkan isi variabel
4.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 96 “)
Bentuk pemakaian : #include <string.h>
strcpy(tujuan, asal);
Fungsi strlen()
untuk Mengetahui Panjang Nilai String Bentuk pemakaian :
#include <string.h
strlen(var_string);
Fungsi strcat()
untuk Menggabung Nilai String
Bentuk pemakaian :
#include <string.h
strcat(var_string);
Fungsi strcmp()
untuk Membandingkan Dua Nilai String
Fungsi strchr()
untuk Mencari Nilai Karakter dalam String
Bentuk pemakaian :
#include <string.h>
strchr(var_string, kar);
C. PERCOBAAN
1. Definisikanlah sebuah fungsi untuk menghitung panjang dari string yang menjadi
parameternya (misalnya : pjgstr()). Pada fungsi main()terimalah input string yang
akandihitung panjang karakternya.
Selanjutnya panggil fungsi pjgstr()untuk mendapatkan panjang string dan tampilkan
hasilnya di main()
Listing Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 97 “)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int pjgstr(char *);
int main(){
char str[100];
printf("Masukkan string : "); fflush(stdin); gets(str);
printf("Panjang string : %d", pjgstr(str));
getchar();
}
int pjgstr(char *string){
int i=0;
while(string[i]!='\0'){
i++;
}
return i;
}
Output Program :
Analisa :
Fungsi pjgstr() digunakan untuk menentukan panjang karakter dari suatu string. Panjang
dari string ini didapat dengan menggunakan loop while yang menggunakan acuan kondisi
element ke-i bernilai null („\0‟) atau tidak. Jika element ke-i dari string tidak bernilai null
maka loop akan terus berjalan dan nilai i akan bertambah. Return value dari fungsi ini
merupakan index i yang merupakan index element null dari variabel string.
2. Copy-lah program dari soal no 2. Definisikanlah sebuah fungsi untuk membalik string
yang menjadi parameternya (misalnya : balikstr())
Pada fungsi main() terimalah input string yang akan dihitung panjang karakternya dan
dibalik. Selanjutnya panggil fungsi pjgstr()dan balikstr()untuk mendapatkan kebalikan
dari string input dan tampilkan hasilnya di main()
Listing Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 98 “)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
int pjgstr(char *);
char *blkstr(char *);
int main(){
char str[100];
printf("Masukkan string : "); fflush(stdin); gets(str);
printf("Panjang string : %d\n", pjgstr(str));
printf("Hasil : %s", blkstr(str));
getchar();
}
int pjgstr(char *string){
int i=0;
while(string[i]!='\0'){
i++;
}
return i;
}
char *blkstr(char *string){
int i=0, n=pjgstr(string)-1;
char temp;
while(i<pjgstr(string)/2){
temp = string[n];
string[n] = string[i];
string[i] = temp;
i++;
n--;
}
i++;
return string;
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 99 “)
Analisa :
Fungsi blkstr() digunakan untuk membalik karakter dari suatu string (ex. SAYA
AYAS). Agar dapat menyelesaikan kasus ini kita menggunakan fungsi pjgstr() yang telah
dibuat di kasus nomor 1. Untuk membalik string di fungsi blkstr() menggunakan loop
dari 0 sampai setengah dari panjang string. Di dalam loop tersebut terdapat logika
penukaran antar elemen ke i dengan elemen ke n. Indek ke i akan bertambah dan index ke
n akan berkurang nilainya.
3. Definisikanlah sebuah fungsi untuk meng-copy string dengan menjadikan string asal dan
string tujuan menjadi parameter fungsi tsb (misalnya : copystr()).
Pada fungsi main() terimalah input string yang akan di-copy. Selanjutnya panggil fungsi
copystr() untuk mengcopy string asal ke string tujuan, tampilkan hasilnya berupa kedua
string (asal dan tujuan) di main().
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# #include <stdio.h>
#include <string.h>
void cpystr(char *, char *);
char *blkstr(char *);
int main(){
char asal[50]="", tujuan[50]="";
printf("Masukkan string asal : "); fgets(asal,sizeof asal, stdin);
cpystr(tujuan, asal);
printf("Nilai string tujuan : %s\n", tujuan);
printf("Nilai string asal : %s\n", asal);
getchar();
}
int pjgstr(char *string){
int i=0;
while(string[i]!='\0'){
i++;
}
return i;
}
void cpystr(char *tujuan, char *asal){
int i=0, m=pjgstr(asal)-1;
while(i<m){
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 100 “)
27
28
29
30
tujuan[i] = asal[i];
i++;
}
}
Output Program :
Analisa :
Fungsi cpystr digunakan untuk menyalin value dari satu string ke string lain. Hal ini
dapat dilakukan dengan cara menggunakan loop dari 0 sampai dengan panjang dari string
sumber. Di dalam loop elemen index ke i dari string tujuan akan diisi dengan elemen
index ke i dari string sumber.
4. Ulangilah soal nomor 1, 2 & 3 pada modul prakt String 1 dengan menggunakan fungsi-
fungsi standard (built-in functions)
Listing Program :
Nomor 1 fungsi pjgstr() dapat diganti strlen();
1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include <string.h>
int main(){
char str[100];
printf("Masukkan string : "); fflush(stdin); gets(str);
printf("Panjang string : %d", strlen(str));
getchar();
}
Nomor 2 fungsi blkstr() dapat diganti strrev ();
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 101 “)
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <string.h>
int main(){
char str[100];
printf("Masukkan string : "); fflush(stdin); gets(str);
printf("Panjang string : %d\n", strlen(str));
printf("Hasil : %s", strrev(str));
getchar();
}
Nomor 3 fungsi cpystr () dapat diganti strcpy();
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <string.h>
int main(){
char asal[50]="", tujuan[50]="";
printf("Masukkan string asal : "); fgets(asal,sizeof asal, stdin);
strcpy(tujuan, asal);
printf("Nilai string tujuan : %s\n", tujuan);
printf("Nilai string asal : %s\n", asal);
getchar();
}
5. Definisikanlah sebuah fungsi untuk membandingkan dua buah string yang menjadi
parameternya secara CASE SENSITIVE (misalnya : bandingstr1()).
Pada fungsi main() terimalah input 2 buah string yang akan dibandingkan.. Selanjutnya
panggil fungsi bandingstr1() untuk membandingkan kedua string tsb dan tampilkan
hasilnya di main()
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <string.h>
int bandingstr1(char *string1, char *string2);
int main(){
int i;
char str1[20], str2[20];
printf("Kata 1 : " );gets(str1);
printf("Kata 2 : " );gets(str2);
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 102 “)
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
printf("%d", bandingstr1(str1, str2));
scanf("%d", &i);
return 0;
}
int bandingstr1(char *string1, char *string2){
int n1 = strlen(string1), n2 = strlen(string2);
int i=0, status=0;
while(i<n1){
if(i+1>n2)
break;
if(string1[i] == string2[i]){
i++;
continue;
}else if(string1[i] < string2[i])
status = -1;
else
status = 1;
i++;
}
if(status==0){
if(n1==n2)
status=0;
else if(n1<n2)
status=-1;
else
status=1;
}
return status;
}
Output Program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 103 “)
Analisa :
Agar dapat memperoleh hasil dari perbandingan 2 string tersebut maka langkah-langkah
penyelesaianya adalah dengan cara membandingkan setiap element dengan index yang
sama antar 2 string tersebut.
6. Definisikanlah sebuah fungsi untuk membandingkan dua buah string yang menjadi
parameternya secara NON CASE SENSITIVE (misalnya : bandingstr2()).
Pada fungsi main()terimalah input 2 buah string yang akan dibandingkan.. Selanjutnya
panggil fungsi bandingstr2() untuk membandingkan kedua string tsb dan tampilkan
hasilnya di main()
Ket : lihat algoritma Fungsi Banding – NON CASE SENSITIVE
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <string.h>
int bandingstr1(char *string1, char *string2);
int main(){
int i;
char str1[20], str2[20];
printf("Kata 1 : " );gets(str1);
printf("Kata 2 : " );gets(str2);
printf("%d", bandingstr1(str1, str2));
scanf("%d", &i);
return 0;
}
int bandingstr1(char *string1, char *string2){
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 104 “)
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
int n1 = strlen(string1), n2 = strlen(string2);
int i=0, status=0;
while(i<n1){
if(i+1>n2)
break;
if(string1[i] == string2[i] || string1[i] - 32 == string2[i] || string1[i]
== string2[i] - 32){
i++;
continue;
}else if(string1[i] < string2[i])
status = -1;
else
status = 1;
i++;
}
if(status==0){
if(n1==n2)
status=0;
else if(n1<n2)
status=-1;
else
status=1;
}
return status;
}
Output Program :
Analisa :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 105 “)
Alur penyelesainya sama dengan kasus nomor 5, namun ada penambahan kondisi.
Jika di kasus 5 hanya menggunakan perbandingan string1[i] == string2[i] maka di kasus
nomor 6 ini perbandingan yang digunakan string1[i] == string2[i] || string1[i] - 32 ==
string2[i] || string1[i] == string2[i] – 32 yang artinya ascii huruf kapital dan huruf biasa
dianggap sama.
7. Lakukan percobaan untuk membandingkan 2 buah string dengan menggunakan fungsi
strcmp() dan strcmpi(). Analisislah dan berikan kesimpulan tentang perbedaan dan
contoh aplikasi untuk keduanya
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
int main(){
int i;
char str1[20], str2[20];
printf("Kata 1 : " );gets(str1);
printf("Kata 2 : " );gets(str2);
printf("strcmp antara %s dengan %s adalah %d\n",str1,str2,strcmp(str1,
str2));
printf("strcmpi antara %s dengan %s adalah %d",str1,str2,strcmpi(str1,
str2));
scanf("%d", &i);
return 0;
}
Output Program :
Analisa :
Fungsi strcmp digunakan untuk membandingkan 2 string secara Case Sensitif
(Huruf besar dan kecil berpengaruh) sedangkan strcmpi digunakan untuk
membandingkan 2 string secara Non Case Sensitif (Huruf besan dan kecil dianggap
sama)
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 106 “)
Bab 9 POINTER
A. TUJUAN
B. DASAR TEORI
Variabel pointer sering dikatakan sebagai variabel yang menunjuk ke obyek lain. Pada
kenyataan yang sebenarnya, variabel pointer berisi alamat dari suatu obyek lain (yaitu obyek
yang dikatakan ditunjuk oleh pointer). Sebagai contoh, px adalah variabel pointer dan x
adalah variabel yang ditunjuk oleh px. Kalau x berada pada alamat memori (alamat awal)
1000, maka px akan berisi 1000. Sebagaimana diilustrasikan pada gambar di bawah ini
Mendeklarasikan Variabel Pointer Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :
tipe *nama_variabel
dengan tipe dapat berupa sembarang tipe yang sudah dibahas pada bab-bab
sebelumnya,
maupun bab-bab berikutnya. Adapun nama_variabel adalah nama dari variabel
pointer.
Sebagai contoh :
int *px; //contoh 1
1. Menjelaskan tentang konsep dari variabel pointer
2. Mengakses dan mengubah isi dari variabel pointer
3. Menjelaskan tentang Pointer to Array
4. Menjelaskan tentang Pointer to String
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 107 “)
char *pch1, *pch2; //contoh 2
Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu
data bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer
yang menunjuk ke data bertipe char.
Mengatur Pointer agar Menunjuk ke Variabel Lain
Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan
alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel,
operator & (operator alamat, bersifat unary) bisa dipergunakan, dengan menempatkannya di
depan nama variabel. Sebagai contoh, bila x dideklarasikan sebagai variabel bertipe int,
maka &x berarti “alamat dari variabel x”. Adapun contoh pemberian alamat x ke suatu
variabel pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int)
yaitu : px = &x; Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel
x. Setelah pernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke
variabel
Mengakses Isi Suatu Variabel Melalui Pointer
Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer
tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui
pointer (pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan
menggunakan operator indirection (tak langsung) berupa simbol * (bersifat unary).
Contoh penerapan operator * yaitu : *px yang menyatakan “isi atau nilai variabel/data
yang ditunjuk oleh pointer px” . Sebagai contoh jika y bertipe int, maka sesudah dua
pernyataan berikut y akan berisi nilai yang sama dengan nilai x. Kedua pernyataan di atas
sebenarnya dapat digantikan dengan sebuah pernyataan berupa y = x;
Seandainya pada program di atas tidak terdapat pernyataan namun terdapat pernyataan
maka y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk ke variabel x. Hal
seperti ini harap diperhatikan. Kalau program melibatkan pointer, dan pointer belum
diinisialisasi, ada kemungkinan akan terjadi masalah yang dinamakan “bug” yang bisa
mengakibatkan komputer tidak dapat dikendalikan (hang).
Selain itu tipe variabel pointer dan tipe data yang ditunjuk harus sejenis. Bila tidak
sejenis maka akan terjadi hasil yang tidak diinginkan.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 108 “)
C. PERCOBAAN
Untuk setiap program di bawah ini,
– gambarkan ilustrasi alokasi memori dari setiap baris pernyataan yang diproses
– perkirakan hasil eksekusinya
1. Soal
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main(){
int y, x = 87;
int *px;
px = &x;
y = *px;
printf("Alamat x = %p\n", &x);
printf("Isi px = %p\n", px);
printf("Isi x = %d\n", x);
printf("Nilai yang ditunjukolehpx = %d\n", *px);
printf("Nilai y = %d\n", y);
}
Output program :
Alokasi Memori :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 109 “)
Analisa:
Pada awalnya variable x berisi nilai 87 kemudian variable x ditujuk oleh pointer
*px sehingga sekarang nilai dari pointer x adalah alamat dari variable, yaitu 1000 yang
nilainya adalah 87. Setelah itu nilai dari variable yang ditunjuk oleh *px di copikan ke
variable y, sehingga variable y sekarang bernilai 87.
2. Soal
1
2
3
4
5
6
7
8
9
10
11
12
13
#include<stdio.h>
int main(){
float *pu, nu;
float u = 1234.0;
pu = &u;
nu = *pu;
printf("Alamatdari u = %p\n", &u);
printf("Isi pu = %p\n", pu);
printf("Isi u = %lf\n", u);
printf("Nilai yang ditunjukolehpu = %f\n", *pu);
printf("Nilai nu = %f\n", nu);
}
Output program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 110 “)
Alokasi Memori :
Analisa:
Pada awalnya variable u ditunjuk oleh pointer *pu. Sehingga pointer *pu sekarang
bernilai alamat dari variable u. Setelah itu nilai dari variable yang ditunjuk pointer *pu
dicopykan ke variable nu. Tetapi karena berbeda tipe maka nilai dan alamat yang
ditunjuk tidak muncul
3. Soal
1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main(){
float d = 54.5f, *pd;
printf("Isi d mula-mula = %g\n", d);
pd = &d;
*pd += 10;
printf("Isi d sekarang = %g\n", d);
}
Output program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 111 “)
Alokasi Memori :
Analisa :
Pada awalnya variable d berisi 54.5 kemudian ditunjuk oleh pointer *pd. Setelah itu isi
dari pointer *pd ditambah dengan 10 sehingga sekarang variable d bernilai 64.5.
4. Soal
1
2
3
4
5
6
7
8
9
10
#include<stdio.h>
int main(){
int z = 20, s = 30, *pz, *ps;
pz = &z;
ps = &s;
*pz += *ps;
printf("z = %d\n", z);
printf("s = %d\n", s);
}
Output program :
Alokasi Memori :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 112 “)
Analisa:
Pada awalnya variable z bernilai 20 dan variable s bernilai 30 kemudian pointer *pz
menunjuk alamat variable z dan pointer *ps menunjuk alamat variable s. Setelah itu nilai
yang ditunjuk oleh pointer *pz ditambahkan dengan nilai yang ditunjuk oleh pointer *ps.
Sehingga sekarang nilai dari variable z=50 dan variabel s tetap bernilai 30.
5. Soal
1
2
3
4
5
6
7
8
int main(){
char c = 'Q', *cp = &c;
printf("%c %c\n", c, *cp);
c = '/';
printf("%c %c\n", c, *cp);
*cp = '(';
printf("%c %c\n", c, *cp);
}
Output program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 113 “)
Alokasi Memori :
Analisa:
Pada awalnya variable c bernilai „Q‟, kemudian variable c ditunjuk oleh pointer *cp
sehingga pointer *cp bernilai alamat dari variable c yang nilainya ‘Q‟. Setelah itu
variable c diubah nilainya menjadi „/‟ sehingga pointer *cp pun juga bernilai „/‟, lalu nilai
dari pointer *cp diganti dengan „(‟ maka nilai dari variable c juga berubah menjadi „(.‟
6. Soal
1
2
3
4
5
6
7
8
9
#include<stdio.h>
int main() {
int x = 1, y = 2, *ip;
ip = &x;
y = *ip;
*ip = 3;
printf("x = %d, y = %d", x, y);
}
Output program :
Alokasi Memori :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 114 “)
Analisa:
Pada awalnya variable x berisi nilai 87 kemudian variable x ditujuk oleh pointer
*px sehingga sekarang nilai dari pointer x adalah alamat dari variable, yaitu 1000 yang
nilainya adalah 87. Setelah itu nilai dari variable yang ditunjuk oleh *px di copikan ke
variable y, sehingga variable y sekarang bernilai 87.
7. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan
indeksnya menunjukkan alamat elemenpertama dari array (versi 1).
Soal
1
2
3
4
5
6
7
8
9
#include <stdio.h>
int main(){
static int tgl_lahir[] = {16, 4, 1974};
int *ptgl;
ptgl = tgl_lahir;
printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);
printf("Nilai dari tgl_lahir[0] = %d\n", tgl_lahir[0]);
}
Output program :
Alokasi Memori :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 115 “)
Analisa:
Pointer ptgl menunjuk alamat elemen pertama dari array tgl_lahir, karena pada saat
ditunjuk array tidak diikuti indeks. Jadi nilai yang keluar ketika pointer ptgl di tampilkan
hanyalah nilai dari index ke nol array tgl_lahir[].
8. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan
indeksnya menunjukkan alamat elemenpertama dari array (versi 2).
Soal
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
int main()
{
static int tgl_lahir[] = {16, 4, 1974};
int *ptgl, i;
ptgl = tgl_lahir;
printf("Nilai yang ditunjuk oleh ptgl = %d\n", ptgl);
for (i=0; i<3; i++)
printf("Nilai dari tgl_lahir[i] = %d\n", *(ptgl+i));
}
Output program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 116 “)
Alokasi Memori :
Analisa:
Sama seperti nomer 1 yaitu proses pointer to array tgl_lahir. Namun pada soal ini
looping yang dilakukan memanggil nilai dari pointer ptgl menggunakan *(ptgl+i),
maksud dari nilai tersebut adalah setelah selain dia menampilkan setiap nilai dari array
sesuai index pointer tersebut juga menaikkan alamat dari pointer ptgl itu sendiri untuk
menampung nilai array per index, jadi bukan menumpuk pada satu alamat pointer.
9. Hubungan antara pointer dan array. Suatu nama array yang ditulis tanpa dengan
indeksnya menunjukkan alamat elemenpertama dari array (versi 3).
Soal
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
int main()
{
static int tgl_lahir[] = {16, 4, 1974};
int i;
int *ptgl;
ptgl = tgl_lahir;
printf("Nilai yang ditunjuk oleh ptgl = %d\n", *ptgl);
for (i=0; i<3; i++)
printf("Nilai dari tgl_lahir[i] = %d\n", *ptgl++);
}
Output program :
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 117 “)
Alokasi Memori :
Analisa:
Soal ini hamper sama seperti nomer 2 namun yang membedakan looping nilai dari
pointer ptgl menggunakan *ptgl++ , maksud dari nilai tersebut adalah setelah selain dia
menampilkan setiap nilai dari array sesuai index pointer tersebut juga menaikkan alamat
dari pointer ptgl untuk menampung nilai array per index, jadi bukan menumpuk pada
satu alamat pointer. Sama seperti soal no.2 hanya berbeda pada penulisan script saja.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 118 “)
Bab 10 STRUCT
A. TUJUAN
B. DASAR TEORI
Struktur adalah pengelompokan variabel-variabel yang bernaung dalam satu nama
yang sama. Berbeda dengan array yang berisi kumpulan variabel-variabel yang bertipe
sama dalam satu nama, maka suatu struktur dapat terdiri atas variabel-variabel yang
berbeda tipenya dalam satu nama struktur. Struktur biasa dipakai untuk
mengelompokkan beberapa informasi yang berkaitan menjadi sebuah.
Variabel-variabel yang membentuk suatu struktur, selanjutnya disebut
sebagai elemen dari struktur atau field. Dengan demikian dimungkinkan suatu
struktur dapat berisi elemen-elemen data berbeda tipe seperti char, int, float, double,
dan lain-lain. Contoh sebuah struktur adalah informasi data tanggal (date) yang berisi:
- day
- month, dan
- year
Mendefinisikan & Mendeklarasikan Struktur
Suatu struktur didefinisikan dengan menggunakan kata kunci struct. Contoh
pendefinisian sebuah tipe data struktur :
struct date {
int month; int day; int
year;
};
struct date {
1. Memahamkan konsep tipe data
2. Memahamkan string sebagai array dari
3. Dapat memasukkan dan menampilkan isi variabel
4.
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 119 “)
int month, day, year;
C. PERCOBAAN
1. Buatlah 2 var (today & tommorow) bertipe struct date. Isilah var today dengan tanggal
hari ini. Temukan tgl utk var tomorrow.
Keterangan :
- Berikan pengecekan utk akhir bulan
- Berikan pengecekan utk akhir tahun
- Berikan pengecekan utk bulan Feb di tahun kabisat
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
struct date{
int day, month, year;
};
void cetak(date);
void setTommorow(struct date, struct date *);
int main(){
date today, tommorow;
printf("Masukkan tanggal dd-mm-yyyy : "); scanf("%d-%d-
%d",&today.day, &today.month, &today.year);
setTommorow(today, &tommorow);
cetak(tommorow);
scanf("%d", &today.day);
}
void setTommorow(struct date today, struct date *tommorow){
int bulan[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(today.year % 4 ==0)
bulan[1]=29;
(*tommorow).day = today.day + 1;
(*tommorow).month = today.month;
(*tommorow).year = today.year;
if((*tommorow).day > bulan[today.month -1]){
(*tommorow).day = 1;
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 120 “)
29
30
31
32
33
34
35
36
37
38
39
40
(*tommorow).month = today.month + 1;
}
if((*tommorow).month > 12){
(*tommorow).month = 1;
(*tommorow).year = today.year + 1;
}
}
void cetak(struct date temp){
printf("%d-%d-%d\n", temp.day, temp.month, temp.year);
}
Output Program :
Analisa :
Variabel today dan tommorow memiliki tipe struct date sehingga memiliki elemen
tanggal, bulan dan tahun. Untuk menetukan nilai dari variabel tommorow maka
digunakan fungsi setTommorow() dengan parameter struct today dan juga pointer struct
tommorow. Alasan digunakannya struct pointer untuk tommorow agar nilainya dapat
berubah walaupun di fungsi yang tidak sama.
Untuk mempermudah perhitungan jumlah hari dalam tiap bulan, maka jumlah hari
tersebut dimasukkan kedalam array bulan. Setelah itu terdapat kondisi untuk menentukan
apakah tahun sekarang kabisat atau tidak, jika kabisat maka akan mengubah array bulan
dengan index 1 -- > index 1 merupakan cerminan dari bulan februari.
Proses selanjutnya adalah menjumlahkan nilai tanggal di var today dengan angka satu.
Jika hasil penjumlahanya lebih besar dari bulan sekarang maka maka set tanggal menjadi
satu dan tambahkan bulan. Jika hasil bulan melebihi dari tahun maka set bulan menjadi
satu dan tambahkan tahun.
2. Buatlah program sebagai berkut dengan menggunakan array of struct :
Input :
- Nama Mahasiswa
- Nilai Tugas
- Nilai UTS
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 121 “)
- Nilai UAS
Sebanyak n mahasiswa
Output :
Nama Mhs, Nilai Akhir, Nilai Huruf, Keterangan lulus yang ditampilkan secara
mendatar. Nilai Akhir = 20% tugas + 40% UTS + 40% UAS
Nilai huruf dan keterangan lulus (tanyakan Asisten)
- Dengan menggunakan fungsi buatlah fasilitas untuk menampilkan Nilai-nilai dari
mahasiswa yang diinputkan.
- Dengan menggunakan fungsi buatlah fasilitas untuk menampilkan data
mahasiswa yang mempunyai nilai Rata-rata tertinggi.
Listing Program :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <stdlib.h>
struct mahasiswa{
char nama[30];
int tugas, uts, uas;
};
void input(struct mahasiswa data[], int N){
int i=0;
puts("\nMasukkan data Mahasiswa");
while(i<N){
printf("\nMahasiswa ke-%d\n", i+1);
printf("Nama : "); fflush(stdin); gets(data[i].nama);
printf("Nilai Tugas : "); scanf("%d", &data[i].tugas);
printf("Nilai UTS : "); scanf("%d", &data[i].uts);
printf("Nilai UAS : "); scanf("%d", &data[i].uas);
i++;
}
}
double getRata(struct mahasiswa data[], int index){
return (0.2 * data[index].tugas + 0.4 * data[index].uts + 0.6 *
data[index].uas);
}
char getGrade(double nilai){
if(nilai >= 90)
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 122 “)
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
60
return 'A';
else if(nilai >= 80)
return 'B';
else if(nilai >= 70)
return 'C';
else if(nilai >= 50)
return 'D';
else return 'E';
}
int getIndexMax(struct mahasiswa data[], int N){
int i=0, hasil=0;
double max = 0;
while(i<N){
if(getRata(data,i) > max){
max = getRata(data,i);
hasil = i;
}
i++;
}
return hasil;
}
void cetak(struct mahasiswa data[], int N){
system("cls");
puts("DAFTAR NILAI");
puts("MATAKULIAH KONSEP PEMROGAMAN");
puts("================================================
==========================");
printf("No\t Nama\t\t\t\t\t Nilai\t\t Grade\n");
printf("\t Mahasiswa\t\t Tugas\t UTS\t UAS\t Akhir\n");
puts("================================================
==========================");
int i=0;
while(i<N){
printf("%d\t %s\t\t %-2d\t %-2d\t %-2d\t %-4.2lf\t
%c\n",i+1,data[i].nama, data[i].tugas, data[i].uts, data[i].uas, getRata(data,i),
getGrade(getRata(data,i)));
i++;
}
puts("================================================
==========================");
printf("Total Mahasiswa = %d\n", i);
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 123 “)
printf("\nNilai tertinggi\n");
printf("Nama : %s\n", data[getIndexMax(data,N)].nama);
printf("Nilai : %4.2lf\n", getRata(data, getIndexMax(data,N)));
}
Output Program :
Analisa :
Struct mahasiswa memiliki element nama dengan tipe string dan 3 elemen bertipe
integer yaitu tugas, uts, dan uas. Fungsi input digunakan untuk memasukkan data
/* Buku Kumpulan Soal-Soal Pemorgaman C */ printf(“ Page 124 “)
dan cetak digunakan untuk mencetak data struct ke layar. Rata- rata nilai di dapat dari
fungsi getRata() dan grade nilai di dapat dari fungsi getGrade.
~ End of Page ~