Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

1 Yapılandırılmamış programlama Prosedür/Fonksiyon gerekliliği Prosedural Programlama Fonksiyon Tanımlama/Prototip/Çağırma Örnek fonksiyonlar Fonksiyon.

Benzer bir sunumlar


... konulu sunumlar: "1 Yapılandırılmamış programlama Prosedür/Fonksiyon gerekliliği Prosedural Programlama Fonksiyon Tanımlama/Prototip/Çağırma Örnek fonksiyonlar Fonksiyon."— Sunum transkripti:

1 1 Yapılandırılmamış programlama Prosedür/Fonksiyon gerekliliği Prosedural Programlama Fonksiyon Tanımlama/Prototip/Çağırma Örnek fonksiyonlar Fonksiyon Parametreleri/Argumentler Konular

2 2 Yapılandırılmamış Programlama Programımız sadece bir fonksiyondan (main) oluşuyor. Bununla beraber kütüphanelerdeki fonksiyonları da çağırıyoruz. (printf, scanf, getchar, putchar) Bu tarz bir programlamanın (yapılandırılmamış programlama olarak adlandırılır) en büyük dezavantajı lüzumsuz olarak büyümesidir. –Özellikle, aynı kod blokları/ifadeleri programda farklı yerlerde kullanılacaksa blok/ifadeler kopyalanmalı. (kod tekrarı) main DATA

3 3 Yapılandırılmamış Programlama & Prosedür/Fonksiyon gerekliliği main(){ printf(“*\n”); printf(“**\n”); printf(“***\n”); printf(“++++\n”); printf(“*\n”); printf(“**\n”); printf(“***\n”); printf(“++++\n”); } * ** *** ++++ * ** *** ++++ Problem: Ekrana yandakini yazdırmak istiyoruz. Tekrarlanmış

4 4 Prosedüral Programlama Fikir: tekrarlanmış ifadeleri çıkar, bir yerde onları birleştir ve bir isim ver. –prosedür, alt yordam veya fonksiyon olarak isimlendirilir void ucgen3( ){ printf(“*\n”); printf(“**\n”); printf(“***\n”); } void kare4( ){ printf(“++++\n”); } int main( ){ ucgen3(); kare4(); ucgen3(); kare4(); } * ** *** ++++ * ** *** ++++ main( ){ printf(“*\n”); printf(“**\n”); printf(“***\n”); printf(“++++\n”); printf(“*\n”); printf(“**\n”); printf(“***\n”); printf(“++++\n”); }

5 5 Prosedür Başlatma Prosedür kullanılınca, bir prosedür çağrılırken –prosedür/fonksiyon çağrısı yapılır –Kontrol prosedürün başında ki ilk ifadeye geçer –Prosedür adımları çalıştıktan sonra kontrol prosedürün çağrıldığı yerden sonraki ifadeye döner.

6 6 Fonksiyon Nedir? fonksiyon belli bir işi yapmak için kullanılan bir dizi ifadenin isimlendirilmesidir. –printf ekrana mesaj yazdırır –scanf klavyeden bir girdi okur –getchar klavyeden bir tek karakter okur –putchar ekrana bir tek karakter yazar –ucgen3 * karakteri kullanarak ekrana üçgen çizer –kare4 + karakterini kullanarak ekrana kare çizer. –…

7 7 Her fonksiyonda bulunması gerekenler: fonksiyon başlığı, -prototip/belirteç Kod bloğu {….} –Fonksiyon gövdesini kapsar. geriDonusTipi fonksiyonAdi(parametreler) { değişken tanımlamalar; ifade1; ifade2; … return ifade; } fonksiyon başlığı fonksiyon gövdesi Dönmesini istediğimiz değer

8 8 Fonksiyon Prototipi Geri dönüş tipi sonra fonksiyon adı ve opsiyonel olarak parantez içinde parametrelerden oluşur. –Parametreler fonksiyon çağrılırken program tarafından fonksiyona gönderilen verilerdir. int Topla3Sayi(int a, int b, int c); Bir int dönder Adı 3 parametresi var

9 9 Örnek fonksiyon prototipleri (1)Hiç parametresi olmayan ve değer döndürmeyen fonksiyon. void Fnc1(void); (2) 1 int parametresi olan ve değer döndürmeyen fonksiyon. void Fnc2(int a); (3) Parametresi olmayan ve bir int döndüren fonksiyon int Fnc3(void); (4) 2 Parametresi olan ve bir int döndüren fonksiyon int Fnc4(int a, int b);

10 10 Parametresi olmayan ve değer döndürmeyen fonksiyon(1) void ucgen4(void){ printf("*\n"); printf("**\n"); printf("***\n"); printf("****\n"); } main(void){ ucgen4(); } * ** *** **** * ** *** **** * ** *** **** void: Bu fonksiyonun Dönüş değeri yok yok bu fonksiyon üç kere çağrılıyor

11 11 Parametresi olmayan ve değer döndürmeyen fonksiyon(2) void selamver(void){ printf(“Hey! Herkese selamlar!\n"); } /* end-selamver */ main(){ selamver(); /* fonksiyon çağırılıyor */ selamver(); /* bir daha çağırılıyor */ } /* end-main */ Hey! Herkese selamlar! void:selamverfonksiyonunun geri dönüş değeri yok

12 12 Bir parametresi olan ve değer döndürmeyen fonksiyon(1) void printn(int n){ printf("n = %d\n", n); } /* end-printn */ int main(void){ printn(573); printn(-1234); return 0; } /* end-main */ n = 573 n = -1234 int n 573 olarak geçiliyor, ve fonksiyon çağırılıyor. int n -1234 olarak geçiliyor, ve fonksiyon çağırılıyor.

13 13 Bir parametresi olan ve değer döndürmeyen fonksiyon(2) void kuvvet_al(double x){ double x2 = x * x; double x6 = x2 * x2 * x2; printf("x = %.6lf\n", x); printf("x^2 = %.6lf\n", x2); printf("x^6 = %.6lf\n", x6); } /* end-kuvvet_al */ int main(void){ kuvvet_al(1.5); printf("--------\n"); kuvvet_al(0.11); return 0; } /* end-main */ x = 1.500000 x^2 = 2.250000 x^6 = 11.390625 -------- x = 0.110000 x^2 = 0.012100 x^6 = 0.000002 double x 1.5 olarak geçiliyor, ve fonksiyon çağırılıyor. double x 0.11olarak geçiliyor, ve fonksiyon çağırılıyor.

14 14 Bir parametresi olan ve değer döndürmeyen fonksiyon(3) void yildiz_yazdir(int n){ int i; for(i = 0; i < n; i++) printf("*"); printf("\n"); } /* end- yildiz_yazdir */ int main(void){ yildiz_yazdir(1); yildiz_yazdir(2); yildiz_yazdir(3); yildiz_yazdir(4); return 0; } /* end-main */ * ** *** **** int n 1 olarak geçiliyor, ve fonksiyon çağırılıyor. int n 2 olarak geçiliyor, ve fonksiyon çağırılıyor.

15 15 Aynı işi yapan Kod: void yildiz_yazdir(int n){ int i; for(i = 0; i < n; i++) printf("*"); printf("\n"); } int main(void){ int i; for(i = 1; i <= 4; i++) yildiz_yazdir(i); return 0; } * ** *** **** int n i değerini alarak geçiliyor, ve fonksiyon çağırılıyor.

16 16 Bir parametresi olan ve değer döndüren fonksiyon /* x ^ 6 döndürür*/ double us_al6(double x){ double x2 = x * x; return x2 * x2 * x2; } int main(void){ double p6 = us_al6(1.5); printf("%.6lf", p6); return 0; } /* 1 +... + n toplamı*/ int topla(int n){ return n * (n + 1) / 2; } int main(void){ printf("%d", topla(5)); return 0; }

17 17 2 parametresi olan ve değer döndürmeyen fonksiyon void Yazdir(int n, char c){ int i; for(i = 0; i < n; i++) printf("%c", c); printf("\n"); } /* end-Yazdir */ int main(void){ Yazdir(5, '*'); Yazdir(10, '-'); Yazdir(15, '='); return 0; } /* end-main */ ***** ---------- ===============

18 18 Fonksiyon tanımlama yerleri (1) önişlemci direktivleri sabit tanimlamalar fonksiyon tanimlamalari... int main(){ değişken tanimlamalari; çalişacak ifadeler; dönüş değeri; } /* end-main */ #include #define BASE 25 int mutlak(int a) { return a < 0 ? -a : a; } /* end-mutlak */ int main(){ int n = -25; printf(“mutlak(%d) = %d\n", n, mutlak(n)); return 0; } /* end-mutlak */

19 19 Fonksiyon tanımlama yerleri (2) önişlemci direktivleri sabit tanimlamalar fonksiyon prototipleri int main(){ değişken tanimlamalari; çalişacak ifadeler; dönüş değeri; } /* end-main */ fonksiyon tanımlaması #include #define BASE 25 int mutlak(int); int main(){ int n = -25; printf(“mutlak(%d) = %d\n", n, mutlak(n)); return 0; } /* end-main */ int mutlak(int a) { return a < 0 ? -a : a; } /* end-mutlak */

20 20 Fonksiyon Parametreleri & Argumanlar Parametler fonksiyon tanımlanırken kullanılan değişkenlerdir. –Parametreler fonksiyon tanımlanırken kullanılacak takma isimlerdir. Argumanlar fonksiyon çağrılırken kullanılan ifadelerdir. /* a, b ve c parametrelerdir*/ int Topla(int a, int b, int c){ return a+b+c; } /* end-Topla */ void main(void){ int x = 2; int y; /* x, 3 ve x*2 argumanlardır */ y = Topla(x, 3, x*2); } /* end-main */ Fonksiyon çağrılırken kullanılan argumanlar aşağıdaki örnekler gibi olabilir. ―x ―3 ―x*2

21 21 Argüman kullanma kriterleri C de, tüm argümanlar değerleri ile kullanılır (passed-by-value) –Bu demek oluyor ki, fonksiyon çağrılırken tüm argümanlar hesaplanıyor ve değerleri karşılık gelen parametreye aktarılıyor. –Fonksiyon çalışması sırasında parametrenin değerinin değişmesi argümanın değerini etkilemez.

22 22 Değer olarak geçme (Pass-by-Value) örnek int F(int a, int b, int c){ a += b+c; /* fonksiyon içinde ‘a’ değerini değiştiriyoruz*/ return a; } /* end-F */ void main(void){ int x = 2; int y = 3; int z = 4; int t = F(x, y, z); printf(“x: %d, y: %d, z: %d, t: %d\n”, x, y, z, t); } /* end-main */ /* ekrana yazdırılacak x: 2, y: 3, z: 4, t: 9 */ /* x argümanı ‘a’ parametresi olarak fonksiyona geçiyor ve değeri değişmesine rağmen ‘x’ in değeri değişmiyor. Argümanların değerini değiştirmek mümkün mü? */

23 23 Argümanların değerini fonksiyonda değiştirmek void ayristir(float x, int tam_kisim, float kesir_kisim){ tam_kisim = (int)x; kesir_kisim = x – tam_kisim; } /* end-ayristir */ void main(){ int i = 0; float f = 0.0; ayristir(2.35, i, f); printf(“tam_kisim: %d, kesir_kisim: %.2f\n”, i, f); } /* end-main*/ /* Ekrana yazdırılacak: tam_kisim: 0, kesir_kisim: 0.00 */ Ondalıklı bir sayının tam ve virgülden sonraki kısmını yazdıran bir fonksiyon yazmak istiyoruz. –f = 2.35  tam_kisim: 2, kesir_kisim: 0.35 –Muhtemelen bu işi yapacak fonksiyon (?)

24 24 Argümanların değerini fonksiyonda değiştirmek Problem: Fonksiyon içerisinde argumanın değerini değiştirmek istiyoruz. –Hatırlayın: C’de tüm argümanlar değeri ile geçiliyordu. (passed-by-value) Bu problemi nasıl çözebiliriz? –Bunu çözmek için pointer (işaretçi) leri öğrenmemiz gerekiyor.

25 25 Tekrar kullanma & Modüler Programlama Çoğunlukla bazı fonksiyonları bir modülde beraber gruplamak isteriz. (unit veya kütüphane) –Bu fonksiyonları yazar ve test ederiz. –Gerektiğinde bu fonksiyonları diğer programlarda da kullanabiliriz. –Bu tarz programlama modüler programlama olarak isimlendirilir. –Açıkçası modüler programlama yazdığın bir kodu tekrar kullanmayı sağlıyor.

26 26 Modüler Programlama - Örnek Basit bir fonksiyonlar kütüphanesi hazırlıyoruz. –lib.h: sadece fonksiyon prototiplerini içeriyor. int Ortalama3Int(int a, int b, int c); int Ortalama3Double(double a, double b, double c); int Min3Int(int a, int b, int c); int Max3Int(int a, int b, int c); –lib.c: fonksiyon kodlamalarını içeriyor. –main.c: ana fonksiyon –main- kütüphanemizi test etmek için kullanıyoruz. Bilmelisiniz ki standar C kütüphaneleri bu şekilde kodlanıyor. –printf, scanf,getchar, putchar, … –stdio.h fonksiyon prototiplerini içeriyor, libc.a kodlamaları içeriyor.

27 27 Prosedüral/Modüler Programlamanın Avantajları Kod tekrarlamalarını önler Modülerlik –Kodumuzu küçük parçalara ayırıp daha kolay anlama ve modifiye edebiliriz. Doğruluk & Tekrar kullanma –Bir kere prosedürümüzü yazıp test ettikten sonra her çağrışımızda doğru sonuç verecektir. –Artık prosedürlerimizi istediğimiz kadar ve istediğimiz programlarda kullanabiliriz. printf, scanf, getchar, putchar, …


"1 Yapılandırılmamış programlama Prosedür/Fonksiyon gerekliliği Prosedural Programlama Fonksiyon Tanımlama/Prototip/Çağırma Örnek fonksiyonlar Fonksiyon." indir ppt

Benzer bir sunumlar


Google Reklamları