Programlama Dersi Öğretim üyesi : Prof. Dr. Raşit KÖKER 2015-2016 Öğretim Yılı Bahar Yarıyılı Öğretim üyesi : Prof. Dr. Raşit KÖKER Araştırma görevlisi : Murat Erhan ÇİMEN Ali Furkan KAMANLI Kaynaklar: 1) Ders notları sunular 2) Dr. Fahri Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin Yayıncılık, 2013. 3) Dr. Rıfat ÇÖLKESEN, Veri Yapıları ve Algoritmalar, Bilgisayar Mühendisliği ve yazılım tasarımında, Papatya Yayıncılık, 2012. 4) Dr. Bülent Çobanoğlu, C/C++ ve Java Dilleriyle Algoritma ve Programlama, Abaküs Yayıncılık, 2016.
Dersin amacı: Algoritma geliştirme becerisi kazandırma, Programlama temel kavramlarını öğretme, Bir problemi bilgisayar ortamında çözebilme, Mevcut bir programdaki olası hataları anlayabilme, Matematiksel fonksiyonları bilgisayar ortamında çözebilme. Sözel-String işlemleri bilgisayar ortamında düzenleyebilme. Arama ve Sıralama işlemlerini yapabilme Dosyalama işlemlerini yapabilme
Değerlendirme: Ara sınav : % 60 Kısa sınavı: % 10 Ödev : % 20 Final : % 50
DEĞERLENDİRME SİSTEMİ YARIYIL İÇİ ÇALIŞMALARI SIRA KATKI YÜZDESİ Ara Sınav 1 60 Kısa Sınav 2 20 Ödev Toplam 100 Finalin Başarıya Oranı 50 Yıliçinin Başarıya Oranı
BÖLÜM 1 PROGRAMLAMAYA GİRİŞ
PROGRAMLAMA DİLLERİ Programlama dili, programcı ile bilgisayar arasındaki iletişimi sağlayan bir araç olup programların yazımında kullanılan bir notasyondur. Programlama dillerindeki komutlar genel olarak İngilizcedeki günlük konuşma dilindeki kelimelerden türetilmiştir. Algoritma: Bilgisayardaki işlemin/İşlemlerin gerçekleştirilmesinde izlenecek adımlara (adımlar dizisine), algoritma denir. Algoritmaların özel geometrik şekillerle çizilmiş hali de akış diyagramı olarak adlandırılmıştır.
Örneğin, ekrana bir yazı yazdırmak için kullanılan komutun değişik programlama dillerindeki karşılıkları Tablo-1.1’de; bilgi girme komutunun değişik programlama dillerindeki karşılıkları ise Tablo-1.2’de verilmiştir.
Programlama dilleri üç gruba ayrılır a. Düşük seviyeli diller: Makine dillerini içerir. b. Orta seviyeli diller: Makine dilinden biraz daha gelişmiş dilleri içerir. c. Yüksek seviyeli diller: Konuşma dillerine yakın dilleri içerir.
Yüksek seviyeli bir dilde yazılan programın çalışabilmesi için, bunun makine diline çevrilmesi gerekir. Bu dönüşümü ilgili yüksek seviyeli ‘derleyici’ olarak adlandırılan yazılımları (programları) gerçekleştirir. ‘Kaynak programın’ içeriğinin yeniden düzenlenme imkanı varken, ‘amaç programın’ içeriğine müdahale imkanı yoktur.
İŞLEMLER Bilgisayar programları ile gerçekleştirilen işlemler, genel olarak üç gruba ayrılır: a. Matematiksel (aritmetik) işlemler b. Karşılaştırma (karar) işlemleri c. Mantıksal (lojik) işlemler Şimdi, bilgisayar programları ile gerçekleştirilen işlemleri ayrıntılı bir şekilde inceleyelim.
a. Matematiksel İşlemler Bilgisayarda en sık kullanılan işlemler, matematiksel işlemlerdir. Temel aritmetik işlemler, matematiksel fonksiyonlar vb. bu gruba dahildir. Ondalıklı sayıların tam ve ondalıklı kısımlarını ayırmak için matematikte ‘ ‘ , ’ işareti kullanılırken; bu tür sayıların bilgisayar dilinde, tam ve ondalıklı kısımlarını ayırmak için ‘ . ‘ işareti kullanılır.
Sayının önünde herhangi bir işaret yok ise pozitif, ‘ – ‘ işareti varsa, negatif kabul edilir. Tablo-1.3’te matematiksel işlemler ve bilgisayar dilindeki karşılıkları, Tablo-1.4’te ise örnek matematiksel işlemler görülmektedir.
Matematiksel işlemler; programlarda, bilgisayar mantığına göre yeniden düzenlenmelidirler. Bilgisayar dilinde yazılmış matematiksel ifadelerde işlem öncelik sırası bulunmaktadır. Matematiksel işlemlerin öncelik sırası Tablo-1.5’te özetlenmektedir.
Matematiksel işlem öncelik sıraları çok önemlidir ve bilgisayar diline aktarılırken (kodlanırken) dikkatli olunmalıdır. Matematiksel ifade kodlanırken yapılacak olan küçük bir hata, işlem sonucunun yanlış çıkmasına neden olacaktır.
Not: Eğer bilgisayar diline kodlanmış bir matematiksel ifadede, aynı önceliğe sahip işlemler mevcut ise bilgisayarın bu işlemleri gerçekleştirme sırası soldan sağa (baştan sona) doğrudur.
Y = A*B/C denkleminde, aynı öncelik sırasına sahip çarpma ve bölme işlemleri bulunmaktadır. Bu durumda bilgisayar, önce A* B çarpma işlemini yapıp bulunan sonucu C’ye bölecektir.
Örnek-1.1: Tablo 1.6’da değişik matematiksel ifadelerin bilgisayar dilindeki karşılıkları verilmektedir. Verilen tabloda özellikle parantezlerin yerlerine dikkat ediniz.
Örnek-1.2: a=4, b=6, c=8, d=10 değerleri için bilgisayar dilinde kodlanmış üç ifadenin sonuçlarını inceleyelim. İfadeler matematiksel olarak aynı gibi görünse de, bilgisayar diline çevrilirken parantez farkı oluşturulmuştur.
1. denklem İfade: c. d/(a. d)+b+c. d/a Sonuç: 28 2. denklem İfade: c 1. denklem İfade: c*d/(a*d)+b+c*d/a Sonuç: 28 2. denklem İfade: c*d/a*d+b+c*d/a Sonuç: 226 3. denklem İfade: c*d/a*d+(b+c)*d/a Sonuç: 235
1. denklem için, İşlem öncelik sırası parantezlerde olduğu için, birinci ifadede ilk önce a*d işlemi yapılır: a*d = 4*10 = 40 Daha sonra çarpma ve bölme işlemleri yapılır: c*d/(a*d) = 8*10/40 = 80/40 = 2 c*d/a = 8*10/4 = 20 En sonunda da toplama işlemi yapılır: c*d/(a*d)+b+c*d/a = 2+6+20 = 28 İfadelerin matematiksel karşılıkları,
Örnek-1.3: a=1, b=2, c=3, d=4, e=-2 değerlerine göre aşağıdaki dört denklemin sonucunu bulalım. 1. ifade, a+d/b+d^2+2*a*b*c/d+e Sonuç: 20 2. ifade, (a+b)/c+d^2+2*a*b*c/(d+e) Sonuç: 23
3. ifade, a+b/(c+d)^2+2. a. b. c/d+e Sonuç: 2. 04 4 3. ifade, a+b/(c+d)^2+2*a*b*c/d+e Sonuç: 2.04 4. ifade, (a+b)/(c+d)^2+2*a*b*c/(d+e) Sonuç: 6.06 Aynı gibi görünen bu ifadeler, farklı sonuçlar vermektedir. İşlem adımları karşılaştırmalı olarak Tablo-1.7’de özetlenmektedir.
Örnek-1.4: a=-1, b=7, c=4, d=2 ve e=6 değerlerini kabul ederek aşağıdaki üç denklemin sonucunu hesaplayınız. 1. ifade, a+b+c/d+d-e^2+c+e+d/(b-e)^(1/2) Sonuç: -14 2. ifade, (a+b+c)/d+(d-e)^2+(c+e+d)/((b-e)^(1/2)) Sonuç: 33
3. ifade, (a+b)+c/d+d-e^2+c+e+d/b-e^1/2 Sonuç: -18.72
Örnek-1.5: A=8, B=8, C=2, D=4 ve E=2 değerleri için Tablo-1.9’daki denklemlerin sonuçlarını bulunuz.
Örnek-1.6: A=9 ve B=16 değerleri için Tablo-1.10’daki ifadelerin sonuçlarını bulunuz.
b. Karşılaştırma İşlemleri Bilgisayar; temel matematiksel işlemlerin yanında karar modelleri de üretebilir. Yani iki büyüklükten hangisinin büyük veya küçük olduğu, iki değişkenin birbirine eşit olup olmadığı gibi konularda karar verebilir. Karşılaştırma işlemleri olarak adlandırılan bu işlemler, sayısal ve alfa sayısal bilgilere uygulanabilmekte ve toplu halde Tablo-1.11’de verilmektedir.
Örnek-1.7: Aşağıda işlem basamakları verilen algoritmanın çalışma sonucunu bulalım. 1. Başla 2. A sayısını gir 3. B sayısını gir 4. Eğer A>B ise Yaz ‘’A sayısı, B sayısından büyüktür.’’ 5. Eğer A<B ise Yaz ‘’B sayısı, A sayısından büyüktür.’’ 6. Eğer A=B ise Yaz ‘’İki sayı birbirine eşittir.’’ 7 Dur
Verilen algoritmada; bilgisayara klavyeden iki sayı girilmekte (A ve B sayıları) ve bunlar birbiriyle karşılaştırılmaktadır. Karşılaştırma sonuçlarına göre; uygun mesajlar, ekrana yazdırılıp program sona ermektedir. Tablo-1.12’de girilen değişik sayılara karşılık oluşan program çıktıları verilmektedir.
Örnek-1.9: Aşağıdaki algoritmanın çalışmasını inceleyelim. 1. Başla 2. Bir karakter (A) gir 3 İkinci bir karakter (B) gir 4. Eğer A>B ise Yaz ‘’1. karakter, alfabetik olarak daha sonra.’’ 5. Eğer A<B ise Yaz ‘’1. karakter, alfabetik olarak daha önce.’’ 6. Eğer A=B ise Yaz ‘’Girilen karakterler aynı.‘’ 7. Dur
Yukarıdaki algoritmada; klavyeden iki karakter girilmekte ve birbiriyle karşılaştırılmaktadır. Aslında bu karşılaştırma; karakterler arasında değil, karakterlerin ASCII kodları arasındadır.
Eğer iki kelime girilir ve bu kelimelerin ilk karakterleri (harfleri) aynı ise, ikinci harfleri karşılaştırılır. İlk iki harf aynı ise, üçüncü harfler karşılaştırılır. Yani eşitlik durumunda; ilk farklı karaktere kadar – sözlüklerde olduğu gibi - karşılaştırmaya devam eder.
c. Mantıksal İşlemler Aritmetik ve karşılaştırma işlemlerini sonuçlandırabilen bilgisayar, temel mantık işlemlerini ( VE,VEYA,DEĞİL) de yapabilmektedir. Mantıksal işlem operatörleri, hem karar ifadelerinde hem de matematiksel işlemlerde kullanılırlar. Programlardaki karşılaştırma ifadelerinde; birden fazla koşulun belirli bir özellikte sağlanması istenebilir. Bu durumda araya mantıksal işlem operatörleri konulur. Tablo-1.15’te mantıksal işlem karşılıkları, Tablo-1.16’da temel mantıksal işlem sonuçları ve Tablo-1.17’de temel mantıksal işlemler verilmektedir.
‘’VE’’ işleminde; bütün koşullar doğru ise sonuç doğrudur ‘’VE’’ işleminde; bütün koşullar doğru ise sonuç doğrudur. ‘’VEYA’’ işleminde ise, sonucun doğru olması için koşullardan herhangi birisinin doğru olması yeterlidir. ‘’DEĞİL’’ işleminde ise sonuç daima koşulun tersidir. Not: Bütün şartların sağlatılması isteniyorsa koşullar arasına ‘VE’, herhangi birinin sağlatılması isteniyorsa ‘VEYA’ konulurken koşulu sağlamayanlar isteniliyorsa ‘DEĞİL’ mantıksal operatörü kullanılır.
Matematiksel işlemlerde olduğu gibi, mantıksal işlemlerde de ‘işlem öncelik sıraları’ vardır. Bunlar Tablo-1.18’de verilmektedir. Ayrıca mantıksal işlemlerin Tablo-1.19’da bazı özellikleri görülmektedir. Not: Mantıksal işlemlerde eğer ‘n’ tane değişken (koşul/durum) varsa , ‘2n’ tane durum oluşur.
Örnek-1.10: Bir işyerinde çalışan işçiler arasından yalnızca yaşı 23’ün üzerinde olup maaş olarak asgari ücret alanların isimleri istenmektedir. * Burada iki koşul vardır ve bu iki koşulun da doğru olması gerekir: Yani; Eğer Yaş>23 VE Maaş=Asgari ücret ise Yaz İsim işlemi istenmektedir. ‘Yaz’ komutu, 1. ve 2. koşulun her ikisi de sağlanıyorsa çalışır. Çünkü bu iki koşul ‘’VE’’ operatörü ile birbirine bağlıdır.
Eğer işçinin yaşı 22 olup da asgari ücret alıyorsa ekrana o işçinin ismi yazılmaz. 1. koşul yanlış (0), 2. koşul doğru (1) olduğundan 0 VE 1=0 olduğu için, ‘Yaz’ komutu çalışmaz. Asgari ücretin 150 TL kabul edilmesi durumunda oluşan birkaç değişik kombinasyon, Tablo-1.20’de verilmektedir.
Örnek-1.11: Bir sınıfta ‘’Bilgisayar’’ dersinden 65’in üzerinde not alıp, ‘’Türk Dili’’ veya ‘’Yabancı Dil’’ derslerinin herhangi birinden 65’in üzerinde not alanların isimleri istenmektedir. Burada üç koşul olduğundan 8 durum oluşur. ‘’Bilgisayar’’ dersinden 65’in üzerinde not almış olmak, temel koşuldur. Dolayısıyla ‘’Bilgisayar’’ dersinin notu, diğer derslerinin notlarına ‘VE’ işlemiyle bağlanmalıdır. Çünkü ‘VE’ işleminde, sonucun doğru olması için her iki koşulun da doğru olması gerekir. Diğer iki dersin notlarının herhangi birisinin 65’in üzerinde olması yeterli olduğundan, araya ‘VEYA’ işlemi konulur.
Bu durumda karşılaştırma ifadesini; Eğer Bilgisayar notu>65 VE (Türk Dili notu>65 VEYA Yabancı Dil notu>65) ise Yaz İsim veya sembolik olarak; Eğer BN>65 VE (TDN>65 VEYA YDN>65) ise Yaz İsim formunda yazabiliriz.
BN>65 durumu A, TDN>65 durumu B ve YDN>65 durumu C ile gösterilsin.
a=76, b=63 için c=a.b, d=a+b mantıksal işlem sonuçlarını hesaplayalım. Mantıksal operatörler; koşulları birbirine bağlamanın yanında, aritmetik işlemlerde ikili tabandaki sayıların bitleri arasında doğruluk koşullarını da test ederler. Örnek -1.12: a=76, b=63 için c=a.b, d=a+b mantıksal işlem sonuçlarını hesaplayalım. Önce sayıların ikili tabandaki karşılıkları hesaplanır. Daha sonra, karşılıklı bitlere aradaki mantıksal işlem uygulanır.
Sorular 1. Aşağıdaki denklemleri bilgisayar diline kodlayınız.
2. A=25 ve B=36 için bilgisayar dilinde kodlanmış aşağıdaki denklemlerin sonuçlarını bulunuz.
3. A=64, B=16 ve C=2 için aşağıdaki denklemlerin sonuçlarını bulunuz.
4. Karşılaştırma işlemlerinde neden ‘işlem öncelik sırası’ yoktur 4. Karşılaştırma işlemlerinde neden ‘işlem öncelik sırası’ yoktur? Tartışınız. 5. Programlarda, ‘’karar modellerine’’ neden ihtiyaç duyulmaktadır? 6. Dışarıdan girilen bir sayının 50’den büyük, 50’den küçük veya 50’ye eşit olup olmadığını bulup ilgili mesajı yazdıran programın algoritmasını yazınız. 7. ‘’Mantıksal operatörler’’ nerelerde kullanılmaktadır? Açıklayınız.
8. Mevcut olan ‘’VE’’,’’VEYA’’ ve ‘’DEĞİL’’ operatörleri kullanılarak yeni mantıksal operatörler oluşturulabilir mi? Tartışınız. 9. Bir sınıftaki öğrencilerden ancak Matematik (Mt) ile Türkçe (Tr) notu 50’ye eşit veya üzerinde olup Fizik (Fzk) veya Tarih (Th) derslerinin herhangi birisinden notu 50’ye eşit veya üzerinde olanlar ‘’Başarılı’’ sayılmaktadır. Buna göre aşağıdaki komut satırında koşullar arasına uygun parantez ve mantıksal operatörleri yerleştiriniz. Eğer Mt>=50 …. Tr>=50 …. Fzk>=50 .. Th>=50 ise Yaz ‘’Başarılı’’
10. A=33 ve B=77 değerleri için aşağıdaki işlemlerin sonuçlarını hesaplayınız.
11. Aşağıdaki doğruluk tablolarına göre karar komut satırlarını tamamlayınız. (ilgili mantıksal operatörleri ve parantezleri yerleştiriniz)
Eğer … A>50 … B>50 … C>50 … ise Yaz ‘’Doğru’’
Eğer … A>=45 … B>=50 … C>65 … ise Yaz ‘’Doğru’’
Eğer … A>=50 … B>49 … C>64 … D>=65 … ise Yaz ‘’Doğru’’
12. Bilgisayar diline kodlanmış aşağıdaki denklemlerin matematiksel karşılıklarını bulunuz. y= (A+B)/C*D + A^1/2*B y= A+B/C*D + A^1/(2*B) y= (A+B)/(C*D) + A^(1/2*B) y= A+B/(C*D) + A^(1/2*B) y= A+B/C*D + (A^(1/2))*B
13. A=5, B=6, C=7, D=8 için aşağıdaki ifadelerin sonuçlarını ‘’Doğru (1)’’ veya ‘’Yanlış (0)’’ olarak bulunuz.
14. Aşağıdaki alfa sayısal bilgiler için, karşılaştırma ifadelerinin sonuçlarını ‘’Doğru’’ veya ‘’’Yanlış’’ şeklinde bulunuz.