Programlama Sanatı ve Algoritmalar

Toros Rifat ÇÖLKESEN

Editör: Cengiz UĞURKAYA

 

 

 

 

 

 

 

 

 

ISBN: 975-6797-53-3

22. basım, 336 sayfa, (16,5x24 cm2)            şimdi satın al

Kitabımız 112  üniversitede ders kitabı olarak kullanmaktadır.

 

Bu kitabın amacı, program tasarımına yeni başlayan bireylere konuyla ilgili temel kazandırımı sağlamaktır; programlama konusunda uzmanlaşmak için gerekli alt-yapıyı sağlıklı ve kalıcı bir şekilde kazandırmaktır. Kitabımızda, ayrıca, veri modelleri ve yapıları, dosyalama sistemleri, çevrimli ve rekürsif programlama, G/Ç sistemleri gibi konular da yalın bir dille ele alınmıştır.

Konular ele alınırken bolca gerçekçi örnekler verilerek konuların iyice anlaşılması hedeflenmiştir. 

Kitabımız “Bilgisayar Programlama Dilleri”, “Bilgisayar Programlama Teknikleri”, “Programlamaya Giriş” ve “Programlama Tasarımı ve Mantığı” gibi dersler için ciddi bir kaynak kitap özelliğindedir. program tasarımında temel kavramlar ~ algoritma tasarımı ve akış şemaları    C Programlama Dili ~ veri türleri ve değişkenler ~ operatörler; döngü ve denetim G/Ç işlemleri ~ dizi ve matrisler ~ çevrimli ve rekürsif programlama ~ veri yapıları ~ disk erişimi dosyalama ~ veri modelleri ~ sözce ve karakter fonksiyonlar matematiksel fonksiyonlar ~ hata ayıklama fonksiyonları ~ tarih zaman ve yerelleştirme fonksiyonları ~ işletim sistemine dayalı uygulamalar  ~ önişlemciler



İÇİNDEKİLER

Bölüm 1. Program TasarImInda Temel Kavramlar

Program, Yazılım, Program kodu

Degisken, Diziler, Operatör, Deyim/İfade, Atama deyimi, Donanım

Bellek, Saklama birimi, Işlemci, Makina kodu, Assembly dili

İşletim sistemi

Dosya, Dosya sistemi, Karakter tablosu

Sözce (String), Dinamik/statik bellek kullanımı, Veri yapısı, Veri modeli

Böl ve yönet yaklaşımı, Çevrimli ve rekürsif yaklaşım, Programlama dilleri ve C/C++/JAVA

Veritabanı ve SQL, Alt-program/yordam, Sınıf/nesne

Kullanıcı/sunucu mimarisi, Ag programlama

Program zaman ve bellek maliyetleri, Kıyaslama (Benchmarking)

Kümeleme Karakterleri

Sorular

 

Bölüm 2. algoritma tasarImI ve aKIŞ ŞemalarI 

2.1. Algoritmada Olması Gereken Özellikler

2.2. Algoritma Tasarımı

2.3. Akış Şemaları

2.3.1. Akış Şeması Simgeleri

2.3.2. Tipik Akış Şeması Parçaları

2.4. Akış Şeması Örnekleri

2.5. Akış Şeması Dışında Şekilsel Tasarım

2.6. Özet

2.7. Sorular

 

Bölüm 3. c diliNE GİRİş

Yeni Başlayanların C Dilinde Bilmesi Gerekenler

C Dili Anahtar Sözcükleri

3.1. Bir C Programı

3.2. main() Fonksiyonu

3.3. C Dilinde Fonksiyonun Genel Yapısı

3.4. printf() ve scanf() Fonksiyonları

3.5. Fonksiyona Parametre Aktarımı

       Dizilerin Fonksiyona Aktarılması

3.6. Özet

3.7. Sorular

 

Bölüm 4. c dili TEMEL VERI TÜRLERI VE DEĞİŞKENLER

4.1. Temel Veri Türleri

4.1.1. Karakter (Character): ASCII Karakter Tablosu ve Ünikod

4.1.2. Tamsayı

4.1.3. Gerçel Sayı

4.1.4. Sözce/Karakter Dizisi

4.1.5. Dizi/Matris

4.2. Türetilmiş/Tanımlamaı Veri Türleri

4.3. Degişken Bildirim Yerleri

Yerel Bildirim, Genel (Global) Bildirim, Formal Bildirim, Dışsal (Extern) Bildirim

Statik (Static) Değisken Bildirimi, Saklayıcı Türden (Register) Değişken Bildirimi

volatile Türden Değişken Bildirimi

4.4. Sabitler

4.5. Özet

4.6. Sorular

 

Bölüm 5. c dili OPERATÖRLERİ

5.1. Aritmetik Operatörler

5.2. Karsilastirma/Iliski Operatörleri

5.3. Mantıksal Operatörler

5.4. Bitler Üzerinde İşlem Yapan (bitwise) Operatörler

5.5. Diğer Operatörler

5.5.1. Atama Operatörleri

5.5.2. ?: Karsilastirma Operatörü

5.5.3. & ve * İşaretçi Operatörleri

5.5.4. sizeof Operatörü

5.6. Operatörlerin Öncelikleri ve Bagintilar

5.7. Bagintilarda Tür Dönüsümleri

5.8. Özet

5.9. Sorular

 

Bölüm 6. DÖNGÜ VE DENETİM DEYİMLERİ

6.1. Döngü Deyimleri

6.1.1. while Deyimi

6.1.2. do-while Deyimi

6.1.3. for Deyimi

6.1.4. Döngü Deyimlerinin İçiçe Kullanılması

6.2. Denetim Deyimleri

6.2.1. Karşılaştırma Deyimleri

if-else Deyimi, switch Deyimi

6.2.2. Dallanma/Kırma Deyimleri: goto Deyimi ve Etiket, break, continue

6.3. Özet

6.4. Sorular

 

Bölüm 7. GİRİŞ/ÇIKIŞ İŞLEMLERİ

7.1. Standart Giriş Çıkış Kütüphanesi

7.2. Temel Giris Çıkış İşlemleri

7.2.1. getchar( ) - putchar( ) İkilisi

7.2.2. gets( ) - puts( ) İkilisi

7.2.3. scanf( ) - printf( ) İkilisi

7.2.4. Diger Giris/Çikis Fonksiyonları

7.3. Dosya Giriş Çıkış İşlemleri

7.3.1. getch( ) - putc( ) İkilisi

7.3.2. fgetc( ) - fputc( ) İkilisi

7.3.3. fgets( ) - fputs( ) İkilisi

7.3.4. fscanf( ) - fprintf( ) İkilisi

7.3.5. fread( ) - fwrite( ) İkilisi

7.3.6. fopen( ) - fclose( ) İkilisi

7.3.7. Diğer Dosya Fonksiyonları

7.4. Diger G/Ç Fonksiyonları

7.5. Özet

7.6. Sorular

 

Bölüm 8. diZİLER ve matrisler

8.1. Dizi Türleri ve C Dili

8.2. Vektör Diziler

8.3. Matris Diziler

8.4. Uzay Diziler

8.5. Dizilere Baslangıç Değeri Verilmesi

8.6. Dizi Ile İşaretçi Arasındaki Iliski

8.7. Dinamik Dizi Kullanımı

8.8. Dizilerin Fonksiyona Aktarılması

8.9. Dizi Uygulama Örnekleri

Kabarcık Sıralama

Hizli Siralama, Ardisil Sıralama

İkili Arama

Matris Toplama

Matris Çarpma

Varyans/Standart Sapma

8.10. Hazır Dizi Fonksiyonları

bsearch()

qsort()

8.11. Özet

8.12. Sorular

 

Bölüm 9. ÇEVRİMLİ ve rekürsif programlama

9.1. Çevrimli Programlama

9.2. Rekürsif Programlama

9.3. Çevrimli mi ? - Rekürsif mi?

9.4. Özet

9.5. Sorular

 

Bölüm 10. veri yapIlarI ve TanImlamalI Veri Türleri 

Ham Veriden Bilgiye Dönüsüm

10.1. Temel Veri Yapilari

10.2. Tanimlamali Veri Yapıları

10.3. Topluluk (struct) Deyimi

10.4. Ortaklık (union) Deyimi

10.5. Yeni Veri Sinifi ve enum

10.5.1. Yeni Kümenin Elemanları ve Atama

10.6. Özet

10.7. Sorular

 

BÖLÜM 11. dosyalama ~ saklama İŞLEMLERİ

11.1. Metin (Text) Dosyası - İkili (Binary) Dosya Ne Demektir?

11.2. Üst Düzey Dosya Erişimleri Örnek Uygulamalar

11.3. Alt Düzey Dosya Erişimleri Örnek Uygulamaları

11.4. Özet

11.5. Sorular

 

BÖLÜM 12. VERİ MODELLERİ

12.1. Bağlantılı Liste Veri Modeli

Ekleme İşlemi, Listeleme İşlemi, Arama İşlemi, Silme İşlemi

Bağlantılı Liste Uygulamasının Tam Kodu

12.2. Agaç Veri Modeli

Ağaca Düğüm Ekleme, Ağacı Dolaşma/Düğümleri Listeleme/Arama Algoritmasi

Düğüm Silme/Çıkartma Algoritması, Düğüm Bilgisini Hazırlama

İkili Ağaç Uygulamasının Tam Kodu

12.3. Graf Veri Modeli

12.4. Durum Makinası Veri Modeli

12.5. Veritabanında Ilişkisel Veri Modeli

12.6. Ağ Veri Modeli

12.7. Özet

12.8. Sorular

 

BÖLÜM 13. C DİLİNE HAS ÖZELLİKLER

13.1. İşaretçiler (Pointers)

13.1.1 İşaretçi Değiskenler Üzerinde Aritmetik İşlemler

13.1.2. İşaretçilerin Karşılaştırılması

13.1.3. İşaretçi ve Diziler Arasındaki İlişki

13.1.4. İşaretçiyle Fonksiyon Çağırma

13.2. Arka Planda Denetimsizlik

13.3. Kütüphane Ekleme Kolaylığı

13.4. Özet

13.5. Sorular

 

BÖLÜM 14. SÖZCE (STRING) VE KARAKTER FONKSİYONLARI

14.1. Sözce Fonksiyonları

14.1.1. Sözce Karsilastirma

14.1.2. Sözce Kopyalama

14.1.3. Sözce Birleştirme

14.1.4. Sözce Içerisinde Sözce veya Karakter Arama

14.1.5. Sözceden Sayısala Dönüsüm

14.1.6. Diger Sözce Fonksiyonları

14.2. Bellek Fonksiyonları

14.3. Karakter Fonksiyonları

14.4. Özet

14.5. Sorular

 

BÖLÜM 15. C FONKSİYONLARI ÜZERİNE AYRINTI

15.1. Fonksiyon Tanimi ve Bildirimi

15.2. Fonksiyonlara Parametre Aktarımı

15.3. Fonksiyona Degisik Sayida Parametre Aktarımı

15.4. Ana Programa/main()'e Parametre Aktarımı

15.5. Fonksiyonların İşaretçiyle Çağrılması

15.6. Baslik (Header) Dosyalari (*.h)

15.6.1. Standart Başlık Dosyaları

15.6.2. Makro Fonksiyon/Kütüphane Fonksiyonu?

15.6.3. Özel Başlık Dosyası Oluşturma

15.7. Özet

15.8. Sorular

 

BÖLÜM 16. MATEMATİK FONKSİYONLARI VE UYGULAMALARI

16.1. Matematiksel Fonksiyonlar

16.1.1. Trigonometrik Fonksiyonlar

16.1.2. Yuvarlatma Fonksiyonları

16.1.3. Logaritmik ve Üssel Fonksiyonlar

16.1.4. Mutlak Değer, Bölme, Karekök ve Rasgele Sayı Fonksiyonları

16.2. Çeşitli UUygulamalar

Faktöriyel Hesabı, İkinci Dereceden Denklemin Kökleri

OBEB Bulunması, OKEK Bulunması

Aritmetik/Geometrik Ortalama

Seri Hesabı, Integral Hesabı

Basit Differansiyel Denklem Hesabı

16.3. Özet

16.4. Sorular

 

BÖLÜM 17. DENETİM VE HATA AYIKLAMA FONKSİYONLARI 

17.1. Ayrıcalıklı Durum Denetimi

17.2. Hata Ayıklama Fonksiyonları

17.3. Yerel Olmayan Dallanma Fonksiyonları

17.4. Özel Amaçlı Fonksiyon Sonlandırma Fonkisyonları

17.5 Özet

17.6. Sorular

 

BÖLÜM 18. TARIH/ZAMAN VE YERELLEŞTİRME FONKSİYONLARI

18.1. Tarih/Zaman Fonksiyonları

18.2. Yerellestirme Fonksiyonları

18.3. Özet

18.4. Sorular

 

BÖLÜM 19. İŞLETİM SİSTEMİNE DAYALI UYGULAMALAR

19.1. İşletim Sistemiyle Etkileşen Birkaç Fonksiyon

19.1 Ağ Programlama

19.3. Sorular

 

BÖLÜM 20. c dİLİ ÖNIŞLEMCİLERİ (prePROCESSOR) 

20.1. Önişlemci #define

20.2. Önişlemci #undef

20.3. Önişlemciler #include

20.4. Önişlemciler #if, #else, #endif, #elif, #ifdef ve #ifndef

20.5. Önişlemci #line

20.6. Önişlemciler #error ve #pragma

20.7. Özet

20.8. Sorular

BÖLÜM 21. PROGRAM TASARIMINDA ÇOK KARŞILAŞILAN HATALAR  

KAYNAKÇA

DİZİN


 

 ÖNSÖZ

 

Program tasarımı/yazılım geliştirme işlemi, kanımca ve deneyimlerime göre  gerçekten bir sanat işi; hem konuyla ilgili bilgilere evrensel düzeyde sahip olacaksın hem de ürününe yansıtabileceğin hayal gücün olacak; hem de birşeyler üretme hırsın/isteğin olacak.

Her ne kadar bu kitabın yazarı gibi görünsem de, meslek yaşamımda, mesleki anlamda son kitabım “Veri yapıları ve Algoritmalar”dır; bu kitap üzerine çok ugraştım, tabii ki arka plada, ancak kitap konusunda istediğim birçok şeyi yapabildiğimi sanıyorum. Şu ana kadar tarafıma gelen eleştiriler/öneriler de bu yönde...

“Programlama Sanatı Algorıtmalar” adlı bu eser, daha önceki kitaplarımdan ve sayın Dr.Sefer Kurnaz’ın “Veri Yapıları ve Algoritma Temelleri” adlı kitabından toparlanmış ve bir miktarda yeni şeyler eklenmiş konuları itibariyle pek te yeni olmayan bir kitaptır. Bu kitabın hazırlanmasındaki amacımız, programlamaya yeni başlayanlara iyi bir başlangıç yaptırmak ve iyi bir temel kazandırmaktır. Çünkü doğada da herşey temel üzerine/kök üzerine kurulmuştur. Herşeyde olduğu gibi temeli atmak zor gelebilir; ancak güçlü temelin üzerine yapı çok kolay ve güvenli kurulur. 

Kitabımızda dile çok önem verilmiştir; hangi dil olursa olsun, onunla konuşuyor onunla yazıyor isek kurallarına özen göstermeli, gelişmesine ve zenginleşmesine destek olmalıyız. Dolayısıyla, Türkçe olan bu kitabımızda Türk Dili kurallarına özen göstermeye aşırı gayret ettik. Üstelik uzun süredir pek karşılığı üretilemeyen İngilizce “string” sözcüğüne karsılık dilcimiz sayın Yusuf Çotuksöken ile birlikte “sözce” karşılığını bulduk; gerçekten de çok uygun oldu...

Bu kitabımızın genç meslektaşlarımıza, bilgisayar konusunda öğrenci olan gençlerimize yararlı olacağını umuyorum. Sizlerin, ileride, daha iyilerini üretmeniz dileğiyle... Toros Rifat ÇÖLKESEN


Diğer programlama ve mühendislik kitaplarımızı incelemek için buraya tıklayınız.


Programlama Kitapları - Bilgisayar Kitapları - Üniversite Ders Kitapları