Program ini membuat algoritma untuk menghitung harga tiket kereta api berdasarkan jurusan, kelas, dan jumlah tiket yang dipesan. Program akan meminta input jurusan, kelas, dan jumlah tiket lalu menghitung harga tiket, total harga, diskon, dan pembayaran akhir berdasarkan kombinasi input tersebut.
2. 2
MODUL I
PENDAHULUAN
1.1 Tujuan
Praktikum Algoritma dan Pemrograman bertujuan untuk :
• Memberikan pengetahuan kepada praktikan tahapan-tahapan dalam pembuatan
algoritma.
• Praktikan bisa membuat algoritma untuk memecahkan suatu masalah secara logis.
• Praktikan bisa membuat program dari suatu algoritma.
• Praktikan bisa membiasakan diri untuk menyelesaikan program secara terstruktur
dengan menggunakan algoritma.
• Praktikan bisa menerapkan algoritma pada suatu kasus tertentu yang diberikan.
• Praktikan dapat membuat algoritma yang diperlukan dalam membuat suatu program
• Menunjang mata kuliah Algoritma dan Pemrograman
• Memberikan wawasan kepada praktikan untuk menghadapi mata kuliah Struktur Data,
Pemrograman Berbasis Objek, Tugas Besar Proyek I dan II, Kerja Praktek dan Tugas Akhir.
• Membiasakan praktikan untuk menyelesaikan tugas/pekerjaan tepat waktu sesuai yang telah
dijadwalkan.
1.2 Teori
1.2.1 Definisi Algoritma
“Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara
sistematis”.
Kata Logis merupakan kata kunci dalam Algoritma. Langkah-langkah dalam Algoritma
harus logis dan harus dapat ditentukan bernilai salah atau benar. Notasi Algoritma dapat
diterjemahkan ke dalam berbagai bahasa pemrograman.
Suatu rancangan ilmiah biasanya memiliki kaidah-kaidah tertentu serta notasi-notasi yang
bersifat baku, demikian juga algoritma. Notasi algoritma sering juga disebut pseudocode.
Pseudocode pada dasarnya mengandung kata-kata kunci serta frasa bahasa inggris yang
dimaksudkan untuk mengendalikan aliran kendali
pada komputer.
3. 3
Struktur Dasar Algoritma
1.2.2 Bahasa C
Struktur dari program C dapat dilihat sebagai kumpulan dari sebuah atau
lebih fungsi-fungsi. Fungsi pertama yang harus ada di program C adalah main().
Suatu fungsi di program C dibuka dengan kurung kurawal ({) dan ditutup dengan
kurung kurawal tutup (}). Di antara kurung kurawal dapat dituliskan statemen
program C. Berikut ini adalah struktur dari program C:
Bahasa C dikatakan sebagai bahasa pemrograman terstruktur karena strukturnya
menggunakan fungsi-fungsi sebagai program-program bagian (subroutine). Fungsi-fungsi selain
fungsi utama merupakan program-program bagian. Fungsi-fungsi ini dapat ditulis setelah fungsi
utama atau diletakan di file pustaka (library). Jika fungsi-fungsi ini diletakkan di file pustaka dan
akan dipakai di suatu program, maka nama file judulnya (header file) harus dilihatkan di dalam
program yang menggunakannya dengan prepocessor directive #include.
4. 4
Memecah Baris Statemen
Suatu statemen di program C yang panjang dapat ditulis dalam beberapa baris penulisan.
Akhir dari suatu baris yang menggunakan tanda ’’ menunjukkan bahwa baris berikutnya adalah
baris sambungannya.
Contoh: Printf(”ini adalah bentuk string yang panjang yang ditulis
dalam dua baris penulisan n”);
Contoh Algoritma 1:
Program Algoritma 1:
//Menuliskan Nilai A pada layar monitor
#include<stdio.h>
main() {
//Deklarasi
char Nama[20];
int A,B;
A=25;
B=100;
A=B;
//Deskripsi
printf("Masukkan Nama : "); scanf("%s",Nama);
printf("%s ",Nama);
printf("Mendapatkan Nilai : %dn",A);
}
5. 5
1.2.3 Elemen Dasar Yang Diperlukan Dalam C
1. Komentar
Komentar program didefinisikan sebagai bagian dari sintaks program yang
tidak ikut dibaca pada saat proses kompilasi.
a. Menggunakan Tanda //, tanda ini digunakan untuk menuliskan komentar
yang banyaknya hanya satu baris
b. Menggunakan Tanda /*…*/, tanda ini digunakan untuk menuliskan
komentar yang banyaknya satu baris atau lebih.
2. Identifier
Identifier adalah suatu pengenal atau pengidentifikasi yang kita deklarasikan
agar kompiler dapat mengenalinya. Identifier sendiri dapat berupa nama
variable, konstanta, dan fungsi.
Identifier yang berperan sebagai variabel dan konstanta berfungsi untuk
menampung sebuah nilai yang digunakan dalam program. Contoh program
dari algoritma 1 di atas, maka a,b, dan nama merupakan identifier. Dalam
menentukan atau membuat identifier dalam program, kita harus
memperhatikan hal-hal berikut:
a. Bahasa C bersifat case sensitive, artinya bahasa C membedakan variable yang ditulis
dengan huruf kapital dan huruf kecil.
b. Identifier tidak boleh berupa angka atau diawali dengan karakter yangberupa angka.
Contoh: int 2x (salah), int 1000 (salah), int x2 (benar).
c. Identifier tidak boleh mengandung spasi. Contoh: int bilangan bulat;(salah), int
bilangan_bulat; (benar), int _bilanganbulat (benar).
d. Identifier tidak boleh menggunakan karakter-karakter simbol (#, $, %, dll).
e. Identifier tidak boleh menggunakan kata kunci (keyword) yang terdapat pada C. Contoh:
int break; (salah).
f. Nama identifier sebaiknya disesuaikan dengan kebutuhannya, artinya jangan sampai
orang lain bingung hanya karena salah dalam penamaan identifier.
g. Sebisa mungkin hindarilah penggunaan nama identifier yang sama dengan identifier yang
digunakan oleh C. Identifier sendiri dibagi menjadi 2 (dua) yaitu:
1. Konstanta
Konstanta adalah jenis identifier yang bersifat konstan atau tetap. Suatu konstanta harus
didefinisikan terlebih dahulu di awal program. Konstanta dapat bernilai integer, pecahan,
karakter dan string, contoh: 20; 3.14; 2.50005; ‘X’; ‘Bahasa C’.
Contoh : #define PHI 3.14
#define nim "1043304"
#define nama "Tasya Tembem"
6. 6
2. Variabel
• Variabel adalah sebuah identifier yang mempunyai nilai dinamis. Artinya bahwa nilai
variabel tersebut dapat diubah sesuai kebutuhan dalam program. Contoh penamaan variabel:
Variabel Global
Program dalam bahasa C selalu terdapat fungsi utama dengan nama main(). Jika kita
mendeklarasikan sebuah variabel di luar fungsi, maka dengan sendirinya komputer akan
menganggap variabel tersebut sebagai variable global.
Variabel Lokal
Variabel lokal adalah variabel yang hanya dikenali oleh suatu fungsi saja, artinya tidak
dikenal oleh lingkungan luar di dalam program yang kita buat.Contoh variabel global dan lokal:
Contoh Algoritma 2:
7. 7
Program Algoritma 2:
//Menghitung Keliling Persegi Panjang
#include<stdio.h>
main() {
int P,L,Keliling;
P=25;
L=10;
Keliling=2*(P+L);
printf("Keliling : %dn",Keliling);
}
Contoh Algoritma 3:
8. 8
Program Algoritma 3:
// Menghitung Nilai Akhir
#include<stdio.h>
main()
{
//Deklarasi*/
char Nama[20];
int Tugas,UTS,UAS;
float Nilai_Akhir;
//Deskripsi
printf("Nama : "); scanf("%s",&Nama);
printf("Tugas : "); scanf("%d",&Tugas);
printf("UTS : "); scanf("%d",&UTS);
printf("UAS : "); scanf("%d",&UAS);
Nilai_Akhir=0.2*Tugas+0.3*UTS+0.5*UAS;
printf("nNama : %sn",Nama);
printf("Nilai Akhirnya adalah %f",Nilai_Akhir);
}
Contoh Algoritma 4:
9. 9
Program Algoritma 4:
// Menghitung Jarak (Berupa Panjang garis) antera 2 titik
#include<stdio.h>
#include<math.h>
main(){
//Deklarasi
typedef struct {
int X;
int Y;
} Titik;
Titik Titik1, Titik2;
float Jarak;
//Deskripsi
printf("Titik1 X : "); scanf("%d",&Titik1.X);
printf("Titik2 X : "); scanf("%d",&Titik2.X);
printf("Titik1 Y : "); scanf("%d",&Titik1.Y);
printf("Titik2 Y : "); scanf("%d",&Titik2.Y);
Jarak=pow((Titik1.X-Titik2.X),2)+pow((Titik1.Y-Titik2.Y),2);
Jarak=sqrt(Jarak);
printf("n Jarak = %.2fn",Jarak);
printf("Jaraknya Adalah %.2f",Jarak);
}
10. 10
MODUL II
PERCABANGAN & PERULANGAN (LOOP)
2.1 PERCABANGAN
Statement if - else
Bentuk dasar perintah if – else adalah sebagai berikut :
if (expression)
Statement1;
else
Statement2;
StatementBerikutnya;
#include <stdio.h>
#include <conio.h>
main()
{
int Nilai;
printf("Nilai : ");scanf("%i",&Nilai);
if(Nilai>=50)
printf("Selamat Anda Lulus. ");
else
printf("Maaf. Anda Tidak Lulus. ");
getch();
return 0;
}
11. 11
Perintah di atas hanya mempunyai 2 kemungkinan yaitu keterangan “Selamat Anda
Lulus” jika nilai lebih besar dari atau sama dengan 50 dan keterangan “Maaf. Anda
Tidak Lulus”, ketika nilai lebih kecil dari 50. Jika perintah yang akan dieksekusi ketika
kondisi tercapai lebih dari 1 perintah, maka perintah-perintah tersebut harus diblok dengan
tanda kurawal {}.Perhatikan program di bawah ini yang merupakan perubahan dari program di
atas
#include <stdio.h>
#include <conio.h>
main()
{
int Nilai;
printf("Nilai : ");scanf("%i",&Nilai);
if(Nilai>=50)
{
printf("Anda Hebat!n");
printf("Selamat Anda Lulus. ");
}
else
{
printf("Maaf. Anda Tidak Lulus. ");
printf("Perbaiki semester depan yah!. ");
}
getch();
return 0;
}
#include <stdio.h>
#include <conio.h>
main()
{
int a,b;
printf("Masukan A : ");scanf("%i",&a);
printf("Masukan B : ");scanf("%i",&b);
if(a==b)
printf("Isi Variabel A Sama Dengan B");
else
if(a>b)
printf("Isi Variabel A lebih besar dari B");
else
if(a<b)
printf("Isi Variabel A lebih kecil dari B");
getch();
return 0;
}
12. 12
Program di atas akan meminta anda untuk memasukan nilai variabel A dan B, kemudian
program akan memeriksa apakah variabel A sama dengan B, atau A lebih besar dari B, dan A
lebih kecil dari B.
Perintah switch – case - default
Selain if-else, perintah yang digunakan untuk percabangan adalah switch – case. Bentuk dasar
dari perintah tersebut adalah :
switch(ekspresi)
{
case kondisi1:perintah1;break;
case kondisi2:perintah2:break;
default : perintah3;
}
Cara kerja perintah di atas adalah : “Jika ekspresi sama dengan kondisi1, maka perintah1 akan
dieksekusi dan kemudian keluar dari switch, dan jika ekspresi sama dengan kondisi2
maka perintah 2 yang akan dieksekusi dan kemudian keluar dari switch, dan jika tidak
1 kondisi pun yang sama dengan ekspresi maka perintah3 (perintah default) yang akan
dieksekusi. Perintah default kalau tidak diperlukan bisa dihilangkan.
Untuk lebih jelas, perhatikan perintah di bawah ini.
switch (index)
{
case 'A':printf("Keterangan : Bagus Sekalin");break;
case 'B':printf("Keterangan : Bagusn");break;
case 'C':printf("Keterangan : Cukupn");break;
case 'D':printf("Keterangan : Kurangn");break;
case 'E':printf("Keterangan : Kurang Sekalin");break;
default :printf("Keterangan : Index Tak Diketahuin");
}
Keterangan program di atas adalah jika index=’A’ maka keterangan Bagus Sekali, jika
index=’B’ maka keterangan Bagus, jika index=’C’ maka keterangan Cukup, jika index=’D’
maka keterangan Kurang, jika index=’E’ maka keterangan Kurang Sekali, dan jika index bukan
A – E, maka keterangan adalah Index Tidak Diketahui
13. 13
Perintah if else dengan banyak kondisi
Jika kondisi yang harus diperiksa lebih dari 1 kondisi, maka hanya if-else lah yang bisa dipakai.
Operator-operator logika yang dipakai adalah operator && (and), dan operator || (or).
Untuk lebih jelas, perhatikan perintah di bawah ini:
if((index=='A')||(index=='B')||(index=='C'))
printf("Selamat Anda Lulus");
else
if((index=='D')||(index=='E'))
printf("Anda Tidak Lulus. Lebih giat lagi belajar!");
Perintah di atas akan menampilkan string “Selamat Anda Lulus” ketika index berisi A,
B atau C, dan akan menampilkan keterangan “Anda Tidak Lulus. Lebih giat lagi belajar!” ketika
index berisi D atau E.
Buatlah program dengan data yang dimasukan adalah jenis kelas, tujuan dan banyak tiket yang
dibeli. Data yang ingin ditampilkan adalah harga tiket dan total tiket, diskon dan besar
pembayaran.
Contoh :
Pilih Jurusan :
1. Jakarta
2. Yogya
3. Surabaya
Jurusan yang anda pilih : 2 [input]
Pilih Kelas :
1. Eksekutif
2. Bisnis
3. Ekonomi
Kelas yang anda pilih : 3 [input]
Banyak Tiket : 5 [input]
Harga Tiket : Rp. 20000 [output]
Total Tiket : Rp. 100000 [output]
Diskon : Rp. 10000 [output]
Bayar : Rp. 90000 [output]
14. 14
Program untuk kasus di atas :
#include <stdio.h>
#include <conio.h>
main()
{
int kodejurusan,kodekelas,banyaktiket;
long int hargatiket,total;
float diskon,bayar;
printf("Pilih Jurusan :n");
printf("---------------n");
printf("1. Jakartan2. Yogyan3. Surabayan");
printf("---------------n");
printf("Jurusan yang dipilih : ");scanf("%i",&kodejurusan);
printf("Pilih Kelas :n");
printf("---------------n");
printf("1. Eksekutifn2. Bisnisn3. Ekonomin");
printf("---------------n");
printf("Kelas yang dipilih : ");scanf("%i",&kodekelas);
printf("Banyak Tiket : ");scanf("%i",&banyaktiket);
if((kodejurusan==1)&&(kodekelas==1))
hargatiket=70000;
else
if((kodejurusan==1)&&(kodekelas==2))
hargatiket=40000;
else
if((kodejurusan==1)&&(kodekelas==3))
hargatiket=10000;
else
if(kodejurusan==2)
{
if(kodekelas==1) hargatiket=80000; else
if(kodekelas==2) hargatiket=50000; else
if(kodekelas==3) hargatiket=20000;
}
else
if(kodejurusan==3)
{
switch (kodekelas)
{
case 1:hargatiket=90000;break;
case 2:hargatiket=60000;break;
case 3:hargatiket=30000;
15. 15
}
}
printf("Harga Tiket : Rp. %lin",hargatiket);
total=banyaktiket*hargatiket;
printf("Total Tiket : Rp. %lin",total);
if( ((kodejurusan==3)&&(kodekelas==1)) ||
((kodejurusan==2)&&(kodekelas==2))
)
diskon=0.1*total;
else
diskon=0;
printf("Diskon 10%% : Rp. %fn",diskon);
bayar=total-diskon;
printf("Bayar : Rp. %fn",bayar);
getch();
return 0;
}
2.2 PERULANGAN (LOOP)
Ada beberapa jenis perulangan yang dapat dilakukan oleh bahasa pemrograman C,
yaitu :
• For
• While
• Do While
Perulangan Dengan Perintah For
Perulangan for mempunyai bentuk umum seperti berikut :
for(inisialisasi counter; kondisi perulangan; statement)
{
statement;
}
Contoh berikut akan menampilkan angka 1 sampai 1000, kemudian menampilkan
angka 10 turun sampai 0 dengan perubahan nilainya adalah setengah (0,5).
#include <stdio.h>
#include <conio.h>
main()
{
int i;
float f;
16. 16
for (i=1;i<=1000;i++)
printf("%in",i);
for (f=10;f>=0;f=f-0.5)
printf("%6.2fn",f);
getch();
return 0;
}
Dalam perulangan yang menggunakan for, perulangan dilakukan hanya
jika kondisi perulangannya mempunyai nilai true (tidak 0).
Perulangan Dengan Perintah While
Bentuk umum dari while adalah seperti berikut :
while (kondisi)
{
perintah;
perintah;
}
Cara kerja dari perulangan while mirip dengan perulangan for. Tetapi dalam perulangan while
ini, tidak ada jaminan bahwa program akan masuk ke dalam perulangan. Ini dikarenakan
pemeriksaan kondisinya dilakukan di awal perulangan.
#include <stdio.h>
#include <conio.h>
main()
{
int i;
float f;
i=1;
while (i<=1000)
{
printf("%in",i);
i++;
}
f=10;
while (f>=0)
{
printf("%6.2fn",f);
f=f-0.5;
}
getch();
return 0;
}
17. 17
Perulangan Dengan Perintah Do While
Bentuk umum dari do while adalah seperti berikut :
do
{
perintah;
perintah;
} while (kondisi);
Cara kerja dari perulangan do while mirip dengan perulangan while. Tetapi dalam perulangan
do while ini, pengecekan kondisi dilakukan di akhir loop. Sehingga program pasti dapat
masuk ke perulangan ini minimal 1 kali.
#include <stdio.h>
#include <conio.h>
main()
{
int i;
float f;
i=1;
do
{
printf("%in",i);
i++;
} while (i<=1000);
f=10;
do
{
printf("%6.2fn",f);
f=f-0.5;
} while (f>=0);
getch();
return 0;
}
18. 18
Latihan BAB 2
Membuat deret yang menghasilkan outputan :
(Menggunakan fungsi perulangan while dan do while)
Program latihan dengan menggunakan For
#include<stdio.h>
main()
{
int B,K,AW,AK,IN,No;
printf("Masukan Bilangan Awal : "); scanf("%i",&AW);
printf("Masukan Bilangan Akhir : "); scanf("%i",&AK);
printf("Masukan Bilangan Interval: "); scanf("%i",&IN);
printf("+============================+n");
printf("|No | Bilangan | Kuadrat |n");
printf("|----|-----------|-----------|n");
No=0;
for(B=AW;B<=AK;)
{
No=No+1;
K=B*B;
printf("|%3i |%6i | %6i |n",No,B,K);
B=B+IN;
}
printf("+----------------------------+n");
}
19. 19
MODUL III
FUNGSI DAN REKURSI
3.1 Tujuan
Tujuan modul II ini, adalah:
• Praktikan bisa membuat program sederhana berdasarkan algoritma dengan memakai
fungsi
• Praktikan bisa membuat program sederhana berdasarkan algoritma dengan
menggunakan fungsi rekursi
• Praktikan dapat membiasakan diri untuk membuat program secara terstruktur.
• Praktikan memahami algoritma fungsi dan rekursi
3.2 Teori
Modularisasi program (yang disebut juga rutin, prosedur atau fungsi) memberikan dua
keuntungan, yaitu: untuk aktivitas yang harus dilakukan lebih dari satu kali, modularisasi
menghindari penulisan teks program yang sama secara berulangkali. Disini penggunaan modul
program dapat mengurangi panjang program. Keuntungan kedua adalah kemudahan menulis dan
menemukan kesalahan program.
Kemudahan menulis akan sangat berguna pada masalah besar yang dikerjakan oleh satu
tim pemrogram yang beranggotakan beberapa orang. Bahasa C tidak mengenal istilah prosedur
seperti bahasa pascal. Dalam pascal sendiri, prosedur didefinisikan sebagai suatu proses yang
tidak mengembalikan nilai. Untuk melakukan hal ini di dalam c, maka kita harus membuat suatu
fungsi dengan tipe void, yang berarti tidak memiliki nilai balik (return value).
3.2.1 Fungsi Tanpa Nilai Balik
Notasi algoritma yang digunakan untuk mendefinisikan struktur prosedur
atau fungsi ini adalah:
21. 21
Program Algoritma 1:
// Program utama untuk menghitung luas segitiga
#include <stdio.h>
int Alas;
int Tinggi;
void HitungLuasSegitiga();
main(){
printf("Menghitung Luas Sebuah Segitigan");
HitungLuasSegitiga();
printf("nselesai");
}
void HitungLuasSegitiga(){
float Luas;
printf("Alas: ");scanf("%d",&Alas);
printf("Tinggi: ");scanf("%d",&Tinggi);
Luas = (Alas*Tinggi)/2;
printf("%4.2f",Luas);
}
2.2.1.1 Nama Global dan Lokal
Nama-nama (konstanta, peubah, tipe dan lain-lain) yang dideklarasikan di dalam deklarasi
prosedur hanya “dikenal” di dalam badan prosedur yang bersangkutan (bersifat lokal). Sedangkan
nama-nama yang dideklarasikan di dalam program utama dikatakan bersifat global (nama-nama
global dapat digunakan di bagian manapun di dalam program, baik di dalam program utama
maupun di dalam prosedur).
2.2.1.2 Parameter
Parameter aktual adalah parameter yang disertakan pada waktu pemanggilan, sedangkan
parameter formal adalah parameter yang dideklarasikan di dalam bagian header prosedur itu sendiri.
Ketika prosedur dipanggil, parameter actual menggantikan parameter formal. Tiap-tiap parameter
aktual berpasangan dengan parameter formal yang bersesuaian. Berdasarkan penggunaannya terdapat
3 jenis parameter formal, yaitu :
• Parameter masukan (input parameter) : parameter yang nilainya berlaku sebagai masukan untuk
prosedur (sering disebut parameter nilai – parameter by value).
• Parameter keluaran (output parameter) : parameter yang menampung keluaran yang dihasilkan oleh
prosedur.II-4
• Parameter masukan/keluaran (input/output parameter) : parameter yang berfungsi sebagai masukan
sekaligus keluaran bagi prosedur tersebut (parameter keluaran dan parameter masukan/keluaran
sering dinamakan parameter acuan – parameter by reference).
22. 22
Contoh algoritma parameter masukan:
Pada program PQR diatas: x dan y adalah parameter formal; 4 dan 10, a dan b,
a+5 dan 17 adalah parameter aktual.
Contoh algoritma parameter Keluaran:
26. 26
Program Algoritma 3:
// Program Menghitung Rata - Rata
#include <stdio.h>
int N;
float U;
void HitungRatarata (int N, float *U);
main(){
printf("Jumlah Data : ");scanf("%d", &N);
printf("menghitung rata - rata N buah bilangan bulatn");
HitungRatarata (N, &U);
printf("Rata-rata bilangan bulat =%.2f", U);
}
void HitungRatarata (int N, float *U) {
int K, X;
float Jumlah;
Jumlah = 0;
for (K=1; K<=N; K++) {
printf("data ke-%d:", K);scanf("%d", &X);
Jumlah = Jumlah + X;
}
*U = Jumlah/N;
}
27. 27
2.2.2 Fungsi Dengan Nilai Balik
Fungsi adalah modul program yang memberikan/mengembalikan (return) sebuah nilai
dari tipe tertentu (tipe dasar atau tipe bentukan). Sebagaimana halnya prosedur, fungsi diakses
dengan memanggil namanya. Selain itu, fungsi juga dapat mengandung daftar parameter formal.
Parameter pada fungsi selalu merupakan parameter masukan. Hal ini disebabkan oleh kenyataan
bahwa parameter pada fungsi merupakan masukan yang digunakan oleh fungsi tersebut untuk
menghasilkan nilai.
Notasi algoritma untuk fungsi :
Contoh Algoritma 4 :
28. 28
Program Algoritma 4 :
// Program fungsi f(x)=2x+2+5x-8
#include <stdio.h>
float F (float X);
main(){
int X;
printf("X: ");scanf("%d", &X);
printf("nF(X): %.2f", F(X));
}
float F(float X){
float Y;
Y = 2*X*X+5*X-8;
return Y;
}
Contoh Algoritma 5 :
29. 29
Program Algoritma 5 :
// Program Penentu bilangan genap atau ganjil
#include<stdio.h>
main(){
int Bil;
int Genap(int Bil);
printf("Bil : ");scanf("%d",&Bil);
if (Genap(Bil))
printf("n%d adalah bilangan genap", Bil);
else
printf("n%d adalah bilangan ganjil", Bil);
}
int Genap(int Bil){
int Y;
Y = (Bil %2==0);
return Y;
}
2.2.3 Rekursi
Suatu obyek disebut sebagai rekursif apabila sebagian berisi atau didefinisikan sebagai
dirinya sendiri. Dengan demikian rekursif adalah suatu proses berupa pemanggilan diri berupa
statement perulangan. Proses rekursif juga memungkinkan terjadinya komputasi yang tidak
berkesudahan sampai memory yang digunakan tidak dapat menampung lagi, sehingga perlu
diperhatikan akan adanya kondisi untuk menghentikan proses eksekusi program . Sebagai contoh
sederhana mengenai proses rekursif adalah proses menghitung nilai faktorial dari bilangan bulat
positif dan mencari deret fibonnaci dari suatu bilangan bulat, permainan menara hanoi dan
sebagainya.
30. 30
Contoh Algoritma 6:
Program Algoritma 6:
// Program fungsi rekursif faktorial
#include<stdio.h>
int Fak(int N);
main(){
int N;
printf("N!: ");scanf("%d",&N);
printf("n%d! adalah %d",N,Fak(N));
}
int Fak(int N){
if(N==0)
return 1;
else
return N*Fak(N-1);
}
31. 31
MODUL IV
LARIK ( ARRAY )
4.1 Tujuan
Tujuan modul III ini, adalah:
• Praktikan bisa membuat program sederhana berdasarkan algoritma dengan
memakai larik
• Praktikan bisa membuat program matriks sederhana berdasarkan algoritma
dengan memakai larik
• Praktikan dapat membiasakan diri untuk membuat program secara terstruktur.
• Praktikan memahami algoritma larik
4.2 Teori
4.2.1 Larik
Larik atau array adalah struktur data yang menyimpan sekumpulan elemen
yang bertipe sama. Setiap elemen diakses langsung melalui indeksnya. Contoh:
larik A dengan 8 elemen yang setiap elemennya berisi tinggi badan siswa di
sebuah sekolah.
4.2.1.1 Array 1 dimensi
#include <stdio.h>
#include <conio.h>
void main()
{
int Nilai[10];
int index;
float total,ratarata;
// Pembacaan data dari keyboard
32. 32
printf(“Pembacaan data nilai n”);
for (index=0;index<10;index++)
{
printf(“Nilai mahasiswa ke-%d = “,index+1);
scanf(“%d”,&Nilai[index]);
}
printf(“n”);
// Perhitungan total dan rata-rata
total=0;
for (index=0;index<10;index++)
total=total+Nilai[index];// atau total+=Nilai[index];
ratarata=total/10;
// Menampilkan data yang telah dimasukan dan rata-rata.
for (index=0;index<10;index++)
printf(“Nilai mahasiswa ke-%d = %3dn“,index+1,Nilai[index]);
printf(“Rata-rata = %6.2fn”,ratarata);
getch();
}
4.2.1.2 Array 2 dimensi
Array 2 dimensi biasanya digunakan untuk menyimpan data dalam bentuk matrik. Index Array 2
dimensi terdiri dari index baris dan kolom.
Pendeklarasian array 2 dimensi adalah :
Tipedata namaarray[b][k];
Dimana : b adalahbanyak baris dan k adalah banyak kolom.
Contoh
int matrik[5][5];
Perintah di atas akan membuat sebuah array 2 dimensi yang kalau digambarkan
adalah sebagai berikut :
33. 33
#include <stdio.h>
#include <conio.h>
#define maks 3
main()
{
int mat[maks][maks];
int b,k;
printf("Pengisian Array : n");
for (b=0;b<maks;b++)
{
for (k=0;k<maks;k++)
{
printf("Matrik [%d,%d] : ",b,k);
scanf("%d",&mat[b][k]);
}
}
printf("Matrik yang telah dimasukan :n");
for (b=0;b<maks;b++)
{
for (k=0;k<maks;k++)
{
printf("%6d",mat[b][k]);
}
printf("n");
}
getch();
return 0;
}
34. 34
MODUL V
STRUCT (RECORD)
Turbo C tidak selalu menyediakan tipe data yang sesuai dengan tipe data yang diinginkan.
Contoh kasus yaitu ketika kita ingin membuat suatu program mengolah data mahasiswa
dimana data mahasiswa terdiri dari NIM, Nama, NilaiUTS, NilaiUAS, NilaiQuiz,
NilaiAkhir dan Index Prestasinya. Turbo C tidak menyediakan tipe data untuk data tersebut.
Oleh karena itu maka kita harus membuat suatu tipe data baru yang cocok dengan keperluan
kita. Caranya adalah dengan menggunakan perintah struct
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct TMhs
{
char NIM[11];
char Nama[21];
int NilaiUTS,NilaiUAS,NilaiQuiz;
float NilaiAkhir;
char index;
};
main()
{
TMhs mhs1,mhs2;
printf("Pengisian Data ");
printf("NIM : "); gets(mhs1.NIM);
printf("NAMA : ");gets(mhs1.Nama);
printf("Nilai QUIZ : ");scanf("%d",&mhs1.NilaiQuiz);
printf("Nilai UTS : ");scanf("%d",&mhs1.NilaiUTS);
printf("Nilai UAS : ");scanf("%d",&mhs1.NilaiUAS);
mhs1.NilaiAkhir=0.2*mhs1.NilaiQuiz+0.3*mhs1.NilaiUTS+0.5*mhs1.NilaiUAS;
if(mhs1.NilaiAkhir>=80) mhs1.index=’A’;else
if(mhs1.NilaiAkhir>=60) mhs1.index=’B’;else
if(mhs1.NilaiAkhir>=40) mhs1.index=’C’;else
if(mhs1.NilaiAkhir>=20) mhs1.index=’D’;else
if(mhs1.NilaiAkhir>=00) mhs1.index=’E’;
mhs2=mhs1; // mengisikan semua data di mhs1 ke mhs2
printf("Data yang telah dimasukan : n");
printf("NIM : %sn",mhs2.NIM);
printf("NAMA : %sn",mhs2.Nama);
printf("Nilai QUIZ : %in",mhs2.NilaiQuiz);
35. 35
printf("Nilai UTS : %dn",mhs2.NilaiUTS);
printf("Nilai UAS : %dn",mhs2.NilaiUAS);
printf("Nilai Akhir: %.2fn",mhs2.NilaiAkhir);
printf("Index : %cn",mhs2.index);
getch();
}
Array Struct
Setiap tipe data dapat dibuat dalam bentuk array. Begitu juga dengan tipe data yang dibuat
dengan perintah struct.
Contoh program di bawah ini dapat menjelaskan cara penggunaan array yang bertipe data
buatan
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define maks 3
struct TMhs
{
char NIM[9];
char Nama[21];
int NilaiUTS,NilaiUAS,NilaiQuis;
float NilaiAkhir;
char index;
};
main()
{
TMhs mhs[maks]; // array struct
int i;
for(i=0;i<maks;i++)
{
printf("Pengisian Data Mahasiswa Ke-%in",i+1);
printf("NIM : ");fflush(stdin);gets(mhs[i].NIM);
printf("NAMA : ");fflush(stdin);gets(mhs[i].Nama);
printf("Nilai QUIZ : ");scanf("%d",&mhs[i].NilaiQuis);
printf("Nilai UTS : ");scanf("%d",&mhs[i].NilaiUTS);
printf("Nilai UTAS : ");scanf("%d",&mhs[i].NilaiUAS);
mhs[i].NilaiAkhir=0.2*mhs[i].NilaiQuis+0.3*mhs[i].NilaiUTS+0.5*mhs[i].NilaiUAS;
if(mhs[i].NilaiAkhir>=80) mhs[i].index='A';else
if(mhs[i].NilaiAkhir>=60) mhs[i].index='B';else
if(mhs[i].NilaiAkhir>=40) mhs[i].index='C';else
if(mhs[i].NilaiAkhir>=20) mhs[i].index='D';else
36. 36
if(mhs[i].NilaiAkhir>=0) mhs[i].index='E';
};
clrscr();
printf("Data yang telah dimasukan adalah : n");
printf("----------------------------------------------------------------------n");
printf("| NIM | NAMA | QUIS | UTS | UAS | N A | INDEX |n");
printf("----------------------------------------------------------------------n");
for(i=0;i<maks;i++)
{
printf("| %-8s | %-20s | %3i | %3i | %3i | %6.2f | %c |n",
mhs[i].NIM,mhs[i].Nama,mhs[i].NilaiQuis,mhs[i].NilaiUTS,
mhs[i].NilaiUAS,mhs[i].NilaiAkhir,mhs[i].index);
}
printf("----------------------------------------------------------------------n");
getch();
return 0;
}
37. 37
MODUL VI
OPERASI FILE
Membuat File Text
File text adalah suatu file yang pola penyimpanannya datanya dalam bentuk karakter. Sehingga
kalau suatu variabel bertipe int (2 byte) dengan isi 10000, maka akan disimpan dalam bentuk
karakter 10000 (5 karakter) sehingga file yang dibuat besarnya 5 byte.
Contoh program untuk membuat file text :
#include <stdio.h>
#include <conio.h>
#include <String.h>
main()
{
FILE *f;
char st[81]="";
f=fopen("strings.dat","w");
if (f!=NULL)
{
do{
printf("Masukan string : ");gets(st);
fprintf(f,"%sn",st);
}while (strlen(st)>0);
fclose(f);
printf("File selesai di buat");
}
else
{
printf("File gagal dibuat");
}
getch();
return 0;
}
38. 38
Membaca File Text
Mode yang dipakai dalam membaca data text adalah mode “r”. File yang dibaca bisa
berekstensi apa saja.
Perhatikan perintah berikut :
#include <stdio.h>
#include <conio.h>
#include <String.h>
main()
{
FILE *f;
char st[81]="";
f=fopen("strings.dat","r");
if (f!=NULL)
{
clrscr();
while (fscanf(f,"%s",st)!=EOF) //(fgets(st,80,f)!=NULL)
{
printf("%s",st);
}
fclose(f);
printf("File sudah dibaca");
}
else
{
printf("File gagal dibaca");
}
getch();
return 0;
}