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

Slides:



Advertisements
Benzer bir sunumlar
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Advertisements

SINIFLAR Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR
Zeynep Çelik Sunar….
Bölüm 2 C Dilinin Temelleri
Değişken Bildirimleri
Elektrik-Elektronik Mühendisliği Bölümü
String Kütüphanesindeki Arama Fonksiyonları
Bölüm 10 Yapılar ve Birleşimler
Fonksiyonlar ve Alt Programlar
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
SINIFLAR GİRİŞ Yılmaz Kılıçaslan.
NESNEYE YÖNELİK PROGRAMLAMA
Nesneye Dayalı Programlama
Erişim Denetimi, Fonksiyon
Fonksiyonlar.
NESNE TABANLI PROGRAMLAMA -METOTLAR-
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
Nesneye Dayalı Programlama
C ile Programlamaya Giriş
Paralel Programlamaya Giriş
Metotlar.
FONKSİYONLAR.
SABİT NESNE VE ELEMAN FONKSİYONLAR VE ELEMAN NESNELER
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
Bilgisayar Programlama
JAVA’DA DÖNGÜLER.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
Nesneye Dayalı Programlama
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
C++ Ders Notları 2.Ders (Dilin Yapısı)
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C++.
VERİ YAPILARI İşaretçi Nedir? Nesne Tabanlı Programlama.
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritmalar ve Programlama I Ders 10: ALTPROGRAM KAVRAMI ve FONKSİYON
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
3. HAFTA 3. Hafta.
4. Hafta1 4. HAFTA. 4. Hafta2 Fonksiyonlar  Büyük problemler, küçük parçalara bölünerek kolay çözülür  Yazılımlar benzer modüller içerirler  Hata ayıklama.
Veri yapıları Hafta3 Dizi Yapıları.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Fonksiyonlar.
BİLGİSAYAR programlama II
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Bilgisayar Programlama III C
Hafta2 Rekürsif Algoritmalar
Programlama Dillerinin Prensipleri
VERİ ve BELLEK & DEĞİŞKENLERİN SAKLANMASI Asst.Prof.Dr.Misket YEKTAY Gizem AYIK.
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
Programlamaya Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
Fonksiyonlar ve Diziler
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C Programlama Dili Bilgisayar Mühendisliği.
C’de Fonsiyonlar Aslı Ergün.
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar
DİZİLER Bellekte sıralı bir şekilde bulunan ve aynı türden bilgilerin saklandığı veri yapısına dizi (array) denir. Örneğin kullanıcıdan 7 kişinin not ortalamasını.
FONKSİYONLAR Programlamada fonksiyon kullanmanın en önemli sebebi kodların tekrar edilmesini engellemektir. Örneğin; karekök yada üsalma işlemi yapan bir.
Bölüm 2 C Dilinin Temelleri
YAPISAL PROGRAMLAMA Hafta-6
YAPISAL PROGRAMLAMA Hafta-7
Bölüm 6: Kullanıcı Tanımlı Fonksiyonlar I
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Bölüm 2 C Dilinin Temelleri
C ile Programlamaya Giriş
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

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

Ç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.

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.

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.

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.

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.

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.

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.

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.

  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.

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

 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.

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

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 -128 -- 127” << endl << “short -32,768 -- 32,767” << endl << “int sisteme bağlı” << endl << “long -2,147,483,648 -- 2,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

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

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

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 -128 -- 127” << endl << “short -32,768 -- 32,767” << endl << “int sisteme bağlı” << endl << “long -2,147,483,648 -- 2,147,483,647” << endl; return 0; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

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

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 -128 -- 127” << endl << “short -32,768 -- 32,767” << endl << “int sisteme bağlı” << endl << “long -2,147,483,648 -- 2,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

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

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

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/0.453592; return agirlikLb; SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz

#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; }

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)

#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;