Bilgisayar Programlamaya Giriş I · İST 105 DERS NOTLARI Abdullah YALÇINKAYA . Bilgisayar...
Transcript of Bilgisayar Programlamaya Giriş I · İST 105 DERS NOTLARI Abdullah YALÇINKAYA . Bilgisayar...
2012
Bilgisayar Programlamaya
Giriş I İST 105 DERS NOTLARI
Abdullah YALÇINKAYA
Bilgisayar Programlamaya Giriş I 2012
2 Abdullah YALÇINKAYA
İST 105 – Bilgisayar Programlamaya Giriş
Amaç:
1. Bilgisayar donanımı ve bilgisayar yazılımlarının tanıtılması
2. Programlama dilleri ve program geliştirme tekniklerinin tanıtılması
3. Temel problem çözme tekniklerinden olan yukarıdan aşağı tasarım
tekniğinin tanıtılması ve bu teknikle algoritmaların yazılması.
Bilgisayar Nedir?
Bilgisayar, mantıksal ve aritmetik işlemleri çok hızlı biçimde yapan bir araçtır.
Günümüzün bilgisayarları, saniyede milyonlarca aritmetik işlem yapabilecek
kapasitededir.
İlk üretilen bilgisayarlar, oldukça büyük ve yavaştı. Ama gün geçtikçe küçüldüler
ve güçleri de hızla arttı. Örneğin, yirmi-otuz yıl önce bir odaya sığabilecek bir
bilgisayarın yaptığı işlerden çok daha fazlasını, bugünkü kişisel bilgisayarlar, daha
hızlı bir şekilde yapabilmektedir. Bu yüzden, bilgisayarlar günümüzde çok değişik
alanlarda ve ortamlarda kullanılmaktadır. Hemen-hemen her evde ve işyerinde
artık bilgisayar görmek mümkündür.
Bir bilgisayar sisteminin fiziksel yapısını oluşturan fare, klavye, ekran, işlemci,
disk, bellek gibi parçaların hepsi birden bilgisayar donanımı olarak
adlandırılmaktadır. Bilgisayarın çalışmasını denetleyen birer komutlar kümesi
olan programlar da bilgisayar yazılımı olarak adlandırılır. Bir bilgisayar sisteminin,
bu iki parçaya da ihtiyacı vardır. Her biri, diğeri olmadan hiçbir işe yaramaz.
Günümüzde, donanım fiyatları hızla düşmekte, ama yazılım maliyetleri tam
tersine artmaktadır. Bu dersteki amacımız bilgisayar yazılımı geliştirmek
olduğundan, biz yalnızca bilgisayar yazılımı ile ilgileneceğiz. Ancak kısaca
bilgisayar donanımından da söz etmek yararlı olacaktır.
Bilgisayar Programlamaya Giriş I 2012
3 Abdullah YALÇINKAYA
Bilgisayar Donanımı
Gördüğümüz ve dokunabildiğimiz bütün parçalar bilgisayar donanımını oluşturur.
Modern bir bilgisayar donanımı, aşağıdaki beş ana parçadan oluşur.
CPU (Central Processing Unit - Merkezi İşlem Birimi):
Bu birim, bilgisayarın çalışmasını düzenleyen ve programlardaki komutları tek tek
işleyen birimdir. İşlem hızına göre çeşitli modelleri vardır. Örneğin, Pentium
işlemci, 486 işlemci ya da Sparc işlemci dediğimizde, bilgisayarın Merkezi İşlem
Birimi (MİB - İşlemci) anlaşılmalıdır.
RAM (Random Access Memory – Rastgele Erişimli Bellek veya Ana
Bellek):
RAM, bir giriş cihazından veya bir ikincil depolama cihazından okunan veri ve
programların, çalıştırılan programlardan elde edilen sonuçların ve bir ikincil
depolama cihazına veya bir çıkış cihazına gönderilmeye hazır olan çıktıların
tutulduğu yerdir. Kısaca, programların ve verilerin kullanıldığı zaman depolandığı
yerdir. MİB işlemlerini, ana bellekte saklanan bu verilere ulaşarak yapar.
Buradaki “rastgele erişim” ifadesi bilgisayarın bellek içerisindeki herhangi bir
adrese doğrudan gidip bilgileri okuyabileceği veya yazabileceği anlamında
kullanılmaktadır. Ana bellekte veriler geçici olarak tutulur; başka bir deyişle
bilgisayar kapatıldığında bu veriler silinir. Çok kullanıcılı sistemlerde bilgisayar bir
kullanıcı için herhangi bir işi yapmayı bitirdiğinde, ana bellekteki aynı kısma diğer
kullanıcılar için işlenmesi gereken veri ve programlar yerleşir. Ana bellek diğer
bilgi saklama araçlarına oranla biraz daha pahalıdır.
Ana belleğin temel görevleri şöyle özetlenebilir.
1. Hali hazırda çalışan programların program deyimleri ve bu programların ihtiyaç
duyduğu verileri tutmak.
2. İşletim sistemi yüklendikten sonra ana bellekte sürekli olarak kalması gereken
işletim sistemi bileşenlerini tutmak.
Bilgisayar Programlamaya Giriş I 2012
4 Abdullah YALÇINKAYA
3. Programlar tarafından üretilen sonuçları tutmak.
4. Sabit disklere veya harici bir cihaza gönderilmeye hazır olan çıkış bilgilerini
tutmak.
Bellekte yerleşik olan veri ve programlara ihtiyaç halinde tekrar ulaşabilmek için
ana bellekteki her bölgenin bir adresi vardır.
Ana belleğin büyüklüğü; aynı anda çalışabilecek program sayısını ve programların
çalışma hızını etkiler.
Dış Bellek Birimleri (Secondary Memory Devices):
Ana bellekteki bilgiler (elektrik gücüne bağlı olarak), geçici süre saklanabildiği
için, uzun süre kalıcı olarak saklamak istediğimiz bilgileri dış bellek birimlerinde
depolarız. Bu araçlardan bazıları: CD (Compact Disc – Yoğun Disk), DVD (Digital
Versatile Disk – Çok Yönlü Sayısal Disk), Harici diskler ve sabit disklerdir. Burada
saklanan bilgiler, elektrik kesilmesinden etkilenmez. Tipik bir kişisel bilgisayarın
sabit diski, gigabyte (GB) cinsinden ölçülen milyarlarca harfe denk gelen verileri
saklayabilir.
Girdi Birimleri (Input Devices):
Kullanıcı, bu birimler aracılığıyla, bilgisayara verileri girer. Girdi birimlerinden
bazıları, klavye, fare ve oyun konsoludur.
Çıktı Birimleri (Output Devices):
Bilgisayarın kullanıcıya ileteceği sonuçları göstermek için kullandığı birimlerdir.
Bunlardan bazıları ekran ve yazıcıdır.
Bilgisayar Yazılımı
Bilgisayar yazılımı (program), bilgisayara bir işi yaptırmak için verdiğimiz
komutlar kümesidir. Yazılımları genel olarak iki kategoride sınıflandırabiliriz:
Bilgisayar Programlamaya Giriş I 2012
5 Abdullah YALÇINKAYA
İşletim sistemleri:
Kullanıcı ile bilgisayar arasındaki iletişimi sağlayan programlardır. Bilgisayar
sisteminin bütün hareketlerini denetler ve sistemdeki MİB ve ana bellek gibi
kaynakların yönetimi ile ilgilenirler. Örneğin, sizin kullandığınız Windows XP ya da
Windows 7 birer işletim sistemidir. Diğer bazı işletim sistemleri şunlardır:
PARDUS, UNIX, DOS, SOLARIS, MACINTOS.
Uygulama Programları:
İşletim sistemi dışında kalan diğer programlara verilen genel bir addır. Örneğin,
Word, havayolları rezervasyon sistemi, bilgisayar oyunları, programlama dillerinin
derleyicileri, birer uygulama programıdır.
Programlama Dilleri
Bir problemi çözmek için gerekli olan komutlar çok değişik programlama dilleri
kullanılarak yazılabilir. Bazı programlama dillerinde yazılan programlar, doğrudan
bilgisayarda MİB tarafından anlaşılabilir. Diğer bazı dillerde yazılan programlar ise
o dilin derleyicisi tarafından işlemcinin anlayacağı dile çevrilir.
Programlama dillerini üç genel kategoriye ayırabiliriz:
Makine dilleri
Assembly dilleri
Yüksek seviyeli programlama dilleri
Makine dili:
Her bilgisayarın işlemcisinin anlayacağı kendi makine dili vardır. Örneğin,
Pentium işlemcinin makine dili, Sparc işlemciden farklıdır.
Makine dilindeki bir komut, bit (0 ya da 1) gruplarından oluşur. Örneğin, makine
dilinin bir komutu iki değerin toplanması ya da bir değerin ana belleğin bir
bölgesinde saklanması gibi basit işlemleri içerir. İnsanların makine dilinde
program yazması hemen hemen olanaksızdır.
Örneğin, makine dilinde iki sayının toplanması,
01000110011101000111101010000010010101101000010
biçiminde ifade edilir.
Bilgisayar Programlamaya Giriş I 2012
6 Abdullah YALÇINKAYA
Assembly dili:
Bir assembly dili, makine dilindeki komutları ingilizce benzeri bir dille ifade eder.
Genelde assembly dilindeki her komut makine dilindeki bir komuta denk düşer.
Assembly dilindeki bir program ASSEMBLER diye bilinen bir yazılım tarafından
makine diline çevrilir. Assembly dilinde program yazmak da makine dilinde
olduğu gibi zor ve zaman alıcıdır.
Assembly dilinde iki sayının toplanması,
LOAD A
ADD B
STORE C
biçiminde ifade edilir.
Yüksek Seviyeli Programlama Dilleri ( YSPD ):
Makine dilinde çok sayıda komutla yapılabilecek bir iş, yüksek seviyeli
programlama dilinin bir komutu ile yapılabilir. Bu yüksek seviyeli diller, İngilizce
ya da Türkçe gibi doğal bir dil değil, kendi yapısı ve dilbilgisi kuralları olan,
insanlar için anlaşılması kolay olan dillerdir.
Yüksek seviyeli programlama dilinde yazılan bir program, derleyici (Compiler)
dediğimiz yazılımlar tarafından, makine dilindeki denk bir programa dönüştürülür.
Bilgisayar tarafından çalıştırılacak olan program, makine dilindeki programdır.
Bazı yüksek seviyeli programlama dilleri arasında PASCAL, DELPHI, FORTRAN,
BASIC, C, C++, COBOL, LISP ve PROLOG sayılabilir.
Bu dillerin birkaçında, iki sayının toplanması şöyle ifade edilir:
C:=A+B; (PASCAL)
C=A+B; (C)
C=A+B (FORTRAN)
Bilgisayar Programlamaya Giriş I 2012
7 Abdullah YALÇINKAYA
Bazen yüksek seviyeli programlama dilinde yazılmış bir program, makine diline
çevrilmek yerine başka bir ara dile çevrilebilir. Bu ara dildeki komutlar, hiçbir
makineye bağımlı değildir. Bu ara dildeki programlar, o dilin yorumlayıcısı
(interpreter) olarak bilinen yazılımlar tarafından çalıştırılır. Bunun amacı, ara
dildeki programların değişik bilgisayarlarda hiçbir değişikliğe uğramadan
kullanılabilmesidir.
Yazılım Geliştirme
Bir program, bir problemi çözmek için yazılan komutlar kümesidir. Bu komutlar,
İngilizce ya da Türkçe gibi dillerde değil, bilgisayar sisteminin anlayacağı bir
dildedir.
Bir program yazmadan önce, ilk yapacağımız iş, o problemi nasıl çözeceğimize
karar vermek ve çözümün adımlarını belirlemek olmalıdır. Bu işte bize yardımcı
olabilecek çeşitli problem çözme teknikleri vardır. Bu tekniklerden
yararlandığımızda, yarattığımız çözümü bir programa dönüştürmek kolay
olacaktır. En temel problem çözme tekniği, yukarıdan-aşağı tasarım yöntemidir.
Bu yöntemde ilk verilen problem, küçük alt problemlere bölünür. Bu alt
problemler, gerekirse, daha küçük (basit) alt problemlere bölünürler. En sonunda
elde edilen alt problemler, ayrı ayrı çözülürler ve bu çözümler ana problemin
çözümünü elde etmek için birleştirilirler. Bu yöntem, algoritma yazımından söz
ederken örneklerle açıklanacaktır.
Bir problemi çözmek için yazacağımız programı oluştururken, genelde, aşağıdaki
yazılım geliştirme aşamalarından geçmek zorundayız:
1. Problemin Anlaşılması ve Çözümlenmesi:
İlk yapacağımız iş, problemin tam olarak ne olduğunu anlamaktır. Bu
nedenle, problemin çözümünden neler beklediğimizi ve yaratacağımız
çözümün girdi ve çıktılarının neler olacağını kesin olarak belirlemeliyiz.
Bilgisayar Programlamaya Giriş I 2012
8 Abdullah YALÇINKAYA
2. Tasarım (Design):
Bu aşamada, problemi çözmek için kullanılacak çözüm adımlarını gösteren
bir liste yapmamız gerekir. Bir problemin çözüm adımlarını gösteren bu
listeye algoritma denir. Böyle bir liste tasarlarken, yukarıdan-aşağı tasarım
tekniğini kullanırız: Önce problemin ana adımları çıkarılır; daha sonra, her
adım için, gerekiyorsa, daha detaylı bir çözüm tasarlanır. Böylece bir
problem için bir algoritma geliştirmiş oluruz. Bir programlama diline
çevirmeden önce, bu algoritmanın doğru bir çözüm olduğu kanısında
olmalıyız. Bu aşamayı atlayarak doğrudan programlamaya geçmek, büyük
programlar yazarken işimizi çok zorlaştıracaktır.
3. Kodlama (Coding):
Bu safhada kâğıt üzerinde geliştirdiğimiz algoritmayı bir programlama
diline çeviririz. Bizim durumumuzda bu dil xxx olacaktır. Bu yüzden, xxx
programlama dilinin yapısını bilmemiz gerekecektir. Algoritmamızın her
adımı, ona karşılık gelen xxx program parçasına çevrilecektir.
4. Sınama ve Kanıtlama (Testing and Verifying):
Geliştirdiğimiz programın doğruluğunu sınayarak istediğimiz gibi çalışıp
çalışmadığını görmek zorundayız. Bu amaçla, program üzerinde çeşitli
testler yaparak, programın o testlere nasıl karşılık verdiğine bakarız: Bunu
sağlamak için program değişik girdilerle çalıştırılır ve ürettiği sonuçlara
bakılır. Sonuçlar beklendiği gibiyse, programın doğru çalıştığı kanıtlanmış
olur; değilse doğru çalışmayan parçaları bularak düzeltmemiz gerekir.
5. Algoritmalar
Algoritma, bir problemin çözümünün adımlarını gösteren formal bir dilde
yazılmış tasarımdır. Kullanılan dil Türkçe ve İngilizce gibi doğal bir dildir
ama sınırlı bir yapısı vardır. Bir algoritmada bulunması gereken temel
öğeler şunlardır: sıra, karar verme yapıları ve yineleme.
Sıra:
Çözüm adımları bir sıraya dizilmiş olarak verilmelidir. Bu sıra çözüm
adımlarının hangi sırayla uygulanacağını gösterir. Bir adımın içerdiği alt
adımlar numaralama düzeniyle açıkça belirlenir.
Bilgisayar Programlamaya Giriş I 2012
9 Abdullah YALÇINKAYA
Karar Verme Yapıları:
Bazı çözüm adımları seçeneğe bağlı olarak uygulanır. Her adımın hangi
koşulla uygulanacağı açıkça belli olmalıdır. Adım numaralarından seçeneğe
bağlı olarak uygulanacak adımın konulan koşulun sağlanması ya da
sağlanmaması durumunda mı uygulanacağı belli olmalıdır.
Yineleme:
Bazı adımların birkaç kez yinelenmesi gerekebilir. Bu amaçla yinelenecek
adımlar yineleme adımının alt adımları olmak zorundadır. Yineleme adımı
alt adımların hangi koşullarda yineleneceğini gösteren bir mantıksal ifade
kullanmalıdır. Yineleme adımının yapısından yinelenecek adımların hangi
koşullarda yineleneceği ve yineleme işleminin ne zaman duracağı belli
olmalıdır.
Algoritmaların Numaralanması:
Yukarıdaki temel öğeler aşağıdaki gibi algoritma adımlarını numaralama
yöntemi ile başarılabilir: Sırayla çözülecek adımlara, birbirini izleyen sıra
numaraları verilebilir. Örneğin, a, b ve c adımlarının sırayla uygulanacağını
gösterir. Eğer bir adım, alt adımları kapsayacaksa, alt adımlar, o adımın
numarasını da kapsayacak şekilde numaralanır. Örneğin, a, b, b1,b2 ve c
adımlarının sırayla uygulanacağını gösterir.
Seçeneğe bağlı uygulanacak adımlar aşağıdaki gibi numaralanabilir. Bu yapı,
seçeneğe bağlı olarak, N adımının alt adımlarının uygulanacağını gösteren bir
yapıdır. Bu adımı uygulamak için, N adımındaki mantıksal-ifade'nin doğru olup
olmadığı bulunur. Eğer mantıksal-ifade doğruysa N.T. adımı uygulanır; doğru
değilse N.F. adımı uygulanır. Bazı karar verme yapılarında N.F. adımı
bulunmayabilir, bu durumda N adımındaki mantıksal-ifade yanlış ise uygulamak
için N’den sonraki (N+1) adımına gidilir ve adımların uygulanması oradan devam
eder. Bazen N.T. (veya N.F.) birden fazla adım içerebilir, bu durumda bu adımları
N.T.1, N.T.2, ... gibi numaralandırırız.
Bilgisayar Programlamaya Giriş I 2012
10 Abdullah YALÇINKAYA
Yineleme:
Yineleme adımı için aşağıdaki gibi bir yapı kullanabiliriz. Bu yapıda mantıksal-
ifade doğru olduğu sürece N.1, N.2, ..., N.m adımları sırayla yinelenir. Her
yinelemeden sonra mantıksal-ifade kontrol edilir ve eğer doğru ise yineleme
işlemi devam eder; doğru değilse bir sonraki (N+1) adıma gidilir.
Şimdi, açıkladığımız yazılım geliştirme aşamalarının en önemlileri olan ilk üç
adımı birkaç örnekle göstereceğiz. Verilen bir problemi nasıl çözümlediğimizi,
tasarım aşamasını ve en sonunda algoritma yazılımını anlatacağız.
Örnek 1:
Problem: Verilen üç sayının ortalamasının bulunması.
Problemin Anlaşılması ve Çözümlenmesi:
Bu problemde bize üç doğal sayı verilecek ve biz üç sayının ortalamasını
bulacağız. Bulduğumuz sayıyı kullanıcıya bildireceğiz.
Girdiler: üç doğal sayı S1, S2 ve S3
Çıktılar: bu üç doğal sayının ortalaması
Tasarım: Bu problemi yukarıdan-aşağı tasarım yöntemini kullanarak çözeceğiz.
Çözüm adımlarını bir algoritma gibi göstereceğiz. İlk önce problemimizi aşağıdaki
üç ana adıma ayıracağız.
1. doğal sayıları oku
2. ortalamayı bul
3. ortalamayı kullanıcıya bildir
Birinci adımı biraz daha ayrıntılı vermemiz gerekir. Yani bu durumda alt
problemimiz üç doğal sayının okunması olmuştur. Bu adımdaki problemi
aşağıdaki gibi çözebiliriz:
Bilgisayar Programlamaya Giriş I 2012
11 Abdullah YALÇINKAYA
1. doğal sayıları oku
1.1. ilk doğal sayı S1’i oku
1.2. ikinci doğal sayı S2’ yi oku
1.3. üçüncü doğal sayı S3’ ü oku
İkinci adımda ortalamayı nasıl bulacağımızı belirterek aşağıdaki gibi
detaylandırabiliriz:
2. ortalamayı bul
2.1. ortalamayı ortalama = (S1 + S2 + S3) / 3 formülü ile hesapla
Eğer üçüncü adımının yeterince basit olduğunu kabul edersek, sonuç
algoritmamız aşağıdaki gibi olacaktır:
1. doğal sayıları oku
1.1. ilk doğal sayı S1’i oku
1.2. ikinci doğal sayı S2’yi oku
1.3. üçüncü doğal sayı S3’ü oku
2. ortalamayı bul
2.1. ortalamayı ortalama = (S1 + S2 + S3) / 3 formülü ile hesapla
3. ortalamayı kullanıcıya bildir
Örnek 2:
Problem: Verilen üç sayının en büyüğünün bulunması
Problemin Anlaşılması ve Çözümlenmesi:
Bu problemde üç doğal sayı okuyacağız ve bu üç sayının en büyüğünü bulacağız.
Bulduğumuz en büyük değeri kullanıcıya bildireceğiz.
Girdiler: üç doğal sayı S1, S2 ve S3
Çıktılar: bu üç doğal sayının en büyüğü
Tasarım: İlk önce aşağıdaki algoritmanın üç ana adımını yazar ve sonra birinci
adımı ve ikinci adımı onların alt adımlarındaki gibi çözeriz. Çözüm olarak
aşağıdaki algoritmayı elde ederiz.
Bilgisayar Programlamaya Giriş I 2012
12 Abdullah YALÇINKAYA
1. doğal sayıları oku
2. en büyük sayıyı bul
3. en büyük sayıyı kullanıcıya bildir
Alt adımlarla birlikte aşağıdaki gibi algoritma genişletilir.
1. doğal sayıları oku
1.1. ilk doğal sayı S1’i oku
1.2. ikinci doğal sayı S2’yi oku
1.3. üçüncü doğal sayı S3’ü oku
2. en büyük sayıyı bul
2.1. eğer S1 < S2
2.1.T. eğer S2 < S3
2.1.T.T. en büyük sayı S3’tür
2.1.T.F. en büyük sayı S2’dir
2.1.F. eğer S1 < S3
2.1.F.T. en büyük sayı S3’tür
2.1.F.F. en büyük sayı S1’dir
3. en büyük sayıyı kullanıcıya bildir
Örnek 3:
Problem: Verilen bir pozitif doğal sayının faktöriyelinin bulunması
Problemin Anlaşılması ve Çözümlenmesi:
Bu problemde bir pozitif doğal sayı okuyacağız ve bu sayının faktöriyelini
kullanıcıya bildireceğiz.
Girdiler: bir pozitif doğal sayı S
Çıktılar: S!
Bilgisayar Programlamaya Giriş I 2012
13 Abdullah YALÇINKAYA
Tasarım:
Bir sayının faktöriyeli (S!), birden o sayıya kadar olan bütün doğal sayıların
çarpımına eşittir. Yani,
S! = 1 x 2 x .... x (S-1) x S
Bu kısa anımsatmadan sonra algoritmamızı tasarlamaya başlayalım. İlk ana
adımlar:
1. Sayıyı oku, S
2. S! hesapla
3. S! kullanıcıya bildir
Birinci ve üçüncü adımlar yeterince basit, ancak ikinci adımın detaylandırılması
gerekiyor. Yukarıdaki formülü, yineleme yapısını kullanarak hesaplayabiliriz. Buna
göre, ikinci adım aşağıdaki alt adımlara bölünebilir. Bu çözüm için, iki değişken
kullanıyoruz. İlki S! değerini tutacak (SFakt), diğeri ise (Sayaç), 1’den S’ye kadar
sayıların değerini tek tek alacak.
2. S! hesapla
2.1. SFakt’i 1’e eşitle
2.2. Sayacı 2’ye eşitle
2.3. Sayaç <= S olduğu sürece
2.3.1. SFakt’ı Sayaç ile çarp ve sonucu SFakt’ın yeni değeri yap
2.3.2. Sayacı bir arttır
Burada, 2.3.1 ve 2.3.2 adımları, 2’den S’e kadar tekrarlanacaktır. Sonunda,
sayaç S’den bir büyük olacağı için tekrarı kontrol eden mantıksal ifade yanlış
olacaktır ve bu adımlar bir daha yinelenmeyecektir.