1 / 17

BPR152 ALGORİTMA VE PROGRAMLAMA - II

BPR152 ALGORİTMA VE PROGRAMLAMA - II. Öğr . Gör. Bayram AKGÜL bayramakgul@bartin.edu.tr http ://myo.bartin.edu.tr/akgul. Konular. Recursive fonksiyonlar Kendini çağıran fonksiyon Temsilci fonksiyonlar Paralelleştirme işlemleri Threading. Kendini Çağıran Fonksiyonlar.

makaio
Download Presentation

BPR152 ALGORİTMA VE PROGRAMLAMA - II

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BPR152 ALGORİTMA VE PROGRAMLAMA - II Öğr. Gör. Bayram AKGÜL bayramakgul@bartin.edu.tr http://myo.bartin.edu.tr/akgul

  2. Konular • Recursive fonksiyonlar • Kendini çağıran fonksiyon • Temsilci fonksiyonlar • Paralelleştirme işlemleri • Threading

  3. Kendini Çağıran Fonksiyonlar • Recursive Fonksiyon da denir. • Bazı durumlarda bir fonksiyon kendini çağırabilir. C bazlı diller böyle bir duruma izin vermektedir. • Örnek: • Faktöriyel hesaplama • n! = n * (n-1)! • Fibonacci serisi • Fn= Fn-1 + Fn-2

  4. Recursive Fonksiyonların Bileşenleri • Recursive fonksiyonların üç bileşeni vardır. • Temel Durum • Genel Durum • Yakınlaşma Recursive Fonksiyon Bileşenleri Temel Durum: Basit ve Recursive olmayan durum Genel Durum: Recursive tanımlama Yakınlaşma: Temel duruma yaklaşma

  5. Örnek Recursive: Faktöriyel Hesabı • Tanım: n! = n * (n-1) * (n-2) * …. * 1 • Örnek: 6! = 6 * 5 *4 *3 * 2 * 1 • Temel Durum: 0! = 1 • Genel Durum: n! = n * (n-1)! • Yakınlaşma: Her adımda n bir azaltılıyor. staticlongFaktoriyel(long n) { if (n ==0) return1; return n *Faktoriyel(n -1); } Temel Kısım Genel Kısım Yaklaşma

  6. FibonacciSerisi • sayıları: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, … vb. şeklinde devam eder. • Her sayı kendisinden önce gelen iki sayının toplamıdır. • Bu durumda genel olarak n'inciFibonacci sayısı F(n) şeklinde ifade edilir. • Bu sayıların yeterince büyük art arda gelen iki elemanını birbirleriyle oranlandığında altın oran ortaya çıkar. • Örnek: F(21)/F(20)

  7. Örnek Recursive: Fibonacci Serisi • Tanım: Fn = Fn-1 + Fn-2 • Dizinin ilk sayı değeri 0, ikincisi 1 ve her ardışık elemanı da önceki iki elemanın değerinin toplamı alınarak bulunur. • Örnek: 0,1,1,2,3,5,8, 13,21,34,55,89,… • Temel Durum: F(0) = 0; ve F(1) = 1; • Genel Durum: F(n) = F(n-1) + F(n-2); • Yaklaşma: Her adımda n sayısı 1 ve 2 eksiltiliyor. staticlongFibonacci(long n) { if (n ==0|| n ==1) return n; return Fibonacci(n -1) + Fibonacci(n -2); } Temel Kısım Genel Kısım Yaklaşma Yaklaşma

  8. Örnek Recursive: Üslü Sayı Hesabı • Tanım: an = a * a * … * a • Örnek: 35 = 3 * 3 *3 *3 * 3 • Temel Durum: n = 0 ise sonuç 1 (a0 = 1) • Genel Durum: an = a * (an-1) • Yakınlaşma: Her adımda n bir azaltılıyor. n defa staticlongUsHesapla(longa, long n) { if (n ==0 ) return1; return a *UsHesapla(a, n -1); } Temel Kısım Genel Kısım Yaklaşma

  9. Temsilci Fonksiyonlar • Temsilciler metot yerine metotları temsil eden fonksiyonlardır. • delegate anahtar sözcüğü ile ifade edilirler. • Bir temsilci aşağıdaki şekilde yazılır: delegategeriDönüşTipitemsilciAdı([parametreler]); Örnek: delegateintFonksiyon(inta, string b);

  10. Temsilci fonksiyonların Tanımlanması • Temsilciler genellikle programlarımıza belirli bir ifadeyle birden fazla metodu çağırabilme yeteneği vermek için kullanılır. • Temsilci tanımlama: delegatedoubleİşlem(double a, double b); • Temsilci kullanma: İşlem temsilci = newİşlem(Fonksiyon); - Veya; İşlem temsilci = Fonksiyon;

  11. Temsilci fonksiyon:Tanımlama & Kullanım usingSystem; classMetotlar { // temsilci fonksiyonu tanımlanıyor. delegatedoubleİşlem(double a, double b); // iki farklı metot tanımlanıyor. staticdouble Topla(double a, double b) { return a + b; } staticdouble Çarp(double a, double b) { return a * b; } staticvoid Main() { İşlem temsilci; double s1, s2; // temsilci Topla fonksiyonunun yerine çalışacak. temsilci = Topla; s1 = temsilci(3, 5); // temsilci Çarp fonksiyonunun yerine çalışacak. temsilci = Çarp; s2 = temsilci(3, 5); Console.WriteLine("s1 = {0}, s2={1}", s1, s2); } } s1 = 8, s2=15

  12. Temsilci fonksiyonlar ile ilgili notlar: • Temsilci fonksiyonlar sadece geri dönüş tipleri ve parametreleri (sayı ve tip) kendisiyle uyumlu olan metotları temsil edebilirler. • Temsilciler bir defada birden fazla metodu temsil edebilirler. Temsilciye metot eklemek veya çıkarmak için + ve – kullanılır.

  13. Temsilciye birden fazla metot ekleme & çıkarma usingSystem; classTemsilciler { delegatevoidMesajVer(string isim); staticvoidSelamVer(string isim) { Console.WriteLine("Selam " + isim); } staticvoidHatırSor(string isim) { Console.WriteLine(isim + " nasılsın?"); } staticvoid Main() { MesajVer m = SelamVer; m("Ali"); m = HatırSor; m("Ali"); Console.WriteLine("*********************"); // iki metodu da ekle m = SelamVer; m += HatırSor; m("Ahmet"); Console.WriteLine("*********************"); // SelamVer metodunu çıkar m -= SelamVer; m("Ayşe"); } } Selam Ali Ali nasılsın? ********************* Selam Ahmet Ahmet nasılsın? ********************* Ayşe nasılsın?

  14. Paralelleştirme işlemleri • Threading olarak ifade edilir. • Bir programdaki bir birinden bağımsız kısımların aynı anda ve ayrı ayrı çalıştırılması anlamına gelmektedir. • Programdaki herhangi bir iş parçasına Thread denilmektedir. • Her Thread kendi başına çalışmaktadır. • Threadları kullanmak için programın başına >usingSystem.Threading; satırı eklenmelidir.

  15. Thread Tanımlama • Önce Thread ile beraber hangi metodun çalışacağı hazırlanır. • Daha sonra metodun çalışmasını sağlayacak bir ThreadStart parametresi oluşturulur. • ThreadStart parametresi aşağıdaki gibi oluşturulur: ThreadStartts = newThreadStart(HazırlananMetod); • En sonunda yeni bir Thread tanımlanarak oluşturulan ThreadStartparametresi ile aşağıdaki gibi çalıştırılır: Threadt = newThread(ts); t.Start(); // Hazırlanan metod çalışmaya başlayacaktır. • Bu şekilde birçok Thread tanımlanarak aynı anda çalıştırılabilir.

  16. Threadmetodları: usingSystem; usingSystem.Threading; classProgram { staticvoidSelamVer() { while (true) { Console.WriteLine("Selam!"); Thread.Sleep(500); // 500 ms = 0.5 sn uyu } } staticvoidHatırSor() { while (true) { Console.WriteLine("Nasılsın?"); Thread.Sleep(700); // 700 ms = 0.7 sn uyu } } staticvoid Main() { ThreadStart ts1 = newThreadStart(SelamVer); Thread t1 = newThread(ts1); t1.Start(); // SelamVer metodu çalışacak ThreadStart ts2 = newThreadStart(HatırSor); Thread t2 = newThread(ts2); t2.Start(); // HatırSormetodu çalışacak } } Thread.Start() Thread’in çalışmaya başlamasını sağlar. Thread.Sleep(milissaniye) Aktif Thread’i belirtilen süre kadar uyutur. Thread.Suspend() Aktif thread’i durdurur. Thread.Resume() Suspend ile durdurulmuş Thread’i devam ettirir. Thread.Abort() Çlışmakta olan bir Thread’i iptal eder. (durdurur.) Thread.Join() Başka bir Thread’in işleminin bitmesini bekler.

  17. Dinlediğiniz için teşekkürler… Öğr. Gör. Bayram AKGÜL

More Related