0% menganggap dokumen ini bermanfaat (0 suara)
173 tayangan37 halaman

Modul Algoritma Dan Struktur Data C#

Modul ini membahas tentang algoritma dan struktur data dalam bahasa pemrograman C#. Modul ini menjelaskan pengenalan C# meliputi struktur bahasa, sintaks dasar, tipe data, variabel, konstanta, dan operator. Modul ini juga menjelaskan struktur logika program C# meliputi seleksi kondisi dan pengulangan pernyataan.

Diunggah oleh

Muhammad Ramadhon
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
173 tayangan37 halaman

Modul Algoritma Dan Struktur Data C#

Modul ini membahas tentang algoritma dan struktur data dalam bahasa pemrograman C#. Modul ini menjelaskan pengenalan C# meliputi struktur bahasa, sintaks dasar, tipe data, variabel, konstanta, dan operator. Modul ini juga menjelaskan struktur logika program C# meliputi seleksi kondisi dan pengulangan pernyataan.

Diunggah oleh

Muhammad Ramadhon
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 37

MODUL KULIAH

ALGORITMA DAN STRUKTUR DATA

Akwan Sunoto, S.Kom, M.S.I

UNIVERSITAS DINAMIKA BANGSA

1
BAB I
PENGENALAN C#
1.1. STRUKTUR BAHASA C#
Pada tahun 2000 Microsoft meluncurkan bahasa pemrograman baru yang
diberi nama. C# Programming Language. C# dikembangkan oleh Microsoft oleh
tim yang dipimpin oleh. Anders Hejlsberg dan Scott Wiltamuth. C# memiliki
kesamaan bahasa dengan C, C++, dan Java, sehingga memudahkan developer
yang sudah terbiasa dengan bahasa C untuk menggunakannya, C# mengambil
fitur-fitur terbaik dari ketiga bahasa tersebut dan juga menambahkan fitur-fitur
baru. C# adalah bahasa pemrograman Object Oriented dan memiliki class library
yang sangat lengkap yang berisi prebuilt component sehingga memudahkan
programer untuk men-develop program lebih cepat. C# juga distandarkan oleh
Ecma International pada bulan desember 2002.
Dengan C# dapat dibuat bermacam aplikasi seperti aplikasi console,
aplikasi windows form, aplikasiWeb, aplikasi Web services, dan aplikasi untuk
mobile device. Jadi cukup belajar satu bahasa saja tapi sudah dapat digunakan
untuk mengembangkan berbagai macam aplikasi.
C# merupakan bahasa pemrogramn yang bersifat Case Sensitive, yang
artinya membedakan antar huruf besar dan huruf kecil. Berikut adalah contoh
dari struktur Bahasa C#.

2
 Keyword using digunakan untuk memberitahu compiler class apa yang
sedang digunakan pada aplikasi.
 Keyword namespace digunakan untuk mendeklarasikan ruang lingkup dari
class yang dibuat.
 Class didalam namespace dapat dipanggil dengan mencantumkan nama
spacenya terlebih dahulu.
 Using system; pada baris pertama mempunyai arti bahwa user dapat
menggunakan clas-class yang ada pada namespace System.
 Static menunjukan tipe method.
 void menunjukkan bahwa method tidak mengembalikan nilai atau objek.
 Main m.erupakan nama method utama program C# .
 String merupakan tipe argumen yang akan diterima sebagai parameter dari
command C#.
 Args merupakan merupakan array argumen yang dapat ditambahkan pada
saat menggunakan command C# untuk menjalankan program C#.

1.2. SINTAKS DASAR C#


a. Perintah Output
Untuk menampilkan output dalam bentuk string dapat mengunakan
perintah berikut

Console.Write("Penyataan dalam bentuk string");

Untuk menampilkan output dari variabel dapat mengguanakan sintaks


berikut:

Console.Write("Nilai a :{0}, dan nilai b :{1}", a,


b);

b. Perintah membaca inputan

Console.ReadLine();
Console.ReadKey();

c. Perintah Konversi

Nama_variabel = tipe_data.Parse(Console.ReadLine());

3
1.3. TIPE DATA
Tipe data merupakan jenis data yang digunakan pada program untuk
Dioperasikan. Pada C# terdapat dua jenis tipe data, yaitu:
a. Tipe data dasar misalkan integer, float, byte, dan sebagainya.
b. Tipe data reference misalkan object dan delegates
Tipe data dasar yang terdapat pada C# adalah:

1.4. VARIABEL
Pendeklarasian variabel pada C# diawali dengan tipe data seperti sintaks
berikut:

Tipe_data nama_variabel = nilai ;

contoh .

int a=10;
double b=5;

Jika hendak mendeklarasikan beberapa variabel sekaligus dengan tipe data yang
sama, dapat dilakukan dengan 2 cara, yaitu :

4
int a;
int b;

atau dapat disederhanakan dengan deklarasi :


int a, b;

Perhatikan contoh berikut:

Contoh 1:

namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
int a = 10,b = 20;
Console.Write("Nilai a :{0} , dan nilai b :{1}", a, b);
Console.ReadKey();

}
}
}

Contoh 2:
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
string nama;
int umur;
Console.Write("Nama :");
nama = Console.ReadLine();
Console.Write("Umur :");
umur = int.Parse(Console.ReadLine());
Console.Clear();
Console.WriteLine("Nama :{0}", nama);
Console.WriteLine("Umur :{0}", umur);
Console.ReadKey();
}
}
}

5
1.5. KONSTANTA
Konstanta mirip dengan variable, namun memiliki nilai tetap. Konstanta dapat
berupa nilai Integer, Float, Karakter dan String. Konstranta dapat dideklarasikan
seperti sintaks berikut:

const tipe_data nama_variabel = nilai konsatanta;

Contoh:

namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
const double phi = 3.14;
double r,l;
Console.Write("Jari-jari ;");
r = double.Parse(Console.ReadLine());
l = phi * r * r;
Console.Write("Luas Lingkaran :{0}", l);
Console.ReadKey();
}
}
}

1.6.OPERATOR
Dalam C#, terdapat berbagai macam operator yang dapat dimanfaatkan dalam
aplikasi.
a. Operator Aritmatika
Operator aritmatika digunakan untuk perhitungan matematis seperti dalam
penambahan, pengurangan, perkalian, dan pembagian

Simbol Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Modulus

6
b. Operator Relasional
Operator relasi dalam sebuah program biasa digunakan untuk
membandingkan dua buah nilai, dan operator relasi akan memberikan nilai
benar atau salah (true, false).

Simbol Keterangan
== Sama dengan
!= Tidak sama dengan
> Lebih besar dari
< Kurang dari
>= Lebih besar dari atau sama dengan
<= Kurang dari atau sama dengan

c. Operator Logika
Operator logika juga digunakan untuk memberikan nilai atau kondisi
true dan false. Biasanya operator logika dipakai untuk
membandingkan dua kondisi.

Simbol Keterangan
! Not
&& And
|| Or

7
BAB II
STRUKTUR LOGIKA PROGRAM
Dalam sebuah proses program, biasanya terdapat kode penyeleksian
kondisi, kode pengulangan program, atau kode untuk pengambilan keputusan.
Untuk tujuan tersebut, C# memberikan berbagai kemudahan dalam sintaknya.
Terdapat sebuah konsep, yakni Blok Instruksi. Sebuah blok dari
instruksi merupakan sekelompok instruksi yang dipisahkan dengan tanda
semicolon (;) dan berada diantara tanda { dan }.
Untuk Blok Instruksi, penggunaan tanda { dan } boleh ditiadakan.
Dengan syarat, hanya pernyataan tunggal yang akan dilaksanakan oleh blok
instruksi. Apabila pernyataan yang dijalankan lebih dari satu, maka tanda {
dan } wajib disertakan.
1. SELEKSI KONDISIONAL
Pernyataan Bercabang digunakan untuk memecahkan persoalan untuk
mengambil suatu keputusan diantara sekian pernyataan yang ada. Untuk keperluan
pengambilan keputusan, Bahasa pemrograman C# menyediakan beberapa perintah
antara lain.
Pernyataan if….. else….
Pengecekan kondisi merupakan suatu aspek terpenting dalam emrograman.
Pengecekan kondisi ini sudah ada sejak bahasa assembly. C# juga
menyediakan pengecekan kondisi berupa if….else…., struktur dari
pernyataan kondisi dalam C# dinyatakan seperti berikut:
Sintaknya adalah :
if (kondisi)
pernyataan;
else
pernyataan;

8
Contoh :

if (x==100)
Console.Write(“x adalah 100”);
else
Console.Write(“x bukan 100”);

Pernyataan if…else… dapat terdiri dari beberapa else. Pada


contoh berikut, program akan memberikan jawaban terhadap inputan
data, apakah berupa nilai positif, negative atau nol :
if (x>0)
Console.Write(“positive”);
else if (x<0)
Console.Write(“negative”);
else
Console.Write(“x adalah 0”);

9
Contoh
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
string nama, mk, nh;
double na,nt,nm,nu,bb;
Console.Write("Input Nama :");
nama = Console.ReadLine();
Console.Write("Input Matakuliah :");
mk = Console.ReadLine();
Console.Write("Nilai Tugas :");
nt = double.Parse(Console.ReadLine());
Console.Write("Nilai MID :");
nm = double.Parse(Console.ReadLine());
Console.Write("Nilai UAS :");
nu = double.Parse(Console.ReadLine());
na = (0.4 * nt) + (0.3 * nm) + (0.3 * nu);

if (na >= 80)


{
nh = "A";
bb = 4;
}
else if (na >= 70)
{
nh = "B";
bb = 3;
}
else if (na >= 60)
{
nh = "C";
bb = 2;
}
else if (na >= 50)

{
nh = "D";
bb = 1;
}
else
{
nh = "E";
bb = 0;
}
Console.WriteLine("Nilai Huruf :{0}", nh);
Console.WriteLine("Bobot Nilai :{0}", bb);
Console.ReadKey();
}
}
}

10
Contoh penggunaan operator logika

static void Main(string[] args)


{
string nama,st,jk;
int gol,ja;
double gp,ti,ta,gb;
Console.Write("Input Nama :");
nama=Console.ReadLine();
Console.Write("Input Golongan :");
gol=int.Parse(Console.ReadLine());
Console.Write("Input Status :");
st=Console.ReadLine();
Console.Write("Input jen. Kelamin:");
jk=Console.ReadLine();
Console.Write("Input Jumlah Anak :");
ja=int.Parse(Console.ReadLine());
if(gol==1)
gp=1000000;
else if(gol==2)
gp=2000000;
else
gp=0;
//mencari tunjangan istri
if((st=="M" || st=="m")&&(jk=="L" || jk=="l"))
ti=0.1*gp;
else
ti=0;
//mencari tunjangan anak
if((st=="M" || st=="m")&&(jk=="L" || jk=="l"))
{
if(ja>=2)
ta=0.2*gp;
else
ta=ja*0.1*gp;
}
else
ta=0;
gb=gp+ti+ta;
Console.WriteLine("Gaji Pokok :{0}",gp);
Console.WriteLine("Tunjangan istri :{0}",ti);
Console.WriteLine("Tunjangan anak :{0}",ta);
Console.WriteLine("Gaji Bersih :{0}", gb);
Console.ReadKey();
}

11
2. PERULANGAN (loops)
Sebuah atau beberapa pernyataan akan dijalankan secara berulang-ulang, selama
kondisi terpenuhi.
Perulangan dengan while
Sintaknya adalah :
while (kondisi) pernyataan;
pernyataan akan dijalankan selama ekspresi bernilai true.

Contoh :

static void Main(string[] args)


{
int x;
x=1;
while(x<=10)
{
Console.WriteLine("{0}",x);
x++;
}
Console.ReadKey();
}

Perulangan dengan do…while


Sintaknya :

do pernyataan while (kondisi);


Konsep do...while mirip dengan while. Namun pernyataan akan dijalankan
terlebih dahulu sebelum pengecekan kondisi. Untuk lebih jelasnya, perhatikan
contoh berikut:

static void Main(string[] args)


{
int x;
x=1;
do
{
Console.WriteLine("{0}", x);
x++;
} while (x <= 10);
Console.ReadKey();
}

12
Perulangan dengan for
Sintaknya :

for (inisialisasi; kondisi; counter) pernyataan;

Pernyataan akan diulangi jika kondisi bernilai true. Sama seperti perulangan
dengan while. Namun for menetapkan inisialisasi dan penaikan berada dalam (
dan ).

Penjelasannya adalah sebagai berikut:


1. Inisialisasi: akan dieksekusi. Biasanya merupakan variable yang akan
dipakai sebagai counter atau pencacah. Bagian ini akan dieksekusi hanya
sekali.
2. Kondisi: akan diperiksa, jika bernilai true maka perulangan akan dilanjutkan
dan jika bernilai false maka perulangan akan dilewati.
3. Pernyataan: akan dieksekusi. Biasanya dapat terdiri dari sebuah instruksi
atau blok instruksi yang berada di antara { dan }.
4. Terakhir, apapun perintah dalam counter akan dijalankan dan kemudian
perulangan kembali lagi ke langkah 2.

static void Main(string[] args)


{
int x;
for(x=0;x<10;x++)
Console.WriteLine("{0}", x);
Console.ReadKey();
}

3. Nested Loops (Perulangan Bertumpuk)


Perulangan bertumpuk secara sederhana dapat diartikan : terdapat satu atau
lebih loop di dalam sebuah loop. Banyaknya tingkatan perulangan, tergantung
dari kebutuhan.
Contoh:

13
static void Main(string[] args)
{
int x, y;
for (x = 0; x < 10; x++)
{
for (y = 0; y < x; y++)
{
Console.Write("*");
}
Console.WriteLine();
}
Console.ReadKey();
}

Struktur Selektif dengan switch


Logika menggunakan switch sama dengan menggunakan perintah if yang telah
dijelaskan sebelumnya.
Sintaknya adalah :

switch (pilihan)
{
case nilai1 :
blok pernyataan 1
break;
case nilai2 :
blok pernyataan 2
break;
default:
blok pernyataan default
Break;
}

Cara kerjanya:
1. switch akan mengevaluasi pilihan dan apabila isinya sama dengan nilai1,
maka blok pernyataan 1 akan dijalankan sampai menemukan perintah break
untuk kemudian keluar dari blok switch.
2. Bila pilihan tidak sama isinya dengan nilai1, maka akan dicocokkan lagi

14
dengan nilai2. dan apabila isinya sama dengan nilai2, maka blok
pernyataan2 akan dijalankan sampai menemukan perintah break untuk
kemudian keluar dari blok switch.
3. Terakhir, apabila isi pilihan tidak sesuai dengan nilai1, nilai2 dan seterusnya
maka secara otomatis yang dijalankan adalah blok pernyataan default.

Contoh

static void Main(string[] args)


{
int pil;
Console.Write("Masukkan Pilihan :");
pil = int.Parse(Console.ReadLine());
switch(pil)
{
case 1:
Console.WriteLine("pilhannya 1");
break;
case 2:
Console.WriteLine("Pilihanya 2");
break;
default:
Console.WriteLine("salah");
break;
}
Console.ReadKey();
}

15
BAB III
ARRAY
Array atau larik adalah kumpulan dari nilai-nilai data bertipe sama dalam
urutan tertentu yang menggunakan sebuah nama yang sama. Nilai-nilai data pada
suatu larik disebut dengan elekmen-elemen larik. Letak urutan dari suatu larik
ditunjukkan oleh suatu subscript atau index.
Array 1 Dimensi
Sebuah array dikatakan berdimensi satu jika:
1. Suatu nilai yang tersimpan dalam array tersebut ditentukan oleeh satu
kondisi (baris atau kolom).
2. Setiap elemen array dapat diakses melalui index
3. Index array secara default dimulai dari 0

Deklarasi array I Dimensi

Tipe_data[] nama_array

Contoh
int[] nilai;

Menginisialiasi array

int[] nilai=new int[5];

Memberikan nilai pada array

int[] nilai=new int[5];


nilai[0]=80;

Kita juga dapat memberikan nilai pada array sewaktu kita menginisialisasi array.
int[] nilai=new int[5] {50,60,65,70,75};
atau
int[] nilai=new int[] {50,60,65,70,75};

16
Contoh Program I
static void Main(string[] args)
{
int x;
int[] nilai = new int[5];
//input data kedalam array
for(x=0;x<5;x++)
{
Console.Write("Inputkan data ke {0}:", x + 1);
nilai[x] = int.Parse(Console.ReadLine());
}
Console.Clear();
//membaca data di array
for(x=0;x<5;x++)
{
Console.WriteLine("Data Ke {0} : {1}", x + 1, nilai[x]);
}
Console.ReadKey();
}

Contoh II

static void Main(string[] args)


{
int[] umur = new int[3];
string[] nama = new string[3];
int x;
for (x = 0; x < 3; x++)
{
Console.Clear();
Console.WriteLine("data ke :{0}", x + 1);
Console.Write("Nama :");
nama[x] = Console.ReadLine();
Console.Write("Umur :");
umur[x] = int.Parse(Console.ReadLine());
}
Console.Clear();
Console.WriteLine("Nama Umur");
Console.WriteLine("====================");
for (x = 0; x < 3; x++)
{
Console.WriteLine("{0,-15} {1,2}", nama[x], umur[x]);
}
Console.WriteLine("====================");
Console.ReadKey();
}

17
Array 2 Dimensi
 Array dua dimensi merupakan array yang terdiri dari m buah baris dan n buah kolom.
Bentuknya dapat berupa matriks atau tabel.
 Deklarasi array :
Contoh :
int[,] nama_array;
Contoh I :

static void Main(string[] args)
{
int i, j, k, barisa, koloma, kolomb;
int[,] matrika = new int[100, 100];
int[,] matrikb = new int[100, 100];
int[,] matrikc = new int[100, 100];
Console.Clear();
/*memasukan ordo matrik*/
Console.Write("jumlah baris matrik a?");
barisa = int.Parse(Console.ReadLine());
Console.Write("jumlah kolom matrik a?");
koloma = int.Parse(Console.ReadLine());
Console.Write("jumlah kolom matrik b?");
kolomb = int.Parse(Console.ReadLine());

/*memasukan data matrik a*/


Console.WriteLine("masukan nilai matrik a:");
for (i = 0; i < barisa; i++)
{
for (j = 0; j < koloma; j++)
{
Console.Write("a({0},{1})?", i + 1, j + 1);
matrika[i, j] = int.Parse(Console.ReadLine());
}
Console.WriteLine();
}

/*memasukan data matrikb*/


Console.WriteLine("masukan nilai matrik b:");
for (j = 0; j < koloma; j++)
{
for (k = 0; k < kolomb; k++)
{
Console.Write("b({0},{1})?)", j + 1, k + 1);
matrikb[j, k] = int.Parse(Console.ReadLine());
}
Console.WriteLine();
}

/*manampilkan matrik a */
Console.WriteLine("Matrik A");
for (i = 0; i < barisa; i++)
{
for (j = 0; j < koloma; j++)
Console.Write("{0,3}", matrika[i, j]);
Console.WriteLine();
}
Console.WriteLine();

18
/*menampilkan matrik b*/
Console.WriteLine("Matrik B");
for (j = 0; j < koloma; j++)
{
for (k = 0; k < kolomb; k++)
Console.Write("{0,3}", matrikb[j, k]);
Console.WriteLine();
}
Console.WriteLine();

/*menghitung matrik c*/


for (i = 0; i < barisa; i++)
{
for (k = 0; k < kolomb; k++)
{
matrikc[i, k] = 0;
for (j = 0; j < koloma; j++)
matrikc[i, k] += matrika[i, j] * matrikb[j, k];
}
}

/*menampilkan hasil perkalian matrik */


Console.WriteLine("hasil perkalian matrik :\n");
for (i = 0; i < barisa; i++)
{
for (k = 0; k < kolomb; k++)
Console.Write("{0,3}", matrikc[i, k]);
Console.WriteLine();
}
Console.WriteLine();
Console.ReadKey();
}

19
Contoh II
static void Main(string[] args)
{
//int[] umur = new int[3];
string[] nama = new string[3];
string[,] mk = new string[3, 2];
int[,] nilai = new int[3, 2];
int x, y;
for (x = 0; x < 2; x++)
{
Console.Clear();
Console.WriteLine("data ke :{0}", x + 1);
Console.Write("Nama :");
nama[x] = Console.ReadLine();
for (y = 0; y < 2; y++)
{
Console.Write("Mata Kuliah:");
mk[x, y] = Console.ReadLine();
Console.Write("Nilai :");
nilai[x, y] = int.Parse(Console.ReadLine());
}
}
Console.Clear();
for (x = 0; x < 2; x++)
{

Console.WriteLine("Nama :{0}", nama[x]);


Console.WriteLine("======================");

for (y = 0; y < 2; y++)


{
Console.WriteLine("{0,-15} {1,3}", mk[x, y], nilai[x,y]);
}
Console.WriteLine();
}
Console.ReadKey();
}

20
BAB IV
PENCARIAN (SEARCHING)
Searching adalah pencarian data dengan cara menelusuri data-data tersebut.
Tempat pencarian data dapat berupa array dalam memori, bisa juga pada file pada
external storage.

Ada beberapa pencarian yang akan kita uraikan disini:


 Pencarian Beruntun (Sequential Search)
 Pencarian Beruntun dengan sentinel (Sequential Search With Sentinel)
 Pencarian Bagi dua (Binary Search)

Pencarian Beruntun
Adalah suatu teknik pencarian data dalam array ( 1 dimensi ) yang akan
menelusuri semua elemen-elemen array dari awal sampai akhir, dimana data-
data tidak perlu diurutkan terlebih dahulu. Kemungkinan terbaik (best case)
adalah jika data yang dicari terletak di indeks array terdepan (elemen array
pertama) sehingga waktu yang dibutuhkan untuk pencarian data sangat sebentar
(minimal). Kemungkinan terburuk (worst case) adalah jika data yang dicari
terletak di indeks array terakhir (elemen array terakhir) sehingga waktu yang
dibutuhkan untuk pencarian data sangat lama (maksimal).
Dapat disimpulkan bahwa sequential search, akan mencari data dengan
cara membandingkannya satu-persatu dengan data yang ada. Prosesnya tentu saja
akan singkat jika data yang diolah sedikit, dan akan lama jika data yang diolah
banyak. Disarankan proses ini digunakan pada jumlah data yang sedikit saja.

21
Contoh Program
static void Main(string[] args)
{
//deklarasi variabel
int[] A= new int[10];
int[] index= new int[10];
int i,j,k;
//proses penginputan data
for(i=0;i<10;i++)
{
Console.Write("Data ke {0} :",i+1);
A[i]=int.Parse(Console.ReadLine());
}
//memasukkan data yang akan dicari ke dalam K
Console.Write("Masukkan data yang akan anda cari:");
k=int.Parse(Console.ReadLine());
//proses pencarian data
j=0;
for (i=0;i<10;i++)
{
if(A[i]==k)
{
index[j]=i;
j++;
break;
}
}
//jika data ditemukan dalam array
if (j>0)
{
Console.Write("Data tersebut terdapat dalam index ke :");
for(i=0;i<j;i++)
{
Console.Write("{0,3}",index[i]);
}
Console.WriteLine();
}
//jika tidak ditemukan
else
{
Console.WriteLine("Data tidak ditemukan dalam array");
}
Console.ReadKey();
}

22
Contoh 2

static void Main(string[] args)


{
//deklarasi variabel
int[] A= new int[10];
int[] index= new int[10];
int i,j,k;
//proses penginputan data
for(i=0;i<10;i++)
{
Console.Write("Data ke {0} :",i+1);
A[i]=int.Parse(Console.ReadLine());
}
//memasukkan data yang akan dicari ke dalam K
Console.Write("Masukkan data yang akan anda cari:");
k=int.Parse(Console.ReadLine());
//proses pencarian data
j=0;
for (i=0;i<10;i++)
{
if(A[i]==k)
{
index[j]=i;
j++;
}
}
//jika data ditemukan dalam array
if (j>0)
{
Console.WriteLine("Data {0} yang di cari ada {1} buah",k,j);
Console.WriteLine("Data tersebut terdapat dalam index ke :");
for(i=0;i<j;i++)
{
Console.Write("{0,3}",index[i]);
}
Console.WriteLine();
}
//jika tidak ditemukan
else
{
Console.WriteLine("Data tidak ditemukan dalam array");
}
Console.ReadKey();
}

23
Pencarian Beruntun dengan Sentinel
Ini merupakan metode pencarian dengan menambahkan 1 indeks array tambahan
yang belum berisi data (disebut sentinel).
Perhatikan array data berikut ini:

Terdapat 6 buah data dalam array (dari indeks 0 s/d 5) dan terdapat 1 indeks
array tambahan (indeks ke 6) yang belum berisi data (disebut sentinel). Array
pada indeks ke 6 berguna untuk menjaga agar indeks data berada pada indeks 0
s/d 5 saja. Bila pencarian data sudah mencapai array indeks yang ke-6 maka
berarti data TIDAK ADA, sedangkan jika pencarian tidak mencapai indeks ke-6,
maka data ADA.

static void Main(string[] args)


{

int[] data = new int[7] { 3, 12, 9, -4, 21,6,0 };


int cari,i;
Console.Write("Masukan data yang akan di cari :");
cari=int.Parse(Console.ReadLine());
data[6] =cari;
i = 0;
while (data[i] != cari)
i++;
if (i < 6)
Console.WriteLine("data ada");
else
Console.WriteLine("data Tidak Ada");

Console.ReadKey();
}

24
Pencarian bagi dua (binary Search)
Proses pencarian binary search hanya dapat dilakukan pada kumpulan data yang
sudah diurutkan terlebih dahulu. Jika terdapat N buah data yang akan dolah, data
yang dicari akan dibandingkan dengan data ke-N jika data ke-N lebih besar dari
data yang dicari maka akan dilakukan pembagian data menjadi dua bagian.
Kemudian ujung data pada setiap bagian dibandingkan lagi dengan nilai yang
akan dicari.

static void Main(string[] args)


{
int[] data=new int[9] {3,9,11,12,15,17,23,31,35};
int l,r,m,ktm;
int n=9;
int cari=17;
l=0;
r=n-1;
ktm=0;
while(l<=r && ktm==0)
{
m=(l+r)/2;
Console.WriteLine("data Tengah :{0}",m);
if(data[m]==cari)
ktm=1;
else if(cari<data[m])
{
Console.WriteLine("cari di kiri");
r=m-1;
}
else
{
l=m+1;
Console.WriteLine("cari dikanan");
}
}
if(ktm==1)
Console.WriteLine("Data Ada");
else
Console.WriteLine("Data Tidak Ada");
Console.ReadKey();
}

25
BAB V
PENGURUTAN (SORTING)
Salah satu bagian penting dari struktur data adalah proses pengurutan data-
data itu sendiri. Data akan terkadang akan berada dalam bentuk yang tidak
berpola ataupun dengan pola tertentu yang tidak kita inginkan, namun dalam
penggunaanya, kita akan selalu ingin menggunakan data-data tersebut dalam
bentuk yang rapi atau berpola sesuai dengan yang kita inginkan. Maka dari itu
proses sorting adalah proses yang sangat penting dalam struktur data, terlebih
untuk pengurutan data yang bertipe numerik ataupun karakter.
Sorting adalah proses menyusun kembali data yang sebelumnya telah
disusun dengan suatu pola tertentu ataupun secara acak, sehingga menjadi
tersusun secara teratur menurut aturan tertentu.
Pada umumnya ada 2 macam pengurutan, yaitu:
o Pengurutan secara ascending (urut naik).
o Pengurutan secara descending (urut turun).

Sorting Algorithm
o Bubble Sort
 Metode sorting paling mudah, namun paling lambat
dibandingkan dengan yang lain.
 Bubble sort mengurutkan data dengan cara membandingkan
elemen sekarang dengan elemen berikutnya.
 Bisa dilakukan baik dari kepala array maupun ekor array.
 Proses yang berlangsung, jika:
 Ascending: jika elemen sekarang lebih besar daripada
elemen berikutnya, maka kedua elemen tersebut
ditukar.
 Descending: jika elemen sekarang lebih kecil daripada
elemen berikutnya, maka kedua elemen tersebut
ditukar.

26
 Hal ini akan terlihat seperti penggeseran angka, perbandingan,
kemudian jika memenuhi syarat kemudian tukar.
 Proses penukaran ini akan terus dilakukan hingga seluruh array
telah diperiksa.
 Contoh fungsi bubble sort:

static void Main(string[] args)


{
int i,n,k,temp;
int[] x=new int[100];
Console.Write("masukan jumlah data :");
n=int.Parse(Console.ReadLine());
for(i=0;i<n;i++)
{
Console.Write(" Data ke {0} :",i+1);
x[i]=int.Parse(Console.ReadLine());
}
Console.WriteLine("data sebelum di urut");
for(i=0;i<n;i++)
{
Console.WriteLine("{0,3}", x[i]);
}
/*pengurutan*/
for(i=0;i<n-1;i++)
{
for(k=n-1;k>i;k--)
{
if (x[k]<x[k-1])
{
temp=x[k];
x[k]=x[k-1];
x[k-1]=temp;
}
}
}
Console.WriteLine("setelah di urut");
for (i = 0; i < n; i++)
Console.WriteLine("{0,3}", x[i]);
Console.ReadKey();
}

27
o Exchange Sort
 Mirip dengan bubble sort.
 Perbedaannya: dalam exchange sort ada elemen yang berfungsi
sebagai pusat (pivot), pertukaran hanya akan dilakukan jika
diperlukan saja dari pivot tersebut.
 Sedangkan bubble sort akan membandingkan elemen
pertama/terakhir dengan elemen sebelumnya/sesudahnya,
kemudian elemen sebelum/sesudahnya itu akan menjadi pusat
(pivot) untuk dibandingkan dengan elemen
sebelumnya/sesudahnya lagi, begitu seterusnya.
 Contoh fungsi exchange sort:

static void Main(string[] args)


{
int i,n,k,temp;
int[] x=new int[100];
Console.Write("masukan jumlah data :");
n=int.Parse(Console.ReadLine());
for(i=0;i<n;i++)
{
Console.Write(" Data ke {0} :", i + 1);
x[i]=int.Parse(Console.ReadLine());
}
Console.WriteLine("data sebelum di urut");
for(i=0;i<n;i++)
{
Console.WriteLine("{0,3}",x[i]);
}
/*pengurutan*/
for(i=0;i<n-1;i++)
{
for(k=i+1;k<n;k++)
{
if (x[i]>x[k])
{
temp=x[i];
x[i]=x[k];
x[k]=temp;
}
}
}
Console.WriteLine("\n setelah di urut");
for(i=0;i<n;i++)
Console.WriteLine("{0,3}",x[i]);
Console.ReadLine();
}

28
o Selection Sort
 Kombinasi sorting dan searching.
 Untuk setiap proses, akan dilakukan dengan mencari elemen
dari posisi yang belum diurutkan dan kemudian memilih
elemen yang memiliki nilai terkecil atau terbesar yang akan
ditukarkan ke posisi yang tepat di dalam array.
 Misalnya untuk putaran pertama, akan dicari data dengan nilai
terkecil dan data ini akan ditempatkan pada indeks terkecil,
pada putaran kedua akan dicari data kedua terkecil, dan akan
ditempatkan di indeks kedua, negitu seterusnya hingga tidak
ada data yang dicari lagi.
 Selama proses, pembandingan dan pengubahan hanya
dilakukan pada indeks pembanding saja, pertukaran data secara
fisik terjadi pada akhir proses.
static void Main(string[] args)
{
int i,n,j,temp,imin,min;
int[] x=new int[100];
Console.Write("masukan jumlah data :");
n=int.Parse(Console.ReadLine());
for(i=0;i<n;i++)
{
Console.Write(" Data ke {0} :",i+1);
x[i]=int.Parse(Console.ReadLine());
}

Console.WriteLine("data sebelum di urut");


for(i=0;i<n;i++)
{
Console.Write("{0,3}",x[i]);
}
/*pengurutan*/
for(i=0;i<n-1;i++)
{
imin=i;
min=x[i];
for(j=i+1;j<n;j++)
{
if (x[j]<min)
{
imin=j;
min =x[j];
}
}
temp=x[i];
x[i]=min;
x[imin]=temp;
}
Console.WriteLine("\n setelah di urut");
for(i=0;i<n;i++)
Console.Write("{0,3}", x[i]);
Console.ReadLine();
}

29
o Insertion Sort
 Analogi pengurutan kartu.
 Proses dilakukan dengan membandingkan data ke-I dengan
data yang sebelum-sebelumnya.
 Misal ascending: pengurutan dimulai dari data ke-2 sampai
dengan data terakhir, jika ditemukan data yang lebih kecil,
maka akan dimasukkan di posisi yang seharusnya.
 Pada penyisipan elemen, maka elemen-elemen lain akan
bergeser ke belakang.

static void Main(string[] args)


{
int x,i,t,j;
int[] a = new int[100];
Console.WriteLine("Insertion Sort - Desc");
Console.Write("Masukkan banyak bilangan = ");
x=int.Parse(Console.ReadLine());
for(i=0;i<x;i++)
{
Console.Write("Bilangan ke {0}:",i+1);
a[i]=int.Parse(Console.ReadLine());
}
Console.WriteLine("\n data Sebelum diurutkan :");
for(i=0;i<x;i++)
{
Console.Write("{0,3}",a[i]);
}
Console.WriteLine();

for(i=1;i<x;i++)
{
for (j = 0; j < i; j++)
{
if (a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}

Console.WriteLine("\n data Setelah diurutkan secara ");


for(i=0;i<x;i++)
{
Console.Write("{0,3}",a[i]);
}
Console.ReadKey();
}

30
BAB VI
TUMPUKAN(STACK)
 STACK atau TUMPUKAN adalah suatu struktur data yang seolah-olah
terlihat seperti data yang tersusun secara ‘menumpuk’, dimana ada data
yang terletak diatas data yang lainnya.
 Bersifat LIFO (Last In First Out), berarti data yang masuk terakhir akan
keluar pertama.
 Operasi pada Stack :
 IsFull  mengecek apakah STACK sudah penuh
 IsEmpty  mengecek apakah STACK sudah kosong
 Push  menambah data pada STACK pada tumpukan
paling atas
 Pop  mengambil data pada STACK pada tumpukan
paling atas
 Tampil  mencetak semua data dalam tumpukan

31
namespace Stack
{
class Program
{
static void Main(string[] args)
{
stack st = new stack();
while (true)
{
Console.Clear();
Console.WriteLine("\nStack MENU(size -- 10)");
Console.WriteLine("1. Add an element");
Console.WriteLine("2. See the Top element.");
Console.WriteLine("3. Remove top element.");
Console.WriteLine("4. Display stack elements.");
Console.WriteLine("5. Exit");
Console.Write("Select your choice: ");
int choice = Convert.ToInt32(Console.ReadLine());
switch (choice)
{
case 1:
Console.WriteLine("Enter an Element : ");
st.Push(Console.ReadLine());
break;
case 2:
Console.WriteLine("Top element is: {0}", st.Peek());
break;
case 3: Console.WriteLine("Element removed: {0}", st.Pop());
break;
case 4: st.Display();
break;
case 5: System.Environment.Exit(1);
break;
}
Console.ReadKey();
}
}
}

interface StackADT
{
Boolean isEmpty();
void Push(Object element);
Object Pop();
Object Peek();
void Display();
}
class stack : StackADT
{
private int StackSize;
public int StackSizeSet
{
get { return StackSize; }
set { StackSize = value; }
}

32
public int top;

Object[] item;
public stack()
{
StackSizeSet = 10;
item = new Object[StackSizeSet];
top = -1;
}

public stack(int capacity)


{
StackSizeSet = capacity;
item = new Object[StackSizeSet];
top = -1;
}

public bool isEmpty()


{
if (top == -1) return true;
return false;
}

public void Push(object element)


{
if (top == (StackSize - 1))
{
Console.WriteLine("Stack is full!");
}
else
{
item[++top] = element;
Console.WriteLine("Item pushed successfully!");
}
}

public object Pop()


{
if (isEmpty())
{
Console.WriteLine("Stack is empty!");
return "No elements";
}
else
{
return item[top--];
}
}

33
public object Peek()
{
if (isEmpty())
{
Console.WriteLine("Stack is empty!");
return "No elements";
}
else
{
return item[top];
}
}

public void Display()


{
for (int i = top; i > -1; i--)
{
Console.WriteLine("Item {0}: {1}", (i + 1), item[i]);
}
}
}
}

34
BAB VII
ANTRIAN(QUEUE)
Antrian (Queue) dapat diartikan sebagai suatu kumpulan data yang seolah-
olah terlihat seperti ada data yang diletakkan di sebelah data yang lain seperti pada
gambar 01. Pada gambar, data masuk melalui lorong di sebelah kanan dan masuk
dari terowongan sebelah kiri. Hal ini membuat antrian bersifat FIFO (First In First
Out), beda dengan stack yang berciri LIFO.

A B C D E F
F
Antrian dapat dibuat baik dengan array maupun dengan struct. Pada
pembuatan antrian dengan array, antrian yang disajikan bersifat statis. Ini
disebabkan oleh jumlah maksimal array sudah ditentukan sejak deklarasi awal.

Algoritma PUSH
Salah satu algoritma untuk proses memasukkan data (PUSH) adalah sebagai
berikut:
0. Masukkan inputan (x)
1. Jika variabel cek = max (Nilai maksimal array), kerjakan langkah 2. Jika
tidak, kerjakan langkah 3.
2. Cetak “ANTRIAN PENUH” lalu selesai.
3. Selama cek kurang dari max, maka c  c +1 dan data [c]  x.

Algoritma POP
Salah satu algoritma untuk proses mengeluarkan data (POP) adalah sebagai
berikut:
0. Jika cek = 0, cetak “ANTRIAN KOSONG” kemudian selesai. Jika tidak,
lakukan langkah 2.
1. mulai x=0, selama x kurang dari cek, lakukan langkah 2 dan 3.
2. data[x]  data [x+1].
3. data[cek-1]  NULL.
4. cek  cek – 1

35
namespace Antrian
{
class Program
{
static void Main(string[] args)
{
Queue<int> myQueue = new Queue<int>();

//Menambahkan elemen myQueue


myQueue.Enqueue(5);
myQueue.Enqueue(8);
myQueue.Enqueue(4);
myQueue.Enqueue(1);
myQueue.Enqueue(2);

//Menampilkan data myQueue


Console.WriteLine("Isi myQueue :");
foreach (int i in myQueue)
{
Console.WriteLine("{0}", i);
}
Console.WriteLine();

//Melakukan pengambilan data elemen myQueue


myQueue.Dequeue();

//Menampilkan data myQueue setelah dilakukan pengambilan data


Console.WriteLine("Isi myQueue :");
foreach (int i in myQueue)
{
Console.WriteLine("{0}", i);
}
Console.WriteLine();

//Melakukan pengambilan data lagi


myQueue.Dequeue();

//Menampilkan data myQueue setelah dilakukan pengambilan data


Console.WriteLine("Isi myQueue :");
foreach (int i in myQueue)
{
Console.WriteLine("{0}", i);
}
Console.WriteLine();
Console.ReadKey();
}
}
}

36
37

Anda mungkin juga menyukai