BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.

Slides:



Advertisements
Benzer bir sunumlar
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Fonksiyonlar
Advertisements

Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Algoritma.  Algoritma, belirli bir görevi yerine getiren sonlu sayıdaki işlemler dizisidir.  Başka bir deyişle; bir sorunu çözebilmek için gerekli olan.
BİLGİSAYAR PROGRAMLAMA Ders 2: Algoritma ve Akış Şemaları
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BM-308 Paralel Programlamaya Giriş Bahar 2016 (2. Sunu) (Yrd. Doç. Dr. Deniz Dal)
BÖLÜM 4 PROGRAMLAMA DİLLERİ. PROGRAMLAMA DİLLERİNDE KULLANILAN VERİ TİPLERİ Bilgisayarda işlenen veriler iki türdür: Sayısal Alfasayısal.
BİLGİSAYAR PROGRAMLAMA Ders 11: İşaretçi (Pointer) Kullanımı Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
TC Windows Editörü DevC++. KURULUM PROGRAMIN KURULACAĞI YER BURADA BELİRLENİYOR.
OLASILIK TEOREMLERİ Permütasyon
9. HAFTA 25 Nisan2016. Fonksiyon M-Dosyaları Fonksiyon dosyaları ilk satırda “function” kelimesi bulunan “.m” uzantısı bulunan dosyalardır. MATLAB içinde.
PHP Nedir? ● Bir web sayfası oluşturabilmeniz için: ● HTML kullanmalısınız. ● Sayfadaki etkileşimi artırmak için ● JavaScript/VBScript ● Görselliği bütün.
Örnek Sorular Bilgisayar Programlama BIL 107. Soru 1: Ekran çıktısında 66 yazması için boşlukları doldurunuz ______ i = 'A'; printf(____, i__); CEVAP:
Bölüm 5 Döngü Komutları while Komutu while Komutu Diğer Operatörler (Bileşik atama, artırma ve azaltma operatörleri ) Diğer Operatörler (Bileşik atama,
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
YÖNLENDİRME. Yönlendirme ● Statik ● Dinamik ● Kaynakta yönlendirme ● Hop by hop yönlendirme.
Bölüm 2 C Dilinin Temelleri
BİLGİSAYAR PROGRAMLAMA DERSİ
Bilgisayar Programlama BIL 107
FONKSİYONLAR.
Algoritma ve Programlamaya Giriş
Veri Tabanı Yönetimi Dersi 7. Laboratuvarı
BM-103 Programlamaya Giriş Güz 2016 (8. Sunu)
EETE233 Mikrodenetleyiciler ArduIno ile Programlama
METOTLAR.
TAM SAYILAR.
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar
Yapay Sinir Ağı Modeli (öğretmenli öğrenme) Çok Katmanlı Algılayıcı
MODEL YETERSİZLİKLERİNİ DÜZELTMEK İÇİN DÖNÜŞÜMLER VE AĞIRLIKLANDIRMA
C Programlama Yrd.Doç.Dr. Ziynet PAMUK BMM211-H05
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar
BİLGİSAYAR PROGRAMLAMA Ders 11: İşaretçi (Pointer) Kullanımı
Algoritma ve Programlamaya Giriş
MAT – 101 Temel Matematik Mustafa Sezer PEHLİVAN *
Algoritma ve Programlamaya Giriş
BİLGİSAYAR PROGRAMLAMA Ders 4: Koşula Göre İşlem Yapma
Bölüm 3 Atama ve Girdi/Çıktı Komutları
Pascal’da Kullanılan Standart Prosedür ve Fonksiyonlardan Bazıları
Bilgisayar Mühendisliğine Giriş
3.hafta METODLAR.
Bilgisayar Programlamasına ve Veri Analizine Giriş
Bölüm 7 İfadeler ve atamalar.
BİLGİSAYAR programlama II
BİLGİSAYAR programlama II
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Evren-Örneklem, Örnekleme Yöntemleri 2
Bilgisayar Bilimi Koşullu Durumlar.
BİL 112 Programlamaya Giriş
?: KARŞILAŞTIRMA OPERATÖRÜ
NİŞANTAŞI ÜNİVERSİTESİ
Fonksiyonlar ve Alt Programlar
6. DÖNGÜ (TEKRARLAMA) DEYİMLERİ
Bilgisayar Bilimi Fonksiyon Yazma.
Değerler ve Değişkenler
WHILE DÖNGÜSÜ while (şart) { ifade 1; ifade 2; }
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
BLM-111 PROGRAMLAMA DİLLERİ I Ders-10 Diziler
Pascal’da Kullanılan Standart Prosedür ve Fonksiyonlardan Bazıları
NİŞANTAŞI ÜNİVERSİTESİ
MTM216 GÖRSEL PROGRAMLAMA
BLP 4210 PLATFORM BAĞIMSIZ PROGRAMLAMA
Bilimsel Araştırma Yöntemleri
NİŞANTAŞI ÜNİVERSİTESİ
Sunum transkripti:

BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

Faktöriyel Hesabı Akış Çizelgesi Başla sayi fakt = 1 i = 1 i <= sayi i++ fakt = fakt * i fakt Bitir i <= sayi Başla sayi fakt = 1 i = 1 fakt = fakt * i i = i + 1 fakt Bitir E H

Permütasyon & Kombinasyon Eleman sayısı n olan bir kümenin içinden r kadar eleman seçerek yapılabilecek permütasyonların hesabı: Kombinasyonun permütasyondan farkı, sıralamanın önemli olmamasıdır. Kombinasyonu P(n,r) permütasyonların toplamını seçilen elemanların kendi aralarındaki sıralanma sayılarına bölerek bulabiliriz:

Permütasyon Hesabı Akış Çizelgesi Başla n, r f1 = 1 f2 = 1 i = 1 i <= n i++ f1 = f1 * i f1/f2 Bitir i = 1 i <= n - r i++ f2 = f2 * i

Kombinasyon Hesabı Akış Çizelgesi Başla n, r f1 = 1, f2 = 1 f3 = 1 i = 1 i <= n i++ f1 = f1 * i f1/(f2*f3) Bitir i = 1 i <= n - r i++ f2 = f2 * i i = 1 i <= r i++ f3 = f3 * i

Fonksiyon Bir program içinde sıkça kullanılan bir işlem bloğunu fonksiyon olarak tanımlamak ve ihtiyaç duyulduğunda bu fonksiyonu çağırmak daha pratik ve okununca anlaşılması daha kolay olan bir yöntemdir. Fonksiyonlar bir ya da daha çok argüman (parametre) alarak, bu argümanlara göre işlemi yapar, ve geriye bir sonuç döndürürler. Permütasyon için 2 defa, kombinasyon için 3 defa faktöriyel hesabı döngüsünü tekrar etmek yerine faktöriyel fonksiyonu yaratılabilir.

Fonksiyon ile Permütasyon Hesabı Yandaki akış çizelgesindeki fonksiyon ile çözüm çok daha basit ve anlaşılır görünmektedir. Program kodunda aynı döngünün tekrar tekrar yazılması her ne kadar programın çalışma hızını etkilemese de, kodun gereksiz yere uzun olmasına ve kodu okuyan için daha karmaşık görünmesine neden olacaktır. Başla n, r f1/f2 Bitir f2 = fakt(n-r) f1 = fakt(n)

Permütasyon Programı #include long fakt(short sayi){ long f=1; for (int i=2; i<=sayi; i++) f = f * i; return f; } void main(){ short n, r; printf("n degerini giriniz : "); scanf("%d", &n); printf("r degerini giriniz : "); scanf("%d", &r); printf("permutasyon = %d", fakt(n) / fakt(n-r)); } Döndüreceği değerin veri tipi Alacağı değerin (parametrenin) veri tipi C dilinde for içinde değişken tanımı yapılamaz, C++ ve C# dillerinde yapılabilir.

Permütasyonu Hızlı Hesaplamak Permütasyon hesabı yaparken, faktöriyel fonksiyonunu 2 defa çağırmak yerine, faktöriyel için kurulan for döngüsünü 1 yerine (n-r)+1 değerinden başlatan yeni bir fonksiyon yazmak daha uygundur. Başla n, r per = 1 i = n-r+1 i <= n i++ per = per * i per Bitir

Ödev 1 fakt fonksiyonunu değiştirerek per fonksiyonu oluşturunuz. Bu iki fonksiyonu kullanarak kombinasyon hesabı yapan programı yazınız. Programda ikinci girilen sayının ilk sayıdan küçük olması kontrol edilsin hata varsa tekrar girilmesi sağlansın (r < n olmalı).

Parametre olarak aldığı sayının asal olup olmadığını bulan fonksiyon #include bool asal(int sayi){ for (int i=2; i<=sayi/2; i++) if (sayi%i == 0) return false; return true; } void main(){ int n; printf("sayiyi giriniz : "); scanf("%d", &n); if (asal(n)) printf("Sayi asaldir"); else printf("Sayi asal degildir"); } C dilinde bool veri tipi yoktur, C++ dilinde vardır. Kaynak kodunuzun dosya isminde uzantı ‘cpp’ ise C++’a göre derleme yapılır. Uzantı ‘c’ ise derlediğinizde bool veri tipi için ve true/false değerleri için hata verecektir. “true” için 1, “false” için 0, “bool” için de int kullanabilirsiniz. NOT: if(asal(n)) yerine if(asal(n) == true) yazılabilirdi. Eğer bu şekilde yazılırsa, asal fonksiyonu true değer döndürdüğünde (true == true) kontrolü yaparak fazladan bir karşılaştırma yapmış olurduk.

Prosedür (Yordam) Fonksiyonun değer döndürmeyen türüdür. Değer döndürmediği için prosedür isminden önce void yazılır ve prosedür içinde return ifadesi kullanılamaz. Genellikle matematiksel hesaplama işlemlerinde değil, programın mantıksal olarak bloklara ayrılmasında kullanılır. Tüm programlarda yer alan main() programın başlangıç prosedürüdür (Bir proje içinde iki yada daha fazla main isminde prosedür olamaz). – Slaytlarımızdaki birçok programda main öncesinde void yazmadık. Bu durum başka derleyicilerde sorun yaratabilir fakat Dev C++'ta hem c hem de cpp uzantılı dosyalarda sorunsuz derlenir. Hatta cpp uzantılı dosyalarda void yazılması sorun yaratır, int yazılması (bu durumda fonksiyon olacağı için return de kullanılması) yada hiçbir şey yazılmaması gerekir.

Toplama yapan Prosedür ve Fonksiyon void ToplamGoster(int a, int b) { printf("%d\n", a + b); } int Topla(int a, int b) { return a + b; } void main() { ToplamGoster(45, 67); printf("%d\n", Topla(45, 67)); } Değer döndüremediğimiz için sonucu burada ekrana göstermek zorundayız Toplam sonucunu döndürüyoruz, burada ekrana göstermeye gerek yok Topla fonksiyonundan gelen 112 değerini burada ekrana gösteriyoruz

Dört İşlem Prosedürü void DortIslem(int a, char c, int b) { if (c == '+') printf("%d + %d = %d", a, b, a + b); if (c == '-') printf("%d - %d = %d", a, b, a - b); if (c == '*') printf("%d * %d = %d", a, b, a * b); if (c == '/') printf("%d / %d = %.2f", a, b, (float)a / (float)b); } main() { DortIslem(4, '/', 3); } NOT: Bazı dillerde fonksiyon tanımı «function», prosedür tanımı ise «procedure» yada «subroutine» gibi isimler ile yapılır. C ve türevi olan C++, Java, C# gibi dillerde böyle bir tanım olmadığı için genellikle prosedüre de fonksiyon denir. Bu dönüşümler ve "%.2f" sayesinde 4 / 3 işleminin sonucu 1 değil 1.33 olarak görünür.

Parametresiz Prosedürler Prosedürler parametre verilmeden de çağrılabilir. Önceki örnekte DortIslem prosedürü a, b ve c parametreleri ile çağrılmıştır. Bu değerler global değişken olarak tanımlanabilir, ve DortIslem() şeklinde parametresiz çağrım yapılabilirdi. Programın başlangıç noktası olan main prosedürü hem parametre ile hem de parametresiz kullanılabilir: void main(int argc, const char* argv[]) void main()

Parametre alan main ile permütasyon #include long fakt(short sayi){ long int f=1; for (int i=2; i<=sayi; i++) f = f * i; return f; } void main(int argc, const char* argv[]){ short n = atoi(argv[1]); short r = atoi(argv[2]); printf("permutasyon = %d\n", fakt(n) / fakt(n-r)); } stdlib.h kütüphanesi atoi fonksiyonu için eklenmiştir. Bu fonksiyon parametre olarak aldığı string türdeki değeri integer türüne dönüştürür. argv[] verilen parametreleri string türünde elde etmemizi sağlayan bir dizi, argc ise bu dizideki eleman sayısını veren tamsayı değişkendir. Program derlendikten sonra elde edilen dosyanın adı “permutasyon.exe” ise; komut isteminden permutasyon 10 5 şeklinde çalıştırıldığında; argc = 3, argv[0] = "permutasyon", argv[1] = "10" ve argv[2] = "5" olacaktır.

Parametre alan main ile dört işlem #include main(int argc, const char* argv[]) { float sayi1 = atof(argv[1]); float sayi2 = atof(argv[3]); if (argv[2][0] == '+') printf("%f", sayi1 + sayi2); if (argv[2][0] == '-') printf("%f", sayi1 - sayi2); if (argv[2][0] == '*') printf("%f", sayi1 * sayi2); if (argv[2][0] == '/') printf("%f", sayi1 / sayi2); } Program derlendikten sonra elde edilen dosyanın adı “hesap.exe” ise; komut isteminden hesap 2.5 * 5.3 şeklinde çalıştırıldığında; argc = 4, argv[0] = "hesap", argv[1] = "2.5", argv[2] = "*" ve argv[3]= "5.3" olacaktır.

Lokal ve Global Değişkenler Fonksiyon içinde tanımlanan bir değişken lokal değişkendir ve sadece o fonksiyon içinde kullanılabilir. Fonksiyon dışında tanımlanan değişken ise global değişkendir ve tüm fonksiyonlarda kullanılabilir. Eğer değişken fonksiyonun içindeki bir kod bloğunda (örneğin for döngüsünün içinde) tanımlanmış ise, o değişken sadece o kod bloğunda ve varsa alt kod bloklarında geçerlidir.

Global ve Lokal olarak aynı değişken ismini kullanma durumu int i = 0; main() { i = 1; int i; i = 2; printf("%d, %d", i, ::i); } Eğer aynı isimde bir değişken hem sınıf içinde hem de fonksiyon içinde yar alıyorsa fonksiyonun içinde lokal olan değişken kullanılır (C++ dilinde global olana erişmek için değişken adından önce :: kullanılabilir). Global olan ‘i’ değişkenine değer atanır. Lokal olan ‘i’ değişkenine değer atanır. Ekranda 2, 1 yazar NOT: Program kodu c uzantılı dosya olarak kaydedilirse derlenemez.

#include float fonk(float a, int b){ while (b > a) { a *= 2; printf("%.2f\n", b/a); } return a; } main(){ float a=3, b=3, c=fonk(a/b, a*b); printf("%.2f,%.2f,%.2f", a, b, c); } Örnek: Aşağıdaki programın üreteceği ekran çıktısını yazınız ,3.00,16.00 for (; b > a; a *= 2) {

Fonksiyonun Tanımı C dilinde ya diğer tüm fonksiyonlar main() fonksiyonundan önce yazılır, yada en azından tanım satırları yazılır. Örn: int fakt(int); // fonksiyon tanımı void main(){ printf("%d", fakt(5)); } int fakt(int sayi){ … faktöriyel hesabı … }

Ödevler 2.Bir sayının karekökünü bulan ve değer olarak döndüren fonksiyonu yazınız. 3.OBEB ve OKEK işlemlerini fonksiyonları kullanarak yapınız. 4.Parametre olarak aldığı sayının yazı ile yazılışını döndüren fonksiyonu yazınız. Örn: 694 değerini parametre olarak alacak “AltıYüzDoksanDört” string’ini döndürecek.

Ödevler 5.Parametre olarak aldığı 2 sayının “dost sayılar” olup olmadığını bulan fonksiyonu yazınız. A ve B tam sayılardır: – A’nın tam bölenlerinin toplamı B’ye eşitse – B’nin tam bölenlerinin toplamı A’ya eşitse – Bu iki sayı dost sayıdır – Örn: 220 ve 284 sayıları dost sayıdır

Ödevler 6.M.Ö yılları arasında yapıldığı tahmin edilen dünyanın 7 harikasından biri olan Keops Piramdi’nin en az 2.3 milyon taş bloktan oluştuğu tahmin edilmektedir. A.Piramidin tabanında kare biçiminde yerleştirilmiş N*N adet, ikinci katında (N-1)*(N-1), üçüncü katında (N-2)*(N-2),..., N. katında (son kat) 1 taş blok olduğu kabul edilirse, piramitin kaç taş bloktan oluştuğunu ve kaç katlı olduğunu bulan programı yazınız (2.3 milyondan büyük olacak şekilde en az kaç kat olmalıdır). B.Piramidin tam 24 yılda bittiğini ve işçilerin günde 10 saat çalıştıklarını düşünelim. İşçilerin bir saatte ortalama kaç blok yerleştirdiklerini bulan SaatBasinaBlok fonksiyonu yazınız (1 yıl = 365 gün + 6 saat kabul edilecek).