C'ye Buradan Başlasak 2 (Kontrol Yapıları)

Başlatan sema, 22 Şubat 2010 - 22:19:56

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

sema

Kontrol Yapıları (Döngü Deyimleri)

Kontrol Yapıları bir ya da daha fazla işlemin tekrar edilmesini sağlayan deyimlerdir. C programlama dilinde while, for ve do-while deyimleri döngü işlevini yerine getiren deyimlerdir. İnceleyelim:

While():

Genel kullanım:

while(şartlar)
yinelenecek ifadeler(işlemler);


Parantez içerisindeki şartlar doğru olduğu müddetçe (yani mantıksal değer 1'se) while'dan sonra gelen "yinelenecek ifadeler(işlemler)" kısmı yinelenir. Eğer mantıksal ifade  yanlışsa (mantıksal değer 0 ise) döngü durdurulur ve  yürütülme sırası while'dan sonra gelen deyime geçer.

Mutlaka bir test değeri içererek while döngüsünün bir sefer yanlış olmasını sağlamalı ki döngü sona ersin. Aksi hâlde sonsuz döngüde kaybolursunuz, benden söylemesi. Meselâ:

#include<stdio.h>
int main()
{
int sayi=1;
while(sayi<19)
printf("Sayin bakalim :D, %d\n",sayi);
return 0;
}


su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
su@su:~$ ./falanca
Sayin bakalim :D, 1
Sayin bakalim :D, 1
...
...
...
Sayin bakalim :D, 1


Gibi sonsuza kadar devamedegelen bir durumla karşılaşabilirsiniz değil karşılaşırsınız.

Dikkat Etmemiz Gereken Noktalar:
1) Döngüye giriş koşulu iyi ayarlanmalı:

#include<stdio.h>
int main()
{
int index=10;
while(index++<5)
printf("Mutlu kalmanizi diliyoruz ki mutlu kalasiniz. Mutlu musunuz!!\n");
return 0;
}


su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
su@su:~$ ./falanca
su@su:~$ //koşula uymuyor, mutlu olmayı beklemeyin!


2) Döngüden çıkış olmalı:

#include <stdio.h>
int main(void)
{
int n = 0;
while(n<3)
printf("n = %d\n", n);
n++;
printf("Bekle!\n");
return 0;
}


su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
su@su:~$ ./falanca
n = 0
n = 0
...
...
n = 0

Bu böyle gider! Ama;

while(n++ < 3)
printf("n = %d\n", n);
printf("Iste bu!\n");


gibi bir düzenleme ile

su@su:~$ ./falanca
n = 1
n = 2
n = 3
Iste bu


Olur ki o da güzel olur :)

Daha başka nelere dikkat edeceğiz:

3) = ve == birbirinden farklı,
4) Bazı döngüler sonsuz bazıları sayılı olarak tanımlıdır,
5) Bir sayıcı olmalı,
6) Bu sayıcı bir sınır değeri ile karşılaştırılmalı,
7) Bu sayıcı döngünün her seferinde artırılmalı,
Not: Sayıcı her zaman döngü dışında tanımlanır ve değer atanır. Sayıcının değerinin artırılması
         While(sayici++ < limit)
şeklinde olabilir veya açık olarak döngü içerisinde yapılır. Bu durumları for döngüsü ortadan kaldırır (göreceğiz).

Şimdi kurallara uygun basit bir örnek:

Toplama ve çıkarma kullanarak çarpma işlemini gerçekleştiren C programı:

#include<stdio.h>
int main()
{
      int a, b, c;
      printf("iki sayi alalim =\n"); 
      scanf("%d %d", &a,&b);
      c = 0;
      while(b>0)
{
                  c = c + a;
                  b = b - 1;
      }
      printf("\n Sonuc = %d\n",c);
      return 0;
}


su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
su@su:~$ ./falanca
iki sayi alalim =
5
19

Sonuc = 95



For Döngüsü

For döngüsü üç parçadan  oluşur. Parçaları (;) ile ayrılır. İlk  parça  döngü başlamadan önce ve bir kere yapılır. İkinci kesimde bu döngünün her turunda  kontrol edilmesi gereken  deyim yer alır. Bu  deyim doğru olduğu sürece devam eder. Üçüncü kesimde  ise değişken her  defasında belirtilen değer kadar  artar.

For() döngüsü değişik şekillerde kullanılabilir:

#include <stdio.h>
int main(void)
{
int saniye;
for (saniye = 5; saniye > 0; saniye--)
printf("%d saniye!\n", saniye);
printf("Boooooom!\n");
return 0;
}


su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
su@su:~$ ./falanca
5 saniye!
4 saniye!
3 saniye!
2 saniye!
1 saniye!
Boooooom!


Arttırmayı bir yapmak zorunda değilsiniz.
Sayılar yerine karakterleri sayabilirsiniz.
For() döngüsünü test için kullanabilirsiniz (sadece saymaları yapmıyor yani). Yani:

#include <stdio.h>
int main(void)
{
int num;
printf("    n    n kupu\n");
for (num = 1; num*num*num <= 216; num++)
printf("%5d %5d\n", num, num*num*num);
return 0;
}


su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
su@su:~$ ./falanca
    n    n kupu
    1     1
    2     8
    3    27
    4    64
    5   125
    6   216


Artırım aritmetik veya geometrik olarak seçilebilir.
Artırma yerine istediğiniz legal işlemi koyabilirsiniz:

Sonsuz döngü:
   for (; ;)
printf("Biri beni durdursun\n");


İlk sayı değer ataması olmak zorunda değildir. Bu kısım sadece bir defa işlem görür. Buraya istediğiniz başka bir işlem koyabilirsiniz.

#include <stdio.h>
int main(void)
{
int num = 0;
for (printf("benim istedigim sayiyi girin!\n"); num != 19; )
scanf("%d", &num);
printf("Tamamdir, oldu!\n");
return 0;
}


su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
su@su:~$ ./falanca
benim istedigim sayiyi girin!
4
5
6
93
19
Tamamdir, oldu!


Döngü parametreleri döngü içerisinde döngü çalışırken değiştirilebilirler:
for (n = 1; n < 10000; n = n + degisken)

for() döngüsünü birden fazla değer için kullanabilirsiniz diyip bitirelim.

Do-While Döngüsü

#include <stdio.h>
int main(void)
{
const int sifre = 19;
int girilen_sifre;
do
{
printf("Bilgisayar kulubune uye olmak icin,\n");
printf("gizli sifreyi girin: ");
scanf("%d", & girilen_sifre);
}
while (girilen_sifre != sifre);
printf("Ok.. Artik uyesin. Tebrikler :D\n");
return 0;
}


su@su:~$ gcc /home/su/Masaüstü/falanca.c -o falanca
su@su:~$ ./falanca
Bilgisayar kulubune uye olmak icin,
gizli sifreyi girin: 5
Bilgisayar kulubune uye olmak icin,
gizli sifreyi girin: 6
Bilgisayar kulubune uye olmak icin,
gizli sifreyi girin: 34
Bilgisayar kulubune uye olmak icin,
gizli sifreyi girin: 19
Ok.. Artik uyesin. Tebrikler :D



Do döngüsünde koşul kontrolü  döngü sonunda yapıldığı için döngü en az bir defa dönmek zorundadır.

"Bu öykü böyle gider, başı sonu bilinmez.
Bilinen şeyler ise her zaman söylenmez."

Devam edecek (bu sefer bu kadar ara koymayacağım, inşallah, sanırım bir de umarım, her zamanki gibi). Zor örnekler de gelecek dedim noktayı koydum.

Genel Bilgiler/Giriş: http://forum.ubuntu-tr.net/index.php/topic,15404.0.html
Diziler:                     http://forum.ubuntu-tr.net/index.php/topic,16724.new.html#new
susema

heartsmagic

Arayı uzatmaman dileğiyle, eline sağlık :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

sema


Ben de öyle umuyorum, daha bir şiddetli.. Teşekkür (yok yok uzatmayacağım, bilmiyorum :P, yok yok cidden)..
susema

onuragtas

System.out.println("Hadi gülüm yandan yandan.");