for deyimi ve for deyimi kullanılarak oluşturulacak döngü yapısı, işlemlerin tekrar sayısının önceden belli olduğu durumlarda kullanılır.
for deyiminin yazılışı:
for(ifade1;ifade2;ifade3) Deyim;
Deyim_x;
veya
for(ifade1;ifade2;ifade3)
{
Deyim1;
Deyim2;
...
Deyim_n;
}
Deyim_x;
şeklindedir.
- İlk olarak ifade1 hesaplanır; bu genellikle bir ya da daha fazla değişkene ilk değeri atayan bir atama döngüsüdür.
- Sonra ifade2 hesaplanır. Bu, deyimin koşulsal kısmıdır.
- ifade2 yanlışsa, programın kontrolü for döngüsünden çıkar ve program akışı programdaki bir sonraki döngüye geçer (deyim_x). Eğer ifade2 doğru ise, döngü veya döngüler grubu çalıştırılır.
- Döngü ya da blok yapılı şekilde döngüler grubu çalıştırıldıktan sonra, ifade3 çalıştırılarak hesaplanır. O zaman çevrim yine geriye, ifade2'ye döner.
İfade1 sadece bir kez çalıştırılır; ifade2 ve ifade3 ise, döngüsünün her tekrarında (iteration) çalışıtırılır.
for deyimini anlamanın en iyi yolu, onu aşağıda olduğu gibi while döngüsü ile karşılaştırmaktır:
for (ifade1; ifade2; ifade3)
deyim;
yapısı
ifade1;
while (ifade2)
{
deyim;
ifade3;
}
yapısı ile ile tamamen aynıdır.
Aşağıda basit bir örnek ile for döngü yapısını daha iyi anlamaya çalışalım:
#import <Foundation/Foundation.h>
int main(int argc, char* argv[])
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
int top,i,n;
NSLog(@"\nUST SINIR(BIR TAM SAYI) ");
scanf("%i", &n);
top=0;
for (i=1; i<=n; i=i+1)
top=top+i;
NSLog(@"\n1+2+3+...n= %i \n\n", top);
[pool drain];
return 0;
}
Bu programda, for’un başlangıç koşulunu belirleyen ve ifade1 olarak belirttiğimiz ifade i=1 şeklindedir ve bu for döngüsünün parametresi diyebileceğimiz i değişkenine 1 değerini bir ilk değer olarak atamaktadır.
İfade2 ise, i <= n şeklinde bir koşul ifadesidir. i değişkeninin değeri n’den küçük ya da n’e eşit olduğu sürece döngü sürecektir.
İfade3 ise i = i + 1 şeklinde bir artım ifadesidir ve döngünün her tekrarında i değişkeninin değerini 1 arttıracaktır.
Aşağıdaki tabloda döngü süresince i ve toplam değişkenlerinin değerlerinin nasıl değişeceğine bakalım:
ÇEVRİM ADIMI |
i |
Toplam |
---|---|---|
Başlangıç, döngü öncesi |
|
0 |
1 |
1 |
1 |
2 |
2 |
3 (1+2) |
3 |
3 |
6 (1+2+3) |
4 |
4 |
10 (1+2+3+4) |
5 |
5 |
15 (1+2+3+4+5) |
Döngüden çıkınca i’nin değeri yazdırılırsa,
i=6
değeri görünecektir.
PROGRAMIN ÇIKTISI:
ÖRNEK: FAKTÖRİYEL HESABI
for döngüsünü kullanacağımız diğer bir örnek program ise faktöriyel hesabı programı olacaktır. Matematikte faktöriyel,
n!=1.2.3...n
şeklinde tanımlanır; yani n sayısının faktöriyeli 1’den n’e kadar tamsayıların çarpımına eşittir. Aşağıda, faktöriyel hesabıyla ilgili Objective C programı ve bu program içindeki değişkenlerin programın çalıştırılması sırasındaki değişimlerini gösteren tablo yer alıyor:
#import <Foundation/Foundation.h>
int main(int argc, char* argv[])
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
int fakt,i,n;
NSLog(@"UST SINIR(BIR TAM SAYI) ");
scanf("%i",&n);
fakt=1;
for (i=1; i<=n; i++)
fakt=fakt*i;
NSLog(@"%i!=1*2*3*...%i=%i",n,n,fakt);
[pool drain];
return 0;
}
Uygulamayı çalıştıralım. Üst sınır olarak 5 girelim. 5! değerinin hesaplandığını görürüz:
Faktöriyel Programındaki Değişkenlerin Programın Çalıştırılması Sırasındaki Değişimlerini Gösteren Tablo
i |
fakt |
n |
---|---|---|
Döngü öncesi |
1 |
5 |
1 |
1 |
5 |
2 |
2(1*2) |
5 |
3 |
6(1*2*3) |
5 |
4 |
24(1*2*3*4) |
5 |
5 |
120(1*2*3*4*5) |
5 |
ÖRNEK:
1.2/(3.4)-5.6/(7.8)+9.10/(11.12)-13.14/(15.16)
şeklindeki alterne seri toplamını hesaplayalım. Yukarıdaki ifadede '.' sembolü çarpma işlemi anlamındadır.
KOD BLOĞU:
#import <Foundation/Foundation.h>
int main(int argc, char* argv[])
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
int i,p;
double x,s;
s=0;
p=1;
x=1.0;
for (i=1; i<=4; i++)
{
s=s+(x*(x+1))/((x+2)*(x+3))*p;
x=x+4;
p=-p;
}
NSLog(@"TOPLAM=%f",s);
[pool drain];
return 0;
}
PROGRAMIN ÇIKTISI:
Programın Çalıştırılması Sırasında Alterne Seri Programındaki Değişkenlerin Değişimlerini Gösteren Tablo
i |
x |
s |
p |
---|---|---|---|
Döngü öncesi |
1.0 |
0 |
1 |
1 |
1.0 |
(1.2)/ (3.4) |
1 |
2 |
5.0 |
(1.2)/ (3.4) -(5.6)/ (7.8) |
-1 |
3 |
9.0 |
(1.2)/ (3.4) -(5.6)/ (7.8) +(9.10)/ (11.12) |
1 |
4 |
13.0 |
(1.2)/ (3.4) -(5.6)/ (7.8) +(9.10)/ (11.12) -(13.14)/ (15.16) |
-1 |
AÇIKLAMA:
Sadece 4 terim olduğu için for döngüsü 1’den 4’e kadar çalıştırıldı. İlk terim 1.2/ (3.4) ve ikinci terim 5.6/(7.8) olduğu için, x değişkeninin ilk terimdeki ilk sayıyı temsil ettiği durumda, terimi x.(x+1)/((x+2).(x+3)) şeklinde ifade edebiliriz. x yerine 1 koyarak bu durum kolayca kanıtlayabiliriz. İkinci terimde ilk sayı 5, üçüncü terimde ilk sayı 9 olduğuna göre x her seferinde 4 arttırılmalıdır. Bunu da programda x=x+4; deyimiyle gerçekleştiriyoruz. Bu terimi x+=4; şeklinde de yazabiliriz.
Seri alterne seri olduğuna göre, yani terimlerin işaretleri +,–,+,– şeklinde değiştiğine göre, p değişkeni yardımıyla terimlerin işaretlerini ayarlayabiliriz. p önce 1 olarak atanır. Sonra döngü içine konulan p= –p; ifadesi ise bir sonraki işareti –, bir sonrakini + ve onu izleyeni – yapar.