MultiServis.Net //PHP El Kitabı

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>

Zekice Kod Yazmak - BOLUM 5 Yazar: Serkan Tarih: 01/03/02

Ice Dogru Egilmek veya Fonksiyonun Kendi Kendisini Cagirmasi(Recursion)

Fonksiyon'un kendi kendisini cagirmasi islemi programcilik literaturunde "dikenli bir konu" olarak tanimlanir.Bu cogu zaman programlamayi yeni ogrenen insanlarin basinin donmesine sebep olur.En cok kullanildigi alan matematik islemlerdir ve islem sayisini azaltmak icin oldukca faydalidir.

Sonsuz bir dongu yaratmamak icin,ayni "while" dongulerinde oldugu gibi bir degiskeni devamli test etmelisiniz.Bu degisken verdigimiz sinir sartlarina fonksiyon her calistiginda biraz daha yaklasmali ve asla bu degiskenin degisim sureci kontrol disina cikmamalidir.

Simdi derin bir nefes ve mutfaktan bir kahve alip gelin.Yazinin bundan sonraki kisiminda biraz basinizi dondurecegiz :)

Yapacagimiz islem bir sayinin "faktoryelini" hesaplamak icin ,fonksiyonun kendi kendisini cagiracak sekilde yapilandirip sonuca ulasmak.Bu islem dongulerle de yapilir ama o zamanda size bu konuyu ogretemeyiz :)

Baslayalim,

Faktoryel islemi asagidaki formulle tanimlanir :

n! = n * (n-1) * (n-2) * ........(n-(n-2))*1

Yani eger "10" sayisinin "faktoryelini bulmak isiyorsak yapacagimiz islem,

10! = 10*9*8*7*6*5*4*3*2*1

sayilarini carpmaktir.

Isterseniz ornegimize hemen gecelim ve size uygulamali olarak programi yazip ardindan nasil calistigini anlatayim.

1.Text editorunuzu acin ve asagidakileri yazin.

<HTML>
<HEAD></HEAD>
<BODY>
<FORM METHOD=GET ACTION="faktoryel.php">
Hangi sayinin faktoryelini hesaplamak istiyorsunuz?

<INPUT NAME="Sayi" TYPE="Text">
<BR>
<BR>
<INPUT TYPE=SUBMIT>
</FORM>
</BODY>
</HTML>

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

3.Yeni bir text dosyasi acin ve asagidakileri yazin.

<?php
function faktoryel ($Sayi) {
if ($Sayi <= 1)
return 1;
else
return $Sayi* faktoryel ($Sayi-1);
}
echo "Girdiginiz sayi: " . $Sayi . " icin faktoryelimiz" . (faktoryel($Sayi));
?>

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

5."faktoryel.html" dosyaysini acip bir kac deneme yapin.

Ornek Dosyalar

http://www.turk-php.com/ornekler/faktoryel.html

http://www.turk-php.com/ornekler/faktoryel.php

Program nasil calisiyor?

Bu matematiksel islem cok basit oldugu icin programimiz kisa oldu.Eger daha ayrintili bir ornek yapmak isteseydik tum zamanimizi ve kaynaklarimizi buna ayirmamiz gerekirdi.Bizler burada yanlizca boyle bir konunun varligindan sizi haberdar etmek ve basitce bu yapiyi gostermek icin bu yaziyi yaziyoruz.

Daha profosyonel matematiksel islemler icin sizin kaynkalara goz atmaniz gereklidir.

- Programin baslangicinda "fonksiyonu" tanimlayip, $Sayi ile "argument"in ne olacagini belirledik.

  <?php
  function faktoryel ($Sayi) {

- Daha sonra kullanicin girdigi sayi degerinin sifir veya 1 olup olmadigina baktik.

  if ($Sayi <= 1)
  return 1;

- Eger girilen sayidan memnun olduysak program calismaya devam ediyor.

  else
  return $Sayi* faktoryel ($Sayi-1);

- Diyelimki kullanici web sayfasindan "3" degerini girdi.

  3 * faktoryel(2) satiri uygulanacaktir.

  Ardindan ,

  3 * 2 * faktoryel(1) satiri uygulanacaktir.

  Bu islem $Sayi degiskenin degeri "1" oluncaya kadar devam edecektir.Zaten bu noktada fonksiyonun disina cikilip basit bir bilgi mesaji ekrana yazilmaktadir.

  Tabii ki boyle bir programi yazip calisir hale getirmek oldukca basittir.Diger matematiksel islemler icin sorunun cozumu her zaman bu kadar basit olmayacaktir.

  Bir Dosyayi "Include" Etmek

  Fonksiyonlar konusunda anlatacaklarimizi tamamladik.Simdi sira cok onemli baska bir konuyu "include" komutunun kullanimi ve ana amaclarini anlatmaya geldi.

  Cok ayrintili olarak aciklayacagimiz bu konuyu iyi ogrenmenizi tavsiye adiyoruz.Zira PHP programciliginin temel taslarindan bir tanesi bu komutun duzgun kullanilmasidir.

  "Include" komutu ingilizce "icermek" anlamina gelir.PHP icerisinde kullanim amaci bir dosyayinin icerigini bir baska dosyaya eklemektir.

  Text,HTML,Kod ve PHP scriptlerini bir baska dosya icerisine "include" komutunu kullanarak ekleyebilirsiniz.Kullanim formati su sekildedir :

  include ("DosyaAdi");

  ornek vermek istersek,

  include ("test.txt");

  Eger "test.txt" dosyasi "Merhaba" kelimesini iceriyorsa, artik bu kelime HTML'nin bir parcasi olarak web sayfasi icinde goruntulenecektir.

  Text dosyamizin icerigi asagidaki gibi bir makalede olabilir.

  Define problem :
  ETI sells cookies, biscuits and crackers throughout Turkey. Company has a big distribution network all of the country. There are a lot of little stores which sell ETI product. They have seven main region and seven region managers. Every region has district managers who has several salesman. Some areas are not convenient for travelling.

  Yukaridaki yaziyi kolay olsun diye bir odevimden aldim.Ne yazik ki Turkce bir dosyam yok :)

  Sonucta bu yazi yukaridaki "Merhaba" orneginde oldugu gibi "test.txt" dosyasi icerisine yerlestirilirse aynen burada gorundugu sekilde web sayfasinda goruntulenecektir.

  "include" komutunu degiskenlerle beraber kullanabilirsiniz.

  Ornek vermek istersek,

  $DosyaAdi = "1";
  include ("test" . $DosyaAdi . ".txt");

  sonucta dosya adi "test1.txt" olan text dosyasi web sayfaniz icine eklenmeye calisilacaktir.(Tabii ki boyle bir dosya varsa)

  "include" komutunun kullanimina iliskin bazi detaylar

- Text dosyalari web sayfalarina eklenebilir.
- Degiskenler,sabitler,ayrintili hata mesajlari "include" edilecek dosya icerisinde tanimlanabilir.
- HTTP degiskenlerini bu sekilde sayfaniza ekleyebilirsiniz.
- Farkli bir PHP scriptini calistirabilirsiniz.(Execute a seperate PHP script)
- Cok genel kullandiginiz fonksiyonlari,her seferinde yazmak yerine bir dosya icerisine yerlestirip "include" edebilirsiniz.Bu sizi her program sayfasi fonksiyonlari tekrar yazmak derdinden kurtarir.

  Uygulamali bir ornek yapalim ve konuyu daha iyi anlayalim,

  1.Text editorunuzu acip asagidakileri yazin
  "Dosya1 sayfaniza eklendi."

  2.Bu dosyayi "dosya1.txt" olarak kayit edin.

  3.Yeni bir text dosyasi acip asagidakileri yazin.
  "Dosya2 sayfaniza eklendi"

  4.Bu dosyayi "dosya2.txt" olarak kayit edin.

  5.Yeni bir text dosyaysi acip asagidakileri yazin.

  <HTML>
  <HEAD></HEAD>
  <BODY>
  <FORM METHOD=GET ACTION="ekle.php">
  Hangi dosyanin sayfaniza eklenmesini istiyorsunuz?
  <SELECT NAME="Secim">
  <OPTION VALUE="1">Birinci Dosya</OPTION>
  <OPTION VALUE="2">Ikinci Dosya</OPTION>

  </SELECT>
  <BR>
  <BR>
  <INPUT TYPE=SUBMIT>
  </FORM>
  </BODY>
  </HTML>

  6.Bu dosyayi "ekle.html" olarak kayit edin.

  7.Yeni bir text dosyasi acip asagidakileri yazin.(Merak etmeyin bu son islem)
  <HTML>
  <HEAD></HEAD>
  <BODY>
  <?php
  if ($Secim<>"") //Secim bos degilse demek bu satir <> isareti esit degil "" isaretleri ise bos anlamindadir.
  {
  include ("dosya" . $Secim .".txt");
  }
  ?>
  <BR>
  Iste size ornek birkac yazi bu yazilarda programa ait
  </BODY>
  </HTML>

  8.Bu dosyayi "ekle.php" olarak kayit edin.

  9."ekle.html" dosyasini acip bir kac deneme yapin.

  Ornek Dosyalar

  http://www.turk-php.com/ornekler/ekle.html

  http://www.turk-php.com/ornekler/ekle.php

  http://www.turk-php.com/ornekler/dosya1.txt

  http://www.turk-php.com/ornekler/dosya2.txt

  Bu yazimiza bir bolum daha sonra eklenecektir.(Include komutunun ayrintili anlatimi ve genel kullanimi.Yaklasik iki sayfa kadar olacak.Bu yaziyi arada bir kontrol etmeyi unutmayin.Simdilik konuya bir giris yaptik)

  Her turlu gorus ve onerinizi simdi bu sayfanin altinda yer alan bolumde belirtebilirsiniz.

  Serkan Hadi Ceylani
  serkan@turk-php.com

<<= Önceki Sayfa | PHP Ana Sayfa | Sonraki Sayfa =>>