Archive | Programming RSS feed for this section

Program Struktur Data dan Pengurutannya dalam C

18 May

Berikut saya akan memberikan contoh program struktur data dan pengurutannya dalam bahasa C.Saya mempelajari ini waktu di semester 1 di Universitas Indonesia. Silakan dicek:


#include <stdio.h> // Standard Library

typedef struct data_mahasiswa // Pembuatan alias
{
 // Di bawah ini adalah pendefinisian struct data_mahasiwa berupa variabel-variabel yang dibutuhkan
 char Nama [100];
 char Alamat [100];
 char NPM [100];
 char Fakultas [100];
 char Prodi [100];
} mahasiswa; // Alias yang dibuat bernama mahasiswa

void pengurutan (mahasiswa data [], int ukuran); // Fungsi untuk mengurutkan struktur data

int main () // Fungsi utama yang wajib ada
{
 mahasiswa mhs [100]; // Struktur data mahasiswa bernama mhs
 int jumlah; // Variabel untuk menampung benyaknya struktur data yang diinginkan
 int loop; // Variabel looping

 printf ("***Program Struktur Data***");

 while (jumlah <= 0)
 {
 printf ("\n\nMasukkan jumlah data yang ingin dimasukkan: "); // Memerintahkan User
 scanf ("%d", &jumlah); // Menerima input banyaknya struktur data yang diinginkan
 }

 // Di bawah ini adalah looping setelah banyaknya struktur data telah diketahui
 for (loop =0; loop < jumlah; loop++)
 {
 printf ("\nMahasiswa %d\n", loop+1);

 printf ("Nama: ");
 getchar();
 gets (mhs [loop].Nama);
 printf ("Alamat: ");
 gets (mhs [loop].Alamat);
 printf ("NPM: ");
 gets (mhs [loop].NPM);
 printf ("Fakultas: ");
 gets (mhs [loop].Fakultas);
 printf ("Program Studi: ");
 gets (mhs [loop].Prodi);
 }

 pengurutan (mhs, jumlah); // Memanggil fungsi pengurutan struktur data

 // Di bawah ini adalah Output program
 for (loop =0; loop < jumlah; loop++)
 {
 printf ("\nMahasiswa %d\n", loop +1);

 printf ("Nama: ");
 printf ("%s", mhs [loop].Nama);
 printf ("\nAlamat: ");
 printf ("%s", mhs [loop].Alamat);
 printf ("\nNPM: ");
 printf ("%s", mhs [loop].NPM);
 printf ("\nFakultas: ");
 printf ("%s", mhs [loop].Fakultas);
 printf ("\nProgram Studi: ");
 printf ("%s",mhs [loop].Prodi);
 }

getchar ();
 getchar ();
 return 0; // Program sukses
}

// Di bawah ini adalah pendefinisian fungsi pengurutan
void pengurutan (mahasiswa data [], int ukuran)
{
 int i;
 int j;
 mahasiswa temp;
 int min;

 for (i = 0; i < ukuran; i++)
 {
 min = i;
 for (j = i; j < ukuran; j++)
 {
 if ((strcmp ((data + min)-> NPM,(data + j) -> NPM)) > 0)
 min = j;
 }
 temp = data [i];
 data [i] = data [min];
 data [min] = temp;
 }
}

Bagaimana reaksi anda? Ayo dicoba code-nya dan silakan dicoba buat sendiri.

Pengantar Sistem Digital

18 May

a. Sistem Digital

Sistem digital adalah suatu sistem yang melakukan semua pengolahan / pengoperasian maupun penyimpanannya  dilakukan dalam binary digit.

b. BCD

Binary coded decimal adalah sistem pengkodean bilangan desimal yang metodenya mirip dengan bilangan biner biasa; hanya saja dalam proses konversi, setiap simbol dari bilangan desimal dikonversi satu per satu, bukan secara keseluruhan seperti konversi bilangan desimal ke biner biasa. Hal ini lebih bertujuan untuk “menyeimbangkan” antara kurang fasihnya manusia pada umumnya untuk melakukan proses konversi dari desimal ke biner -dan- keterbatasan komputer yang hanya bisa mengolah bilangan biner.

c. Gerbang NAND merupakan gerbang universal

Gerbang NAND merupakan gerbang universal berarti gerbang NAND dapat menggantikan fungsi gerbang-gerbang logika yang lainnya dengan cara memanipulasi / mengkombinasi gerbang NAND dengan gerbang lainnya.

d. Datapath

Datapath adalah kumpulan dari beberapa memory sementara dan functional unit, seperti Arithmatic and logic unit (ALU) dan shift unit, yang melakukan operasi pemrosesan data.

e. Control Unit

Control unit adalah salah satu bagian dari CPU yang bertugas untuk memberikan arahan / kendali / control terhadap operasi yang dilakukan di bagian ALU (Arithmetic Logical Unit) yang ada di dalam CPU tersebut. Output dari Control Unit akanmengatur aktivitas di bagian lainnya dari perangkat CPU tersebut.

Palindrom in C Programming

18 May

Palindrom merupakan sebuah kata, dimana huruf dari depan kebelakang dan dari belakang kedepan sama contoh : nababan, masam, kodok.

Fungsi void palindrom(char s[]) yang mengecek apakah suatu kata palindrom atau bukan. Jika terbukti palindrom, print output “Palindrom”, jika tidak “Bukan Palindrom”


#include<stdio.h>

void palindrom( char s[ ] )
{
int beda=0, maju, mundur;
for( mundur=0; s[mundur]!='\0'; mundur++ ) {
for( maju=0; maju<(mundur/2); maju++ ) {
if( s[maju] != s[--mundur] ) { beda++; break;
}
}

printf(" =>%s Palindrom\n",beda?"Bukan":"");
}

int main() {
char string[20];
printf(" Masukkan kata : ");
gets( string );
palindrom( string );
getchar();
return 0;
}

Perbedaan utama stack dan queue

18 May

Perbedaan utama stack dan queue adalah :

Stack memakai sistem LIFO atau last in first out (yang pertama masuk akan keluar terakhir, begitu pula yang terakhir masuk akan keluar pertama kali) yang apabila kita mengahapus/ keluar data, maka data yang terakhirlah yang akan terhapus/ keluar terlebih dahulu.

Sementara queue memakai siste FIFO atau first in first out (yang pertama masuk akan keluar pertama, begitu pula yang masuk terakhir akan keluar terakhir) yang apabila kita menghapus / mengeluarkan data, maka data yang pertamalah yang akan terhapus/ keluar terdahulu dan data yang terakhir akan terhapus/ keluar terakhir.

Guna counter pada rangkaian stack dan queue adalah untuk menentukan apakah stack atau queue tersebut sudah full atau masih empty.

 

Algoritma MCSS (Maximum Contiguous Subsequence Sum)

18 May

Algoritma MCSS (Maximum Contiguous Subsequence Sum) adalah algoritma yang digunakan untuk mencari hasil penjumlahan terbesar dari subsequence (bagian sebuah urutan angka). Jika urutan tersebut berisi bilangan negatif seluruhnya maka MCSS adalah 0.

Masukan yang dibutuhkan untuk algoritma tersebut adalah sembarang bilangan real dengan syarat memiliki tipe data yang sama sehingga dapat dioperasikan dan dibandingkan.

Apakah keluaran yang dihasilkan algoritma MCSS dan tuliskan syarat khusus
yang pasti dipenuhi (jika ada) untuk keluarannya?

Keluaran yang dihasilkan adalah sebuah bilangan yang merupakan jumlah terbesar dari bagian sebuah urutan angka dengan syarat jika urutan tersebut berisi bilangan negatif seluruhnya maka MCSS adalah 0.

Jika diberikan masukan secara berurut 1, -3, 4, -2, -1, lalu 6, apakah keluarannya dan mengapa demikian?

MCSS-nya adalah 7, karena setelah kita membandingkan jumlah setiap subsequence didapat hasil MCSS-nya 7. Selain itu jika kita menggunakan salah satu algoritma MCSS juga akan didapatkan hasil 7.

Apakah harus selalu bilangan-bilangan bulat yang menjadi masukan untuk algoritma MCSS?

Tidak harus. Masukan untuk algoritma tersebut bisa sembarang bilangan real asalkan memiliki tipe data yang sama sehingga dapat dioperasikan dan dibandingkan. Contohnya masukan bertipe Double , Float, dan Long.

Mungkinkah algoritma MCSS menghasilkan bilangan negatif dan mengapamungkin/tidak mungkin?

Tidak mungkin, karena MCSS akan memilih empty sequence (yaitu 0) yang nilainya lebih besar daripada memilih salah satu angka dari urutan tersebut (bilangan negatif) sebagai hasil MCSS.

Jika keluaran yang dihasilkan algoritma MCSS adalah 0, masukan seperti apakah yang membuatnya seperti itu?

Masukan yang mungkin adalah jika seluruh urutan berisi bilangan negatif atau memang setelah dilakukan perhitungan didapat hasil MCSS adalah 0, karena jumlah nilai positif sama dengan jumlah nilai negatif yang saling meniadakan.

mcss brute force mcss quadratic mcss recursive mcss1 recursive mcss2 linear mcss linear mcss 2

Metode pengolahan data Decision Tree, Naïve Bayes, dan Decision Table

10 May

Dalam mengolah data dan mengambil kesimpulan dari kumpulan data, kita dapat menggunakan 3 metode, yakni decision tree, naïve bayes, dan decision table. Dan pada kesempatan kali ini, saya akan menjelaskan ketiganya. Mudah-mudahan semuanya paham dan mengerti konsep serta cara penggunaannya. Oke berikut:

a)      Decision Tree Learning (DTL)

DTL merupakan sebuah metode dalam memprediksi/menyimpulkan nilai sebuah item/kategori/kelas berdasarkan nilai-nilai item lain yang mempengaruhinya. Secara gampangnya menghasilkan kesimpulan terhadap sebuah item berdasarkan nilai beberapa input item. Dalam prosesnya, DTL menggunakan sebuah decision tree untuk mengambil kesimpulan.

contoh decision tree

Decision Tree di atas menunjukkan alur pengambilan keputusan seseorang berdasarkan beberapa nilai beberapa item yaitu ParentsVisiting, Weather, dan Money. Pada leaf node merupakan tindakan yang akan diambil sementara inner node menunjukkan item yang menjadi input dan tiap cabang dari inner node mewakili dari salah satu nilai yang dimiliki oleh inner node tersebut.

b) Naïve Bayes

Naïve Bayes merupakan sebuah metode pengkalisifikasian yang bersifat probabilistik berdasarkan teorema Bayes dengan anggapan  fitur-fitur yang mempengaruhi pengklasifikasian tidak saling bergantung/berhubungan, sehingga ada tidaknya salah satu atau beberapa fitur tidak mempengaruhi fitur lainnya.

c) Decision Tables

Secara umum, decision tables mirip dengan konsep decision tree yaitu sama-sama menggunakan konsep dasar if-else atau switch-case. Bedanya hanya pada bagian representasi dimana decision table menggunakan tabel.

Tabel akan dibagi menjadi 2 bagian besar, yaitu kondis dan aksi. Kondisi merupakan hal-hal yang mempengaruhi pengambilan keputusan sementara aksi merupakan keputusan yang diambil. Keputusan yang diambil bisa lebih dari 1.

contoh decision table

 

Find real square roots in ML

3 May

Okay, pada kesempatan kali ini kita akan membahas functional programming ML untuk mencari nilai akar real dari sebuah bilangan a. Berikut adalah code-nya, silakan dilihat dan dipelajari:

fun findroot (a, x, acc) =
   let val nextx = (a/x + x) / 2.0
   in if abs (x-nextx) < acc*x then nextx
      else findroot (a, nextx, acc)
   end;

fun sqroot a = findroot (a, 1.0, 1.0E~10);

Kita dapat juga menulis fungsi tersebut dengan menggunakan metode seperti di bawah ini, sehingga terdapat fungsi di dalam fungsi. Check this out!

fun sqroot a =
   let val acc = 1.0E~10
   fun findroot x =
      let val nextx = (a/x + x) / 2.0
      in if abs (x-nextx) < acc*x then nextx
         else findroot nextx
      end
  in findroot 1.0 end;

Ya cukup sekian kodingan untuk menemukan atau find nilai real dari operasi akar atau square roots dari sebuah bilangan a di atas. Semoga dapat memberikan inspirasi bagi semua. Silakan mencoba, terima kasih.

Make Fibonacci Numbers in ML

3 May

Hari ini kita akan mencoba membuat fungsi yang akan mengembalikan fibonacci number atau urutan angka yang merupakan barisan fibonacci. Implementasi fungsi pada ML yang akan dibahas di bawah ini terbagi 2, menjadi fibonacci versi naive dan fibonacci yang lebih cepat atau faster.

Okay, berikut implementasi fibonacci versi naive:

fun fib 0 = 0
   |fib 1 = 1
   |fib n = fib(n-2) + fib(n-1);

Selanjutnya kita akan definisikan fungsi fibonacci yang implementasinya akan lebih cepat daripada fungsi di atas:

fun fib(prev, curr:int) = (curr, prev+curr);

fun fibpair (n) =
   if n=1 then (0,1)
   else fib(fibpair(n-1));

Fungsi di atas akan lebih cepat daripada sebelumnya walaupun kita tidak memakai tail recursive. Silakan mencoba dan berkreasi sendiri dengan fungsi fibonacci yang saya paparkan, terima kasih.

Artificial Intelligence

2 May

Banyak orang yang mungkin belum mengetahui apa itu artificial intelligence atau AI. Dan pada kesempatan kali ini saya akan sedikit menjelaskan mengenai AI ini.

Berikut adalah beberapa pengertian AI menurut beberapa ahli:

The exciting new eff ort to make computers think …
machines with minds, in the full and literal sense.”
(Haugeland, 1985)

The study of mental faculties through the use of
computational models.” (Charniak & McDermott, 1985)

The art of creating machines that perform functions that
require intelligence when performed by people.”

(Kurzweil,1990)

AI… is concerned with intelligent behaviour in artifacts.”
(Nilsson, 1998)

Dari banyak pendapat tersebut dapat kita sarikan, bahwa AI atau artificial intelligence atau kecerdasan buatan adalah sebuah upaya untuk membuat sebuah mesin atau komputer atau apapun untuk berpikir layaknya manusia, sehingga pada akhirnya dapat membantu setiap pekerjaan manusia.

Function to return last element of a list in ML

1 May

Pada kesempatan kali ini, saya akan menjelaskan fungsi yang dapat kita pakai dalam fungsional programming menggunakan Meta Language atau ML. Fungsi ini berfungsi untuk mengembalikan elemen terakhir dari sebuah list. Berikut fungsinya:

fun lastElement [] = raise Empty
   |lastElement [x] = x
   |lastElement (_::xs) = lastElement xs;

Fungsi di atas adalah fungsi yang diharapkan karena akan memaksimumkan penggunaan pattern matching.

Perhatikan bahwa [x] ekuivalen dengan x::[].

Empty merupakan exception standar yang berguna untuk menandakan bahwa tidak ada elemen dalam list, yang juga digunakan oleh fungsi built-in hd dan tl. Boleh juga membuat exception sendiri.

Selain fungsi di atas, kita juga dapat membuat sebuah fungsi lain seperti di bawah ini yang memiliki fungsi yang sama, yaitu untuk mengembalikan elemen terakhir pada sebuah list:

fun lastElement [] = raise Empty
   |lastElement (x::xs) = if null xs then x else lastElement xs;

Perhatikan bahwa null xs ekuivalen dengan xs = [] atau xs = nil.

Okay, cukup sekian pembahasan fungsi untuk me-return atau mengembalikan last element dari sebuah list di functional programming menggunakan Meta Language atau ML. Semoga dapat membantu semuanya…