Transformasi Fourier

Di bawah ini adalah contoh penggunaan transformasi fourier pada pengolahan citra. Bahasa pemrograman yang dipakai adalah Visual Basic 6.0. Tampilan awal program terlihat seperti gambar di bawah ini :

Hasil dari transformasi fourier dan phase magnitude dapat di lihat pada gambar di bawah ini :

Listing program seperti di bawah ini:

Dim n1, n2, m1, m2 As Single
Dim x(400, 400) As Single
Dim xr(400, 400), xi(400, 400) As Single
Private Sub Command1_Click()
n1 = 0
For i = 1 To Picture1.ScaleWidth Step 15
n1 = n1 + 1
n2 = 0
For j = 1 To Picture1.ScaleHeight Step 15
warna = Picture1.Point(i, j)
r = warna And RGB(255, 0, 0)
g = Int((warna And RGB(0, 255, 0)) / 256)
b = Int(Int((warna And RGB(0, 0, 255)) / 256) / 256)
n2 = n2 + 1
x(n1, n2) = Int((r + g + b) / 3)
Picture1.PSet (i, j), RGB(x(n1, n2), x(n1, n2), x(n1, n2))
Next j
Next i
Picture2.ScaleHeight = m1 + 1
Picture2.ScaleWidth = m2 + 1
Picture3.ScaleHeight = m1 + 1
Picture3.ScaleWidth = m2 + 1
For i = 1 To m1
For j = 1 To m2
fr = 0
fi = 0
For k1 = 1 To n1
For k2 = 1 To n2
fr = fr + x(k1, k2) * Cos(6.28 * (i * k1 / m1 + j * k2 / m2))
fi = fi - x(k1, k2) * Sin(6.28 * (i * k1 / m1 + j * k2 / m2))
Next k2
Next k1
w = 255 * Abs(fr) / (n1 * n2)
Picture2.Line (i - 0.5, j - 0.5)-(i + 0.5, j + 0.5), RGB(w, w, w), BF
w = 255 * Abs(fi) / (n1 * n2)
Picture3.Line (i - 0.5, j - 0.5)-(i + 0.5, j + 0.5), RGB(w, w, w), BF
xr(i, j) = fr
xi(i, j) = fi
Next j
Next i
End Sub

Private Sub Command2_Click()
Dim xa(100, 100), xg(100, 100) As Single
Picture4.ScaleHeight = m1 + 1
Picture4.ScaleWidth = m2 + 1
Picture5.ScaleHeight = m1 + 1
Picture5.ScaleWidth = m2 + 1
xam = 0
xgm = 0
For i = 1 To m1
For j = 1 To m2
xa(i, j) = (xr(i, j) ^ 2 + xi(i, j) ^ 2) ^ 0.5
xg(i, j) = xi(i, j) / xr(i, j)
If xa(i, j) > xam Then xam = xa(i, j)
If Abs(xg(i, j)) > xgm Then xgm = Abs(xg(i, j))
Next j
Next i
For i = 1 To m1
For j = 1 To m2
w = Int(256 * xa(i, j) / xam)
Picture4.Line (i - 0.5, j - 0.5)-(i + 0.5, j + 0.5), RGB(w, w, w), BF
w = Int(256 * Abs(xg(i, j)) / xgm)
Picture5.Line (i - 0.5, j - 0.5)-(i + 0.5, j + 0.5), RGB(w, w, w), BF
Next j
Next i
End Sub

Private Sub Command3_Click()
Unload Me
End Sub
Private Sub Form_Load()
m1 = 16: m2 = 16
End Sub

1 Comment

Filed under All About IT & Telecom

Belajar Bahasa C

Setelah ngerti apa itu bahasa c sekarang kita akan mencoba beberapa program sederhana yang dibuat dengan bahasa c. Program yang akan dibahas kalo ini adalah program yang akan menampilkan beberapa fungsi-fungsi dasar dalam bahasa c. Program akan menampilkan contoh pemakaian fungsi :

  1. variabel.
  2. pengambilan keputusan (if-else).
  3. perulangan (looping).
  4. fungsi.
  5. deret (array).
  6. string.
  7. pointer.
  8. struktur.

Tampilan awal dari program  :

Main Window

Listing program :

#include <stdio.h>
#define size 100

struct barang{float jml;float harga;};
struct data{char nama[size];struct barang nil;};
struct data bar[size];

void variabel(void);
void decision(void);
void looping(void);
void fungsi(void);
void deret(void);
void string(void);
void pointer(void);
void struktur(void);

int ganjil_call (int x){
 if(x%2==0)
 return (0);
 else
 return (1);
}

int go_crazy(int *p1, int *p2){
 int x = 5;
 int r, q = 7;
 r = 12;
 *p2 = *p1 * 2;
 p1 = &x;
 return *p1 * 3;
}

void tampil (int *i)
{
 int a;

 for (a=0;a<*i;a++)
 {
 printf ("Masukkan Nama Barang: ");
 fgets (bar[a].nama,sizeof bar[a].nama,stdin);
 fflush(stdin);

 printf("Masukkan Jumlah barang    : ");
 scanf_s("%f", &bar[a].nil.jml);
 fflush(stdin);

 printf("Masukkan Harga Barang     : ");
 scanf_s("%f", &bar[a].nil.harga);
 fflush(stdin);

 printf("\n");
 fflush(stdin);
 }

 for(a=0;a<*i;a++)
 {
 printf("%d. Nama Barang : %s", a+1, bar[a].nama);
 printf("   Total Harga : %g\n", bar[a].nil.jml*bar[a].nil.harga);

 printf("\n");
 }
}

void print_menu(){
 printf ("1.variabel \n");
 printf ("2.decision \n");
 printf ("3.looping \n");
 printf ("4.fungsi \n");
 printf ("5.array \n");
 printf ("6.string \n");
 printf ("7.pointer \n");
 printf ("8.struktur \n");
 }

void pilihan(){
 int pil;

 print_menu();
 printf ("pilih menu yang di inginkan : ");
 scanf_s ("%d",&pil);
 puts ("");

 if (pil==1){
 variabel();
 }
 else if (pil==2){
 decision();
 }
 else if (pil==3){
 looping();
 }
 else if (pil==4){
 fungsi();
 }
 else if (pil==5){
 deret();
 }
 else if (pil==6){
 string();
 }
 else if (pil==7){
 pointer();
 }
 else if (pil==8){
 struktur();
 }
 else{
 pilihan();
 }
}

void variabel(){
 float harga;
 int jml;

 printf ("masukkan jumlah barang :");
 scanf_s ("%d",&jml);
 printf ("masukkan harga :");
 scanf_s ("%f",&harga);

 harga=(jml*harga*10/100)+jml*harga;

 printf ("harga barang+ppn :%.2f\n\n",harga);
}

void decision(){
 int validasi=1;   //validasi diinisialisaikan=1
 char opr;
 float bil1,bil2,hsl;

 printf ("Kalkulator Sederhana\n");
 printf ("Masukkan bilangan 1 :");
 scanf_s ("%f",&bil1);
 fflush(stdin);
 printf ("Masukkan bilangan 2 :");
 scanf_s ("%f",&bil2);
 fflush(stdin);
 printf ("Pilihan operasi\n");
 printf ("1.Penjumlahan\n");
 printf ("2.Pengurangan\n");
 printf ("3.Pembagian\n");
 printf ("4.Perkalian\n");
 printf ("Masukkan operasi yang anda inginkan :");
 scanf_s ("%c",&opr);

 if (opr == '1')
 hsl= bil1+bil2;
 else if (opr== '2')
 hsl= bil1-bil2;
 else if (opr == '3')
 hsl= bil1/bil2;
 else if (opr == '4')
 hsl= bil1*bil2;
 else
 validasi=0;

 if (validasi)
 printf ("Hasil operasi tsb adalah :%g\n",hsl);
 else
 printf ("Tidak Bisa Dihitung!!!!!.....\n");
}

void looping(){
 int n,total=0,bil;
 char pil='y';

 while(pil=='y'||pil=='Y'){
 fflush(stdin);
 printf ("masukkan bilangan yang akan di hitung : ");
 scanf_s ("%d",&bil);
 for( n = 1; n <= bil; n=n+1 )
 total=total+n;
 printf("jumlah bilangan triangular adalah :%d \n",total);
 fflush(stdin);
 printf ("ingin menghitung lagi : ");
 scanf_s ("%c",&pil);
 }
}

void fungsi(){
 int m,n;

 printf ("Masukkan Sebuah Bilangan : ");
 scanf_s ("%d",&n);

 m=ganjil_call(n);
 if (m==0)
 printf ("Bilangan Tersebut Genap\n");
 else
 printf ("Bilangan Tersebut Ganjil\n");
}

void deret(){
 char cocok [size];
 int i, x, jumkar;

 fflush(stdin);
 printf("Masukkan sebuah kalimat : ");
 fgets(cocok, sizeof cocok, stdin);

 for(i='A'; i<='z'; i++)
 {
 jumkar = 0;
 for(x=0; x<size; x++)
 {
 if (i==cocok [x])
 {
 jumkar++;
 }
 }
 if(jumkar!=0)
 printf("%c = %d\n", i, jumkar);

 }

 puts("");

}

void string(){
 char kal[size];
 int i=0;

 fflush(stdin);
 printf("Masukkan kalimat yg akan di sandikan :");
 fgets(kal, sizeof kal, stdin);

 while(kal[i] != '\n')
 {
 if(kal[i] >= 'A' && kal[i] <'Z')
 kal[i] = kal[i] + 1;
 else if (kal[i] == 'Z')
 kal[i] = 'A';
 else if (kal[i] >= 'a' && kal[i] <'z')
 kal[i] = kal[i] + 1;
 else if (kal[i] == 'z')
 kal[i] = 'a';
 else if (kal[i] >= '1' && kal[i] < '9')
 kal[i] = kal[i] + 1;
 else if (kal[i] == '9')
 kal[i] = '1';
 else if (kal[i] == ' ')
 kal[i] = ' ';

 i++;
 }

 printf("Kalimat setelah disandikan adalah :\n");
 printf("%s\n", kal);

}

void pointer(){
 int r, q = 7;
 int *ptr1 = &q;
 int *ptr2 = &q;

 r = go_crazy(ptr1, ptr2);

 printf("q = %d, r = %d, *ptr1 = %d, *ptr2 = %d\n", q, r,*ptr1,*ptr2);
 ptr2 = &r;
 go_crazy(ptr2, ptr1);
 printf("q = %d, r = %d, *ptr1 = %d, *ptr2 = %d\n", q, r,*ptr1,*ptr2);

}

void struktur(){
 int n;

 printf("Masukkan Banyak Barang : ");
 scanf_s("%d", &n);
 printf("\n");
 fflush(stdin);

 tampil(&n);
}

main(){
 pilihan();
}

Program dalam bahasa c akan selalu di awali dengan pemanggilan preprocessor / pustaka seperti terlihat pada baris di bawah ini :

#include <stdio.h>

Pada program ini pustaka yang gunakan adalah stdio.h yang merupakan pustaka untuk menangani i/0 pada c.

Setelah pemanggilan pustaka/preprocessor langkah selanjutnya adalah mendefinisikan fungsi dan variabel yang dibutuhkan untuk menjalankan program, pada contoh di bawah ini akan dituliskan konstanta dan prototipe dari fungsi yang digunakan :

#define size 100 //konstanta

struct barang{float jml;float harga;}; //variabel global
struct data{char nama[size];struct barang nil;};
struct data bar[size];

void variabel(void); //prototipe fungsi
void decision(void);
void looping(void);
void fungsi(void);
void deret(void);
void string(void);
void pointer(void);
void struktur(void);

Seperti terlihat pada contoh program di atas, fungsi utama akan memanggil fungsi-fungsi yang telah dideklarasikan pada awal program. Variabel global yang bertipe data struct dimaksudkan untuk memudahkan pemanggilan pada fungsi-fungsi di bawahnya. Hal ini dikarenakan tipe data struct biasanya dipanggil pada fungsi yang berbeda-beda untuk memudahkan penulisan program.

Fungsi selanjutnya adalah print_menu() dan pilihan(). Kedua fungsi ini berfungsi untuk menampilkan daftar menu seperti tampak pada tampilan di atas dan memanggil fungsi sesuai pilihan dari pengguna. Pada fungsi ini diperlihatkan contoh penggunaan deciscion dan function call.

void print_menu(){
 printf ("1.variabel \n");
 printf ("2.decision \n");
 printf ("3.looping \n");
 printf ("4.fungsi \n");
 printf ("5.array \n");
 printf ("6.string \n");
 printf ("7.pointer \n");
 printf ("8.struktur \n");
 }

void pilihan(){
 int pil;

 print_menu(); //function call
 printf ("pilih menu yang di inginkan : ");
 scanf_s ("%d",&pil);
 puts ("");

 if (pil==1){  //decision
 variabel();
 }
 else if (pil==2){
 decision();
 }
 else if (pil==3){
 looping();
 }
 else if (pil==4){
 fungsi();
 }
 else if (pil==5){
 deret();
 }
 else if (pil==6){
 string();
 }
 else if (pil==7){
 pointer();
 }
 else if (pil==8){
 struktur();
 }
 else{
 pilihan();  //function call rekursif
 }
}

Fungsi yang akan dibahas selanjutnya adalah fungsi untuk melakukan perulangan, pada program ini menggunakan perulangan for dan perulangan do-while. Contoh program dan hasil tampilan dapat dilihat di bawah ini :

void looping(){
 int n,total=0,bil;
 char pil='y';

 while(pil=='y'||pil=='Y'){
 fflush(stdin);
 printf ("masukkan bilangan yang akan di hitung : ");
 scanf_s ("%d",&bil);
 for( n = 1; n <= bil; n=n+1 )
 total=total+n;
 printf("jumlah bilangan triangular adalah :%d \n",total);
 fflush(stdin);
 printf ("ingin menghitung lagi : ");
 scanf_s ("%c",&pil);
 }
}

Program di atas adalah program untuk menghitung bilangan triangular, pada program di atas perulangan for digunakan untuk proses penghitungan bilangan triangular dan perulangan do-while untuk pilihan akan menghitung lagi atau tidak. Untuk tampilan program terlihat seperti di bawah ini :

LoopingThe last dari posting hari ini adalah contoh dari penggunaan array, struktur dan pointer yang akan di jadikan sebuah fungsi yang berisi tiga fungsi tersebut. Di bawah ini adalah contoh program dan tampilan dari fungsi struktur :

void struktur(){
 int n;

 printf("Masukkan Banyak Barang : ");
 scanf_s("%d", &n);
 printf("\n");
 fflush(stdin);

 tampil(&n);
}

void tampil (int *i)
{
 int a;

 for (a=0;a<*i;a++)
 {
 printf ("Masukkan Nama Barang: ");
 fgets (bar[a].nama,sizeof bar[a].nama,stdin);
 fflush(stdin);

 printf("Masukkan Jumlah barang    : ");
 scanf_s("%f", &bar[a].nil.jml);
 fflush(stdin);

 printf("Masukkan Harga Barang     : ");
 scanf_s("%f", &bar[a].nil.harga);
 fflush(stdin);

 printf("\n");
 fflush(stdin);
 }

 for(a=0;a<*i;a++)
 {
 printf("%d. Nama Barang : %s", a+1, bar[a].nama);
 printf("   Total Harga : %g\n", bar[a].nil.jml*bar[a].nil.harga);

 printf("\n");
 }
}
 

Pada program di atas terjadi penggunaan beberapa fungsi pada bahasa c, antara lain array (bar[a]), pointer (void tampil (int *i)) dan struktur (bar[a].nil.jml*bar[a].nil.harga). Pada program di atas juga terlihat penggunaan perulangan for. Untuk struct bar pendeklarasian variabel dapat dilihat pada variabel global di atas. Program di atas adalah program untuk menginputkan jumlah dan harga barang sesuai keinginan pengguna. Perulangan for akan berjalan selama nilai dari int *i belum terpenuhi. Nilai dari int *i diperoleh dari fungsi struktur dengan variabel n dan ditangkap pada fungsi tampil dengan variabel *i. Disini digunakan variabel bertipe pointer karena pada fungsi struktur yang dikirim adalah alamat dari variabel n. Data-data yang diinputkan oleh pengguna akan disimpan pada variabel bertipe struct yang telah dideklarasikan sebagai variabel global di atas. Hasil dari program adalah :

StrukturProgram di atas ditulis pada Microsoft™ Visual Studio 2008™ sehingga diperlukan sedikit penyesuaian jika akan dijalankan pada IDE atau kompiler lainnya. Penyesuaian yang paling utama adalah fungsi scanf_s() yang bukan merupakan ancii c sehingga jika akan digunakan pada IDE atau kompiler lain tidak akan dikenali maka jika akan menggunakan program pada IDE atau kompiler lain (Microsoft™ Visual Studio 6.0™, gcc) fungsi scanf_s () harus diganti dengan scanf ().

Cukup sekian tutorial sederhana kali ini, untuk fungsi-fungsi lainnya bisa dicoba sendiri pada pc pembaca-pembaca sekalian (setelah di kompile terlebih dahulu tentunya :D ), semoga bermanfaat.

Leave a Comment

Filed under All About IT & Telecom

Bahasa C

Dibuat pada tahun 1972 oleh Dennis Ritchie untuk Sistem Operasi Unix di Bell Telephone Laboratories.Meskipun C dibuat untuk memprogram sistem dan jaringan komputer namun bahasa ini juga sering digunakan dalam mengembangkan software aplikasi. C juga banyak dipakai oleh berbagai jenis platform sistem operasi dan arsitektur komputer, bahkan terdapat beberepa compiler yang sangat populer telah tersedia. C secara luar biasa mempengaruhi bahasa populer lainnya, terutama C++ yang merupakan extensi dari C.

Bahasa C terdiri dari bermacam-macam versi, 3 versi yang paling popoler adalah :

C K&R
Pada tahun 1978, Dennis Ritchie dan Brian Kernighan menerbitkan edisi pertama dari buku yang berjudul The C Programming Language. Buku ini hingga sekarang diakui sebagai kitab suci bahasa C dan merupakan referensi utama seorang pemrogram yang ingin mengetahui tentang bahasa C, terutama karena begitu lengkapnya cakupan buku ini tentang bahasa C dan mudahnya program yang dicontohkan dalam buku ini.Versi bahasa C yang ditampilkan dalam buku ini kemudian dikenal dalam kalangan pemrogram sebagai C K&R. Pada buku The C Programming Language edisi kedua kemudian melingkupi ANSI C yang diperkenalkan belakangan.

ANSI C & ISO C
Pada perkembangannya, muncul versi-versi C lain yang pada akhirnya membuat kebingungan di kalangan pemrogram. Karena itu, pada tahun 1983, American National Standards Institute (ANSI) membuat sebuah komite untuk membuat sebuah versi standar dari bahasa C. Setelah melalui proses yang panjang dan sengit, pada tahun 1989, telah berhasil disahkan standar yang dinamakan ANSI X3.159-1989, versi ini seringkali dinamakan ANSI C, atau kadang-kadang C89.

Pada 1990, versi ANSI C diadopsi oleh Organization for Standardization (ISO) dengan sedikit perubahan dengan nama ISO/IEC 9899:1990. Versi ini seringkali dinamakan ISO C atau C90. Karena versi ANSI C dan ISO C hanya memiliki sedikit perbedaan, pemanggilan C90 dan C89 merujuk pada bahasa yang sama.

C99
Versi C99 dibuat oleh ISO C pada tahun 1999. Versi ini dimaksudkan terutama untuk memperbanyak dukungan kepada pemrograman berorientasi objek, terutama setelah C++, yang dibuat berdasarkan bahasa ini mendapat tempat yang istimewa di kalangan pemrogram

Satu hal yang tidak dapat dipisahkan dengan bahasa C adalah pustaka (library).  Pustaka (library),  adalah kumpulan fungsi-fungsi yang terkandung dalam satu file,  setiap file pustaka mempunyai satu Header file yang menyimpan cetak biru dari fungsi-fungsi yang terkandung dalam file pustaka.

Bahasa C seringkali dipakai untuk membuat file-file pustaka yang menyimpan fungsi-fungsi tertentu, dikarenakan C dapat dikompile menjadi bahasa mesin yang sangat cepat dan kecil ukurannya, kemudian bahasa pemrograman lain seperti Python yang akan menciptakan antar-muka dari fungsi-fungsi yang dikandungnya.
Pustaka yang paling sering dipakai adalah Pustaka Standar C, yang berisi fungsi-fungsi standar yang berasal dari ANSI C. Pustaka standar ini sekarang telah terkandung dalam hampir setiap kompiler C yang dipakai.

Berikut ini adalah contoh program sederhana yang akan mencetak kalimat “Hello, World!” dengan menggunakan pustaka stdio.h (ANSI C) :

#include <stdio.h>
int main(void) {
printf("Hello, World!\n");
return 0;
}

Leave a Comment

Filed under Uncategorized

Orientasi Mahasiswa Baru 1

Kenang-kenangan PraOMB 2008, selamat menikmati ;) .

Korban keganasan sie disiplin :D .

Makan siang rame-rame.

Perasaan baru kemaren di gituin, lah sekarang udah di suruh ngerjain TA :D .

4 Comments

Filed under Uncategorized

Serba-Serbi Sidang TA

Sedikit sisi lain sidang tugas akhir yang sempat terekam di kamera olympus e20p pinjaman dari bidang 3. Selamat menikmati ;) .

Eko Susanto, begitu nama makhluk yang ada dalam foto di atas, salah satu anggota tim robot berkaki krci tahun kemarin, sedang menunggu panggilan masuk ruang sidang tugas akhir. Foto di ambil di lab jurusan elektronika lantai 2 gedung D4 di hari pertama sidang TA.

Catatan Foto :
olympus e20p jadul | f/2,4 | 1/640
lab elektronika D4 lt 2 | 22 juli 2008 | 15:35

Berturut-turut dari kiri, Eka Arista, Isyana Wisnu Wardani, Bagus Lumaksono. Foto di ambil setelah mereka selesai presentasi tugas akhir. Sibuk dengan kegiatan masing-masing. Eka ‘Ucil’, laporan ke………… , Isyana ‘tante’ laporan ke Bagus ‘empes’, ucil gak menarik untuk di bahas. Bagian yang menampilkan Bagus dan Isyana yang menarik untuk di bahas, entah di sengaja atau tidak (tapi saya yakin pasti sengaja :) ) , pembimbingnya si Bagus adalah pengujinya Isyana, siapa dia???tidak lain dan tidak bukan adalah Sritrusta Sukaridhoto, ST (kenal kan siapa dia :D ). Ada lagi nilai lebih dari bagian foto Bagus sama Isyana, buat teman-teman yang tiap hari kumpul-kumpul bareng mereka pasti sudah tahu ada apa di antara mereka :D (peace buat Bagus sama Isyana). Kalau agak jelek harap maklum, foto di ambil dari lantai 3, sedangkan obyek berada di lantai 1, cahaya remang-remang habis maghrib, udah untung wajah-wajah mereka bisa terekam lumayan jelas.

Catatan Foto :
olympus e20p jadul | f/2,4 | 1/125

depan lab jarkom, obyek di depan lab telephony | 22 juli 2008 | 18:22

2 Comments

Filed under All About IT & Telecom, Jeprat-Jepret, Uncategorized