Yrd. Doç. Dr. Caner ÖZCAN
Derse Giriş Ders Web Sitesi: www.canerozcan.net Ofis Saatleri: Salı 11:00-13:00 Perşembe 15:30-17:30 ya da email ile randevu alınız: canerozcan@karabuk.edu.tr Kaynak Kitaplar: Doç. Dr. Fahri Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin Yayıncılık, 12. Baskı, 2015 Brookshear J. G., Computer Science: An Overview, Pearson International Edition, 2007 2
Derse Giriş Bol bol pratik yapın! Notlandırma Vize Sınavı: %40 Final Sınavı: %60 Not için değil, öğrenmek için çalışın. Not nasılsa kazanılır. 3
Dönem Boyunca Görülecek Konular Rekürsif Fonksiyonlar İşaretçiler (Değer Yoluyla Çağırma, Referans Yoluyla Çağırma) İşaretçiler (Dinamik Bellek Yönetimi) İşaretçiler ile İlgili Örnekler Struct, Enum ve Typedef Tanımlamaları Tek Bağlı Doğrusal Listeler Tek Bağlı Doğrusal Listeler Sıralama ve Arama Algoritması (Seçmeli Sıralama-Ardışıl Arama) String (strcpy, strlen, strcmp, vb.) ve Matematiksel (rand,pow,floor,ceil vb.) Fonksiyonlar Dosya İşlemleri (Sıralı Erişimli Dosyalar) Dosya İşlemleri (Rasgele Erişimli Dosyalar) Bitişlem Operatörleri C Programlama Dili ile Temel Grafik İşlemleri C Programlama Dili ile Temel Grafik İşlemleri 4
Saklama Sınıfları Nesne kendi bloğu içinde oluşturulur ve yok edilir auto: yerel değişkenler için ön tanımlıdır auto double x, y; register: değişkeni yüksek hızlı kaydedicilere yerleştirmeye çalışır register int counter= 1; 5
Saklama Sınıfları Statik Saklama Değişken tüm programın çalışması sürecinde var olur. Ön tanımlı değeri sıfırdır. static: fonksiyonlar içinde tanımlanan yerel değişkenlerdir. Fonksiyon sonlandıktan sonra değişken değeri saklanır Sadece tanımlandıkları fonksiyonda geçerlidirler 6
Saklama Sınıfları Dosya kapsama alanı Bir fonksiyon dışında tanımlanan bir tanımlayıcı dosya kapsama alanına sahiptir. Böyle bir tanımlayıcı tanımlandıkları noktadan itibaren dosya sonuna kadar tüm fonksiyonlar içinde geçerlidir Global değişkenler, fonksiyon tanımlamaları hep dosya kapsama alanına sahiptir. 7
Saklama Sınıfları Blok Alanı Blok içinde tanımlanan tanımlayıcılar Blok alanı tanımlandığı noktadan başlar sağ kırlangıç paranteze kadar devam eder. Değişkenler, yerel değişkenler ve fonksiyonlar için kullanılır. Dış bloklar eğer iç blokta aynı isimle değişken varsa iç bloktan gizlenirler. 8
Saklama Sınıfları 9
Saklama Sınıfları 10
Rastgele Sayı Üretimi rand fonksiyonu <stdlib.h> kütüphanesi yüklenmelidir 0 ile RAND_MAX (en düşük 32767- maks değeri 16 bit tamsayı) RAND_MAX <stdlib.h> içinde tanımlanmış sembolik sabittir. 0 ve RAND_MAX arasındaki her sayı seçilmek için eşit olasılığa sahiptir. Rand ile üretilecek rastgele sayı aralığı uygulama ihtiyacına göre değişir. 11
Rastgele Sayı Üretimi Yazı tura programı sadece yazı için 1 tura için 0 a ihtiyaç duyar. Zar kullanan bir program 1 ile 6 arasında rastgele sayı üretmelidir. ölçekleme Rand tarafından üretilen değerler daima 0 ile RAND_MAX arasındadır. 0 rand ( ) RAND_MAX 0 ile 5 arasında sayı üretmek için rand fonksiyonu ile % kalan operatorü kullanılır. Buna ölçekleme denir. rand( ) % 6 12
Rastgele Sayı Üretimi 6 sayısı ölçekleme faktörüdür. Aralığı kaydırmak için sonuca 1 eklenir. randnumber = 1 + rand ( ) % 6 1 randnumber 6 aralığında sayılar üretir. Genel kural: n = a + rand ( ) % b ; a kaydırma değeridir. b ölçekleme faktörüdür 13
Rastgele Sayı Üretimi 14
Rastgele Sayı Üretimi Örnek Program: 6000 kere zar atma 1 den 6 ya kadar tamsayılar yaklaşık olarak 1000 defa seçilmelidir. 15
Rastgele Sayı Üretimi 16
Rastgele Sayı Üretimi 17
Rastgele Sayı Üretimi Rand fonksiyonu gerçekte sahte rastgelelik üretir. rand fonksiyonunu defalarca çağırmak rasgeleymiş gibi görünen bir sayı dizisi oluşturur. Ancak, bu sayı dizisi her program çalıştırıldığında kendi kendini tekrarlar. Her program çalışmasında farklı dizilimde gerçek rastgele sayılar üretebilmek için srand fonksiyonu kullanılır. srand argüman olarak bir tamsayı alır. srand rand fonksiyonunun programın her çalışmasında farklı dizilimde sayılar üretilmesini sağlar. 18
Rastgele Sayı Üretimi 19
Rastgele Sayı Üretimi 20
Rastgele Sayı Üretimi Her seferinde seed değeri girmeden rastgele sayı üretmek için srand ( time (NULL)); Sistem saati otomatik olarak seed değeri elde etmek için kullanılır. time fonksiyonu 1970 Ocak ayı gece yarısından itibaren kaç saniye geçtiğini döndürür. time fonksiyonu için <time.h> kütüphanesi kullanılır. 21
Şans Oyunu: Craps Kurallar: İki zar atılır Zarların toplamı hesaplanır İlk atışta 7 veya 11 gelirse oyuncu kazanır İlk atışta 2, 3 veya 12 gelirse oyuncu kaybeder İlk atışta 4,5,6,8,9,10 gelirse bu oyuncunun puanı oluyor. Oyuncu 7 atmadan önce kendi puanını tutturmalıdır. 22
Özyineleme (Rekürsif) Özyinelemeli fonksiyonlar Kendi kendini çağıran fonksiyonlar Eğer fonksiyon temel durum ile çağırılırsa bir sonuç döndürür. Eğer fonksiyon daha karışık bir problem ile çağırılırsa fonksiyon fonksiyon problemi iki kavramsal parçaya böler; Birincisi: fonksiyonun işi nasıl yapacağını bildiği kısım İkincisi: fonksiyonun işi nasıl yapacağını bilmediği kısım İkinci kısım orijinal probleme benzemelidir. Fonksiyonun bilmediği kısmı çözebilmek için kendisinin bir kopyasını çalıştırır Sonunda temel durum çözülür 23
Özyineleme (Rekürsif) Faktöriyel probleminin rekürsif tanımlaması aşağıdaki tanımlamayla yapılır. n! = n. (n-1)! Örneğin: faktöriyel 5! = 5. 4. 3. 2. 1 Dikkat edin 5! = 5. 4! 4! = 4. 3!... Faktöriyel hesabı rekürsif olarak hesaplanabilir. Temel durumu çöz ( 1! = 0! =1) daha sonra 2! = 2. 1! = 2*1 = 2 3! = 3. 2! = 3*2 = 6 24
Özyineleme (Rekürsif) 25
Özyinelemeli Faktöriyel Hesabı 26
Özyinelemeli Faktöriyel Hesabı 27
Özyinelemeli Fibonacci Sayıları Fibonacci serisi: 0, 1, 1, 2, 3, 5, 8... Her bir sayı kendinden önceki iki sayının toplamıdır Temel durum: Fib(0) = 0 Fib(1) = 1 Rekürsif olarak çözülebilir : Fib (n) = Fib(n-1) + Fib(n-2) 28
Özyinelemeli Fibonacci Sayıları 29
Özyinelemeli Fibonacci Sayıları n. Fibonacci sayısını bulma 30
Özyinelemeli Fibonacci Sayıları 31
Kaynaklar Doç. Dr. Fahri Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin Yayıncılık, 12. Baskı, 2015. J. G. Brookshear, Computer Science: An Overview 10th Ed., Addison Wisley, 2009. Kaan Aslan, A dan Z ye C Klavuzu 8. Basım, Pusula Yayıncılık, 2002. Paul J. Deitel, C How to Program, Harvey Deitel. 32