Bilgisayar Bilimleri -15- Sıralı, Şartlı ve Tekrarlayan İşlemler

Algoritmaları daha önceki yazılarımızda anlatsak da algoritmalar sadece sıralı talimatlar yığını basitliğinde olmadığı gibi bilgisayarlar da makine komutu bakımından sadece sıralı talimatları yerine getiren makineler değildir. Bu talimatlar elbette bir sıra ile yerine getirilir fakat bazıları şart işlemlerini yerine getirerek iki talimattan birini yerine getirdiği gibi bazı komutlar da belli bir komutun veya komut dizininin tekrarlanma işlemini yapmaktadır. Bu algoritma yapılarını ben akış diyagramında vermek yerine yalancı kod vasıtasıyla doğal dil üzerinden vereceğim. Programlama dillerini anlattığım sırada ise bunun programlama dillerindeki karşılıklarını görebiliriz. Okulda akış diyagramlarını gördüğüm için bir daha görmeye tahammül edemiyorum. 🙂

Daha önce verdiğimiz algoritmalarda belirli ve dizili talimatlar hiçbir engele veya ikinci duruma karşılaşmadan her biri bir kere yürütülmek üzere başlangıç ve bitiş noktaları arasında sıralı olarak yürütülüyordu. Burada biz sıralı işlemleri anlatacak olsak da bunu daha önce gördünüz ve biliyorsunuz. Sıralı (Sequental) işlemler anlaması en kolay ve en basit yapılardır. Sadece belli bir sıra ile bir kereliğine yürütülecek komutların dizilimidir. Şimdi sıralı işlemlere dair algoritma örnekleri verelim.

  • (Başla)
  • Kağıda bir güneş çiz
  • Kağıda bulut çiz 
  • Kağıda dağları çiz
  • Kağıda ev çiz 
  • Ormanda mutlu bir ağaç çiz 
  • (Bitir)

Burada manzara resmi yapma problemine karşılık bir çözüm algoritması oluşturduk. Bu algoritmayı iyi bir resim çizen birinin eline verirsek çok güzel sonuçlar ortaya çıkabilir. Biz bu çözümü resimden anlayan birine getirdiğimiz için uygun bir çözüm oldu. Ayrıca dikkat ederseniz burada belli bir sıraya göre dizilmiş işler yığınından başka bir şey göremezsiniz. Kağıt yırtılırsa ne olacak? Birden fazla ev çizmek için ne yapmalı? Elde belli bir renkte boya yoksa hangi benzeri kullanılmalı? gibi sorulara bir cevap getirmedik. Bu sorunlar resim çizme sırasında karşımıza çıktığında buna bir çözüm getirmediğimizden ortaya istenmeyen bir sonuç çıkacaktır. Eğer bu çözüm yine ortada sorun yokken işletilirse bu sefer doğru yapılmış iş bozulacaktır. Demek ki belli bir şartı bu algoritmaya eklememiz gereklidir. Şimdi az çok yemek yapabilen biri bizden omlet tarifi istedi diyelim. Biz buna çözüm olarak öncelikle bir algoritma tasarlamalıyız. Sıralı işlemler kullanarak şöyle başarılı bir algoritma yazabiliriz.

  • Buzdolabından iki yumurta al. 
  • Yumurtaları bir sahana kır. 
  • Yumurtaları karıştır. 
  • Tuz ekle. 
  • Peyniri ekle. 
  • Tavayı al.
  • Tavayı ocağa koy.
  • Tavaya yağ ekle.
  • Harcı dök.
  • Pişene kadar karıştır. 
  • Tabağa koyup servis et.

Burada sıralı işlemler ile yaptığımız algoritmayı şimdi şartlı işlemleri düşünerek anlatalım.

Şartlı İşlemler

Yukarıda omlet yapmak için çok güzel bir algoritma yazdık. Ama bu algoritmayı harfi harfine uygulayacak ve uygulama esnasında oluşan aksaklıkları giderecek bir aşçımız var. Bilgisayarlar ise böyle değildir ve karşılarına gelen iki seçenekten birini seçmekten bile acizdirler. O yüzden hangi durumda hangi seçeneği seçeceğini, ne olursa ne yapması gerektiğini, ne olursa ne yapmaması gerektiğini hep bizim belirlememiz gereklidir. Şimdi biraz daha aptal birine göre bu algoritmayı yeniden yazalım.

  • EĞER Buzdolabında iki yumurta VARSA al DEĞİLSE işi bırak.
  • Yumurtaları bir sahana kır. Kabuk düştü İSE kabukları ayıkla.
  • Yumurtaları karıştır. 
  • Tuz ekle. EĞER Tuz 3 gramdan fazla İSE 3 grama eşitle.
  • Peyniri ekle. 
  • Tavayı al.
  • Tavayı ocağa koy.
  • Tavaya yağ ekle.
  • EĞER Yağ 150 dereceden fazla İSE Harcı dök.
  • Pişene kadar karıştır. 
  • Tabağa koyup servis et

Burada düşündüğümüz belli aksilikler ve ikiliklere karşı şart komutları ile tedbirimizi aldık. Artık işleyicinin ne yapacağını bilemediği sırada ne yapacağını biz söylüyoruz. Örneğin buzdolabında iki yumurta varsa al yoksa hiç yapma dedik. Normal bir insan buzdolabında yumurta yoksa yemeğin yapılmayacağını anlar fakat bilgisayar buzdolabında yumurta olup olmadığına bakmadan bizim yazdığımız yumurta alma işlemini yapacaktı. Eğer yumurta yoksa ne alacaktı? Elbette hiçbir şey. Bu durumda karşımıza omlet değil erimiş peynir gelecekti. Emin olun, bilgisayarın neden böyle olduğu hakkında hiçbir fikri de olmayacaktı!.  Yukarıda şartlı işlemleri normal program akışı dışında gerçekleşebilecek sorunların çözümünde kullandık. Şartlı işlemler düz bir program akışı üzerine ilave edilebileceği gibi bazı programlar yapısından dolayı şartlı işlemlerin kullanılmasını zorunlu kılar. Örneğin renk sensörü ile domatesleri ayıran bir sistemimiz olsun. Bunun algoritmasını şöyle yazabiliriz.

  • Domatesin rengini oku
  • EĞER domates yeşil ise ham olarak ayır değilse olgun olarak ayır. 

Burada domatesler karışık olarak geliyor ve normal bir program akışı bu ikilik üzerine kurulmuştur. Yani bu karar yapısı istisna durumlarda değil sürekli olarak çalıştırılacak bir komut olarak karşımıza çıkmakta. Biz doğal dilde şartlı ifadeleri kullandığımız için bunu yalancı koda aktarmamız oldukça kolay olmaktadır. Şartlı ifadeler yüksek seviye programlama dillerinde de doğal dile benzer bir söz dizimine sahiptir. Yalnız burada mantık işlemlerine tabi tutulmaktadır. Değilse, Eşitse, Büyükse, Küçükse, Büyük Eşitse, Küçük Eşitse, Şundan büyükse ve şundan küçükse gibi karmaşık mantık şartlarını biz kendimiz belirleriz ve iki değeri karşılaştırarak bu şart ifadesini yazarız. Şimdi bu kadarını bilip işin böyle yürüdüğünü bilmeniz yeterlidir. Ayrıntılarını programlama dillerini anlatan kaynaklarda görebilirsiniz.

Tekrarlayan İşlemler

Tekrarlayan işlemler şartlı işlemlere oldukça benzerlik göstermektedir. Tekrarlayan (Iterative) işlemleri biz aynı komutun belli bir şarta bağlı olarak veya belli bir sayıda ancak birden fazla çalıştırılması gerektiği yerlerde kullanırız. Örneğin bir yazıcıdan bir sayfanın birden fazla kopyasını almak istediğimizde sıralı işlemlere göre şöyle bir algoritma yazabiliriz.

  • Kopyayı bastır
  • Kopyayı bastır
  • Kopyayı bastır
  • Kopyayı bastır
  • Kopyayı bastır

Bu durumda elimizde beş tane kopya olsa da biz beş tane kodu alt alta gereksiz yere sıraladık. Üstelik sayı miktarı birkaçla sınırlı olmadığı ve bir değişken ifadeye bağlı olduğu zamanlar bunu ifade etmemiz oldukça zor olacaktır. Eğer yüz tane kopya çıkarmak isteseydik aynı komutu yüz defa alt alta yazacaktık. Eğer bir değişken değer sayısı kadar çıkaracak olsaydık bu değişken değeri bilgisayar değil biz bilecektik ve bunun adedince komut yazacaktık. Eğer kullanıcının girdiği bir değer ise bunu bilmemiz mümkün bile olmayacaktı. Bunun için şu şekilde döngüler yazılabilir.

  • Kullanıcıdan ADET verisini oku.
  • ADET verisi ile KOPYA SAYISI eşit olana kadar aşağıdaki işlemlere devam et.
  • Kopyayı bastır
  • Kopya sayısını bir artır.

Görüldüğü gibi öncelikle bir şart ifadesi kullanıp ardından tekrarlama ifadesini ekledik. Şartımız ise kullanıcıdan alınan ADET verisinin KOPYA SAYISI verisine eşit olmasıdır. İki değer de değişken olduğu için bunların sayısını önceden bilip sıralı komut halinde yazmamız mümkün değildir.

Sıralı, şartlı ve tekrarlayan ifadeler algoritmaların temelini oluşturmaktadır. Aynı zamanda bunları programlama dillerinde ve hatta makine kodunda karşılığını görmemiz mümkündür. O yüzden programlamaya giriş yapacakların öğrenmesi gereken önemli konulardan biridir. Bu konu ile algoritmaları ve programcılığın temellerini bitiriyoruz ve programlama dillerine giriş yapıyoruz.

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

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

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...

1 Response

  1. Murat dedi ki:

    Harika anlatım.
    Teşekkürler

Bir cevap yazın

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