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

Slides:



Advertisements
Benzer bir sunumlar
Fonksiyonlar - Functions
Advertisements

Fonksiyonlar.
Göstericiler (Pointers)
C PROGRAMLAMA DİLİNE GİRİŞ
Bölüm 7 Fonksiyonlar GÖSTERGELER Gösterge Tanımı
Bölüm 2 C Dilinin Temelleri
C Programlama Diline Giriş
Bölüm 4 İşlevlerve Modüler Programlama. 1 / 8 İşlev Tanımı /* İşlev açıklama satırı */ ( ) { }
Değişken Bildirimleri
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
Bölüm 10 Yapılar ve Birleşimler
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
Erişim Denetimi, Fonksiyon
Fonksiyonlar.
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
C ile Programlamaya Giriş
Paralel Programlamaya Giriş
FONKSİYONLAR.
Bilgisayar Programlama
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
Diziler (Arrays).
Temel Giriş/Çıkış Fonksiyonları
C PROGRAMLAMA FONKSİYONLAR Hazır fonksiyonlar (math, rand) Kullanıcı Tanımlı Fonksiyonlar Değer ile Çağırma.
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
STRING‘LER Karakter Kütüphanesi Fonksiyonları
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Bugünkü konular Programlama dilleri ve Syntax Generic C Program yapısı
Bu günkü konular Basit I/O Expressions (ifadeler)
Bu Günkü Konular If yapısı ve karşılaştırma operatörleri
Bugünkü Konular Döngüler ve Akış Diyagramları C de Döngü Tanımlama
Algoritmalar ve Programlama I Ders 10: ALTPROGRAM KAVRAMI ve FONKSİYON
Bölüm 3 Atama ve Girdi/Çıktı Komutları Bölüm 3 Atama ve Girdi/Çıktı Komutları Atama Komutu Operatörler İsim Sabitleri Veri Tipi Dönüşümü Çıktı Fonksiyonu.
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.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Fonksiyonlar.
1 Değişken alanları Geçici değişkenler Birleşik ifadeler(bloklar) ve değişkenler Değişken Depolama Süresi ve Alanı –Local ve global değişkenler –Static.
Programlama Dillerinin Prensipleri
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.
Örnek Sorular Bilgisayar Programlama BIL 107. Soru 1: Ekran çıktısında 66 yazması için boşlukları doldurunuz ______ i = 'A'; printf(____, i__); CEVAP:
C dili kullanıcıya kendi ihtiyacı olan bir fonksiyonu yazma imkanı vermiştir. Bir sayının faktöriyelini almaya ihtiyaç duyduğumuzu ve aynı zamanda asal.
PROGRAMLAMAYA GİRİŞ.
Bölüm 3 Atama ve Girdi/Çıktı Komutları
Fonksiyonlar ve Diziler
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
C Programlama Dili Bilgisayar Mühendisliği.
C’de Fonsiyonlar Aslı Ergün.
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar
BÖLÜM 5 POINTER’LER (İŞARETÇİLER)
C Programlama Diline Giriş
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
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 9 Dizgiler Dizgi Tanımı Dizgi Girdi İşlemleri
Bölüm 2 C Dilinin Temelleri
Bölüm 8 Diziler Dizi Tanımı Dizi Elemanlarına Değer Atama
Bölüm 6: Kullanıcı Tanımlı Fonksiyonlar I
Bölüm 3 Atama ve Girdi/Çıktı Komutları
NİŞANTAŞI ÜNİVERSİTESİ
Karakter dizi fonksiyonları
Bölüm 2 C Dilinin Temelleri
Aritmetik Operatörler
Bir Döngünün Bölümleri (hatırlatıcı)
C ile Programlamaya Giriş
NİŞANTAŞI ÜNİVERSİTESİ
Diziler(Arrays).
Sunum transkripti:

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 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 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 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 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 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 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 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 Ö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 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 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 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 = int n 573 olarak geçiliyor, ve fonksiyon çağırılıyor. int n olarak geçiliyor, ve fonksiyon çağırılıyor.

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 = x^2 = x^6 = x = x^2 = x^6 = 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 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 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 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; } /* n toplamı*/ int topla(int n){ return n * (n + 1) / 2; } int main(void){ printf("%d", topla(5)); return 0; }

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 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 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 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 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 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 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 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 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 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 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, …