İnfografik
← Ünite 4
Computer Programming 1

Ünite 4: Chapter 5: C Functions

Math.h Kütüphane Zorunluluğu
C dilinde pow() gibi matematiksel fonksiyonları kullanabilmek için programın en üstüne #include <math.h> satırının eklenmesi kesinlikle zorunludur. Bu kütüphanedeki tüm fonksiyonlar varsayılan olarak double veri tipinde sonuç döndürür.
RAND_MAX Sabiti Sınırı
Standart kütüphanedeki rand() fonksiyonu, 0 ile sistem tarafından belirlenen RAND_MAX üst sınırı arasında rastgele tamsayılar üretir. Bu üretilen sayıları istenen bir aralığa (örneğin 1 ile n aralığına) daraltmak için mod operatörü (%) ve kaydırma işlemleri kullanılır.
1 Ocak 1970 Epoch Zamanı
Zaman tabanlı rastgele sayı tohumlaması yaparken kullanılan time(NULL) fonksiyonu, 1 Ocak 1970 tarihinden bu yana geçen toplam saniye miktarını hesaplar. Bu sayı sürekli arttığı için srand() içine seed olarak verilerek her çalışmada farklı rastgele diziler elde edilir.
Modüler Programlama Avantajı
C fonksiyonları sayesinde büyük projeler manageable (yönetilebilir) parçalara bölünür. Bu yaklaşım yazılım geliştirme sürecini hızlandırırken code repetition (kod tekrarı) riskini ortadan kaldırır ve software reusability (yeniden kullanılabilirlik) sağlar.

Anahtar Kavramlar

User-Defined FunctionProgramcının kendi ihtiyaçları doğrultusunda özel bir görevi yerine getirmek için kodladığı fonksiyonlardır. Örneğin, üç sayının maksimumunu bulan maximum(int x, int y, int z) fonksiyonu kullanıcı tanımlı bir fonksiyondur.
Library FunctionC dilinin standart kütüphanelerinde önceden tanımlanmış ve geliştiricilerin kullanımına hazır sunulmuş hazır fonksiyonlardır. Matematiksel işlemler için pow() veya rastgele sayı için rand() buna örnektir.
Local VariableYalnızca tanımlandıkları fonksiyonun gövdesi içinde erişilebilen ve kapsamı o fonksiyonla sınırlı olan değişkenlerdir. Fonksiyon parametreleri de birer yerel değişkendir.
Function PrototypeDerleyiciye bir fonksiyonun adı, dönüş tipi ve parametre listesi hakkında ön bilgi veren bildirim satırıdır. Özellikle fonksiyon tanımı main bloğundan sonraysa mutlaka kullanılmalıdır.
Void Return TypeBir fonksiyonun çağrıldığı yere herhangi bir değer döndürmeyeceğini belirten özel bir dönüş tipidir. Bu tür fonksiyonlarda return anahtar kelimesi değer döndürmeden sadece çıkış için kullanılır.
Call by ValueFonksiyona argüman aktarılırken değerin kendisinin değil, birebir kopyasının gönderildiği yöntemdir. Fonksiyon içinde yapılan değişiklikler orijinal değişkeni asla etkilemez.
Call by ReferenceArgümanın kopyası yerine kendisinin veya bellekteki adresinin fonksiyona aktarıldığı yöntemdir. Fonksiyon içerisindeki modifikasyonlar orijinal değişkenin değerini doğrudan değiştirir.
rand() Function<stdlib.h> kütüphanesinde yer alan ve 0 ile RAND_MAX arasında psödo-rastgele tamsayılar üreten standart kütüphane fonksiyonudur.
srand() Functionrand() fonksiyonunun sayı ürettiği dizinin başlangıç noktasını (seed) değiştiren ve böylece her çalıştırmada farklı rastgele sayılar elde edilmesini sağlayan fonksiyondur.
time(NULL)1 Ocak 1970'den bu yana geçen saniye miktarını döndüren ve srand() için dinamik bir seed değeri sağlamakta kullanılan fonksiyondur.
RecursionBir fonksiyonun kendi kendini çalıştırma sürecidir. Büyük bir problemi daha küçük benzer alt problemlere bölerek çözmek için kullanılır.
Base CaseÖzyineli (recursive) fonksiyonların sonsuz döngüye girmesini önlemek için durma koşulunu belirten, fonksiyonun kendini çağırmayı bıraktığı temel durumdur (Örn. 0! = 1).

Diğer Önemli Bilgiler

İç İçe Fonksiyon Tanımı Yasağı

C programlama dilinde bir fonksiyonun gövdesi içerisinde başka bir fonksiyonun tanımı (nested function definition) yapılamaz. Tüm fonksiyon tanımlamaları birbirinden bağımsız olarak ana program düzeyinde gerçekleştirilmelidir.

Void Dönüş Tipi Özelliği

Dönüş tipi olarak void bildirilen fonksiyonlar, çağrıldıkları yere herhangi bir değer (result) geri göndermezler. Bu tür fonksiyonlarda return deyimi ya hiç kullanılmaz ya da sadece 'return;' şeklinde değer belirtilmeden kullanılır.

Parametre İletişim Rolü

Fonksiyon parametreleri aslında fonksiyon içinde tanımlanan özel birer yerel değişkendir (local variable). Bu parametreler, ana program ile fonksiyon arasında veri alışverişini ve iletişimi sağlamak için köprü görevi görür.

Faktöriyel Özyineleme Örneği

5! = 5 * 4! şeklinde ifade edilen özyinelemeli matematiksel hesaplama yaklaşımı, fonksiyonların kendi kendini çağırma mantığını somutlaştırır. İşlem, base case olan 1! veya 0! durumuna ulaşana kadar alt katmanlara doğru inerek devam eder.

Stdlib.h Kütüphane Kapsamı

Rastgele sayı üretiminde hayati rol oynayan rand() ve srand() fonksiyonları <stdlib.h> standart kütüphanesinde tanımlanmıştır. Bu fonksiyonları kullanmak isteyen geliştiricilerin bu kütüphaneyi kodlarına dahil etmeleri gerekmektedir.

Sınavda Dikkat Et

  • Matematik fonksiyonlarını kullanırken #include <math.h> direktifini unutmayın; aksi takdirde derleme hatası alırsınız.
  • Math kütüphanesindeki fonksiyonların her zaman double veri tipinde sonuç döndürdüğüne dikkat edin.
  • C dilinde fonksiyonların başka fonksiyonların *içinde* tanımlanamayacağını (nested function yasaktır) kesinlikle unutmayın.
  • Fonksiyon prototiplerinin (prototype), tanım ana programdan sonraysa zorunlu olduğunu aklınızda tutun.
  • Call by value yönteminde orijinal değerin değişmediğini, Call by reference yönteminde ise değiştiğini karıştırmayın.
  • rand() fonksiyonunun 0 ile RAND_MAX arasında değer ürettiğini ve 1 ile n aralığı için 1 + (rand() % n) formülünün kullanıldığını iyi öğrenin.
  • srand(time(NULL)) ifadesindeki time(NULL)'ın 1 Ocak 1970'den beri geçen saniyeyi baz aldığını sınavda ayırt edici soru olarak bekleyin.
  • Recursive fonksiyonların sonsuz döngüye girmemesi için mutlaka bir 'base case' gerektirdiğini unutmayın.