Özyineleme (Recursion)



Benzer belgeler
Diziler (Arrays) Çok Boyutlu Diziler

Göstericiler (Pointers)

Pointer Kavramı. Veri Yapıları

DİZİLER 5/4/2010. ENF-102 Jeoloji Giriş. Tek Boyutlu Diziler. Tek Boyutlu Diziler. Örnek. Örnek

Giriş. ENF102 Jeoloji

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

2. Dereceden Denklemin Köklerini Bulan Program

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

HSancak Nesne Tabanlı Programlama I Ders Notları

C PROGRAMLAMA D İ L İ

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA I

Diziler İndisli Değişkenler

ALGORİTMA VE PROGRAMLAMA I

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Temel Bilgisayar Programlama Final Sınavı Çalışma Notları

YAPILAR BİRLİKLER SAYMA SABİTLERİ/KÜMELERİ. 3. Hafta

ELN1001 BİLGİSAYAR PROGRAMLAMA I

Programlama Dilleri 1. Ders 4: Diziler

Ders 4: Diziler (Arrays( Arrays) barisgokce.com

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

Dizgiler. C dilinde karakter m şeklinde tek tırnak içerisinde yazılan ifadelerdir. Bu karakterlerin her biri aslında bir tamsayı ile ifade edilir.

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Bir dizinin boyutları sabittir ve kullanılmadan önce belirlenmelidir. Dizi boyutunu belirlemek için başka bir değişkende kullanabilirsiniz.

FONKSİYONLAR. Gerçek hayattaki problemlerin çözümü için geliştirilen programlar çok büyük boyutlardadır.

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-11 Karakter Diziler. Yrd. Doç. Dr. Ümit ATİLA

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

Dr. Fatih AY Tel: fatihay@fatihay.net

Algoritma Geliştirme ve Veri Yapıları 9 Ağaç Veri Modeli ve Uygulaması. Mustafa Kemal Üniversitesi

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

Eln 1002 Bilgisayar Programlama II

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

ALGORİTMA VE PROGRAMLAMA II

Sınav tarihi : Süre : 60 dak. a) strstr b) strchr c) strcat d) strcpy e) strlen. a) b) d) e) 0

ALGORİTMA VE PROGRAMLAMA II

Bilgisayar Programlama MATLAB

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

Dizi nin Önemi. Telefon rehberindeki numaralar, haftanın günleri gibi v.b.

Algoritmalar ve Karmaşıklık

BİLGİSAYAR PROGRAMLAMA DERSİ

BLM111 Programlama Dilleri I. Hafta 10 Diziler. Yrd. Doç. Dr. Caner ÖZCAN

Bölüm 8, Yrd. Doç. Dr. A. Kadir YALDIR PAÜ Bilgisayar Mühendisliği Bölümü BÖLÜM 8: DİZİLER

Bölüm 6. Diziler (arrays) Temel kavramlar Tek boyutlu diziler Çok boyutlu diziler

Dizi elemanları yukarıdaki gibi tek tek tanımlanabileceği gibi matematiksel ifadelerdeki diziler gibi de tanımlanabilir.

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Hafta 13 Fonksiyonlar

Sunum İçeriği. Programlamaya Giriş

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-10 Diziler. Yrd. Doç. Dr. Ümit ATİLA

Programlama Dilleri 3

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Yrd. Doç. Dr. Caner ÖZCAN

Görsel Programlama DERS 04. Görsel Programlama - Ders04/ 1

BİL1001 Bilgisayar Bilimlerine Giriş 1

BÖLÜM 11: YAPISAL VERİ TİPLERİ

PROGRAMLAMAYA GİRİŞ DERS 2

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

C Programlama Dilininin Basit Yapıları

Veri Yapıları Laboratuvarı

JAVADA DİZİ İŞLEMLERİ

8. İŞARETCİLER (POINTERS)

YZM 2116 Veri Yapıları

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

Aynı tipten çok sayıda değişken topluluğudur. X Y Score1 Score2 (0) (1) (2)...

ALGORİTMA VE PROGRAMLAMA I

/ C Bilgisayar Programlama Yıliçi Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

PROGRAMLAMAYA GİRİŞ VE ALGORİTMA «YTÜROK» EĞİTMEN:REHA ÖZGÜR ŞİMŞEK

NESNEYE YÖNELİK PROGRAMLAMA

C PROGRAMLAMA D İ L İ

BİLG Dr. Mustafa T. Babagil 1

C++ Göstericiler (Pointer)

Örnek1: #include <iostream> #include <string> using namespace std;

YZM 2105 Nesneye Yönelik Programlama

Önemli noktalar. Paradigma Nesnelere Giriş Mesajlar / Ara bağlantılar Bilgi Gizleme (Information Hiding ) Sınıflar(Classes) Kalıtım/Inheritance

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-8 Dosya İşlemleri-1. Yrd. Doç. Dr. Ümit ATİLA

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

b) Algoritmanızın en kötü durumda işlem zamanını asimptotik olarak bulunuz

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

NESNE TABANLI PROGRAMLAMA Final Sınavı Cevapları

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

ALGORİTMA VE PROGRAMLAMA I

C++ Dersi: Nesne Tabanlı Programlama

YAPILAR (STRUCTURES)

İstanbul Teknik Üniversitesi IEEE Öğrenci Kolu DİZİLER

C PROGRAMLAMA DİLİNE GİRİŞ

INPUTBOX KULLANIMI. Komut Düğmesine uygulanan algoritma örneği

Sistem Programlama. Kesmeler(Interrupts): Kesme mikro işlemcinin üzerinde çalıştığı koda ara vererek başka bir kodu çalıştırması işlemidir.

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

ALFASAYISAL BİLGİLER KARAKTER DİZİLERİ (STRING)

Pointers (İşaretçiler)

Matlab da Dizi ve Matrisler. Mustafa Coşar

GENEL GĐRĐŞ-ÇIKIŞ FONKSĐYONLARI. ENF102 Jeoloji 1. #include <stdio.h> printf Fonksiyonu ÖRNEK. printf

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN


ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Diziler. Yukarıdaki bilgileri bilgisayar belleğinde saklamak için aşağıdaki gibi değişkenler tanımlanır ve değerler bu değişkenlere aktarılır :

Transkript:

C PROGRAMLAMA

Özyineleme (Recursion) Bir fonksiyonun kendisini çağırarak çözüme gitmesine özyineleme (recursion), böyle çalışan fonksiyonlara da özyinelemeli (recursive) fonksiyonlar denilir. Özyineleme, iterasyon (döngüler, tekrar) yerine geçebilecek çok güçlü bir programlama tekniğidir. Özyinelemeli algoritmalarda, tekrarlar fonksiyonun kendi kendisini kopyalayarak çağırması ile elde edilir. Bu kopyalar işlerini bitirdikçe kaybolur. Bir problemi özyineleme ile çözmek için problem iki ana parçaya ayrılır. 1 cevabı kesin olarak bildiğimiz kesin durum (base case) 2 cevabı bilinmeyen ancak cevabı yine problemin kendisi kullanılarak bulunabilecek durum.

Recursive fonksiyon - Faktöriyel hesabı Bu yönteme en uygun örnek faktöriyel problemidir. Faktöriyelin tanımı şöyle yapılır; sıfır dışındaki herhangi bir doğal sayının faktöriyeli 1 den başlayarak, o sayıya kadarki tüm doğal sayıların çarpımını almak yolu ile elde edilir. 0 sayısının faktöriyeli 1 olarak tanımlanır. Matematiksel gösterimi ise: Çarpım dizisindeki sonuncu terim olan N i ayırdığınızda diğer sayıların çarpımı (N- 1)! Olmaktadır. Yukarıdaki tanım ile son yapılan tanım arasındaki fark, açıklanan problemin tanımında yine problemin kendisinin olmasıdır. Burada cevabı kesin olarak bilinen 0! durumu temel durum olacaktır. Diğer durumlar ise cevabı bilinmeyen ancak problemin kendisi kullanılarak bulunabilecek durumlardır.

Recursive fonksiyon - Faktöriyel hesabı Şuana kadar anlatılan yöntemler ile faktöriyel hesabı aşağıdaki gibi yapılır.

Recursive fonksiyon - Faktöriyel hesabı Faktöriyel hesabı özyinelemeli fonksiyon ile aşağıdaki mantıkla çalışır. Bu durumda faktöriyel hesabı yapan fonksiyonu recursive (özyinelemeli) olarak tekrar düşündüğümüzde aşağıdaki gibi olacaktır.

Recursive fonksiyon - Faktöriyel hesabı

DİZİLER (ARRAYS) Aynı isim altında, aynı türde birden fazla veriyi tutmak için kullanılan veri yapılarıdır (Data Structure). Diziler bir kümedir, aynı türde verilere tek bir isimle erişmek için kullanılır. Bir dizinin bütün elemanları bellekte ardışık olarak saklanır. Diziler bir veya daha çok boyutlu olabilirler.

DİZİLER (ARRAYS) Tek boyutlu diziler; tek boyutlu bir dizi tanımlaması şu şekilde gerçekleştirilir : Derleyici ilk örnekteki gibi bir komutla karşılaştığında 6 adet sayının saklanacağı (tutulacağı) bellek alanı ayırır. Bir tam sayı örneğin DOS işletim sisteminde 2 byte uzunluğunda ise a dizisinin bellekte kaplayacağı toplam alan 2x6=12 byte olacaktır. Dizinin adı yani a değişkeni bu 12 byte lık alanın başlangıç adresini tutar. Dizi içerisindeki her bir elemana, dizi isminden sonra, yazılan pozisyon numarası yani indis değeri ile ulaşılır. İndis değerleri mutlaka tam sayı olmalıdır. C dilinde bütün dizilerin indis numarası 0 dan başlar. Dolayısı ile dizinin son indis numarası dizinin eleman sayısından bir eksiktir. Dizi Adı Dizinin elemanları İndis numaraları

Tek boyutlu dizilere ilk değer atama; DİZİLER (ARRAYS)

DİZİLER (ARRAYS) Dizilerin fonksiyonlara parametre olarak gönderilmesi; Bir dizi bir fonksiyona parametre olarak gönderilmek istendiğinde, fonksiyon çağrılırken dizinin sadece adı yazılır. Fonksiyon başlığında diziyi karşılayan tanımlamada ise köşeli parantezler kullanılır.

DİZİLER (ARRAYS) Dizilerin fonksiyonlara parametre olarak gönderilmesi; Diziler fonksiyonlara parametre olarak gönderilirken bağlantılı çağırma (call by reference) yöntemiyle gönderilirler. Bu yöntemde değerlerin kopyalandığı değişkenlerin değiştirilmesi orijinal değerleri etkiler. Daha öncede söylediğimiz gibi dizi isminde dizinin bellekteki başlangıç adresi tutulur. Bir önceki örnekte tanımladığımız a dizisinde a değişkeni dizinin bellekteki başlangıç adresini tutacaktır. İsterseniz a değişkeninin değerini (yani dizinin başlangıç adresini) aşağıdaki komutla ekrana yazdırabilirsiniz. Printf( %p,a); O halde fonksiyona dizi ismi ile gönderilen değer dizinin başlangıç adresidir. Fonksiyon parametresinde tanımlanan ve bu a ya karşılık gelecek olan değişkende (bir önceki örnekte b değişkeni) aynı bellek adresinden başlamış olur. Bellekte aynı adrese sahip iki farklı hücre bulunamaz. Yani a ve b dizileri bellekte üst üste saklanan aslında aynı dizilerdir. Birinde yapılan değişiklik aynı adresler doğrultusunda diğerini etkiler.

DİZİLER (ARRAYS) Çok boyutlu diziler (Multiply subscripted arrays); Birden fazla indis numarası ile elemanlarına ulaşılan dizilere çok boyutlu diziler denir. Bunlardan en sık kullanılanı çift boyutlu dizilerdir (double subscripted arrays). Bu diziler sayesinde değerler satır ve sütunlardan oluşan (row - column) iki boyutlu bir tablodaki veriler gibi düşünebilirler (bellekte yine ardışık olarak tutulurlar). Bu tür dizilerde her bir elemana ulaşmak için elemanın satır indisi ve sütun indisi kullanılır. C dilindeki dizilerin boyutları ikiden de fazla olabilir. Bir sınır olmamakla beraber 12 boyuta kadar destekler. Ancak iki boyutlu diziler bizim için yeterli. İki boyutlu bir dizini temsili gösterimi

DİZİLER (ARRAYS) Çift (iki) boyutlu dizilere ilk değer atama; Tek boyutlu dizi tanımlamaya benzer.

DİZİLER (ARRAYS) Çok boyutlu dizilerin fonksiyona parametre olarak gönderilmesi; Çok boyutlu bir dizi fonksiyona gönderilecekse, tek boyutlularda olduğu gibi sadece adı yazılır. Gönderilen dizi değişkenini karşılayan tanımlamada ise gönderilen dizinin boyutu kadar köşeli parantez (aç-kapa ikilisi) kullanılır. Çift boyutlu diziler tablo halinde bellekte tutulmaz, örneğin [2][3] boyutlarında bir dizinin elemanları bellekte 6 elemanlı tek boyutlu bir diziymiş gibi tutulur. Çift boyutlu dizide her bir satır tek boyutlu bir diziymiş gibi düşünülür ve bunlar uç uca eklenerek belleğe yerleştirilir. Derleyicinin bellekte bir sonraki satırın başlangıçtan kaç eleman sonra başladığını bilmesi gerekir İlk köşeli parantez içerisine eleman sayısını ifade eden değer yazılmaz., fakat diğerlerine eleman sayıları yazılmak zorundadır.

Örnek; DİZİLER (ARRAYS)