Anda di halaman 1dari 75

Diktat

Praktikum Pemrograman Dasar


Edisi II

Oleh:
Dr.Darmawan Hidayat, MT.
Dr. Bambang Mukti Wibawa, M.S

Diktat praktikum ini hanya digunakan di dalam


lingkungan Program Studi Teknik Elektro
Universitas Padjadjaran Semester Ganjil 2021/2022

PROGRAM STUDI TEKNIK


ELEKTRO UNIVERSITAS
PADJADJARAN
2021
DAFTAR POKOK BAHASAN

1. Pengenalan C
a. Katakunci dan pegenal (Keywords and Identifier)
b. Variabel dan konstanta (Variables and Constants)
c. Tipe data (Data Types)
d. Input/Output
e. Operator pemrograman C (Programming Operators)
f. Contoh program

2. Keputusan dan perulangan (Decision and Loops)


a. Pemrograman if...else
b. Perulangan for...
c. Perulangan do...while
d. Instruksi breakdan continue
e. Pernyataan switch...case
f. Lompatan goto
g. Contoh keputusan dan perulangan

3. Fungsi
a. Pengenalan fungsi (Functions Introduction)
b. Fungsi dari pengguna (C User-defined Functions)
c. Tipe fungsi (Function Types)
d. Rekursi (Programming recursion)
e. Storage Class
f. Contoh fungsi (Function Examples)

4. Larik dan string (Arrays and Strings)


a. Pengenalan larik (Arrays Introduction)
b. Larik multidimensi (Multi-dimensional Arrays)
c. Larik dan fungsi (Arrays & Functions)
d. Pemrograman string (Programming Strings)
e. Fungsi string (String Functions)
f. Contoh string (String Examples)

5. Pointer
a. Pengenalan pointer (Pointers Introduction)
b. Pointer dan larik (Pointers And Arrays)
c. Pointer dan fungsi (Pointers And Functions)
d. Alokasi memeori dinamik (Dynamic Memory Allocation)
e. Contoh pointer (Pointer Examples)

6. Struktur dan gabungan (Structure & Union) a.


Pengenalan struktur (Structure Introduction) b.
Struktur dan pointer (Structures and Pointers) c.
Struktur dan fungsi (Structure and Function)
d. Pemrograman gabungan (Programming Unions)
e. Contoh struktur (Structure Examples)

7. File I/O

i
a. File Input/Output
b. Contoh pemrograman file

8. Akses port USB (Interfacing)


a. Komunikasi serial
b. Port USB
c. Baca-tulis port USB
d. Peraga LED/7-segmen/motor stepper via port USB

ii
KATA PENGANTAR

Bahasa C telah menjadi Bahasa pemrograman standar yang banyak digunakan


oleh para akademisi dan praktisi karena Bahasa C memiliki beberapa keunggulan
seperti: 1. Bahasa C tersedia hampir di semua jenis computer, 2. Kode bahasa C
sifatnya adalah portable Aplikasi yang ditulis dengan bahasa C untuk suatu komputer
tertentu dapat digunakan di komputer lain hanya dengan sedikit modifikasi, 4. Proses
executable program bahasa C lebih cepat, 5. Bahasa C juga dianggap sebagai bahasa
tingkat menengah, dan 8. Bahasa C mampu menggabungkan kemampuan bahasa
tingkat tingkat tinggi dengan bahasa tingkat tingkat rendah .
Forum Pendidikan Tinggi Teknik Elektro Indonesia (FORTEI)
merekomendasikan agar dalam kurikulum prodi Teknik Elektro disertakan pengetahuan
(body of knowledge) pemrograman dalam bentuk Pemecahan Masalah dengan Bahasa
C yang disertai dengan praktikum dengan bobot sebanyak 3 – 6 SKS. Sejalan dengan
rekomendasi tersebut kurikulum Prodi TE Unpad memberikan pemrograman Bahasa C
sebanyak 5 SKS (4 SKS perkuliahan dan 1 SKS praktikum) yang termuat dalam mata
kuliah dan praktikum Algoritma dan Pemrograman pada Semester I.
Untuk keperluan praktikum, Prodi TE telah menyusun diktat tuntunan praktikum
yang bersifat tuntunan step-by-step dan tutorial untuk belajar Bahasa C. Tujuan
instruksional Algoritma dan Pemrograman ini adalah setelah mengikuti praktikum,
mahasiswa diharapkan mampu menuliskan program Bahasa C untuk pemecahan
masalah matematika dan antarmuka perangkat keras antara komputer dan perangkat
eksternal secara benar.
Diktat Praktikum Edisi I ini terdiri dari tujuh modul, memperkenalkan dasar-dasar
Bahasa C, problem solving dan pemrograman antarmuka antara komputer dengan
trainer kit melalui protokol komunikasi serial UART RS-232. Perbaikan dan
penyempurnaan terus dilakukan oleh prodi pada diktat ini. Semoga diktat praktikum ini
dapat memberikan banyak manfaat. Terima kasih.
Agustus 2016
Dr. Darmawan Hidayat, M.T.
Dr. Bambabng Mukti Wibawa, M.S.

iii
iii
iii
TATA TERTIB

1. Praktikan wajib datang dan melakukan praktikum sesuai dengan jadwal yang telah
ditentukan.
2. Praktikan yang datang terlambat lebih dari 15 menit tidak diperkenankan mengikuti
praktikum
3. Praktikan wajib menyerahkan Laporan Pendahuluan dan Laporan Akhir pada awal
praktikum
4. Praktikan harus memakai kemeja (non jaket), rapi, dan memakai sepatu (non sandal)
5. Praktikan yang tidak masuk lebih dari dua kali dianggap gugur
6. Praktikan dilarang melakukan kegiatan yang mengganggu aktivitas praktikum
7. Kejadian–kejadian luar biasa atau kerusakan alat harus segera dilaporkan kepada
dosen/asisten.
8. Kerusakan alat selama praktikum yang disebabkan oleh praktikan menjadi tanggung
jawab praktikan
9. Praktikan berhak dikeluarkan dari laboratorium apabila melanggar hal –hal tersebut
di atas
10. Hal–hal lain yang belum tercantum di atas ditentukan kemudian

iv
iv
iv
MODUL I Pendahuluan

1.1 Pokok Bahasan


Pokok bahasan: Pendahuluan
1. Katakunci dan pengenal (Keywords and Identifier)
2. Variabel dan konstanta (Variables and Constants)
3. Tipe data (Data Types)
4. Input/Output
5. Operator pemrograman C (Programming Operators)

1.2 Tujuan
TIK: Setelah mengikuti praktikum dengan pokok bahasan Pengenalan Bahasa C,
mahasiswa diharapkan mengetahui dan memahami konsep-konsep dasar pemrograman
C dengan cara mampu membuat program C yang sederhana, mampu menggunakan
statement input dan output yang sederhana, mengenal tipe-tipe data dalam C, dan
mampu memilih serta menggunakan berbagai macam operator

1.3 Percobaan
1.3.1 Membuat program sederhana dalam C
1. Ketik program berikut

2. Simpan file dengan nama Modul01-01


3. Jalankan program dan catat tampilannya.
4. Hapus tanda // di depan printf() di baris-6 menjadi seperti berikut dan catat
perubahannya.
//printf("Prodi Teknik Elektro Unpad"); // mencetak isi kutipan

1
5. Tambahkan serangkai \n di baris-5 seperti berikut dan amati dan catat
perubahannya.

6. Tambahkan serangkai \n di depan printf() pada baris-5 seperti berikut dan amati
dan catat perubahannya.
printf("\nProdi Teknik Elektro Unpad"); // mencetak isi kutipan
7. Ganti semua kalimat diantara tanda /* ... */ di baris-5 menjadi berikut amati dan
catat perubahannya.
/* output ke monitor */
8. Lakukan hal yang sama pada kalimat yang diawali dengan tanda // pada baris-6.
9. Ubah pernyataan main() di baris-3 menjadi Main(). Amati dan catat perubahannya.
10. Hapus tanda titik koma ; di baris-5. Amati dan catat perubahannya.
11. Gantilah ungkapan "Belajar Pemrograman C\n" di baris-5 dengan
ungkapan ’Belajar Pemrograman C\n’
12. Hapus ungkapan return 0; di baris-8
13. Tambahkan dua ungkapan berikut di baris-7 dan -8.
printf("\n\n\n");
printf("Terima Kasih");
14. Beri tanda // di awal baris-2 menjadi //#include <conio.h>
15. Hapus ungkapan getch(); di baris-7. Amati dan catat perubahannya.
16. Buat kesimpulan untuk setiap perubahan-perubahan yang diamati

1.3.2 Deklarasi dan mencetak variabel


1. Ketik dan simpan program berikut dengan nama Modul01-02
2. jalankan hingga sukses program berikut.

2
3. Ubah nilai jumlah_barang=-135. Jalankan dan amati.
4. Ubah nilai ungkapan %d menjadi %u di baris-10. Jalankan dan amati.
5. Ubah baris-9 dan baris-10 menjadi tambahan berikut. Jalankan dan catat hasilnya.

1.3.3 Manipulasi variabel dengan tipe char


1. Ketik dan simpan program berikut dengan nama Modul01-03.
2. Jalankan program.

3. Ubah isi variabel hurufku pada baris-8 menjadi hurufku=97. Jalankan dan
catat perubahannya.

3
1.3.4 Manipulasi variabel bertipe float
1. Ketik dan simpan program berikut dengan nama Modul01-04.
2. Jalankan program.
3. Ubah baris-6 menjadi float nilai=-849.245e+2; Jalankan dan catat
hasilnya.

1.3.5 Mencetak variabel string


1. Ketik dan simpan program berikut dengan nama Modul01-05.
2. Jalankan program berikut.
3. Ubah baris-6 menjadi float char namaku[4]="Teknik Elektro";
Jalankan dan catat hasilnya.
4. Ubah baris-6 menjadi float char namaku[40]="Teknik Elektro";
Jalankan dan catat hasilnya.
5. Ubah baris-6 menjadi float char namaku[]="Teknik Elektro";
Jalankan dan catat hasilnya.

4
1.3.6 Operasi input/output bilangan bertipe integer
1. Ketik dan simpan program berikut dengan nama Modul01-06.
2. Jalankan program.
3. Hapus tanda & baris-7 menjadi scanf(”%d”, nilai); Jalankan dan catat
hasilnya.

1.3.7 Operasi input/output dan manipulasi data bertipe integer


1. Ketik dan simpan program berikut dengan nama Modul01-07.
2. Jalankan program berikut.
3. Ubah pernyataan baris-2 menjadi scanf("%d %d",&nilai2,&nilai1);
jalankan dan catat hasilnya.

1.3.8 Operasi input/output dan perkalian dua bilangan bertipe riil


1. Ketik dan simpan program berikut dengan nama Modul01-08.
2. Jalankan program.
3. Tambahkan di baris-10 pernyataan berikut. Jalankan dan catat hasilnya.
printf("Hasil operasi dengan format 12.2 = %12.2f",hasil_kali);

5
1.3.9 Mencari nilai ASCII dari suatu karakter yang dimasukkan pengguna
1. Ketik dan simpan program berikut dengan nama Modul01-09.
2. Jalankan program berikut.
3. Tambahkan di baris-9 pernyataan berikut. Jalankan dan catat hasilnya.
printf("Nilai ASCII dari %c = %d",c,c);

1.3.10 Operasi input/output dan opeasi sisa dan hasil pembagian


1. Ketik dan simpan program berikut dengan nama Modul01-10.
2. Jalankan program.
3. Ubah ungkapan di baris-7 dan baris-9 pernyataan berikut. Jalankan dan catat
hasilnya.
scanf("%f",&pembilang);

scanf("%f",&penyebut);

6
1.3.11 Menghitung ukuran variabel menggunakan operator sizeof
1. Ketik dan simpan program berikut dengan nama Modul01-11.
2. Jalankan program.
3. Tambah pernyataan berikut di baris-13. Jalankan dan catat hasilnya.
printf("Ukuran char e = %d byte\n",sizeof(e));

4. Ubah ungkapan deklarasi variabel di baris-8 seperti berikut. Jalankan dan catat
hasilnya.
char d, e[14];

1.3.12 Operator pengubah ukuran variabel long


1. Ketik dan simpan program berikut dengan nama Modul01-12.

7
2. Jalankan program.
3. Tambah pernyataan berikut di baris-13. Jalankan dan catat hasilnya.
printf("Ukuran long long long int = %ld bytes",sizeof(c));

1.3.13 Program C untuk operasi penukaran isi dua variabel


1. Ketik dan simpan program berikut dengan nama Modul01-13.
2. Jalankan program.
3. Hapus baris-12. Jalankan dan catat hasilnya.

1.4 Tugas Pendahuluan


1.4.1 Lengkapi tiap pernyataan berikut dengan isian yang tepat
a. Program C mulai eksekusi pada fungsi ……………

8
b. Tanda ………. adalah awal dari tubuh fungsi dan tanda …………. adalah akhir dari
fungsi.
c. Setiap pernyataan diakhiri dengan tanda …….
d. Fungsi standar …………….. digunakan untuk menampilkan informasi ke monitor.
e. Serangkai lepas \n menyatakan karakter …….., yang menyebabkan kursor pindah
ke awal baris baru di monitor.
f. Fungsi standar …………….. digunakan untuk membaca data dari keyboard.
g. Penentu pengubah ………. digunakan di dalam scanf() untuk menandakan nilai
masukan bertipe integer dan di dalam printf() untuk menandakan nilai keluaran
berupa integer.
h. Setiap kali sebuah nilai baru diisikan ke suatu lokasi memori sehingga menimpa
nilai sebelumnya disebut ………
i. Ketika suatu nilai dibaca dari suatu lokasi memori, nilai di lokasi tersebut
dipertahankan; proses ini disebut…….
j. Pernyataan ………………………… digunakan untuk membuat keputusan.

1.4.2 Nyatakan pernyataan berikut benar atau salah. Jika benar jelaskan
mengapa.
a. Fungsi print() selalu memulai pencetakan di awal baris baru.
b. Komentar menyebabkan computer akan mencetak teks yang diapit oleh /* dan */
ketika program dijalankan.
c. Serangkai lepas \n ketika digunakan di dalam printf() akan menyebabkan posisi
kursor akan berada di awal baris baru.
d. Seluruh variabel harus dideklarasikan sebelum digunakan.
e. Seluruh variabel harus diberikan tipenya ketika dideklarasikan.
f. Bahasa C akan menganggap sama variabel number dengan NuMbEr.
g. Definisi variabel dapat muncul dimana saja di dalam tubuh fungsi.
h. Semua argument yang mengikuti string control format di dalam fungsi printf() harus
didahului dengan simbol (&).
i. Operator sisa (%) dapat digunakan hanya untuk operan integer.
j. Operator aritmatika *, /, %, + dan – semuanya memiliki tingkat prioritas yang sama.
k. Nama variabel berikut adalah sama:
thisisasuperduperlongname1234567

9
thisisasuperduperlongname1234568
l. Program untuk mencetak keluaran berupa tiga baris harus mengandung tiga
pernyataan printf().

1.4.3 Temukan dan koreksi kesalahan-kesalahan di dalam tiap pernyataan


berikut.
a. printf( "Jumlahnya adalah %d\n", &jum );
b. scanf( "%d%d", &nilai1, nilai2 );
c. if ( c < 7 );{
printf( "Nilai c kurang dari 7\n" );
}
d. if ( c => 7 ) {
printf( "Nilai c sama dengan atau kurang dari 7\n" );
}

1.4.4 Tuliskan pernyataan (atau komentar) untk melakukan tugas berikut.


a. Nyatakan bahwa sebuah program akan menghitung perkalian tiga buah integer.
b. Tentukan variabel x, y, z dan hasil bertipe int.
c. Beri string yang meminta pengguna untuk memasukkan tiga buah integer.
d. Baca tiga buah integer dari keyboard dan simpan di dalam variabel x, y, dan z.
e. Hitung perkalian tiga integer yang berada di variabel x, y dan z dan isikan hasil
perkalian ke variabel hasil.
f. Cetak string “Hasil perkalian adalah = “ yang disertai dengan integer variabel hasil.

1.4.5 Dengan menggunakan pernyataan yang ditulis pada 1.4.4., tuliskan


program lengkap yang menghitung perkalian tiga buah integer.

10
MODUL II Keputusan dan Perulangan

2.1 Pokok Bahasan


Pokok bahasan: Keputusan dan perulangan (Decision and Loops)
Sub Pokok bahasan:
1. Pemrograman if...else
2. Perulangan for...
3. Perulangan do...while
4. Instruksi break dan continue
5. Pernyataan switch...case
6. Lompatan goto

2.2 Tujuan
TIK: Setelah mengikuti praktikum dengan pokok bahasan keputusan dan perulangan
mahasiswa mampu menuliskan program C untuk perhitungan matematika dan logika
menggunakan perintah-perintah uji kondisi dan perulangan dengan benar.

2.3 Percobaan
2.3.1 Mengecek suatu bilangan adalah genap atau ganjil
1. Ketik dan simpan program berikut dengan nama Modul02-01.
2. Jalankan program.

3. Ubah baris-10 menjadi seperti berikut. Jalankan dan perbaiki programnya.


if((nilai%2)==1)

11
2.3.2 Mengecek huruf vokal atau konsonan
1. Ketik dan simpan program berikut dengan nama Modul02-02.
2. Jalankan program.

3. Ubah baris-10 menjadi seperti berikut. Jalankan dan perbaiki programnya.


if(!(c=='a'||c=='A'||c=='e'||c=='E'||c=='i'||c=='I'||c=='o'||c=='O'||c
=='u'||c=='U'))

2.3.3 Menghitung bilangan terbesar di antara tiga bilangan


1. Ketik dan simpan program berikut dengan nama Modul02-03.
2. Jalankan program.

2.3.4 Menghitung akar-akar persamaan kuadrat


1. Ketik dan simpan program berikut dengan nama Modul02-04.
2. Jalankan program.

12
2.3.5 Mengecek tahun kabisat
1. Ketik dan simpan program berikut dengan nama Modul02-05.
2. Jalankan program.

/* Mengecek tahun termasuk kabisat atau bukan */

#include <stdio.h>
#include <conio.h>
main()
{
int tahun;
printf("Masukkan suatu tahun = ");
scanf("%d",&tahun);
if(tahun%4 == 0)
{
if( tahun%100 == 0) /*mengecek abad*/
{
if ( tahun%400 == 0)
printf("%d adalah tahun kabisat",tahun);
else
printf("%d adalah bukan tahun kabisat",tahun);
}
else
printf("%d adalah tahun kabisat",tahun);
}
else

13
printf("%d adalah bukan tahun kabisat",tahun);
getch();
return 0;
}

2.3.6 Mengecek suatu bilangan bernilai positif atau negatif


1. Ketik dan simpan program berikut dengan nama Modul02-06.
2. Jalankan program.

2.3.7 Mengecek suatu karakter adalah alphabet atau bukan


1. Ketik dan simpan program berikut dengan nama Modul02-07.
2. Jalankan program.

/* Program untuk mengecek suatu karakter


adalah alphabet atau bukan */

#include <stdio.h>
#include <conio.h>
main()
{
char karakter;
printf("Masukkan sebuah karakter = ");
scanf("%c",&karakter);
if((karakter>='a'&& karakter<='z')||(karakter>='A' &&
karakter<='Z'))
printf("%c adalah alfabet.",karakter);
else
printf("%c bukan alfabet.",karakter);

getch();
return 0;
}

14
2.3.8 Menghitung jumlah dari bilangan asli
1. Ketik dan simpan program berikut dengan nama Modul02-08.
2. Jalankan program.

3. Ubah baris-15 seperti berikut lalu jalankan dan amati hasilnya.


cacah++;

2.3.9 Menghitung faktorial


1. Ketik dan simpan program berikut dengan nama Modul02-09.
2. Jalankan program.
3. Masukkan nilai 200 sebagai input dan amati keluarannya.

15
2.3.10 Program untuk menghasilkan tabel perkalian
1. Ketik dan simpan program berikut dengan nama Modul02-10.
2. Jalankan program.

/* Program untuk menghitung tabel perkalian hingga 10*/

#include <stdio.h>
#include <conio.h>
main()
{
int n, i;
printf("Masukkan bilangan bulat untuk tabel perkalian = ");
scanf("%d",&n);
for(i=1;i<=10;++i)
{
printf("%d * %d = %d\n", n, i, n*i);
}
getch();
return 0;
}

2.3.11 Menampilkan deret Fibonacci


1. Ketik dan simpan program berikut dengan nama Modul02-11.
2. Jalankan program.

/* Menampilkan deret Fibonacci hingga bentuk ke-n


dimana n dimasukkan oleh pengguna */

#include <stdio.h>
#include <conio.h>
main()
{

16
int count, n, t1=0, t2=1, display=0;
printf("Enter number of terms: ");
scanf("%d",&n);
printf("Fibonacci Series: %d+%d+", t1, t2); /* dua suku
pertama*/
count=2; /* count=2 karena dua suku pertama sudah
ditampilkan*/
while (count<n)
{
display=t1+t2;
t1=t2;
t2=display;
++count;
printf("%d+",display);
}
getch();
return 0;
}

2.3.12 Menghitung FPB (HCF) dari dua bilangan


1. Ketik dan simpan program berikut dengan nama Modul02-12.
2. Jalankan program.

/* Program untuk menghitung FPB*/

#include <stdio.h>
#include <conio.h>
main()
{
int nilai1, nilai2, i, fpb;
printf("Masukkan dua integer = ");
scanf("%d %d", &nilai1, &nilai2);
for(i=1; i<=nilai1 || i<=nilai2; ++i)
{
if(nilai1%i==0 && nilai2%i==0) /*mengecek apakah i faktor
bersama*/
fpb=i;
}
printf("FPB dari %d dan %d adalah %d", nilai1, nilai2, fpb);
getch();
return 0;
}

2.3.13 Program untuk menampilkan KPK (LCM) dari dua bilangan


1. Ketik dan simpan program berikut dengan nama Modul02-13.
2. Jalankan program.

17
2.3.14 Menghitung jumlah digit dari suatu integer
1. Ketik dan simpan program berikut dengan nama Modul02-14.
2. Jalankan program.

2.3.15 Program untuk membalikkan suatu bilangan


1. Ketik dan simpan program berikut dengan nama Modul02-15.
2. Jalankan program.

18
2.3.16 Menghitung pangkat dari suatu bilangan
1. Ketik dan simpan program berikut dengan nama Modul02-16.
2. Jalankan program.

2.3.17 Program untuk mengecek apakah suatu bilangan palindrome


1. Ketik dan simpan program berikut dengan nama Modul02-17.
2. Jalankan program.

19
2.3.18 Mengecek apakah suatu bilangan termasuk prima atau bukan
1. Ketik dan simpan program berikut dengan nama Modul02-18.
2. Jalankan program.

20
2.3.19 Menampilkan bilangan-bilangan prima di antara dua interval
1. Ketik dan simpan program berikut dengan nama Modul02-19.
2. Jalankan program.

21
2.3.20 Program untuk mengecek bilangan Armstrong

153 = 1*1*1 + 5*5*5 + 3*3*3 // 153 is an Armstrong number.


12 is not equal to 1*1*1+2*2*2 // 12 is not an Armstrong number.
1. Ketik dan simpan program berikut dengan nama Modul02-20.
2. Jalankan program.

/*Program untuk mengecek bilangan Armstrong*/

#include <stdio.h>
#include <conio.h>
main()
{
int n, n1, rem, num=0;
printf("Masukkan sebuah nilai integer positif : ");
scanf("%d", &n);
n1=n;
while(n1!=0)
{
rem=n1%10;
num+=rem*rem*rem;
n1/=10;
}
if(num==n)
printf("%d adalah bilangan Armstrong.",n);
else
printf("%d bukan bilangan Armstrong.",n);
getch();
return 0;
}

2.3.21 Menampilkan bilangan Armstrong di antara dua interval


1. Ketik dan simpan program berikut dengan nama Modul02-21.
2. Jalankan program.

22
2.3.22 Menampilkan faktor-faktor dari suatu bilangan
1. Ketik dan simpan program berikut dengan nama Modul02-22.
2. Jalankan program.

2.3.23 Membuat kalkulator sederhana


1. Ketik dan simpan program berikut dengan nama Modul02-23.

23
2. Jalankan program.

/*Membuat kalkulator sederhana*/

#include <stdio.h>
#include <conio.h>
main()
{
char operasi;
float num1,num2;
printf("Pilih operator + atau - atau * atau / = ");
scanf("%c",&operasi);
printf("Enter two operands: ");
scanf("%f%f",&num1,&num2);
switch(operasi) {
case '+':
printf("%.1f + %.1f = %.1f",num1, num2, num1+num2);
break;
case '-':
printf("%.1f - %.1f = %.1f",num1, num2, num1-num2);
break;
case '*':
printf("%.1f * %.1f = %.1f",num1, num2, num1*num2);
break;
case '/':
printf("%.1f / %.1f = %.1f",num1, num2, num1/num2);
break;
default:
/*Jika operator bukan +, -, * or /, tampilkan pesan error*/
printf("Error! operator is not correct");
break;
}
getch();
return 0;
}

24
MODUL III Fungsi

3.1 Pokok Bahasan


Pokok bahasan: Fungsi
Sub Pokok bahasan:
1. Pengenalan fungsi
2. Fungsi buatan
3. Tipe fungsi
4. Rekursi
5. Kelas penyimpanan (Storage Class)

3.2 Tujuan
Setelah mengikuti parkatikum dengan pokok bahasan fungsi mahasiswa akan dapat
memecahkan program besar yang kompleks menjadi program-program modular yang
lebih kecil dengan benar (C3)

3.3 Percobaan
3.3.1 Menampilkan bilangan prima di antara interval dengan menggunakan
fungsi buatan
1. Ketik dan simpan program berikut dengan nama Modul03-01.
2. Jalankan program.

/*Menampilkan bilangan prima di antara interval*/

#include <stdio.h>
#include <conio.h>
main()
{
int cek_prima(int num); /*prototipe fungsi*/
int n1,n2,i,flag;
printf("Masukkan dua bilangan interval = ");
scanf("%d %d",&n1, &n2);
printf("Bilangan prima antara %d dan %d adalah = ", n1, n2);
for(i=n1+1;i<n2;++i)
{
flag=cek_prima(i);
if(flag==0)
printf("%d ",i);
}
getch();

25
return 0;
}

int cek_prima(int num) /*fungsi buatan utk bilangan prima*/


{
int j,flag=0;
for(j=2;j<=num/2;++j)
{
if(num%j==0)
{
flag=1;
break;
}
}
return flag;
}

3.3.2 Mengecek bilangan prima atau Armstrong dengan menggunakan fungsi


buatan

1. Ketik dan simpan program berikut dengan nama Modul03-02.


2. Jalankan program.
/*Mengecek bilangan prima atau Armstrong dengan menggunakan fungsi
buatan*/

#include <stdio.h>
#include <conio.h>

int prima(int n); /*prototipe fungsi*/


int armstrong(int n);
main()
{
char c;
int n,temp=0;
printf("Masukkan sebuah nilai integer positif = ");
scanf("%d",&n);
printf("Tekan P untuk cek Prima dan A untuk cek Armstrong = ");
c=getche();
if (c=='p' || c=='P')
{
temp=prima(n);
if(temp==1)
printf("\n%d adalah bilangan PRIMA.", n);
else
printf("\n%d bukan PRIMA.", n);
}
if (c=='a' || c=='A')
{
temp=armstrong(n);
if(temp==1)
printf("\n%d adalah bilangan ARMSTRONG.", n);
else
printf("\n%d bukan bilangan ARMSTRONG.",n);
}
getch();

26
return 0;
}

int prima(int n)
{
int i, flag=1;
for(i=2; i<=n/2; ++i)
{
if(n%i==0)
{
flag=0;
break;
}
}
return flag;
}

int armstrong(int n)
{
int num=0, temp, flag=0;
temp=n;
while(n!=0)
{
num+=(n%10)*(n%10)*(n%10);
n/=10;
}
if (num==temp)
flag=1;
return flag;
}

3.3.3 Menampilkan bilangan prima di antara interval dengan menggunakan


fungsi buatan
1. Ketik dan simpan program berikut dengan nama Modul03-03.
2. Jalankan program.
/*Menampilkan bilangan prima di antara interval */

#include <stdio.h>
#include <conio.h>

int cek_prima(int n); /*prototipe fungsi*/


main()
{
int n1,n2,i,flag;
printf("Masukkan dua bilangan interval = ");
scanf("%d %d",&n1, &n2);
printf("Bilangan prima di antara %d dan %d adalah = ", n1, n2);
for(i=n1+1;i<n2;++i)
{
flag=cek_prima(i);
if(flag==0)
printf("%d ",i);
}
getch();
return 0;

27
}

int cek_prima(int num) /*fungsi buatan*/


{
int j,flag=0;
for(j=2;j<=num/2;++j){
if(num%j==0){
flag=1;
break;
}
}
return flag;
}

3.3.4 Mengecek apakah suatu bilangan dapat diungkapkan sebagai jumlah dari
dua bilangan prima
1. Ketik dan simpan program berikut dengan nama Modul03-04.
2. Jalankan program.

/*Mengecek apakah suatu bilangan dapat diungkapkan


sebagai jumlah dari dua bilangan prima*/

#include <stdio.h>
#include <conio.h>

int prima(int n); /*prototipe fungsi*/


main()
{
int n, i, flag=0;
printf("Enter a positive integer: ");
scanf("%d",&n);
for(i=2; i<=n/2; ++i)
{
if (prima(i)!=0)
{
if ( prima(n-i)!=0)
{
printf("%d = %d + %d\n", n, i, n-i);
flag=1;
}

}
}
if (flag==0)
printf("%d tidak dapat dinyatakan sebagai jumlah dua bilangan
prima.",n);
getch();
return 0;
}

int prima(int n) /*Fungsi untuk cek bil. prima*/


{
int i, flag=1;
for(i=2; i<=n/2; ++i)
if(n%i==0)

28
flag=0;
return flag;
}

3.3.5 Menghitung jumlah dari bilangan asli dengan menggunakan rekursi

Penjumlahan 1+2+3+4+5 = 15
1. Ketik dan simpan program berikut dengan nama Modul03-05.
2. Jalankan program.

/*Menghitung jumlah dari bilangan


asli dengan menggunakan rekursi*/

#include <stdio.h>
#include <conio.h>

int tambah(int n); /*prototipe fungsi*/


main()
{
int n;
printf("Masukkan sebuah integer positif = ");
scanf("%d",&n);
printf("Jumlah = %d",tambah(n));
getch();
return 0;
}

int tambah(int n)
{
if(n!=0)
return n+tambah(n-1); /* pemanggilan rekursif */
}

3.3.6 Menghitung faktorial menggunakan rekursi


1. Ketik dan simpan program berikut dengan nama Modul03-06.
2. Jalankan program.

/*Menghitung faktorial menggunakan rekursi*/

#include <stdio.h>
#include <conio.h>

int faktorial(int n); /*prototipe fungsi*/


main()
{
int n;
printf("Masukkan sebuah integer positif = ");
scanf("%d",&n);
printf("Faktorial dari %d = %ld", n, faktorial(n));
getch();
return 0;

29
}

int faktorial(int n)
{
if(n!=1)
return n*faktorial(n-1);
}

3.3.7 Menghitung FPB dengan menggunakan rekursi


1. Ketik dan simpan program berikut dengan nama Modul03-07.
2. Jalankan program.

/* Menghitung FPB dengan menggunakan fungsi rekursi */


#include <stdio.h>
#include <conio.h>

int fpb(int n1, int n2); /*prototipe fungsi*/


main()
{
int n1, n2;
printf("Masukkan dua integer positif = ");
scanf("%d%d", &n1, &n2);
printf("FPB dari %d dan %d = %d", n1, n2, fpb(n1,n2));
getch();
return 0;
}

int fpb(int n1, int n2)


{
if (n2!=0)
return fpb(n2, n1%n2);
else
return n1;
}

3.3.8 Membalikkan kalimat menggunakan rekursi


1. Ketik dan simpan program berikut dengan nama Modul03-08.
2. Jalankan program.

/*Membalikkan kalimat menggunakan rekursi*/


#include <stdio.h>
#include <conio.h>

void Reverse(); /*prototipe fungsi*/


main()
{
printf("Masukkan sebuah kalimat = ");
Reverse();
getch();
return 0;
}

30
void Reverse()
{
char c;
scanf("%c",&c);
if( c != '\n')
{
Reverse();
printf("%c",c);
}
}

3.3.9 Menghitung nilai pangkat dengan menggunakan rekursi


1. Ketik dan simpan program berikut dengan nama Modul03-09.
2. Jalankan program.

/*Menghitung nilai pangkat dengan menggunakan rekursi*/


#include <stdio.h>
#include <conio.h>

int pangkat(int n1,int n2); /*prototipe fungsi*/


main()
{
int bilangan, eksponen;
printf("Masukkan bilangan yang akan dipangkatkan = ");
scanf("%d",&bilangan);
printf("Masukkan bilangan positif pangkatnya = ");
scanf("%d",&eksponen);
printf("%d^%d = %d", bilangan, eksponen, pangkat(bilangan,
eksponen));
getch();
return 0;
}

int pangkat(int bilangan,int eksponen)


{
if ( eksponen!=1 )
return (bilangan*pangkat(bilangan,eksponen-1));
}

3.3.10 Konversi bilangan biner ke decimal dan sebaliknya


1. Ketik dan simpan program berikut dengan nama Modul03-10.
2. Jalankan program.
/*Konversi bilangan biner ke decimal dan sebaliknya*/
#include <stdio.h>
#include <conio.h>
#include <math.h>

int binary_decimal(int n);


int decimal_binary(int n); /*prototipe fungsi*/
main()
{
int n;

31
char c;
printf("Instruksi:\n");
printf("1. Tekan 'd' untuk konversi biner ke desimal.\n");
printf("2. Tekan 'b' untuk konversi desimal ke biner.\n");
scanf("%c",&c);
if (c =='d' || c == 'D')
{
printf("Masukkan sebuah bilangan biner: ");
scanf("%d", &n);
printf("%d biner = %d desimal", n, binary_decimal(n));
}
if (c =='b' || c == 'B')
{
printf("Masukkan sebuah bilangan desimal: ");
scanf("%d", &n);
printf("%d desimal = %d biner", n, decimal_binary(n));
}

getch();
return 0;
}

int decimal_binary(int n) /* Fungsi konversi desimal ke biner*/


{
int rem, i=1, binary=0;
while (n!=0)
{
rem=n%2; n/=2;
binary+=rem*i;
i*=10;
}
return binary;
}

int binary_decimal(int n) /* Fungsi konversi biner ke desimal.*/


{
int decimal=0, i=0, rem;
while (n!=0)
{
rem = n%10;
n/=10;
decimal += rem*pow(2,i);
++i;
}
return decimal;
}

3.3.11 Konversi bilangan octal ke decimal dan sebaliknya


1. Ketik dan simpan program berikut dengan nama Modul03-11.
2. Jalankan program.

/*Konversi bilangan octal ke decimal dan sebaliknya*/


#include <stdio.h>
#include <conio.h>
#include <math.h>

32
int decimal_octal(int n);
int octal_decimal(int n); /*prototipe fungsi*/
main()
{
int n; char c;
printf("Instruksi:\n");
printf("1. Tekan 'o' untuk konversi desimal ke oktal.\n");
printf("2. Tekan 'd' untuk konversi oktal ke desimal.\n");
scanf("%c",&c);
if (c =='d' || c == 'D')
{
printf("Masukkan bilangan oktal: ");
scanf("%d", &n);
printf("%d oktal = %d desimal", n, octal_decimal(n));
}
if (c =='o' || c == 'O')
{
printf("Masukkan bilangan desimal: ");
scanf("%d", &n);
printf("%d desimal = %d oktal", n, decimal_octal(n));
}
getch();
return 0;
}

int decimal_octal(int n) /* Fungsi konversi desimal ke oktal*/


{
int rem, i=1, octal=0;
while (n!=0)
{
rem=n%8;
n/=8;
octal+=rem*i;
i*=10;
}
return octal;
}

int octal_decimal(int n) /* Fungsi konversi oktal ke desimal*/


{
int decimal=0, i=0, rem;
while (n!=0)
{
rem = n%10;
n/=10;
decimal += rem*pow(8,i);
++i;
}
return decimal;
}

3.3.12 Menampilkan dan membaca bilangan octal dengan menggunakan %o


1. Ketik dan simpan program berikut dengan nama Modul03-12.
2. Jalankan program.

33
/*Menampilkan dan membaca bilangan octal dengan menggunakan %o*/
#include <stdio.h>
#include <conio.h>

main()
{
int n;
printf("Masukkan bilangan desimal: ");
scanf("%d",&n); /* %o menampilkan integer menjadi oktal*/
printf("%d desimal = %o oktal", n, n);
printf("\nMasukkan bilangan oktal: ");
scanf("%o",&n); /*membaca bilangan dalam oktal*/
printf("%o oktal = %d desimal", n, n);
getch();
return 0;
}

3.3.13 Konversi bilangan biner ke oktal dan sebaliknya


1. Ketik dan simpan program berikut dengan nama Modul03-13.
2. Jalankan program.
/*Konversi bilangan biner ke oktal dan sebaliknya*/
#include <stdio.h>
#include <conio.h>
#include <math.h>

int binary_octal(int n);


int octal_binary(int n);
main()
{
int n; char c;
printf("Instruksi:\n");
printf("1. Tekan 'o' untuk konversi biner ke oktal.\n");
printf("2. Tekan 'b' untuk konversi oktal ke biner.\n");
scanf("%c",&c);
if ( c=='o' || c=='O')
{
printf("Masukkan bilangan biner: ");
scanf("%d",&n);
printf("%d biner = %d oktal", n, binary_octal(n));
}
if ( c=='b' || c=='B')
{
printf("Masukkan bilangan oktal: ");
scanf("%d",&n);
printf("%d oktal = %d biner",n, octal_binary(n));
}
getch();
return 0;
}

int binary_octal(int n) /*Fungsi konversi biner ke oktal*/


{
int octal=0, decimal=0, i=0;
while(n!=0)

34
{
decimal+=(n%10)*pow(2,i);
++i;
n/=10;
}

/*At this point, the decimal variable contains


corresponding decimal value of binary number. */

i=1;
while (decimal!=0)
{
octal+=(decimal%8)*i;
decimal/=8;
i*=10;
}
return octal;
}
int octal_binary(int n) /*Fungsi konversi oktal ke biner.*/
{
int decimal=0, binary=0, i=0;
while (n!=0)
{
decimal+=(n%10)*pow(8,i);
++i;
n/=10;
}
/* At this point, the decimal variable contains
corresponding decimal value of that octal number. */
i=1;
while(decimal!=0)
{
binary+=(decimal%2)*i;
decimal/=2;
i*=10;
}
return binary;
}

35
MODUL IV Larik dan string

4.1 Pokok Bahasan


Pokok bahasan: Larik dan string
Sub Pokok bahasan:
1. Konsep larik (Arrays Introduction)
2. Larik multidimensi (Multi-dimensional Arrays)
3. Larik dan fungsi (Arrays & Functions)
4. Pemrograman string (Programming Strings)
5. Fungsi string (String Functions)

4.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan larik pada bahasa C mahasiswa
akan mampu menerapkan variabel dengan tipe data berupa larik dengan benar untuk
perhitungan-perhitungan matematika dan logika (C3)

4.3 Percobaan
4.3.1 Menghitung rata-rata menggunakan larik
1. Ketik dan simpan program berikut dengan nama Modul04-01.
2. Jalankan program.

/*Menghitung rata-rata menggunakan larik*/


#include <stdio.h>
#include <conio.h>

int binary_octal(int n);


int octal_binary(int n);
main()
{
int n, i;
float num[100], sum=0.0, average;
printf("Masukkan jumlah data: ");
scanf("%d",&n);
while (n>100 || n<=0)
{
printf("Error! jumlah harus dalam rentang (1 to 100).\n");
printf("Masukkan jumlahnya lagi: ");
scanf("%d",&n);
}
for(i=0; i<n; ++i)

36
{
printf("%d. Masukkan bilangan: ",i+1);
scanf("%f",&num[i]);
sum+=num[i];
}
average=sum/n;
printf("Rata-rata = %.2f",average);
getch();
return 0;
}

4.3.2 Mencari elemen terbesar larik


1. Ketik dan simpan program berikut dengan nama Modul04-02.
2. Jalankan program.

/*Mencari elemen terbesar larik*/


#include <stdio.h>
#include <conio.h>

main()
{
int i,n;
float arr[100];
printf("Masukkan banyak elemen total (1 to 100)= ");
scanf("%d",&n);
printf("\n");
for(i=0;i<n;++i) /*menyimpan bilangan dari pengguna*/
{
printf("Masukkan bilangan ke-%d: ",i+1);
scanf("%f",&arr[i]);
}
for(i=1;i<n;++i) /*loop untuk menyimpan bilangan ke arr[0] */
{
if(arr[0]<arr[i]) /* menentukan elemen terbesar atau terkecil*/
arr[0]=arr[i];
}
printf("Elemen terbesar = %.2f",arr[0]);
getch();
return 0;
}

4.3.3 Menghitung standar deviasi dengan melewatkan ke fungsi


1. Ketik dan simpan program berikut dengan nama Modul04-03.
2. Jalankan program.
/*Menghitung standar deviasi dengan melewatkan ke fungsi*/
#include <stdio.h>
#include <conio.h>
#include <math.h>

float standard_deviation(float data[], int n);


int main()

37
{
int n, i;
float data[100];
printf("Masukkan banyak data (kurang dari 100)= ");
scanf("%d",&n);
printf("Masukkan nilai elemen = ");
for(i=0; i<n; ++i)
scanf("%f",&data[i]);
printf("\n");
printf("Deviasi standarnya = %.2f", standard_deviation(data,n));
getch();
return 0;
}

float standard_deviation(float data[], int n)


{
float mean=0.0, sum_deviation=0.0;
int i;
for(i=0; i<n;++i)
{
mean+=data[i];
}
mean=mean/n;
for(i=0; i<n;++i)
sum_deviation+=(data[i]-mean)*(data[i]-mean);
return sqrt(sum_deviation/n);
}

4.3.4 Menjumlahkan dua matriks


1. Ketik dan simpan program berikut dengan nama Modul04-04.
2. Jalankan program.

/* Menjumlahkan dua matriks*/


#include <stdio.h>
#include <conio.h>

int main()
{
int r,c,a[100][100],b[100][100],sum[100][100],i,j;
printf("Masukkan jumlah baris (1-100): ");
scanf("%d",&r);
printf("Masukkan jumlah kolom (1-100): ");
scanf("%d",&c);
printf("\nMasukkan elemen matriks pertama:\n");

/* Menyimpan elemen matriks pertama a*/


for(i=0;i<r;++i)
for(j=0;j<c;++j)
{
printf("Masukkan elemen a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}

/* Menyimpan elemen matriks kedua b*/


printf("Masukkan elemen matriks kedua:\n");
for(i=0;i<r;++i)

38
for(j=0;j<c;++j)
{
printf("Masukkan elemen b%d%d: ",i+1,j+1);
scanf("%d",&b[i][j]);
}

/*Menambahkan kedua matriks*/


for(i=0;i<r;++i)
for(j=0;j<c;++j)
sum[i][j]=a[i][j]+b[i][j];

/*Menampilkan hasil perjumlahan*/


printf("\nJumlah kedua matriks adalah: \n\n");
for(i=0;i<r;++i)
for(j=0;j<c;++j)
{
printf("%d ",sum[i][j]);
if(j==c-1)
printf("\n\n");
}
getch();
return 0;
}

4.3.5 Perkalian matriks dengan menggunakan larik multidimensi


1. Ketik dan simpan program berikut dengan nama Modul04-05.
2. Jalankan program.

/*Perkalian matriks dengan menggunakan larik multidimensi*/


#include <stdio.h>
#include <conio.h>

int main()
{
int a[10][10], b[10][10], mult[10][10], r1, c1, r2, c2, i, j, k;
printf("Masukkan baris dan kolom matriks pertama: ");
scanf("%d%d", &r1, &c1);
printf("Masukkan baris dan kolom matriks kedua: ");
scanf("%d%d",&r2, &c2);

/*Jika kolom matriks pertama tidak sama dengan baris matriks kedua*/
while (c1!=r2)
{
printf("Error! kolom matriks pertama tidak sama dengan baris
matriks kedua.\n\n");
printf("Masukkan baris dan kolom matriks pertama: ");
scanf("%d%d", &r1, &c1);
printf("Masukkan baris dan kolom matriks kedua: ");
scanf("%d%d",&r2, &c2);
}

/*menyimpan elemen matriks pertama*/


printf("\nMasukkan elemen matriks 1 :\n");
for(i=0; i<r1; ++i)
for(j=0; j<c1; ++j)

39
{
printf("Masukkan elemen a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}

/*Menyimpan elemen matriks kedua*/


printf("\nMasukkan elemen matriks-2:\n");
for(i=0; i<r2; ++i)
for(j=0; j<c2; ++j)
{
printf("Masukkan elemen b%d%d: ",i+1,j+1);
scanf("%d",&b[i][j]);
}

/* Inisialisasi elemen matriks mult menjadi 0.*/


for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
{
mult[i][j]=0;
}

/* perkalian matriks a dan b lalu menyimpannya di mult*/


for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k)
{
mult[i][j]+=a[i][k]*b[k][j];
}

/* Menampilkan perkalian dua matriks*/


printf("\nMatriks hasil perkalian:\n");
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
{
printf("%d ",mult[i][j]);
if(j==c2-1)
printf("\n\n");
}
getch();
return 0;
}

4.3.6 Menghitung transpos matriks


1. Ketik dan simpan program berikut dengan nama Modul04-06.
2. Jalankan program.

/*Menghitung transpos matriks*/


#include <stdio.h>
#include <conio.h>

int main()
{
int a[10][10], trans[10][10], r, c, i, j;
printf("Masukkan baris dan kolom matriks: ");

40
scanf("%d %d", &r, &c);

/* menyimpan elemen matriks di larik a[][]. */


printf("\nMasukkan elemen matriks:\n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("Masukkan elemen matriks a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}
/* menampilkan matriks a[][] */
printf("\nMatriks awal a: \n");
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
printf("%d ",a[i][j]);
if(j==c-1)
printf("\n\n");
}

/* Menghitung transpos matrks a[][] dan menyimpannya di larik


trans[][]. */
for(i=0; i<r; ++i)
for(j=0; j<c; ++j)
{
trans[j][i]=a[i][j];
}

/* menampilkan transpos yaitu larik trans[][]. */


printf("\nTranspos matriks:\n");
for(i=0; i<c; ++i)
for(j=0; j<r; ++j)
{
printf("%d ",trans[i][j]);
if(j==r-1)
printf("\n\n");
}
getch();
return 0;
}

4.3.7 Perkalian dua matriks dengan melewatkan matriks ke fungsi


1. Ketik dan simpan program berikut dengan nama Modul04-07.
2. Jalankan program.

/*Perkalian dua matriks dengan melewatkan matriks ke fungsi*/


#include <stdio.h>
#include <conio.h>

/*Prototipe fungsi*/
void take_data(int a[][10], int b[][10], int r1,int c1, int r2, int
c2);
void multiplication(int a[][10],int b[][10],int mult[][10],int r1,int
c1,int r2,int c2);
void display(int mult[][10], int r1, int c2);
int main()
{

41
int a[10][10], b[10][10], mult[10][10], r1, c1, r2, c2, i, j, k;
printf("Masukkan baris dan kolom matriks-1: ");
scanf("%d%d", &r1, &c1);
printf("Masukkan baris dan kolom matriks-2: ");
scanf("%d%d",&r2, &c2);

/*ulangi jika kolom matrik-1 tidak sama dengan baris matrik-2*/


while (c1!=r2)
{
printf("Error! kolom pertama matriks-1 tidak sama dengan baris
matriks-2\n");
printf("Masukkan baris dan kolom matriks-1: ");
scanf("%d%d", &r1, &c1);
printf("Masukkan baris dan kolom matriks-2: ");
scanf("%d%d",&r2, &c2);
}
take_data(a,b,r1,c1,r2,c2); /* Fungsi untuk membaca data
matriks*/
multiplication(a,b,mult,r1,c1,r2,c2); /* fungsi perkalian dua
matriks*/
display(mult,r1,c2); /* fungsi menampilkan matriks hasil
perkalian*/

getch();
return 0;
}

void take_data(int a[][10], int b[][10], int r1,int c1, int r2, int
c2)
{
int i,j;
printf("\nMasukkan elemen matriks-1:\n");
for(i=0; i<r1; ++i)
for(j=0; j<c1; ++j)
{
printf("Masukkan elemen matriks-1 a%d%d: ",i+1,j+1);
scanf("%d",&a[i][j]);
}

printf("\nMasukkan elemen matriks-2:\n");


for(i=0; i<r2; ++i)
for(j=0; j<c2; ++j)
{
printf("Masukkan elemen matriks-2 b%d%d: ",i+1,j+1);
scanf("%d",&b[i][j]);
}
}

void multiplication(int a[][10],int b[][10],int mult[][10],int r1,int


c1,int r2,int c2)
{
int i,j,k;
/* inisialisasi matriks mult=0.*/
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
{
mult[i][j]=0;
}
/* perkalian matriks a dan b dan menyimpannya di larik mult*/

42
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k)
{
mult[i][j]+=a[i][k]*b[k][j];
}
}

void display(int mult[][10], int r1, int c2)


{
int i, j;
printf("\nMatriks hasil:\n");
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
{
printf("%d ",mult[i][j]);
if(j==c2-1)
printf("\n\n");
}
}

4.3.8 Menghitung frekuensi karakter


1. Ketik dan simpan program berikut dengan nama Modul04-08.
2. Jalankan program.

/*Menghitung frekuensi kemunculan karakter*/


#include <stdio.h>
#include <conio.h>

int main()
{
char c[1000],ch;
int i,count=0;
printf("Masukkan sebuah string: ");
gets(c);
printf("Masukkan karakter yang akan dihitung kemunculannya: ");
scanf("%c",&ch);
for(i=0;c[i]!='\0';++i)
{
if(ch==c[i])
++count;
}
printf("Frekuensi kemunculannya dari %c = %d", ch, count);
getch();
return 0;
}

4.3.9 Menghitung jumlah vocal, konsonan, angka dan spasi dalam suatu string
1. Ketik dan simpan program berikut dengan nama Modul04-09.
2. Jalankan program.

43
/*Menghitung jumlah vocal, konsonan, angka dan spasi dalam suatu
string*/
#include <stdio.h>
#include <conio.h>

int main()
{
char line[150];
int i,v,c,ch,d,s,o;
o=v=c=ch=d=s=0;
printf("Masukkan sebuah baris string:\n");
gets(line);
for(i=0;line[i]!='\0';++i)
{
if(line[i]=='a' || line[i]=='e' || line[i]=='i' ||
line[i]=='o' || line[i]=='u' || line[i]=='A' || line[i]=='E' ||
line[i]=='I' || line[i]=='O' || line[i]=='U')
++v;
else if((line[i]>='a'&& line[i]<='z') || (line[i]>='A'&&
line[i]<='Z'))
++c;
else if(line[i]>='0'&&c<='9')
++d;
else if (line[i]==' ')
++s;
}
printf("Vokal: %d",v);
printf("\nKonsonan: %d",c);
printf("\nDigits: %d",d);
printf("\nSpasi: %d",s);
getch();
return 0;
}

4.3.10 Menghitung panjang string (tanpa menggunakan fungsi strlen())


1. Ketik dan simpan program berikut dengan nama Modul04-10.
2. Jalankan program.

/*Menghitung panjang string (tanpa menggunakan fungsi strlen())*/


#include <stdio.h>
#include <conio.h>

int main()
{
char s[1000],i;
printf("Masukkan sebuah string: ");
scanf("%s",s);
for(i=0; s[i]!='\0'; ++i);
printf("Panjang string tersebut: %d",i);
getch();
return 0;
}

44
4.3.11 Menggabungkan dua string
1. Ketik dan simpan program berikut dengan nama Modul04-11.
2. Jalankan program.

/*Menggabungkan dua string*/


#include <stdio.h>
#include <conio.h>

int main()
{
char s1[100], s2[100], i, j;
printf("Masukkan string pertama: ");
scanf("%s",s1);
printf("Masukkan string kedua: ");
scanf("%s",s2);
for(i=0; s1[i]!='\0'; ++i); /* i panjang string s1*/
for(j=0; s2[j]!='\0'; ++j, ++i)
{
s1[i]=s2[j];
}
s1[i]='\0';
printf("Setelah penggabungan: %s",s1);

getch();
return 0;
}

4.3.12 Menyalin string (tanpa menggunakan fungsi strcpy())


1. Ketik dan simpan program berikut dengan nama Modul04-12.
2. Jalankan program.
/*Menggabungkan dua string*/
#include <stdio.h>
#include <conio.h>

int main()
{
char s1[100], s2[100], i, j;
printf("Masukkan string pertama: ");
scanf("%s",s1);
printf("Masukkan string kedua: ");
scanf("%s",s2);
for(i=0; s1[i]!='\0'; ++i); /* i panjang string s1*/
for(j=0; s2[j]!='\0'; ++j, ++i)
{
s1[i]=s2[j];
}
s1[i]='\0';
printf("Setelah penggabungan: %s",s1);

getch();
return 0;
}

45
4.3.13 Menghapus seluruh karakter dalam string kecuali alfabet
1. Ketik dan simpan program berikut dengan nama Modul04-13.
2. Jalankan program.

/*Menghapus seluruh karakter dalam string kecuali alfabet*/


#include <stdio.h>
#include <conio.h>

int main()
{
char line[150];
int i,j;
printf("Masukkan sebuah string: ");
gets(line);
for(i=0; line[i]!='\0'; ++i)
{
while (!((line[i]>='a'&&line[i]<='z') ||
(line[i]>='A'&&line[i]<='Z' || line[i]=='\0')))
{
for(j=i;line[j]!='\0';++j)
{
line[j]=line[j+1];
}
line[j]='\0';
}
}
printf("String alfabet saja: ");
puts(line);
getch();
return 0;
}

4.3.14 Mengurutkan elemen dalam urutan leksikografis (urutan kamus)


1. Ketik dan simpan program berikut dengan nama Modul04-14.
2. Jalankan program.

/*Mengurutkan elemen dalam urutan leksikografis (urutan kamus)*/


#include <stdio.h>
#include <conio.h>
#include <string.h>

int main()
{
int i,j;
char str[10][50],temp[50];
printf("Masukkan 10 kata:\n");
for(i=0;i<10;++i)
{
printf("%d. ",i+1); gets(str[i]);
}
for(i=0;i<9;++i)
for(j=i+1;j<10 ;++j){
if(strcmp(str[i],str[j])>0)

46
{
strcpy(temp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],temp);
}
}
printf("\n\n");
printf("Dalam urutan leksikografis: \n");
for(i=0;i<10;++i)
{
printf("%d. ",i+1); puts(str[i]);
}

getch();
return 0;
}

47
MODUL V Pointer

5.1 Pokok Bahasan


Pokok bahasan: Pointer
Sub Pokok bahasan:
1. Konsep pointer
2. Pointer dan larik
3. Pointer dan fungsi
4. Alokasi memori dinamik (Dynamic Memory Allocation)

5.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan pointer bahasa C mahasiswa akan
mampu mengimplementasikan program untuk perhitungan matematika dengan
menggunakan variabel pointer untuk manajemen alokasi memori secara dinamik
dengan benar (C3)

5.3 Percobaan
5.3.1 Mengakses elemen larik menggunakan pointer
1. Ketik dan simpan program berikut dengan nama Modul05-01.
2. Jalankan program.

/*Mengakses elemen larik menggunakan pointer*/


#include <stdio.h>
#include <conio.h>

int main()
{
int data[5], i;
printf("Masukkan elemen: ");
for(i=0;i<5;++i)
scanf("%d",data+i);
printf("Anda memasukkan: ");
for(i=0;i<5;++i)
printf("%d\n",*(data+i));
getch();
return 0;
}

48
5.3.2 Menukar bilangan dalam urutan siklus dengan pemanggilan secara acuan
1. Ketik dan simpan program berikut dengan nama Modul05-02.
2. Jalankan program.

/*Menukar bilangan dalam secara siklus dengan pemanggilan secara


acuan*/
#include <stdio.h>
#include <conio.h>

void Cycle(int *a,int *b,int *c);


main()
{
int a,b,c;
printf("Masukkan masing-masing nilai a, b dan c: ");
scanf("%d%d%d",&a,&b,&c);
printf("Nilai sebelum penukaran:\n");
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
Cycle(&a,&b,&c);
printf("Nilai setelah penukaran bilangan secara siklus:\n");
printf("a=%d\nb=%d\nc=%d\n",a,b,c);
getch();
return 0;
}

void Cycle(int *a,int *b,int *c){


int temp;
temp=*b;
*b=*a;
*a=*c;
*c=temp;
}

5.3.3 Menghitung bilangan terbesar dengan menggunakan alokasi memori


dinamik
1. Ketik dan simpan program berikut dengan nama Modul05-03.
2. Jalankan program.

/*Menghitung bilangan terbesar dengan menggunakan alokasi memori


dinamik*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

main()
{
int i,n;
float *data;
printf("Masukkan jumlah total elemen (1-100): ");
scanf("%d",&n);
data=(float*)calloc(n,sizeof(float)); /*alokasi memori sebanyak n
elemen*/
if(data==NULL)

49
{
printf("Error!!! memori tidak teralokasi.");
exit(0);
}
printf("\n");
for(i=0;i<n;++i) /* menyimpan bilangan dari pengguna. */
{
printf("Enter Number %d: ",i+1);
scanf("%f",data+i);
}
for(i=1;i<n;++i) /* loop untuk menyimpan bilangan terbesar di
data alamat*/
{
if(*data<*(data+i)) /* untuk mencari nilai terkecil*/
*data=*(data+i);
}
printf("Elemen terbesar = %.2f",*data);

getch();
return 0;
}

50
MODUL VI Struktur dan gabungan

6.1 Pokok Bahasan


Pokok bahasan: Struktur dan gabungan (Structure & Union)
Sub Pokok bahasan:
1. Konsep struktur
2. Struktur dan pointer
3. Struktur dan fungsi
4. Pemrograman gabungan

6.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan struktur dan gabungan bahasa C
mahasiswa akan mampu mengimplementasikan program C untuk perhitungan
matematika dengan menggunakan struktur dan gabunga scara benar (C3)

6.3 Percobaan
6.3.1 Menyimpan informasi (nama, kuliah dan nilai) dari mahasiswa
menggunakan struktur
1. Ketik dan simpan program berikut dengan nama Modul06-01.
2. Jalankan program.

/*Menyimpan informasi (nama, kuliah dan nilai) dari mahasiswa


menggunakan struktur*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>

struct student{
char name[50];
int roll;
float marks;
};
int main(){
struct student s;
printf("Masukkan informasi dari mahasiswa:\n\n");
printf("Masukkan nama: ");
scanf("%s",s.name);
printf("Masukkan tahun masuk: ");
scanf("%d",&s.roll);

51
printf("Masukkan nilai: ");
scanf("%f",&s.marks);
printf("\nMenampilkan informasi\n");
printf("Nama : %s\n",s.name);
printf("Tahun masuk: %d\n",s.roll);
printf("Nilai : %.2f\n",s.marks);
getch();
return 0;
}

6.3.2 Menambahkan dua nilai jarak (dalam inci-kaki) menggunakan struktur


1. Ketik dan simpan program berikut dengan nama Modul06-02.
2. Jalankan program.

/*Menambahkan dua nilai jarak (dalam inci-kaki) menggunakan struktur*/

#include <stdio.h>
#include <conio.h>

struct Distance{
int feet;
float inch;
}d1,d2,sum;

int main(){
printf("Masukkan informasi jarak pertama\n");
printf("Masukkan kaki: ");
scanf("%d",&d1.feet);
printf("Masukkan inci: ");
scanf("%f",&d1.inch);
printf("\nMasukkan informasi untuk jarak ke-2\n");
printf("Masukkan kaki: ");
scanf("%d",&d2.feet);
printf("Masukkan inci: ");
scanf("%f",&d2.inch);
sum.feet=d1.feet+d2.feet;
sum.inch=d1.inch+d2.inch;

/*jika inci lebih dari 12, ubah ke kaki. */


if (sum.inch>12.0)
{
sum.inch=sum.inch-12.0;
++sum.feet;
}
printf("\nJumlah dari jarak adalah =%d\'-
%.1f\"",sum.feet,sum.inch);
getch();
return 0;
}

52
6.3.3 Menambahkan dua bilangan kompleks dengan melewatkan struktur ke
dalam suatu fungsi
1. Ketik dan simpan program berikut dengan nama Modul06-03.
2. Jalankan program.

/*Menambahkan dua bilangan kompleks dengan


melewatkan struktur ke dalam suatu fungsi*/

#include <stdio.h>
#include <conio.h>
#include <stdio.h>

typedef struct complex{


float real;
float imag;
}complex;
complex add(complex n1,complex n2);

int main(){
complex n1,n2,temp;
printf("Bilangan kompleks pertama \n");
printf("Masukkan bagian riil dan imajiner: \n");
scanf("%f%f",&n1.real,&n1.imag);
printf("\nBilangan kompleks kedua \n");
printf("Masukkan bagian riil dan imajiner: \n");
scanf("%f%f",&n2.real,&n2.imag);
temp=add(n1,n2);
printf("Sum=%.1f+%.1fi",temp.real,temp.imag);
getch();
return 0;
}

complex add(complex n1,complex n2){


complex temp;
temp.real=n1.real+n2.real;
temp.imag=n1.imag+n2.imag;
return(temp);
}

6.3.4 Menghitung selisih antara dua perioda waktu


1. Ketik dan simpan program berikut dengan nama Modul06-04.
2. Jalankan program.
/*Menghitung selisih antara dua perioda waktu*/

#include <stdio.h>
#include <conio.h>

struct TIME{
int seconds;
int minutes;
int hours;
};

53
void Difference(struct TIME t1, struct TIME t2, struct TIME *diff);
int main(){
struct TIME t1,t2,diff; printf("Masukkan
waktu awal: \n"); printf("Masukkan jam,
menit dan detik: ");
scanf("%d%d%d",&t1.hours,&t1.minutes,&t1.seconds);
printf("Masukkan waktu akhir: \n");
printf("Masukkan jam, menit dan detik: ");
scanf("%d%d%d",&t2.hours,&t2.minutes,&t2.seconds);
Difference(t1,t2,&diff);
printf("\nSELISIH WAKTU: %d:%d:%d -
",t1.hours,t1.minutes,t1.seconds);
printf("%d:%d:%d ",t2.hours,t2.minutes,t2.seconds);
printf("= %d:%d:%d\n",diff.hours,diff.minutes,diff.seconds);
getch();
return 0;
}
void Difference(struct TIME t1, struct TIME t2, struct TIME *differ){
if(t2.seconds>t1.seconds){
--t1.minutes;
t1.seconds+=60;
}
differ->seconds=t1.seconds-t2.seconds;
if(t2.minutes>t1.minutes){
--t1.hours;
t1.minutes+=60;
}
differ->minutes=t1.minutes-t2.minutes;
differ->hours=t1.hours-t2.hours;
}

6.3.5 Menyimpan informasi mahasiswa dengan menggunakan struktur


1. Ketik dan simpan program berikut dengan nama Modul06-05.
2. Jalankan program.
/*Menyimpan informasi mahasiswa dengan menggunakan struktur*/

#include <stdio.h>
#include <conio.h>

struct student{
char name[50];
int roll;
float marks;
};
int main(){
struct student s[10];
int i;
printf("Masukkan informasi mahasiswa: \n");
for(i=0;i<10;++i)
{
s[i].roll=i+1;
printf("\nFor roll number %d\n",s[i].roll);
printf("Masukkan nama: ");
scanf("%s",s[i].name);
printf("Masukkan nilai: ");
scanf("%f",&s[i].marks);

54
printf("\n");
}
printf("Menampilkan informasi mahasiswa: \n\n");
for(i=0;i<10;++i)
{
printf("\nInformasi untuk bilangan roll %d: \n",i+1);
printf("Nama: ");
puts(s[i].name);
printf("Nilai: %.1f",s[i].marks);
}
getch();
return 0;
}

6.3.6 Menyimpan informasi dengan menggunakan struktur dengan alokasi


memori dinamik
1. Ketik dan simpan program berikut dengan nama Modul06-06.
2. Jalankan program.

/*Menyimpan informasi dengan menggunakan struktur


dengan alokasi memori dinamik*/

#include <stdio.h>
#include<stdlib.h>
#include<conio.h>

struct name {
int a;
char c[30];
};
int main(){
struct name *ptr;
int i,n;
printf("Masukkan jumlah data n: ");
scanf("%d",&n);

/*Alokasi memori untuk n struktur dengan pointer ptr yang menunjuk


ke alamat dasar*/
ptr=(struct name*)malloc(n*sizeof(struct name));
for(i=0;i<n;++i){
printf("Masukkan Nama dan Usia: \n");
scanf("%s%d",&(ptr+i)->c, &(ptr+i)->a);
}
printf("Menampilkan informasi: \n");
for(i=0;i<n;++i)
printf("%s\t%d\t\n",(ptr+i)->c,(ptr+i)->a);
getch();
return 0;
}

55
MODUL VII File I/O

7.1 Pokok Bahasan


Pokok bahasan: Operasi input/output file
Sub Pokok bahasan:
1. Operasi tulis file
2. Operasi baca file
3. Operasi baca/tulis file biner

7.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan operasi input/output Bahasa C,
mahasiswa akan mampu mengimplementasikan program C untuk menulis dan
membaca informasi dari dan ke suatu file dengan dengan benar (C2)

7.3 Percobaan
7.3.1 Membuat program C untuk membaca nama dan nilai mahasiswa yang
dimasukkan dari pengguna dan menyimpannya di file
/*membaca nama dan nilai mahasiswa yang dimasukkan
dari pengguna dan menyimpannya di file*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

main(){
char name[50];
int marks,i,n;
printf("Masukkan jumlah data = ");
scanf("%d",&n); FILE *fptr;
fptr=(fopen("d:\\mahasiswa.txt","w"));
if(fptr==NULL){
printf("Error!");
exit(1);
}
for(i=0;i<n;++i)
{
printf("Nama Mahasiswa-%d = ",i+1);
scanf("%s",name);
printf("Nilai Mahasiswa-%d = ",i+1);
scanf("%d",&marks);
fprintf(fptr,"\nName: %s \nMarks=%d \n",name,marks);
}
fclose(fptr);

56
printf("Silahkan buka file d:\\mahasiswa.txt");
getch();
return 0;
}

7.3.2 Operasi tambah ke file


Membuat program C untuk membaca nama dan nilai mahasiswa yang
dimasukkan dari pengguna dan menyimpannya di file. Jika file sebelumnya telah
ada, tambahkan informasi n mahasiswa.
#include <stdio.h>
int main(){
char name[50];
int marks,i,n;
printf("Enter number of students: ");
scanf("%d",&n); FILE *fptr;
fptr=(fopen("C:\\student.txt","a"));
if(fptr==NULL){
printf("Error!");
exit(1);
}
for(i=0;i<n;++i)
{
printf("For student%d\nEnter name: ",i+1);
scanf("%s",name);
printf("Enter marks: ");
scanf("%d",&marks);
fprintf(fptr,"\nName: %s \nMarks=%d \n",name,marks);
}
fclose(fptr);
return 0;
}

7.3.3 Write a C program to write all the members of an array of strcures to a file
using fwrite(). Read the array from the file and display on the screen.
#include <stdio.h>
struct s
{
char name[50];
int height;
};
int main(){
struct s a[5],b[5];
FILE *fptr; int i;
fptr=fopen("file.txt","wb");
for(i=0;i<5;++i)
{
fflush(stdin);
printf("Enter name: ");
gets(a[i].name);
printf("Enter height: ");
scanf("%d",&a[i].height);

57
}
fwrite(a,sizeof(a),1,fptr);
fclose(fptr);
fptr=fopen("file.txt","rb");
fread(b,sizeof(b),1,fptr);
for(i=0;i<5;++i)
{
printf("Name: %s\nHeight: %d",b[i].name,b[i].height);
}
fclose(fptr);
}

58
MODUL VIII Komunikasi Serial via Port USB

8.1 Pokok Bahasan


Pokok bahasan: Komunikasi Serial via Port USB
Sub Pokok bahasan:
1. Inisialisasi port COM virtual (konverter USB-RS232)
2. Komunikasi antarkomputer via port USB
3. Komunikasi serial via port USB antara PC dengan piranti eksternal (mikrokontroler)

8.2 Tujuan
Setelah mengikuti praktikum dengan pokok bahasan operasi input/output Bahasa C,
mahasiswa mampu mengimplementasikan program C untuk inisialisasi port USB,
kirim-terima data serial melalui port USB dan komunikasi antarkompuer via port USB
dengan benar (C3)

8.3 Percobaan
8.3.1 Instalasi Kabel USB-RS232
1. Instalasi driver USB-RS232 sesuai buku petunjuk produknya.

Kabel: USB-RS232 Merk BAFO-812 (atau merk lain)

2. Cek di Device Manager hasil instalasi.

59
3. Catat nomor COM untuk kabel tersebut (COM7 pada contoh tersebut).
4. Instal hingga kabel USB-RS232 siap digunakan.

8.3.2 Kirim Data Byte Serial dari PC1 ke PC2


Peralatan yang digunakan:
1. Kabel konverter USB-ke-RS232
2. Kabel silang Tx-Rx

Percobaan:
1. Buat koneksi PC1 dengan PC2 melalui kabel USB-RS232 melalui kabel silang
seperti Gambar 8.1.
2. Parameter komunikasi serial: 9600 bps, 8 bit, N paritas, 1 stop bit
3. Pada PC1 ketik Program 01_KirimSerialByte01.cpp
4. Pada PC2 ketik Program 01_TerimaSerialByte01.cpp
5. Eksekusi program di masing-masing PC, lalu amati dan catat hasilnya.
6. Lakukan pergantian komunikasi. PC2 sebagai pengirim dan PC1 sebagai penerima.

60
Gambar 8.1. Koneksi komunikasi serial antara dua PC

Pada PC1
Program: Modul08-Kirim-01.cpp

//Kirim serial //
/* Program untuk kirim data serial melalui port serial COM
via kabel USB-RS232 dari PC1 ke PC2
untuk menunjukkan komunikasi serial antar-PC
*/

#include <windows.h>
#include <conio.h>
#include <stdio.h>

HANDLE GetSerialPort(char *);


void delay();
int main(void)
{
HANDLE h1, h2;
char h1_buffer[1];
DWORD byteswritten = 0, bytesread = 0;
int j;
char byte_kirim=0;
char c1[] = {"COM5"};
h1 = GetSerialPort(c1); //membuka port serial

while(1)
{
system("CLS");
printf("Masukkan byte untuk dikirim = ");
scanf("%d",&byte_kirim);
h1_buffer[0]=byte_kirim;
WriteFile(h1, h1_buffer, 1, &byteswritten, NULL);

61
printf("\n");
};
CloseHandle(h1);
return 0;
//getch();
}

HANDLE GetSerialPort(char *p)


{
HANDLE hSerial;
hSerial = CreateFile(p,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);

DCB dcbSerialParams = {0};


dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
dcbSerialParams.BaudRate=CBR_9600; //9600 bps
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
SetCommState(hSerial, &dcbSerialParams);
return hSerial;
}

Pada PC2
Program: Modul08-Terima-01.cpp

/* Program TERIMA data byte serial


9600 bps, 8 bit, None paritas, 1 stop bit
dari mikrokontroler lalu ditampilkan ke monitor.
Program ini untuk menunjukkan pengiriman data byte dari luar PC
melalui kabel Max232-RS232-USB
*/

#include <windows.h>
#include <conio.h>
#include <stdio.h>

HANDLE GetSerialPort(char *);


void delay();
int main(void)
{
HANDLE h1, h2;
char h2_buffer[1];
DWORD byteswritten = 0, bytesread = 0;
char c2[] = {"COM5"};
h2 = GetSerialPort(c2);

do
{
ReadFile(h2, h2_buffer, 1, &bytesread, NULL); //Baca data serial
if(bytesread)
{

62
system("CLS");
printf("%u\n", (h2_buffer[0] & 0xFF));
}
else
{
printf("Tidak ada data masuk\n");
printf("Yang ada di buffer h2_buffer %u\n", h2_buffer);
}
}while(1);

CloseHandle(h2);
}

HANDLE GetSerialPort(char *p)


{
HANDLE hSerial;
hSerial = CreateFile(p,
GENERIC_READ | GENERIC_WRITE,
0,
0, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);

DCB dcbSerialParams = {0};


dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
SetCommState(hSerial, &dcbSerialParams);
return hSerial;
}

8.3.3 Kirim-Terima Teks Antara Komputer


Percobaan:
 Buat koneksi seperti Gambar 8.1.
 PC1 mengirimkan data teks melalui port COM kabel USB-RS232.
 PC2 menerima teks melalui port COM kabel USB-RS232 dan menampilkan teks ke
monitor.
 Teks dimasukkan ke PC1 oleh pengguna.
 Parameter komunikasi: 9600 bps, 8 bit, N paritas, 1 stop bit.

Program di PC1: 02_KirimSerialTeks01.cpp

// Kirim TEKS
// Program untuk KIRIM TEKS melalui port serial COM
// via kabel USB-RS232 dari PC1 ke PC2
// untuk menunjukkan komunikasi serial antar-PC
// 9600 bps, 8 bit, N paritas, 1 stop bit

63
#include <windows.h>
#include <conio.h>
#include <stdio.h>

HANDLE GetSerialPort(char *);


void delay();
int main(void)
{
HANDLE h1, h2;
char h1_buffer[60], byte_kirim=0, teks[60];
DWORD byteswritten = 0, bytesread = 0;
char c1[] = {"COM7"};

while(1)
{
system("CLS");
h1 = GetSerialPort(c1);
printf("Masukkan byte untuk dikirim = ");
gets(teks);
strcpy(h1_buffer,teks);
WriteFile(h1, h1_buffer, 60, &byteswritten, NULL);
printf("\n");
delay();
CloseHandle(h1);
};
return 0;
}

HANDLE GetSerialPort(char *p)


{
HANDLE hSerial;
hSerial = CreateFile(p,
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);

DCB dcbSerialParams = {0};


dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
SetCommState(hSerial, &dcbSerialParams);
return hSerial;
}

void delay ()
{
int i = 100000000;
while(i>0)
{
i--;
}
}

64
Program di PC2: 02_TerimaSerialTeks01.cpp

// Terima TEKS
// Program untuk TERIMA TEKS melalui port serial COM (kabel USB-RS232)
// dari PC lain
// 9600 bps, 8 bit, N, 1 stop bit

#include <windows.h>
#include <conio.h>
#include <stdio.h>

HANDLE GetSerialPort(char *);


void delay();
int main(void)
{
HANDLE h1, h2;
char h2_buffer[60];
DWORD byteswritten = 0, bytesread = 0;
char c2[] = {"COM7"};

do
{
h2 = GetSerialPort(c2);
ReadFile(h2, h2_buffer, 60, &bytesread, NULL);
printf("%s\n", h2_buffer);
delay();
CloseHandle(h2);
} while(1);
}

HANDLE GetSerialPort(char *p)


{
HANDLE hSerial;
hSerial = CreateFile(p,
GENERIC_READ | GENERIC_WRITE,
0,
0, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
0);
DCB dcbSerialParams = {0};
dcbSerialParams.DCBlength=sizeof(dcbSerialParams);
dcbSerialParams.BaudRate=CBR_9600;
dcbSerialParams.ByteSize=8;
dcbSerialParams.StopBits=ONESTOPBIT;
dcbSerialParams.Parity=NOPARITY;
SetCommState(hSerial, &dcbSerialParams);
return hSerial;
}

void delay ()
{
int i = 100000000;
while(i>0)
i--;
}

65
8.3.4 Kirim Data Byte dari PC ke Piranti Eksternal (Mikrokontroler)
Peralatan yang digunakan:
1. Kabel konverter USB-ke-RS232
2. Kabel konverter RS232-TTL (MAX232)
3. Trainer Kit Mikrokontroler AVR berlabel TERIMA
4. Trainer Kit Mikrokontroler AVR berlabel KIRIM

Percobaan-1:
1. Buat koneksi PC dengan kit mikrokontroler TERIMA melalui kabel USB-RS232
dan kabel RS232-TTL seperti Gambar 8.2.
2. Hubungkan Kit Mikrokontroler ke port USB di PC.
3. Parameter komunikasi serial: 9600 bps, 8 bit, N paritas, 1 stop bit
4. Pada PC ketik Program 01_KirimSerialByte01.cpp
5. Eksekusi program di masing-masing PC, lalu amati tampilan di monitor dan
tampilan peraga LED di modul trainer kit, dan catat hasilnya.

Gambar 8.2. Koneksi komunikasi serial antara PC dengan piranti eksternal


(mikrokontroler)

Percobaan-2:
1. Modifikasi Program 01_KirimSerialByte01.cpp, baris 19-27 menjadi seperti
berikut.
2. Amati dan catat hasilnya.

66
Percobaan-3:
1. Modifikasi Program 01_KirimSerialByte01.cpp, baris 19-27 menjadi seperti
berikut.
2. Amati dan catat hasilnya.

8.3.5 Terima Data Byte dari Piranti Eksternal ke PC (Mikrokontroler)


Peralatan yang digunakan:
1. Kabel konverter USB-ke-RS232
2. Kabel konverter RS232-TTL (MAX232)
3. Trainer Kit Mikrokontroler AVR berlabel TERIMA
4. Trainer Kit Mikrokontroler AVR berlabel KIRIM

Percobaan:
1. Buat koneksi PC dengan kit mikrokontroler KIRIM melalui kabel USB-RS232 dan
kabel RS232-TTL seperti Gambar 8.2.
2. Parameter komunikasi serial: 9600 bps, 8 bit, N paritas, 1 stop bit
3. Pada PC ketik Program 01_TerimaSerialByte01.cpp

67
4. Eksekusi program di masing-masing PC, lalu amati tampilan di monitor dan
tampilan peraga LED di modul trainer kit, dan catat hasilnya.

68
Program Mikrokontroler
Mikrokontroler sebagai penerima.
Nama program: TerimaSerial01.c

// Program TERIMA data serial


// 9600 bps, 8 bit, None paritas, 1 stop bit
// dari serial komputer ditampilkan ke 8-LED
// untuk menunjukkan pengiriman data byte serial dari PC
// melalui kabel USB-RS232-Max232

#include <mega8535.h>
#include <stdio.h>

void main()
{
int b;
UCSRB=0b00011000;
UCSRC=0b10000110;
UBRRH=0;
UBRRL=103;
DDRB=0b11111111;

PORTB=0x00;
while(1)
{
while(!(UCSRA & (1<<RXC)));
PORTB=UDR;
};
}

69
Mikrokontroler sebagai pengirim.
Nama program: KirimSerial01.c

// Program KIRIM data serial


// 9600 bps, 8 bit, None paritas, 1 stop bit
// dari serial komputer ditampilkan ke 8-LED
// untuk menunjukkan pengiriman data byte serial dari PC
// melalui kabel USB-RS232-Max232

#include <mega8535.h>
#include <stdio.h>
#include <delay.h>

void main()
{
int i=0;
UCSRB=0b00001000;
UCSRC=0b10000110;
UBRRH=0;
UBRRL=103;
DDRB=0b11111111;

PORTB=0x00;
while(1)
{
for(i=0;i<=255;i++)
{
while(!(UCSRA & (1<<UDRE)));
PORTB=i;
UDR=i;
delay_ms(400);
}
};
}

70

Anda mungkin juga menyukai