Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

Benzer bir sunumlar


... konulu sunumlar: "SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz"— Sunum transkripti:

1 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz Algoritmalar ve Programlama II Ders 6: C++ programlama dilinde Fonksiyonlar   SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

2 Çoğu problemin çözümünde genellikle uzun programlara ihtiyaç duyulmaktadır. Binlerce ifadeden oluşan bir programların yazılması ve anlaşılması oldukça zor bir işlemdir. Bu sebeple problemin daha kolay çözülebilen alt parçalarına (modül) ayrıştırılması işlemi yapısal programlamanın temel yaklaşımlarındandır. Programlama dillerinde her bir modülün (alt parça) bağımsız olarak ele alınmasını sağlayan ve alt program adı verilen birimler tanımlanır. Altprogramlar büyük ve karmaşık problemin çözümünde yapısal programlamanın etkin kullanımı için gerekli temel taşlarındandır. Altprogramlar bir kere yazılır ve program içerisinde bir yada daha çok yerde çağrılarak kullanılır.

3 Altprogram kullanmanın faydaları;
Belirli bir işi yapan program parçasının, birden çok yerde değişik veriler için ayrı ayrı yazılmasını önlemek. Düşük düzeydeki ayrıntıları, program mantığının ana akışından uzaklaştırıp ayrı modüllere yerleştirerek, programın tasarlanmasını kolaylaştırmak ve okunulabilirliğini artırmak. Büyük bir programın, daha küçük ve yazılması daha kolay fonksiyonel parçalara bölünmesini sağlamak. Program yazma işinin birden çok programcı tarafından paylaşılmasına olanak sağlamak.

4 Programlama dillerinde genelde iki tür alt program kullanılır;
 Yordam (procedure, subrotine)  Fonksiyon Yordam ve fonksiyon özünde birbirine çok benzeyen altprogramlardır. Programlama dillerinde genelde yordam fonksiyona göre daha genel amaçlıdır. Fonksiyonlar ana programa bilgi geri gönderirken, yordamlardan bu beklenmez. Ayrıca fonksiyonların argüman (işlenen değişken, parametre) kullanması gerekirken, yordam argümansız olarak kullanılabilir.

5 Yordamı küçük bir program parçası şeklindeki bir altprograma, fonksiyonu da hesaplamalarda matematiksel hesaplamalarda kullandığımız hesaplamalara benzer işlem yapan bir altprograma benzetebiliriz.

6 C++’ da altprogram kullanımı
C++’ da fonksiyon kavramı yordam ve fonksiyonu ihtiva edebilecek şekilde geniş tanımlanmıştır. Yani C/C++’ da hem yordam hem de fonksiyon aynı yapı kullanılarak ifade edilir. C/C++’ da altprogramlar fonksiyon ile ifade edilir. Fakat kullanımı hem yordamı hem de fonksiyonu ifade edecek kadar geniştir. C/C++’ da fonksiyonlar parametreli ve değer döndürerek fonksiyon şeklinde ve parametreli veya parametresiz (void) olarak değer döndürmeden (void) yordam şeklinde kullanılabilir.

7 C/C++’ da altprogram kullanımı
C/C++’ da her fonksiyonun bir adı, tipi (döndürdüğü tip) ve argüman/argümanları vardır. Fonksiyon adı C dilinin anahtar sözcüklerinden (if, do, for, vb.) olmamak koşulu ile istenildiği gibi verilebilir. Diğer yandan fonksiyon adının yapısal programlama mantığına uygun olarak yaptığı işle uygun ve hatırlatıcı olması beklenir. Fonksiyonun tipi kendisini çağırana göndereceği verinin tipini belirtir. Eğer bir fonksiyon kendisini çağırana hiçbir veri göndermeyecek ise (yordam ise) tipi void olmalıdır.

8 C/C++’ da fonksiyon tanımlanması ve bildirimi
C/C++’ da bir fonksiyonun genel yapısı aşağıda gösterildiği gibidir;  fonksiyon-tipi fonksiyon-adı (argüman listesi) argümanların tip bildirimleri { yerel değişken bildirimleri işlemler; } Bir C/C++ programında fonksiyonlar ana fonksiyon olan main() fonksiyonundan önce veya sonra tanımlanabilir. Kullanılacak fonksiyon main() fonksiyonundan önce tanımlanır ise bu durumda fonksiyonun ön bildirimine ihtiyaç yoktur.

9 Fakat özellikle büyük boyutlu programlar oluştururken programın okunulabilirliği açısından main() fonksiyonundan önce ön bildirim yapıp fonksiyonu main() fonksiyonundan sonra tanımlamak daha uygundur. Argümanlar yerel değişkenlere benzerler ve sadece fonksiyon içerisinde tanınırlar. Bildirimi yukarıda olduğu gibi fonksiyon adının hemen altında yada fonksiyon parantezi içindeki argümanın önünde yapılabilir (formal bildirim). Fonksiyon altprogramı kendisini çağırana veri gönderecek ise (fonksiyon ise), “return” deyimi kullanarak sadece bir tane sonuç gönderebilir. Gönderilecek verinin tipini fonksiyon-tipi belirler.

10 Daha öncede bahsedildiği gibi eğer bir fonksiyon kendisini çağırana hiçbir veri göndermeyecek ise yordam şeklinde kullanılıyordur ve fonksiyon-tipi “void” olmalıdır. C/C++’ da bir fonksiyonun argümanı (formal parametresi) birden çok olabileceği gibi hiç de olmayabilir. Hiç parametre yok ise derleyicinin isteğine göre hiç parametre yazılmaz veya fonksiyon parantezi içine “void” yazılır. Bir fonksiyonun her çağrılmasında standart kütüphanenin (stdlib.h) va_start(), va_arg(), va_end() makro fonksiyonları kullanılarak farklı sayıda argüman parametre olarak kullanılabilir. Bu ders kapsamında bu konu ele alınmayacaktır.

11 Bir C/C++ programında fonksiyon çağırma işini aşağıdaki şekilde olduğu gibi ifade edebiliriz;

12  c/C++’ da fonksiyona parametre aktarımı
C/C++’ da bir fonksiyonuna parametre aktarımı (argüman kullanımı) iki şekilde yapılabilir; Verinin değeri doğrudan aktarılabilir yani değer doğrudan parametre olarak kullanılabilir (değer ile çağırma – calling by value). Verinin adresi (değişken) aktarılabilir yani değişken parametre olarak kullanılabilir (adres ile çağırma – calling by reference). Bunun ile birlikte fonksiyon argümanların bir kısmı değer bir kısmı da değişken şeklinde olabilir.

13 Fonksiyon her çağrıldığında aynı kod kullanılır ……. ……..
Çağıran program fonksiyon ……. …….. void fonk1() { …… …….. } Fonksiyon çağrıları fonk1() ……. …….. Fonksiyon çağrıları fonk1() Fonksiyon her çağrıldığında aynı kod kullanılır ……. …….. fonk1() Fonksiyon çağrıları ……. …….. Birfonksiyonun kullanımı ve kontrol akışı SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

14 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
// basit fonksiyon örneği #include <iostream> using namespace std; void bolme(); //fonksiyon tanımlama// (prototype) int main() { bolme(); //fonksiyon çağırma cout << “Veri tipi aralığı ” << endl; cout << “char ” << endl << “short -32, ,767” << endl << “int sisteme bağlı” << endl << “long -2,147,483, ,147,483,647” << endl; return 0; } void bolme() //fonksiyon tanımlama for(int j=0; j<45; j++) //fonsiyon ifadeleri cout << ‘=’; cout << endl; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

15 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Fonksiyonların tanımlanması Nasıl ki bir değişkeni derleyiciye bildirmeden önce kullanamıyorsak, bir fonksiyonuda derleyiciye bildirmeden kullanamayız. Fonksiyonu derleyiciye bildirmenin iki yolu vardır; Birincisi fonksiyonu çağırmadan önce deklere etmek. İkincisi ise fonkisyonu çağırmadan önce tanımlamaktır. void bolme(); Derleyiciye, daha sonraki bir noktada bolme isimli bir fonksiyon sunmayı planladığımızı anlatır. Void anahtar kelimesi fonksiyonun döndürdüğü bir değer olmadığını, boş parantezler ise argüman almadığını belirtir. Fonksiyonu Çağırmak Fonksiyon çağırılırken bolme(); İfadesi ile gerçekleştirilir SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

16 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Dönüş tipi Noktalı virgül konuluyor void funk1() ; void main() { …………. funk1() ; } void fonk1() Fonksiyon bildirimi Dönüş tipi yok Fonksiyon çağırma Noktalı virgül yok Fonksiyon bildirim Fonksiyon tanımı Fonksiyon ifadeleri(gövde) Noktalı virgül yok SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

17 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Bildirimden Kurtulmak Bildirimden kurtulmak için fonksiyonun tamamını çağırılmadan önce vermektir. Örneği yeniden düzenleyelim // basit fonksiyon örneği #include <iostream> using namespace std; void bolme() //fonksiyon tanımlama { for(int j=0; j<45; j++) //fonsiyon ifadeleri cout << ‘=’; cout << endl; } int main() bolme(); //fonksiyon çağırma cout << “Veri tipi aralığı ” << endl; cout << “char ” << endl << “short -32, ,767” << endl << “int sisteme bağlı” << endl << “long -2,147,483, ,147,483,647” << endl; return 0; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

18 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Argumanların fonksiyona geçisi Bir önceki örneğimizde fonkisyona bir parametre aktarımı yapılmamıştı. Fonksiyonu yeniden düzenleyebiliriz. Yeni fonksiyonumuzun adı KarakterTekrar olsun ve karakter ve integer tipinde bu fonksiyona iki sabit parametre aktaralım Void KarakterTekrar( char, int); Programı çağırırken KarakterTekrar( ‘*’, 50); Yani fonsiyona gönderilen karakterden verilen sayı kadar bir satırda basılsın. void KarakterTekrar(char ch, int n) //fonksiyon tanımlama { for(int j=0; j<n; j++) //fonsiyon ifadeleri cout <<ch; cout << endl; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

19 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
#include <iostream> using namespace std; void KarakterTekrar( char, int); void main() { KarakterTekrar(‘*’,50); //fonksiyon çağırma cout << “Veri tipi aralığı ” << endl; KarakterTekrar(‘+’,50); //fonksiyon çağırma cout << “char ” << endl << “short -32, ,767” << endl << “int sisteme bağlı” << endl << “long -2,147,483, ,147,483,647” << endl; KarakterTekrar(‘*’,50); //fonksiyon çağırma return 0; } void KarakterTekrar(char ch, int n) //fonksiyon tanımlama for(int j=0; j<n; j++) //fonsiyon ifadeleri cout <<ch; cout << endl; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

20 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
#include <iostream> using namespace std; void KarakterTekrar( char, int); void main() { char karakter; int sayi; cout << “Karakter gir : ”; cin >> karakter; cout << “Tekrar sayısını gir: ”; cin >> sayi; KarakterTekrar(‘karakter, sayi); //fonksiyon çağırma return 0; } void KarakterTekrar(char ch, int n) //fonksiyon tanımlama for(int j=0; j<n; j++) //fonsiyon ifadeleri cout <<ch; cout << endl; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

21 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Argüman olarak yapılar Yapıların tümü fonksiyonlara argüman olarak aktarılabilir. #include <iostream> using namespace std; struct mesafe //yapı tanımla { int metre; float cm; }; void metrikolcu(mesafe); İnt main() mesafe m1,m2; cout<<“ \n metre yi gir”;cin>>m1.metre; cout<< “ cm yi gir “;cin>>m1.cm; cout<<“ \n metre yi gir”;cin>>m2.metre; cout<< “ cm yi gir “;cin>>m2.cm; cout<<“\n m1 =“; metrikolcu(m1); cout<<“\n m2 =“; metrikolcu(m2); cout<<endl return 0; } void metrikolcu(distance mm) { cout<< mm.metre<< “ metre ” <<mm.cm <<“ cm dir”; } SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

22 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Fonksiyonlardan değer döndürmek Bir fonksiyon çalışmasını tamamladıktan sonra kendisini çağıran programa tek bir değer döndürebilir. Genellikle döndürülen bu değer, Fonksiyonun çözdüğü problemin cevabını içerir. #include <iostream> using namespace std; float birimcevir(float); int main() { float libre, kilo; cout<< “\n kilonuzu kg olarak giriniz ..”; cin>>kilo; libre=birimcevir(kilo); cout<<“ libre cinsinden ağırlığınız ..=”<<libre<<endl; return 0; } float birimcevir(float agirlikKg) float agirlikLb=agirlikKg/ ; return agirlikLb; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

23 #include <cstdlib> #include <iostream>
Fonksiyon aşırı yüklenmesi #include <cstdlib> #include <iostream> using namespace std; void ciz(); void ciz(char , int); void ciz(char); int main(int argc, char *argv[]) { ciz(); cout<<" hesaplama devam ediyor lütfen bekleyiniz ";cout<<endl; ciz(':',30); cout<<" işlem tamam ";cout<<endl; ciz('#'); system("PAUSE"); return EXIT_SUCCESS; }

24 void ciz() { int i; for (i=0; i<45;i++) cout<<"*"; cout<<endl; } void ciz(char kar, int say) for (i=0; i<say;i++) cout<<kar; void ciz(char kar)

25 #include <cstdlib>
#include <iostream> using namespace std; void swap(int , int ); int x=10; int y=5; int main(int argc, char *argv[]) { cout<<" x "<< x<<" y "<< y<< endl; swap(x,y); system("PAUSE"); return EXIT_SUCCESS; } void swap(int first, int second) x=second; y=first;


"SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz" indir ppt

Benzer bir sunumlar


Google Reklamları