|
"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 asgidakileri 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.
Ornek Dosyalar
http://www.turk-php.com/ornekler/asalsayi.html
http://www.turk-php.com/ornekler/asalsayi.php
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.
Bu konu ile ilgili her turlu gorus ve sorularinizi mail adresime
gonderebilirsiniz.
serkan@turk-php.com
|