You are on page 1of 15

C C++ ve Java Dilleriyle

Algoritma ve
Programlama
Bülent ÇOBANOĞLU
034

C C++ ve Java Dilleriyle Algoritma ve Programlama


Bülent ÇOBANOĞLU
1. Baskı: Ocak 2016
2. Baskı: Ocak 2018
ISBN: 978-605-9129-38-1

Editör: Dr. Fatih Çelik


Kapak ve sayfa düzeni: Cem Demirezen
Satış: satis@abakuskitap.com

Baskı: Deniz Ofset Matbaacılık


Gümüşsuyu Cad. Topkapı Center, Odin İş Merkezi
No: 403/2 Topkapı-İstanbul
Tel: 0212 613 30 06 - Faks: 0212 613 51 97
Matbaa sertifika No: 29652

Bu kitabın bütün yayın hakları Abaküs Kitap Yayın Pazarlama'ya aittir. Yayınevimizin
yazılı izni olmaksızın kısmen veya tamamen alıntı yapılamaz, kopya edilemez,
çoğaltılamaz ve yayınlanamaz.

Kitapta kullanılan logolar, firmaların tescilli logolarıdır.

Selda Ustabaş Demiryakan


Abaküs Kitap Yayın Dağıtım Hizmetleri
Yayıncılık sertifika no: 31359
Hobyar Mah. Cemal Nadir Sok. No:24/178 Cağaloğlu-Fatih/İST.
Tel.: (0212) 514 68 61
www.abakuskitap.com - editor@abakuskitap.com
Dr. Bülent ÇOBANOĞLU
İlk ve Orta Öğrenimini Erzincan’da tamamladı. Sırası ile; Erzincan-Fatih Endüstri
Meslek Lisesi “Elektronik” bölümünden Lise, Ankara-Gazi Üniversitesi Teknik Eği-
tim Fakültesi “Elektronik-Bilgisayar Öğretmenliği” bölümünden Lisans, İstanbul-
Bahçeşehir Üniversitesi Bilgisayar Mühendisliği'nden Yüksek Lisans, Sakarya Üni-
versitesi “Elektronik-Bilgisayar Eğitimi” bölümünden Doktora dereceleri aldı.

Alanında 10’a yakın kitap, 30’a yakın bilimsel makale yayınlayan yazarımız, ülkemi-
zin çeşitli üniversite ve eğitim kurumlarında Elektronik ve Bilgisayar alanında ders-
ler verdi ve halen de vermektedir. Evli ve dört çocuk babasıdır.

iii
Bu dünyada ki cennet yuvamı oluşturan aile fertlerine ithaf ediyorum...
Vakademi
Vakademi 2015 yılında faaliyete geçen web tabanlı bir video eğitim platformudur.
Kurulduğu günden beri web sitesine eklediği her eğitimi belirlediği kriterlere göre
denetleyen Vakademi, tümü saha deneyimi olan alanında uzman eğitmenler ve her
gün yenisi eklenen eğitim setleri ile bireysel ve kurumsal kullanıcılarına kaliteli
eğitim içerikleri sunmaktadır.

Şu anda Türkçe ve HD kalitesinde izlenebilen, sürekli güncellenen video eğitim


içeriklerini mobil cihazlardan da izleyebilirsiniz. Ayrıca farklı kategorilerde yenilik-
çi videolar ile tüm Türkiye’de ve Dünyada kaliteli eğitim içeriklerine ulaşmakta güç-
lük yaşayan bireylere ulaşmayı amaçlayan Vakademi, anlatılan konulara dair proje
dosyalarına ve örnek dokümanlara erişme olanağı sağlıyor. Böylelikle eğitimin salt
bilgiden ziyade hemen uygulanabilir olması sağlanıyor.

Vakademi’nin başlıca eğitim kategorileri; yazılım, tasarım, mobil, 3D, animasyon,


ofis programları, kişisel gelişim, işletim sistemleri, üretkenlik, fotoğrafçılık, di-
jital pazarlama, sosyal medya vb. profesyonel iş yaşamında kullanılabilecek konu-
larda yetkinlikler kazandırmayı hedeflemektedir.

“Çocuklar için Scratch ile Görsel Programlama”, “Android için Native Uygulama Ge-
liştirme”, “Maya Başlangıç Rehberi”, “Microsoft Excel 2016”, “Prezi Kullanım Rehbe-
ri”, “Trello”, “Adobe Photoshop Başlangıç Rehberi”, “After Effects Başlangıç Rehberi”,
Vakademi’nin yayınladığı yüzlerce eğitimden sadece birkaçıdır.

Kitaba ait Video İçeriklere Nasıl Erişim Sağlarım?


Online eğitim alanına odaklanan ve online eğitim alanında modern ve yenilikçi ya-
pısıyla faaliyet gösteren Vakademi, DVD’lerin eskimesi, bozulması vb. sorunları or-
tadan kaldırmak ve her yerden erişilmesine olanak sağlamak amacıyla eskiden DVD
şeklinde basılan Abaküs Kitap videolarını online ortamda ulaşılabilir kılmıştır.

Bu kitabın arka kapak içinde yer alan promosyon kodunu kullanarak siz de kitabın
video anlatımlarına ulaşabilirsiniz: vakademi.com.tr adresine girip sağ üst köşede
yer alan “Üye Ol” bölümüne tıklayın. “Ücretsiz Üyelik” seçeneğinden üye olup he-
sabınızı aktive edin. Sisteme girişiniz tamamlandığında sol bölümdeki menüden “İş
Ortakları” sekmesi ve sonra “Abaküs Kitap” görseline tıklayın. “Promosyon Kodu”
alanına kitapta bulunan kodu eklediğinizde sol menüde “Abaküs Kitap” adında yeni
bir sekme açıldığını göreceksiniz. Abaküs Kitap sekmesinden kitaba ait içerikleri iz-
leyerek bilgilerinizi pekiştirebilirsiniz. İyi seyirler.

Teşekkürler...
Bu kitabın video içeriklerinin yayınlanmasına katkıda bulunmaktan dolayı mutlu-
luk duyuyoruz.
Vakademi Ekibi
İÇİNDEKİLER
1. Bilgisayarın Yapısı ve Programlama Dilleri 1
Giriş 1
Bilgisayar ve Programlamanın Kısa Bir Tarihçesi 2
Donanım ve Yazılım Kavramları 3
Bilgisayarın Donanımsal Yapısı 4
Yazılım ve Donanım Arasındaki İlişki 6
Yazılım (Software) 6
Sistem Yazılımları 6
Uygulama Yazılımları 7
Derleyici ve Yorumlayıcı 8
Derleyici (Compiler) 9
Yorumlayıcı (Interpreter) 9
Derleyici ile Yorumlayıcının Farkı 9
Kaynak Program (Source Program) 10
Java ve C++ için Kod Derleme Aşamaları 10
Amaç Program (Object Program) 11
Bağlayıcı (Linker) 11
Bazı Programlama Dilleri ve Özellikleri 11
Çoktan Seçmeli Değerlendirme Soruları 22

2. Algoritma 27
Giriş 27
Bilgisayar Ortamında Problem Çözüm Basamakları 30
Algoritmayı İfade Şekilleri 32
Metinsel Olarak Düz İfade 32
Sözde-Kod (Pseudo-Code) 32
Akış Şemaları (Flow Charts) 33
UML Diyagramları 35
Aktivite Diyagramı (Activity Diagram) 36
Çoktan Seçmeli Değerlendirme Soruları 38

3. Akış Şemaları ile Algoritma Geliştirme Örnekleri 41


Giriş 41
Gündelik Hayattan Algoritma Örnekleri 41
Sayısal Hesaplamalarla İlgili Algoritma Örnekleri 46
Başlangıçta Değişkenlere Değer Aktarmanın Mantığı 50
İki Değişkenin İçeriğini Birbirine Aktarma (Yer Değiştirme İşlemi) 52
Tekrarlı İşlemler – Sayaç Kontrollü Döngüler 54
Döngüsel Akış Şeması 54
vii
Program Takibi ve Akış Şeması Takip Örnekleri 65
Çoktan Seçmeli Değerlendirme Soruları 68

4. Sayı Sistemleri 75
Giriş 75
Onlu (Decimal) Sayı Sistemi 76
İkili (Binary) Sayı Sistemi 77
Sekizli (Octal) Sayı Sistemi 77
Onaltılı (Hexadecimal) Sayı Sistemi 78
Onlu Sayı Sistemini İkili Sayı Sistemine Dönüştürme 78
Sekizli Sayı Sistemini Diğer Sayı Sistemlerine Dönüştürme 78
Onaltılı Sayı Sistemini Diğer Sayı Sistemlerine Dönüştürme 79
Kesirli Sayıları Dönüştürme 81
Sayı Sistemlerini Birbirine Dönüştüren Algoritma Örnekleri 82
Bit ve Byte Kavramları 85
Çoktan Seçmeli Değerlendirme Soruları 87

5. C/C++ ve Java Program Yapısı 89


Giriş 89
C/C++ Programı ve Yapısı 91
Başlık (Kütüphane) Dosyaları
(#include Deyimi) 91
Ana (main) Fonksiyon 92
Tanımlama Bloğu 92
Program Gövdesi 93
C/C++ için Programı Sonlandırma Komutları 93
Açıklama/Yorum Satırları 94
Bazı C Derleyicilerinin Türkçe Karakter Sorununun Çözümü 94
Code::Bloks C/C++ Editörü ile Program Yazımı 95
Java Programı ve Yapısı 98
Java Kütüphane Dosya Tanımlaması
(import Deyimi) 98
Sınıf (class) Adı 99
Ana (main) Metot/Fonksiyon 99
Eclipse Editörünün Kurulumu ve Program Yazımı 100
C/C++ Programlama Dilleri için Eclipse Kurulumu 105
Çoktan Seçmeli Değerlendirme Soruları 109

6. Veri Tipleri ve Değişken Kavramı 111


Giriş 111
Komutlar (Ayrılmış Kelimeler) 112
Mesajlar 113
viii
İÇİNDEKİLER
1. Bilgisayarın Yapısı ve Programlama Dilleri 1
Giriş 1
Bilgisayar ve Programlamanın Kısa Bir Tarihçesi 2
Donanım ve Yazılım Kavramları 3
Bilgisayarın Donanımsal Yapısı 4
Yazılım ve Donanım Arasındaki İlişki 6
Yazılım (Software) 6
Sistem Yazılımları 6
Uygulama Yazılımları 7
Derleyici ve Yorumlayıcı 8
Derleyici (Compiler) 9
Yorumlayıcı (Interpreter) 9
Derleyici ile Yorumlayıcının Farkı 9
Kaynak Program (Source Program) 10
Java ve C++ için Kod Derleme Aşamaları 10
Amaç Program (Object Program) 11
Bağlayıcı (Linker) 11
Bazı Programlama Dilleri ve Özellikleri 11
Çoktan Seçmeli Değerlendirme Soruları 22

2. Algoritma 27
Giriş 27
Bilgisayar Ortamında Problem Çözüm Basamakları 30
Algoritmayı İfade Şekilleri 32
Metinsel Olarak Düz İfade 32
Sözde-Kod (Pseudo-Code) 32
Akış Şemaları (Flow Charts) 33
UML Diyagramları 35
Aktivite Diyagramı (Activity Diagram) 36
Çoktan Seçmeli Değerlendirme Soruları 38

3. Akış Şemaları ile Algoritma Geliştirme Örnekleri 41


Giriş 41
Gündelik Hayattan Algoritma Örnekleri 41
Sayısal Hesaplamalarla İlgili Algoritma Örnekleri 46
Başlangıçta Değişkenlere Değer Aktarmanın Mantığı 50
İki Değişkenin İçeriğini Birbirine Aktarma (Yer Değiştirme İşlemi) 52
Tekrarlı İşlemler – Sayaç Kontrollü Döngüler 54
Döngüsel Akış Şeması 54
vii
Değişkenler 114
Değişkenlerin Tanımlanması 115
Değişkenlere Değer Aktarma Operatörü { = } 115
Değişkenlere İsim Verme Kuralları 116
Değişkenlerin Faaliyet Alanları ve Ömürleri 117
Yerel (Local) Değişken Faaliyet Alanı 118
Genel (Global) Değişken Faaliyet Alanı 119
Veri Tipleri 119
Unicode ve ASCII Kod 120
Java Dili Temel Veri Tipleri ve Değer Aralıkları 120
C/C++ Dili Temel Veri Tipleri ve Değer Aralıkları 122
Mantıksal Veri Tipinde Java – C/C++ Farkı 125
Metinsel (String) Veri Tipleri 126
Veri Tipi Dönüşümü 127
Büyük Veri Tipinden Küçük Veri Tipine Dönüşüm 129
Sabitler 129
Enum Sabiti (Enumeration constant) 130
Çoktan Seçmeli Değerlendirme Soruları 132

7. Operatörler ve Matematiksel İfadelerin Bilgisayar Ortamında Gösterimi 135


Operatörler 135
Aritmetiksel Operatörler 136
Artırma ve Azaltma Operatörleri 141
Şüpheli Kodlar: Java ve C/C++ Farkı 142
Aritmetiksel Atama Operatörleri 142
Karşılaştırma Operatörleri 144
Mantıksal Operatörler 146
Bit İşlem Operatörleri 149
Genel Olarak Operatörlerin Öncelik Sıraları 153
Çoktan Seçmeli Değerlendirme Soruları 154

8. Algoritmadan Kodlamaya Geçiş 161


Giriş 161
Veri Girişi ve Ekran Çıktısı İşlemleri 162
Ekrana Yazdırma (Çıktı işlemi) Komutları 163
printf Komutu 164
Çıkış (Escape) Karakterleri 166
Java Dilinde printf Komutu ile Kullanılan Tarih-Saat Fonksiyonları 167
Veri Girişi (Girdi işlemi) komutları 168
C/C++ Dili Veri Giriş Komutları 169
Java Dili Veri Giriş Komutları 170
Giriş-Çıkış İşlemleri ile İlgili Program Örnekleri 173
ix
Çoktan Seçmeli Değerlendirme Soruları 185

9. Karar Yapıları (if-else, switch case) 189


Giriş 189
Seçimli - Karar Yapıları (Selection Structures) 189
Tek Seçimli Yapı (If Deyimi) 190
Çift Seçimli Yapı (If/Else Deyimi) 194
Koşul Operatörü (?:) 195
Çok Seçimli Yapı (İç içe if ya da switch case yapısı) 200
İç içe if/else yapısı 200
switch case Deyimi 201
break Deyimi 202
Çoktan Seçmeli Değerlendirme Soruları 217

10. Döngüler (Tekrarlı Yapılar) 221


Giriş 221
Sayaç ve Döngü Mantığı 222
Tekrar Sayısı Belli Olan Döngüler (for Döngüleri) 223
Tekrar Sayısı Koşula Bağlı Döngüler (while/do-while Döngüleri) 239
Döngü Kontrolünün Başta ya da Sonda Yapılmasının Farkı 241
Eşdeğer Döngüler 241
break ve continue Komutları 251
break Komutu 251
continue Komutu 253
Fibonacci Serisi ve Altın Oran (Phi Sayısı) 254
Çoktan Seçmeli Değerlendirme Soruları 259

11. İç İçe Döngüler 265


Giriş 265
Asal Sayı Programı 275
Armstrong Sayıları Programı 277
Çoktan Seçmeli Değerlendirme Soruları 280

12. C/C++’da Fonksiyonlar Java’da Metotlar 283


Giriş 283
Fonksiyon/Metot Tanımlama 284
Geri Dönüş Değeri Olmayan (void tipli) Fonksiyon Örneği 285
Geri Dönüş Değeri Olan Fonksiyon Örneği 288
return Komutu 289
Fonksiyon Prototipi Tanımlama 291
Fonksiyon/Metotlara Değer/Parametre Aktarımı 292
static Belirteci 295
x
Özyinelemeli Fonksiyonlar (Recursive Function) 302
Ackermann Fonksiyonu 305
Rastgele Sayı Üretimi 306
Sayı Tahmin Oyunu 310
Matematiksel Fonksiyonlar 313
Çoktan Seçmeli Değerlendirme Soruları 317

13. Diziler (Arrays) 321


Giriş 321
Tek Boyutlu Diziler 322
İndis (Index) 324
Dizi Elemanlarına Değer Aktarımı 324
for each Döngüsü 325
Dinamik Dizi Tanımlama ve Vektörler 325
Dizi Uygulama Örnekleri 327
Dizi Elemanlarının Dışarıdan
(Klavyeden/Konsoldan) Girilmesi 332
Fonksiyonlara Parametre Olarak Dizi Aktarımı 340
Dizi Elemanlarını Başka Bir Diziye Kopyalamak 342
Dizi Elemanlarını Sıralama 345
Dizilerde Arama 350
Luhn Algoritması 357
Histogram Programı 359
Lucas ve Fibonacci Dizileri 361
Çoktan Seçmeli Değerlendirme Soruları 363

14. İki Boyutlu Diziler (Matrisler) 369


Giriş 369
Matris Oluşturma Örnekleri 371
Matrislere Otomatik İlk Değer Verme İşlemi 377
Matris Toplamı 378
Matris Çarpımı 379
Matrislerin Fonksiyonlara İletilmesi 389
Çok Boyutlu Diziler 389
Çoktan Seçmeli Değerlendirme Soruları 392

15. Karakter Dizileri ve String İşlemleri 399


Giriş 399
Bir Karakter Dizisinin Elemanlarına
(Tek Bir String’in İfadenin Karakterlerine) Erişmek 400
String/Karakter Dizilerini Ekrana Yazdırmak 402
Programlama Dillerine Göre String İşlem Fonksiyonları 405
xi
C/C++ string İşlem Fonksiyonları 405
C/C++ String/Sayısal Dönüşümleri 407
C++ Diline Özgü string İşlem Fonksiyonları 407
Java String İşlem Metotları 408
Java StringBuilder Sınıfı 409
Java String/Sayısal Dönüşümleri 410
Thue-Morse Dizisi 414
Türkçe İngilizce Sözlük 415
Şifre/Password Sorgulaması 416
Programlama Dillerine Göre Karakter İşlem Fonksiyonları 419
C/C++ Karakter İşlem Fonksiyonları 419
Java Karakter İşlem Fonksiyonları 420
Palindrom Uygulaması 423
Fibonacci Karakter Dizisi 426
Takvim Uygulaması 429
Çoktan Seçmeli Değerlendirme Soruları 432

16. Dosyalama 437


Dosya Kavramına Giriş 437
Klasik Dosya Giriş- Çıkış İşlemleri 439
Stream Kavramı 439
Java Stream Kavramı 440
C++ Stream Kavramı 443
C/C++ Klasik Dosya İşlemleri 443
Metin Dosyasına Veri Yazmak 446
Metin Dosyasından Veri Okumak 447
Metin Dosyasına Veri Eklemek 451
Rastgele Erişimli Dosyalar (Random Access Files) 453
Rastgele Erişimli ve Sıralı Erişimli Dosya Farkı 453
Java Dili Rastgele Erişimli Dosya İşlemleri 454
C/C+ Dili Rastgele Erişimli Dosya İşlemleri 457
Yapılar ve Kayıt Deseni Oluşturma 459
İkili Dosyalar (Binary Files) 464
Çoktan Seçmeli Değerlendirme Soruları 466

17. Nesne Yönelimli Programlama 469


Giriş 469
Nesne-Sınıf İlişkisi 470
Nesne Yönelimli Programlama Temel Kavramları 471
Sınıf (Class) 471
Nesne (Object) 472
Bir Sınıftan Nesne Türetme 473
xii
Nesne Üyelerine Erişim Belirteçleri 473
Yapıcı ve Yıkıcı Fonksiyonlar 476
Kalıtım (Inheritance) 478
Sarmalama (Encapsulation) 481
Çok Biçimlilik (Polymorphism) 482
Soyut Sınıf (Abstract Class) 485
C++ ve Java’da Soyut Sınıf Nasıl Tanımlanır? 486
Çoktan Seçmeli Değerlendirme Soruları 489
EK-1: RAPTOR: Akış Şemaları ile Programlama 493
KAYNAKLAR 497
DİZİN 499

xiii
ÖNSÖZ
Herhangi bir problemin çözümü için izlenen sınırlı, sıralı adımlar dizisi olan al-
goritma örneklerine hayatımızın her alanında rastlamaktayız. Tarife uygun yemek
yaparken, bir örneğe bakarak kazak örerken, kullanma kılavuzuna uyarak bir
elektronik eşyayı çalıştırırken veya demonte bir masayı sıra numaralarına baka-
rak kurarken aslında bir algoritma takip edersiniz.

Algoritmaların matematiksel işlemler üzerine bilinen ilk uygulanışı ise algoritma


kelimesine de ismini veren ‘El-Harezmi’ tarafından 9. yy’da gerçekleşmiştir.

C/C++ ve Java dilleri aynı gramer yapısına sahip dillerdir. Elinizdeki kitap, C/C++
ve Java dillerinde algoritma mantığını kavramak, akış şemaları tasarlamak, prog-
ramlamayı öğrenmek veya bir dilde programlama bilip de başka bir dilde de bu be-
cerisini geliştirmek isteyenler için başlangıç ve orta seviyede bir programlama ki-
tabıdır. Ayrıca bu kitap, yükseköğretimde okutulan “programlama”, “algoritma ve
programlama”, “bilgisayar programlama” gibi derslerin müfredatları dikkate alına-
rak 17 bölüm olarak hazırlanmıştır.

Kitap içerisinde “bilgisayarın temel yapısı, algoritma, akış şemaları, sayı sistemle-
ri, temel programlama kavramları (değişkenler, veri tipleri, operatörler), giriş- çıkış
(konsol) işlemleri, karar yapıları, kontrol yapıları (döngüler), fonksiyonlar/metotlar,
diziler/matrisler, string işlemler, dosyalama, nesne yönelimli programlama” konuları
~210 örnekle, üç programlama dilindeki farkları belirtilerek anlatılmıştır.

Ayrıca video içeriğinde C++ ve Java kod örnekleri haricinde RAPTOR akış şema-
sı yorumlayıcısı ile de örnekler geliştirdik. RAPTOR ile algoritmanızın doğru çalı-
şıp çalışmadığını adım adım test edebilir ve otomatik olarak istediğiniz bir dile/koda
(C/C++, Java gibi) dönüştürebilirsiniz.

Kitaptaki tüm uygulamalar hem C/C++ hem de Java dillerinde test edilip, çalıştırıl-
mıştır. Kitapta her bölümün sonuna çoktan seçmeli sorular eklenerek (toplam 207
soru) okuyucunun/programcının bilgisi ölçülmüştür. Bu test soruları haricinde her
bir bölüm içerisinde birçok çalışma sorusuna da yer verilmiştir. Bu çalışma soruları-
nı yapmaya çalışmanızı tavsiye ederim. Unutmayın ki programlama beceriniz kod
yazdıkça ve proje geliştirdikçe artacaktır.

Kitaptaki gördüğünüz hataları, kusurları tarafıma e-mail ile bildirmenizden mutlu-


luk duyarım. Faydalı olması dileklerim ile...
Dr. Bülent Çobanoğlu,
Ocak 2018, Sakarya,
e-mail: cobanoglubulent@gmail.com

You might also like