Bölüm 1
Bilgisayarlar ve C++
Programlama
Doç.Dr. Yıldıray Yalman
Kaynak: Problem Solving with C++, Walter Savitch
Slide 1
Sunu Bölümleri

Bilgisayar Sistemleri (1.1)

Programlama ve Problem Çözme (1.2)

C++ Temelleri (1.3)

Test Etme ve Hata Ayıklama (1.4)
Slide 2
Bölüm 1.1
Bilgisayar Sistemleri

Bir bilgisayar programı…


Bilgisayarın takip edeceği komutlar kümesi olarak
tanımlanabilir
Bilgisayar yazılımı (software) ise …

Bilgisayar tarafından kullanılan programlar kümesi
olarak adlandırılabilir ve bünyesinde birimleri
(editör, çevirici, sistem yöneticisi) barındırır.
Slide 3
Donanım

Temel olarak 3 tip bilgisayar vardır.

Kişisel Bilgisayarlar (PC: Personal Computer)


İş istasyonu (Workstation)


Genellikle aynı anda tek kullanıcıya hizmet veren bilgisayar tipidir.
PC’lerden daha büyük ve işlem gücü daha yüksektir
Sunucu-Anamakine (Mainframe)



Daha büyük
Destek personeline ihtiyaç duyar
Çok kullanıcı tarafından paylaşılabilir.
Slide 4
Ağlar (Networks)

Bilgisayarların kaynaklarını birbirleriyle
paylaştıkları yapılardır.


Yazıcılar ya da diğer donanım birimleri,
Var olan bilgiler, vb. gibi.
Slide 5
Bilgisayar Mimarisi

5 ana bileşen mevcuttur.

Giriş aygıtları (Input devices)


Çıkış aygıtları (Output devices)


Bilgisayarın aktif görevlerini icra eder
Ana bellek/hafıza (Main memory)


Bilgisayarın kullanıcı ile iletişim kurmasını sağlarlar.
İşlemci (Processor (CPU))


Kullanıcıların bilgisayar ile iletişim kurmasını sağlarlar
Aktif olarak çalışan programların yürütüldüğü hafıza birimidir
Yardımcı bellek (Secondary memory)

Bilgilerin depolandığı birimdir.
Şekil 1.1
Slide 6
Bilgisayar Hafızası

Ana Hafıza (Main Memory)

Hafıza bileşenlerinin tamamında



Binary Digit veya Bit


0 veya 1
Byte = 8 bit


0 ve 1 bilgisi bulunur.
Programın çalışması esnasında bu bilgiler değişebilir.
Her bir hafıza birimi 8 bitten oluşur.
Adres

Her bir byte’ın hafızadaki konumunu ifade eder.
Slide 7
Veri miktarı büyürse?

Birçok veri bir “byte”tan daha büyüktür.



Örneğin çoğu tamsayı ya da reel sayılar 1 byte ile
ifade edilemezler.
Bir verinin adresi ilgili verinin ilk byte bilgisinin
olduğu bellek bölgesine işaret eder.
Ardışık bellek bölgelerinde veriye ilişkin diğer
bilgiler tutulur.
Display 1.2
Slide 8
Veri veya Kod?




‘A’ karakterinin ikili karşılığı: 01000001
65 sayısının ikili karşılığı : 01000001
Herhangi bir komutun ikili karşılığı da 01000001
olabilir.
Soru: Bu durumda bilgisayar 01000001 ifadesinin
hangi anlamda kullanıldığını nasıl bilecek?


Bu noktada ilgili verinin yorumlanması, mevcut durumda
işletilen komuta bağlıdır.
Programcılar nadiren de olsa bu problem hakkında
endişelenirler.

Sanki hafızada 1 ve 0 yerine karakterler tutuluyormuş hissine
kapılırlar
Slide 9
Secondary Memory


Ana hafıza programın çalışması esnasında veri
ve komutları bünyesinde barındırırken,
Yardımcı hafıza birimi


Bilgisayarın oturumları arasında komut ve verilerin
depolanmasını sağlar.
Veri veya komutlar yardımcı hafıza birimlerinde
Dosya şeklinde depolanırlar.
Slide 10
Yardımcı Hafıza Birimleri

Bir bilgisayarda aşağıdaki yardımcı hafıza birimleri
bulunabilir.

Hard disk


Bilgisayar kasasına sabitlenmiştir, normal şartlarda taşınabilir
değildir.
Diğer yardımcı hafıza birimlerine kıyasla “hızlı” olarak nitelenebilir,
Bellek (Usb 2.0)
 Taşınabilir bellekler (Flash Disc)
Bellek Kapasitesi: 8 GB
 Örnek bir hız karşılaştırması yanda görülmektedir.
Yazma Hızı: 4 MB/s
 Kolaylıkla taşınabilir
Okuma Hızı: 19 MB/s
Harddisk (Usb 2.0)
 Compact disk (CD)
Dönüş hızı: 7200 rpm
 Harddisklerden yavaştır
Yazma Hızı: 27,4 MB/s
 Kolaylıkla taşınabilir
Okuma Hızı: 33,1 MB/s

Sadece yazılabilir ya da okunup yazılabilir versiyonları mevcuttur.
Slide 11
Hafıza Erişimi

Rastgele Erişim (Random Access)

Genellikle RAM olarak adlandırılır.


Bilgisayar herhangi bir RAM hafıza bölgesine direk
olarak erişebilir.
Sıralı Erişim (Sequential Access)

İlgili veri bulunana kadar ardışık şekilde bellek
bölgelerinin kontrol edilmesi

Yardımcı belleklerde sıklıkla bu yaklaşım kullanılır.
Slide 12
İşlemci

Merkezi İşlem Birimi ya da CPU, tipik olarak
Program komutlarını takip eder
 Bir işlemcinin tipik yetenekleri
ekleme/toplama (add)
çıkartma (subtract)
çarpma (multiply)
bölme (divide)
bir veriyi bir noktadan başka bir noktaya taşıma
olarak sıralanabilir.

Slide 13
Bilgisayar Yazılımı

İşletim Sistemi (Operating System)





Bilgisayar ile iletişim kurulmasına olanak sağlar.
Bir programdır.
Bilgisayar kaynaklarını yönetir
Diğer programların çalıştırılması için kullanıcının
ihtiyaçlarını karşılar.
Yaygın şekilde kullanılan işletim sistemleri:

UNIX
Windows
Linux
DOS
Macintosh VMS
Slide 14
Giriş İşlemi

Bir bilgisayar için giriş işlemi


Bir program
ya da
kimi verilerden, oluşur.
Şekil 1.3
Slide 15
Yüksek Seviyeli Diller


Yaygın şekilde kullanılan programlama dilleri
C C++ C# Java Pascal Visual Basic FORTRAN
COBOL Lisp Phyton
Bahsi geçen high – level diller




Klasik konuşma dillerine benzerler ,
Kolay şekilde okunup-yazılacak şekilde organize
edilmişlerdir,
Mikroişlemcinin yapabileceği komutlardan çok daha
karmaşıktırlar,
Ancak bir programın çalıştırılabilmesi (execution) için, 1 ve
0’lara dönüştürülmesi gerekir.
Slide 16
Düşük Seviyeli Diller

Örneğin bir assembly dili komutu
ADD X Y Z
şeklinde ifade edilir. Ve bellekte bulunan X ile Y’yi
toplayıp, sonucu Z lokasyonuna yazar.

Assembly dili de diğer diller gibi makine diline
(machine language) yani 0 ve 1’lere çevrilmelidir
0110 1001 1010 1011

Bir işlemci sadece makine dilini icra edebilir. O halde
yüksek seviyeli programlama dilleri ile yazılan
komutlar makine diline nasıl çevrilecek?
Slide 17
Derleyiciler (Compilers)

Yüksek seviyeli diller ile yazılan program
kodlarını makine diline çevirirler.

Kaynak Kod (Source code)


Yüksek seviyeli dilde yazılmış olan program kodu.
Nesne Kodu (Object code)

Program kodunun makine diline çevrilmiş versiyonu.
Şekil 1.4
Slide 18
Bağlayıcılar (Linkers)

Kullanılan kimi programlar zaten derlenmiş
olabilir.



İlgili programların nesne kodu kullanımımıza açık
olabilir
Örneğin: Giriş ve çıkış rutinleri
Bir bağlayıcı (Linker)
Yazılan programlar için nesne kodu ve
 Önceden derlenmiş rutinlerin nesne kodunu
CPU’nun çalıştırabileceği makine dili programı
içerisinde birleştirir.
Şekil 1.5

Slide 19
Tarihten Birkaç Not

İlk “programlanabilen bilgisayar” fikri




Charles Babbage (1791-1871) tarafından
tasarlanmıştır.
Bu konu üzerinde 1822 yılında çalışmaya
başlamıştır.
Ancak çalışmalarının sonuçlarını görmeye ömrü
yetmemiştir.
İlk programcı Ada Augusta (1815-1852)

Countess of Lovelace
 Makine tarafından işlenmek üzere yazılan ilk algoritmayı
geliştirmiştir (1842).
Slide 20
Bölüm 1.1 Sonunda

Aşağıdaki istenenleri cevaplayabilir misiniz?


Bir bilgisayarın ana bileşenlerini sayınız.
2 sayının toplanmasını sağlayacak bir programda
veri hangileridir?

Bir derleyicinin işlevini açıklayınız.

Kaynak kod ve nesne kodunu tanımlayınız.

Bir işletim sisteminin amacı nedir?
Slide 21
Bölüm 1.2
Programlama ve Problem Çözme

Algoritma (Algorithm)


Çözüme yönelik talimatlar dizisi olarak tanımlanır.
Program

Bir bilgisayarın anlayabileceği dilde ifade edilmiş
Algoritmadır.
Şekil 1.6
Slide 22
Program Tasarımı

Programlama üretkenlik gerektiren bir süreçtir


Bir programı oluşturmak için komple bir kural seti
yoktur.
Program Tasarım Süreci

Problem Çözme Fazı


Problemi çözen bir algoritma oluşturulur.
Uygulama Fazı

Geliştirilen algoritma bir programlama dilinde yazılır.
Slide 23
Problem Çözme Fazı

Yapılacak görev konusunda net olun…




Giriş nedir?
Çıkışta hangi bilgi verilecek?
Çıkış nasıl organize edilecek?
Uygulamadan önce algoritmayı geliştirin.


Bu deneyim programınızın çalışmasında size zaman
kazandıracaktır.
Algoritmanızın doğruluğunu kontrol edin.
Slide 24
Uygulama Fazı

Algoritmanızı kullanacağınız programlama diline
çevirin.


Oluşturduğunuz “Kaynak kodu” derleyin.


Yazdığınız programdaki hataları bulun ve düzeltin
Örnek bir uygulama yaparak programınızı deneyin.


İlgili programlama dilini biliyorsanız bu aşama çok kolaydır.
Elde ettiğiniz sonuçların doğruluğunu kontrol edin.
Sonuçlar algoritma ve programınızda bir takım
düzeltmeler yapmanızı gerektirebilir.
Şekil 1.7
Slide 25
Nesneye Yönelik Programlama
Object Oriented Programming

NYP ya da OOP olarak kısaltılır.

Modern programlama dillerinin çoğunda kullanılır.

Program birbiri ile ilişkili nesneler olarak ele alınır


Her nesne (object) kendisine ilişkin özellikleri barındıran
algoritmaları içerir
Program tasarım fazı nesneleri ve onlara ait algoritmaları
tasarlamayı da içerir
Slide 26
OOP Karakteristikleri

Kapsülleme/Gizleme (Encapsulation)



Kalıtım (Inheritance)



Bilgi Gizleme (Information hiding)
Nesneler kendi veri algoritmalarını kendi bünyelerinde
barındırırlar
Yeniden kullanılabilen kodların yazılmazına imkan tanınır
Nesneler kendi karakteristik özelliklerini diğer nesnelere
kalıtımsal olarak aktarabilirler
Çokbiçimlilik (Polymorphism)

Örneğin bir fonksiyon ismi ile birden fazla işleve sahip adım
gerçekleştirilebilir.
Slide 27
Yazılım Yaşam Döngüsü
1.
2.
3.
4.
5.
Bir görevin analizi ve özellikleri (problem tanımı)
Yazılımın tasarımı (Nesne ve algoritma tasarımı
Uygulama (Kodlama)
Sistemin bakım ve onarımı
Yazılımın eskimesi (yeni versiyona ihtiyaç)
Slide 28
Bölüm 1.2 Sonunda
 Aşağıdakileri cevaplayabilir misiniz?
 Bir program oluşturulurken atılması gereken ilk adım nedir?
 Program tasarım sürecinin 2 önemli aşamasını/fazını listeleyiniz.
 Problem çözme fazının önemini açıklayınız.
 Yazılım yaşam döngüsü adımlarını sıralıyınız.
Slide 29
C++ Temelleri…

C++ ifadesi nereden gelmiştir?




Bölüm 1.3
Bu dil C dilinin geliştirilmesi ile ortaya çıkmıştır
C dili ise B dilinin geliştirilmesi ile ortaya çıkmıştır
B dili de BCPL adı verilen dilin geliştirilmesi ile
ortaya çıkmıştır
Neden ‘++’?

++ ifadesi C++ dilinde kullanılan bir operatördür.
Slide 30
C++ Tarihçesi

C dili Dennis Ritchie tarafından 1970 lerde
AT&T Bell Lab. da geliştirilmiştir.



UNIX sistemlerde kullanılmıştır
Çoğu ticari uygulama C dilinde yazılmıştır
C++ ise Bjarne Stroustrup tarafından at AT&T
Bell Lab. da 1980 lerde geliştirilmiştir.



C özellikleri geliştirilmiştir.
OOP temelli bir dildir.
“C dili, C++ dilinin bir alt kümesidir” denilebilir.
Slide 31
Örnek bir C++ Programı

Basit bir C++ programı aşağıdaki şekilde başlar:
#include <iostream>
using namespace std;
int main()
{

Ve şu şekilde sonlanır.
return 0;
}
Şekil 1.8
Slide 32
Kod açıklaması (1/5)

Değişken tanımlama satırı
int oyuncak_sayisi, parca, toplam_parca;


İlgili 3 değişken ismi 3 adet sayıyı bünyesinde
barındıracaktır
int ifadesi ilgili değişkenlerin tamsayı olacağına
işaret eder.
Slide 33
Kod açıklaması (2/5)
Komut:
cout << "Kac adet oyuncak var?:";


cout (see-out) ekranın kullanılacağını ifade eder.
<< ifadesi tırnak işareti arasında yazılan Kac adet oyuncak
var?: ifadesinin ekrana yazılmasını gerçekleştirir
Slide 34
Explanation of code (3/5)

Komut
cin >> oyuncak_sayisi;


cin (see-in) klavyeden bir bilgi girişi alınmasını sağlar
>> klavyeden girilen bilgiyi alır ve enter tuşuna basılması
beklenir.
Slide 35
Kod açıklaması (4/5)

Komut
toplam_parca=oyuncak_sayisi*parca;



Bir hesaplama işlemi gerçekleştirir
‘*’ çarpma işlemi için kullanılır.
‘=‘ ifadesi sağda yapılan işlemin sonucunun soldaki
değişkene aktarılmasın sağlar.
Slide 36
Kod açıklaması (5/5)

Komut
cout << oyuncak_sayisi;


Ekrana oyuncak_sayisi isimli değişkenin içerisinde
yer alan değerin yazılmasını sağlar.
Komut
cout << " adet parcadan olusuyorsa,\n toplam ";
 ‘\n’ bulunduğu yerden itibaren enter işlemi yapılıp
yeni satırdan başlayarak ekrana yazı yazılması
sağlanır.
Slide 37
Program Düzeni (1/3)


Derleyiciler nasıl bir görünümde program
yazdığınıza bakmaksızın kodları derlerler.
Ancak programcılar yazdıkları programların
kolay anlaşılır olması için



Küme parantezlerini: { } alt alta gelecek şekilde
organize ederler.
İfadelerde/komutlarda mutlaka girintiler (indent)
kullanırlar.
Bir satırda sadece bir komut yazarlar.
Şekil 1.9
Slide 38
Program Düzeni (2/3)

Değişkenler, kullanılmadan önce tanımlanmalıdır.



Tipik olarak değişkenler programın başında tanımlanırlar.
Programda yazılan her bir ifade-komut semi-colon (;) ile
bitirilir.
Kütüphaneler programa dahil edilir.
#include <iostream>


Bu ifade programda kullanılacak kimi komutlar hakkındaki
bilgilerin ilgili kütüphanede olduğunu ifade eder.
Örneğin iostream, cin ve cout gibi temel giriş-çıkış
komutlarını bünyesinde barındırır.
Slide 39
Program Düzeni (3/3)



using namespace std;
İfadesi, derleyicinin iostream içerisindeki komutları
“standard” şekilde kullanabilme imkanı tanır.
Bir programa başlayabilmek için mutlaka bir ana
fonksiyona ihtiyaç vardır.
int main()
{
Aynı zamanda bu ana fonksiyonun bir de bitiş noktası
olmalıdır.
return 0;
}

Main fonksiyon return ifadesi ile sonlandırılır.
Slide 40
Bir C++ Programını derleme



1. C++ kaynak kodu bir metin editöründe
yazılır.
2. Sisteminizde kurulu olan Derleyici, yazmış
olduğunuz kaynak kodunu sizin talimatınızla
nesne koduna çevirir.
3. Bağlayıcı tüm nesne kodlarını doğrudan
çalıştırılabilen bir program dosyasında
birleştirir.
Slide 41
Bir programı çalıştırma





Şekil 1.10 da görülen kodu yazalım Şekil 1.10
Kodu derleyin
Eğer hata yaptıysanız derleyici sizi uyaracaktır.
Uyarıları dikkate alarak düzeltmeleri yapın ve
tekrar derleyin.
Programı çalıştırın
Tebrikler! Artık yazdığınız bir programı nasıl
çalıştıracağınızı biliyorsunuz 
Slide 42
Bölüm 1.3 Sonunda

Aşağıdakilere cevap verebilir misiniz?

Aşağıdaki komutun sonucunda nasıl bir çıktı elde ederiz?
cout << “C++ anlaşılması kolay bir dildir.”;

Aşağıdaki komutun ne yaptığını açıklayınız.
cin >> oyuncak_sayisi;

Yandaki ifadeyi açıklayın. #include <iostream>
Slide 43
Bölüm 1.4
Test ve Debug İşlemi

Bug (Böcek)


Bir programda yapılan hatadır…
Debugging (Hata ayıklama)


Programlardaki hataların ayıklanması işlemidir
Bu terim ilk defa Harvard Mark 1 computer
bilgisayarında oluşan bir hata durumunda Grace
Hopper tarafından kullanılmıştır
“First actual case of a bug being found.”
Slide 44
Program Hataları

Sözdizimi hatası (Syntax errors)


Kullanılan programlama dilinde yapılan gramer hatalarıdır
Derleyici tarafından kolaylıkla tespit edilirler


Çalışma Zamanı hatası (Run-time errors)


Dikkat: Bu tip hatalar derleyici tarafından bulunmakla birlikte, ilgili
hatanın nerede olduğu her zaman net şekilde gösterilmeyebilir.
Bilgisayar tarafından programın çalışması esnasında tespit
edilir (Bu tip hatalardan korkmalısınız!).
Mantık hataları (Logic errors)



Programın algoritmasındaki hatalardır.
Anlaşılması/tespiti en zor hatalardır
Bilgisayar bu tip hataları tespit edemez (İş başa düşer!...)
Slide 45
Bölüm 1-4 Sonunda

Aşağıdakilere cevap verebilir misiniz?

Program hatalarını açıklayınız?

Bilgisayar hangi tür program hatalarını tespit eder?


Örneğin programınızda kullandığınız bir komutun
sonuna ; ifadesini koymadığınız durumda, nasıl bir
hata oluşur?
Program sorunsuz şekilde çalıştığında fakat ürettiği
sonuçlar yanlış olduğunda, ne tür bir hatadan söz
edebiliriz?
Slide 46
Bölüm 1 Bitti…
Slide 47
Şekil 1.1
Geri
İleri
Slide 48
Şekil1.2
Geri
İleri
Slide 49
Şekil 1.3
Geri
İleri
Slide 50
Şekil 1.4
Geri
İleri
Slide 51
Şekil 1.5
Geri
İleri
Slide 52
Şekil 1.6
Geri
İleri
Bir Algoritma Örneği: Bir isim listesinde aranan bir
ismin kaç kere tekrar ettiğini bulan algoritma
1. Başla
2. İsim listesini aç
3. Aranan ismi kullanıcıdan al
4. Bir sayıcı tanımla ve 0’a eşitle
5. Listedeki isimleri sırasıyla tara. Sıradaki isim
aranan isim ise Sayıcıyı 1 arttır.
6. Sayıcının son durumunu ekrana yaz.
7. Dur
Slide 53
Şekil 1.7
Geri
İleri
Slide 54
Şekil 1.8
Geri
İleri
Slide 55
Şekil 1.9
Geri
İleri
Slide 56
Şekil 1.10
Geri
İleri
Ekran Görünümü:
Deneme 1,2,3
Slide 57
Download

Introduction to Computers and C++ Programming