BİLGİSAYAR PROGRAMLAMA Ders 2: Algoritma ve Akış Şemaları Yrd. Doç. Dr. Andaç MESUT Trakya Üniversitesi Bilgisayar Mühendisliği
Problem Çözme Günlük hayatımızda ya da bilgisayarda çözmemiz gereken bir problem ile karşılaştığımızda yapılması gerekenler problem çözme tekniği olarak adlandırılmaktadır. Çözüm aşamaları aşağıdaki gibidir. Problemin hiçbir kuşkuya yer kalmaksızın anlaşılması Çözüme ulaşmak için gerekli ara işlemlerin belirlenerek sıralanması Ara işlemlerin sırasıyla uygulanması ve sonucun elde edilmesi
Algoritma Verilen herhangi bir problemin çözümüne ulaşmak amacıyla uygulanması gereken adımların hiçbir karışıklığa meydan vermemesi için sıralı ve düzenli bir şekilde yazıyla ifade edilmesine algoritma denilmektedir. Her algoritmanın sadece bir başlangıcı ve bir bitişi bulunmaktadır. Algoritmada adımlar sırasıyla işlenmektedir.
Algoritmanın hazırlanması Diğer bir deyişle algoritma, verilerin, bilgisayara hangi çevre biriminden girileceğinin, problemin nasıl çözüleceğinin, hangi basamaklardan geçirilerek sonuç alınacağının, sonucun nasıl ve nereye yazılacağının sözel olarak ifade edilmesi biçiminde tanımlanabilir. Algoritma hazırlanırken, çözüm için yapılması gerekli işlemler, öncelik sıraları göz önünde bulundurularak ayrıntılı bir biçimde tanımlanmalıdırlar.
Akış Şeması Sorunun çözümü için oluşturulmuş algoritmanın görsel olarak şekillerle ifade edilmesine akış şeması (flow chart) denilmektedir. Akış şemalarında algoritmanın adımları simgeler şeklinde kutular içine yazılmaktadır ve adımlar arasındaki ilişkiler ve akış yönü oklar ile gösterilmektedir.
Akış Şemasının Avantajları Birbiri ile ilgili adımlar arasındaki mantıksal ilişkiyi gösterirler. İzlenmesi ve anlaşılması kolaydır. Şartlara bağlı olarak ortaya çıkan olayların takip edilmesi mümkündür. Belli bir standarda göre hazırlandıklarından herkesçe anlaşılabilir ve birden fazla kişi aynı şema üzerinde çalışabilir.
Akış Şeması Hazırlama Kuralları Başlangıç ve bitiş uçları tanımlanmalıdır. Standart semboller kullanılmalıdır. Birbirini kesen akış hatları kullanılmamalıdır. Basit kararlar alınmalıdır. Şema belli bir yönde hazırlanmalıdır.
Akış Şeması Elemanları Akış şemasının başlangıcını yada bitişini belirtir. Veri girişi yapılacağını belirtir. Ekranda görüntüleme yapılacağını belirtir.
Akış Şeması Elemanları Yazıcıya çıktı olacağını belirtir. Hesaplama ya da değerlerin değişkenlere aktarımını gösterir. Aritmetik ve mantıksal ifadeler için karar verme ya da karşılaştırma durumunu gösterir.
Akış Şeması Elemanları Yapılacak işler birden fazla sayıda yinelenecek ise yani iş akışında döngü var ise bu sembol kullanılır. İki nokta arası ilişkiyi gösterir. Döngü sonunu göstermek için ya da akış şemasının başka bir yere bağlantısını göstermek amacıyla kullanılır. Fonksiyon çağırılacağını belirtir. Akış Yönü İş akışının yönünü belirtir.
Akış Şemaları Akış şemaları içerik ve biçimlerine göre genel olarak üç grupta sınıflandırılabilirler. Doğrusal akış şemaları Mantıksal akış şemaları Döngü içeren akış şemaları
Doğrusal akış şemaları İş akışları, giriş, hesaplama, çıkış biçiminde olan akış şemaları bu grup kapsamına girer. Yapısında karar alma ya da döngü ifadeleri içermeyen akış şemalarıdır.
Örnek-1 (Ekrana Merhaba Dünya Yazdırma) Algoritması Akış Şeması (doğrusal) Adım 1: Başla Adım 2: Ekrana ‘Merhaba Dünya’ yazdır. Adım 3: Dur Başla Merhaba Dünya Dur (Son-Bitir) C Kodu #include <stdio.h> void main() { printf("Hello World"); }
Örnek-2 (İki Sayıyı Toplama ve Görüntüleme) Algoritması Akış Şeması (doğrusal) Adım 1: Başla Adım 2: Birinci sayıyı gir Adım 3: İkinci sayıyı gir Adım 4: İki sayıyı topla Adım 5: Toplam sonucunu ekranda görüntüle Adım 6: Dur Başla A B Değişkenler: A: Birinci sayı B: İkinci sayı C:Toplam sonucu C=A+B Adım 1: Başla Adım 2: A’yı gir Adım 3: B’yi gir Adım 4: C=A+B Adım 5: C’yi ekranda görüntüle Adım 6: Dur C Dur
Mantıksal akış şemaları Geniş ölçüde mantıksal kararları içeren akış şemalarıdır. Hesap düzenleri genellikle basittir. Verilen koşulun doğru yada yanlış olmasına göre iş akışı yönlendirilir. Koşul Evet (Doğru) Hayır (Yanlış)
Örnek-3 (Klavyeden Girilen 2 sayıdan birincisi büyük ise çarpma, aksi durumda toplama yapan algoritma ve akış şeması) Algoritması Akış şeması Değişkenler: X: Birinci sayı Y: İkinci sayı S:Toplam sonucu Başla X Adım 1: Başla Adım 2: X’i gir Adım 3: Y’yi gir Adım 4: X>Y ise S=X*Y hesapla adım 6’ya git Adım 5: X<=Y ise S=X+Y hesapla Adım 6: S’i görüntüle Adım 7: Dur Y X>Y Evet S=X*Y Hayır S=X+Y S Dur
Döngüsel Akış Şemaları Sorunun çözümü için, çözümde yer alan herhangi bir adım ya da aşamanın birden fazla kullanıldığı akış şemalarına denir. İş akışları genel olarak giriş ya da başlangıç değeri verme, hesaplama, kontrol biçiminde olmaktadır.
Örnek-4 (Klavyeden 5 kişinin doğum yılını girip 2013 yılındaki yaşını hesaplayan algoritma ve akış şeması) Algoritması Değişkenler: dy : kişinin doğum yılı yas: kisinin yaşı i : sayaç (5 kişi olup olmadığını kontrol eder) Adım 1: Başla Adım 2: i=1; Adım 3: dy’yi gir Adım 4: yas=2013-dy Adım 5: yas’ı ekrana yazdır Adım 6: i<5 ise i’yi 1 arttır, adım 3’e git Adım 7: Dur
Örnek 4 (Devam) Akış şeması I (Döngü ifadesi içermeyen) Akış şeması II Artım değeri Başlangıç değeri Akış şeması I (Döngü ifadesi içermeyen) Akış şeması II (Döngü şekli içeren) i, 1, 5, 1 Başla Başla i,1,5,1 i=1 Döngü Değişkeni Bitiş değeri dy dy yas=2013-dy yas=2013-dy i=i+1 yas yas i Evet i<5 Hayır Dur Dur
Örnek 5 (1’den 10’a kadar sayıları ekranda görüntüleyen akış şeması) Kontrol İfadesiyle Döngü İfadesiyle Başla Başla i=1 i,1,10,1 i i i=i+1 i Evet i<10 Hayır Dur Dur
Örnek 6 (Girilen 5 sayının karelerini görüntüleyen akış şeması) Kontrol İfadesiyle Döngü İfadesiyle Başla Başla i=1 i,1,5,1 sayı sayı kare=sayı*sayı kare=sayı*sayı i=i+1 kare kare Evet i<5 i Hayır Dur Dur
Örnek 7 (Girilen 15 sayıdan pozitif olanların adedini bulup görüntüleyen akış şeması) Kontrol İfadesiyle Döngü İfadesiyle Başla Başla i=1, adet = 0 adet = 0 sayı i,1,15,1 sayı>=0 Evet sayı i=i+1 adet=adet+1 sayı>=0 Evet Hayır adet=adet+1 Evet i<15 Hayır i adet adet Dur Dur
Örnek 8 (50 öğrencinin notlarının ortalamasını bulan akış şeması) Kontrol İfadesiyle Döngü İfadesiyle Başla Başla toplam = 0 i=1, toplam=0 i,1,50,1 not not toplam=toplam+not i=i+1 toplam=toplam+not Evet i<50 i Hayır ortalama=toplam/50 ortalama=toplam/50 ortalama ortalama Dur Dur
Örnek 9 (Girilen sayının faktöriyelini hesaplayan akış şeması) Kontrol İfadesiyle Döngü İfadesiyle Başla Başla f=1,i=2 f=1 sayı sayı f=f*i i,2,sayı,1 i=i+1 f=f*i Evet i<sayı Hayır i f f Dur Dur
Örnek 10 (y=x2+5x-7 denkleminin x=[-4,4] aralığındaki çözümlerini bulan ve görüntüleyen akış şeması, (x’in artım değeri 0,5’tir.)) Kontrol İfadesiyle Döngü İfadesiyle Başla Başla x=-4 x,-4,4,0.5 y=x*x+5*x-7 y=x*x+5*x-7 y y x=x+0,5 i Evet x<4 Hayır Dur Dur
Örnek 11 (girilen sayının tek yada çift olduğunu bulup uygun mesajı görüntüleyen akış şeması) Başla % simgesi mod alma işlemidir. sayi mod 2 = 0 ise çift sayı olduğunu değilse tek sayı olduğunu ekrana gösteriyoruz. kalan adında bir değişken kullanmadan, kontrol ifadesi içinde sayi % 2 = 0 yazmamız da mümkün olabilirdi. sayı kalan=sayi%2 kalan=0 sayi%2=0 Evet Sayı çifttir Hayır Sayı tektir Dur
Örnek 12 (girilen sayının asal olup olmadığını bulan akış şeması) Kontrol İfadesiyle Döngü İfadesiyle Başla Başla sayı sayı k=0 k=0, i=2 i,2,sayı-1,1 sayi%i=0 Evet k=k+1 sayi%i=0 Evet i=i+1 k=k+1 Hayır i<sayı-1 Evet Hayır i Hayır k=0 Evet Sayı asal k=0 Evet Sayı asal Hayır Hayır Sayı asal değil Sayı asal değil Dur Dur
Örnek 12 (girilen sayının asal olup olmadığını bulan akış şeması) Döngü içinde verdiğimiz sayi%i=0 koşulu sağlandı ise asal olmadığı kesinleştiğinden, diğer sayılar için döngüyü devam ettirmek gereksizdir. Yandaki akış şemasında verilen çözüm, önceki slaytta verilene göre daha hızlı çalışır (özellikle büyük bir sayı girildiğinde). Başla Bu çözümde k değişkenini kullanmadık. Eğer i döngü değişkeni sayı değerine ulaştıysa hiç tam bölen bulunamadı demektir. Eğer bir bölen bulunursa döngünün içinden çıkılcağı için i değeri sayi değerinden küçük olur. sayı i,2,sayı-1,1 sayi%i=0 Evet Hayır Daha hızlı çalışması sağlanabilir mi? i 1) sayi-1 yerine sayi/2’ye kadar kontrol edilebilir (2 kat daha hızlı) 2) Sayının kareköküne kadar kontrol edilmesi de yeterli olur (bir sayı karekökünden büyük bir sayıya tam bölünebilir, ama o bölümün sonucu karekökünden küçük olacağı için, kareköke kadar bölen olup olmadığını kontrol etmek yeterlidir) sayi=i Evet Sayı asal Hayır Sayı asal değil Dur
Örnek 13 (girilen 3 sayıdan hangisinin en büyük olduğunu bulan akış şeması) Başla a,b,c a>b Evet a>c Evet En buyuk sayı a’dır Hayır Hayır b>c Evet En buyuk sayı b’dir Hayır En buyuk sayı c’dir Dur
Örnek 14 (girilen 10 sayıdan en büyüğünü bulan ve görüntüleyen akış şeması) Kontrol İfadesiyle Döngü İfadesiyle Başla eb=0 Başla i=1, eb=0 i,1,10,1 sayı sayı sayı>eb sayı>eb Evet i=i+1 Evet eb=sayı eb=sayı Hayır Hayır Evet i<10 i eb eb Dur Dur
Dizi Kavramı Diziler aynı tipteki elemanların yan yana sıralanmasıyla elde edilen bir bilgi kümesidir. İki boyutlu (örn: matris) yada daha çok boyutlu diziler de olabilir. Diziler akış şemalarında indisli gösterilirler: dizi(0), dizi(1), dizi(2), ……….., dizi(i) ilk elemanın indisi akış şemalarında 1 olarak gösterilse de, C programlama dilinde 0’dır.
Örnek 15 (10 elemanlı bir diziye bilgi girişi yapan ve diziyi görüntüleyen akış şeması) Kontrol İfadesiyle Döngü İfadesiyle Başla Başla i=1 i,1,10,1 dizi(i) dizi(i) i=i+1 Evet i<10 i Hayır i=1 i,1,10,1 dizi(i) dizi(i) i=i+1 i<10 i Evet Hayır Dur Dur
toplam=toplam+dizi(i) Örnek 16 (15 elemanlı bir sayı dizisine bilgi girişi yapılarak elemanların toplamını bulan akış şeması) Başla i,1,15,1 dizi(i) toplam=toplam+dizi(i) i toplam Dur
Örnek 17 (15 elemanlı bir sayı dizisine bilgi girişi yapılarak pozitiflerin ortalamasını, negatiflerin adedini bulan ve görüntüleyen akış şeması) Başla i,1,15,1 sayı(i) sayı(i)>=0 Evet poz_adet=poz_adet+1 toplam=toplam+sayi(i) Hayır neg_adet=neg_adet+1 i poz_ort=toplam/poz_adet poz_ort,neg_adet Dur
b(i)>=4 ve b(i)<=25 Örnek 18 (20 elemanlı bir sayı dizisine bilgi girişi yapılarak 4 ile 25 arasında olanların adedini bulan ve görüntüleyen akış şeması) Başla i,1,20,1 b(i) b(i)>=4 ve b(i)<=25 Evet adet=adet+1 Hayır i adet Dur
Örnek 19 (5 elemanlı bir sayı dizisine bilgi girişi yapılarak sayıları büyükten küçüğe doğru sıralayan ve sıralanmış diziyi görüntüleyen akış şeması) Başla i,1,5,1 i,1,5,1 sayı(i) sayı(i) i i Dur i,1,4 j,i+1,5 sayı(i)<sayı(j) Evet g=sayı(i) sayı(i)=sayı (j) sayı(j)=g Hayır j i
Algoritma ve Akış Şeması Alıştırma Soruları 1 ile 10 arasındaki sayıların karelerinin toplamını ekranda gösterin Girilen pozitif tamsayının kaç basamaklı olduğunu bulup ekranda gösterin Girilen 20 tamsayıdan çift sayıların toplamının tek sayıların toplamına oranını ekranda gösterin Girilen sayının 5’in kuvveti olup olmadığını ekranda gösterin Girilen 50 vize notunu vize dizisine, aynı öğrenci sıralaması ile girilen 50 final notunu da final dizisine yazıp, vizenin %30’u ve finalin %70’i hesabı ile 50 öğrencinin başarı notlarını sırası ile ekranda gösterin