6. DÖNGÜ (TEKRARLAMA) DEYİMLERİ 6.1 Giriş Bu bölümde program içerisinde belirli blokların herhangi bir şarta bağlı olarak veya şarttan bağımsız bir şekilde ardışık olarak çalıştırılması için kullanılan deyimler üzerinde durulacaktır. Bu tekrarlama deyimleri FOR-DO, REPEAT-UNTIL, WHILE-DO şeklindedir. 6.2 For-Do For deyimi, bir program parçasının herhangi bir boolean şartına bağlı olmaksızın belirlenen sayıda üst üste çalıştırılması için kullanılır. For deyiminin genel kullanım şekilleri aşağıda verilmiştir. FOR Kontrol Değişkeni:=Döngü Başlangıcı to döngü sonu do Begin Yapılacak işlemler ; End; Bu kullanım şeklinde başlangıç değeri bitiş değerinden küçük olmak zorundadır. TO ifadesiyle başlangıçtan bitişe kadar artarak tekrar yapılacağını, DO ifadesi de tanımlanan işlemlerin tekrarlanacağını bildirir.
FOR Kontrol Değişkeni := Döngü_Başlangıcı DOWNTO Döngü_sonu DO Begin Yapılacak işlemler ; End; For deyiminin bu kullanım şeklinde başlangıç değeri bitiş değerinden daima büyük olup DOWNTO ifadesi de döngü değişkeninin tekrarlama işleminde azalacağını belirtir. DO ifadesi ise belirtilen işlemlerin döngü sayısınca tekrarlanacağını bildirir. Turbo Pascal dilinde diğer programlama dillerinden farklı olarak başlangıç değerinden son değere artışlar/azalmalar birer birer olmaktadır. Aşağıdaki örnek programları inceleyiniz.
i,say,kare,kup,fak:integer; yuzde:real; begin readln(say); Örnek : Dışardan girilen bir sayının karesini küpünü %18’ini ve faktöriyelini hesaplayan programı yazınız. var i,say,kare,kup,fak:integer; yuzde:real; begin write('Sayi giriniz'); readln(say); kare:=say*say; kup:=say*kare; yuzde:=say*0.18; fak:=1; for i:=1 to say do fak:=fak*i; writeln('Sayi Karesi Kubu Yuzdesi Faktoriyeli'); write(' ',say,' ',kare,' ',kup,' ',yuzde:4:2,' ',fak); readln; end.
Örnek : Dışardan iki sayı okuyup 1. sayıyı taban 2 Örnek : Dışardan iki sayı okuyup 1. sayıyı taban 2. sayıyı üs kabul ederek üs alma işlemini yapan programı yazınız. var us,taban,sonuc:integer; i:integer; begin write('taban ve ussu girin..:'); readln(taban,us); sonuc:=1; for i:= 1 to us do sonuc:=sonuc*taban; write('sonuc......:',sonuc); readln; end.
6.3 Repeat-Until Bir program bloğunun belli bir şart sağlanıncaya kadar üst üste çalıştırılmasını sağlayan REPEAT deyiminin genel formu aşağıdaki şekildedir. Repeat Program Satırlar ; Until (Boolean şartı) ; Burada repeat, tekrar etme anlamında olup, tekrar etmesine UNTIL deyimindeki şart (boolean ifadesi) sağlanıncaya kadar devam eder. Bu deyim program satırları bölümüne herhangi bir şey yazılmaksızın kullanılabilir. Bu döngünün en büyük avantajı belirli bir sayı ile sınırlandırılmamış olmasıdır. Boolean ifadesindeki şart sağlanıncaya kadar işlemlere devam edilmektedir. Dikkat edilirse şart cümlesinin aldığı değer ne olursa olsun program bloğu bir kez çalışmaktadır.
Örnek : İsminizi dışardan okunan bir sayı kadar yazdıran programı yazınız. Var x,i:integer; begin write('Sayi girin'); readln(x); i:=0; repeat i:=i+1; writeln('M.AKSU'); until i=x; readln; end.
Örnek : Dışardan okunan 10 tane rastgele sayıyı toplayıp bunların ortalamasını hesaplayarak sonuçları ekrana yazan programı yazınız. Var x,i:integer; top:longint; ort:real; begin top:=0; i:=0; repeat i:=i+1; write(i,'. Sayiyi girin'); readln(x); top:=top+x until i=10; ort:=top/i; writeln(i,' adet sayinin toplami',top); writeln(i,' adet sayinin ortalamasi',ort:5:2); readln; end.
6.4 While-Do Bir program bloğunun belli bir şart sağlandığı sürece üst üste icrasını sağlayan WHILE deyiminin genel yazılış şekli aşağıdadır. While <şart cümlesi> Do Yapılacak işlemler ; Do kelimesini takip eden blok WHILE deyimi tarafından döngüye sokulacak komut cümlelerini kapsar. Komut cümlesi sayısı birden fazla ise, bu bloğun BEGIN...END deyimleri arasına alınması zorunludur. WHILE ile REPEAT arasındaki fark; Repeat döngüsü şart cümlesi yanlış olduğu sürece, While döngüsü ise şart cümlesi doğru olduğu sürece devam etmesidir. REPEAT döngüsünde şart sonda kontrol edildiği için doğruda olsa yanlışta olsa en az bir defa işlem yapılır. WHILE da ise şart döngüye girmeden kontrol edildiği için yanlışsa hiç işlem yapılmaz.
Örnek : Dışardan girilen bir ismi yine dışardan girilen bir sayı kadar yazan programı yazınız. Var x,i:integer; s:string; begin write('isim Girin'); readln(s); write('Sayi girin'); readln(x); i:=0; while i<x do i:=i+1; writeln(s); end; readln; end.
Örnek : Dışardan okunan 10 tane rastgele sayıyı toplayıp bunların ortalamasını hesaplayarak sonuçları ekrana yazan programı yazınız. Var x,i:integer; top:longint; ort:real; begin top:=0; i:=0; while i<=10 do i:=i+1; write(i,'. Sayiyi girin'); readln(x); top:=top+x end; ort:=top/i; writeln(i,' adet sayinin toplami',top); writeln(i,' adet sayinin ortalamasi',ort:5:2); readln; end.
6.5. Blok ve Döngülerin Kırılması Döngülerin çalışması sırasında belirli koşulların sağlanması durumunda döngünün sona ermesini isteyebiliriz. Bunun için BREAK, CONTINUE, EXIT, HALT Pascal deyimlerinden yararlanmaktayız. Break Pascal programlama dilinde bir döngüyü kırarak sona erdirmek amacıyla kullanılır. Program içinde BREAK deyimiyle karşılaşıldığında içinde bulunduğu döngüden sonraki program satırının işler hale getirir. BREAK komutu FOR-DO, REPEAT-UNTIL ve WHILE-DO döngülerinin içinde kullanılabilir. Konunun daha iyi anlaşılabilmesi için aşağıdaki örneği inceleyiniz. Örnek Programda i ve j gibi iki sayının çarpımı yapılmaktadır. i=j olduğu durumda içteki döngü BREAK deyimi ile kırılmakta ve i 'nin değeri bir üst değere arttırılarak programın çalışmasına devam edilmektedir. Continue Fortran programlama dilinde olduğu gibi tekrarlama çevrimini yeniden başlatır. Programcı, bilgi girişlerinde kullanıcının sayısal olmayan bir giriş yapacağını varsayarak önlem almak amacıyla tekrarlama işlemlerini yeniden başlatmak için CONTINUE komutu kullanılır.
Exit Program işlem bloklarında tanımlanan herhangi bir koşulun gerçekleşmesi halinde program bloğunun akışını durdurur. Halt Programın kararlaştırılan bir yerinde durdurulmasını sağlar. ENTER tuşuna basıldıktan sonra varsa HALT komutundan sonra tanımlanan program satırları çalıştırılır.