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
|