Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

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

Benzer bir sunumlar


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

1 Doç. Dr. Cemil Öz 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 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz void fonk1() { …… …….. } fonk1() ……. …….. ……. …….. ……. …….. ……. …….. Birfonksiyonun kullanımı ve kontrol akışı Çağıran program fonksiyon Fonksiyon her çağrıldığında aynı kod kullanılır Fonksiyon çağrıları

14 // basit fonksiyon örneği #include using namespace std; void bolme(); //fonksiyon tanımlama// (prototype) int main() { bolme(); //fonksiyon çağırma cout << “Veri tipi aralığı ” << endl; bolme(); //fonksiyon çağırma cout << “char ” << endl << “short -32, ,767” << endl << “int sisteme bağlı” << endl << “long -2,147,483, ,147,483,647” << endl; bolme(); //fonksiyon çağırma 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 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

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

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 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; bolme(); //fonksiyon çağırma cout << “char ” << endl << “short -32, ,767” << endl << “int sisteme bağlı” << endl << “long -2,147,483, ,147,483,647” << endl; bolme(); //fonksiyon çağırma return 0; }

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

19 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz #include 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

20 SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz #include using namespace std; void KarakterTekrar( char, int); void main() { char karakter; int sayi; cout > karakter; cout > sayi; KarakterTekrar(‘karakter, sayi);//fonksiyon çağırma return 0; } void KarakterTekrar(char ch, int n) //fonksiyon tanımlama { for(int j=0; j

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 using namespace std; struct mesafe //yapı tanımla { int metre; float cm; }; void metrikolcu(mesafe); İnt main() { mesafe m1,m2; cout >m1.metre; cout >m1.cm; cout >m2.metre; cout >m2.cm; cout<<“\n m1 =“; metrikolcu(m1); cout<<“\n m2 =“; metrikolcu(m2); cout<

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 using namespace std; float birimcevir(float); int main() { float libre, kilo; cout >kilo; libre=birimcevir(kilo); cout<<“ libre cinsinden ağırlığınız..=”<

23 #include 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<

24 void ciz() { int i; for (i=0; i<45;i++) cout<<"*"; cout<

25 #include 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); cout<<" x "<< x<<" y "<< y<< endl; system("PAUSE"); return EXIT_SUCCESS; } void swap(int first, int second) { x=second; y=first; }


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

Benzer bir sunumlar


Google Reklamları