PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar

Slides:



Advertisements
Benzer bir sunumlar
Fonksiyonlar.
Advertisements

Bölüm 2 C Dilinin Temelleri
OOP UYGULAMA 5.
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
Bölüm 10 Yapılar ve Birleşimler
Fonksiyonlar ve Alt Programlar
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 6: Sınıflar
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 3: Döngüler
Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi Hazırlayan : Nuri AVCI
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
NESNEYE YÖNELİK PROGRAMLAMA
Nesneye Dayalı Programlama
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.
METODLAR.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar
Görsel C# ile Windows Programlama
BPR152 ALGORİTMA VE PROGRAMLAMA - II
BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL
ALGORİTMALAR VE PROGRAMLAMAYA GİRİŞ
FONKSİYONLAR.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 2: Koşula Göre İşlem Yapma
Bilgisayar Programlama
JAVA’DA DÖNGÜLER.
Kalıtım , Sınıf Asli Ergün.
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
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
Bil 102 Bölüm 6 Diziler.
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
JAVA PROGRAMLAMA ORNEKLER
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Diziler
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 4: Fonksiyonlar
Algoritmalar ve Programlama I Ders 10: ALTPROGRAM KAVRAMI ve FONKSİYON
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.
Fonksiyonlar.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
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.
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
BİLGİSAYAR PROGRAMLAMA Ders 4: Koşula Göre İşlem Yapma Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
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.
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği.
Ö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 Giriş-I Bölüm-1. Algoritma Algoritma günlük yaşamımızda yaptığımız işler sırasında sıklıkla kullandığımız bir yöntemdir. Algoritma, bir.
Bilgisayar Programlama BIL 107
Fonksiyonlar ve Diziler
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
Bilgisayar Programlamasına ve Veri Analizine Giriş - IV
BİLGİSAYAR PROGRAMLAMA Ders 6: Diziler
BİLGİSAYAR PROGRAMLAMA Ders 8: Fonksiyonlar
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
Bölüm 2 C Dilinin Temelleri
Excel’de VBA Programlama (Visual Basic Application)
YAPISAL PROGRAMLAMA Hafta-6
ARDUİNO Arduino Eğitimleri Bölüm 3 Programlama Dili Temelleri
Veri Tipleri 12/4/2018.
NİŞANTAŞI ÜNİVERSİTESİ
Bölüm 2 C Dilinin Temelleri
C ile Programlamaya Giriş
MTM216 GÖRSEL PROGRAMLAMA
Sunum transkripti:

PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar Yrd. Doç. Dr. Altan MESUT Trakya Üniversitesi Bilgisayar Mühendisliği

Faktöriyel Hesabı Akış Çizelgesi Başla Başla Daha önceki kullandığımızdan biraz farklı olan bu şekildeki döngü gösterimi de mümkündür sayi sayi fakt = 1 fakt = 1 i = 2 i = 2 i <= sayi i++ i <= sayi fakt = fakt * i fakt = fakt * i i = i + 1 E H fakt fakt Bitir Bitir

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 i = 2 i <= n - r i++ f2 = f2 * i f1 = 1 f2 = 1 i = 2 i <= n i++ f1/f2 f1 = f1 * i Bitir

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

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ı Başla 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. n, r f1 = fakt(n) f2 = fakt(n-r) f1/f2 Bitir

Permütasyon Programı Döndüreceği değerin veri tipi Alacağı değerin (parametrenin) veri tipi static long fakt(int sayi) { long f = 1; for (int i = 2; i <= sayi; i++) f = f * i; return f; } static void Main() { byte n, r; Console.Write("n değerini giriniz : "); n = Convert.ToByte(Console.ReadLine()); Console.Write("r değerini giriniz : "); r = Convert.ToByte(Console.ReadLine()); Console.WriteLine("permütasyon = " + fakt(n) / fakt(n - r)); Main fonksiyonu içinde tanımlanan n ve r değişkenleri byte olarak tanımlanmış olsa da n - r hesabı int veri tipinde sonuç üretir (C dilinde böyle bir durum olmaz). Bu nedenle fonksiyonun parametresi int olarak belirtilmiştir. Fonksiyonun parametresi byte olsaydı, buradaki n - r için tip dönüşümü yapılmalıydı: fakt((byte)(n - r)). Aksi halde cannot convert from 'int' to 'byte' hatası verir.

Permütasyonu Hızlı Hesaplamak Başla 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. 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 static bool asal(int sayi) { if (sayi % 2 == 0) return false; for (int i = 3; i <= Math.Sqrt(sayi); i+=2) if (sayi % i == 0) return false; return true; } static void Main() { Console.Write("Sayıyı giriniz : "); int n = Int32.Parse(Console.ReadLine()); if (asal(n)) Console.Write("Sayı asaldır"); else Console.Write("Sayı asal değildir"); Döngünden önceki if çift sayı olup olmadığına bakar. Döngüde sayının kareköküne kadar olan tek sayılara tam bölünüp bölünmediğine bakılır 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 static void Main() programın başlangıç prosedürüdür (Bir proje içinde birden fazla bulunamaz).

Toplama yapan Prosedür ve Fonksiyon static void ToplamGoster(int a, int b) { Console.WriteLine(a + b); } static int Topla(int a, int b) return a + b; static void Main() ToplamGoster(45, 67); Console.WriteLine(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ü static void DortIslem(int a, char c, int b) { if (c == '+') Console.WriteLine("{0} + {1} = {2}", a, b, a + b); if (c == '-') Console.WriteLine("{0} - {1} = {2}", a, b, a - b); if (c == '*') Console.WriteLine("{0} * {1} = {2}", a, b, a * b); if (c == '/') Console.WriteLine("{0} / {1} = {2}", a, b, a / b); } static void 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.

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: static void Main(string[] args) static void Main()

Parametre alan Main ile dört işlem args string dizisi komut istemi (siyah ekran) üzerinden verilen argümanları alır static void Main(string[] args) { double sayi1 = Convert.ToDouble(args[0]); double sayi2 = Convert.ToDouble(args[2]); if (args[1] == "+") Console.WriteLine(sayi1 + sayi2); if (args[1] == "-") Console.WriteLine(sayi1 - sayi2); if (args[1] == "*") Console.WriteLine(sayi1 * sayi2); if (args[1] == "/") Console.WriteLine(sayi1 / sayi2); } Program derlendikten sonra elde edilen dosyanın adı “hesapla.exe” ise; komut isteminden hesapla 2,5 * 5,3 şeklinde çalıştırıldığında; args[0] = "2,5", args[1] = "*" ve args[2] = "5,3" olacak ve işlemin sonucu ekranda gösterilecektir.

Parametre alan Main ile permütasyon C#’ta fakt fonksiyonu Main fonksiyonundan sonra da yazılabilirdi. Fakat C dilinde bunu yapabilmek için fakt fonksiyonunun tanımını main fonksiyonundan önce vermelisiniz. static long fakt(int sayi) { long f = 1; for (int i = 2; i <= sayi; i++) f = f * i; return f; } static void Main(string[] args) { byte n = Convert.ToByte(args[0]); byte r = Convert.ToByte(args[1]); Console.WriteLine(fakt(n) / fakt(n - r)); Program derlendikten sonra elde edilen dosyanın adı “permutasyon.exe” ise; komut isteminden permutasyon 10 5 şeklinde çalıştırıldığında; args[0] = "10" ve args[1] = "5" 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 (sınıf içinde) tanımlanan değişken ise global değişkendir ve o sınıfa ait 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 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). class A { int i = 0; void F() i = 1; int i; i = 2; } Bu kod üzerinde hem lokal hem de global olarak ‘i’ adında bir değişken tanımlandığı için F() prosedürü içinde lokal olan i değişkene değer atanabilir. Fonksiyondaki ilk satır hata verir. Çünkü lokal olan değişken ikinci satırda tanımlanmıştır. İkinci satırı silerseniz hata vermez (global olan değişkeni görür)

Örnek: Aşağıdaki programın üreteceği ekran çıktısını yazınız static float fonk(float a, float b) { while (b > a) { a = a*2; Console.WriteLine("{0:F2}", b/a); } return a; static void Main() { float a=3, b=3, c=fonk(a/b, a*b); Console.Write("{0:F2} {1:F2} {2:F2}", a, b, c); for ( ; b > a; a *= 2) { 9,00 4,50 2,25 1,13 4,50 2,25 1,13 0,56 3,00 3,00 16,00 Write içinde format belirteci olarak verdiğimiz F2, ondalık hanesini 2 basamağa yuvarlamak için kullanılır. Örn: 5/3 değeri F2 ile 1.67, F1 ile 1.7, F0 ile 2 olarak ekranda gösterilir.

Yapısal Programlama & Nesneye Yönelik Programlama (NYP) PASCAL ve C gibi yapısal programlama dilleri yaygınlaşmadan önce (60’lı yıllar) kullanılan BASIC gibi programlama dillerinde prosedür ve fonksiyon kullanılmadığı için, prosedür yerine blok yapılması gereken yerin başına bir etiket tanımlanıp o etikete GOTO komutu ile gidilerek program bloklara ayrılmaya çalışılırdı. BASIC programlama diline de 80’li yıllarda yapısal programlamaya özgü fonksiyon ve prosedür tanımlanabilmesi özelliği eklenmiştir (QBASIC). 90’lı yıllarda QBASIC daha da geliştirilerek görsel programlama amaçlı Visual Basic ortaya çıkmıştır. 2000’li yıllarda da Nesneye Yönelik Yaklaşımın da dahil edilmesi ile VB.NET ortaya çıkmıştır (NYP yaklaşımında var olan Sınıf tanımlamayı haftaya göreceğiz) .

Ödevler 2. Bir sayının karekökünü bulan ve değer olarak döndüren fonksiyonu yazınız. OBEB ve OKEK işlemlerini fonksiyonları kullanarak yapınız. 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.Ö. 2589-2566 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. 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). 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).