iOS 101Başlangıç seviyesi derslerde iOS uygulama geliştirme ortamını detaylı olarak inceliyoruz.

Tüm Eğitimleri Aldın mı? Kendini sınamanın tam zamanı

Haydi Sınava Gir

while Döngüsü

Kategori : Mobil | Lisans : Creative Commons (by-nc-sa) | En son 11.05.2016 tarihinde güncellendi
Eğitmen : Geleceği Yazanlar Ekibi
Etiketler : obj-c while döngüsü

 

While döngüsünün yazılış biçimi aşağıdaki gibidir:

while(ifade)  Deyim;

ya da

while(ifade)
{      Deyim1;
       Deyim2;
        ...
       Deyim_n;
}

Çalışma biçimi ise şu şekildedir:

Önce ifade hesaplanır. İfade doğru (true) ise deyim çalıştırılır. Deyim çalıştırıldıktan sonra, programın kontrolü while deyiminin başına geçer ve işlem tekrarlanır, yani ifade yeniden hesaplanarak sonucuna göre işlem yapılır. Bu işlem, ifadenin değeri yanlış (false) olana kadar sürer. Bu durumda program, deyimi izleyen noktaya gider.

İfadenin değeri doğru (true) olduğu sürece while bir sonsuz döngü (infinite loop) oluşturur.

Deyim yerinde genellikle bir deyimler grubu bulunur; bu durumda while yapısının deyimler grubunu gövde içine almak için gerekli olan { } sembolleri kullanılmış olan ikinci şekli söz konusu olur. İkinci şekil de benzer biçimde çalışır; ifade tekrar tekrar hesaplanır; ifadenin değeri doğru (true) olduğu sürece bir sonsuz döngü oluşur ve bunun her adımında Deyim1, Deyim2, ...  Deyim_n ile belirtilen deyimler grubu yeniden çalışır.

while döngü yapısı ile döngü içindeki deyim grubu ya da işlem grubunun, kontrol edilen bir koşula bağlı olarak tekrarlanabilmesi olasıdır.

Böylece, işlemlerin ne kadar tekrarlanacağının önceden belli olmadığı, fakat değeri değişen bir değişken ya da ifadenin değerinin kontrol edilmesiyle tekrar sayısının belirlenebildiği uygulamalarda bu döngü yapısını kullanmak uygun olur.

 

Aşağıda, while döngüsü ile ilişkili çeşitli uygulamalar bulunmaktadır:

İşlemlerin, Bilgisayara Girilen Belirli Özellikteki Bir Veri ile Durdurulduğu Uygulamalarda while Döngüsününün Kullanımı:

ÖRNEK: Aşağıdaki Objective C programında, bilgisayara girilen pozitif sayıların miktarı ve toplamı bulunuyor ve program negatif bir sayı girişi ile durduruluyor:

 

#import <Foundation/Foundation.h>

int main(int argc, char* argv[])
{
  NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
 
  int say,sayac,toplam;
  NSLog(@"\nBIR TAM SAYI GIRINIZ");
  NSLog(@"\nISLEMLERI DURDURMAK ICIN");
  NSLog(@"\nNEGATIF BIR TAM SAYI GIRINIZ ... ");
  sayac=0;
  toplam=0;
  scanf("%i",&say);
  while(say>0)
  {
    sayac++;
    toplam+=say;
    NSLog(@"\nBIR TAM SAYI GIRINIZ...  ");
    scanf("%i",&say);
  }
  NSLog(@"\nGIRDIGINIZ POZITIF SAYILARIN MIKTARI=%i", sayac);
  NSLog(@"GIRDIGINIZ POZITIF SAYILARIN TOPLAMI=%i", toplam);
  return 0;
}

 

 

PROGRAMIN ÇIKTISI:

 

İşlemlerin, Bilgisayarda Hesaplanan Bir İfadenin Değerinin Kontrol Edilerek Durdurulduğu Uygulamalarda while Döngüsünün Kullanımı:

ÖRNEK: Aşağıdaki Objective C programında, faktöriyel hesaplanıyor ve hesaplanan faktöriyelin değeri 720’yi aştığı anda program durduruluyor:

 

#import <Foundation/Foundation.h>

int main(int argc, char* argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
 
    int fakt,i;
    fakt=1;
    i=2;
    while(fakt<720)
    {
        fakt=fakt*i;
        i++;
    }
    NSLog(@"\n FAKTÖRYEL=%i", fakt);
    NSLog(@"\n i=%i", i);
    [pool drain];
    return 0;
}

 

 

PROGRAMININ ÇIKTISI:

Bu programda, 7!=720 hesaplandıktan sonra while’daki 720 < 720 ifadesi yanlış olacağından, bu durumda while bloğunun dışına çıkılarak printf’lerle fakt’ın ve i’nin değerleri yazdırılır.

 

ÖRNEK: KAREKÖK BULMA ALGORİTMASI

  ‘i hesaplamak için kullanılabilecek bir yaklaşımı şöyle ifade edebiliriz:

a) r0=x/2 şeklinde bir başlangıç yaklaşımı ile başlayalım. Burada, r0, x’in karekökü için ilk tahmin değeridir.

b) Başlangıç tahmini yeterli değilse, bunu izleyen r1, r2, r3 yaklaşımlarını aşağıdaki bağıntıya göre belirleyelim:

ri = ( 1 / 2 ) ( ri-1 + x / ri-1 )

 

Bu yöntem ile mesela 10 sayısının karekökü için (x=10) ilk tahmin değeri r0=5 olur ve izleyen adımlar,

r1=1 / 2 (5+10/5) = 3.5
r2=1  /2 (3.5+10/3.5)

şeklinde hesaplanır.

Herhangi bir aşamadaki kök tahmin değeri r ise ve | x-­r2 | ≤ 0.0001 ise, işlem durdurularak r’nin köke yeteri kadar yakın olduğu kabul edilir.

Bu işlemi gerçekleştirecek bir Objective C programı yazalım.

KOD BLOĞU:

 

#import <Foundation/Foundation.h>
#include <math.h>

int main(int argc, char* argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
 
    double x,r0,r;
    NSLog(@"KARE KOKU HESAPLANACAK SAYIYI GIR.. ");
    scanf("%lf", &x);
    r0=x/2;
    r=r0;
    while(fabs(x-r*r)>EPS)
    {
        r0=r;
        r=1.0/2.0*(r0+x/r0);
    }
    NSLog(@"%f SAYISININ KAREKOKU %f DIR", x,r);
    [pool drain];
    return 0;
}

 

 

PROGRAMININ ÇIKTILARI:

 

while Yapısının Sonlu Döngü Oluşturma Amacıyla Kullanımı:

Döngüdeki tekrar sayısının önceden belli olduğu uygulamalarda, for yapısını kullanmak daha uygundur; ancak while yapısı kullanılarak da bu tip problemleri çözebiliriz.

ÖRNEK:

1+2+3+......+n toplamını hesaplayalım.

 

KOD BLOĞU:

 

#import <Foundation/Foundation.h>
#include <math.h>

int main(int argc, char* argv[])
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];

    int top,i,n;
    NSLog(@"\nUST LIMIT (n..) ");
    scanf("%i",&n);
    top=0;
    i=1;
    while(i<=n)
    {
        top+=i;
        i++;
    }
    NSLog(@"\n1+2+3+...%i=%i",n,top);
    [pool drain];
    return 0;
}

 

 

Uygulamayı çalıştırdığınızda, üst limiti 100 olarak girersek 1’den 100’e kadar olan sayıların toplamını buluruz: