Bu sayfadaki yazılar
Sayfanın metni
Sayfa 59
0; REPEAT UNTIL 1>20
Bu işlemin sonucunda şöyle bir çıktı elde ederiz:
05101520
20 değeri basıldıktan sonra I değişkeni 25 değerine ulaştığından Boolean İfadesi TRUE verir. Böylece işlem sonuçlanır. REPEAT döngüsünün en önemli özelliği döngü içerisindeki komutların işlenmesinden sonra Boolean ifadesine bakılmasıdır. Bunun anlamı döngü içerisinde bulunan komutların en azından bir kere işleneceğidir. REPEAT...UNTIL ve WHILE...DO yapılarını kullanarak bir örnek verelim.
WHİLE 1: <-20 DO BEĞİN WRITE6:4); END
Bu program çalıştığında çıktı alamayız. Programın sonunda I değişkeninin değeri 21 olur.
Mazı; REPEAT UNTIL 1>20 21
Bu program çalıştığında çıktı olarak 21 değerini alıyoruz ve programın sonunda i değişkeninin değeri 26 oluyor. İki örneğimizdeki fark; birincisinde Boolean İfadesi'nin döngüye başlanmadan evvel kontrol edilmesinden, ikincisinde ise döngünün sonunda kontrol edilmesinden kaynaklanıyor. REPEAT...UNTIL yapısına örnek program ve açıklaması için program döküm ekine bakınız.
DÖNGÜ ÇEŞİTLERİNİN KARŞILAŞTIRILMASI
PASCAL'da üç çeşit döngü çeşidi bulunuyor: FOR, WHILE, REPEAT. Döngünün ne kadar devam edeceğini biliyorsak FOR döngüsünü kullanabiliriz. WHILE ve REPEAT döngüleri şarta bağlı döngülerdir. WHILE döngüsü Boolean İfadesi TRUE sonuç verdiği sürece devam eder. REPEAT döngüsü ise Boolean İfadesi FALSE sonuç verdiği sürece devam eder. Boolean İfadesi'nde değişiklik yaparak REPEAT ile WHILE döngülerini yeniden diğeri şeklinde yazabilirsiniz. REPEAT döngüsü en azından bir kere çalışır. Buna karşın FOR ve WHILE döngüleri hiç yapılmayabilir. KONTROL KOMUTLARI
Şimdiye kadar görmüş olduğumuz tüm örneklerdeki komutlar yazıldıkları sıra içinde işlenmekteydiler. Eğer bazı komutların sadece belirli durumlarda çalışmasını istersek ne yapacağız? Kontrol komutları ile Boolean İfadesi'nin neticesine bağlı olarak bazı komutların çalışmasını, diğerlerinin ise atlanmasını sağlayabiliriz.
TEK YÖNLÜ SEÇİM
Tek yönlü seçimde belirli bir komutu işlemeden evvel Boolean İfadesi kontrol edilir. Boolean İfadesi TRUE verirse komut işlenir, eğer sonuç FALSE olursa kontrol bir sonraki komuta geçer.
Bunu sağlayan IF komutudur. Komutun yapısını görelim:
IF Boolean İfadesi THEN komut
Programın akışı IF komutuna geldiğinde Boolean İfadesi işlenir. Sonuç FALSE ise bir alttaki komuta geçilir, sonuç TRUE ise THEN'den sonraki komut işlenir. THEN'den sonra bir komut işlemek yerine BEGIN...END ile çevrilmiş komutlar grubu da işleyebilirsiniz. IF komutunu örneklerle görelim:
IF sayı- 1 THEN WRITECBIR') IF 1<20 THEN BEGİN END
İKİ YÖNLÜ SEÇİM
Tek yönlü seçimde Boolean İfadesi'nin neticesine bağlı olarak komut ya işlenir ya da işlenmez. İki yönlü seçimde ise Boolean İfade'nin TRUE olması halinde bir komut, FALSE olması halinde ise diğer komut işlenir. Boolean İfadesi'nin neticesi ne olursa olsun komutlardan birisi muhakkak işlenir.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 58
Örneğimizin başında I değişkenine sıfır değeri vermiştik. Eğer I değişkenine 21 değeri verseydik döngü hiç yapılamadan kontrol bir sonraki komuta aktarılırdı. Yani Boolean İfadesi ilk işlendiğinde FALSE sonucu verirse, döngü içindeki komutlar hiç tekrarlanmadan kontrol bir sonraki komuta geçerdi. İsterseniz şimdi de yeni öğrendiğimiz döngü komutunu bir örnek programda kullanalım. Programımızda kaç gün içinde 1.000.000 TL kazanacağımızı hesaplayacağız. Fakat parayı kazanmamız bir kurala bağlı: İlk gün 1 TL, ikinci gün 2 TL, üçüncü gün 4 TL, dördüncü gün 8 TL yani her gün bir evvelki günün iki katı para kazanacağız. Programımızda döngünün ne kadar süreceğini bilemediğimiz için de, WHILE komutunu kullanacağız. Zaten programımızın amacı da, döngünün ne kadar süreceğini bulmak. Program ve açıklaması için program döküm ekine bakınız. Döngülerin en çok kullanıldığı yerlerin başında bir seri bilginin okunup işlenmesi gelir. Mesela bir işyerindeki işçilerin maaşlarının, çalışma sürelerinin okunması gibi. Burada karşımıza bilgilerin okunmasına ne zaman son vereceğimiz problemi çıkıyor. İlk çözüm olarak bilgilerin okunmasına başlamadan evvel, okuyacağımız ilk değeri veri sayısı olarak alıp, bir FOR döngüsü ile verileri okuyabiliriz. Bu tip veri girişine şöyle bir örnek verelim:
5 3.87 9.65 5.61 7.76 9.19
5, bize okunacak beş veri olduğunu bildiriyor. Bu yöntem programınızın başında kaç veri işleyeceğinizi biliyorsanız işe yarayabilir. Fakat işleyeceğiniz veri sayısını bilmiyorsanız ikinci yöntemimizi uygulamamız gerekecek. İkinci yöntem olarak istediğimiz özel bir değer kullanacağız. Veri okumamız bu özel veri girilinceye kadar devam edecek. İstediğimiz özel değeri saptarken, bu değerin isteyeceğimiz değerlerle karışmaması için çok dikkatli olup, seçimimizi buna göre yapmalıyız. Mesela 0 ile 100 arasında veriler işleyeceğiz. Bu durumda 999 özel değer olarak çok uygun bir seçim olur. Özel değer okuyarak veri işlediğimiz durumlarda yapacağımız işlerin genel hali şöyledir: İlk veriyi okuyun WHILE (Okuduğunuz değer özel değere eşit değilse) DO Verileri işleyen komutlar Bir sonraki veriyi okuyun
Bu genel duruma bir örnek verelim. Örneğimizde özel değer 999.0 ve kullanılan değişkenlerin daha evvel tanımlandığını kabul ediyoruz;
x<> 99.0 DO BEĞIN END
İlk READ komutu ilk veriyi okuyor. WHILE komutu bunun özel değer olup olmadığını kontrol ediyor. Eğer özel değer değilse okunan değer işlenip yeni bir değer okunuyor, bu işlemler okunan değer özel değere eşit olana kadar devam ediyor. Okunan değer özel değere eşit olduğunda, döngü sona erip kontrol bir sonraki komuta aktarılıyor. Bu tür kullanımda okunan değerin işlenmeden evvel daima kontrol edildiğine dikkat edelim, böylece eğer okuduğumuz değer özel değerse bunu işleme sokmuyoruz. Son olarak WHILE...DO komutunu kullanırken nelere dikkat etmemiz gerektiğine değinelim. Döngüye girmeden evvel döngüye kontrol edecek değişkenin ilk olarak bir değere eşitlenmesi gerekir. Döngü içinde döngüyü kontrol eden değişkenin değerini her seferinde değiştirmezseniz hiçbir zaman döngünün içinden çıkamazsınız. FOR döngüsünü kullanırken döngüye kontrol eden değişkenin artışı birden farklı ise bunun yerine WHILE döngüsü kullanabilirsiniz. Örneğin:
1<- 100 DO BEĞİN 5; WRITE6:3); END
REPEAT...UNTIL
PASCAL'da döngüleri kontrol etmek için bir başka döngü çeşidimiz daha var. Bu döngü çeşidinin yapısını inceleyelim:
REPEAT komut;
komut UNTIL Boolean İfadesi
REPEAT...UNTIL yapısı içinde döngüye giren komutların başına BE-GIN...END eklememiz gerekmiyor, çünkü REPEAT...UNTIL yapısı bu görevi yerine getiriyor. REPEAT...UNTIL arasındaki komutlar işlendikten sonra Boolean İfadesi işlenir. Eğer bu ifade TRUE ve-
59 rirse döngü sona erer ve programın akışı bir sonraki komuta geçer. Boolcan İfadesi FALSE verirse döngü tekrarlanır. Bu yapıyı bir örnekle görelim: