|
Bu kitabımız program
tasarımına yeni başlayanlar için programlama temelleri ve mantığını
kazandırmak amacıyla hazırlanmıştır. Bilindiği gibi programlama dilleri
öğrenilmeden önce programlama tekniği ve algorıtma tasarımı mantığı
öğrenilmedir. Programlama Sanatı Algorıtmalar adlı bu kitabımız
öğrencilerimize bol bol akış şeması örnekleri vererek kendi kendilerine
programlama yapabilme ve algorıtma oluşturabilme becerisi ve yeteneği
kazandırmaya çalışmaktadır.
Üniversitelerde ilk yıllarda verilen “Bilgisayar
Programlama”, “Programlama Teknikleri”,
“Programlamaya Giriş” ve “Programlama
Mantığı” gibi derslerin ana kitabı veya yardımcı kitabı olma
özelliğindedir.
Güçlü bir
temel kazanmak program tasarımı için en önemli başlangıç adımıdır
denilebilir...
Programlama tekniğini ve mantığını öğrenmek ve bol
örneklerle geliştirmek isteyen öğrencilerimize yararlı bir kaynak
özelliğindedir.
İÇİNDEKİLER
Bölüm 1.
Program TasarImInda Temel Kavramlar
Program, Yazilim, Program kodu
Degisken, Diziler, Operatör, Deyim/Ifade, Atama deyimi, Donanim
Bellek, Saklama birimi, Islemci, Makina kodu, Assembly dili
Isletim sistemi
Dosya, Dosya sistemi, Karakter tablosu
Sözce (String), Dinamik/statik bellek kullanimi, Veri yapisi, Veri
modeli
Böl
ve yönet yaklasimi, Çevrimli ve rekürsif yaklasim, Programlama dilleri
ve C/C++/JAVA
Veritabani ve SQL, Alt-program/yordam, Sinif/nesne
Kullanici/sunucu mimarisi, Ag programlama
Program zaman ve bellek maliyetleri
Kiyaslama (Benchmarking), Kümeleme
Karakterleri
Sorular
Bölüm 2.
algoritma tasarImI
ve
aKIŞ ŞemalarI
2.1.
Algoritmada Olmasi Gereken Özellikler
2.2.
Algoritma Tasarimi
2.3.
Akis Semalari
2.3.1. Akis Semasi Simgeleri
2.3.2. Tipik Akis Semasi Parçalari
2.4.
Akis Semasi Örnekleri
2.5.
Akis Semasi Disinda Sekilsel Tasarim
2.6.
Özet
2.7.
Sorular
Bölüm 3.
c diliNE GIRIS
Yeni
Baslayanlarin C Dilinde Bilmesi Gerekenler
C
Dili Anahtar Sözcükleri (keywords)
3.1.
Bir C programi
3.2.
main() Fonksiyonu
3.3.
C Dilinde Fonksiyonun Genel Yapisi
3.4.
printf()
ve
scanf()
Fonksiyonlari
3.5.
Fonksiyona Parametre Aktarimi/Alis-Verisi
Dizilerin Fonksiyona Aktarilmasi
3.6.
Özet
3.7.
Sorular
Bölüm 4.
c dili TEMEL VERI TÜRLERI
VE
DEGISKENLER
4.1.
Temel Veri Türleri
4.1.1. Karakter
(Character)
ASCII Karakter Tablosu
Ünikod
4.1.2. Tamsayi
4.1.3. Gerçel Sayi
4.1.4. Sözce/Karakter Dizisi
4.1.5. Dizi/Matris
4.2.
Türetilmis/Tanimlamali Veri Türleri
4.3.
Degisken Bildirim Yerleri
Yerel Bildirim
Genel (Global) Bildirim
Formal Bildirim
Dissal (Extern) Bildirim
Statik (Static) Degisken Bildirimi
Saklayici Türden (Register) Degisken Bildirimi
volatile
Türden Degisken Bildirimi
4.4.
Sabitler
4.5.
Özet
4.6.
Sorular
Bölüm 5.
c dili OPERATÖRLERI
5.1.
Aritmetik Operatörler
5.2.
Karsilastirma/Iliski Operatörleri
5.3.
Mantiksal Operatörler
5.4.
Bitler Üzerinde Islem Yapan (bitwise) Operatörler
5.5.
Diger Operatörler
5.5.1. Atama Operatörleri
5.5.2. ?: Karsilastirma Operatörü
5.5.3. & ve * Isaretç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
DENETIM 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çiçe Kullanilmasi
6.2.
Denetim Deyimleri
6.2.1. Karsilastirma Deyimleri
if-else
Deyimi
switch
Deyimi
6.2.2. Dallanma/Kirma Deyimleri
goto
Deyimi ve Etiket,
break
continue
6.3.
Özet
6.4.
Sorular
Bölüm 7.
GİRİŞ/ÇIKIŞ İŞLEMLERİ
7.1.
Standart Giris Çikis Kütüphanesi
7.2.
Temel Giris Çikis Islemleri
7.2.1. getchar( ) - putchar( ) Ikilisi
7.2.2. gets( ) - puts( ) Ikilisi
7.2.3. scanf( ) - printf( ) Ikilisi
7.2.4. Diger Giris/Çikis Fonksiyonlari
7.3.
Dosya Giris Çikis Islemleri
7.3.1. getch( ) - putc( ) Ikilisi
7.3.2. fgetc( ) - fputc( ) Ikilisi
7.3.3. fgets( ) - fputs( ) Ikilisi
7.3.4. fscanf( ) - fprintf( ) Ikilisi
7.3.5. fread( ) - fwrite( ) Ikilisi
7.3.6. fopen( ) - fclose( ) Ikilisi
7.3.7. Diger Dosya Fonksiyonlari
7.4.
Diger G/Ç Fonksiyonlari
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 Baslangiç Degeri Verilmesi
8.6.
Dizi Ile Isaretçi Arasindaki Iliski
8.7.
Dinamik Dizi Kullanimi
8.8.
Dizilerin Fonksiyona Aktarilmasi
8.9.
Dizi Uygulama Örnekleri
Kabarcik Siralama
Hizli Siralama, Ardisil Siralama
Ikili Arama
Matris Toplama
Matris Çarpma
Varyans/Standart Sapma
8.10. Hazir Dizi Fonksiyonlari
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 Yapilari
10.3. Topluluk
(struct)
Deyimi
10.4. Ortaklik
(union)
Deyimi
10.5. Yeni Veri Sinifi ve
enum
10.5.1. Yeni Kümenin Elemanlari ve Atama
10.6. Özet
10.7. Sorular
BÖLÜM 11.
dosyalama/saklama
11.1. Metin (Text) Dosyasi - Ikili (Binary) Dosya Ne Demektir?
11.2. Üst Düzey Dosya Erisimleri Örnek Uygulamalar
11.3. Alt Düzey Dosya Erisimleri Örnek Uygulamalari
11.4. Özet
11.5. Sorular
BÖLÜM 12.
VERİ MODELLERİ
12.1. Baglantili Liste Veri Modeli
Ekleme Islemi
Listeleme Islemi
Arama Islemi, Silme Islemi
Baglantili Liste Uygulamasinin Tam Kodu
12.2. Agaç Veri Modeli
Agaca Dügüm Ekleme
Agaci Dolasma/Dügümleri Listeleme/Arama Algoritmasi
Dügüm Silme/Çikartma Algoritmasi
Dügüm Bilgisini Hazirlama
Ikili Agaç Uygulamasinin Tam Kodu
12.3. Graf Veri Modeli
12.4. Durum Makinasi Veri Modeli
12.5. Veri-tabaninda Iliskisel Veri Modeli
12.6. Ag Veri Modeli
12.7. Özet
12.8. Sorular
BÖLÜM 13.
C DİLİNE HAS ÖZELLİKLER
13.1. Isaretçiler (Pointers)
13.1.1 Isaretçi Degiskenler Üzerinde Aritmetik Islemler
13.1.2. Isaretçilerin Karsilastirilmasi
13.1.3. Isaretçi ve Diziler Arasindaki Iliski
13.1.4. Isaretçiyle Fonksiyon Çagirma
13.2. Arka Planda Denetimsizlik
13.3. Kütüphane Ekleme Kolayligi
13.4. Özet
13.5. Sorular
BÖLÜM 14.
SÖZCE
(STRING)
VE
KARAKTER FONKSİYONLARI
14.1. Sözce Fonksiyonlari
14.1.1. Sözce Karsilastirma
14.1.2. Sözce Kopyalama
14.1.3. Sözce Birlestirme
14.1.4. Sözce Içerisinde Sözce veya Karakter Arama
14.1.5. Sözceden Sayisala Dönüsüm
14.1.6. Diger Sözce Fonksiyonlari
14.2. Bellek Fonksiyonlari
14.3. Karakter Fonksiyonlari
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 Aktarimi
15.3. Fonksiyona Degisik Sayida Parametre Aktarimi
15.4. Ana Programa/main()'e
Parametre Aktarimi
15.5. Fonksiyonlarin Isaretçiyle Çagrilmasi
15.6. Baslik
(Header)
Dosyalari (*.h)
15.6.1. Standart Baslik Dosyalari
15.6.2. Makro Fonksiyon/Kütüphane Fonksiyonu?
15.6.3. Özel Baslik Dosyasi Olusturma
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 Fonksiyonlari
16.1.3. Logaritmik ve Üssel Fonksiyonlar
16.1.4. Mutlak Deger, Bölme, Karekök v eRasgele Sayi Fonksiyonlari
16.2. Çesitli UUygulamalar
. Faktöriyel Hesabi
Ikinci Dereceden Denklemin Kökleri
OBEB Bulunmasi, OKEK Bulunmasi
Aritmetik/Geometrik Ortalama
Seri Hesabi
Integral Hesabi
Basit Differansiyel Denklem Hesabi
16.3. Özet
16.4. Sorular
BÖLÜM 17.
DENETIM
VE
HATA AYIKLAMA FONKSİYONLARI
17.1. Ayricalikli Durum Denetimi
17.2. Hata Ayiklama Fonksiyonlari
17.3. Yerel Olmayan Dallanma Fonksiyonlari
17.4. Özel Amaçli Fonksiyon Sonlandirma Fonkisyonlari
17.5
Özet
17.6. Sorular
BÖLÜM 18.
TARIH/ZAMAN
VE
YERELLESTIRME FONKSIYONLARI
18.1. Tarih/Zaman Fonksiyonlari
18.2. Yerellestirme Fonksiyonlari
18.3. Özet
18.4. Sorular
BÖLÜM 19. İŞLETIM
SISTEMINE DAYALI UYGULAMALAR
19.1. Isletim Sistemiyle Etkilsen Birkaç Fonksiyon
19.1
Ag Programlama
19.3. Sorular
BÖLÜM 20. c dİLİ
ÖNIŞLEMCİLERİ (prePROCESSOR)
20.1. Önislemci #define
20.2. Önislemci #undef
20.3. Önislemciler #include
20.4. Önislemciler #if, #else, #endif, #elif, #ifdef ve #ifndef
20.5. Önislemci #line
20.6. 20.2. Önislemciler #error ve #pragma
20.7. Özet
20.8. Sorular
BÖLÜM 21.
PROGRAM
TASARIMINDA
ÇOK KARŞILAŞILAN HATALAR
KAYNAKÇA
DIZIN
Ö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...
Sevgilerimle,
Dr.Rifat ÇÖLKESEN
Yayinevimizin konuyla
ilgili eserleri:
Veri Madenciligi (teori ve
uygulamasiyla)
Dr. Gökhan SILAHTAROGLU
Veri Madenciligi
Yöntemleri
Dr. Yalçın ÖZKAN
Bilgisayar
Mühendisligine Giris
Ortak Yazarli (Editör: Dr. Rifat ÇÖLKESEN)
Elektronik
Mühendisligine Giris
Ortak Yazarli (Editör: Dr. Cengiz UGURKAYA)
Endüstri
Mühendisligine Giris
Ortak Yazarli (Editör: Prof. Dr. Ercan ÖZTEMEL)
Bilgisayar
Mimarisi
Ortak Yazarlı
Modern
Sezgisel Teknikler ve Uygulamalari
Ortak Yazarlı
Elektronik
Mühendisligine Giris
Ortak Yazarli (Editör: Dr. Cengiz UGURKAYA)
Endüstri
Mühendisligine Giris
Ortak Yazarli (Editör: Prof. Dr. Ercan ÖZTEMEL)
Veritabani ve
Uygulamalari Yilmaz
KAYA
ve Ramazan TEKIN
Sistem Analizi ve
Tasarimi (Bilgisayar Bilimlerinde) Prof.Dr.
Oya KALIPSIZ ve ark.
Yazilim
Mühendisligi
Dr.Erhan SARIDOGAN
C++ ve Nesneye Yönelik
C Programlama
Dr.Erhan SARIDOGAN
Programlama Sanati Algoritmalar (C Uyarlamasi)
Dr.Cengiz UGURKAYA (Editör)
Programlama Sanati Algoritmalar (JAVA Uyarlamasi)
Dr.Rifat ÇÖLKESEN (Editör)
C Programlama Dili -
Iste C Dr.Rifat ÇÖLKESEN
Uygulamali C
Programlama Dili Bora TUNCER
Veri
Yapilari ve Algoritmalar
Dr.Rifat ÇÖLKESEN
Veri
Yapilari Algoritma Temelleri
Dr.Sefer KURNAZ
MATLAB Kilavuzu Dr.Aslan
INAN
JAVA ve Yazilim Tasarimi
Altug B. ALTINTAS
Linux Altinda
Programlama
Ali VARDAR
GTK/GNOME Programlama
Ali VARDAR |