Pascal

Geçen bölümde döngülere başlamış ve FOR...DO döngü çeşidini incelemiştik. Bu döngü, eğer tekrarın ne kadar yapılacağını biliyorsak kullanışlı olabilir. Tekrarın sayısını her zaman bilemeyiz ama hangi durumda tekrarın biteceğini bilebiliriz. Başka bir deyişle, döngümüzün belirli bir durumunun doğru olduğu sürece devam etmesini isteyebiliriz. Belirli durumumuz yanlış olduğunda ise döngü sona erer. Belirli durum ne olabilir? Mesela kullanıcıdan alınan cevap “evet” olduğu sürece döngüye devam eder, cevap “hayır” olarak verildiğinde döngüyü sona erdirerek bir sonraki komut gruplarına geçebiliriz. Döngü çeşitlerinden WHILE komutu döngüyü bu şekilde kontrol etmemizi sağlar. WHILE komutunun genel şekli şöyledir:

Boolean İfadesi DO Komut

Bilgisayar ilk önce Boolean İfadesi'ne bakar, eğer bu ifadenin değeri doğru (TRUE) ise DO'dan sonra gelen komutu işler. Döngü Boolean İfadesi'nin değeri TRUE olduğu sürece devam eder. Boolean İfadesi'nin değeri yanlış (FALSE) olduğu andan itibaren döngü sona erer ve kontrol bir alta geçer. Bu arada Boolean'ın sadece iki durumu olduğunu belirtelim: TRUE veya FALSE. Mesela DEVAM değişkenini VAR bildiriminde Boolean veri tipi olarak bildirdiyseniz, bu değişkeninize ya DEVAM:= TRUE veya DEVAM:= FALSE; şeklinde bir değer verebilirsiniz. Programınızda WHILE DEVAM DO I:=I+1; şeklinde bir komut kullandığınızda DEVAM değişkeninizin değeri TRUE olduğu sürece I değişkenimizin içeriği bir artar. FOR döngüsünde olduğu gibi, tekrarlanan tek bir komut olabileceği gibi, BEGIN...END bloğu içinde çoklu komutlar da olabilir. Şimdi WHILE...DO komutu ile ilgili olarak anlattıklarımızı birkaç örnekle inceleyelim. Örneklerimiz bir programın belirli bir bölümünü oluşturmakta. Örneklerde kullanılan değişkenlerin daha evvelden bildirildiğini kabul edeceğiz.

0)

WHİLE 1: < -20 DO
5;

Örneğimizde I:=I+5 komutu devamlı tekrarlanmakta ve bu komutun her tekrarlanışında I değişkeninin değeri 5 artmaktadır. Böylece I değişkeni sırayla 5, 10, 15, 20 ve 25 değerlerini alır. Komutun her tekrarlanışından evvel I değişkeninin değerinin 20'den küçük olup olmadığı kontrol ediliyor. I<20 ifadesi bizim Boolean İfademizi oluşturur ve bu ifadenin aldığı değere göre döngünün devam edip etmeyeceği belirlenir. I değişkeninin değeri 0, 5, 10, 15 veya 20 iken ifadenin değeri TRUE olacağı için döngü yapılır, fakat I değişkeninin değeri 25 olduğunda ifade FALSE değeri ile sonuçlanacağından kontrol bir sonraki komuta atlar. Yukarıdaki örnekte tek bir komutun döngü içinde kullanılmasına örnek verdik. Şimdi de döngü içinde bir komut grubunun kullanılışına örnek verelim:

ıt -0;
WHİLE 1: < -20 DO
BEGIN
WRITE6:4);
END;

Dikkat ettiyseniz WHILE...DO'dan sonra döngüde yer almasını istediğimiz komutları BEGIN...END bloğu içine aldık. Yazımızın ilk başlarında bir PASCAL programının BEGIN ile başlayıp END ile bittiğini söylemiştik. Bundan başka programımızın herhangi bir yerinde üstteki örnekte de olduğu gibi belirli bazı komutların tek bir komut gibi işlem görmesini istersek BEGIN...END bloğu içine alırız. Programımızı çalıştırdığımızda şöyle bir çıktı alacağız:

05101520

Ö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:

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.

İki yönlü seçimde IF komutunun yapısını görelim:

IF İfadesi THEN

ELSE komut-2 Bu yapıya bir örnek verelim:

IF sayıl >sayıl THEN
büyük: sayıl
ELSE
büyük: - sayı2

ÇOK YÖNLÜ SEÇİM

İki yönden daha fazlası için çok yönlü seçimi kullanabiliriz. Bunun için IF komutunu kullanabileceğimiz gibi daha sonra göreceğimiz CASE komutunu da kullanabiliriz. k1, k2, k3, k4 herhangi komutları; b1, b2, b3, b4 ise herhangi Boolean İfadeleri'ni temsil etmekte. Buna göre çok yönlü seçim için IF yapısını görelim:

IF bi THEN
ki
ELSE
IF b2 THEN
k2
ELSE
IF b3 THEN
k3
ELSE
k4

Hangi durumlarda hangi komutların işleneceğini bir tablo ile görelim. Tabloda Boolean İfadeleri'nin durumuna göre hangi komutun işleneceği gösterilmekte.

İşlenen b1 b2 b3 komut TRUE TRUE TRUE k1 TRUE TRUE FALSE k1 TRUE FALSE TRUE k1 TRUE FALSE FALSE k1 FALSE TRUE TRUE k2 FALSE TRUE FALSE k2 FALSE FALSE TRUE k3 FALSE FALSE FALSE k4

Şimdi Çoklu Seçimi bir örnekle görelim:

IF (a=b) AND (b=c) THEN WRITELN('Eşkenar üçgen') ELSE IF (a=b) OR (a=c) OR

THEN
üçgen')
ELSE
WRITELN (Çeşitkenar üçgen”);

Örneğimizde a, b, c değişkenleri üçgenin birer kenarlarını temsil etmekteler. Dikkat ederseniz ilk önce eşkenar olma şartına baktık, çünkü her eşkenar üçgen aynı zamanda ikizkenar üçgen şartını da sağlar. Eğer ilk önce ikizkenar şartına bakarsak hiçbir zaman eşkenar üçgenleri bulamazdık. Çünkü eşkenar üçgenleri de ikizkenar olarak kabul etmiş olurduk.

İÇ İÇE IF KOMUTLARI

IF komutlarını iç içe kullanmamız mümkündür:

IF bi THEN
IF b2 THEN
k3
ELSE
kâ
ELSE
k2

İlk önce bir Boolean İfadesi'ne bakılır, eğer bunun değeri FALSE olursa k2 komutu işlenir, b1 ifadesinin değeri TRUE olursa THEN'den sonra IF komutu işlenir. Burada b2'nin değeri TRUE ise k3 komutu işlenir, eğer b2'nin değeri FALSE olursa k4 komutu işlenir. Örneğimizin doğruluk tablosunu yapalım:

İşlenen bi b2 komut FALSE FALSE k2 FALSE — TRUE k2 TRUE FALSE k4 TRUE TRUE k3

İkinci bir örnek daha görelim:

IF b1 THEN k1 ELSE IF b2 THEN k3 ELSE k4

Bu örneğimizin doğruluk tablosunu yapalım:

İşlenen bi b2 komut FALSE — FALSE kâ FALSE FALSE k3 TRUE FALSE ki TRUE — TRUE ki

IF komutları ile ilgili örnek programımız için program döküm ekine bakın. Şimdilik hoşçakalın...