Download - C’de Program Modülleri
![Page 1: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/1.jpg)
C’de Program Modülleri• Fonksiyonlar
C’de modüllere fonksiyon denir.Programlar genellikle, programcının yazacağı fonksiyonlarla,
standart C kütüphanesinde tanımlı fonksiyonların birleştirilmesi ile yazılır.C’ kütüphanesindeki fonksiyonlar çok çeşitlidir.
• Fonksiyon çağrılarıFonksiyonları çağırırlar.
Fonksiyonun ismi ve argümanları(gerekli bilgiler) içerir.Fonksiyon operasyonları veya işlemleri gerçekleştirir.Fonksiyon sonuç döndürür.
• Fonksiyon çağrı benzetimi:Patron işçisine bir görev verir ve işin sonunda kendisine rapor
vermesini ister. İşçi bilgileri alır, görevi yapar, sonucu geri bildirir.
![Page 2: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/2.jpg)
Matematik Kütüphanesindeki Fonksiyonlar• Matematik kütüphane fonksiyonlar
Programcının bazı genel matematik işlemlerini yapmasını sağlar.#include<math.h>
• Fonksiyonları çağırma formatı Fonsiyonİsmi( Argüman )
Eğer çoklu argüman varsa, virgülle ayrılmış argüman listesi yazarak kullanılır.
printf( "%.2f", sqrt( 900.0 ) ); sqrt fonksiyonunu çağırmak, parantez içindeki girilen argümanın kare
kökünün döndürür. Tüm matematik fonksiyonlarının döndürdüğü veri tipi double’dır
Argümanlar sabit sayılar, değişkenler ya da deyimler olabilir.
![Page 3: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/3.jpg)
Fonksiyon Tanım Örnek
sqrt( x ) x’in karekökü sqrt( 900.0 ) = 30.0
sqrt( 9.0 ) = 3.0
exp( x ) ex üssel fonksiyonu exp( 1.0 ) = 2.718282
exp( 2.0 ) = 7.389056
log( x ) x’in e tabanına göre
logaritması log( 2.718282 ) = 1.0
log( 7.389056 ) = 2.0
log10( x ) x’in 10 tabanına göre
logaritması log10( 1.0 ) = 0.0
log10( 10.0 ) = 1.0
log10( 100.0 ) = 2.0
fabs( x ) x’in mutlak değeri fabs( 5.0 ) =5.0
fabs( 0.0 ) = 0.0
fabs( -5.0 ) = 5.0
ceil( x ) x kendinden büyük ilk
tansayıya yuvarlar ceil( 9.2 ) = 10.0
ceil( -9.8 ) = -9.0
Sıklıkla Kullanılan Matematik Kütüphanesi Fonksiyonları-1
![Page 4: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/4.jpg)
Sıklıkla Kullanılan Matematik Kütüphanesi Fonksiyonları-2
Fonksiyon Tanım Örnek
floor( x ) x kendinden küçük ilk tamsayıya yuvarlar
floor( 9.2 ) = 9.0
floor( -9.8 ) = -10.0
pow( x, y ) xy pow( 2, 7 ) = 128.0
pow( 9, .5 ) = 3.0
fmod( x, y ) x/y işleminin kalanını bulur fmod( 13.657, 2.333 ) = 1.992
sin( x ) x’in sinüsünü hesaplar(x
radyan) sin( 0.0 ) = 0.0
cos( x ) x’in kosinüsünü hesaplar(x
radyan) cos( 0.0 ) = 1.0
tan( x ) x’in tanjantını hesaplar(x
radyan) tan( 0.0 ) = 0.0
![Page 5: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/5.jpg)
Fonksiyon Tanımları• Fonksiyon tanımlama formatı
Geri dönüş tipi fonksiyon ismi ( parametre listesi){ bildirimler ve ifadeler}
Fonksiyon ismi: herhangi bir geçerli tanıtıcıGeri dönüş tipi: döndürülen sonuçların veri tipi(varsayılan int)
void tipi geri dönüş değer fonksiyonun herhangi bir değer geri döndürmeyeceğini gösterir.
Parametre listesi: virgülle ayrılmış liste, parametreleri bildirir. Her parametre için parametre tipi belirtilmelidir. Eğer tip
listelenmezse int olarak alınacaktır.
![Page 6: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/6.jpg)
• Fonksiyon tanımlama formatı(devam)Geri dönüş tipi fonksiyon ismi ( parametre listesi){ bildirimler ve ifadeler}
Bildirimler ve ifadeler: fonksiyon gövdesi(blok) Değişkenler bloklar içine tanımlanabilir ve yuvalanabilir. Bir fonksiyon tanımı hiçbir koşul altında başka bir fonksiyon içinde
yapılamaz. Bir fonksiyonun çağrıldığı yere geri dönmesini kontrol etmek için 3 yol
vardır: 1. Eğer bir fonksiyon bir sonuç ile geri dönmeyecekse, kontrol
fonksiyonun en son parantezine ulaşıldığında ya da 2. return; ifadesinin çalıştırılmasıyla döndürülür. 3. Eğer fonksiyon bir sonuç ile geri dönecekse return deyim;
ifadesi, deyimin değerini çağırıcıya döndürür.
Fonksiyon Tanımları
![Page 7: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/7.jpg)
#include <stdio.h>#include <conio.h>int maximum( int, int, int ); int main(){ int a, b, c;
printf( "3 tamsayi giriniz: " ); scanf( "%d%d%d", &a, &b, &c ); printf( "Maksimum: %d\n", maximum( a, b, c ) ); getch(); return 0;}int maximum( int x, int y, int z ){ int max = x; if ( y > max ) max = y; if ( z > max ) max = z; return max;}
Fonksiyon prototipi
Fonksiyon tanımı
Fonksiyon çağrısı
![Page 8: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/8.jpg)
Fonksiyon Prototipleri• Fonksiyon prototipleri
Fonksiyon ismiParametreleri – Fonksiyon ne alacak.Geri dönüş tipi – Fonksiyonun döndüreceği veri tipi(varsayılan int)Fonksiyon çağrılarını onaylamakta kullanılır.Bir fonksiyon prototipi
int maximum( int x, int y, int z ); 3 int alır. 1 int döndürür.
• Dönüştürme Kuralları ( Argümanların zorlanması)Daha düşük tiplere dönüştürmek hatalara sebep olabilir.
![Page 9: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/9.jpg)
Veri Tipleri için Dönüşüm Hiyerarşisi
Veri Tipleri printf ile kullanımları
scanf ile kullanımları
Long double %Lf %Lf
double %f %lf
float %f %f
Unsigned long int %lu %lu
long int %ld %ld
unsigned int %u %u
int %d %d
unsigned short %hu %hu
short %hd %hd
char %c %c
![Page 10: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/10.jpg)
Öncü(Header) Dosyalar
• Öncü dosyalarO kütüphanedeki her fonksiyon için prototiplerin yer
alır.<stdlib.h> , <math.h> ….#include <filename> ile yüklenir.
#include <math.h>• Programcı tarafından oluşturulan öncü dosyalar
Fonksiyonlarla oluşturulur.Filename.h şeklinde kaydedilir.Dahil etmek için #include "filename.h"
![Page 11: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/11.jpg)
Bazı Standart Kütüphane Öncü Dosyaları
![Page 12: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/12.jpg)
Fonksiyonları Çağırmak: Değere Göre ve Referansa Göre• Değerle çağırmak
Fonksiyona aktarılacak argümanı kopyalar.Fonksiyonda ki değişiklikler orijinal olanı etkilemez.Fonksiyonun argümanı değiştirmesi gerekmediğinde kullanılır.
Yanlışlık değişiklikleri önler.
• Referansla çağırmakOrijinal argümanı aktarır.Fonksiyondaki değişiklikler orijinali etkiler. Sadece güvenilir fonksiyonlarla kullanılır.
• Şimdilik sadece, değere göre çağırma üzerine yoğunlaşacağız.
![Page 13: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/13.jpg)
Rasgele Sayılar Üretme
• rand fonksiyonu<stdlib.h>’ ı yükle0 ile RAND_MAX(en azından 32767) değeri arasında
bir tamsayı yaratır.i = rand();
• Dereceldirme1 ile n arasında rasgele sayı alabilmek için
1+(rand()%n) Rand()%n 0 ile n-1 arasında bir sayı döndürür. Buna 1 eklemek 1ile n arasında bir rasgele sayı üretir.1+(rand()%6)1 ile 6 arasında sayı
![Page 14: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/14.jpg)
#include <stdio.h>#include <stdlib.h>#include <conio.h>int main(){ int i; for ( i = 1; i <= 20; i++ ) { printf( "%10d", 1 + ( rand() % 6 ) ); if ( i % 5 == 0 ) printf( "\n" ); } getch(); return 0;}
![Page 15: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/15.jpg)
#include <stdio.h>#include <stdlib.h>#include <conio.h>int main(){ int face, roll, frequency1 = 0, frequency2 = 0, frequency3 = 0, frequency4 = 0, frequency5 = 0, frequency6 = 0;
for ( roll = 1; roll <= 6000; roll++ ) { face = 1 + rand() % 6;
switch ( face ) { case 1: ++frequency1; break; case 2: ++frequency2; break; case 3: ++frequency3; break;
case 4: ++frequency4; break; case 5: ++frequency5; break; case 6: ++frequency6; break; } } printf( "%s%13s\n", "Yüz", "Frekans" ); printf( " 1%13d\n", frequency1 ); printf( " 2%13d\n", frequency2 ); printf( " 3%13d\n", frequency3 ); printf( " 4%13d\n", frequency4 ); printf( " 5%13d\n", frequency5 ); printf( " 6%13d\n", frequency6 ); getch(); return 0;}
![Page 16: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/16.jpg)
Programı tekrar çalıştığında sonuçlar hep aynı çıkmaktadır. Öyleyse nasıl rassal olabilir? rand fonksiyonu gerçekte sahte rasgele sayılar üretir.. rand fonksiyonunu tekrar tekrar çağırmak, rasgele gibi görünen bir dizi sayı oluşmasına sebep olur. Ancak bu dizi, program her çalıştırıldığında kendini tekrar etmektedir. Programın hataları tamamen ayıklandığında, her çalıştırılmada rasgele sayıların farklı bir dizisinin üretilmesi sağlatılabilir. Buna, rassallaştırma denir ve standart kütüphane fonksiyonu olan srand sayesinde yapılır.
![Page 17: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/17.jpg)
Rasgele Sayılar Üretme
• srand fonksiyonu <stdlib.h>unsigned tipte bir tamsayıyı argüman olarak kullanır ve
rand fonksiyonunu besleyerek, programın her çalıştırıldığında farklı bir dizide rasgele sayılar oluşturulmasını sağlar.srand(seed)
srand( time( NULL ) );/*load <time.h> */Time( NULL ): o anki saati saniye biçiminde
oluşturur.
![Page 18: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/18.jpg)
#include <stdlib.h>#include <stdio.h>#include <conio.h>int main(){ int i; unsigned seed; printf( "Beslemeyi girin: " ); scanf( "%u", &seed ); srand( seed ); for ( i = 1; i <= 10; i++ ) { printf( "%10d", 1 + ( rand() % 6 ) ); if ( i % 5 == 0 ) printf( "\n" ); } getch(); return 0;}
![Page 19: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/19.jpg)
Örnek: Şans Oyunu
• Oyuncu iki zarı aynı anda atar. İki zarında altı yüzü vardır. Bu yüzlerde 1,2,3,4,5 ve 6 adet nokta bulunur. Zarlar durduktan sonra her iki zarında üste gelen yüzleri toplanır. Eğer toplam ilk atışta 7 ya da 11 ise oyuncu kazanır. Eğer toplam ilk atışta 2,3 ya da 12 gelirse (buna barbut denir) oyuncu kaybeder. Eğer ilk atışta toplam 4,5,6,8,9,10 ise bu toplam oyuncunun sayısı haline gelir. Kazanmak için oyuncu sayısını bulana kadar zarları atmaya devam eder. Zarları atmaya devam ederken kendi sayısı yerine 7 atarsa kaybeder.
![Page 20: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/20.jpg)
#include <stdio.h>#include <stdlib.h>#include <time.h>#include <conio.h>int rollDice(void);int main(){ int gameStatus, sum, myPoint; srand( time( NULL ) ); sum = rollDice( ); switch( sum ) { case 7: case 11: gameStatus = 1; break; case 2: case 3: case 12: gameStatus = 2; break; default: gameStatus = 0; myPoint = sum; printf( "Oyuncunun kazanacagi zar: %d\n", myPoint ); break; }
![Page 21: C’de Program Modülleri](https://reader035.vdocuments.pub/reader035/viewer/2022070405/56813e0a550346895da7ecca/html5/thumbnails/21.jpg)
while ( gameStatus == 0 ) { sum = rollDice( );
if ( sum == myPoint ) gameStatus = 1; else if ( sum == 7 ) gameStatus = 2; } if ( gameStatus == 1 ) printf( "Oyuncu kazanadi\n" ); else printf( "Oyuncu kaybettti\n" ); getch(); return 0;}int rollDice(void) //rollDice fonksiyonu argüman almamaktadır.{ //Bu sebepten, fonksiyon parametresi void kullanılmıştır. int die1, die2, workSum; die1 = 1 + ( rand() % 6 ); die2 = 1 + ( rand() % 6 ); workSum = die1 + die2; printf( "Oyuncunun attigi zar: %d + %d = %d\n", die1, die2, workSum ); return workSum;}