Sunday, August 25, 2013


kosullu ifadeler ve sayaclar (if ve for)



[postlink]http://net4story.blogspot.com/2013/08/kosullu-ifadeler-ve-sayaclar-if-ve-for.html[/postlink]koxp kategorisinde yazdiginiz programlar yada kod parcaciklarinda dikkatimi ceken bir konu var. sayac kontollerinde esitlik ifadeleri kullanilmis genelde ve bu durumlarda sayac herhangi bir sebepten gerekli degeri es gectiyse sonsuza kadar calisiyor. biraz bilgilendirme yapayim.

oncelikle kosul nedir :
kosul en basit tanimiyla
if(kosul) yazdigimizda parantezin icinde kalan kisimdir. bir fonksiyon olabilir yada == > < olabilir.

bunlara deginmisken hemen bir konuyu yazayim.

Kod:
for(int i=0;i<5;i++)
{
    if(i=3)
    {
          ShowMessage("i 3 e esit");
    }
}
yukaridaki kodda ilk bakista dongunun 0 dan 4 e kadar 5 kere calisacagini ve egerki degisken 3 ise mesaj verecegi yorumunu yapariz.
fakat if(i=3) ifadesine dikkat ettigimizde buranin bir kosul degil de degiskene deger atama oldugunu goruruz ve kod blogu calismaya basladiginda her dongude i degiskenini set edecek bir sonraki adimda i++ dan dolayi i 4 olacak fakat o satirda tekrar 3 e esitlenecek ve dongu sonsuzluga gidicektir.

aklimiza gelen ilk soru derleyici bizi neden uyarmiyor olabilir fakat derleyici yapay zekaya sahip olmadigi icin bizim burada yazmak istedigimiz seyin i degiskenine 3 degerinin yazilip yazilamadigi oluyor.

kodun dogru yazimi :if(i==3) seklinde olmalidir.


Kod:
for(int i=0;i<5;i++)
{
    if(i==3)
    {
          ShowMessage("i 3 e esit");
    }
}
diger bir yanlis durumundan bahsedeyim

Kod:
int islemsayisi;
for(int islemsayisi=0;islemsayisi<100;islemsayisi++)
{

    if((100-islemsayisi)==75)
    {
        ShowMessage("75 saniye oldu Program Kapatilacak");
        TerminateProcess(GetCurrentProcess(),0);
    }
    Sleep(1000);
}
yukaridaki kodda dongu calistiktan 75 saniye sonra programi kapaticak bir algoritma yazilmaya calisilmis. islemsayisi degiskendi de global olarak tanimlanmis bunu ko da skill cooldownu olarak dusunebiliriz.
bazi durumlarda bir degiskeni birden fazla fonksiyonda kullaniriz burada da islemsayisi degiskenini disarda bif fonksiyon ile
islemsayisi+=10;
yaptigimizi ve o andaki islem sayisinin da 66 oldugunu ve 10 eklendiginde 76 oldugunu dusunelim. kosulumuza baktigimizda islemsayisinin sadece 75 e esit oldugunda islem yapacagini goruruz. bu durumda degisken 75 i gectigi icin disaridan tekrar degiskene mudahahele edilmedigi surece dongu sonsuza kadar calisicaktir.
if((100-islemsayisi)==75) yerine if((100-islemsayisi)>74) yada
if((100-islemsayisi)>=75) kullanabiliriz. kodun dogru hali

Kod:
int islemsayisi;
for(int islemsayisi=0;islemsayisi<100;islemsayisi++)
{

    if((100-islemsayisi)<=75)
    {
        ShowMessage("75 saniye oldu Program Kapatilacak");
        TerminateProcess(GetCurrentProcess(),0);
    }
    Sleep(1000);
}
seklinde olacaktir.

0 yorum:

Post a Comment