• Tidak ada hasil yang ditemukan

Algoritma Dan Implementasi Alat Bantu Pemecahan Masalah Matematika

N/A
N/A
Protected

Academic year: 2016

Membagikan "Algoritma Dan Implementasi Alat Bantu Pemecahan Masalah Matematika"

Copied!
54
0
0

Teks penuh

(1)

ALGORITMA DAN IMPLEMENTASI ALAT BANTU PEMECAHAN MASALAH MATEMATIKA

SKRIPSI

YOSUA YUDHANATA SEMBIRING 051411014

DEPARTEMEN MATEMATIKA

FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS SUMATERA UTARA

(2)

PERSETUJUAN

Judul : ALGORITMA DAN IMPLEMENTASI ALAT BANTU PEMECAHAN PERMASALAHAN MATEMATIKA

Kategori : SKRIPSI

Nama : YOSUA YUDHANATA SEMBIRING

Nomor Induk Mahasiswaa : 051411014

Program Studi : SARJANA (S1) MATEMATIKA

Departemen : MATEMATIKA

Fakultas : MATEMATIKA DAN ILMU PENGETAHUAN ALAM (FMIPA) UNIVERSITAS SUMATERA UTARA

Diluluskan di

Medan, Desember 2009 Komisi Pembimbing :

Pembimbing 1, Pembimbing 2,

Drs. Marihat Situmorang, M.Kom Drs. Halludin Panjaitan

NIP. 131859487 NIP. 130701888

Diketahui/Disetujui oleh

Departemen Matematika FMIPA USU Ketua,

(3)

PERNYATAAN

ALGORITMA DAN IMPLEMENTASI ALAT BANTU PEMECAHAN MASALAH MATEMATIKA

SKRIPSI

Saya mengakui bahwa skripsi ini adalah hasil kerja saya sendiri, kecuali beberapa kutipan dan ringkasan yang masing-masing disebutkan sumbernya.

Medan, Desember 2009

(4)

PENGHARGAAN

Segala puji dan syukur dipanjatkan kepada Tuhan Yang Maha Kuasa, yang dengan limpahan kuasanya telah membuat penulis berhasil menyelesaikan kajian ini dalam waktu yang telah ditentukan.

Ucapan terima kasih juga saya sampaikan kepada Bapak Drs. Marihat Situmorang, M.Kom, dan Bapak Haluddin Panjaitan, selaku pembimbing pada penyelesaian skripsi ini dan penuh kepercayaan kepada saya untuk menyempurnakan skripsi ini. Panduan padat, ringkas dan professional telah diberikan kepada saya agar penulisan tugas ini dapat diselesaikan.

(5)

ABSTRAKSI

(6)

DAFTAR ISI

Hal

LEMBARAN PENGESAHAN... i

LEMBAR PERNYATAAN... ii

LEMBARAN PENGHARGAAN... iii

ABSTRAKSI... iv

DAFTAR ISI... v

BAB I Pendahuluan... 1

1.1.Latar Belakang... 1

1.2.Rumusan Masalah... 2

1.3.Batasan Masalah... 2

1.4.Tujuan Penelitian... 2

1.5.Kontribusi Penelitian... 3

1.6.Metode Penelitian... 3

1.7.Tinjauan Pustaka... 3

BAB II Landasan Teori...,... 5

2.1. Algoritma... 5

2.2. Bahasa Pemrograman C++... 7

2.2.1. Tipe Data Dasar... 10

2.2.2. Variabel... 11

2.2.3. Mendeklarasikan Variabel... 11

2.2.4. Tipe daftar Variabel... 12

2.2.5. memberikan Nilai ke Variabel... 12

2.2.6. Inisialisasi Variabel... 12

(7)

2.2.8. Operator... 13

2.2.9. Operator Aritmetika... 14

BAB III Metodologi Penelitian... 19

3.1. Penentuan Bilangan Ganjil dan Bilangan Genap... 19

3.2. Penentuan diskriminan dan aar-akar persamaan kuadrat... 20

BAB IV Pembahasan Dan Pengujian... 27

4.1. Pembahasan... 27

4.2. Pengujian... 28

BAB V Kesimpulan dan Saran... 31

5.1. Kesimpulan... 31

5.2. Saran ... 31

Daftar Pustaka... 32

(8)

ABSTRAKSI

(9)

BAB I PENDAHULUAN

I.1. LATAR BELAKANG

Dalam matematika dan komputasi, algoritma merupakan kumpulan perintah untuk menyelesaikan suatu masalah. Perintah-perintah ini dapat diterjemahkan secara bertahap dari awal hingga akhir. Masalah tersebut dapat berupa apa saja, dengan syarat untuk setiap permasalahan memiliki kriteria kondisi awal yang harus dipenuhi sebelum menjalankan sebuah algoritma. Algoritma akan selalu berakhir untuk semua kondisi awal yang memenuhi criteria, hal ini berbeda dengan heuristik. Algoritma juga memiliki pengulangan proses (iterasi), dan juga memiliki keputusan hingga keputusan selesai.

Desain dan analisis algoritma merupakan suatu cabang khusus dalam ilmu computer yang mempelajari karakteristik dan performa dari suatu algoritma dalam penyelesaian masalah, terlepas dari implementasi algoritma tersebut. Dalam cabang disiplin ini, algoritma dipelajari secara abstrak, terlepas dari system komputer atau bahasa pemrograman yang dipergunakan. Algoritma yang berbeda dapat diterapkan untuk suatu permasalahan dengan kriteria yang sama. Kompleksitas dari suatu algoritma merupakan ukuran seberapa banyak komputasi yang diterapkan algoritma tersebut untuk menyelesaikan permasalahannya. Secara informal, algoritma yang dapat menyelesaikan permasalahan dalam waktu yang relative singkat memiliki tingkat kompleksitas yang rendah, semetara algoritma yang menyelesaikan permasalahan dalam waktu yang lebih lama memiliki tingkat kompleksitas yang lebih tinggi pula.

(10)

permasalahan, kita akan lebih mudah untuk mengingat dan memahaminya apabila permasalahan itu dapat ditampilkan dalam bentuk visual dan gambar, sehingga penyajian nya menjadi lebih menarik. Dari permasalahan diatas, penulis ingin membantu mempermudah penyelesaian Algoritma untuk mempermudah penyelesaian matematika dengan membuat perangkat lunak alat bantu logika dan algoritma.

I.2 Rumusan Masalah.

Agar pembahasan pada bab pembahasan dapat menjadi lebih terarah, maka penulis merumuskan permasalahan mendaji seperti berikut :

1. Bagaimana langkah membuat aplikasi yang dapat menjadi alat bantu penyelesaian permasalahan Algoritma.

2. Apa saja yang dapat mempengaruhi bentuk visualisasi yang ditampilkan. 3. Bagaimana menyusun algoritma yang baik dan benar.

I.3. Batasan Masalah

Pada pembahasan ini penulis membatasi permasalahan yang difokuskan pada pembuatan visualisasi dan flowchart dari algoritma yang sudah ditentukan.

1. Penentuan bilangan ganjil dan bilangan genap

2. Penentuan nilai diskriminan dari persamaan kuadrat.

I.4. Tujuan Penelitian

Penelitian ini bertujuan untuk memudahkan pengerjaan permasalahan-permasalahan matematika dan juga mencoba untuk membuat penyelesaiannya menjadi menarik dengan menampilkan bentuk penyelesaian dalam program komputer.

I.5. Kontribusi Penelitian

(11)

membuat matematika menjadi menarik dan mempermudah penyelesaian permasalahan matematika.

I.6. Metode Penelitian

Secara umum penelitian diselesaikan dalam beberapa tahapan yaitu :

1. Membahas bentuk penyelesaian permasalahan matematika secara umum dengan menggunakan metode yang ada.

2. Membuat bentuk algoritma tahapan-tahapan penyelesaian permasalahan matematika.

3. Merancang program untuk penyelesaian permasalahan matematika tersebut dengan menggunakan bahasa pemrograman C++.

4. Menjalankan program dan mencoba menganalisa hasil outputnya.

5. Membandingkan hasil penyelesaian yang dikerjakan secara manual dan secara otomatis dengan menggunakan program.

I.7. Tinjauan Pustaka

Algoritma merupakan suatu metode khusus yang tepat dan terdiri dari serangkaian langkah yang terstruktur dan dituliskan secara sistematis, yang akan dikerjakan untuk menyelesaikan suatu masalah dengan bantuan komputer.

Kata algoritma berasal dari nama Abu Ja’far Mohammed Ibnu Musa Alkhowarizmi, seorang ilmuwan Persia yang menulis buku berjudul Kitab Al Jbr W’almuqabala (rules of restoration and reduction) sekitar tahun 825 sampai tahun 1950 istilah algorithm selalu diasosiasikan dengan Euclid’s Algorithm, yaitu suatu proses yang menjelaskan cara mencari pembagi terbesar untuk dua buah bilangan.

(12)

Menurut Donald E.Knuth, sebuah algoritma harus memenuhi persayaratan :

1. Finiteness, Algoritma harus berakhir (terminate) setelah melakukan beberapa langkah proses.

2. Definiteness, Setiap langkah harus didefinisikan dengan tepat sehingga tidak menimbulkan makna yang ambigu.

3. Input, setiap algoritma memiliki data untuk diolah

4. Output, setiap algoritma memberikan suatu output setelah proses.

5. Effectiveness, langkah-langkah algoritma dikerjakan dalam waktu yang wajar

Langkah langkah yang membentuk suatu algoritma dapat dibagi menjadi 3 kelompok proses yaitu :

1. Sequence Process, Instruksi dkerjakan secara berurutan satu persatu mulai dari yang pertama sampai yang terakhir.

2. Selection Process, suatu instruksi adakalanya baru boleh dikerjakan apabila telah memenuhi persyarata tertentu, misalnya bila pembayaran dlakukan secara tunai, maka diberikan diskon 10%, sedangkan pembelian secara kredit tidak diberikan diskon. Dalam hal ini hanya boleh melakukan 1 instruksi dari 2 alternatif instruksi.

(13)

BAB II LANDASAN TEORI 2.1. Algoritma

Algoritma adalah : Cara yang dapat ditempuh oleh komputer dalam mencapai suatu tujuan, terdiri atas langkah-langkah yang terdefinisi dengan baik, menerima input, melakukan proses, dan menghasilkan output. Meskipun tidak selalu, biasanya sebuah algoritma memiliki sifat bisa dihitung (computable) atau bisa dihitung. Sebuah algoritma dikatakan benar (correct), jika algoritma tersebut berhasil mengeluarkan output yang benar untuk semua kemungkinan input. Jika sebuah algoritma dikatakan 99% benar, algoritma tersebut tetap salah (incorrect). Agar algoritma tersebut dikatakan benar, algoritma tersebut harus benar 100%.

Sebagai contoh, ketika kita menulis surat, maka kita perlu melakukan beberapa langkah sebagai berikut:

1. Mempersiapkan kertas dan amplop.

2. Mempersiapkan alat tulis, seperti pena atau pensil. 3. Mulai menulis.

4. Memasukkan kertas ke dalam amplop.

5. Pergi ke kantor pos untuk mengeposkan surat tersebut.

Dengan algoritma, kita dapat mengatasi masalah dari yang sederhana sampai yang kompleks sekalipun. Namun, seorang user harus mampu membuat suatu program dengan menggunakan bahasa yang difahami oleh komputer. Sebelum disajikan dalam bentuk bahasa pemrogaman, sebaiknya kita membuat diagram alir (Flow Chart) dan Pseudocode. Hal ini dimaksudkan agar dapat

mempermudah kerja atau mempermudah dalam membuat program. Selain itu, algoritma dapat mengatasi masalah logika dan masalah matematika dengan cara berurutan, tetapi kadang-kadang algoritma tidak selalu berurutan, hal ini dikenal dengan proses percabangan.

(14)

tidak ada arus listrik (biasanya dilambangkan dengan 0). Dengan kata lain, kita harus menggunakan sandi 0 dan 1 untuk melakukan pemrogaman komputer. Bahasa pemrogaman yang menggunakan sandi 0 dan 1 ini disebut bahasa mesin. Karena bahasa mesin sangat susah, maka muncul ide untuk melambangkan untaian sandi 0 dan 1 dengan singkatan kata yang lebih mudah difahami manusia biasa disebut dengan mnemonic code. Bahasa pemrogaman yang menggunakan singkatan kata ini disebut bahasa assembly. Program algoritma harus komplit, nyata, dan jelas. Meskipun tugas algoritma tidak menghasilkan solusi, tetapi proses harus berakhir hal ini disebut dengan semi algorithm (prosedur akan berjalan terus atau biasa disebut dengan perulangan). Intinya kita tidak boleh menambah masalah, akan tetapi kita harus mampu menyelesaikan masalah untuk mendapat hasil yang tepat.

Bilangan adalah suatu konsep mewakili suatu bilangan disebut sebagai matematika, konsep bilangan selama bertahun-tahun lamanya telah diperluas untuk meliputi bilangan

Prosedur-prosedur tertentu yang mengambil bilangan sebagai masukan dan menghasil bilangan lainnya sebagai keluran, disebut sebagai numeris. keluaran bilangan. Operasi yang lebih umumnya ditemukan adalah yang mengambil dua bilangan sebagai masukan dan menghasilkan satu bilangan sebagai keluaran. Contoh operasi biner adalah operasi numeris disebut sebagai

(15)

pemrograman. Bahasa pemrograman, atau sering diistilahkan juga dengan memungkinkan seorang programmer dapat menentukan secara persis data mana yang akan diolah oleh komputer, bagaimana data ini akan disimpan/diteruskan, dan jenis dalam berbagai situasi.

2.2. Bahasa Pemrograman C++.

Bahasa Pemrograman merupakan mendeskripsikan komputer dan manusia. Proses komputasi umumnya didefinisikan secara formal menggunakan konsep matematika dari Pemrograman dirancang untuk memfasilitasi komunikasi antara manusia dengan komputer.

Sebuah bahasa pemrograman disebut dipergunakan untuk mendeskripsikan semua komputasi yang dapat dilakukan Mesin Turing, yaitu memiliki

Berikut ini adalah daftar bahasa pemrograman komputer:

(16)

o

3.

4.

5. UNIX

o

o

o

o

6.

o

o

o

Dan dalam penyelesaian permasalahan ini penulis mencoba menggunakan bahasa pemrograman C++.

C++ adalah salah satu adalah dukungan terhadap konsep pemrograman berorientasi objek

Bahasa pemrograman C merupakan salah satu Dibuat pada tahun 1972 oleh Dennis Ritchie untuk Telephone Laboratories.

(17)

tersedia. C secara luar biasa mempengaruhi bahasa populer lainnya, terutama C++ yang merupakan extensi dari C.

a. Kelompok pertama

C++ mempunyai 32 buah kata yang dipesan (reserved words). Kata kunci kelompok pertama merupakan turunan dari

auto const double float int short struct unsigned

break continue else for long signed switch void

case default enum goto register sizeof typedef volatile

char do extern if return static union while

b. Kelompok kedua

Kata yang dipesan kelompok kedua berjumlah 30. Kata-kata ini adalah baru dan hanya ada di bahasa C++.

asm dynamic_cast namespace reinterpret_cast try

bool explicit new static_cast typeid

catch false operator template typename

(18)

const_cast inline public throw virtual

delete mutable protected true wchar_t

Kata-kata yang dipesan tersebut di atas tidak boleh dipakai sebagai nama variable, class, enum, macro, dan struct.

2.2.1. Tipe data dasar

Untuk menyimpan suatu variabel diperlukan tempat khusus di dalam memori komputer. Besar dan tipe dari variabel-variabel di dalam standar program C++ dispesifikasikan sebagai berikut.

Nama Keterangan Ukuran Jangkauan

char Abjad/karakter atau untuk

bilangan bulat kecil 1 byte

signed: -128 to 127 unsigned: 0 to 255 short int

(short)

Bilangan bulat dengan jangkauan

pendek 2 byte

signed: -32768 to 32767 unsigned: 0 to 65535

int Bilangan bulat 4 byte

(long) Integer dengan jangkauan panjang 4 byte

signed: -2147483648 to 2147483647

unsigned: 0 to 4294967295 bool Boolean, dapat bernilai benar

atau salah (true or false) i byte true or false float Angka dengan titik mengambang

(19)

double Bilangan cacah dengan ketelitian

ganda 8 byte 1.7e +/- 308 (15 digits)

long double Bilangan cacah dengan ketelitian

ganda panjang 8 byte 1.7e +/- 308 (15 digits) wchar_t Karakter lebar, biasa dipakai

untuk 2 byte 1 karakter lebar

2.2.2. Variabel

Aturan penulisan pengenal untuk sebuah variabel, konstanta atau fungsi yang di definisikan oleh pemrogram adalah sebagai berikut :

• Pengenal harus di awali dengan huruf (A..Z, atau a..z ) atau karakter garis bawah (_)

• Selanjutnya dapat berupa huruf, digit ( 0..9 ) atau karakter garis bawah atau tanda dollar ($).

• Panjang pengenal boleh lebih dari 31 karakter, tetapi hanya 31 karakter pertama yang akan di anggap berarti.

• Pengenal tidak boleh menggunakan nama yang tergolong sebagai kata-kata cadangan ( reserved words ) seperti int, if , while dan sebagainya.

2.2.3. Mendeklarasikan Variabel

Variabel digunakan dalam program untuk menyimpan suatu nilai, dan nilai yang ada padanya dapat di ubah-ubah selama eksekusi program berlangsung. Variabel yang akan digunakan dalam program haruslah dideklaraasikan terlebih dahulu. Pengertian deklarasi di sini berarti memesan memori dan menentukan jenis data yang bisa di simpan di dalamnya.

2.2.4. Tipe daftar-variabel

(20)

Contoh: int var_bulat1;

float var_pecahan1, var_pecahan2;

2.2.5. Memberikan Nilai Ke Variabel

Untuk memberikan nilai ke variabel yang telah di deklarasikan, maka bentuk umum pernyataan yang digunakan adalah :

nama_variabel = nilai ;

contoh :

int var_bulat = 10 ;

double var_pecahan = 10.5; 2.2.6. Inisialisasi Variabel

Adakalanya dalam penulisan program, setelah dideklarasikan, variabel langsung diberi nilai awal. Sebagai contoh yaitu variabel nilai :

int nilai; nilai = 10 ;

Dua pernyataan diatas sebenarnya dapat di singkat melalui pendeklarasian yang di sertai penugasan nilai, sebagai berikut :

int nilai = 10;

Cara seperti ini banyak dipakai dalam program C, disamping menghemat penulisan pernyataan, juga lebih memberikan kejelasan, khususnya untuk variabel yang perlu diberi nilai awal (diinisialisasi ).

2.2.7. Konstanta.

(21)

• Konstanta karakter misalnya ditulis dengan diawali dan di akhiri dengan tanda petik tunggal, contohnya : 'A' dan '@'.

• Konstanta integer ditulis dengan tanda mengandung pemisah ribuan dan tak mengandung bagian pecahan.

• Konstanta real (float dan double) bisa mengandung pecahan ( dengan tanda berupa titik ) dan nilainya bisa di tulis dalam bentuk eksponensial ( menggunakan tanda e ), contohnya : 27.5f ( untuk tipe float ) atau 27.5 ( untuk tipe double ) dan 2.1e+5 .

• Konstanta string merupakan deretan karakter yang diawali dan diakhiri dengan tanda petik ganda (") contohnya :"Pemrograman Dasar C ".

2.2.8. Operator

Operator merupakan simbol atau karakter yang bisa dilibatkan dalam program untuk melakukan sesuatu operasi atau manipulasi, seperti menjumlahkan dua buah nilai, memberikan nilai ke suatu variabel, membandingkan kesamaan dua buah nilai.

Simbol + merupakan operator untuk melakukan operasi penjumlahan dari kedua operandnya (yaitu a dan b). Karena operator penjumlahan melibatkan dua operator ini tergolong operator binary. Simbol - (minus) juga merupakan operator. Simbol ini termasuk sebagai operator unary, yaitu operator yang hanya memiliki sebuah operand ( yaitu c pada contoh ini ).

2.2.9. Operator Aritmatika.

Operator untuk operasi aritmatika yang tergolong sebagai operator binary adalah :

(22)

Adapun operator yang tergolong sebagai operator binary - artinya tanda minus

+ artinya tanda plus

Contoh pemakaian operator aritmatika misalnya untuk memperoleh nilai diskriminan dari suatu persamaan kuadrat dan juga penentuan bilangan ganjil dan bilangan genap.

Dalam bab ini akan dibahas mengenai teori-teori yang dapat menunjang serta menjadi acuan dalam pembuatan skripsi ini. Bagian tersebit dikelompokkan menjadi beberapa bab yaitu : Logika dan algoritma, masalah-masalah dan algoritmanya, struktur data dan flowchart.

Dalam perumusan algoritma yang dibahas adalah beberapa bentuk permasalahan matematika yaitu :

1. Penentuan bilangan ganjil dan bilangan genap

bilangan-bilangan yang paling dikenal adalah bilangan bulat yaitu : ..., -2, -1, 0, 1, 2, …. Dan bilangan-bilangan asli yaitu : 1, 2, 3, …. Keduanya sering digunakan untuk behitung dalam aritmetika algoritma untuk menentukan suatu bilangan termasuk bilangan genap atau bilangan ganjil.

Bilangan genap adalah bilangan bulat yang habis (tidak bersisa) jika dibagi 2. Sedangkan bilangan ganjil adalah bilangan bulat yang tidak bisa habis dibagi 2.

2. Penentuan diskriminan dan akar-akar persamaan kuadrat

(23)

terstruktur. Pemanfaatannya misalnya dalam menjelaskan persamaan linier, transformasi koordinat, dan lainnya. Matriks seperti halnya variabel biasa dapat dimanipulasi, seperti dikalikan, dijumlah, dikurangkan dan didekomposisikan.

Persamaan kuadrat adalah suatu persamaan polynomial berorde 2. Bentuk umum dari persamaan kuadrat adalah :

Y = ax2 + bx + c ; dimana a≠0

Huruf a, b, dan c disebut sebagai koefisien. Koefisien kuadrat a adalah koefisien dari x2, koefisien linier b adalah koefisien dari x, dan c adalah koefisien konstan atau koefisien bebas.

Rumus kuadrat dikenal pula dengan nama rumus abc, karena digunakan untuk menghitung akar-akar pesamaan kuadrat yang tergantu dari nilai a, b, dan c dari suatu persamaan kuadrat. Rumus yang dimaksud memiliki bentuk :

Algoritma untuk menghitung determinan dan akar-akar persamaan disajikan dalam bentuk :

Masukkan koefisien-koefisien dan konstanta persamaan kuadrat a,b, dan c . Harga. a tidak sama dengan nol.

1. Mulai

2. Baca data a,b,c

3. Hitung diskriminan persamaan D = b^2 – 4 x a x c

4. Cek harga diskriminan IF D > 0 Jika ya, hitung akar-akar persamaan

(24)

Lanjutkan ke langkah-5 Cek harga diskriminan

IF D = 0

Jika ya, hitung akar-akar persamaan X1X2 = ( -b ) / (2 x a)

5. Cetak hasil X1 dan X2 atau X12 atau pesan (“akar-akar imajiner”)

6. Selesai

Gambar1. Flowchart penentuan nilai diskriminan start

a b c D x1 x2

Input a b c

D=b2+4ac

D=C? D>C ?

Print x1 x2

X1=b/2a

X2=X1

X1=(-b + sqrt(D)) / 2a

X2 (b t(D)) /

X1=-b2/a + sqrt(D)) / 2a X2 = -b2/a – sqrt(D)) / 2a

Print “x1i” “x2i”

(25)

Determinan adalah nilai yang berada dalam akar (sqrt) pada rumus abc. Dalam hal ini diskriminan menentukan jumlah dan sifat dari akar-akar persamaan kuadrat. Terdapat tiga kasus yang mungkin terjadi :

1. J

ika diskriminan bersifat nol, terdapat eksak satu akar, dan akar yang dimaksud merupakan bilangan riil. Hal ini kadang disebut sebagai akar ganda, dimana nilainya adalah :

X1 = X2 = -b/2a

2. J

ika diskriminan bersifat positif, akan terdapat dua akar berbeda yang kedua-duanya berupa bilangan riil.

(26)

BAB III

METODOLOGI PENELITIAN

3.1. Penentuan bilangan ganjil dan bilangan genap.

Bilangan-bilangan yang paling dikenal adalah bilangan bulat yaitu : -2, -1, 0, 1, 2, …. Dan bilangan-bilangan asli yaitu : 1, 2, 3, …. Bilangan genap adalah bilangan bulat yang habis (tidak bersisa) jika dibagi 2. Sedangkan bilangan ganjil adalah bilangan bulat yang tidak bisa habis dibagi 2.

Berikut ditampilkan bentuk langkah-langkah yang diperlukan untuk penyesaian masaklah tersebut dalam bentuk flowchart.

Algoritma untuk penyelesaian permasalahan ini diselesaikan dengan cara sebagai berikut :

1. Start

2. Masukan bilangan, 3. Bagi dengan 2

(27)

Gambar 2. Flowchart Penentuan bilangan ganjil dan genap

3.2. Penentuan diskriminan dan akar-akar persamaan kuadrat

Dalam rumus kuadrat, terdapat istilah yang berada dalam tanda akar:

yang disebut sebagai

persamaan kuadrat. Dapat dituliskan sebagai D.

Suatu persamaan kuadrat dengan koefisien-koefisien riil dapat memiliki hanya sebuah akar atau dua buah dapat berbentuk menentukan jumlah dan sifat dari akar-akar persamaan kuadrat. Terdapat tiga kasus yang mungkin:

start

Bilangan, hasil bagi, sisa bagi

Input bilangan

Hasil bagi = bilangan /2 Sisa bagi = bilangan-(hasil bagi*2)

Sisa bagi=0?

“bilangan ganjil “

“bilangan genap” end

(28)

Jika dikriminan bersifat duanya merupakan bilangan riil. Untuk persamaan kuadrat dengan koefisien berupa maka akar-akarnya merupakan merupakan

Jika diskriminan bernilai merupakan bilangan riil. Hal ini kadang disebut sebagai nilainya adalah:

Jika diskriminan bernilai tidak terdapat akar riil. Sebagai gantinya, terdapat dua buah akar kompleks (tidak-real), yang satu sama lain merupakan

dan

Jadi akar-akar akan berbeda, jika dan hanya jika diskriminan bernilai bernilai

Perlu diperhatikan, bahwa dalam bentuk umum persamaan kuadrat tersebut harga koefisien A tidak boleh sama dengan 0 (nol). Hal ini dapat dipahami, karena jika A bernilai 0 (nol), maka persamaan tersebut bukan lagi disebut persamaan kuadrat tetapi merupakan persamaan linier. Sedangkan harga koefisien B dan konstanta C dimungkinkan mempunyai harga negatif, positif, atau 0 (nol).

(29)

kuadrat mempunyai dua akar persamaan real dimana keduanya mempunyai nilai yang sama / kembar. Kemungkinan ketiga, persamaan kuadrat tersebut mempunyai akar-akar imajiner (akar bilangan negatif). Ketiga kondisi tersebut ditentukan oleh nilai disikriminan pada persamaan kuadrat yang akan dihitung akar-akar persamaannya. Nilai disikriminan pada suatu persamaan kuadrat adalah dihitung dengan formula sebagai berikut ini :

Diskriminan = b2 – 4ac

Dalam kemungkinan kondisi yang pertama, apabila disikriminan persamaan kuadrat berharga positif, maka akan diperoleh akar-akar persamaan kuadrat yang real dan nilainya berbeda. Masing-masing akar persamaan adalah dihitung dengan formula sebagai berikut :

X1 = X2 =

Berikut diberikan contoh persamaan dimana diskriminannya bernilai positif, sehingga mempunyai dua harga akar-akar persamaan real dan berbeda.

Contoh : 2x2 + 5x + 2 = 0

Dari persamaan tersebut, diketahui harga koefisien A = 2, koefisien B = 5, dan konstanta C = 2. Harga diskriminan pada persamaan tersebut dapat dihitung sebagai berikut :

Karena diskriminan persamaan berharga positif, maka harga akar-akar persamaannya adalah dua bilangan real yang berbeda yaitu sebagai berikut :

X1 =

(30)

= - 0,5 X2 = = = - 2

Dari hasil perhitungan di atas, maka harga akar-akar persamaan kuadrat yang diperoleh adalah x1 = -0,5 dan x2= -2 .

Dalam kemungkinan kondisi yang kedua, apabila diskriminan persamaan kuadrat berharga 0 (nol), maka akar-akar persamaan kuadratnya adalah dua bilangan real dengan harga yang sama / kembar. Dengan kalimat lain berarti persamaan tersebut hanya mempunyai satu harga saja yaitu X1 = X2 = X12. Dalam kasus ini harga akar-akar persamaan kuadratnya adalah dihitung dengan formula sebagai berikut ini :

x1,x2 =

Berikut diberikan contoh sebuah persamaan kuadrat dimana diskriminannya bernilai nol sehingga mempunyai akar-akar persamaan real dan harganya sama / kembar.

x2 + 6x + 9 = 0

Dari persamaan tersebut, diketahui harga koefisien A = 1, koefisien B = 6, dan konstanta C = 9. Harga diskriminan pada persamaan tersebut adalah sebagai berikut :

Diskriminan = b2 – 4ac = 62 – 4 x 1 x 9 = 36 – 36 = 0

Karena diskriminan persamaan kuadrat berharga nol, maka harga akar-akar persamaannya adalah dua bilangan real yang sama yaitu sebagai berikut :

(31)

= = -3

Jadi harga akar-akar persamaan kuadrat tersebut adalah x1= x2 = -3

Dalam kemungkinan ketiga, apabila harga diskriminan persamaan kuadrat bernilai negatif, maka maka akar- akar persamaan kuadrat bersifat imaginer . Berikut diberikan contoh sebuah persamaan kuadrat dimana diskriminannya bernilai negatif, sehingga mempunyai akar-akar persamaan yang bersifat imaginer.

Contoh :

2X2 + X + 2 = 0

Dari persamaan tersebut, diketahui harga koefisien A = 1, koefisien B = 1, dan konstanta C = 2. Harga diskriminan pada persamaan tersebut adalah sebagai berikut :

Diskriminan = b2 – 4ac = 12 – 4 x 1 x 2 = 1 - 8

= -7

Karena diskriminan persamaan berharga negatif, maka harga akar-akar persamaannya adalah imaginer. Hal ini dapat dipahami karena untuk menghitung akar-akar persamaan kuadrat selalu melibatkan hasil perhitungan yang diperoleh dari harga akar kuadrat dari diskriminan pada persamaan kuadratnya. Sedangkan nilai dari akar suatu bilangan negatif adalah bilangan imaginer, sehingga akar-akar pada persamaan kuadrat yang mempunyai diskriminan negatif akan menghasilkan suatu bilangan imaginer.

(32)

selanjutnya adalah menghitung harga diskriminan persamaan. Harga diskriminan yang diperoleh akan menentukan harga pada akar-akar persamaannya.

Jika diskriminan bernilai positif, maka proses dilanjutkan untuk menghitung akar-akar persamaan kuadrat yang berupa dua bilangan real yang berbeda. Jika diskriminan bernilai nol, maka proses dilanjutkan untuk menghitung akar-akar persamaan kuadrat yang berupa dua bilangan real yang sama / kembar. Namun jika diskriminan bernilai negatif, maka proses dilanjutkan untuk memberikan pesan bahwa harga akar-akar persamaan kuadrat adalah bilangan imaginer. Harga-harga akar persamaannya adalah dihitung dengan menggunakan formula-formula sebagaimana telah dijelaskan pada uraian di atas.

Proses selanjutnya adalah tinggal mencetak hasil-hasil perhitungan yang diperoleh tersebut. Proses logik seperti ini dapat digambarkan dalam flowchart prosedur sebagaimana ditunjukkan pada Gambar . Pada Gambar 4.1 , a, b, dan c merupakan variabel-variabel untuk menyimpan data-data masukan untuk koefisien-koefisien dan konstanta pada persamaan kuadrat. D digunakan sebagai variabel untuk menyimpan harga diskriminan. Sedangkan x1, x2, dan x1x2 adalah variabel-variabel yang digunakan untuk menyimpan harga akar-akar persamaan kuadrat hasil perhitungan yang dilakukan.

• Masukkan koefisien-koefisien dan konstanta persamaan kuadrat a,b, dan c . Harga a tidak sama dengan nol.

1. Mulai

2. Baca data a,b,c

3. Hitung diskriminan persamaan D = b^2 – 4 x a x c

4. Cek harga diskriminan IF D > 0 Jika ya, hitung akar-akar persamaan X1 = ((-b) + SQRT(D)) / (2 x a)

X2 = ((-b) - SQRT(D)) / (2 x a) 5. Lanjutkan ke langkah-5

6. Cek harga diskriminan IF D = 0

(33)

X1X2 = ( -b ) / (2 x a)

7. Cetak hasil X1 dan X2 atau X12 atau pesan (“akar-akar imajiner”) 8. Selesai

Gambar 3 . Flowchart menghitung akar-akar persamaan kuadrat.

Mulai

Baca

D = b2 – 4ac

D > 0

D = 0 X1 = ((-b) + SQRT(DISK)) /(2xa)

X2 = ((-b) - SQRT(DISK)) /(2xa)

X1X2 = (-b) / 2xa

Akar X12 X1, X2

(34)

BAB IV PEMBAHASAN

4.1. PEMBAHASAN

Suatu persoalan matematika dapat dkerjakan dalam beberapa metode namun memiliki hasil perhitungan yang sama. Dan dalam hal ini percobaan penyelesaian matematika tersebut diselesaikan dengan perhitungan algoritma dan program computer.

Kebutuhan system dari visualisasi dari Algoritma penentuan bilangan ganjil dan bilangan genap dan penentuan nilai diskriminan adalah :

1. Visualisasi menampilkan definisi umum dari algoritma menghitung diskriminan matriks dan penentuan bilangan ganjil dan bilangan genap.

2. Visualisasi menampilkan flowchart dari algoritma menghitung diskriminan matriks dan penentuan bilangan ganjil dan bilangan genap.

3. Setiap bagian dari flowchart akan berubah warna menjadi merah jika dituju.

4. User dapat memberikan input bil untuk divisualisasikan sebagai input dari flowchart.

5. Visualisasi hanya dapat menerima masukan berupa angka saja, selain angka, flowchart tidak dapat berjalan ke state selanjutnya. 6. Visualisasi hanya menerima bilangan bulat positif saja, karena

dalam algoritma faktorial dijelaskan bahwa nilai diskriminan adalah hasil dari perhitungan rumus yang telah ditentukan dan output bilangan genap apabila hasil dari bilangan di bagi 2 = 0 dan output bilangan ganjil apabila hasil bagi bilangan dibagi 2 =1

(35)

genap dan nilai diskriminan.

8. Visualisasi bisa mencetak tampilan lewat printer

4.2. Pengujian

Pengujian Algoritma Determinan dan Akar Persamaan kuadrat X2 + 6X + 9 = 0

Dari persamaan tersebut, diketahui harga koefisien A = 1, koefisien B = 6, dan konstanta C = 9. Harga diskriminan pada persamaan tersebut adalah sebagai berikut :

Diskriminan = B2 – 4ac = 62 – 4 x 1 x 9 = 36 – 36 = 0

Karena diskriminan persamaan kuadrat berharga nol, maka harga akar-akar persamaannya adalah dua bilangan real yang sama yaitu sebagai berikut :

X1X2 = = = -3

Jadi harga akar-akar persamaan kuadrat tersebut adalah X1X2 = -3

(36)

Gambar 4 : pengujian program penentuan diskriminan

Pengujian penentuan bilangan ganjil dan bilangan genap Input : 39

39 / 2 = 19, sisa bilangan tidak habis di bagi 2, 39 = bilangan ganjil

Gambar 5: pengujian penentuan bilangan ganjil dan bilangan genap

Dari pembahasan pada bab – bab sebelumnya dapat ditarik kesimpulan : 1. Langkah langkah dalam pembuatan perangkat lunak alat

bantu logika dan algoritma adalah Analisa, Desain, Implementasi dan Pengujian.

1

6

X1 = 3

X2 = 3

9

X1 =3 X2 =3

Input :

Hasil : 39

(37)

2. Yang mempengaruhi baik buruknya visualisasi adalah resolusi visualisasi, struktur data yang divisualisasikan, interaktifitas dari visualisasi, dan Computational infrastructure.

(38)

BAB V

KESIMPULAN DAN SARAN

5.1. KESIMPULAN

Berdasarkan hasil penelitian yang telah dilakukan maka dapat disimpulkan :

1. Penyelesaian permasalahan matematika yang dilakukan dengan menggunakan metode algoritma dapat dikerjakan dengan lebih cepat dan menarik.

2. Perintah-perintah dalam ahasa pemrograman C++ untuk penyelesaian permasalahan matematika berdasarkan penelitian dapat efektif dengan pemilihan algoritma yang tepat.

5.2. SARAN

1. Penelitian yang dilakukan hanya sebatas beberapa permasalahan saja, sementara banyak sekali permasalahan yang dapat timbul dalam pengerjaan permasalahan matematika, sehingga diharapkan adanya pengembangan lebih lanjut sehingga aplikasi dan metode yang digunakan dapat menyelesaikan lebih banyak lagi permasalahan matematika.

(39)

DAFTAR PUSTAKA

Aiman, Muchammad, Open Source Programming dengan Bahasa C/C++,

2009,

Anton Howard. Aljabar Linear Elementer, 1988. Edisi kelima. Penerbit Erlangga.

http://www.belajar-sendiri.com/2009/10/definisi-dan-pengertian-algoritma.html

Knuth, E Donald.E. 1997, The Art of Computer Programming. Addison Wesley

Kristianto, Andri. 2003, Algoritma dan Pemrograman C++. Penerbit Graha Ilmu.

Munir, Rinaldi. 1999. Algoritma dan pemrograman dalam bahasa Pascal dan C. Bandung Informatika.

Ngoen, Thompson Susabda. 2004. Pengantar Algoritma dengan Bahasa C.

Jakarta, Penerbit Salemba Grafika.

Wikipedia bahasa Indonesia, ensiklopedia bebas. 2004. Sistem Persamaan Kuadrat. http://www. wikipedia.org/wiki/Persamaan_kuadrat

(40)

LAMPIRAN

#include <algorithm>

#include "Penghitungan Diskriminan matriks dan penentuan Bilangan Ganjil dan Bilangan Genap"

using namespace std;

static void initMinorMatriks (const Matriks &mat, Matriks &minor, int x, int y) {

double *data_minor = minor.dataMatriks(); int kolom_min = minor.jumlahKolom();

double *data_mat = mat.dataMatriks(); int baris_mat = mat.jumlahBaris(); int kolom_mat = mat.jumlahKolom();

for (int matY = 0, minY = 0; matY < baris_mat; ++matY) { if (matY != y) {

for (int matX = 0, minX = 0; matX < kolom_mat; ++matX) { if (matX != x) {

data_minor[minY * kolom_min + minX] = data_mat[matY * kolom_mat + matX];

++minX; }

}

++minY; }

(41)

Matriks::Matriks ()

(42)

dataInternal = 0; }

}

Matriks::Matriks (const Matriks &mat) {

baris = mat.jumlahBaris(); kolom = mat.jumlahKolom(); delete [] dataInternal; dataInternal = 0;

if (mat.matriksKosong() == false) { double *tmp = mat.dataMatriks();

dataInternal = new double[baris * kolom]; copy(tmp, tmp + (baris * kolom), dataInternal); }

}

Matriks::~Matriks () {

baris = kolom = 0; delete [] dataInternal; dataInternal = 0; }

double *Matriks::dataMatriks () const {

(43)

bool Matriks::isiElemen (int x, int y, double val) const {

if (matriksKosong() == false && x < kolom && y < baris) { dataInternal[y * kolom + x] = val;

return true; }

return false; }

double Matriks::elemen (int x, int y, bool *ok) const {

double hasil = 0.0;

if (matriksKosong() == false && x < kolom && y < baris) { hasil = dataInternal[y * kolom + x];

if (ok) { *ok = true; }

} else { if (ok) { *ok = false; }

}

return hasil; }

(44)

{

if (this == &mat) { return *this; }

this->baris = mat.jumlahBaris(); this->kolom = mat.jumlahKolom(); delete [] this->dataInternal;

this->dataInternal = new double[baris * kolom];

copy(mat.dataMatriks(), mat.dataMatriks() + (baris * kolom), this->dataInternal);

return *this; }

Matriks &Matriks::operator+ (const Matriks &mat) const {

Matriks *hasil = new Matriks();

if (matriksKosong() == false && baris == mat.jumlahBaris() && kolom == mat.jumlahKolom()) {

Matriks tmp(baris, kolom);

double *tmp_ptr = tmp.dataMatriks(); double *mat_ptr = mat.dataMatriks();

for (int cnt = 0, max = baris * kolom; cnt < max; ++cnt) { tmp_ptr[cnt] = dataInternal[cnt] + mat_ptr[cnt]; }

(45)

return *hasil; }

Matriks &Matriks::operator- (const Matriks &mat) const {

Matriks *hasil = new Matriks();

if (matriksKosong() == false && baris == mat.jumlahBaris() && kolom == mat.jumlahKolom()) {

Matriks tmp(baris, kolom);

double *tmp_ptr = tmp.dataMatriks(); double *mat_ptr = mat.dataMatriks();

for (int cnt = 0, max = baris * kolom; cnt < max; ++cnt) { tmp_ptr[cnt] = dataInternal[cnt] - mat_ptr[cnt]; }

*hasil = tmp; }

return *hasil; }

Matriks &Matriks::operator* (double val) const {

Matriks *hasil = new Matriks();

(46)

double *tmp_ptr = tmp.dataMatriks();

for (int cnt = 0, max = baris * kolom; cnt < max; ++cnt) { tmp_ptr[cnt] = dataInternal[cnt] * val;

}

*hasil = tmp; }

return *hasil; }

Matriks &Matriks::operator* (const Matriks &mat) const {

Matriks *hasil = new Matriks();

if (matriksKosong() == false && kolom == mat.jumlahBaris()) { Matriks tmp(baris, mat.jumlahKolom());

double *tmp_ptr = tmp.dataMatriks(); double *mat_ptr = mat.dataMatriks(); int barisHasil = baris;

int kolomHasil = mat.jumlahKolom();

for (int y = 0; y < barisHasil; ++y) { for (int x = 0; x < kolomHasil; ++x) { double tmp_result = 0;

for (int c = 0; c < kolom; ++c) {

(47)

}

tmp_ptr[y * kolomHasil + x] = tmp_result; }

}

*hasil = tmp; }

return *hasil; }

Matriks &Matriks::transpos () const {

Matriks *hasil = new Matriks();

if (matriksKosong() == false && (baris > 1 || kolom > 1)) { Matriks tmp(kolom, baris);

double *tmp_ptr = tmp.dataMatriks();

for (int kol = 0; kol < kolom; ++kol) { for (int bar = 0; bar < baris; ++bar) {

tmp_ptr[kol * baris + bar] = dataInternal[bar * kolom + kol]; }

}

*hasil = tmp; }

(48)

Matriks &Matriks::invers () const {

Matriks *hasil = new Matriks();

if (matriksBujurSangkar() && kolom > 1) { double det = determinan();

if (kolom == 2) {

Matriks tmp(baris, kolom);

double *tmp_ptr = tmp.dataMatriks();

tmp_ptr[0] = dataInternal[3] / det; tmp_ptr[1] = -dataInternal[1] / det; tmp_ptr[2] = -dataInternal[2] / det; tmp_ptr[3] = dataInternal[0] / det; *hasil = tmp;

} else {

Matriks matKof = this->kofaktor(); double *kof_ptr;

matKof = matKof.transpos(); kof_ptr = matKof.dataMatriks(); for (int y = 0; y < baris; ++y) { for (int x = 0; x < kolom; ++x) {

kof_ptr[y * kolom + x] = kof_ptr[y * kolom + x] / det; }

}

(49)

}

return *hasil; }

Matriks &Matriks::kofaktor () const {

Matriks *hasil = new Matriks();

if (matriksBujurSangkar() && kolom > 2) { const double sign[2] = { 1.0, -1.0 }; Matriks kof(baris);

Matriks minor(baris - 1);

double *kof_ptr = kof.dataMatriks();

for (int y = 0, cnt = 0; y < baris; ++y) { for (int x = 0; x < kolom; ++x) {

initMinorMatriks(*this, minor, x, y);

kof_ptr[y * kolom + x] = minor.determinan() * sign[cnt % 2]; ++cnt;

} }

*hasil = kof;

}

return *hasil; }

(50)

double hasil = 0.0;

Matriks &Matriks::transpos () const {

Matriks *hasil = new Matriks();

(51)

Matriks tmp(kolom, baris);

double *tmp_ptr = tmp.dataMatriks();

for (int kol = 0; kol < kolom; ++kol) { for (int bar = 0; bar < baris; ++bar) {

tmp_ptr[kol * baris + bar] = dataInternal[bar * kolom + kol]; }

}

*hasil = tmp; }

return *hasil; }

Matriks &Matriks::invers () const {

Matriks *hasil = new Matriks();

if (matriksBujurSangkar() && kolom > 1) { double det = determinan();

if (kolom == 2) {

Matriks tmp(baris, kolom);

double *tmp_ptr = tmp.dataMatriks();

(52)

*hasil = tmp; } else {

Matriks matKof = this->kofaktor(); double *kof_ptr;

matKof = matKof.transpos(); kof_ptr = matKof.dataMatriks(); for (int y = 0; y < baris; ++y) { for (int x = 0; x < kolom; ++x) {

kof_ptr[y * kolom + x] = kof_ptr[y * kolom + x] / det; }

}

*hasil = matKof; }

}

return *hasil; }

Matriks &Matriks::kofaktor () const {

Matriks *hasil = new Matriks();

if (matriksBujurSangkar() && kolom > 2) { const double sign[2] = { 1.0, -1.0 }; Matriks kof(baris);

Matriks minor(baris - 1);

double *kof_ptr = kof.dataMatriks();

(53)

for (int x = 0; x < kolom; ++x) {

initMinorMatriks(*this, minor, x, y);

kof_ptr[y * kolom + x] = minor.determinan() * sign[cnt % 2]; ++cnt;

} }

*hasil = kof; }

return *hasil; }

double Matriks::determinan (bool *ok) const {

double hasil = 0.0;

if (matriksBujurSangkar() && kolom > 1) { if (kolom == 2) {

hasil = (dataInternal[0] * dataInternal[3]) - (dataInternal[1] * dataInternal[2]);

} else {

const double sign[2] = { 1.0, -1.0 }; Matriks minor(baris - 1);

double tmp_det;

for (int kol = 0; kol < kolom; ++kol) { initMinorMatriks(*this, minor, kol, 0); tmp_det = minor.determinan();

(54)

} if (ok) { *ok = true; }

} else {

return hasil; }

Gambar

Gambar1. Flowchart penentuan nilai diskriminan
Gambar 2. Flowchart Penentuan bilangan ganjil dan genap
Gambar 3 . Flowchart menghitung akar-akar persamaan kuadrat.
Gambar 5: pengujian penentuan bilangan ganjil dan bilangan genap

Referensi

Dokumen terkait

pada sub bab pokok bahasan Sistem Persamaan Linier Dua Variabel. Sedangkan siklus kedua berupa pembelajaran sub bab pokok bahasan Sistem Persamaan linier Tiga Variabel dengan

Pelaksanaan tindakan mulai dari studi awal hingga siklus demi siklus melalui penggunaan kertas warna sebagai alat bantu visualisasi konsep himpunan dan diagram venn untuk

Hasil penelitian dengan menggunakan Ubin Aljabar sebagai alat bantu dan desain pembelajaran ini dapat (a) membantu siswa dalam proses pembelajaran penyimbolan persamaan kuadrat

Sehingga jika dihurufkan, maka nilai tersebut termasuk kategori A (sangat baik). Materi sifat-sifat bilangan bentuk akar diberikan pada pelaksanaan tahap 2. Mahasiswa

Algoritma kompresi diperlukan untuk mengecilkan ukuran bit di dalam suatu file, sehingga menghasilkan ukuran yang lebih kecil dan Rice Code adalah algoritma yang digunakan

Siswa perlu didorong untuk berpikir bahwa sesuatu itu multi- dimensi sehingga mereka dapat melihat banyak kemungkinan penyelesaian untuk suatu masalah, misalnya

Manfaat dari penelitian ini adalah diharapkan dapat menghasilkan sistem yang mampu memprediksi pergerakan nilai saham perusahaan, sehingga dihasilkan

Sedangkan media aktif adalah suatu bantuan yang dilakukan oleh orang atau individu pada saat siswa melakukan gerakan guling belakang sehingga terjadi dorongan dan mendapatkan