Algoritmalar - enverbagci.net

Download Report

Transcript Algoritmalar - enverbagci.net

Algoritmalar
(Algoritms)
Problem
• Bir işlemin, otomasyonun yada bilimsel hesaplamanın
bilgisayarla çözülmesi fikrinin ortaya çıkmasına problem denir.
Bu tip fikirlerde insanların bu sorunları beyinle çözmeleri ya
imkansızdır ya da çok zor ve zaman alıcıdır. Bu tip bir sorunu
bilgisayarla çözebilme fikrinin ortaya çıkması bir bilgisayar
probleminin ortaya çıkmasına neden olmuştur.
• Bazen de bir işletme veya yönetimin otomasyonunu sağlamak
amacı ile bu tip problemler tanımlanır.
Problem Çözümü
• Problemi Çözebilmek için öncelikle sorunun çok net olarak programcı
tarafından anlaşılmış olması gerekir. Tüm ihtiyaçlar ve istekler
belirlenmelidir. Gerekiyorsa bu işlem için birebir görüşmeler
planlanmalı ve bu görüşmeler gerçekleştirilmelidir.
• Problemin Çözümüne ilişkin zihinsel alıştırmalar yapılır. Bu
alıştırmaların bilgisayar çözümüne yakın olması hedeflenmelidir. Bir
sorunun tabii ki birden fazla çözümü olabilir. Bu durumda bilgisayar
ile en uygun çözüm seçilmelidir. Çünkü bazen pratik çözümler
bilgisayarlar için uygun olmayabilir.
• Oluşturulan Çözüm Algoritma dediğimiz adımlarla ifade edilmelidir.
• Bu algoritmanın daha anlaşılabilir olması için Akış Çizgesi
oluşturulmalıdır.
• Uygun bir programlama dili seçilmeli ve oluşturulan algoritma ve
akış çizgesi bu programlama dili aracılığı ile bilgisayar ortamına
aktarılmalıdır.
Program
• Problem Çözümü kısmında anlatılan adımlar uygulandıktan
sonra ortaya çıkan ve sorunumuzu bilgisayar ortamında çözen
ürüne Program denir.
• Bazı durumlarda bu ürüne yazılım denebilir.
Programlama
• Çok iyi tanımlanmış bir sorunun çözümüne dair adımlar ile
çözümün oluşturulup bunun bir programlama dili ile bilgisayar
ortamına aktarılması Programlama olarak adlandırılır.
Programlama Dili
• Bir problemin algoritmik çözümünün
bilgisayarda yazılmasını sağlayan kurallar
dizisidir.
Bazı programlama dilleri
• MATLAB, Delphi, Pascal, Fortran, Lisp
• C, C++, C#, Visual Basic, Java
Algoritma
• Bir sorunu (problemi) çözebilmek için gerekli olan sıralı
mantıksal adımların tümüne Algoritma denir.
• Algoritma doğal dille yazıldığı için formal değildir.
• Bir algoritma için aşağıdaki ifadelerin mutlaka doğrulanması
gereklidir.
• Her adım son derece belirleyici olmalıdır. Hiç bir şey şansa bağlı
olmamalıdır.
• Belirli bir sayıda adım sonunda algoritma sonlanmalıdır.
• Algoritmalar karşılaşılabilecek tüm ihtimalleri ele alabilecek kadar
genel olmalıdır.
Algoritma(devamı)
• “İşine gitmek üzere uyanan birinin yapması
gereken işler” algoritması:
1.Yataktan kalk
2.Pijamalarını çıkar
3.Duş al
4.Elbiselerini giy
5.Kahvaltını yap
6.Arabana bin ve işe git
• Sıra önemlidir. 3 ve 4 nolu adımlar yer
değiştirirse durum nasıl olur?
Sözde Kod (Pseudo Code)
• Pseudo Code (Sözde Kod), bir algoritmanın yarı programlama
dili kuralı, yarı konuşma diline dönük olarak ortaya koyulması/
tanımlanmasıdır. Bu şekilde gösterim algoritmayı genel
hatlarıyla yansıtır.
• Örnek:
–assign (ilkdeğer) value (100)
–if (sayı<x)
then (ilk satıra git)
else (son satıra git)
–while (döngü<girilen_değer)
do assign (toplam) value (toplam+döngü)
Gerçek Kod (Real Code)
• Real Code (Gerçek Kod), algoritmanın herhangi bir
programlama diliyle, belirli bir veri yapısı üzerinde
gerçekleştirilmiş halidir.
• Bir algoritmanın gerçek kodu, yalnızca tasarlandığı veri yapısı
üzerinde koşar; veri yapısı değiştirildiğinde algoritmanın
gerçek kodu üzerinde oynamalar yapılmalıdır.
Derleyici
• Bir programlama dili ile bilgisayara aktarılan programın
bilgisayarın anlayabileceği Makine Diline çevirmeyi sağlayan ve
yazılan programda söz dizim hatalarının olup olmadığını bulan
yazılımlardır.
• Her Programlama dili için bir derleyici olması gerekmektedir.
Derleyici Programları
• Her bir programlama dilinde kod yazmak için geliştirilmiş çok
sayıda derleyici programı vardır. Örneğin C programlama
dilinde kod yazmak için dev c++, Turbo C, Borland C, Microsoft
Visual Studio gibi…
Kaynak ve Amaç Program
• Programın, bir programlama diline bağlı olarak hazırlanan
simgesel kodlardan oluşan kısmına kaynak program (source
code) adı verilir.
• Bu kaynak programın derlenip bilgisayarda çalışabilecek
makine kodlarına çevrilmiş koduna ise amaç program ismi
verilir.
Algoritma Yazımı
• Sözde kod yada diğer deyimle algoritma hazırlanırken bazı
kullanımlar vardır. Bunlar şunlardır:
•
•
•
•
•
OKU: Veri girişinin yapılacağını belirler.
EĞER…İSE…DEĞİLSE….: Şart belirtmek için kullanılır.
GİT… : Belirli bir adıma yönlendirmek için kullanılır.
DÖN ..DEN..
DÖNGÜ SONU :Döngüleri belirtmek için kullanılır.
Yukarıdaki gösterimlerin ingilizce karşılıkları da algoritma
hazırlamada kullanılmaktadır.
Tanımlayıcı(değişken)
• Program yazan kişi tarafından düşünülüp oluşturulan ve programdaki
değişkenleri, sabitleri, kayıt alanlarını, alt programları, vs.. adlandırmak
için kullanılan kelimelere tanımlayıcı denir.
• Bu kelimeler isimlendirilirken kurallara dikkat edilmelidir:
İngiliz alfabesindeki A-Z veya a-z arası 26 harf kullanılabilir.
0-9 rakamları kullanılabilir.
Sembollerden alt çizgi kullanılabilir. ( _ )
Tanımlayıcı ifadeleri harf veya altçizgi ile başlayabilir ama rakamla başlamaz.
İsimler oluşturulurken boşluk kullanılmamalıdır.
maaş katsayısı
değil
maas_katsayisi
Algoritmada Yapılan İşlemler
• Aritmetiksel işlemler
toplama, çıkarma, ..
• Mantıksal işlemler (LOGİC)
ve, veya , değil
Aritmetiksel işlemler
•
•
•
•
•
Toplama
Çıkarma
Çarpma
Bölme
Üs alma
a+b
a-b
a*b
a/b
a^b
İşlem önceliği
Matematiksel işlemler içeren kümenizin
içindeki matematiksel işaretlerin bir işlem önceliği
vardır.
• İşlem Önceliği Sırası
1. Parantezler
(
)
2. Üs alma a^b
3. Çarpma ve bölme
a*b veya a/b
4. Toplama ve çıkarma
a+b veya a-b
• Aynı önceliğe sahip işlemler yan yana bulunuyorsa işlem
önceliği genelde soldan sağa doğrudur. X=2*3/6+2
Karşılaştırma İşlemleri
• Eşittir
• Eşit değildir
• Büyüktür
• Küçüktür
• Büyük eşittir
• Küçük eşittir
=
<>
>
<
>=
<=
Mantıksal İşlemler
• Programlarda, birden fazla karşılaştırma ifadesi bir anda
kullanılmak istenebilir. Bu gibi durumlarda mantıksal ifadeler
kullanılması zorunludur.
MANTIKSAL
İŞLEMLER
• VE
• VEYA
• DEĞİL
KOMUTLAR
AND
OR
NOT
Mantıksal İşlem Sonuçları
Sonuç
Rakam olarak
Bilgisayar Dilinde
Doğru
Yanlış
1
0
True
False
(1)
(0)
Mantıksal İşlemler
VE (AND)
VEYA (OR)
DEGiL(NOT)
A
B
A VE B
0
0
0
0
1
0
1
0
0
1
1
1
A
B
A VEYA B
0
0
0
0
1
1
1
0
1
1
1
1
A
DEGiL A
0
1
1
0
Örnek
Bir işyerinde çalışan işçiler arasından yalnızca yaşı
23’ün üzerinde olup maaş olarak asgari ücret alanların
isimleri istenebilir. Burada iki koşulun da doğru olması
gerekmektedir. (Asgari ücret >=500)
1nci koşul
2nci koşul
Eğer Yaş>23 ve Maaş>=Asgari ücret ise
Yaz İsim
Örnek
• Bir sınıfta Bilgisayar dersinden 65 in üzerinde not almış
olup Seçmeli Yabancı Dil (İngilizce) veya Seçmeli Yabancı
Dil (Almanca) derslerinin herhangi birinden 65 in
üzerinde not alanların isimleri istenmektedir.
• Eğer Bilgisayar notu > 65 VE
(İngilizce > 65 VEYA Almanca > 65) ise
Yaz “Öğrencinin ismini”
Örnek Algoritma
1.
2.
3.
4.
5.
6.
7.
Başla
A sayısını gir
B sayısını gir
Eğer A>B ise Yaz “A sayısı, B sayısından büyüktür”
Eğer A<B ise Yaz “A sayısı, B sayısından küçüktür”
Eğer A=B ise Yaz “A sayısı, B sayısına eşittir”
Dur
Girilen A sayısı
3
Girilen B sayısı
Ekrana yazılan sonuç
7
A sayısı, B sayısından küçüktür.
Aktarma
Herhangi bir ifadenin sonucunu başka bir
değişkende göstermedir.
degisken = ifade
ifade kısmında matematiksel, mantıksal veya harfsel
(alfasayısal) ifade olabilir.
= sembolü atama operatörüdür. Bu operatör, sağda
hesaplanan ifadenin değerini degisken içine (sola) iletir.
Örnek
Klavyeden girilen üç sayının toplamını bulan algoritma.
1. Başla
2. t=0
3. OKU a
4. t=t+a
5. OKU b
6. t=t+b
7. OKU c
8. t=t+c
9. Yaz t
10. Dur
Döngü
• Bazı işlemler belli ardışık değerlerle veya belli sayıda
gerçekleştirilmektedir.
• Programda belirli komut bütünlerini belirli sayıda yaptırabilmek
için döngüler kullanılır.
• Algoritma yazarken döngü akış işlemlerinde genellikle sayaç kullanılır.
• Döngüsel işlemler akış diyagramı bölümünde daha detaylı
anlatılacaktır.
Aşağıdaki algoritma nasıl bir çıktı
verir?
1.
2.
3.
4.
5.
6.
7.
Başla
sayac=0
Eğer sayac>4 ise Git 7
sayac=sayac+1
Yaz sayac
Git 3
Dur
Aşağıdaki algoritma ne iş
yapmaktadır?
1.
2.
3.
4.
5.
6.
7.
8.
Başla
sayac=0
OKU sayi
Eğer sayi=0 ise Git 7
Eğer mod(sayi,2)=0 ise sayac=sayac+1
Git 3
Yaz sayac
Dur
Örnek:
123456
23456
3456
456
56
6
Bu çıktıyı veren algoritmayı tasarlayınız.
Cevap
1.basla
2.baslangic=1
3.i=baslangic
4.Yaz i
5.i=i+1
6.eğer i<=6 git 4
7.alt satıra geç
8.baslangic=baslangic+1
9.eğer baslangic<=6 git 3
10.Dur
Soru-1
• Klavyeden girilen not bilgisinin 0 ile 100 arası olup
olmadığını kontrol eden programı yapınız.
Soru-2
• Klavyeden girilen 20 tam sayı değerin en büyük
ve en küçük arasındaki farkı bulup ekrana yazan
programın algoritma ve akış diyagramını yapınız.
Soru-3
• Klavyeden girilen bir tam sayı eğer 1 ile 5 veya 7
ile 10 arasında ise, ekrana “Sayınız doğru
yerdedir.”, değilse “Sayınız yanlış yerdedir.”
yazınız. Aralık belirten sayılar da aramaya
dâhildir.
Akış Çizelgesi(Flow Charts)
• Bir algoritmanın daha görsel gösterimidir. Çizgiler, Dörtgen,
daire vb.geometrik şekillerle algoritmanın gösterilmesini
sağlar. Doğal dille yazılmadığı için daha formal olduğu
düşünülebilir.
Akış Çizelgesinde Kullanılan
Semboller
Örnek
• Sözde Kod(Algoritma)
-Başla
-OKU A,B
-Ort=(A+B)/2
-YAZ Ort
- DUR
Karar Verme
Karar Verme
Karar Verme
Döngü Yapısı
• Bu yapı kullanılırken, döngü sayacı, koşul bilgisi ve sayacın
artım bilgisi verilmelidir. Döngü sayacı kullanılmıyorsa sadece
döngüye devam edebilmek için gerekli olan koşul bilgisi
verilmelidir.
•
•
•
•
Genel olarak çoğu programlama dilinin döngüdeyimleri ;
•While
•Do-while
•For
• gibi yapılar üzerine kurulmuştur. Farklı dillerde bu yapılara
farklı alternatifler olsa da döngülerin çalışma mantığı genel
olarak benzerdir.
While Deyimi
• Koşul daha çevrim içerisine girmeden sınanır. Koşul olumsuz
olduğunda çerime hiç girilmez ve döngü içerisinde yapılması
gerekenler atlanır.
Do-While Deyimi
• Bu döngüdeyiminde, çevrim
en az bir defa olmak üzere
gerçekleşir. Çünkü koşul
sınaması döngü sonunda
yapılmaktadır. Eğer koşul
sonucu olumsuz ise bir
sonraki çevrime geçilmeden
döngüden çıkılır. Çevrimin
devam edebilmesi için her
döngü sonunda yapılan koşul
testinin olumlu
sonuçlanması gerekir.
For Deyimi
I=1,20,3
J=30,4,-2
K=1,80
• Diğer deyimlerden farklı olarak, döngü sayacı doğrudan koşul
parametreleri düzeyinde verilir.
• Döngü girmeden önce sayaç değişkenine başlangıç değeri
atanmakta ve daha sonra koşula bakılmaktadır. Döngü
içerisinde belirtilen işlemler yapıldıktan sonra sayaç değişkeni
arttırılmaktadır.
İç İçe Döngüler
• İçiçe döngü kurulurken en önemli unsur, içteki döngü
sonlanmadan bir dıştaki döngüye geçilmemesidir. Diğer bir
deyişle döngüler birbirlerini kesmemelidir.
• Aşağıdaki gösterimde en içteki döngü bir dıştaki döngünün her
adımında N kez tekrarlanır.
Örnek: Faktöriyel Hesabı
• N ile hangi sayının faktöriyelin
hesaplanacağı belirlenir ve N
çevrimlik bir döngü kurulur.
• İlk çevrimde 1!, ikinci
çevrimde 2! ve sırayla N’inci
çevrim sonucunda da N!
değeri hesaplanmış olur.
• Sayac>N koşulu oluştuğunda
döngüden çıkılır ve elde
edilen sonuç dış ortama
aktarılır.
Bu akış diyagramı ne yapmaktadır?
Akış diyagramının bazı dillerde yazımı
Akış diyagramının bazı dillerde yazımı
Soru-4
• Aşağıda verilen algoritmanın akış şemasını çizin ve programı
izleyerek ne iş yaptığını belirtiniz?
• BAŞLA
• Sayi1=15
• Sayi2=30
• Yaz Sayi1, Sayi2
• Gecici=Sayi1
• Sayi1=Sayi2
• Sayi2=Gecici
• Yaz Sayi1, Sayi2
• dur
Soru-5
• 2-16 arasındaki çift sayıların ortalamasını bulan programın
algoritma ve akış şemasını yazınız?
Soru-6
• Klavyeden girilen 10 tabanındaki sayıyı ikilik tabana çeviren
programın algoritmasını ve akış şemasını yazın.
Soru-7
• Bir aracın otopark ücretinin hesaplamasını aşağıdaki kurallara
göre yapan programın algoritma ve akış diyagramını yapınız.
• Kurallar:
• Araçların en fazla 24 saat kaldığı varsayılacak.
• Küçük araçlariçin 1 büyük araçlar için 2 değeri
girilecek(Örn:Otomobil için 1, kamyon otobüs için:2)
• Ücret tarifesi
• 0 - 2 saat Küçükler için:4 TL Büyükler için: 6 TL
2 - 8 saat Küçükler için:7 TL Büyükler için: 10 TL
8-24 saat Küçükler için:12 TL Büyükler için: 16 TL
Soru-8
• 10 ile 3000 arasındaki sayılardan 3 ve 10 ile tam bölünenlerin
toplamını bulan algoritmayı oluşturunuz?
Soru-9
• Girilen bir tamsayının asal sayı(sadece 1'e ve kendisine tam
bölünebilen olup olmadığını bulan programın algoritma ve akış
diyagramını yapınız.
• Örnek;Girilen sayı 5 ise;"5 asal
sayıdır" yazmalı .... Girilen sayı 6 ise;"6 asal sayı değildir“
yazmalı
Soru 10
• Girilen 2 basamaklı tamsayıyı yazıyla yazan programın
algoritma va kış diyagramını yapınız?
• Örnek;Girilen sayı 52 ise;"Elli İki" yazmalı
Soru-11
• Girilen iki adet tamının çarpımını toplama işlemi kullanarak
yapan programın algoritma ve akış diyagramını yapınız.