Üye ol
Şifremi unuttum | Onay kodum gelmedi
Yardım

C / C++ Programlama Diline Giriş Ders Notları 4 (Fonksiyonlar)
sendetiklat
Sahip
sendetiklat


sendetiklat şu anda çevrimdışı
Gönderilme Tarihi: 23 Kasım 2009 18:12:54

FONKSİYONLAR

Fonksiyon nedir?
Fonksiyon, belirli sayıda verileri kullanarak bunları işleyen ve bir sonuç üreten komut grubudur.
Her fonksiyonun bir adı ve fonksiyona gelen değerleri gösteren değişkenleri (argümanları) vardır. Genel olarak bir fonksiyonun görevi aşağıdaki şekilde gösterilmiştir.



Fonksiyon tanımlama

Fonksiyonların girdilerine parametreler yada argumanlar denir. Bir fonksiyon bu parametreleri alıp bir işleme tabi tutar ve bir değer hesaplar. Bu değer, çıktı veya geri dönüş değeri (return value) olarak adlandırılır. Bir fonksiyonun kaç girişi olursa olsun sadece bir çıkışı vardır.
C dilinde hazırlanan bir fonksiyonun genel yapısı şöyledir:
DönüşTipi FonksiyonAdı(argüman listesi)
argümanların tip bildirimleri
{
Yerel değişkenlerin bildirimi ...
fonksiyon içindeki deyimler veya diğer fonksiyonlar ...
return geri dönüş değeri;
} _

Fonksiyon Tanımlama-2
Dönüş_tipi: fonksiyon tarafından döndürülen değerin tipini belirtir. Bu, int, double gibi bir aritmetik tip veya gösterge olabilir. Dönüş_tipi olarak void anahtar sözcüğü kullanıldığında, fonksiyondan hiçbir değer döndürülmeyeceği belirtilmiş olur. void fonksiyonlar FORTRAN’daki SUBROUTINE’ler veya Pascal’daki procedure’ların karşılığıdır.
Fonksiyon_adı: bir tanıtıcı sözcüktür.
Argüman Listesi: virgülle ayrılmış ve önüne tipleri yazılmış biçimsel argüman veya parametre isimleri listesidir. Diğer bir fonksiyon tarafından çağrıldığında bu fonksiyona geçirilecek olan argümanların sayısını, sırasını ve tipini belirtir. Aynı zamanda, parametrelere, sadece fonksiyonun gövdesini oluşturan blok’un içinde anlamlı olan, isimler verir. Hiç parametresi olmayan bir fonksiyon da olabilir. Bu durum, parantezler içine void yazılarak açıkça gösterilir.
Return: Kontrolün çağırana geri dönmesini sağlar. return deyiminden sonra gelen deyimler yerine getirilmez ve fonksiyon hemen çağrıldığı yere “geri döner”.
Tanımlama Örneği
Örneğin iki sayının toplamını hesaplayacak bir fonksiyon şöyle tanımlanabilir:
/* 1. yöntem*/
int topla(x,y)
int x,y
{
int sonuc;
sonuc = x + y;
return sonuc;
}_

Fonksiyon Çağrılması
Bir fonksiyonu ana programdan çağırmak için genellikle bir değişkene değer döndürme şeklinde yapılır.Örneğin öndeki slaytta yer alan fonksiyonu ana programdan çağırmak için şöyle bir tanımlama yapılabilir.
toplam=topla(5,4)
Bu işlem satırında fonksiyona 5 ve 4 değerleri gönderiliyor. Geri dönen sonuç ise toplam değişkenine aktarılıyor.
Fonskiyon Çağırma şekli
Fonksiyon bildirimi
Bir fonksiyonun bildirimi iki türlü yapılır:
Ana programdan önce:
...
int topla(int x,int y) /* fonksiyon */
{ ... }
...
main()
{ ... }
Ana programdan sonra: Bu durumda fonksiyon prototipi ana programdan önce bildirilmelidir.
.. int topla(int x, int y); /* fonksiyon örneği
... main()
{ ... }
...
int topla(int x, int y) /* fonksiyon */
{ ... }

Örnek: 2 sayının toplanıp ekrana yazdırılması işleminin fonksiyon yardımıyla yapılması.
#include <stdio.h>
int topla(int, int); /*** fonksiyon prototipi ***/
main(){
int toplam,a,b;
printf("Iki sayi girin : ");
scanf("%d %d",&a,&b);
/* fonksiyon çağırılıp, a ve b değerleri parametre olarak aktarılıyor.*/
toplam = topla(a,b);
printf("%d ve %d nin toplami %d dir.\n", a,b,toplam);
getchar();
getchar();
}

/*** fonksiyon tanımlanması ***/
/* Bu fonksiyon iki tamsayıyı toplar */
int topla( int x, int y ){
int sonuc;
sonuc = x + y;
return sonuc;
}
_

Faktöriyeli fonksiyonda hesaplayan program.
#include <stdio.h>
int fakt (int n)
{
int i = 1,top=1;
while (i<=n)
{
top *= i;
i++;
}
return top;
}
main(){
int sayi = 4;
printf("%d! = %d\n", sayi, fakt(sayi));
getchar();
}_


Dizinin Fonksiyona Gönderilmesi
Fonsiyonun bildirimi
int fonk(int a[5]) //yada int fonk(int a[])
{ işlemler}

Dizinin gönderilmesi
int dizi[5]
fonk(dizi)
5 elemanlı bir dizinin elamanlarının toplamını fonksiyon yardımıyla hesaplayan program
#include <stdio.h>
int topla (int sayi[],int eleman_sayi)
{
int toplam=0,i;
for(i=0;i<5;i++)
toplam+=sayi;
return toplam;
}
main(){
int sayi[5] = {4,3,2,5,6};
int eleman_sayi=5;
printf("%d", topla(sayi,eleman_sayi));
getchar();
}_

Özyinemeli(Recursive) Fonksiyonlar
Fonksiyonlar tekrarlama yapılarına göre temel olarak iki türlü düşünülebilir. Buna göre bir fonksiyonun içinde yine kendisinden bir parça bulunuyorsa bu fonksiyonlara özyinelemei (recursive) fonksiyon denilirken, fonksiyonun kendisini tekrar etmemesi durumunda döngülü (iterative) fonksiyon ismi verilir.
Teorik olarak bütün döngülü (iterative) fonksiyonlar özyinelemeli (recursive) fonksiyon olarak yazılabilir (tersi de doğrudur).
En basit açıklama yöntemi olarak faktoriyel hesaplama fonksiyonu gösterilebilir.
faktoriyel()
{
x=0 ise sonuç sıfırdır
x=1 ise sonuç birdir
x=n için ise sonuç n çarpı fonksiyon(n-1) dir.
}
Bu örnekteki gibi girilen değer sıfır yada bir olmadığı sürece fonksiyon sıfır yada bir ile karşılaşana kadar düzenli olarak n sayısından bir çıkartarak kendisini çağırmaktadır.

Klavyeden girilen sayıya kadar olan sayıları recursive fonksiyon yardımıyla toplayan program
#include<stdio.h>
#include<conio.h>
int topla(int a){
if(a==1)
return 1;
return a+ topla(a-1);
}
main()
{
int sayi;
printf("sayı giriniz");
scanf("%d",&sayi);
printf("sayıların toplamı:%d",topla(sayi));
getchar(); getchar();
}_

Bir sayının faktöriyelini recursive fonksiyon ile bulan program
int fakt(int n)
{
if (n==0)
return 1 ;
return n*fakt(n-1);
}

main(){
int sayi=4;
printf("%d", fakt(sayi));
getchar();
}_

Örnek:Kendini çağıran fonksiyon kullanarak, kullanıcıdan alınan bir sayı kadar tek sayıların toplamını bulan program. Örneğin; kullanıcı 4 girerse; 1 3 5 7 nin toplamını bulup ekrana yazıyor.
#include<stdio.h>
#include<conio.h>
int topla(int n)
{ return ((n==1) ? 1 : (2*n-1)+topla(n-1)); }

main()
{
int sayi;
printf("sayı giriniz");
scanf("%d",&sayi);
printf("Tek sayıların toplamı:%d",topla(sayi));
getchar(); getchar();
}_

Klavyeden girilen bir metin içerisindeki büyük harfleri recursive fonksiyon ile yazan program
#include<stdio.h>
#include<conio.h>
#include<string.h>
recursive (char*,int,int);
main()
{
char dizi[40],*ptr;
int i,adet,x;
ptr=dizi;
printf("\n Bir Karakter Katari Giriniz \n\n ");
gets(ptr);
adet=strlen(ptr);
x=0;
printf("\n\n Girilen Metindeki Buyuk Harfler ==> ");
recursive(ptr,adet,x);
getch();
}_


Anahtar kelimeler:


sendetiklat
Sahip
sendetiklat


sendetiklat şu anda çevrimdışı
Gönderilme Tarihi: 23 Kasım 2009 18:18:53 | # 1

Pointerlar >>
Sayfalar:
[1]
1.3.0
Kullanım Şartları - İletişim - Öner
29 Temmuz 2014 Salı 15:14:20