Temel C Programlama -14- Döngülere Giriş

Artık yapısal programlama dair temel kavramlara giriş yapıyoruz. Bu alanda ilk öğrenmemiz gereken konulardan biri döngülerdir. Döngüler routine (yordam) ve subroutine (altyordam) olarak Assembly dilinde makine komutları vasıtasıyla da yapılmaktadır. Çünkü bir programda en temel noktalar aritmetik işlem, mantık işlemleri, veri okuma ve yazma ve program döngüsüdür. Şu ana kadar programları yukarıdan aşağıya doğru satır satır bir çizgide yazıyorduk  ve program sırayla komutları işleyerek devam ediyordu. Biz program dosyasında bir noktaya gitmek istediğimizde veya bir program blokunu devamlı ya da bir süre çalıştırmak istediğimizde döngülere müracaat ederiz. Önceki verdiğimiz program örnekleri döngü ve karar mekanizması olmadan çok basit programlardan ibaret kalıyordu. Döngüleri ve ardından kararları öğrendiğimiz vakit artık daha karmaşık program yazabileceğiz.

Döngü ve karar mekanizmaları algoritmanın temelini oluşturmaktadır. Sadece döngü ve karar mekanizmalarını öğrenmekle bunları etkin ve doğru kullanacağımız anlaşılmasın. Bizim algoritma bilgimiz dahilinde bunları etkin bir biçimde kullanbiliriz. Algoritma kısaca bir problemi çözmeye yönelik işletilecek komutların belli bir düzende sıralanması demektir. Bu algoritma talimatlarını günlük hayatımızdaki işlere de uygulayabiliriz. Örneğin kahvaltı hazırlamak yönünde bir algoritma yazmamız gerekirse şu işleri sırayla yürütmemiz gerekir.

  • Mutfağa Git
  • Buzdolabını Aç
  • Peyniri ve Zeytini al
  • Çaydanlığa su koy
  • Ocağı yak
  • Demliğe çay koy
  • Su kaynayana kadar bekle
  • Su kaynadıysa çayı demle
  • Ekmek dolabına bak
  • Ekmek varsa kahvaltıya başla 
  • Ekmek yoksa ekmek almaya git
  • Ekmeklerin tamamı dilimlenene kadar ekmekleri doğra

Burada sadece düz talimatları değil belli şart ve döngüye bağlı talimatları da görmekteyiz. Örneğin su kaynayana kadar bekle dediğimizde bekleme işini suyun kaynamasına bağlarız ve suyun kaynayıp kaynamadığını sürekli denetleriz. Su kaynadıysa çayı demle talimatı da çayın demlenmesini suyun kaynamasına bağlamaktadır. Su kaynamadığı zaman çay demlenmeyecektir.

Ekmeğin var olup olmadığına göre iki farklı iş yapılmaktadır. En sonda ise ekmeklerin tamamı dilimlenene kadar doğrama işine devam etmemiz söylenmektedir. Eğer böyle bir şart koşmasaydık aynı işi şu şekilde yapmamız gerekirdi

  • Ekmeği dilimle
  • Ekmeği dilimle
  • Ekmeği dilimle
  • Ekmeği dilimle

Ekmeklerin tamamı dilimlenene kadar aynı işi defalarca sıralamak gerekirdi. Görüldüğü gibi gerçek hayatta kurduğumuz algoritma şimdi anlatacağımız döngülere ihtiyacı doğurmaktadır. Yani bu karar ve döngü yapılarını gerçek hayatta biz işimizde de kullanmaktayız. Gerçek hayattaki olayları programa aktarırken de bu algoritmaya göre bir akış diyagramı çizeriz. Bu akış diyagramını programa uygulamak içinse programlama dilindeki öğeleri ve kuralları kullanırız.

Bilgisayar programı yazmadan önce ise “Yalancı Kod” adı verilen günlük hayat diline daha yakın fakat bilgisayar mantığını içeren kodları yazarız. Oturup doğrudan kod yazmaya başlamadan önce bunları kullanmamız günlük hayat işlerini algoritmaya aktarmak ve bunu da program kodu haline getirmek arasında bir köprü görevi görmektedir. Bir insanın günlük hayat işlerini doğrudan doğruya programa aktarması zor bir iştir. Aynı Google Translate’in eskiden yaptığı çeviriler gibi düzensiz ve kararsız bir program ortaya çıkartır. O yüzden yazacağımız programı iyi düşünmeli ve kafamızda kurgulamalıyız. Ardından yalancı kod ve akış diyagramları kurmak kodu yazma esnasında bize yardımcı olacaktır.

Resim: Basit bir akış diyagramı

Programlama mantığını anlamak için akış diyagramları üzerinde çalışmak faydalı olacaktır. Akış diyagramı programlarını kullanarak basit programlar yazmak günümüzde kullanılan kutucukları birleştirerek program yazma işlemine (kodlama) benzese de profesyonel bir yöntem olarak her programlama diline uygulanabilir yapıdadır. Çünkü hazır kod veya fonksiyon değil en temel fonksiyonları yerine getiren diyagramları görürsünüz. Biz derslerimizde akış diyagramlarını anlatmayacağız.

Döngüler

Döngülerin yaptığı iş yukarıdan aşağıya doğru inen program akışını belli bir blok içerisinde bir şarta bağlı olarak sınırlandırmaktır. Bu aynı tren hatlarının makaslarla değiştirilmesi ve bir trenin bir hatta devamlı gitmesi gibidir. Bu hattın dairesel olduğunu yani dönüp durduğunu hayal edebilirsiniz. Bu durumda dönüp durulan bir hat olduğu için bunun adına döngü adı verilmektedir. Her döngünün başı ve sonu bulunmaktadır ve döngüden çıkılmadığı sürece döngünün sonuna gelindiğinde program akışı döngünün başına atlar ve döngünün sonuna kadar olan komutları işlemeye devam eder. Bir döngüyü şöyle tarif edebiliriz.

Döngü Başlangıcı 
   -Komut
   -Komut
   -Komut
   -Komut
Döngü Başına Git Komutu (Döngü Sonu)

Burada önce program akışı döngü başlangıcına girerek döngüye giriş yapmış olur. Sonrasında komutları habersiz olarak işlemeye başlar sonrasında ise döngü sonunda “Döngünün Başına Git” komutunu işlemek zorunda kalır. Bu durumda döngünün başına giderek az önce işlediği komutları tekrar işlemek zorunda kalır ve bu devamlı olarak böyle devam eder.

Sonsuz döngünün olmaması için döngü şartı kullanılır. Böylelikle döngüden çıkmak bir şarta bağlanmış olur. Örneğin 10 kere döngüde döndükten sonra döngüden çık, kullanıcı düğmeye basarsa döngüden çık gibi bir şart eklemek program akışını istediğimiz gibi denetlememizi sağlar. Döngü şartı ile döngü şu şekilde işleyecektir.

Döngü Başlangıcı
 -Komut
 -Komut
 -Komut
Eğer Şart Sağlanmazsa Döngü Başına Git (Döngü Sonu)

Bu durumda program akışının devamı şarta bağlanmış olup bizi sonsuz döngüden kurtarmaktadır. Biz burada komutları belli bir şart sağlanana kadar şartı sağlayabilmek kaydıyla yazarız ve şart sağlanınca döngüde kalmanın bir anlamı zaten kalmaz. Döngünün çalışma sebebi şartı sağlamak olduğundan döngü şartının önemli bir işi denetlemesi gereklidir. Örneğin bir harfi 100 kere yazdırmak istiyorsak şöyle bir komut kullanırız.

Döngü Başlangıcı
-Harf Yaz
Eğer 100 Kere Yazılmazsa Döngü Başına Git

Bu durumda 100 kere harf yazıldıktan sonra döngünün çalışması için bir sebep kalmayacaktır ve program akışına devam edecektir. Biz 100 kere bir harf yazdırmak istediğimiz zaman döngüleri kullanmasaydık 100 kere “Harf Yaz” komutunu peşpeşe yazmamız gerekecekti. Bu durumda hem biz yorulacaktık hem de program hafızasında gereksiz yere program yer kaplayacaktı. Bu yüzden tekrarlanan komutları işletmek için döngüleri kullanmak hem işimizi kolaylaştırır hem de performaslı program yazmamıza yardımcı olur.

Yukarıda gördüğünüz gibi herhangi bir program komutu kullanarak kafanızı karıştırmadık. Bu yazdıklarımız kendimize ait olan yalancı kodlardı. Yalancı kodları herkes kendine göre istediği dilde yazabilir. Yalancı kodun konuşma diline yakın olması ve aynı zamanda bilgisayarın mantığını içermesi etkili olması için yeterlidir. Döngülere giriş konumuz yeterince uzadığı için burada bitiriyoruz sonraki başlıkta döngü şartlarını sağlayan ilişki operatörlerini anlatacağız.

Bizi Facebook grubumuzda takip etmeyi unutmayın. Bilgili ve öğrenmeye hevesli bir topluluk oluşturmak istiyoruz.

https://www.facebook.com/groups/1233336523490761/

UYARI!!

Gökhan Dökmetaş

"Arduino Eğitim Kitabı" ve "Arduino ve Raspberry PI ile Nesnelerin İnterneti" kitaplarının yazarı. Başkent Teknoloji ve Dedektör Merkezi'nde Ar-ge Sorumlusu. Araştırmacı-Yazar.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.