Top Banner
Nesneye Yönelik Programlama (OOP) 3.Hafta
26

Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Dec 24, 2019

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Nesneye Yönelik Programlama(OOP)

3.Hafta

Page 2: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Fonksiyonlar

Fonksiyonlar programın modüler bir yapıda yazılabilmesini sağlar.Program yazarken fonksiyon kullanmanın çeşitli avantajları vardır.

● Aynı kodların tekrar tekrar yazılmasından kurtarır. Fonksiyon olarak paketlenmiş bir kod, programın istenilen herhangi bir yerinde rahatlıkla çalıştırılabilir.

● Fonksiyonlar, programın parçalara ayrılarak geliştirilmesini sağlar ve yönetilmesini kolaylaştırır.

● İyi tanımlanmış ve belirli bir görevi yerine getiren fonksiyonlar, yeni bir program yazarken tekrar kullanılabilirler. Böylece daha önceden yazılmış fonksiyonlar yeni programların geliştirilmesinde kolaylık sağlar.

Page 3: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Fonksiyonların Tanımlanması

C ve C++ programlama dillerinde bir fonksiyon çağırıldığı noktadan daha önce tanımlanmış olmalıdır. Derleme işlemi sırasında bir fonksiyon çağırma ifadesine denk gelindiğinde derleyici o fonksiyonun geri dönüş değerini bilmelidir. Bu nedenle fonksiyon ya o noktadan daha önce tanımlanmış olmalı ya da bir prototipi oluşturulmuş olmalıdır.

Bir fonksiyon aşağıdaki şekilde tanımlanır.

geri-dönüş-değer-tipi fonksiyon-adı ( parametre-listesi ){

fonksiyonun-yapacağı-işlemler}

Page 4: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Geleneksel olarak bütün fonksiyonlar main( ) fonksiyonundan sonra bildirilir. Eğer böyle bir tercih yapılırsa o fonksiyonun adı main( ) fonksiyonundan önce bildirilmelidir. Bu tip bildirime fonksiyon prototipi denir.

#include <iostream>using namespace std;

int kare ( int ); // Fonksiyon prototipi

int main( ){cout<<kare(5);

}

int kare(int sayi){return sayi*sayi;

}

Page 5: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Eğer fonksiyon tanımlaması main( ) fonksiyonundan önce yapılmışsa fonksiyon prototipine gerek yoktur.

#include <iostream>using namespace std;

int kare(int sayi){return sayi*sayi;

}

int main( ){cout<<kare(5);

}

Page 6: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Başlık Dosyaları (Header Files)

C++ Standart Kütüphanesi program yazılırken ihtiyaç duyulan bir çok fonksiyonun prototipini, bazı veri tanımlamalarını ve sabitleri içerir. Sonu .h ile biten başlık dosyaları eski stildir ve C++ standart kütüphane dosyaları onların yerini almıştır.

C++ Standart Kütüphane dosyalarından bazıları:

<iostream> <iostream.h> başlık dosyasının yerini alır ve standart giriş çıkış fonksiyonları için protoripleri içerir.

<cmath> <math.h> başlık dosyasının yerini alır ve mathkütüphanesi fonksiyonlarının protoriplerini içerir.

Programcı kendi özel başlık doslarınını tanımlayabilir ve program yazerken bunları dahil edebilir.

Page 7: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

#include <iostream>using namespace std;

double maksimum (double, double, double);

int main( ){double sayi1,sayi2,sayi3;cout<< “Uc tane sayi giriniz : ”;cin >> sayi1 >> sayi2 >>sayi3;

cout << “Maksimum=”<<maksimum(sayi1,sayi2,sayi3)<<endl;}

double maksimum (double x, double y, double z){double max=x;if(y>max)

max=y;if(z>max)

max=z;

return max;}

Page 8: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Özyineleme (Recursion)

Bir fonksiyon kendisini çağırıyorsa bu fonksiyona özyinelemeli fonksiyon denir.

int main( ){

cout << faktoriyel (4) <<endl;return 0;

}

long faktoriyel ( long number ){if(number <= 1)

return 1;else

return number * faktoriyel ( number-1 ); }

Page 9: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

faktoriyel (4)

return 4 * faktoriyel (3)

return 3 * faktoriyel (2)

return 2 * faktoriyel (1)

return 1

Page 10: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Özyinelemeli fonksiyon ile Fibonacci Dizisi

long fibonacci ( long n ){if ( n==0 || n==1 )

return n;else

return fibonacci( n-1 ) + fibonacci ( n-2 ); }

Page 11: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

fibonacci (3)

return fibonacci (2) fibonacci (1)+

return 1return fibonacci (1) + fibonacci (0)

return 1 return 0

Page 12: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Fonksiyonları Referans ile Çağırma

Fonksiyonlar değer ile veya referans ile olmak üzere iki farklı biçimde çağırılır. Fonksiyonları şimdiye kadar hep değer ile çağırdık.

Örnek : faktoriyel(5); faktoriyel(sayi);

Fonksiyonlar değer ile çağırılırken kendisine verilen parametrenin bir kopyası oluşturulur ve fonksiyon bu kopyayı kullanır. Bu kopya değer üzerinde yapılan değişiklikler orjinal değeri değiştirmez.

Referans ile çağırma yönteminde ise verilen parametre orjinal değere bir referanstır ve fonksiyonun yapmış olduğu değişiklikler orjinal değere etki eder.

Referans ile çağırma verinin kopyalanması işlemini elemine ettiği için hız kazandırır ancak verinin orjinal değerini değiştirdiği için güvenlik anlamında daha zayıftır.

Page 13: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

#include <iostream>using namespace std;

int squareByValue ( int );void squareByReference ( int & );

int main(){

int x=2;int z=4;cout<< “Fonksiyondan donen deger=”<<squareByValue(x)<<endl;cout<< “x'in sonraki degeri=”<<x<<endl;

squareByReference( z );cout<< “Referans ile cagirmadan sonra z=”<<z<<endl;return 0;

}

int squareByValue ( int number ){return number*=number;

}

void squareByReference ( int &numberRef ){numberRef *= numberRef;

}

Page 14: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Fonksiyonlarda Varsayılan Parametre Değeri

Parametre alan fonksiyonlar parametresiz ya da fonksiyonun beklediğinden daha az sayıda parametre ile çağırılırsa hata yapılmış olur. Ancak, fonksiyonun prototipi oluşturulurken varsayılan değerler atanırsa, fonksiyon çağırıldığı sırada eksik parametre gönderilirse fonksiyon prototipte belirtilen varsayılan değerleri kullanır.

#include <iostream>using namespace std;

int boxVolume (int length=1, int width=1, int height=1);

int main(){cout<<boxVolume();return 0;

}

int boxVolume (int length, int width, int height){return length*width*height;

}

Page 15: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Diziler (Arrays)

Diziler, aynı isim ve aynı veri tipine sahip bir grup ardışık hafıza bölgesidir. Bir dizideki bir bölge veya elemana ulaşmak istediğinizde dizi adı ile birlikte pozisyon numarasını (index) da belirtmeniz gerekmektedir.

Dizi elemanları sıfırdan başlar.

-45

6

0

72

1465

-89

diziadi [ 0 ]

diziadi [ 1 ]

diziadi [ 2 ]

diziadi [ 3 ]

diziadi [ 4 ]

diziadi [ 5 ]

Page 16: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Dizi elemanları ile artimetik, lojik ve mantıksal işlemler aynen değişkenlerde olduğu gibi yapılır.

cout << c[ 0 ] + c [ 1 ] <<endl;

x = c[ 6 ] / 2;

Dizilerin Tanımlanması

Diziler tanımlandıklarında hafızada yer tutarlar. Bu nedenle bir dizi tanımlanırken dizinin tipi ve eleman sayısı belirtilmelidir.

Her bir elemanı integer tipinde olan sayilar isimli 12 elemana sahip bir dizi aşağıdaki gibi tanımlanır.

int sayilar[ 12 ];

Page 17: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Örnek :

#include <iostream>#include <iomanip>

using namespace std;

int main(){

int n[10];

for ( int i=0; i<10; i++)n[ i ] = 0;

cout << “Eleman” << setw(10) << “Deger” <<endl;

for (int j=0; j<10; j++)Cout << setw(6) << j << setw(10) << n[ j ] << endl;

return 0;}

Page 18: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Bir dizi tanımlandığı sırada aşağıdaki şekillerde başlangıç değerleri atanabilir.

int n[ 10 ] = { 5, 32, 65, 13, 66, 90, 4, 21, 77, 98};

int n[ 10 ] = { 0 };

int n[ ] = { 1, 2, 3, 4, 5};

Page 19: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Karakter Dizileri

Bu noktaya kadar hep tam veya ondalıklı tipteki sayılardan oluşan dizilerle işlem yaptık. C ve C++ programlama dillerinde tek bir karakteri saklamak için char veri tipini kullanabilirsiniz.

char harf='a';

Tek bir karakterden fazlasını saklamak için C++'ın ileride inceleyeceğimiz string sınıfı kullanılacağı gibi. Aşağıdaki gibi bir tanımlama ile karakter dizisi de oluşturulabilir.

char dizi[20];

Yukarıdaki dizi 19 karaktere kadar olan verileri saklayabilir. Çünkü bir karakter dizisinin sonunda \0 (null karakteri) bulunmak zorundadır.

M e r h a b a \0

char dizi[20] = { 'M', 'e' , 'r' , 'h', 'a' , 'b' , 'a' , '\0' };

char dizi[20] = “Merhaba”;

Page 20: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Dizileri Fonksiyonlara Parametre Olarak Gönderme

Diziler fonksiyonlara parametre olarak gönderilirken, dizinin adı köşeli parantezler kullanılmadan yazılır. Örneğin, aşağıdaki gibi tanımlanmış bir fonksiyon olduğunu varsayalım.

int saatlikSicakliklar [ 24 ];

Bu dizi “diziyiDuzenle” fonksiyonuna aşağıdaki gibi gönderilir.

diziyiDuzenle ( saatlikSicakliklar, 24 );

Dizi boyutu ayrı bir parametre olarak gönderilir ya da dizi boyutu fonksiyon içinde aşağıdaki gibi belirlenebilir.

diziboyutu = sizeof ( saatlikSicakliklar ) / sizeof ( int );

Diziler fonksiyonlara parametre olarak gönderildiğinde bir çeşit referans ile çağırma mantığı ile çalışır ve fonksiyonun dizi üzerinde yaptığı değişiklikler orjinal diziyi etkiler.

Page 21: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Bir dizinin herhangi bir elemanı bir fonksiyona parametre olarak gönderildiğinde ise fonksiyon değer ile çağırılmış olur ve dizinin elemanı üzerinde değişiklik yapılmaz.

void modifyElement ( int e ){e *= 2;

}

Yukarıdaki fonksiyon modifyElement( saatlikSicakliklar[3] ); şeklinde değer ile çağırılır.

saatlikSicakliklar[ 3 ] elemanının değeri değişmez.

Page 22: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Dizileri Sıralama

#include <iostream>using namespace std;

void sortArray(int arrayName[ ], int arraySize){ int temp; for(int j=0; j<arraySize-1; j++) for(int i=0;i<arraySize-1;i++){ if(arrayName[ i ]>arrayName[ i+1 ]){ temp=arrayName[ i ]; arrayName[ i ]=arrayName[ i+1 ]; arrayName[ i+1 ]=temp; } }}

int main(){ const int arraysize = 11; int dizi[arraysize] = {7,2,13,24,4,6,57,0,1,455,9}; sortArray(dizi,arraysize); for(int i=0; i<arraysize; i++){ cout<<dizi[ i ]<<endl; } return 0;}

Page 23: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Çok Boyutlu Diziler

Program yazarken tıpkı bir tablo gibi satır ve sütünlardan oluşan diziler tanımlayabilirsiniz.

a [ 0 ][ 0 ] a [ 0 ][ 1 ] a [ 0 ][ 2 ] a [ 0 ][ 3 ]

a [ 1 ][ 0 ] a [ 1 ][ 1 ] a [ 1 ][ 2 ] a [ 1 ][ 3 ]

a [ 2 ][ 0 ] a [ 2 ][ 1 ] a [ 2 ][ 2 ] a [ 2 ][ 3 ]

Satır 0

Satır 1

Satır 2

Sütun 0 Sütun 1 Sütun 2 Sütun 3

Page 24: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

int b[ 2 ][ 2 ] = { { 1, 2 } , { 3, 4 } };

b[ 0 ][ 0 ] = 1

b[ 0 ][ 1 ] = 2

b[ 1 ][ 0 ] = 3

b[ 1 ][ 1 ] = 4

int b[ 2 ][ 2 ] = { { 1 } , { 3, 4 } };

b[ 0 ][ 0 ] = 1

b[ 0 ][ 1 ] = 0

b[ 1 ][ 0 ] = 3

b[ 1 ][ 1 ] = 4

Page 25: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

int b[ 2 ][ 3 ] = { 1, 2, 3, 4, 5, 6};

b[ 0 ][ 0 ] = 1

b[ 0 ][ 1 ] = 2

b[ 0 ][ 2 ] = 3

b[ 1 ][ 0 ] = 4

int b[ 2 ][ 3 ] = { 1, 2, 3, 4, 5 };

b[ 1 ][ 1 ] = 5

b[ 1 ][ 2 ] = 6

b[ 0 ][ 0 ] = 1

b[ 0 ][ 1 ] = 2

b[ 0 ][ 2 ] = 3

b[ 1 ][ 0 ] = 4

b[ 1 ][ 1 ] = 5

b[ 1 ][ 2 ] = 0

Page 26: Nesneye Yönelik Programlama (OOP) 3robotics.nigde.edu.tr/cpp/pdf/hafta3.pdf · Nesneye Yönelik Programlama (OOP) 3.Hafta. Fonksiyonlar Fonksiyonlar programın modüler bir yapıda

Çok Boyutlu Dizileri Fonksiyonlara Parametre Olarak Gönderme

Çok boyutlu bir diziyi parametre olarak alan bir fonksiyon tanımlanırken birinci boyut hariç tüm boyutların sınırı belirtilmek zorundadır.

void printArray ( int a[ ][ 3 ] , int row) {

for ( int i=0 ; i<row ; i++ ){

for( int j=0 ; j<3 ; j++ ) {cout<< a[ i ][ j ] << ' ';

}cout<<endl;

}}

int array1[ 2 ][ 3 ] = { 1, 2, 3, 4, 5, 6 };

printArray( array1, 2 );

Tanımlanan Fonksiyon

Tanımlanan Dizi

Fonksiyonun Çağırılması