Web Hosting

Pemrograman Lazarus-freepascal: Membuat kalkulator sederhana

Bismillahirrahmanirrahim.

project1project1Aplikasi kalkulator cocok dijadikan latihan memrogram. Kita menemukannya pada banyak tutorial. Dalam 1 aplikasi kalkulator, terdapat banyak elemen GUI dan semuanya harus dihubungkan. Oleh karena itu cocok sekali untuk latihan. Sekarang saya akan membuat sebuah kalkulator sederhana memakai komponen objek TEdit dan teknik casting (konversi tipe data) dari String ke Integer (dan sebaliknya). Semoga tulisan ini bermanfaat.

Spesifikasi Sistem



  • Ubuntu 13.10

  • Lazarus IDE 1.0.14

  • GTK2 (64bit)


Daftar Objek



  • TForm

  • TEdit

  • IntToStr (SysUtils)

  • StrToInt (SysUtils)

  • "try" dan "except"

  • TButton


Daftar Method



  • .text() (untuk menampilkan dan mengambil teks)

  • Alignment (untuk mengatur perataan teks)


Arah Tulisan Ini


Aplikasi kalkulator yang akan dibuat bukan seperti yang ditemukan di Windows atau Ubuntu. Itu terlampau canggih. Saya hanya akan membuat satu jendela dengan empat baris elemen. Tiap-tiapnya adalah operasi +, -, x, dan /. Jadi, hanya ada 4 operasi matematika. Masukan dimasukkan pada satu TEdit dan satu TEdit di sebelahnya. Di tengahnya ada tombol. Jika tombol diklik, maka dua masukan dioperasikan lalu dikeluarkan hasilnya pada TEdit keluaran. Ini gambarnya.

 ssnya



Kode dan Object Property


Seperti biasa, hanya dua berkas yang perlu diperhatikan.

Unit1.lfm / Form1 (object property) << Untuk meletakkan captionnya label dan posisi di Form designer.


object Form1: TForm1
Left = 36
Height = 400
Top = 175
Width = 320
Caption = 'Lazcalc'
ClientHeight = 400
ClientWidth = 320
OnCreate = FormCreate
LCLVersion = '1.0.14.0'
object input_tambah1: TEdit
Left = 12
Height = 27
Top = 48
Width = 113
Alignment = taCenter
TabOrder = 0
Text = '0'
end
object input_kurang1: TEdit
Left = 12
Height = 27
Top = 104
Width = 113
Alignment = taCenter
TabOrder = 1
Text = '0'
end
object input_kali1: TEdit
Left = 12
Height = 27
Top = 156
Width = 113
Alignment = taCenter
TabOrder = 2
Text = '0'
end
object input_bagi1: TEdit
Left = 12
Height = 27
Top = 208
Width = 113
Alignment = taCenter
TabOrder = 3
Text = '0'
end
object input_tambah2: TEdit
Left = 184
Height = 27
Top = 48
Width = 113
Alignment = taCenter
TabOrder = 4
Text = '0'
end
object input_kurang2: TEdit
Left = 184
Height = 27
Top = 104
Width = 113
Alignment = taCenter
TabOrder = 5
Text = '0'
end
object input_kali2: TEdit
Left = 184
Height = 27
Top = 156
Width = 113
Alignment = taCenter
TabOrder = 6
Text = '0'
end
object input_bagi2: TEdit
Left = 184
Height = 27
Top = 208
Width = 113
Alignment = taCenter
TabOrder = 7
Text = '0'
end
object output_hasil: TEdit
Left = 23
Height = 27
Top = 296
Width = 258
Alignment = taCenter
TabOrder = 8
Text = 'output_hasil'
end
object Label1: TLabel
Left = 136
Height = 18
Top = 272
Width = 34
Caption = 'Hasil'
ParentColor = False
end
object tambahkan: TButton
Left = 136
Height = 27
Top = 48
Width = 40
Caption = '+'
OnClick = tambahkanClick
TabOrder = 9
end
object kurangkan: TButton
Left = 136
Height = 27
Top = 104
Width = 40
Caption = '-'
OnClick = kurangkanClick
TabOrder = 10
end
object kalikan: TButton
Left = 136
Height = 27
Top = 156
Width = 40
Caption = 'x'
OnClick = kalikanClick
TabOrder = 11
end
object bagikan: TButton
Left = 136
Height = 27
Top = 208
Width = 40
Caption = '/'
OnClick = bagikanClick
TabOrder = 12
end
end

Unit1.pas (Kode)



unit Unit1;
{$mode objfpc}{$H+}interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;type{ TForm1 }

TForm1 = class(TForm)
tambahkan: TButton;
kurangkan: TButton;
kalikan: TButton;
bagikan: TButton;
input_tambah1: TEdit;
input_kurang1: TEdit;
input_kali1: TEdit;
input_bagi1: TEdit;
input_tambah2: TEdit;
input_kurang2: TEdit;
input_kali2: TEdit;
input_bagi2: TEdit;
output_hasil: TEdit;
Label1: TLabel;
procedure bagikanClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure kalikanClick(Sender: TObject);
procedure kurangkanClick(Sender: TObject);
procedure tambahkanClick(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }
// http://stackoverflow.com/questions/9979843/how-can-i-accept-only-numbers-from-an-edit-control
procedure TForm1.tambahkanClick(Sender: TObject);
begin
try
begin
output_hasil.Text:=inttostr(strtoint(input_tambah1.Text) + strtoint(input_tambah2.Text));
end;
except
showmessage('pastikan input angka!');
end;
end;

procedure TForm1.kurangkanClick(Sender: TObject);
begin
try
begin
output_hasil.Text:=inttostr(strtoint(input_kurang1.Text) - strtoint(input_kurang2.Text));
end;
except
showmessage('pastikan input angka!');
end;

end;

procedure TForm1.kalikanClick(Sender: TObject);
begin
try
begin
output_hasil.Text:=inttostr(strtoint(input_kali1.Text) * strtoint(input_kali2.Text));
end;
except
showmessage('pastikan input angka!');
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.bagikanClick(Sender: TObject);
begin
try
begin
output_hasil.Text:=inttostr(strtoint(input_bagi1.Text) div strtoint(input_bagi2.Text));
end; // menggunakan div akan mengabaikan angka dibelakang desimal, karena ini integer standar bukan real
except
showmessage('pastikan input angka!');
end;
end;

end.


Lazarus dan Kode


Screenshot from 2014-03-04 11:58:45

Hasil


Demikianlah kalkulator kita.

Screenshot from 2014-03-04 09:51:12



Analisis


Yang perlu diperhatikan dalam program kalkulator ini hanya kode-kode dalam Unit1.pas saja. Di dalamnya ada pembuatan objek TEdit sebagai penerima input kita, ada validasi supaya hanya angka yang boleh dimasukkan menggunakan try dan except, dan ada fungsi untuk mengonversi String menjadi Interger dan sebaliknya untuk dioperasikan. Perlu diperhatikan juga bahwa logika yang dipakai dalam fungsi saya sangatlah sederhana. Masukan diambil sebagai String, dikonversikan ke Integer, dioperasikan dengan sesama int dari masukan satunya, lalu hasilnya (int) dikonversikan lagi ke String, lalu String ini dikeluarkan ke objek TEdit. Hanya itu alur logikanya. Saya hanya mengingatkan pula bahwa konversi antartipe data itu namanya casting.

Unit1.pas


Ada beberapa hal yang penting di sini dari segi nonmatematik seperti exception/pengecualian masukan berupa HANYA ANGKA dan perataan teks di dalam TEdit. Ada hal penting juga dalam perkara matematisnya karena kita memerlukan casting di sana.

1. Validasi Masukan


Kita harus tahu dulu bahwa sifat TEdit itu menerima semua teks baik angka maupun huruf. Bagaimana agar ia hanya bisa menerima angka saja? Jawabannya adalah exception. Ini dilakukan dengan cara try "melakukan fungsi strtoint", jika gagal secara otomatis runtime akan melakukan except, supaya terlihat keren maka setelah "try" maka tambahkan "except" lalu outputya apa misal "showmessage('Kang, cuma boleh angka tau!');". Hasilnya adalah button hanya menerima masukan berupa angka saja sedangkan semua yang bukan angka tidak dihitung. Berikut kodenya.







begin
try
begin
output_hasil.Text:=inttostr(strtoint(input_kali1.Text) * strtoint(input_kali2.Text));
end;
except
showmessage('pastikan input angka!');
end;
end;

2. Perataan (Alignment) Teks


Penting diperhatikan perilaku TEdit dalam menerima klik dan menempatkan kursor pada awal masukan dari pengguna. Jenis perilaku paling umum (ada di semua OS) adalah ketika diklik pada posisi mana pun di sebuah Edit, maka kursor langsung berkedip-kedip pada sisi paling ujung kiri pada karakter urutan pertama. Ada kalanya perilaku sebuah Edit tidak wajar, entah peletakan kursornya tidak pada karakter urutan pertama, entah kursornya berubah bentuk, entah yang lainnya. Kita berusaha memberikan user experience yang terbaik dengan memberinya posisi kursor default pada karakter pertama tetapi pada perataan tengah untuk semua TEdit. Mengapa? Karena ini program kalkulator yang hanya menerima masukan 1 angka per TEdit. Sehingga perlu dibuat antarmuka yang sekali lihat sudah jelas angka-angkanya. Posisi perataan tengah adalah yang terbaik untuk hal ini. Hal ini (perataan tengah) dicapai dengan parameter atau dari object inspector langsung "Aligment := taCenter" pada method Alignment pada objek TEdit. Mudah, bukan? Berikut contohnya:









input_tambah1.Aligment:=taCenter;



Pilihan perataan dalam Lazarus ada banyak. Selain taCenter, ada lagi taLeftJustify (mode paling umum dipakai), taRightJustify, dan seterusnya. Lihat saja di object inspector Anda.

3. Fungsi


Sebenarnya yang berhubungan langsung dengan aplikasi kalkulator ini selaku pemroses matematis hanyalah satu per satu fungsinya. Berikut keempat baris kodenya masing-masing.










1

2

3

4

5

6

7


casting_a := casting_a + casting_b;


casting_a := casting_a - casting_b;


casting_a := casting_a * casting_b;


casting_a := casting_a div casting_b;


Untuk pembagian, "div" bilangan bulat, "/" untuk real, "mod" sisa pembagian.



Hanya saja, untuk melakukan operasi matematika pada program ini, tidak sesederhana itu. Harus ada mekanisme pengambilan masukan ke dalam Integer dahulu. Itu pun masih diperlukan casting ke int karena data yang diambil langsung dari TEdit selalu bertipe string. Setelah casting, barulah fungsi matematis di atas bisa beraksi.

4. Casting


Konversi dari tipe data int ke string dan sebaliknya terjadi di sini. Berikut dua baris kodenya.










1

2

casting_a := StrtoInt(nilai_a); //String ke Int

nilai_a := IntToStr(casting_a); //Int ke string



Baris pertama itu casting dari string ke integer. Jadi, variabel nilai_a yang isinya berasal dari TEdit diubah jadi int lalu dimasukkan isinya ke casting_a. Variabel casting_a memang sengaja dibuat String. Baris kedua itu casting dari int ke string yaitu dikembalikan ke tipe data semula. Tujuannya untuk mengeluarkan data ke TEdit kembali.

Kesimpulan



  1. Casting dari int ke String bisa dilakukan dengan bentuk umum Objek_string := IntToStr(Objek_int);.

  2. Casting dari String ke int bisa dilakukan dengan bentuk umum objek_int := strtoInt(Objek_String);.

  3. Amankan masukan untuk menjamin hanya angka yang masuk dilakukan dengan membuat exception.


Unduh Kode Sumber


Program kali ini bernama Lazcalc. Silakan unduh kode sumbernya dan bukalah pada Lazarus IDE Anda.

Referensi


http://stackoverflow.com/questions/9979843/how-can-i-accept-only-numbers-from-an-edit-control

http://stackoverflow.com/questions/3211771/how-to-convert-int-to-qstring

http://malsasa.wordpress.com/2013/12/11/pemrograman-qt-12-kalkulator-sederhana-dengan-qlineedit-dan-casting-qstring-to-int/?relatedposts_exclude=2604
Previous
Next Post »

3 komentar

Click here for komentar
Dio Affriza
admin
March 5, 2014 at 2:58 PM ×

Tes, 123.
Akhirnya bisa komentar

Reply
avatar
ridwanbejo
admin
March 6, 2014 at 2:34 PM ×

Assalamualaikum Mas Dio, mengenai syntax higlighternya. Bagaimana kalau gunakan [code language="pascal"] kode kodenya [/code] ?

Atau sudah menggunakan ? agar lebih mudah terbaca :)

Reply
avatar
Dio Affriza
admin
March 6, 2014 at 4:15 PM ×

Wa'alaikumussalam Kang ridwanbejo, terimakasih sarannya nanti saya coba sarannya. Saya kebingungan dengan Wordpress ini dengan fiturnya, apakah ada syntax-highlighternya.

Reply
avatar