slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 3 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal) PowerPoint Presentation
Download Presentation
BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 3 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)

Loading in 2 Seconds...

play fullscreen
1 / 38

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 3 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal) - PowerPoint PPT Presentation


  • 156 Views
  • Uploaded on

BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 3 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal). Fonksiyonlara Giri ş.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'BM-104 Nesneye Yönelik Programlama Bahar 201 3 ( 3 . Sunu ) ( Yrd . Do ç . Dr. Deniz Dal)' - pepper


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

BM-104

Nesneye Yönelik Programlama

Bahar2013

(3. Sunu)

(Yrd. Doç. Dr. Deniz Dal)

fonksiyonlara giri
FonksiyonlaraGiriş
  • En iyi program yazmavegeliştirmepratiğitekbir büyük program yazmakyerineonudahakolaykontrol altındatutmamıza yardımcıolabilecek küçük programların(fonksiyonların)birleşimihalindeoluşturmaktır.Bu yönteme“Böl&Yönet” (“Divide&Conquer”) adıverilir.
  • Birfonksiyongerektiğindefonksiyon adıileçağrılır vefonksiyonunişleyeceğibilgilerargüman (parametre)olarakfonksiyonaaktarılır. Örneğin bir patron (fonksiyonuçağıran)birçalışanını(çağrılanfonksiyon)yanınaçağırır vedoldurmasıiçinelinebirdosyaverir(argüman). Çalışanıişinibitirdiğizamanişlenmişdosyayıpatronunageri götürür (return).
matematik k t phanesi fonksiyonlar
Matematik Kütüphanesi Fonksiyonları
  • Bu fonksiyonlarstandart kütüphaneden<cmath> header dosyasıincludeedilerekkullanılabilir.
  • Matematikkütüphanesinin bütün fonksiyonları genellikle doubleveri tipinde parametre(ler) alırlar ve geriyedoubleveri tipinde bir değer döndürürler.
  • Örnek: cout<<sqrt(900.0);
  • Bu örnektematematik kütüphanesifonksiyonlarından “sqrt” çağrılır. “900.0” rakamıbufonksiyonunargümanıolarakadlandırılır. Yukarıdakideyimekranasonuçolarak “30.0” yazdırır. “sqrt” fonksiyonukendisine doubleveri tipinde birargüman alır veyinedoubleveri tipinde bir değer döndürür.
  • Fonksiyonargümanlarısabit bir sayı, değişken ya da bunların bir karmasıolabilir.
fonksiyon format
Fonksiyon Formatı

“döndürülenveritipi” “FonksiyonunAdı”(parametrelistesi)

{

deklarasyonlarvedeyimler;

returnanahtarkelimesi;

}

  • Parametre listesindeki birden fazla parametre birbirlerinden virgül ile ayrılır. Herbir parametre fonksiyon içerisinde bir değişken olarak kullanılacağı için bir isme ve bir veri tipine sahiptir.
  • Döndürülenveri tipi “void” isebufonksiyon hiçbirverigeri döndürmezvereturnanahtarkelimesikullanılmakzorunda değildir.
fonksiyon prototipi
Fonksiyon Prototipi
  • Fonksiyonprototipi, derleyiciye, kullanılacakfonksiyonun adını, döndürülecekveritipini, kaçparametre alınacağınıvetiplerini, buparametrelerinhangi sıradaolacağını hatırlatır. Parametre olarak kullanılan değişkenlerin isimleri prototip içine yazılmaz. Sadece değişkenlerin veri tipleri yazılır. Eğerfonksiyonprototipte tanımlandığıgibiçağrılmazsaderleyicihataverir. Bütün bunlarfonksiyonkullanımınıdaha da kolaylaştırmakve yapılacakyanlışlarıönlemekiçindir.
  • Eğerfonksiyon, çağrılmadanönce tanımlanmışsaprototipegerekyoktur. Sonra tanımlanmışsagerekvardır.
  • Örneğin: intMaksimum(int,int,int);prototipiMaksimumadlıfonksiyonun 3 integer parametrealacağınıve geriyeyinebir integer döndüreceğini söyler.
v oid fonksiyonlar
voidFonksiyonlar

void EkranaBas();şeklinde tanımlı prototip EkranaBasadlıfonksiyonunhiçbirargüman almadığınıvegeriye hiçbir değer döndürmediğini söylerbize.

paskal notasyonu
PaskalNotasyonu
  • Fonksiyonlar isimlendirilirken en fazla kullanılan notasyonlardan birisi Paskal notasyonudur (pascal notation). Bu notasyon, fonksiyon ismi birden fazla kelime içeriyorsa ilk kelime de dahil bütün kelimelerin ilk karakterlerinin büyük harfle yazıldığı bir notasyondur. KaresiniAl, AsalMi, Swap gibi.
ba l k header dosyalar
Başlık (Header)Dosyaları
  • Standart kütüphanenin her birelemanı, bünyesinde barındırdığıfonksiyonların prototiplerinive tanımlarını“başlık dosyası”olarak isimlendirdiğimiz ve“include”deyimiile programımızın başınaeklediğimizdosyaların içerisinde saklar.
  • Standart kütüphanedeneklediğimiz“başlık”dosyaları<ile>karakterleriarasınakonur. Kullanıcının oluşturduğu “başlık”dosyalarıise"ile"karakterleriarasınayerleştirilirveuzantısı".h"dir.
  • Örnek: #include <iostream>

#include "bm104.h"

rastgele i nteger say retme
Rastgele integer SayıÜretme
  • Standartkütüphaneden<cstdlib> include edilirveburada tanımlırand()fonksiyonubuişiçin kullanılır.
  • rand()fonksiyonu 0 ile RAND_MAXarasında rastgele bir tamsayı üretir. RAND_MAXcstdlib kütüphanesi içerisinde tanımlı sabit bir sayıdır ve değeri şu an itibariyle 32767dir.
  • rand() fonksiyonunun ürettiği rastgele sayı istenilenaralığa modülüs(%)operatörükullanılarak çekilir.
  • Örneğin rand()%6bize0ile5arasında integer sayılarüretir.
  • Örneğin rand()%6+1bize1ile6arasında integer sayılarüretir.
  • rand()fonksiyonu programımızı test veya debugederkenbizekolaylık olsundiye programıçalıştırdığımız her seferaynı sayıyıüretir.
slide17
Soru.........

32 ile 122 arasında rastgele bir tamsayı üretecek C++ deyimi aşağıdakilerden hangisidir?

a) rand()%122+32

b)rand()%32+122

c) rand()%90+32

d)rand()%32+90

e)Hocam!! Bu tür sorularlaaklımızı karıştırmayınız

srand seed fonksiyonu
srand(seed) Fonksiyonu
  • Programımızı test ettiktenve tam olarakçalıştığınaeminolduktansonra programın çalıştırıldığı her seferfarklıbir sayıüretilsinisteriz.
  • Bununiçin yinestandart kütüphanenin<cstdlib> header dosyasındansrandfonksiyonunukullanırız. srandfonksiyonukendisineunsigned intveritipinesahipbirargüman alır. Bu argüman çekirdek değer(seed)olarakadlandırılır.
srand time 0 fonksiyonu
srand(time(0)) Fonksiyonu
  • Her seferindefarklı birçekirdek değergirmekyerinesrandfonksiyonunaargüman olarak standard kütüphanenin<ctime> header dosyasının içinde tanımlıtimefonksiyonukullanılır.
  • Örneğin time(0) (time fonksiyonu sıfır değerinikendisineargüman olarakalmış) bilgisayarın o ankisaat değerinisaniyecinsindengeriye döndürür.
  • srand(time(0))iseüretilenbusaat değerini unsigned integer e çevirirveçekirdek değerolarakkullanır.
rek rsif fonksiyonlar
RekürsifFonksiyonlar
  • 5!=5*4!=5*4*3! ….. (Rekürsif Faktöriyel)
  • 35=3*34=3*3*33….. (Rekürsif Üs Alma)
  • 4*7=4+4*6=4+4+4*5 ….. (Rekürsif Çarpma)
rek rsif fonksiyonlar1
RekürsifFonksiyonlar
  • Şu anakadar gördüğümüz ve tanımladığımız fonksiyonlardahiyerarşikbir yapıiçerisindebirfonksiyonbaşkabirfonksiyonuçağırıyordu. Bazıproblemleriçin fonksiyonların kendikendileriniçağırmalarıdahafaydalıolabilir. Bu tür fonksiyonlaraRekürsif Fonksiyonlar denir.
  • Birrekürsiffonksiyonun ne zamankendikendiniçağırmayıdurduracağınıbilmesigerekir. Biz bunatemel durum (base case)diyoruz. Eğerbuşart sağlanmazsa program sonsuzakadarçalışır.
  • Öte yandan rekürsiffonksiyonlarlagerçekleştirilebilenişlemlerdöngülerile de yapılabilirler.
rnek r ek rsif fakt riyel hesaplama
Örnek: RekürsifFaktöriyelHesaplama

Döngü değişkeninin üst limiti 10 yerine 13 olsaydı ne olurdu? Programınız mevcut haliyle 13 sayısının faktöriyelini doğru olarak hesaplar mıydı? Bu sorunu nasıl çözüme kavuşturursunuz?

de er ve referans ile fonksiyon a rma
Değerve ReferansileFonksiyonÇağırma
  • Birçok bilgisayardilindeargümanlarfonksiyonlaraikişekildeiletilirler. Değerile (call-by-value) veyaReferansile (call-by-reference).
  • BirargümanDeğerilebirfonksiyonaaktarıldığındaargümanın birkopyası alınır vefonksiyoniçersinde değerlendirilir. Fonksiyoniçindeargüman değerine yapılan değişikliklerfonksiyonunçağrıldığıyerdeki değişkenietkilemez. (ORİJİNAL EVRAKIN FOTOKOPİSİ) Bu sunudaşu anakadargördüğümüz örneklerde güvenliolduğu içinhepbuyolukullandık.
  • AmabazıdurumlardaReferansilefonksiyonçağırmakicapeder. Bu yolla, fonksiyonuçağıran, fonksiyona aktardığıargümanın değiştirilmesine de izinvermişolur. (ORİJİNAL EVRAK)Bu tür birfonksiyona en güzelörnek“swap”fonksiyonudur.
  • Referansparametresiya da argümanıileilgilendiğimizi göstermekiçin “&”karakterinikullanırız.
slide28

İKİ DEĞİŞKENİN DEĞERİNİN YER DEĞİŞTİRMESİ (SWAPPING)

A

B

Elinizdeki TV kumandası

yardımıyla kayıtlı 2kanalın yerini nasıl değiştirirsiniz?

geciciDegisken=A;

A=B;

B=geciciDegisken;

!!! GEÇİCİ BİR DEĞİŞKENE İHTİYAÇ VAR !!!

slide31
Soru
  • Fonksiyonlar return komutuyla sadece bir değer geriye çevirirler (döndürürler). Geriye birden fazla değer çevirebilmek (döndürebilmek) için ne yapmamız gerekir?
  • (3 sayının en küçüğünü ve en büyüğünü tek bir fonksiyon içerisinde hesaplayıp geriye döndürmeniz gerektiğini hayal edin.)
  • (void fonksiyonların hangi amaçlarla kullanıldıklarını hatırlayın.)
referans ile de i ken kontrol
Referans ile Değişken Kontrolü
  • Referanslarbaşka değişkenlerinyerinetakmaisim (alias) olarak da kullanılabilirler.
  • Alias (orijinal değişkeninbaşkabir adıolarak da düşünülebilir)olarak tanımlananbir değişken üzerinde yapılan her türlüişlemorjinal değişken uzerinde degerçekleşir.
  • Alias değişkenlerMUHAKKAK ilk değerli (initialization) olarakdeklare edilmelidirler.
  • Örnek:
      • int count = 1;int &ref = count;ref++;
        • count değişkeninin değeri ref adlı alias kanalıyla1 artırılır.
fonksiyon a r y klemesi function overloading
Fonksiyon Aşırı Yüklemesi (Function Overloading)
  • C++ aynı fonksiyon adına sahip birden fazla fonksiyonun kullanımına izin verir. Ancak bu durum sadece aynı adlı fonksiyonların farklı argüman listelerine ya da dönüş değerlerine sahip olması durumunda geçerlidir.
  • C++ derleyicisi aşırı yüklenmiş bir fonksiyon çağrıldığında fonksiyonun kaç argümana sahip olduğuna, argüman veri tiplerine ve argümanların sırasına bakarak uygun fonksiyonu çalıştırır.
  • Fonksiyon aşırı yüklemesi, genellikle, benzer işleri farklı veri tipleri üzerinde yapan aynı ada sahip fonksiyon tanımları için kullanılır.
  • Örnek:

int KaresiniAl(int x){return x*x;}

double KaresiniAl(double y){return y*y;}

fonksiyon ablonlar function templates
FonksiyonŞablonları (Function Templates)
  • Fonksiyonşablonlarınıkullanarakaynıişlemifarklıveritipleriüzerindeyapanfonksiyonlariçin birdenfazlafonksiyon tanımıyapmakzorundakalmayız.
  • Fonksiyonşablonlarıtemplateanahtarkelimesiilebaşlarveveritiplericlassanahtarkelimesiile“<“ve“>”karakterleriarasında tanımlanır.
slide36

Hata Ayıklama (Debugging)

(Ne Umuyordum Ne Buldum?)

  • Yazdığımız programlar ya hiç çalışmayabilir ya da çalışır ama beklediğimiz sonuçları üretmez.
  • ÇALIŞAN AMA BEKLEDİĞİMİZ GİBİ SONUÇLAR ÜRETMEYEN programlarımızdaki MANTIKSAL hataları bulmak için Visual Studio programının DEBUG menüsü seçeneklerinden faydalanırız.
  • Debug Menüsü -> Run ToCursor (Ctrl+F10): İmlecin bulunduğu satırın öncesindeki bütün satırlar Visual Studio tarafından işletilir ve kontrol imlecin olduğu satırda kullanıcıya devredilir.
  • Debug Menüsü -> Step Over (F10):Kontrolü devralan kullanıcı F10 tuşu yardımıyla programın kalan satırlarını manuel olarak işletir. F10 tuşu fonksiyonların içerisine dallanmaz.
  • Debug Menüsü -> Step Into (F11):F11 tuşu yardımıyla fonksiyonların içerisine de girilir.
  • Programlarımızdaki mantıksal hataları tespit edebilmenin bir başka yolu da hatanın kaynaklanabileceğini düşündüğümüz noktanın (noktaların) öncesine veya sonrasına cout deyimleri eklemektir.