Delphi de şartlı çalışma ve blog kontrol işlemleri
Sohbet | Chat | Sohbet Odalari | Delphi
Â
If-then deyiminin kalıbı şöyledir.
If Åžart Then
begin
.
.
end
else //-> Şuanlık kullanmayacağız.
begin
.
.
end;
Örnek: Yazdığımız programda bir butona tıklanıldığında daha önce vediÄŸimiz ÅŸifrenin doÄŸru olup olmadığını söylesin. Åžifre abc123 olsun. Buton’umuz için yukarıda bulanan Standart sekmesinde OK yazan dikdörtgen ÅŸeklindeki butona tıklayın ve daha sonra baÅŸka hiç bir
yere tıklamadan direk formun üzerine tıklayın. Formun üzerinde bir buton oluştuğunu göreceksiniz. Bu butonun üzerine çift tıklayın, ve önünüze kod penceresi gelecektir.
procedure TForm1.Button1Click(Sender: TObject); //-> Buton1 tıklanıldığında buna ait olan kodlar çalışacak.
begin //-> Kodların yazılması için bunun yazılması şarttır. Kodların artık başladığını belirtir.
end; //-> Buna en yakın begin hangisiyse, o begin ile buradaki end arasındaki kodlar son bulmuş anmanıa gelir. Begin gibi bunun da yazılması gerekir.
end.//-> Buradaki end’le bundan önceki end’i karıştırmayın. Buradaki end ise programın tamamiyle son bulduÄŸunu anlatır. Ve dolaylı olarakta projede sadece ve sadece 1 kez ve en sonda olarak kullanılır. Birisinin sonu “;” ile birisinin sonuda “.” ile biter.
procedure TForm1.Button1Click(Sender: TObject);
begin //-> Başlıyoruz.
If Edit1.Text=’abc123′ then //-> EÄŸer ki Edit1′in içinde abc123 kelimesi yazıyorsa (veya içideki abc123′yazısına eÅŸitse) bunları iÅŸle…
ShowMessage(‘Åžifre DoÄŸru’); //-> Åžifre doÄŸruysa ekranımıza Åžifre DoÄŸru diye bir mesaj çıkartacak.
end; //-> Button1 tıklanıldığında yapacağı görevler böylece bitiyor.
end. //-> Program sonu.
Birde if-then kontrol’üne ek olarak bir deyim daha kullanılır bu da else‘dir anlamı: deÄŸilse? Sart gerçekleÅŸmez ise?
procedure TForm1.Button1Click(Sender: TObject);
begin //-> Başlıyoruz.
If Edit1.Text=’abc123′ then //-> EÄŸer ki Edit1′in içinde abc123 kelimesi yazıyorsa bunları iÅŸle…
ShowMessage(‘Åžifre DoÄŸru’) //-> Åžifre doÄŸruysa ekranımıza Åžifre DoÄŸru diye bir mesaj çıkartacak.
else -> //-> Ya edit’in içinde abc123 yazmıyorsa?
ShowMessage(‘Åžifre Yanlış’); //-> Bu sefer Åžifre Yanlış diye bir mesaj karşımıza gelecek.
end; //-> Button1 tıklanıldığında yapacağı görevler böylece bitiyor.
end. //-> Program sonu.
Burada dikkat etmemiz gereken birkaç nokta var onlara deyineyim. Her kod satırının sonuna ; gelmelidir. Bunun anlamı o satırdaki
kodun artık sona erdiğini ve dolaylı olarak bundan sonraki kodun işleyeceğini belirtir. Siz şimdi diyeceksiniz ki programa else
eklediÄŸiniz zaman ShowMessage(‘Åžifre DoÄŸru’); buradaki ; kalktı niye? Bunun anlamı demiÅŸtik ; o satırdaki kodları bitirir. Ama aslında burada kodlar bitmiyor halen devam ediyor. yani else If Edit1.Text=’abc123′ then komutunun bir parçası ve ondan önce bir ; gelirse bu onun iÅŸleyiÅŸini engelleyecektir. Bu da onun anlamsız yere yazıldığı anlama gelecektir, ve program hata verektir. Deyinmek istediÄŸim
baÅŸka bir konu ise Edit1.Text=’abc123′ burada abc123′ün başına ve sonuna niye ‘(tırnak) iÅŸareti geldiÄŸidir. Bunun sebebi abc123 bir string’dir yani bir karekter katarıdır. Mesela oraya ‘123′ yazsaydınız bu bir rakam deÄŸil sadece yazı olcaktı eÄŸer ki sadece 123
yazsaydınız rakam olacaktı. Niye böyle olmak zorunda olduÄŸunu soracak olursanız belli bir zaman geçtikten sonra, bunu sizde olmazsa olmaz olarak kabul edeceksiniz. Åžimdi gelelim bir sonraki blok-kontrol deyimine…
CASE OF DEYİMİ=HerÅŸeyi ile if-then deyimine benzemektedir. Bazı zamanlarda if-then‘den daha pratiktir. İç içe geçmiÅŸ bir if-then deyimleri gibidir. Fakat pratik olmasının sebebi defalarca if-then deyimini yazmak yerine bir tek komutla hepsini birden kontol
etmeği sağlamaktadır. Kalıbını yazmadım aşağıdaki örnekte açıkça belli.
Örnek: Bu programda ise bir butona tıkladığımızda edit1′de yazdığımız notumuzu, bizim zayıf orta gibi durumumuzu söyleyen bir mesaj çıkarsın…
procedure TForm1.Button1Click(Sender: TObject);
var //-> Değişken yazmak için kullanır. Bu koddan sonra değişkenler atanmaya başlar.
notum : integer; //-> notum isminde bir tamsayı(integer) deÄŸiÅŸkeni atıyoruz. Sadece içirisinde sayı tutabilir. Bu deÄŸiÅŸkenleri DeÄŸiÅŸik branÅŸlardaki öğretmenler gibi düşüne bilirsiniz. Hepside farklı farklı iÅŸler yapar. Ve biz ona göre onun dersinden faydalanırız. Mesela yukarıda bir string’den bahsetmiÅŸtim, bu da bir deÄŸiÅŸkendir ve içerisinde yazı katarları tutabilir. Ne istiyorsak ona göre deÄŸiÅŸkenimizi
doğru belirlemeliyiz. Aksi taktirde program abuk sabuk işlemler yapar veya hata verip çalışmaz bile. Neyse konuya dönelim.
begin //-> Başıyoruz.
notum:=strtoint(Edit1.Text); //-> İşte burası çok önemli buradaki notum’un sadece rakamları tutabileceÄŸini öğrenmiÅŸtik. Fakat edit’in içinde hiç bir zaman rakam deÄŸil yazı vardır. Edit içine yazdığınız rakamlar rakam gibi gözüksede aslında onlar bir rakam deÄŸildir daha
önce dediÄŸim gibi onlar bir string(karakter katarı)dir. İşte bundan dolayı notum bir rakam edit1.text(edit’in içindeki yazı) bir yazıdır. Bundan dolayı Edit1.text’in içinde yeralan rakamları gerçektende birer rakam yapmamız gerekiyor. Yukarıda olduÄŸu gibi Edit1.text’i iki parantez içine almak zorundayız (). Ve daha sonra bunu strtoint ile string’den integere çevirmeliyiz. Yani yazıdan rakama. Zaten adı üzerinde String to Integer, StrToInt olmuÅŸ. Bunu tam tersi ise IntToStr’dir. Peki bu ne demektir düşünün bakalım? Sonuç olarak birini
birine mutlaka benzetmeliyiz aksi takdirde elma ile armut toplanmaz. Program gereyi yazıdan karaktere döştürmek zorundayız.
Case notum of //-> notum deÄŸiÅŸkeni attakilerden hangisine eÅŸitse onu yap.
0..44: Showmessage(‘Zayıf Not Aldınız’); //-> EÄŸer Edit’de 0 ile 44 arası bir rakam girilmiÅŸse Zayıf not aldınız diye bir mesaj kutusu çıkar. DiÄŸerleride aynısı.
45..59: Showmessage(‘BaÅŸarısız Not Aldınız’);
60..69: Showmessage(‘Orta Not Aldınız’);
70..84: Showmessage(‘İyi Not Aldınız’);
85..100: Showmessage(‘Pekiyi Aldınız tebrikler!’);
else Showmessage(‘Lütfen 0 ile 100 arası bir not girin’); //-> EÄŸerki girdiÄŸiniz sayı 0 ile 100 arası deÄŸilse bu mesajı çıkartıyor. Zaten 0 ile 100 arası bir rakam olsaydı çoktan yukarıdakilerden biridi uygulamıştı.
end; //-> Case-of deyimini sonlandırıyor.
end; //-> Buton Basıldığında yapacak olduğu işler artık bitti. İlk baştaki begin ile en sondaki end; i yazmanıza gerek yok zaten Delphi onları kendisi koyar.
Yukarıda anlattığım gibi, eğer Case-of kullanmasaydık her durum için yani 0 ile 44, 45 ile 59 vs.. farklı farlı diyecektik ki şunla şunun arasındaysa şunları yap, şunla şunun arasındaysa şunları yap gibi bir çok if-then deyimi kullanacaktır. Başlangıçta pratik dememin
sebebi buydu. Örnekte maksimum ve minumum sayılar yanlış olabilir çünkü %85′inde yazılılardan 5 alıyorum da
söylemesi ayıp. 
Neyse bir sonda ki…
FOR TO DO DÖNGÜSÜ=İçerisindeki komutları istenilene göre tekrar tekrar işler. For-to-Do döngüsü kalıp olarak şöyle kullanılır.
For başlangıç değeri to bitiş değeri Do
Begin
.
.
end;
Örnek: Programı yazamaya başlamadan önce yukarıdaki Standart sekmesinden ListBox(Liste kutusu) isimli bileşeni formun üzerine yerleştirin. Bu arada bütün örneklerimizde bir tana buton kullanıyoruz. Her zamanki gibi onuda koymayı unutmayın. Bu programla
verilen sayılar arasındaki sayıları ListBox’a ekleyeceÄŸiz.
procedure TForm1.Button1Click(Sender: TObject);
var
ilkdeger : integer; //-> Tam sayı değişkenimiz.
begin //-> Başlıyoruz.
For ilkdeger:=1 to 20 do //-> 1′de baÅŸlayarak bu komutları 20 kere tekrarla eÄŸer i’ye 5 verseydik 5′den baÅŸlayacaktı yani bu olayı 15
kere tekrarlayacaktı. Burada bilmeniz gerek önemli bir husus daha var fakat bunu biraz sonra açıklayayım.
begin //-> Döngünün başlangıcı.
ListBox1.Items.Add(inttostr(ilkdeger)); -> Burayla uzun bir süre ilgileneyim. Bu komut “ilkdeger” integer’ını her seferinde her seferinde listbox(liste)a ekliyor. peki bu nasıl oluyor. Åžimdi programın en başına dönelim for-to-do döngüsünün baÅŸlagıç deÄŸerini 1 olarak
atamıştık. ve progarmımız geldi geldi geldi. İlk deÄŸerimiz o anlık 1′di ve Listbox’a 1′i yazdı. Daha sonra döngü tekrar baÅŸa döndü bu sefer baÅŸlangıcı (bir anlamıda sayaç deniliyor, counter) 1 arttıdı ve sayacımız 2 oldu ve geldi geldi geldi Bu sefer sayac yani ilkdeger 1 arttırılıp
2 olduÄŸu için Listbox’a bu sefer 2 eklendi. Bu böyle devam edecek. Fakat nereye kadar? Tabiki 20′ye kadar çünkü döngünün bitiÅŸ
noktasını 20 olarak daha önce belirlemiÅŸtik. Sonuç olarak program Listbox’a 1′den 20′ye kadar sıralayacak.
end; //-> For-to-Do döngüsü sona eriyor.
end; //-> Button1 tıklanıldığında yapacağı görevler böylece bitiyor.
end. //-> Program sonu.
Birde if-then döngüsündeki else gibi for-to-do ‘nun bir bir de break diye bir deyimi vardır. Bunu da Döngüyü önceden neler yapacağını ne kadar devam edeceÄŸini belirtiyorduk, bu komut ile istenilen zamanda daha dönünün iÅŸi bitmeden döngüden çıkılabilinir. Mesela
döngünün içine bir if-then şartı koyarsınız eğer döngü işlenirken bu şarta uyulduğu görüldüyse ve if-then şartının içinde de break
komutu yer alıyorsa o ÅŸarta baÄŸlı olarak döngü içerisinden çıkılmış olur. BaÅŸka bir konu ise For ilkdeger:=1 to 20 do ‘da ortada bulunan
to eÄŸer downto olarak deÄŸiÅŸtirilirse bu sefer geriye doÄŸru sayım yapılır. Mesela bu sefer 100′de 20′ye kadar sayar. Yani döngü 80 kere dönmüş olur.Gelelim bir sonraki döngüye…
WHILE DO DÖNGÜSÜ= Bu döngü aslında For-to-Do döngüsünün tıpatıp aynısıdır. Tek fark while-do döngüsünde önceden bir başlangıç
veya bitiş boktası gibi kısıtlamalar yoktur. Yani bu döngünün içerisindeki şart gerçekleşmediyi sürece döngü sonsuza kadar sürecektir. Kalıbı şöyledir.
While koÅŸul1 do
begin
.
.
if koÅŸul2 then
Break; //-> Yukarıda anlaşıldığı gibi, koşul2 gerçekleşmedikçe döngü devamlı dönecektir.
end;
Â


