• Tidak ada hasil yang ditemukan

Modul Praktikum Algoritma Dan Struktur Data

N/A
N/A
Protected

Academic year: 2021

Membagikan "Modul Praktikum Algoritma Dan Struktur Data"

Copied!
80
0
0

Teks penuh

(1)

LAPORAN PRAKTIKUM

LAPORAN PRAKTIKUM

ALGO

ALGORITMA D

RITMA DAN

AN STRU

STRUKTUR DA

KTUR DATA

TA

Semester II Semester II Tahun Akademik 2013/2014 Tahun Akademik 2013/2014 Oleh: Oleh: N

Naammaa : : AAhhmmaar r TTaauuffiik k SSaaffaaaatt N

NPPMM : : 113377000066223300

LABORATORIUM INFORMATIKA LABORATORIUM INFORMATIKA JURUSAN TEKNIK INFORMATIKA JURUSAN TEKNIK INFORMATIKA FAKU

FAKULTAS LTAS TEKNITEKNIK UNK UNIVERSITIVERSITASAS NEGERNEGERII SILIWASILIWANGINGI TASIKMALAYA

TASIKMALAYA 2014

(2)
(3)

ii

KATA PENGANTAR

KATA PENGANTAR

Puji d

Puji dan san syukyukurur penypenyusunusun panjpanjatkaatkan ken ke hadihadiratrat Allah Allah SWT SWT karekarena ana atas tas berkaberkatt rahm

rahmatat dan kdan karunarunia-Nyia-Nyaa penypenyusunusun dapadapat menyt menyelesaelesaikan ikan prakpraktikum tikum sertserta lapa laporanoran akhi

akhirr mata mata kuliakuliahh AlgorAlgoritma itma dandan StrukStruktur tur DataData..

Adapun isi dari laporan akhir ini adalah kumpulan dari setiap laporan Adapun isi dari laporan akhir ini adalah kumpulan dari setiap laporan mingguan selama praktikum berlangsung. Laporan ini merupakan syarat untuk  mingguan selama praktikum berlangsung. Laporan ini merupakan syarat untuk  dapa

dapat t mengmengikuti ujianikuti ujian prakpraktikum.tikum. Tak

Tak luplupaa penpenyuyusun sun ucaucapkapkann babanyanyak tek terimrimakaakasih sih kepkepadada Doa Dosensen besbeserta erta stastaf f  pe

pengangajarjar mata kmata kuliuliahah AlgAlgorioritma datma dann StrStruktuktur Datur Dataa yayang seng selallalu membu membimbimbing ding danan mengajari

mengajari penyusunpenyusun dalam meladalam melaksanakan ksanakan praktikum dapraktikum dan dalam n dalam menyusun menyusun laporanlaporan in

ini. Si. Sererta sta sememua ua pipihahak yk yanangg tetelalah bh bananyyakak memembmbanantutu pepenynyususunun dadalalam hm halal penyusu

penyusunan laporan nan laporan ini.ini. Tentunya lapora

Tentunya laporan inin ini masih sangat jauh masih sangat jauh dari kesempurnadari kesempurnaan. Oleh karena itu,an. Oleh karena itu, kr

kritiitik sek serta srta sararan yan yanangg bebersrsififatat memembmbanangugunn sasangngat peat penynyususunun hahararapkpkan unan untutuk k  menyempurn

menyempurnakan laporan akhir akan laporan akhir ini.ini.

Atas perhatian dari semua pihak yang membantu penulisan ini saya ucapkan Atas perhatian dari semua pihak yang membantu penulisan ini saya ucapkan terim

terimakasakasih. Sih. Semogemogaa laporlaporanan akhirakhir ini dini dapatapat dapadapat bet bermanrmanfaat faat bagi bagi penypenyusun usun dandan bagi pembaca, Amiin.

bagi pembaca, Amiin.

Ta

Tasiksikmalmalayaya,a, JunJunii 20120144

Ahmar Taufik Safaat Ahmar Taufik Safaat

137006230 137006230

(4)

DAFTAR ISI

DAFTAR ISI

KATA

KATA PENGPENGANTAANTARR ii

DAFTAR ISI

DAFTAR ISI iiii

MODUL I

MODUL I

 – 

 – 

PENGANTAR BAHASA CPENGANTAR BAHASA C

II.. TuTujjuuaann PPrraakkttiikkuumm II--11 IIII.. DDaassaar r TTeeoorrii

A

A.. PPeennggaannttaarr BBaahhaassaaCC II--11 B

B.. SSttrruukkttuur r PPrrooggrraam m ddaallaam m BBaahhaassa a CC II--22 III

III.. HasHasil dail danPenPembambahahasansan Program 1-1

Program 1-1

 – 

 – 

PPrrooggrraamm HHeelllloo II--33 Program 1-2

Program 1-2

 – 

 – 

PPrrooggrraamm HHeelllloo11 II--33 Program 1-3

Program 1-3

 – 

 – 

PPrrooggrraamm AAssiiggnn II--44 Program 1-4

Program 1-4

 – 

 – 

PPrrooggrraamm AAssggddllll II--44 Program 1-5

Program 1-5

 – 

 – 

PPrrooggrraamm AAssiiggnn11 II--55 Program 1-6

Program 1-6

 – 

 – 

PPrrooggrraamm AAssiiggnn22 II--55

MODUL II

MODUL II

 – 

 – 

PEMROSESAN FILEPEMROSESAN FILE

II.. TTuujjuuaann PPrraakkttiikkuumm IIII--11 IIII.. DDaassaar r TTeeoorrii

A

A.. MMeemmbbuukkaa FFiillee IIII--11

B

B.. MMeennuuttuupp FFiillee IIII--22

C

C.. MMeelleettaakkkkaan n DDaatta a kke e BBuuffffeerr IIII--22 D

D.. MMaanniippuullaassii FFiillee IIII--33 1

1.. MMeennggeecceek k KKeebbeerraaddaaaan n FFiillee IIII--33 2

2. M. Meennggggaanntti i NNaamma a FFiillee IIII--33 3

3.. MMeenngghhaappuussFFiillee IIII--44 IIIIII.. HHaassiil l ddaan n PPeemmbbaahhaassaann IIII--44

P

Prrooggrraamm 22--11 IIII--44

P

Prrooggrraamm 22--22 IIII--44

P

(5)

iii iii P

Prrooggrraamm 22--44 IIII--66

P

Prrooggrraamm 22--55 IIII--66

S

Sttuussii KKaassuuss 22--11 IIII--77

S

Sttuussii KKaassuuss 22--22 IIII--77

MODUL III

MODUL III

 – 

 – 

MESIN ABSTRAKMESIN ABSTRAK

II.. TTuujjuuaann PPrraakkttiikkuumm IIIIII--11 IIII.. DDaassaar r TTeeoorrii

A

A.. MMeessiin n IInntteeggeer r ((PPeennccaaccaahh)) IIIIII--11 B

B.. MMeessiinn KKaarraakktteerr IIIIII--22 III

III.. HasHasil dail dan Pen Pembambahashasanan P

Prrooggrraamm 33--11 IIIIII--44

P

Prrooggrraamm 33--22 IIIIII--44

S

Sttuuddii KKaassuuss 33--11 IIIIII--55

S

Sttuuddii KKaassuuss 33--22 IIIIII--55

S

Sttuuddii KKaassuuss 33--33 IIIIII--66

S

Sttuuddii KKaassuuss 33--44 IIIIII--77

MODUL IV

MODUL IV

 – 

 – 

REKURSIFREKURSIF

II.. TTuujjuuaann PPrraakkttiikkuumm IIVV--11

IIII.. DDaassaarrTTeeoorrii IIVV--11

III

III.. HasHasil dail dan Pen Pembambahashasanan P

Prrooggrraamm 44--11 IIVV--22

P

Prrooggrraamm 44--22 IIVV--22

S

Sttuuddii KKaassuuss44--11 IIVV--33

S

Sttuuddii KKaassuuss44--22 IIVV--44

M

MODODULUL VV

 – 

 – 

ABSTRACT DATA TYPE (ADT)ABSTRACT DATA TYPE (ADT)

II.. TTuujjuuaann PPrraakkttiikkuumm VV--11

IIII.. DDaassaarrTTeeoorrii VV--11

(6)

Program 5-1 V-2

MODUL VI

 – 

LINKED LIST

I. Tujuan Praktikum VI-1

II. DasarTeori VI-1

III. Hasil dan Pembahasan

Program 6-1 VI-2

Studi Kasus 6-1 VI-3

Studi Kasus 6-2 VI-6

Studi Kasus 6-3 VI-8

Studi Kasus 6-5 VI-8

Studi Kasus 6-6 VI-9

MODUL VII

 – 

STACK

I. Tujuan Praktikum VII-1

II. DasarTeori VII-1

III. Hasil dan Pembahasan

Program 7-1 VII-2

Studi Kasus7-1 VII-5

MODUL VIII

 – 

QUEUE

I. Tujuan Praktikum VIII-1

II. DasarTeori VIII-1

III. Hasil dan Pembahasan

Program 8-1 VIII-3

Studi Kasus 8-1 VIII-5

Studi Kasus 8-2 VIII-8

MODUL IX

 – 

TREE

I. Tujuan Praktikum IX-1

(7)

v III. Hasil dan Pembahasan

Program 9-1 IX-6

MODUL X

 – 

GRAPH

I. Tujuan Praktikum X-1

II. DasarTeori X-1

III. Hasil dan Pembahasan

Program 10-1 X-3

MODUL XI

 – 

KESIMPULAN DAN SARAN

I. Kesimpulan XI-1

II. Saran XI-1

DAFTAR PUSTAKA 1

(8)

DAFTAR PUSTAKA

1. Bryon, Goffried. Programming with PASCAL 1986. New York: Schaum Series

2. Inggriani Liem. Dasar Pemrograman (Bagian Pemrograman Prosedural). April 2007. Bandung: STEI

 – 

ITB

3. Munir, Rinaldi. 2012. Algoritma dan Pemrograman 2. Bandung : Informatika 4. Pranata, Antony. 2005. Algoritma dan Pemrograman. Yogyakarta : Graha

Ilmu

5. Santosa, Insap. Dasar-dasar Pemrograman Pascal Teori dan Program Terapan. Yogyakarta: Andi Offset

6. Wahid, Fathul. 2004. Dasar-dasar Algoritma dan Pemrograman. Yogyakarta: Andi Offset

7. Teknik Informatika. 2013. Panduan Praktikum Algoritma dan Pemrograman. Tasikmalaya : Fakultas Teknik UNSIL

(9)

2

JURUSAN TEKNIK INFORMATIKA

FAKULTAS TEKNIK UNIVERSITAS SILIWANGI

LEMBAR ASISTENSI PRAKTIKUM

Nama : Ahmar Taufik Safaat

NPM : 137006230

Kelompok : 11

Nama Praktikum : Algoritma dan Struktur Data Tahun Akademik : 2013/2014

Asisten Dosen : Erna Haerani

No. Tanggal Hasil Pemeriksaan Perbaikan yang perlu dilakukan ACC (Paraf Asisten) Tasikmalaya, Juni 2014 Dosen Pembina Heni Sulastri, ST

(10)

MODUL I

 – 

PENGANTAR BAHASA C

I. Tujuan Praktikum

Praktikan diharapkan dapat:

1. Mengenal bahasa C dan struktur program pada bahasa C

2. Mengetahui dan memahami penggunaan komponen-komponen dasar pada bahasa C

3. Menggunakan perintah dasar penulisan dalam membuat program dengan bahasa C

II. Dasar Teori

A. Pengantar Bahasa C

Bahasa C dikembangkan oleh Dennis M. Ritchie dan Brian W. Kernighan pada awal tahun 1970. Bahasa C berkembang di lingkungan UNIX (± 90% sistem operasi UNIX ditulis dalam bahasa C).

Standar yang ada:

• Definisi Kernighan dan Ritchie (K&R); • ANSI-C (X-3.159-1989-);

• Definisi AT&T (untuk superset C, C++).

Versi pada PC misalnya:

• Lattice C;

• Microsoft C/ Microsoft QuickC; • Turbo C/Borland C++;

Pada tahun 1986, dikembangkan superset C (kompatibel dengan C, namun dilengkapi dengan kemampuan pemrograman berorientasi objek) oleh Bjarne Stroustrup [Stroustrup-86], yaitu bahasa C++ (C with Class).

Catatan:

Ringkasan ini memakai standar ANSI C. Contoh-contoh sedapat mungkin dipilih bebas dari implementasi kompilator tertentu. Jika ada contoh yang spesifik  terhadap implementasi, implementasi kompilator yang dipakai akan disebutkan.

(11)

I-2 Aplikasi dalam bahasa C

Bahasa C banyak dipakai untuk:

1. Membuat sistem operasi dan program-program sistem,

2. Pemrograman yang “dekat” ke perangkat keras (misalnya untuk kontrol peralatan),

3. Membuat tool kit,

4. Menulis program aplikasi (misalnya dBase, WordStar, Lotus 123).

Kelebihan bahasa C, sehingga terpilih untuk aplikasi-aplikasi tersebut adalah kemampuannya untuk membuat kode yang compact, efisien tanpa mengorbankan readability (beda dengan bahasa assembly yang efisien namun sudah dibaca, atau bahasa tingkat tinggi lain yang enak dibaca namun tidak efisien). Walaupun tak  dapat diingkari bahwa program dalam bahasa C lebih sulit dibaca (karena compact) dibandingkan dengan bahasa tingkat tinggi yang lain.

B. Struktur Program dalam Bahasa C

Berikut ini adalah struktur sebuah program utama dalam bahasa C. Contoh lengkap dapat dilihat pada contoh program kecil.

 /* Nama File */ 

 /* Identitas perancang/penulis */   /* Deskripsi ringkas dari program */ 

<tipe> main([int argc, char** argv[, char** envp]]) {

 /* Keterangan program */   /* KAMUS */ 

 /* Algoritma/deretan intruksi yang executable */  Return(<retval>);

(12)

III. Hasil dan Pembahasan Program 1.1 – Program Hello

Program ini bertujuan untuk menampilkan kata “hello” ke layar (output). Adapun output di atas dibarengi dengan pesan dan beberapa rekomendasi dari aplikasi bahasa C, dan menunjukkan bahwa drive C digunakan untuk direktori penyimpanan file dari bahasa C.

(13)

I-4

Program hello1 ini sama dengan program hello (program yang pertama) yakni  bertujuan untuk menuliskan kata “hello” ke layar output. Tapi, sintaksnya lebih

lengkap.

Program 1.3 – Program Asign

Program Asign ini bertujuan untuk mendeklarasikan variabel i dengan tipe data integer ke dalam program utama. Setelah itu, berfungsi untuk menuliskan “hello” dan “ini nilai i : [nilai i = 5]”. Setelah itu, dikembalikan ke dalam nilai 0 setelah program selesai dirunning.

Program 1.4 – Program Asgdll

Program Asgdll bertujuan untuk mendefinisikan “f” dan “fll” sebagai variabel dengan tipe data yang berbeda ke dalam program. Program ini tidak  memberikan perintah apa pun untuk menuliskan data ke layar output.

(14)

Program 1.5 – Program Asign1

Program Asign1 bertujuan untuk menuliskan nilai i dan ii dengan tipe data yang berbeda. Selain itu, program ini bertujuan untuk menampilkan nilai terkecil dan terbesar dari tipe data integer, dan juga nilai terpanjang dari integer. Datanya sudah terdapat pada program. Jadi, kita hanya memanggilnya.

(15)

I-6

Program ini berfungsi untuk menginisialisasi karakter dengan karakter, karakter dengan integer (bilangan bulat), dan juga menuliskan beberapa data ke layar output.

Resume:

 /*(Kalimat/Nama)*/ 

Menunjukkan bagian sintaks dalam program bahasa C, atau bisa juga hanya berupa komentar/judul. Bagian ini tidak akan berpengaruh pada program utama.

void main( ) { ... } int main( ) { ... }

Struktur utama dalam pemrograman bahasa C, menandakan bahwa pemrograman dimulai. Sintaks ini wajib ada dalam setiap program.

 printf(“... \ n”);

Berfungsi untuk menampilkan/menuliskan kata/kalimat ke layar output. \n berfungsi untuk meletakkan kursor di baris berikutnya (garis baru).

return 0; Mengembalikan ke nilai 0 stelah program dijalankan. int i; short ks; long

kl; char c;

Mendeklarasikan “ i, ks, kl, c ” sebagai variabel dengan tipe data yang berbeda-beda.

%d, %ld, %c, %f 

Pemanggilan data dengan tipe data yang khsusus. D untuk double (bilangan bulat), ld untuk long double (bilangan bulat yang lebih besar), c untuk character

(16)

(huruf/angka/karakter), dan f untuk float (bilangan desimal).

#include<limits.h> Sintaks untuk memasukkan perintah-perintah khusus. INT_MIN,

INT_MAX, LONG_MAX

Tipe data yang sudah baku, dan nilainya sudah terdefinisikan dalam program bahasa C. Data yang dimunculkan pun akan otomatis.

 \t\t Berfungsi untuk tab (memberikan jarak).

(17)

II-1

MODUL II

– 

PEMROSESAN FILE

I. Tujuan Praktikum

Praktikan diharapkan dapat:

1. Mengenal pemrosesan file pada bahasa C

2. Melakukan proses input/output data dengan bahasa C

3. Mengimplementasikan pemrosesan file untuk melakukan perekaman data pada bahasa C

II. Dasar Teori

Seringkali untuk program-program aplikasi sistem informasi, data perlu disimpan secara permanen utnu keperluan lebih lanjut. Data dapat disimpan di eksternal memory seperti di disk, floppy disk, dan UFD ataupun di internal memory sendiri pada penyimpanan internal memory mempunyai sifat volatile dan relatif lebih kecil dibandingkan dengan external memory.

Pada bab ini akan membahas tentang operasi input/output file dan manipulasi file. Operasi i/o file melibatkan pembacaan dari file atau perekaman ke file. Manipulasi file melibatkan operasi pengecekan keberadaan file di disk, mengganti nama, menghapus file, dan lain-lain.

A. Membuka File

Suatu file di disk harus dibuka sebelum digunakan dapat dilakukan dengan fungsi pustaka fopen( ). Hasil dari pembukaan file ini akan didapatkan suatu nilai pointer dengan tipe FILE, berikut ini bentuk operasi buka file:

FILE *fopen ( const char*nama_file, const char*mode );

Pada operasi di atas nama_file dan mode ditentukan oleh pembuat program sendiri. Berikut ini contoh mode yang digunakan di bahasa C.

Tabel 2.1 – Mode dalam Bahasa C

Mode Arti

“r” Membuka file yang telah ada untuk dibaca. Jika file belum ada, pembuatan file tidak akan berhasil dan fungsi fopen akan bernilai

(18)

NULL.

“w” Membuat file baru untuk ditulis. Jika file telah ada maka file lama akan dihapus.

“a” Membuka file yang telah ada untuk ditambah dengan data yang baru yang akan diletakkan di akhir file. Jika file belum ada akan dibuat file baru.

“r+” Sama dengan “r” tetapi selain file dapat dibaca juga dapat ditulis. “w+” Sama dengan “w” tetapi selain file dapat ditulis juga dapat dibaca.

“a+” Sama dengan “a” tetapi selain file dapat ditulis file juga dapat dibaca.

B. Menutup File

Menutup file umumnya dilakukan untuk tiga tujuan yaitu pertama menutup semua file yang masih terbuka sebelum program berakhir, kedua menutup file tertentu karena tidak diperlukan lagi dan ketiga menutup karena ingin membuka file lain. Fungsi pustaka yang digunakan untuk sebuah file adalah:

int fclose(FILE * pointer-file);

C. Meletakkan Data ke Buffer

Bahasa C membedakan lima macam bentuk data untuk diletakkan di penyangga (buffer), yaitu karakter, integer, string, terformat, dan blok data. Untuk  masing-masing data ini fugnsi pustaka yang digunakan berbeda yaitu sebagai berikut:

Tabel 2.2 – Fungsi Pustaka Fungsi

Pustaka Deskripsi

fputc( ) Meletakkan sebuah nilai karakter ke buffer untuk direkam ke file. fgetc( ) Membaca sebuah nilai karakter dari file untuk diletakkan di buffer. putw( ) Meletakkan sebuah nilai integer ke buffer untuk direkam ke file. getw( ) Membaca sebuah nilai integer dari file untuk diletakkan di buffer. fputs( ) Meletakkan sebuah nilai string ke buffer untuk direkam ke file. fgets( ) Membaca sebuah nilai string dari file untuk diletakkan di buffer.

(19)

II-3

fprintf( ) Meletakkan sebuah data terformat di buffer untuk direkam ke file. fscanf( ) Membaca sebuah data terformat dari file untuk diletakkan di buffer. fwrite( ) Meletakkan sebuah blok data ke buffer untuk direkam ke file.

fread( ) Membaca sebuah struktur data dari file untuk diletakkan di buffer.

D. Manipulasi File

Bagian ini akan membahas bagian memanipulasi suatu file yang tidak  melibatkan proses I/O seperti:

1. Mengecek Keberadaan File

Seringkali diperlukan jika akan membuat suatu file baru untuk mengetahui file itu sudah ada atau tidak. Fungsi pustakanya adalah:

int access ( const char * path, int amode);

const char * path menunjukkan letak file itu berada. Amode berbeda dengan mode operasi file. Di sini terdapat beberapa amode yaitu:

• Amode 0 hanya akan memeriksa keberadaan file di disk. • Amode 2 menunjukkan pemeriksaan apakah file dapat ditulis. • Amode 4 menunjukkan pemeriksaan apakah file dapat dibaca. • Amode 6 menunjukkan pemeriksaan apakah file dapat dibaca dan

ditulis.

Fungsi pustaka access terdapat dalam prototype io.h, contoh penggalan programnya adalah:

if((access( “c:\coba.txt”,0))= =0) { printf( “file sudah ada” );

}

Pada contoh penggalan program di atas dilakukan pengecekan apakah file yang dimaksud ada atau tidak, jika “ya” aka n dicetak nilai string yang ada dimana kondisinya bernilai 0.

2. Mengganti Nama File

Fungsi rename( ) digunakan untuk mengganti nama suatu file yang sudah ada di disk. Bentuk umumnya:

(20)

3. Menghapus File

Fungsi menghapus file dapat dilakukan dengan unlink( ). Bentuk lengkapnya adalah:

int unlink( const char * path );

Selanjutnya semua fungsi yang telah diberikan dapat dikembangkan untuk  membuat suatu program bahasa C dalam operasi file yang lebih lengkap dan utuh.

III. Hasil dan Pembahasan Program 2-1 #include<stdio.h> main() { FILE * PF; PF = fopen( "coba.txt" , "r" ); if(PF==NULL)

{printf( "terdapat kesalahan, file tidak dapat dibuka atau tak ada" );}

else

{printf( "file dapat dibuka" );} return 0;

}

Program 2-1 ini bertujuan untuk membaca file dengan nama file “coba.txt”. Jika saat pembukaan file bernilai NULL (kosong) atau file belum ada maka akan ditampilkan di layar “terdapat kesalahan, file tidak dapat dibuka atau tak ada ” jika sudah ada maka maka akan ditampilkan “file dapat dibuka”. Di layar output ditampilkan pilihan yang pertama karena menggunakan fungsi “r” yang hanya berfungsi untuk membaca file yang sudah ada. Karena file belum ada, maka yang ditampilkan adalah yang pertama.

Program 2-2 #include<stdio.h> main() { FILE *PF; PF = fopen( "coba.txt" , "r" ); if(PF==NULL)

(21)

II-5

tak ada" ); else

printf( "file dapat dibuka" ); return 0;

if(fclose(PF)==EOF)

printf( "tidak dapat menutup file" ); return 0;

}

Program 2-2 ini merupakan tindak lanjut dari program 2-1. Setelah file dibuka biasanya file tidak digunakan lagi maka dilakukan penutupan file dengan fungsi pustaka fclose. Karena file belum ada, maka yang ditampilkan sama seperti program 2-1 yakni “terdapat kesalahan, file tidak dapat dibuka atau tak ada”.

Program 2-3 #include<stdio.h> #include<stdlib.h> #include<conio.h> main() { FILE*PF; char C; if((PF=fopen("coba.txt","w"))==NULL) {

printf("file tidak dapat dibuka"); exit(1); }

while((C=getche())!=' \r') fputc(C,PF);

fclose(PF); }

Program 2-3 bertujuan untuk membuat file baru yakni “coba.txt” untuk  ditulisi/diisi dengan fungsi “w”. Jika pembuatan file gagal atau bernilai NULL maka akan ditampilkan di layar “file tidak dapat dibuka”. Sedangkan jika berhasil dibuat, maka si user bisa mengetikkan kata atau data apa saja setelah program di-run. Data yang diinputkan oleh user akan disimpan di file “coba.txt”.

(22)

Program 2-4 #include<stdio.h> #include<stdlib.h> #include<conio.h> main() { FILE*PF; char C; if((PF=fopen("coba.txt","r"))==NULL) {

printf("file tidak dapat dibuka"); exit(1); }

while((C=fgetc(PF))!=EOF) putchar(C);

fclose(PF); }

Program 2-4 ini bertujuan untuk membaca file dari program 2-3 yakni file dengan nama “coba.txt”. Sehingga di layar outputan hanya ditampilkan data yang telah diinputkan oleh si user.

Program 2-5

//filedat.c

//membaca dan menulis teks file //separator adalah blank

//Data berupa string tidak boleh mengandung blank!!!

#include <stdio.h> int main () {//Kamus int n; char nama[21]; float persen; int retval; FILE *fileku; //Algoritma

fileku = fopen ("filedat.txt","r");

retval = fscanf (fileku, "%d %s %f", &n, nama, &persen); while (retval != EOF)

{

printf("Data : %d %s %f \n", n, nama, persen);

retval = fscanf (fileku, "%d %s %f", &n, nama, &persen); }

printf ("\nbye..."); fclose (fileku);

(23)

II-7

return 0; }

Program 2-5 bertujuan untuk membaca file dengan nama “filedat.txt”. Karena file “filedat.txt” tidak ada atau gagal dibuat maka di layar output hanya ditampilkan tulisan “bye...”. Studi Kasus 2-1 #include<stdio.h> #include<stdlib.h> #include<conio.h> main() { FILE*PF; char C; if((PF=fopen("filedata.txt","w"))==NULL) {

printf("file tidak dapat dibuka"); exit(1); }

while((C=getche())!=' \r') fputc(C,PF);

fclose(PF); }

Dalam studi kasus 2-1 ini hampir sama dengan program 2-3 yakni membuat file  baru dengan nama file “filedata.txt” kemudian diisi oleh user. Di sini user 

mengisinya dengan data biodata probadinya.

Studi Kasus 2-2 #include<stdio.h> #include<stdlib.h> #include<conio.h> main() { FILE*PF; char C; if((PF=fopen("filebiodata.dat","w"))==NULL) {

printf("file tidak dapat dibuka"); exit(1); }

(24)

while((C=getche())!=' \n') fputc(C,PF); fclose(PF); } #include<stdio.h> #include<stdlib.h> #include<conio.h> main() { FILE*PF; char C; if((PF=fopen("filebiodata.dat","r"))==NULL) {

printf("file tidak dapat dibuka"); exit(1); }

while((C=fgetc(PF))!=EOF) putchar(C);

fclose(PF); }

Studi kasus 2-2 ini dibagi menjadi 2 bagian. Bagian pertama yaitu untuk  memasukkan data, kemudian yang kedua untuk menampilkan data yang telah dibuat oleh si user. Pada bagian pertama, dibuat file “filebiodata.dat” kemudian diisi dengan biodata teman sekelas user. Kemudian pada bagian kedua, data yang telah diinputkan tadi ditampilkan di layar output.

(25)

III-1

MODUL III

 – 

MESIN ABSTRAK

I. Tujuan Praktikum

Praktikan diharapkan dapat:

1. Mengenal mesin abstrak dalam program bahasa C

2. Memanfaatkan spesifikasi mesin abstrak untuk memecahkan masalah dalam bahasa C

II. Dasar Teori

Mesin: mekanisme yang terdefinisi dan mengerti serta mampu untuk  mengeksekusi aksi-aksi primitif yang terdefinisi untuk mesin tersebut.

Mesin abstrak: mesin yang dianggap ada dan diasumsikan mampu melakukan mekanisme yang didefinisikan untuk mesin tersebut. Mesin abstrak  memodelkan suatu semesta (universe) tertentu.

Dalam pemrograman, mesin abstrak ini diciptakan pada tahap konseptual dan belum menjadi sesuatu yang riil. Perancang program seringkali harus mendefinisikan mesin-mesin abstrak untuk memecahkan masalah secara bertahap, sehingga pada akhirnya nanti seluruh primitif serta mekanisme dapat terdefinisi dengan baik. Setelah mesin abstrak ini terdefinisi dengan baik (termasuk fungsi dan prosedur yang terlibat), barulah kode-kode program dituliskan untuk  menerapkan sesuatu yang abstrak menjadi produk yang nyata (riil) yaitu yang disebut sebagai mesin riil.

A. Mesin Integer (Pencacah)

Merupakan sebuah mesin yang terdiri dari: 1. Satu buah tombol RESET

2. Satu buah tombol INC (singkatan dari increment yang berarti menambahkan) 3. Sebuah jendela yang menunjukkan angka integer yang sedang diingat, oleh

karena itu angka yang sedang muncul di jendela disebut sebagai Current Integer (CI).

(26)

B. Mesin Karakter

Merupakan mesin abstrak yang di dalamnya terdiri dari beberapa komponen yaitu:

1. Pita yang berisi deretan karakter dan diakhiri dengan tanda titik ‘.’. 2. Pita yang hanya berisi tanda titik ‘.’ Akan disebut sebagai pita kososng.

3. Pita dalam mesin ini sebagai penggambaran dari array dengan tipe data char (karakter). Dalam lingkungan pemrograman dengan bahasa Pascal, tipe data ‘string’ dapat diperlakukan sama dengan dengan array dengan tipe data karakter.

4. Dua buah tombol yakni tombol START dan ADV (singkatan dari kata advance yang berarti memajukan).

5. Sebuah lampu EOP (End of Position). Lampu ini akan menyala jika tanda titik  ‘.’ sudah terbaca, artinya sudah berada pada posisi terakhir. Penggambaran lampu menyala adalah kondisi dimana status pada saat itu bernilai TRUE dan lampu padam adalah FALSE.

6. Sebuah “jendela“ yang ukurannya sebesar satu karakter saja. Hanya kara kter yang sedang berada di jendela disebut sebagai Current Character (CC) dan dapat dibaca sedangkan karakter lain tidak terlihat.

Studi Kasus Mesin Karakter: Palindrom

Palindrom adalah istilah yang digunakan untuk kata atau kalimat yang apabila dibaca dari depan ke belakang atau sebaliknya, memiliki arti yang sama.

Contoh palindrom: KATAK

KASUR RUSAK

KASUR NABABAN RUSAK

Untuk memeriksa apakah kata yang dimasukkan merupakan palindrom maka, dapat dibuat sebuah function yang memiliki tipe data boolean. Function ini akan mengembalikan nilai TRUE jika kata termasuk palindrom, dan akan mengembalikan nilai FALSE untuk kondisi sebaliknya.

(27)

III-3 Algoritma Palindrom

FUNCTION IsPalindrom (kt : string) boolean {akan mengembalikan palindrom}

Kamus Data

i, j : integer temp : string BEGIN

temp = “ “ {mengisi temporer disingkat temp dengan kosong}

j = length(kt) {mengisi j dengan lebar kata} WHILE (j>0) DO {operasi konkatenasi}

temp = temp + kt[j] j = j – 1

ENDWHILE

if temp = kt THEN {membandingkan isi temporer dengan kt} return TRUE ELSE Return FALSE Endif ENDFUNCTION Catatan:

Operasi konkatenasi berfungsi untuk menggabungkan dua data bertipe string. Contoh: kata1 dan kata2 bertipe string. Bila kata1 berisi “algo” dan kata2  berisi “ritma” maka operasi kata1+kata2 akan menghasilkan kata “algoritma”.

(28)

III. Hasil dan Pembahasan Program 3-1

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

#include "mesinkar.inc"

//Menghitung banyaknya huruf dalam pita karakter int main() { START(); RESET(); while (!EOP) { INC(); ADVN(); }

printf("Banyaknya huruf dalam pita = %d\n",ci); getche();

}

Sebelum ke program 3-1 ini, user membuat dulu file “boolean.h” dan kemudian membuat file “mesinkar.inc”. Setelah dibuat kemudian di header program ini diberikan  perintah #include “mesinkar.inc” agar file tersebut terbaca oleh program ini. Program ini bertujuan untuk menghitung banyaknya huruf/karakter dalam file mesinkar.inc, penghitungan dimulai dari karakter pertama sampai titik (.), jika tanda titik sudah dicapai maka program akan berhenti menghitung. Di layar output ditampilkan banyaknya huruf yang terdapat dalam mesinkar.inc sebanyak 553.

Program 3-2

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

#include "mesinkar.inc"

//Menghitung banyaknya huruf A dalam pita karakter int main() { START(); RESET(); while (cc!='.') { if (cc=='A') { INC();} ADVN();}

printf("Banyaknya huruf A dalam pita = %d\n",ci); getche();

(29)

III-5

Sama dengan program 3-1, program ini bertujuan untuk menghitung karakter dalam file mesinkar.inc, ditemukan 3 huruf ‘A’ dalam file tersebut.

Studi Kasus 3-1

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

#include "mesinkar.inc"

//Menghitung banyaknya huruf i dalam pita karakter int main() { START(); RESET(); while (cc!='.') { if (cc=='i') { INC(); } ADVN(); }

printf("hari ini hari libur.\n");

printf("Huruf vokal terbanyak yakni i = %d\n",ci); getche();

}

Pada studi kasus 3-1 ini, file mesinkar.inc kembali digunakan. Kalimat yang berada dalam file mesinkar.inc diganti dengan kalimat “hari ini hari libur.” Di layar output ditampilkan hruuf vokal terbanyak yakni i dengan jumlah karakter 5. Program ini sama dengan program 3-2.

Studi Kasus 3-2 #include <iostream.h> #include <conio.h> #include <string.h> void main() { char kata[50];

cout<<"Masukkan Kata Yang Akan Dibalik : "; cin>>kata;

cout<<"\n\n"; strrev(kata);

(30)

getch(); }

Studi kasus 3-2 ini bertujuan untuk memasukkan kata yang akan dibalik, kemudian kata yang dibalik tersebut dibalik susunannya. Di sini menggunakan header #include<string.h> untuk mengolah data bertipe data string. Kemudian menggunakan fungsi strrev untuk membalik kata. POLITEKNIK dibalik  menjadi KINKETILOP, kemudian DATA dibalik menjadi ATAD.

Studi Kasus 3-3 #include<stdio.h> #include<string.h> int main () { char input[50]; int i,j,status,batascek,panjangkata;

printf( "masukan angka atau kata yang dicek : " ); scanf ("%s",&input); panjangkata = strlen(input); batascek = panjangkata/2; status = 0; i = 0; j = panjangkata-1;

while (status == 0 && i < batascek) {if(input[i]==input[j]) {i ++; j --;} else {status = 1;} } if (status == 1) {printf("bukan palindrom");} else {printf("palindrom");} return 0; }

(31)

III-7

Studi kasus 3-3 ini bertujuan untuk mengimplementasikan fungsi palindrom, yakni mengecek sebuah kata yang jika dibalik urutannya memiliki makna yang sama. Sama dengan studi kasus sebelumnya, di sini menggunakan header #include<string.h> untuk mengolah kata bertipe data string. Fungsi strlen digunakan untuk membuat palindrom.

Studi Kasus 3-4 #include<iostream.h> #include<string.h> #include<stdio.h> int main() { char str1[100],str2[100]; gets(str1); gets(str2); int i,j; int n1=strlen(str1); int n2=strlen(str2); int c=0; if(n1!=n2) { cout<<"\nanagram ! "; return 0; } else { for(i=0;i<n1;i++) for(j=0;j<n2;j++) if(str1[i]==str2[j]) ++c; } if(c==n1) cout<<"bukan anagram"; else cout<<"no ! "; return 0; }

(32)

Studi kasus 3-4 ini bertujuan untuk mengecek dua buah kata apakah termasuk  anagram atau bukan. Anagram adalah dua buah kata yang beda tetapi komponennya/susunannya sama. Masih menggunakan header #include<string.h>, digunakan untuk mengolah data bertipe string. Contohnya, sebab dengan bebas merupakan anagra; kapas dengan pasak juga merupakan anagram.

(33)

IV-1

MODUL IV

 – 

REKURSIF

I. Tujuan Praktikum

Praktikan diharapkan dapat:

1. Mengenal program rekursif dalam bahasa C

2. Menggunakan program rekursif untuk memecahkan masalah dalam bahasa C 3. Mengimplementasikan cara kerja rekursif ke dalam aplikasi/program dalam

bahasa C

II. Dasar Teori

Dalam ilmu komputer, kelas dari objek atau metode memperlihatkan perilaku rekursif bila mereka dapat didefinisikan oleh dua properti berikut:

1. Sebuah kasus (atau beberapa kasus) dasar sederhana

2. Sejumlah aturan yang mengurangi kasus-kasus lainnya sampai ke kasus dasarnya

Sebagai contoh berikut ini adalah definisi rekursif dari leluhur seseorang:

• Orangtua seseorang adalah leluhur seseorang (kasus dasar)

• Orangtua dari suatu leluhur juga merupakan leluhurnya (langkah rekursif)

Bilangan Fibbonaci adalah contoh klasik dari rekursif:

• Fib(0) adalah 0 (kasus dasar) • Fib(1) adalah 1 (kasus dasar)

Untuk semua integer n > 1: Fib(n) adalah (Fib(n-1) + Fib(n-2)) [definisi rekursif].

Mungkin sebelumnya sudah tidak asing dengan perulangan menggunakan FOR atau WHILE, selain kedua hal tersebut, masih ada cara lain untuk  perulangan yaitu dengan rekursif.

Dalam makna yang sederhana:

Rekursif adalah suatu proses di mana salah satu langkah dalam prosedur tersebut menjalankan prosedur itu sendiri. Prosedur yang melakukan rekursi disebut dengan “rekursif”. Sehingga rekursif ditulis dalam bentuk fungsi atau prosedur.

(34)

III. Hasil dan Pembahasan Program 4-1

#include<stdio.h>

void ulangangka(int batas) {if (batas>0) { printf("%d",batas); ulangangka(batas-1); }} int main(){ ulangangka(5); return 0; }

Program 4-1 ini bertujuan untuk menuliskan sebuah angka jika ditulis secara rekursif. Dalam program ini, digunakan fungsi pengulangan. Jika kita memasukkan angka 5 pada variabel ulangangka maka akan dituliskan di layar output 54321.

Program 4-2

#include <stdio.h> #include <stdlib.h> int x,y;

long int pangkat(int x, int y) { if(y==0) {return 1;} else {return x*pangkat(x,y-1);} } int main(){ scanf("%d %d",&x,&y);

printf("%d pangkat %d = %ld\n",x,y,pangkat(x,y)); return 0;

}

Program 4-2 ini berfungsi untuk menghitung operasi perpangkatan pada suatu bilangan. Saat kita masukkan 2 buah bilangan setelah program di-run, bilangan pertama sebagai angka pokok yang akan dipangkatkan, kemudian beri spasi,

(35)

IV-3

dan angka kedua merupakan pangkat yang akan diberikan pada angka yang akan dipangkatkan. Di layar output ditampilkan bahwa 5 pangkat 3 adalah 125. Dan hasilnya valid, berarti programnya berhasil.

Studi Kasus 4-1

#include<iostream.h> #include<conio.h>

int faktorial (int x); void main()

{

int n,r, Permutasi;

cout<<" Program Menghitung Permutasi(nPr)"; cout<<" Masukkan Nilai n : "; cin>>n;

cout<<" Masukkan Nilai r : "; cin>>r; Permutasi = faktorial (n)/faktorial(n-r); cout<<" Permutasinya adalah: "<<Permutasi; getch();

}

int faktorial (int n) { int fak; if (n<=1) { fak=1; } else { fak=n*faktorial(n-1); } return (fak); }

Studi Kasus 4-1 ini berfungsi untuk menghitung permutasi dari suatu bilangan. Di sini menggunakan header #include<iostream.h> untuk mengolah data angka yakni melakukan proses perhitungan permutasi. Setelah di-run, ditampilkan di layar perintah untuk memasukkan bilangan yang akan dipermutasikan, misalnya 5. Kemudian masukkan nilai r untuk permutasinya. Jadi, n permutasi r (di sini menggunakan angka 5 permutasi 2) hasilnya 20.

(36)

Studi Kasus 4-2

#include<stdlib.h> #include<stdio.h> int main()

{

int kolom, baris, tinggi;

printf("***Segitiga Pascal***\n");

printf("Masukkan tinggi segitiga pascal : ");scanf("%d",&tinggi);

int jarak1 = tinggi;

int nilai[tinggi][tinggi];

for (baris=0;baris<tinggi;baris++) {

for (int jarak = jarak1; jarak>=0;jarak-=1) {

printf(" "); }

for (kolom = 0; kolom <= baris; kolom++)

{nilai[baris][kolom]=nilai[baris-1][kolom]+nilai[baris-1][kolom-1]; printf("%d",nilai[baris][kolom]); } jarak1-=1; printf("\n"); return 0; }}

Pada studi kasus 4-2 ini bertujuan untuk menuliskan atau menggambarkan urutan perpangkatan pada segitiga pascal. User diminta untuk memasukkan tinggi dari segitiga pascal tersebut, kemudian akan ditampilkan urutan perpangkatan tersebut dalam bentuk segitiga pascal. Semakin tinggi yang kita masukka maka semakin banyak urutannya. Di sini user menggunakan fungsi array dan juga proses pengulangan for untuk menghitung angka-angka pada segitiga pascal.

(37)

V-1

MODUL V

 – 

ABSTRACT DATA TYPE (ADT)

I. Tujuan Praktikum

Praktikan diharapkan dapat:

1. Mengenal tipe data abstrak (tidak nyata) dalam bahasa C

2. Menggunakan ADT untuk memecahkan masalah dalam bahasa C

3. Mengimplementasikan cara kerja ADT ke dalam aplikasi/program dalam bahasa C

II. Dasar Teori

Sebuah program dalam bahasa C yang “utuh”, seringkali terdiri dari beberapa modul program. Sebuah modul mungkin mewakili sekumpulan rutin sejenis, ADT (Abstract Data Type: definisi type dan primitifnya), atau mesin (definisi state variabel dari mesin dan primitifnya).

Program harus mempunyai sebuah main( ) dan memanfaatkan modul yang lain. Program yang dibagi-bagi menjadi beberapa file seharusnya dapat dikompilasi terpisah (setiap modul membentuk sebuah object code). Dengan demikian, pembuatan sebuah executable code dapat dilakukan dengan melakukan link terhadap sejumlah object code yang sudah dikompilasi (penghematan waktu dan duplikasi usaha, reusability). Supaya dapat dikompilasi dengan benar, modul yang lain dapat dilakukan dengan melakukan include terhadap file header. File header dalam bahasa C adalah sebuah file yang hanya berisi deklarasi type dan  prototype fungsi (“tidak boleh” ada deklarasi file).

Contoh program lengkap dengan beberapa modul yang diletakkan dalam beberapa file dapat dilihat pada contoh program di bawah ini untuk pemanfaatan ADT JAM yang didefinisikan.

Skema program yang dipecah menjadi beberapa file.

Pada hakikatnya sebuah program utuh terdiri dari kelompok file sebagai berikut:

(38)

1. File header, dengan nama xxx.h. Untuk setiap type dan primitifnya, ada sebuah file xxx.h, contoh: jika anda memerlukan ADT JAM, DATE dan mesin KATA maka ada 3 buah file header yaitu Jam.h, DATE.h, dan KATA.h.

2. File yang berisi BODY dari file header yang bersangkutan: xxx.c. File ini disebut sebagai file realisasi dari prototype yang didefinisikan pada xxx.h. Akan ada sebuah xxx.c untuk setiap xxx.h. Untuk contohnya, akan ada JAM.c, DATE.c, dan KATA.c

3. File yang berisi main program (dan prosedur/fungsi lain yang hanya dibutuhkan oleh main), missalnya dengan nama main.c.

Contoh program dalam beberapa file atau biasa disebut dengan modul. Modul berikut adalah untuk manipulasi jam.

File Deskripsi Isi

 jam.h Type dan prototype jam  jam.c Realisasi (body) dari jam.h

mjam.c Main program untuk mentest beberapa fungsi/prosedur pada jam.c

III. Hasil dan Pembahasan Program 5-1

//File: jam.h

//Deklarasi TYPE dan prototype type jam #ifndef jam_H #define jam_H typedef struct { int HH; int MM; int SS; } jam; //prototype

void ResetJam (jam*J);

//mengisi sebuah jam J dengan 00:00:00 void TulisJam (jam J);

//menulis sebuah jam int JamToDetik (jam J); //konversi jam ke detik jam DetikToJam (int d); #endif

#include "stdio.h" #include "jam.h"

(39)

V-3 { (*J).HH = 13; (*J).MM = 39; (*J).SS = 10; }

void TulisJam (jam J) {

//Kamus Lokal //Algoritma

printf("Jam : %2d:%2d:%2d\n", J.HH, J.MM, J.SS); }

int JamToDetik (jam J) {

return (J.HH * 3600 + J.MM * 60 + J.SS); }

jam DetikToJam (int d) { jam J; int sisa; J.HH = d/3600; sisa = d % 3600; J.MM = sisa / 60; J.SS = sisa % 60; return J; } //File: mjam.c

//Memanfaatkan primitif jam #include "jam.h" int main() { jam J1; jam J2; int dt = 1000; printf("hello\n"); ResetJam(&J1); TulisJam(J1);

printf("Konversi jam ke detik: %d\n", JamToDetik(J1)); J2 = DetikToJam(dt);

TulisJam(J2); return 0; }

Sebelum ke program jam.c kita harus membuat dulu file jam.h untuk  mendeklarasikan prototype dan type jam. Program jam di atas berfungsi untuk  menampilkan jam, kemudian untuk mengkonversikan dari jam ke detik, kemudian ditampilkan jamnya.

(40)

MODUL VI

 – 

LINKED LIST

I. Tujuan Praktikum

Praktikan diharapkan dapat:

1. Mengenal dan memahami konsep Linked List dalam bahasa C

2. Menggunakan Linked List untuk memecahkan masalah dalam bahasa C

3. Mengimplementasikan cara kerja Linked List ke dalam aplikasi/program dalam bahasa C

II. Dasar Teori

Konsep dasar struktur data dinamis adalah alokasi memori yang dilakukan secara dinamis. Pada konsep ini, terdapat suatu struktur yang disebut dengan struktur referensi diri (self-referential structure), mempunyai anggota pointer yang menunjuk ke struktur yang sama dengan dirinya sendiri. Struktur data dinamis sederhana dapat dibagi menjadi empat jenis, yaitu:

1. Linked list 2. Stack   3. Queue 4. Binary tree

Definisi Linked List

Linked list adalah suatu cara untuk menyimpan data dengan struktur sehingga dapat secara otomatis menciptakan suatu tempat baru untuk menyimpan data yang diperlukan. Program akan berisi suati struct atau definisi kelas yang berisi variabel yang memegang informasi yang ada di dalamnya, dan mempunyai suatu pointer yang menunjuk ke suatu struct sesuai dengan tipe datanya. Struktur dinamis ini mempunyai beberapa keuntungan dibanding struktur array yang bersifat statis. Struktur ini lebih dinamis, karena banyaknya elemen dapat dengan mudah untuk  ditambah atau dikurangi, berbeda dengan array yang ukurannya bersifat tetap. Manipulasi setiap elemen seperti menyisipkan, menghapus, maupun menambah dapat dilakukan dengan lebih mudah.

(41)

VI-2 III. Hasil dan Pembahasan

Program 6-1

#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct nod { int data;

struct nod *next; } NOD, *NODPTR;

void CiptaSenarai (NODPTR*s) { *s = NULL; } NODPTR NodBaru(int m) { NODPTR n;

n = (NODPTR) malloc (sizeof(NOD)); if(n!=NULL) { n -> data = m; n -> next = NULL; } return n; }

void SisipSenarai (NODPTR*s, NODPTR t, NODPTR p) { if(p==NULL) { t -> next = *s; *s = t; } else { t -> next = p -> next; p -> next = t; }}

void CetakSenarai (NODPTR s) {

NODPTR ps;

for (ps = s; ps != NULL; ps = ps -> next) printf("%d-->",ps->data); printf("NULL\n"); } int main () { NODPTR pel; NODPTR n; CiptaSenarai(&pel); n = NodBaru(55); SisipSenarai(&pel, n, NULL); n = NodBaru(75); SisipSenarai(&pel, n, NULL); CetakSenarai(pel); return 0; }

(42)

Program di atas bertujuan untuk memasukkan beberapa data dalam sebuah senarai (linked list). Data yang ditampilkan ditampilkan secara terbalik. Dari 75 kemudian 55 kemudian terakhir NULL. Dalam program di atas digunakan beberapa prosedur/fungsi yakni di antaranya CetakSenarai, CiptaSenarai, dan SisipSenarai. Studi Kasus 6-1 #include <iostream.h> #include <conio.h> #include <string.h> #include <stdio.h> #include <alloc.h> int pil; int tdkblhsm(); void pilih(); void buat_baru(); int tambah(); void hapus(); void tampil(); struct simpul { char nama [25]; int nim;

struct simpul *next;

} mhs, *baru, *awal=NULL, *akhir=NULL,*hps, *bantu;

int x=0;

int tdkblhsm(int cari) {

struct simpul *baru; int ketemu=0; if(awal==NULL) ketemu=0; else { baru=awal; while(baru!=NULL) { if(cari==baru->nim) { ketemu=1;

(43)

VI-4 break; } baru=baru->next; } } return ketemu; } int main() { do { clrscr();

cout<<"Menu Single Linked List"<<endl; cout<<"1. Menambahkan "<<endl;

cout<<"2. Menghapus"<<endl; cout<<"3. Menampilkan"<<endl; cout<<"4. Selesai"<<endl; cout<<"Pilihan Anda: "; cin>>pil; pilih(); } while(pil!=4); return 0; } void pilih() { if(pil==1) tambah(); else if(pil==2) hapus(); else if(pil==3) tampil(); else cout<<"Selesai"; } int tambah() {

baru=(struct simpul *)malloc(sizeof(struct simpul)); cout<<"Masukkan NIM: ";cin>>baru->nim;

if(tdkblhsm(baru->nim)!=0) {

cout<<"NIM sudah ada, silahkan masukkan NIM yang lain!"; getch();

return 0; }

cout<<"Input nama: ";cin>>baru->nama;

baru->next=NULL;

if(awal==NULL) {

awal=baru; akhir=baru;

(44)

}

//jika data hanya 1

else if (baru->nim < awal->nim) { baru->next=awal; awal=baru; } else { bantu=awal;

while(bantu->next!=NULL && baru->nim > bantu->next->nim) { bantu=bantu->next; } baru->next=bantu->next; bantu->next=baru; } tampil(); } void hapus() { int nim_cari;

struct simpul *bantu1; if (awal==NULL)

cout<<"Simpul Kosong"; else

{

cout<<" Masukan NIM yang akan dihapus: "; cin>>nim_cari;

bantu=awal; {

while(bantu!=NULL && bantu->nim!=nim_cari) bantu=bantu->next;

if (bantu==NULL)

cout<<"Data tidak ditemukan!"; else if (bantu==awal) { awal=awal->next; free(bantu); } else if (bantu==akhir) { bantu=awal; while (bantu1->next!=akhir) bantu1=bantu1->next; akhir=bantu1; akhir->next=NULL; free(bantu); } else { bantu1=awal; while(bantu1->next!=bantu) bantu1=bantu1->next; bantu1->next=bantu->next;

(45)

VI-6 free (bantu); } } } getch(); } void tampil() { if (awal==NULL) cout<<"Kosong"; else { bantu=awal; while(bantu!=NULL) { cout<<"NIM : "<<bantu->nim; cout<<"Nama : "<<bantu->nama; bantu=bantu->next; } } getch(); }

Program di atas merupakan contoh dari penerapan linked list dalam program dalam bahasa C. Dengan program seperti di atas, kita bisa menyimpan data yang kita inginkan secara terstruktur. Program di atas juga merupakan perpaduan dari beberapa fungsi yakni di antaranya fungsi untuk menambahkan data, menghapus data, menampilkan seluruh data yang telah dibuat, kemudian pilihan selesai untuk mengakhiri program. User tinggal memasukkan pilihannya, missalnya 1 untuk menambahkan. Data NIM 22022807 dengan nama Agung telah ditambahkan sebagai node.

Studi Kasus 6-2

int tambah() {

baru=(struct simpul *)malloc(sizeof(struct simpul)); cout<<"input nim : ";cin>>baru->nim;

if(tdkblhsm(baru->nim)!=0) {

(46)

getch(); return 0; }

cout<<"input nama : ";cin>>baru->nama;

baru->next=NULL; if(awal==NULL) { awal=baru; akhir=baru; }

//jika data hanya 1

else if (baru->nim < awal->nim) { baru->next=awal; awal=baru; } else { bantu=awal;

while(bantu->next!=NULL && baru->nim > bantu->next->nim) { bantu=bantu->next; } baru->next=bantu->next; bantu->next=baru; } tampil(); }

(47)

VI-8

kasus 6-1. Fungsi ini menambahkan node single linked list non circular dimana tiap node mengandung informasi NIM dan Nama. Peletakan posisi node urut berdasarkan nim secara ascending, jadi bisa ditambah di depan, belakang maupun tengah. Studi Kasus 6-3 void tampil() { if (awal==NULL) cout<<"Kosong"; else { bantu=awal; while(bantu!=NULL) { cout<<"nim : "<<bantu->nim; cout<<" nama : "<<bantu->nama; bantu=bantu->next;

} }

getch(); }

Fungsi ini juga merupakan bagian dari program dalam Studi Kasus 6-1. Berfungsi untuk menampilkan data yang telah dibuat oleh si user. User tinggal memilih 3 untuk “menampilkan” data.

Studi Kasus 6-5 void tampil() { if (awal==NULL) cout<<"Kosong"; else { bantu=awal; while(bantu!=NULL) { cout<<"nim : "<<bantu->nim; cout<<" nama : "<<bantu->nama; bantu=bantu->next;

(48)

}

getch(); }

Fungsi ini juga merupakan bagian dari program dalam Studi Kasus 6-1. Berfungsi untuk menghapus data yang telah dibuat oleh si user. User tinggal memilih 2 untuk “menghapus” data. Data yang dihapus sesuai keinginan user, tinggal memasukkan NIM yang akan dihapus.

Studi Kasus 6-6

#include <iostream.h> //File Header Iostream #include <conio.h> //File Header Conio

typedef struct TNode { //Deklarasi Linked List int data; //data bertipe integer

TNode *next; //pointer Next }; //penutup deklarasi

TNode *head; //disini menggunakan head sebagai pointer utama dari linked list

void init(){ //Fungsi untuk inisialisasi awal linked list head=NULL; //Untuk pertama kali, head bernilai NULL

}

int IsEmpty(){ //Fungsi untuk mengetahui apakah Linked list kosong atau ada isinya

if(head==NULL) // apabila head==NULL, maka return 1 return 1;

else

return 0; // Selain itu maka Return 0 }

void insertdepan(int n){ //Fungsi untuk menambahkan data baru (n didapat dari input di program utama (main))

TNode *baru; //Disini menggunakan baru sebagai pointer TNode nya

baru=new TNode;

baru->data=n; //pointer baru->data berisi nilai variabel n baru->next=NULL; // pointer baru->next berisi NULL

if(IsEmpty()==1){ //periksa apakah linked list bernilai, jika return 1(tidak bernilai), maka akan mengeksekusi perintah hingga

‘}’

head=baru; //Nilai head= Nilai baru head->next=NULL;

(49)

VI-10

else { // Jika return 0(linked list bernilai), maka akan

mengeksekusi perintah berikut hingga ‘}’

baru->next=head; head=baru;

}

cout<<"Data Terisi"; }

void insertbelakang(int n){ //Fungsi untuk insert Belakang(Menambahkan data di belakang data lama)

TNode *baru,*bantu; //Pointer yang digunakan yaitu baru dan bantu baru=new TNode; baru->data=n; baru->next=NULL; if(IsEmpty()==1){ head=baru; head->next=NULL; } else { bantu=head; while(bantu->next!=NULL){ bantu=bantu->next; } bantu->next=baru; } cout<<"Data Terisi"; }

void tampil(){ //Fungsi untuk menampilkan linked list yang telah di input / di delete

TNode *bantu; //pointer yang digunakan yaitu bantu bantu=head; // Nilai bantu= Nilai yang ada di head if(IsEmpty()==0){ // periksa apakah return 0(bernilai)

while(bantu!=NULL){ //Selama bantu tidak sama dengan NULL, maka di eksekusi

cout<<>data<<endl; // tampilkan di monitor nilai bantu->data

bantu=bantu->next; //Nilai bantu= nilai bantu selanjutnya }

} else

cout<<"Masih Kosong"<<endl; }

void hapusdepan(){ //Fungsi untuk menghapus Nilai paling depan TNode *hapus;

int d;

if(IsEmpty()==0){ //periksa apakah return 0(ada nilai) if(head!=NULL){ // jika head tidak sama dengan Null maka : hapus=head; // pointer hapus= head

d=hapus->data; //nilai dari d = nilai dari hapus->data

head=>next; // Nilai head sekarang berisi nilai hapus->next

(50)

pointer hapus } cout<<d<<" Terhapus"<<endl; } else cout<<"Masih Kosong"<<endl; }

main(){ // Fungsi Utama dari program int pil; do{ clrscr(); int n; cout<<"1.Insert Depan"<<endl; cout<<"2.Insert Belakang"<<endl; cout<<"3.Display"<<endl; cout<<"4.Delete"<<endl; cout<<"5.Exit"<<endl;

cout<<"Masukan Pilihan Anda :";pil=getche(); switch(pil){

case'1': clrscr();

cout<<"Masukan data :";cin>>n; IsEmpty();

insertdepan(n); break;

case'2': clrscr();

cout<<"Masukan data :";cin>>n; IsEmpty(); insertbelakang(n); break; case'3': clrscr(); IsEmpty(); tampil(); break; case'4': clrscr(); IsEmpty(); hapusdepan(); break; } getch(); }while(pil!='5'); return 0; }

(51)

VI-12

 Memasukkan Data

 Menampilkan Data

Progra di atas adalah program untuk mengimplementasikan single linked list circular yang fleksibel dan dinamis. Di mana user dapat menambah simpul baru beserta datanya, membaca semua data pada senarai, menghapus simpul dengan data yang ditentukan oleh user dan dapat menghapus semua simpul yang ada. Pertama-tama ditampilkan tampilan menu utamanya. Kemudian user tinggal memilih sesuai pilihan. 1 untuk memasukkan data dari depan, 2 memasukkan data dari belakang, 3 untuk menampilkan data, 4 untuk menghapus data, dan 5 untuk keluar dari program.

(52)

MODUL VII

 – 

STACK

I. Tujuan Praktikum

Praktikan diharapkan dapat:

1. Mengenal stack (tumpukan) data dalam bahasa C

2. Menggunakan stack untuk memecahkan masalah dalam bahasa C

3. Mengimplementasikan cara kerja stack ke dalam aplikasi/program dalam bahasa C

II. Dasar Teori

Tumpukan dapat diartikan sebagai satu kumpulan data yang seolah-olah terlihat seperti ada data yang diletakkan di atas data yang lain seperti pada gamabr 01. Saat kita ingin mengambil data A, maka data-data yang berada di atasnya haruslah lebih dulu dikeluarkan (di-POP). Hal ini membuat tumpukan/stack  memiliki ciri Last In First Out (LIFO) yang berarti data yang masuk terkahir akan keluar pertama. E D C B A Gambar 01 Penyajian Stack

Stack dapat disajikan baik dengan array maupun dengan struct. Pada array, stack ataupun queue yang disajikan bersifat statis. Ini disebabkan karena jumlah maksimal data pada array sudah ditentukan sejak awal. Contoh deklarasi stack  dengan struct:

Struct stack {

(53)

VII-2 VII-2 stack*next; stack*next; }; };

Operasi pada Stack Operasi pada Stack

Dalam penyajian stack, ada dua proses yang terjadi, yaitu pemasukan data Dalam penyajian stack, ada dua proses yang terjadi, yaitu pemasukan data (PUSH) dan pengeluaran data (POP). Seperti yang sudah dijelaskan bahwa array (PUSH) dan pengeluaran data (POP). Seperti yang sudah dijelaskan bahwa array itu memiliki jumlah maksimal, maka pada proses PUSH, perlu pengecekan itu memiliki jumlah maksimal, maka pada proses PUSH, perlu pengecekan apakah data yang di-PUSH di stack melebihi jumlah

apakah data yang di-PUSH di stack melebihi jumlah maksimal array atau tidak.maksimal array atau tidak. Contoh algoritma untuk proses PUSH (stack) adalah sebagai berikut:

Contoh algoritma untuk proses PUSH (stack) adalah sebagai berikut:

• Masukkan inputan (x)Masukkan inputan (x) •

• Jika variable cek (c) = nilai maksimal array (max), kerjakan langkah 2.Jika variable cek (c) = nilai maksimal array (max), kerjakan langkah 2.

Jika tidak, kerjakan langkah 3. Jika tidak, kerjakan langkah 3.

• Cetak “Tumpukan Penuh”.Cetak “Tumpukan Penuh”. •

• Selama (c) kurang dari (max), makaSelama (c) kurang dari (max), maka cc + 1+ 1 dandan data [c]data [c] xx..

Contoh algoritma

Contoh algoritma untuk proses POP pada suntuk proses POP pada stack adalah sebagatack adalah sebagai berikut:i berikut:

• Jika c = 0, Jika c = 0, maka kerjakan langkah 2. Jika tidak, lakukan langkah 3.maka kerjakan langkah 2. Jika tidak, lakukan langkah 3. •

• Cetak “Tumpukan Kosong”Cetak “Tumpukan Kosong” •

• cc c-1c-1

III.

III. Hasil Hasil dan dan PemPembahasbahasanan Program 7-1 Program 7-1 #include <stdio.h> #include <stdio.h> #include <stdlib.h> #include <stdlib.h> #include <conio.h> #include <conio.h> struct tumpukan struct tumpukan { { char data; char data; tumpukan*next; tumpukan*next; }; }; tumpukan*atas; tumpukan*atas; tumpukan*bawah; tumpukan*bawah; tumpukan*baru; tumpukan*baru; tumpukan*hapus; tumpukan*hapus; tumpukan*bantu; tumpukan*bantu; void push() void push() { {

baru = new tumpukan; baru = new tumpukan; fflush(stdin);

fflush(stdin); prin

printf("tf("Data yaData yang inging ingin dimasn dimasukkaukkann -> ");-> "); scanf("%c",&baru->data);

(54)

baru->next=NULL; baru->next=NULL; if(atas==NULL) if(atas==NULL) { { atas=baru; atas=baru; bawah=baru; bawah=baru; } } else else { { baru->next=atas; baru->next=atas; atas=baru; atas=baru; }} }} void pop() void pop() { { if(atas==bawah) if(atas==bawah) { { delete atas; delete atas; atas=NULL; atas=NULL; } } else else { { hapus=atas; hapus=atas; atas=atas->next; atas=atas->next; delete hapus; delete hapus; } } { {

printf("Tumpukan kosong\nTekan enter untuk printf("Tumpukan kosong\nTekan enter untuk melanjutkan..."); melanjutkan..."); getch(); getch(); }} }} void show() void show() { { bantu=atas; bantu=atas; while(bantu!=NULL) while(bantu!=NULL) { { printf("[ %c ]\n",bantu->data); printf("[ %c ]\n",bantu->data); bantu=bantu->next; bantu=bantu->next; } } printf("\n

printf("\nTekan Tekan enter enter untukuntuk melanjutkanmelanjutkan...\n");...\n"); getch(); getch(); } } void main() void main() { { clrscr(); clrscr(); int pil; int pil; do do { { clrscr(); clrscr(); printf("Program Tumpukan\n"); printf("Program Tumpukan\n"); printf("================\n"); printf("================\n"); printf("1. Push\n"); printf("1. Push\n"); printf("2. Pop\n"); printf("2. Pop\n"); printf("3. Tampil\n"); printf("3. Tampil\n"); printf("4. Keluar\n"); printf("4. Keluar\n"); printf("M

printf("Masukkanasukkan pilihan: pilihan: ");scanf("");scanf("%i",&pil);%i",&pil); switch(pil)

switch(pil) {

(55)

VII-4 VII-4 c caasse e 11:: ppuusshh(());; break; break; c caasse e 22:: ppoopp(());; break; break; c caasse e 33:: sshhooww(());; break; break; }} }} while(pil!=4); while(pil!=4); } }

Tampilan Menu Utama Tampilan Menu Utama

 Memasukkan data ke dalam st

 Memasukkan data ke dalam stack (tumpukan)ack (tumpukan)

 Menampilkan tumpukan data  Menampilkan tumpukan data

(56)

 Menghapus data  Menghapus data

Tampilan setelah data ada yang dihapus/di-pop Tampilan setelah data ada yang dihapus/di-pop

Program stack di atas berfungsi untuk mengimplementasikan cara kerja dari Program stack di atas berfungsi untuk mengimplementasikan cara kerja dari stack (tumpukan) dari sederetan data. Program di atas terdiri dari beberapa stack (tumpukan) dari sederetan data. Program di atas terdiri dari beberapa fun

fungsgsi i aatau tau subsubproprogragram m yyakakni ni funfungsgsi i ppushush (be(berfunrfungsgsi i uuntuntuk k  memasukkan/menambahkan data ke dalam tumpukan), fungsi pop (berfungsi memasukkan/menambahkan data ke dalam tumpukan), fungsi pop (berfungsi untuk menghapus data dalam tumpukan), fungsi show (berfungsi untuk  untuk menghapus data dalam tumpukan), fungsi show (berfungsi untuk  menampilkan deretan data yang sudah dibuat). Data yang ditambahkan pertama menampilkan deretan data yang sudah dibuat). Data yang ditambahkan pertama akan disimpan paling bawa

akan disimpan paling bawah,h, dan jika melakukan pengdan jika melakukan penghapusan (pop) maka datahapusan (pop) maka data yang dihapus/dihilangk

yang dihapus/dihilangkan adalah data an adalah data yang terakhir dimasukkan (paling atas).yang terakhir dimasukkan (paling atas).

Studi Kasus 7-1 Studi Kasus 7-1 #include <stdio.h> #include <stdio.h> #include <iostream.h> #include <iostream.h> #include <conio.h> #include <conio.h>

void Hanoi(int n, char asal, char bantu, char tujuan) void Hanoi(int n, char asal, char bantu, char tujuan) //// pindahkan piringan ke n

pindahkan piringan ke n

{ // dari asal menuju tujuan { // dari asal menuju tujuan

// melalui bantu // melalui bantu if (n == 0) return; if (n == 0) return; Hano

Hanoi(ni(n -- 1, a1, asal, sal, tujutujuan, an, bantbantu); u); //pi//pindahndahkan kan piripiringan ngan keke n-1

n-1

// dari asal ke bantu melalui // dari asal ke bantu melalui //tonggak tujuan

//tonggak tujuan

printf("Pindahkan piringan ke %d dari %c ke %c\n", n, printf("Pindahkan piringan ke %d dari %c ke %c\n", n, asal, tujuan);

asal, tujuan); Hano

Hanoi(ni(n -- 1, b1, bantuantu, as, asal, al, tujutujuan); an); //pi//pindahndahkan kan piripiringan ngan keke n

n 11

// dari bantu menuju tujuan // dari bantu menuju tujuan // melalu asal

(57)

VII-6

}

int main(void) {

int n;

printf("Selamat datang di Program Piringan Hanoi!!!\n"); printf("Silahkan masukan piringan yang ingin dipindahkan :");

scanf("%d", &n);

Hanoi(n, 'a', 'b', 'c'); }

Program di atas bertujuan untuk mengimplementasikan cara kerja/mekanisme untuk memindahkan suatu tumpukan dalam piringan Hanoi. User diberi opsi untuk memasukkan berapa priringan yang akan dipindahkan. Missalnya, kita masukkan 4 piringan maka akan ditampilkan urutan/langkah-langkah yang harus dilakukan untuk memindahkan piringan-piringan tersebut sehingga hasilnya jika digambarkan akan terdapat tumpukan piringan baru.

(58)

MODUL VIII

 – 

QUEUE

I. Tujuan Praktikum

Praktikan diharapkan dapat:

1. Mengenal queue (antrian) data dalam bahasa C

2. Menggunakan queue untuk memecahkan masalah dalam bahasa C

3. Mengimplementasikan cara kerja queue ke dalam aplikasi/program dalam bahasa C

II. Dasar Teori

QUEUE (antrian) adalah list linier yang dikenali elemen pertama (HEAD) dan elemen terakhirnya (TAIL), aturan penyisipan dan penghapusan elemennya didefinisikan sebagai berikut:

• Penyisipan selalu dilakukan setelah elemen terakhir • Penghapusan selalu dilakukan pada elemen pertama

• Satu elemen dengan yang lain dapat diakses melalui informasi NEXT

Struktur data ini banyak dipakai dalam informatika, missalnya untuk  merepresentasi:

• Antrian job yang harus ditangani oleh sistem operasi • Antrian dalam dunia nyata

Maka secara lojik, sebuah QUEUE dapat digambarkan sebagai list linier yang setiap elemennya adalah:

Type ElmtQ : < Info : InfoType, Next : address >

Dengan InfoType adalah sebuah type terdefinisi yang menentukan informasi yang disimpan pada setiap elemen queue, dan address adalah “alamat” dari elemen. Selain itu alamat elemen pertama (HEAD) dan elemen terakhir (TAIL) dicatat: Maka jika Q adalah Queue dan P adalah address, penulisan untuk Queue adalah Head(Q), Tail(Q), Info(Head(Q)), Infor(Tail(Q)).

Queue (antrian) hampir mirip dengan stack, tapi hanya saja, data yang masuk  pertama kali akan keluar pertama kali dari Queue.

(59)

VIII-2

A B C D E

Gambar 02

Sama halnya dengan stack, Queue dapat disajikan baik dengan array maupun dengan struct. Pada array, stack ataupun queue yang disajikan bersifat statis. Ini disebabkan karena jumlah maksimal data pada array sudah ditentukan sejak awal.

Operasi pada Queue

Dalam penyajian queue, ada 2 proses yang terjadi, yaitu menambahkan elemen (Enqueue) dan mengurangi elemen (Dequeue). Seperti yang sudah dijelaskan bahwa array itu memiliki jumlah maksimal, maka pada proses Enqueue, perlu pengecekan apakah data yang di-enqueue melebihi jumlah maksimal array atau tidak.

Implementasi Antrian dengan Array

Seperti halnya pada tumpukan, maka dalam antrian kita juga mengenal ada dua operasi dasar, yaitu menambahkan elemen baru yang akan kita tempatkan di bagian belakang antrian dan menghapus elemen yang terletak di bagian depan antrian.

Di samping itu, seringkali kita juga perlu melihat apakah antrian mempunyai isi atau dalam keadaan kosong. Operasi penambahan elemen baru selalu bisa kita lakukan karena tidak ada pembatasan banyaknya elemen dari suatu antrian. Tetapi untuk menghapus elemen, maka kita harus melihat apakah antrian dalam keadaan kosong atau tidak. Tentu saja kita tidak mungkin menghapus elemen dari suatu antrian yang sudah kosong.

Untuk menyajikan antrian menggunakan array, maka kita membutuhkan deklarasi antrian, misalnya sebagai berikut:

#define MAXQUEUE 100; typedef int ItemType; typedef struct{ int Count; int Front; int Rear; ItemType Item[MAXQUEUE]; } Queue

(60)

Front, menunjukkan item yang paling depan, yaitu elemen yang akan dihapus  jika dilakukan operasi penghapusan. Setelah kita melakukan penghapusan, kita melakukan increment pada indeks Front, sehingga indeks menunjuk pada posisi berikutnya. Jika indeks ini jatuh pada angka tertinggi, yaitu angka paling maksimum dari array (N), maka kita melakukan setting ulang ke 0.

Array Item[0:N-1] berisi N item yang merupakan isi dari antrian. Berada pada posisi 0:N-1 dimana pada posisi ini dapat diindikasikan dua pengenal, yaitu Front dan Rear. Count menunjukkan jumlah item dalam antrian. Rear menunjukkan posisi dimana setelahnya dapat dimasukkan item berikutnya.

III. Hasil dan Pembahasan Program 8-1 //program guided 1 #include<stdio.h> #include<stdlib.h> #include<conio.h> void main() { char A[10]; int dpn, blk; char cek; int z; dpn=0; blk=-1; do { clrscr();

printf("1. Tambah antrian\n"); printf("2. Hapus antrian\n"); printf("3. Lihat antrian\n"); printf("4. Exit\n");

printf("5. Silahkan berikan pilihan anda : "); cek=getche();

if (cek!='1' && cek!='2' && cek!='3' && cek!='4') printf("\n Anda salah mengetikan inputan!\n"); else { if(cek=='1') { if(blk==9) {

printf("\n Maaf antrian penuh\n"); goto error1;

}

blk++;

printf("\n Silahkan masukan inputan : ");

(61)

VIII-4 A[blk]=getche(); } else if(cek=='2') { if(dpn>blk) {

printf("\n Maaf antrian kosong\n"); goto error1; } for(int v=0; v<=blk; v++) { A[v]=A[v+1]; } blk--;

printf("\nProses penghapusan berhasil"); }

else if (cek=='3') {

if (dpn>blk) {

printf("\n Maaf Antrian Kosong\n"); goto error1; } printf("\n\nAda %i antrian\n",(blk+1) -dpn); for(z=0; z<=blk; z++) printf("| %c |",A[z]); } } error1:

printf("\n Silahkan tekan Enter untuk melanjutkan...\n");

getche(); }while (cek!='4'); }

Proses penambahan data antrian

(62)

Penghapusan data

Tampilan setelah data dihapus

Program queue di atas berfungsi untuk mengimplementasikan cara kerja dari queue (antrian) dari sederetan data. Program di atas terdiri dari beberapa fungsi atau subprogram yakni fungsi enqueue/tambah data (berfungsi untuk  memasukkan/menambahkan data ke dalam antrian), fungsi dequeue/hapus data (berfungsi untuk menghapus data dalam antrian), fungsi lihat antrian (berfungsi untuk menampilkan deretan data yang sudah dibuat). Data yang ditambahkan pertama akan disimpan paling awal, dan jika melakukan penghapusan (dequeue) maka data yang dihapus/dihilangkan adalah data yang pertama dimasukkan (paling awal).

Studi Kasus 8-1 #include <stdio.h> #include <conio.h> #define MAX 20 struct queue { int queue[MAX]; int front; int rear; };

void insert(struct queue *,int); void del(struct queue *);

void display(struct queue*); void main()

{

int lim,choice,x; char ch;

(63)

VIII-6 q.front=-1; q.rear=-1; clrscr(); do { printf("Menu:");

printf("\n1.Memasukkan data ke antrian"); printf("\n2.Menghapus data dari antrian"); printf("\n3.Menampilkan antrian data"); printf("\nMasukkan pilihan anda:"); scanf("%d",&choice);

switch(choice) {

case 1:

printf("\nMasukkan data ke antrian: "); scanf("%d",&x); insert(&q,x); break; case 2: del(&q); break; case 3: display(&q); break; default:

printf("\nMasukkan pilihan anda: "); break;

}

printf("\nApakah anda akan melanjutkan (y/n)? "); fflush(stdin); scanf("%c",&ch); }while(ch=='y'); if(ch=='n') printf("\nTerima kasih"); getch(); }

//function for insertion

void insert(struct queue *q,int x) { if(q->rear==MAX-1) printf("\n\n\tQueue overflow"); else { q->rear++; q->queue[q->rear]=x; if(q->front==-1) q->front=0; } }

Gambar

Tabel 2.2  –  Fungsi Pustaka Fungsi

Referensi

Dokumen terkait

Tujuan DPM-LUEP untuk pembelian gabah/beras petani adalah : (a) Menjaga stabilitas harga gabah/beras yang diterima petani pada tingkat yang wajar; (b) Meningkatkan pendapatan

Burst abdomen adalah terpisahnya jahitan luka pada abdomen secara parsial atau komplit salah satu atau seluruh lapisan dinding abdomen pada luka post operatif disertai

Penelitian ini bertujuan untuk mencari hubungan matematis volume, kecepatan, kepadatan dan panjang antrian yang terjadi akibat lampu merah pada salah satu lengan

Bahwa berdasarkan catatan, Pemerintah pada tanggal 20 Nopember 2000 telah mengajukan kepada DPR RI Rancangan Undang Undang tentang perubahan atas Undang Undang

Puji syukur penulis panjatkan kehadirat Tuhan Yang Maha Esa atas limpahan rahmat dan karuunianya sehingga skripsi dengan judul “Penerapan Pembelajaran Project

Pada kriteria ini, anak ADHD paling sedikit mengalami enam atau lebih dari gejala-gejala berikutnya, dan berlangsung selama paling sedikit 6 bulan sampai suatu

Berdasarkan hasil uji statistik hubungan antara fekunditas dengan karakter morfometrik (panjang rongga perut, tinggi linea lateralis, dan luas rongga perut) serta bobot badan

Penelitian ini merupakan uji klinis yang dilakukan secara acak dan tersamar ganda (double blind randomized trial), membandingkan efektivitas dosis tunggal albendazole 400 mg