Mobil Programlama

iOS

DERS PROGRAMI
iOS 201 Ders Programı

for Döngüsü

Lisans: Creative Commons 11.12.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

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.

  1. İ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.
  2. Sonra ifade2 hesaplanır. Bu, deyimin koşulsal kısmıdır.
  3. 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.
  4. 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 değişkenine 1 değerini bir ilk değer olarak atamaktadır.

İfade2 ise, i <= n şeklinde bir koşul ifadesidir. 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, 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.