Sayfalar

Dongü ve Diziler - 2


"do while" Donguleri

"do while" donguleri bir onceki konuda anlatilan "while" donguleri ile benzer islemleri yapmakla beraber bir onemli fark icermektedirler.Dongunun kontrol deyimi ,dongunun sonunda yer almaktadir.Bu durum dongu yapimizin, verdigimiz kosullar ne olursa olsun en az bir kere calisacagini gostermektedir.

do
{

Bu parentezlerin icindeki kod grubunu uygula

}

while (sartimiz dogrulaniyorsa); -- geriye don ve tekrar uygula

Yukarida acik sekilde goruldugu uzere dongumuz "sartlarimiz" ne olursa olsun "do" komutu ile baslayan dongumuzu bir kez isletecek ve "while" ile verilen satirdaki "sartlara" bakacaktir.Eger sart "dogruysa" (true) geriye donerek donguyu ilk yaptigi sekilde "do" ile basyalayan yerden itibaren bir kez daha isletecektir.

Hemen bir ornek verelim,

do
{

echo ("Kredi limitinizi astiginiz icin son aldiginiz urun sepetnizden cikarildi");
$AlisverisToplami = $AlisverisToplami - $SonAlinanUrun;
$SonAlinanUrun = $SonAlinanUrundenBirOncekiUrun;

}

while ($AlisverisToplami > $KrediLimiti);

Yukaridaki ornekte ozellikle bir hata yapilmistir.Hatamiz kodlarla ilgili degil mantikla ilgilidir.Gordugunuz gibi daha kullanicinin limiti asip asmadigina bakmadan ekrana bir uyari yazisini cikarilmasiydi.Belki musterimiz limiti asti belki asmadi.Ama bu sekilde "do while" dongusu ile yazdigimiz programlarda dikkatinizi cekmek istedigimiz nokta da iste buydu.Dongunun kontrol degiskeni dongu calismaya basladigi ilk seferden sonra kontrol edilir.Dolayisi ile her halukarda musteri ekranda bu uyariyi en az bir kere gorecektir.

Bu dongu yapisini o zaman nerede kullanacagiz?Simdi size bu dongu yapilarinin nasil ve nerede kullanilcagini biraz aciklamaya calisalim.Bir mantiksal ornekle baslayalim,

do
{
Bir sonraki kavsaga kadar arabayi sur;
}
while ($Kavsak != 10);

Ozet olarak eger PHP'nin sizin icin bir islemi kesin olarak yapmasini ve ayni zamanda bir kontrol mekanizmasi ile donatilmasini istiyorsaniz bu dongu tam sizin icin yaratilmis demektir :))

Bir baska ornekle bu dongunun kullanimini pekistirelim.simdi girdigimiz bir sayinin "asal" sayi olup olmadiginin arastirildigi bir uygulama yazalim.

1.Text editorunuzu acin ve asagidakileri yazin.

<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD = POST ACTION="asalsayi.php">
Asalsayi olup olmadigini merak ettiginiz rakami giriniz:
<INPUT NAME="Sayi" TYPE="Text">
<BR>
<BR>
<INPUT TYPE=SUBMIT VALUE = "Buraya tiklayarak sayinin asal olup olmadigini ogrenin...">
<BR>
</FORM>
</BODY>
</HTML>

2.Bu dosyayi "asal.html" olarak kayit edin.

3.Yeni bir text dosyasi acip asagidakileri yazin.

<HTML>
<HEAD></HEAD>
<BODY>
<?php
$Bolunen = 2;
do
{

$Kalan = $Sayi%$Bolunen;
$Bolunen = $Bolunen + 1;
} while ($Kalan !=0 AND $Bolunen<$Sayi);

if (($Bolunen<$Sayi) || ($Sayi ==0)){

echo ("Sayiniz asal bir sayi DEGIL");
}

else {
echo ("Sayiniz ASAL bir sayidir.");
}

?>

</BODY>
</HTML>

4.Bu dosyayi"asalsayi.php" olarak kayit edin

5."asalsayi.html" dosyasini acip bir kez programi deneyin.

Program nasil calisiyor

Ilk satirda $Bolunen degiskenini tanimladik.Ozellikle bu degiskeni 2 den baslattik cunku butun sayilar 1'e bolunebilir.

Programda $Kalan degiskeni ile ,kullanicin girdigi sayinin dongu icerisinde o andaki karsilik gelen sayiya bolumunden kalan olup olmadigina bakiyoruz.Sonucta bu islemi "mod" operatorunu kullanarak yapiyoruz(% isareti PHP de "mod" almak icin kullanilir.Bu konu ile ilgili detayli aciklama daha onceki konularda yapilmisti.Sitemizin arama fonksiyonlarini kullanarak bu yaziya ulasabilirsiniz.Veya yazimiz yazilrken veritabanindaki URL degeri http://www.turk-php.com/stories.php?story=01/03/01/6469641 olan linkten bu bilgiye ulasabilirsiniz. )

Kullanicinin web formundan girdigi sayi,teker teker 2 den baslayarak kendisine gelene kadar butun sayilara bolunuyor.Mesela 263 un bir asal sayi olup olmadigina bakiyorsaniz ,teker teker 2,3,4,5,6,7,8 ... sayilarina bolunuyor.Dongu her calistiginda bir sonuc cikiyor.Bu sonuc dongunun kontrol deyimi ile test ediliyor.Bu testten eger "dogru" cevabi cikarsa dongu tekrar calisiyor ve bu boyle surup gidiyor.Eger sayinin kendisine gelindiyse ve halen matematiksel olarak kalan sifira esit degilse bu demektirki sayimiz asal.Yok eger dongunun icerisinde bir sayi denenirken oldu ki kalan sifir oldu,bu da sayimizin asal olmadigini gosteriyor.Iste dongumuzun kontrol deyimide toplam bu hali test ediyor.
Bir sonraki konumuz olan "For Donguleri"'inde gorusmek uzere saglicakla kalin.