elektrik elektronik m hendisli i b l m n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Elektrik-Elektronik Mühendisliği Bölümü PowerPoint Presentation
Download Presentation
Elektrik-Elektronik Mühendisliği Bölümü

Loading in 2 Seconds...

play fullscreen
1 / 30

Elektrik-Elektronik Mühendisliği Bölümü - PowerPoint PPT Presentation


  • 267 Views
  • Uploaded on

Elektrik-Elektronik Mühendisliği Bölümü. İŞLEVLER (FONKSİYONLAR) C Programlama Dili Yaz Stajı Cengiz TEPE SAMSUN 2007. ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

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 'Elektrik-Elektronik Mühendisliği Bölümü' - ferdinand-little


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
elektrik elektronik m hendisli i b l m

Elektrik-Elektronik Mühendisliği Bölümü

İŞLEVLER (FONKSİYONLAR)

C Programlama Dili Yaz Stajı

Cengiz TEPE

SAMSUN

2007

slide2

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

İşlev Nedir?

C'de alt programlara işlev (function) denir. İngilizcedeki “function” sözcüğü bu bağlamda matematiksel anlamıyla değil diğer programlama dillerinde ya da ortamlarında kullanılan, "alt program", "prosedür", "subroutine" sözcüklerinin karşılığı olarak kullanılır.

İşlevlerin onları çağıran işlevlerden aldıkları girdileri ve yine onları çağıran işlevlere gönderdikleri çıktıları vardır. İşlevlerin girdilerine aktüel parametreler (actual parameters) ya da argümanlar (arguments) denir. İşlevlerin çıktılarına ise geri dönüş değeri (return value) diyoruz.

slide3

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

Programı İşlevlere Bölerek Yazmanın Faydaları

Bir programı alt programlara yani işlevlere bölerek yazmak bazı faydalar sağlar:

1. Programın kaynak kodu küçülür. Böylece oluşturulması hedeflenen çalışabilir dosya da

(örneğin .exe uzantılı dosya) küçülür.

2. Kaynak dosyanın okunabilirliği artar. Okunabilirliğin artması, kodu yazanın ve okuyanın işini kolaylaştırır. Böylece proje geliştirme süresinin azalması yönünde kazanım sağlanmış olur.

slide4

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

3.Belirli kod parçalarının programın farklı yerlerinde yinelenmesi programda yapılacak olası bir değişikliğin maliyetini çok artırır. Programın farklı farklı yerlerinde, kodun kullanıldığı yere bağlı olarak bir seri değişiklik yapmak gerekir. Kaynak dosyalarda böyle değişiklikler yapmak hem zaman alıcıdır hem de risklidir. Çünkü bir değişikliğin yapılmasının unutulması durumunda, ya da değişiklik yapılmaması gereken bir yerde kodun değiştirilmesi durumunda program yanlış çalışabilir. Oysa ortak kod parçaları işlevler şeklinde paketlendiğinde, yalnızca işlevlerde değişiklik yapılmasıyla, istenen değişiklik gerçekleştirilmiş olur

slide5

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

İşlevlerin Geri Dönüş Değerleri

(return values)

Bir işlevin yürütülmesi sonunda onu çağıran işleve gönderdiği değere, işlevin geri dönüş değeri (return value) denir. Her işlev bir geri dönüş değeri üretmek zorunda değildir. Bir işlev yapacağı bir işle ilgili olarak bir geri dönüş değeri üretir ya da üretmez.

İşlevlerin geri dönüş değerleri farklı amaçlar için kullanılabilir:

slide6

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

1. Bazı işlevler zaten tek bir değeri elde etmek, tek bir değeri hesap etmek amacıyla tanımlanırlar. Elde ettikleri değeri de kendilerini çağıran işlevlere geri dönüş değeri olarak iletirler. Bir kübün hacim değerini bulan bir işlev tanımladığımızı düşünelim. Böyle bir işlev hacmini bulacağı kübün kenar uzunluğunu çağrıldığı yerden alır, bu değeri kullanarak hacim değerini hesap eder, ve hesap ettiği değeri dışarıya geri dönüş değeri olarak iletir.

slide7

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

2. Her işlevin amacı bir değer hesap etmek değildir. Bazı işlevler ise çağrılmalarıyla kendilerine sorulan bir soruya yanıt verirler. Örneğin bir sayının asal olup olmadığını sınayan bir işlev tanımlandığını düşünelim. İşlev çağrıldığı yerden, asallığını sınayacağı değeri alır. Tanımında bulunan bazı kodlar ile sayının asal olup olmadığını sınar. Sayının asal ya da asal olmamasına göre dışarıya farklı iki değeri geri dönüş değeri olarak gönderir. Bu durumda işlevin geri dönüş değeri, hesap edilen bir değer değil, sorunun yanıtı olarak yorumlanacak bir değerdir.

slide8

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

3. Bazı işlevler ise ne bir değeri hesap etmek ne de bir soruya yanıt vermek için tanımlanmışlardır. Tanımlanma nedenleri yalnızca bir iş yapmaktır. Ancak işlevin yapması

istenen işin, başarıyla yapılabilmesi konusunda bir garanti yoktur. Örneğin bir dosyayı açmak için bir işlev tanımlandığını düşünelim. İşlev

çağrıldığı yerden açılacak dosyanın ismi bilgisini alır. Ancak dosyanın açılabilmesi çeşitli nedenlerden dolayı garanti altında değildir. Çağrılan işlev istenen dosyayı ya açar ya açamaz. İşlev geri dönüş değeriyle yaptığı işin başarısı hakkında bilgi verir. Bu durumda işlevin geri dönüş değeri, hesap edilen bir değer değil, yapılması istenen işin başarısı konusunda verilen bir bilgi olarak yorumlanır.

slide9

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

4. Bazı işlevler hem belli bir amacı gerçekleştirirler hem de buna ek olarak amaçlarını tamamlayan bir geri dönüş değeri üretirler. Bir yazı içersinde bulunan belirli bir karakteri silecek bir işlev tasarlandığını düşünelim. İşlevin varlık nedeni yazının içinden istenen karakterleri silmektir. Çağırıldığı yerden, silme yapacağı yazıyı ve silinecek karakterin ne olduğu bilgisini alır ve işini yapar. Ancak işini bitirdikten sonra yazıdan kaç karakter silmiş olduğunu geri dönüş değeri ile çağırıldığı yere bildirilebilir.

slide10

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

5. Bazı işlevlerin ise hiç geri dönüş değerleri olmaz. Bu işlevler yalnızca bir iş yaparlar ve

yaptıkları işin başarısı garanti altındadır. Örneğin yalnızca ekranı silme amacıylav tasarlanmış olan bir işlevin geri dönüş değerine sahip olması gereksizdir. Sistemlerin çoğunda çıktı ekranının silinmesi konusunda bir başarısızlık riski yoktur.

slide11

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

İşlevlerin Tanımlanması

[Geri dönüş değerinin türü] <işlev ismi> ([parametreler])

{

...

...

}

Yukarıdaki gösterimde açısal ayraç içinde belirtilen ifadeler zorunlu olarak bulunması gerekenleri köşeli ayraç içinde belirtilen ifadeler ise bulunması zorunlu olmayan, isteğe bağlı ifadeleri gösteriyor. Tanımlanan işlevler en az bir blok içerirler. Bu bloğa işlevin ana bloğu denir. Ana blok içinde istenildiği kadar içiçe blok yaratılabilir.

slide12

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

Aşağıdaki işlev tanımlamasından func isimli işlevinin parametre almadığını ve geri dönüş değerinin de double türden olduğunu anlıyoruz.

double func()

{

}

void Anahtar Sözcüğü

Tanımlanan bir işlevin bir geri dönüş değeri üretmesi zorunlu değildir. İşlev tanımında bu durum geri dönüş değerinin türünün yazıldığı yere void anahtar sözcüğünün yazılmasıyla belirlenir.

void func()

{

}

slide13

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

İşlev tanımında geri dönüş değerinin türü bilgisi yazılmayabilir. Bu durum, işlevin geri dönüş değeri üretmediği anlamına gelmez. Eğer geri dönüş değeri tür bilgisi yazılmaz ise, C derleyicileri tanımlanan işlevin int türden bir geri dönüş değerine sahip olduğunu varsayarlar. Örneğin :

func()

{

}

İle

İnt func()

{

}

slide14

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

İşlevlerin Tanımlanma Yerleri

C dilinde bir işlev tanımı içinde bir

başka işlev tanımlanamaz.

double foo()

{

/***/

int func() /* hata */

{

/***/

}

/***/

}

Tanımlamanın aşağıdaki şekilde yapılması gerekirdi :

double foo()

{

...

}

int func()

{

...

}

slide15

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

İşlevlerin Geri Dönüş Değerlerinin Oluşturulması

C dilinde işlevlerin geri dönüş değerleri return anahtar sözcüğü ile oluşturulur. return anahtar sözcüğü ya doğrudan sonlandırıcı atom ile sonlandırılır:

return;

Ya da return anahtar sözcüğünü bir ifade izler:

return x * y;

return anahtar sözcüğünün yanındaki ifadenin değeri geri dönüş değeri olarak çağırılan işlevin çağırıldığı yere iletilir.

slide16

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

return ifadesinin değişken içermesi bir zorunluluk değildir. Bir işlev bir değişmezle de geri dönebilir.

return 5;

int func()

{

int x = 10;

int y = 20;

return x * y;

}

Yukarıdaki örnekteki func işlevinde return anahtar sözcüğünün yanında yer alan x * y ifadesi ile oluşturulan return deyimi func işlevini sonlandırıyor ve func işlevinin bir geri dönüş değeri üretmesini sağlıyor.

slide17

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

Bazı programcılar return ifadesini bir ayraç içinde yazarlar. Bu ayraç return deyimine ek bir anlam katmaz. Yani

return x * y;

gibi bir deyim

return (x * y);

biçiminde de yazılabilir. Okunabilirlik açısından özellikle uzun return ifadelerinde ayraç kullanımı salık verilir.

return (a * b - c * d);

slide18

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

C dilinde işlevler yalnızca tek bir geri dönüş değeri üretebilirler. Bu da işlevlerin kendilerini çağıran işlevlere ancak bir tane değeri geri gönderebilmeleri anlamına gelir.

main İşlevi

int main()

{

return 0;

}

Biçiminde tanımlanmış bir main işlevi da int türden bir değer döndürmelidir. main işlevinin ürettiği geri dönüş değeri, programın çalışması bittikten sonra işletim sistemine iletilir.

slide19

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

Geleneksel olarak, main işlevinin 0 değerine geri dönmesi programın sorunsuz bir şekilde sonlandırıldığı anlamına gelir. main işlevinin 0 dışında bir değere geri dönmesi ise, kodu okuyan tarafından programın başarısızlıkla sona erdirildiği biçiminde yorumlanır. Yani bir takım nedenlerle yapılmak istenenler yapılamamış bu nedenle main işlevi sonlandırılmıştır.

Derleyicilerin çoğu, main işlevinin geri dönüş değeri üretmemesi durumunu da aynı uyarı

iletisiyle işaretlerler:

“Warning: Function func should return a value

slide20

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

func();

Yukarıda func isimli işlev çağrılmıştır. Bir işlev çağırıldığı zaman programın akışı işlevin kodunun yürütülmesi için bellekte işlevin kodunun bulunduğu bölgeye atlar, işlevin kodunun çalıştırılması işlemi bittikten sonra da akış yine çağıran işlevin kalınan yerinden devam eder.

slide21

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

İşlevin geri dönüş değeri bir değişkene atanabileceği gibi doğrudan aritmetik işlemlerde de kullanılabilir. Örneğin:

sonuc = hesapla();

sonuc = hesapla1() + hesapla2() + x + 10;

gibi bir ifade geçerlidir. Çağrılmış olan hesapla1 ve hesapla2 işlevleri çalıştırılarak üretilen geri dönüş değerleri ile x değişkeni içindeki değer ve 10 değişmezi toplanır. İfadeden elde edilen değer sonuc isimli değişkene atanır.

slide22

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

İşlev çağrı ifadeleri nesne göstermez yani sol taraf değeri (L value) değildir. Yani C dilinde aşağıdaki gibi bir atama deyimki derleme zamanında hata oluşumuna neden olur.

hesapla() = 5; /* hata - nesne olmayan ifadeye atama yapılmış */

slide23

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

İşlev Parametre Değişkenlerinin Tanımlanması

İşlevler çağrıldıkları yerlerden alacakları bilgileri, işlev çağrı ifadeleri ile alırlar. Bir işlevin formal parametreleri ya da parametre değişkenleri işlevlerin kendilerini çağıran işlevlerden aldıkları girdileri tutan değişkenleridir. Bir işlevin parametre sayısı ve bu parametrelerin türleri gibi bilgiler, işlevlerin tanımlanması sırasında derleyicilere bildirilirler. İşlev çağrı ifadesi ile gönderilen argumanlar, işlevin ilgili parametre değişkenlerine kopyalanırlar.

slide24

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

int func(int x, int y)

{

/***/

}

int foo(double x, int y)

{

/***/

}

slide25

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

Bu biçimde dikkat edilmesi gereken önemli nokta, işlev parametre değişkenleri aynı

türden olsalar bile her defasında tür bilgisinin tekrar yazılması zorunluluğudur.

Örneğin :

int foo (double x, y) /* hata */

{

/***/

}

bildirimi hatalıdır

Doğru tanımlamanın aşağıdaki şekilde olması gerekir:

int foo (double x, double y)

{

/***/

}

slide26

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

Parametre Değişkenine Sahip Olmayan İşlevler

Her işlev parametre değişkenine sahip olmak zorunda değildir. Bazı işlevler istenen bir işi yapabilmek için dışarıdan bir bilgi almazlar. Parametre değişkenine sahip olmayan bir işlevin tanımında işlev parametre ayracınin içi boş bırakılır.

int foo(void)

{

/****/

}

int foo()

{

/***/

}

slide27

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

Argumanların Parametre Değişkenlerine Kopyalanması

Bir işlevin parametre değişkenleri, o işlevin çağırılma ifadesiyle kendisine gönderilen argumanları tutacak olan yerel değişkenlerdir. Örnek :

void func(int a)

{

/***/

}

int main()

{

int x = 10;

/***/

func (x);

return 0;

}

slide28

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

#include <stdio.h>

int add(int a, int b);

int main()

{

int x = 100, y = 200, z;

z = add(x, y);

/***/

return 0;

}

int add(int a, int b)

{

return a + b;

}

slide29

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE

slide30

ELEKTRİK-ELEKTRONİK MÜHENDİSLİĞİ BÖLÜMÜ, C PROGRAMLAMA DİLİ , YAZ STAJI, 6/8/2007

Arş.Gör.Cengiz TEPE