Bilgisayar Programlama Ders 5 Dr. Fatih AY Tel: 0 388 225 22 55 fatihay@fatihay.net www.fatihay.net
Fonksiyonlar Fonksiyonlar Büyük programlar geliştirmenin en iyi yolu, onu orijinal programdan daha kolay idare edilebilir küçük program modüllerine bölmektir. Modüller C de fonksiyon olarak yazılırlar. C programları, genellikle programcının yazacağı yeni fonksiyonlarla, daha önceden C standart kütüphanesi içinde tanımlanmış fonksiyonların birleştirilmesi ile yazılır. C kütüphaneleri genel matematik işlemleri, karakter işlemleri, giriş/çıkış işlemleri ve diğer birçok önemli işlemi yerine getiren birçok fonksiyonu içermektedir. 2
Programları daha hızlı ve daha kolay yapmak amacıyla ANSI C standart kütüphanesi içerisindeki fonksiyonları incelemek önemlidir. ANSI C kütüphanesindeki fonksiyonların kullanılması taşınırlığı arttırmaktadır. Örn. printf, scanf, pow fonksiyonları gibi fonksiyonlar standart kütüphane fonksiyonlarıdır. 3
Fonksiyonlar, fonksiyon çağrıları sayesinde çağırılırlar. Fonksiyon çağırmak demek fonksiyonu kullanmamız gerektiği anda onu programa dahil etmek demektir. Fonksiyon çağrıları, fonksiyonun ismini ve fonksiyonun görevlerini yerine getirebilmesi için gerekli olan bilgileri (argümanlar olarak) içerir. 4
Patron işçiye görev verir ve işin sonunda kendisine rapor verilmesini ister. Patron işçinin görevini nasıl yerine getirdiğini bilmez. Uygulama detayları gizlenebildiği için yazılım mühendisliği kolaylaşır. main işçi 1 işçi 2 işçi 3 işçi 4 işçi 5 5
Matematik Kütüphanesi Fonksiyonlar fonksiyonun ismi argüman listesi (bağımsız değişkenler) printf ( %.2f, sqrt(900.0)); Matematik kütüphanesi fonksiyonunu math.h #include<math.h> 6
Fonksiyon Tanım Örnek sqrt(x) x in karekökü sqrt(900.0) 30.0 değerini verir sqrt(9.0) 3.0 değerini verir exp(x) e x üstel fonksiyon exp(1.0) 2.718252 değerini verir exp(2.0) 7.389056 değerini verir log(x) log10(x) x in e tabanına göre logaritması x in 10 tabanına göre logaritması log(7.389056) 2.0 değerini verir log(2.718252 ) 1.0 değerini verir log10(1.0) 0.0 değerini verir log10(10.0) 1.0 değerini verir log10(100.0) 2.0 değerini verir fabs(x) x in mutlak değeri x>0 ise x değerini verir x=0 ise 0.0 değerinin verir x<0 ise x değerini verir ceil (x) x i kendinden sonraki ilk tamsayıya atar ceil(9.2) 10.0 değerini verir ceil(-9.8) -9.0 değerini verir 7
Fonksiyon Tanım Örnek floor(x) x i kendinden küçük ilk tamsayıya atar floor(9.2) 9.0 değerini verir floor(-9.8) -10.0 değerini verir pow(x,y) x y, x üzeri y pow(2,7) 128.0 değerini verir pow(9,0.5) 3.0 değerini verir fmod(x,y) sin(x) cos(x) x/y işleminin kalanını bulur x in sinüsünü hesaplar (x radyan) x in kosinüsünü hesaplar (x radyan) Fmod(13.657, 2.333) 1.992 değerini verir sin(0.0) 0.0 değerini verir cos(0.0) 1.0 değerini verir tan(x) x in tanjantını hesaplar (x radyan) tan(0.0) 0.0 değerini verir 8
Fonksiyon Tanımları Fonksiyonlar main fonksiyonu şu ana kadar yapılan standart kütüphane işlemlerini yaptırmak için kullanılıyordu. Kendi fonksiyonumuzu oluşturalım 9
10
Birden ona kadar olan tam sayıların karesini alan kare fonksiyonunu kullanan program tanımlanmıştır. kare fonksiyonu, main altındaki printf ifadesi içinden çağırılmıştır. printf ( %d, kare(x)); kare fonksiyonu, x değerinin kopyasını y parametresi sayesinde alır. Daha sonra y*y hesabını yapar. Sonuç, main içindeki printf fonksiyonuna döndürülür ve printf sonucu yazdırır. Bu süreç, for sayesinde 10 kez tekrarlanır. 11
kare fonksiyonunun tanımı, kare nin bir y tamsayısı beklediğini gösterir. Fonksiyon isminden önceki int anahtar kelimesi, kare nin sonucunun yine bir tamsayı olarak döndürüleceğini gösterir. kare içindeki return ifadesi hesaplamanın sonucunu çağırıcı fonksiyona döndürür. int kare (int); fonksiyon prototipdir. Parantezin içindeki int, derleyiciye kare fonksiyonunun çağırıcı fonksiyondan bir tamsayı beklediğini bildirir. Fonksiyon isminin solundaki int ise derleyiciye, kare fonksiyonunun kendini çağıran bir fonksiyona bir tamsayı sonucu döndüreceğini bildirir. 12
Derleyici, kare fonksiyonu çağırıldığında fonksiyonun ilk hali(prototipi) ile karşılaştırma yaparak, çağrının doğru tipte dönüş değerine sahip oluşunu, doğru sayıda argüman ve doğru argüman tipleri kullanmasını ve argümanların doğru sırada oluşlarını kontrol eder. geri dönüş tipi fonksiyonun ismi (parametre listesi) { } bildirimler ifadeler 13
Parametre listesi, fonksiyon çağırıldığında fonksiyonun alacağı parametrelerin bildirimlerini içeren, virgüllerle ayrılmış bir listedir. Eğer fonksiyon bir herhangi bir değer almıyorsa parametre listesi void olur. Her parametre için (eğer tipi int değilse) parametre tipi ayrı ayrı belirtilmelidir. Eğer tip belirtilmezse int olarak algılanacaktır. geri dönüş tipi fonksiyonun ismi (parametre listesi) { } bildirimler ifadeler 14
15
sqrt fonksiyonu double olarak belirlenmiştir!! Fonksiyonlar ALIŞTIRMALAR 1. 25 sayısının karekökünü hesaplatan kodu yazınız. printf("%.1f",sqrt(25)); 2. e sayısının 4. kuvvetini bulan kodu yazınız. printf("%.3f",exp(4)); 3. ln(3.4743) değerini hesaplatan kodu yazınız. printf("%.3f",log(3.4743)); 4. log (1453) değerini hesaplatan kodu yazınız. printf("%.3f",log10(1453)); 5. -43.2 ve 67.45 sayılarının mutlak değerlerini tek duyarlılıkla yazdıran kodu yazınız. printf("%.3f",fabs(-43.2)); 6. -5.3 sayısını -5 çıkartan kodu yazdırınız. printf("%.3f",ceil(-5.3)); 7. -5.3 sayısını -6 çıkartan kodu yazınız. printf("%.3f",floor(-5.3)); 16
ALIŞTIRMALAR Fonksiyonlar 8. 5 4.34 sayısının değerini hesaplayan kodu yazınız. printf("%.3f",pow(5,4.34)); 9. sin(30) değerini hesaplayan kodu yazınız. printf("%.3f",sin(30)); 10. cos(30) değerini hesaplayan kodu yazınız. printf("%.3f",cos(30)); 11. tan(30) değerini hesaplayan kodu yazınız. printf("%.3f,tan(30)); 12. printf("%.2f",ceil(-7.65)); komutunun çıktısı ne olur? -7.00 13. printf("%.2f",floor(-9.63)); komutunun çıktısı ne olur? -10.00 17
5. DERSİN SONU 18