Algoritma ve Programlama II Recursive Fonksiyonlar Dosyalama

Benzer belgeler
Algoritma Geliştirme ve Veri Yapıları 5 Rekürsif Algoritmalar. Mustafa Kemal Üniversitesi

Metin Dosyaları. Metin Dosyaları Dosya Açma ve Kapama Dosya Okuma ve Yazma Rastgele Erişim Standart Girdi/Çıktı Hata Kontrolü

1 PROGRAMLAMAYA GİRİŞ

Eln 1002 Bilgisayar Programlama II

ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

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

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

BMB1002 Bilgisayar Programlamaya Giriş. Dosyalar. Prof. Dr. Necmettin Kaya

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

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Fonksiyon Türleri. Bildiğiniz gibi, C++'da iki fonksiyon türü ile karşılaşıyoruz. C++'nın kullanıma sunduğu hazır fonksiyonlar.

BİLG Dr. Mustafa T. Babagil 1

C++ Dersi: Nesne Tabanlı Programlama

Özyineleme (Recursion)

C++ Dersi: Nesne Tabanlı Programlama

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);

C/C++ Disk G/Ç İşlemleri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

ALGORİTMA VE PROGRAMLAMA II

C++ Dersi: Nesne Tabanlı Programlama 2. Baskı

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

C++ Dersi: Nesne Tabanlı Programlama

Algoritma Geliştirme ve Veri Yapıları 1 Temel Algoritma Kavramları. Mustafa Kemal Üniversitesi

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

Algoritma ve Programlama: Karar Yapıları ve Döngüler

C++ Dersi: Nesne Tabanlı Programlama

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

10. DOSYA GİRİŞ ÇIKIŞ FONKSİYONLARI

ALGORİTMA VE PROGRAMLAMA I

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

ALGORİTMA VE PROGRAMLAMA II

C++ Dersi: Nesne Tabanlı Programlama

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

BİL-142 Bilgisayar Programlama II

11- FONKSİYONLAR (FUNCTIONS)

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

şeklinde tanımlanmıştır. O halde, dosyaları daha önceki bilgilerimizi kullanarak FILE *Dosya1, *Dosya2;

Bölüm 1 PROGRAMLAMAYA GİRİŞ. Bölüm 2 ALGORİTMA

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

BMT207 VERİ YAPILARI DATA STRUCTURE

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

Özyineleme (Recursion)

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

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

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Eln 1002 Bilgisayar Programlama II

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

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Pointer Kavramı. Veri Yapıları

ALGORİTMA VE PROGRAMLAMA II

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

ALGORİTMA VE PROGRAMLAMA I

Temel Bilgisayar Programlama

BIL222 Veri Yapıları ve Algoritmalar

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 DERS NOTU#8

Diziler (Arrays) Çok Boyutlu Diziler

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

C PROGRAMLAMA D İ L İ

Lambda İfadeleri (Lambda Expressions)

BİL1001 Bilgisayar Bilimlerine Giriş 1

ÖZYİNELEME RECURSION. Yrd. Doç. Dr. Aybars UĞUR

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 1 DERSİ LAB. ÖDEVİ

BİL-142 Bilgisayar Programlama II

ALGORİTMA VE PROGRAMLAMA II

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

ELN1001 BİLGİSAYAR PROGRAMLAMA I

C++ Dersi: Nesne Tabanlı Programlama

Temel Giriş/Çıkış Fonksiyonları

ÖZYİNELEME RECURSION. Doç. Dr. Aybars UĞUR

Biçem Belirteçleri (Format Specifiers)

for döngüsü for (başlangıç değeri; şart; artım) ifade; for (başlangıç değeri; şart; artım) { ifadeler; }

BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜM BAŞKANLIĞI DERS TANITIM BİLGİLERİ

Yrd. Doç. Dr. Caner ÖZCAN

2 PYTHON A GIRIŞ 13 PyCharm İle Python Projesi Oluşturma 15 Projenin Çalıştırılması 18 İlk Python Programımız 19 Açıklama Satırları 21

NB Macro Kullanımı Hakkında Genel Bilgiler

ALGORİTMA VE PROGRAMLAMA I

EM205 26/9/2014. Programlamaya giriş Algoritmalar. Amaçlar

Struct VE GÖSTERİCİLER FONKSİYONLARDA STRUCT KULLANIMI Programlama dilleri hafta -

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

DOSYA İŞLEMLERİ Programlama dilleri hafta -

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA

PROGRAMLAMA. Dosyalama İşlemleri. Yrd. Doç. Dr. Bülent Çobanoğlu. Sakarya Üniversitesi Mekatronik Mühendisliği. Yrd.Doç.Dr.

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-3 İşaretçiler (Pointer) (Kısım-2)

Programlama Dillerinde Kullanılan Veri Tipleri

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#3: ALGORİTMA ANALİZİ#2

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

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

Göstericiler (Pointers)

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

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

Adım Adım C. Dr. Hidayet Takcı

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Transkript:

Algoritma ve Programlama II Recursive Fonksiyonlar Dosyalama

Rekürsif Algoritmalar Bir problemin çözümü için döngü kurulması gerekiyorsa bu ihtiyacı karşılamak için birisi çevirimli diğeri rekürsif olarak adlandırılan iki yaklaşım kullanılabilir.

Rekürsif Algoritmalar Çevrimli yaklaşım dediğimiz genellikle programlama dillerinde kullanılan FOR-WHILE döngü deyimleridir.

Rekürsif Algoritmalar Rekürsif yaklaşım ise, fonksiyonun «kendi kendisini çağırması ile» sonuca ulaşan bir programlama yaklaşımı olarak tanımlanabilir.

Rekürsif Algoritmaların Özellikleri Yapılan iş aslında programlama dillerinin hakim olduğu FOR-WHILE gibi yapıları kullanmadan bellek-yığın mantığı ile dögü oluşturulmasıdır. Örnek olarak; N!=N*(N-1)! dir. Böyle bir problem için rekürsif fonksiyon yazılabilir.

Rekürsif Algoritmaların Özellikleri unsigned int faktoryel(int N) if(n<=1) return 1; else return (N*faktoryel(N-1)); ÇIKTI

Rekürsif Algoritmaların Özellikleri Ne Zaman Rekürsif Yaklaşım? Özellikle böl-ve-yönet yaklaşımına uygun çözümlerde; Problem parçalara ayrıldığında her alt parça ana bütünün özelliklerini taşıyorsa böyle problemlerin çözümü rekürsif yaklaşıma daha uygundur.

Rekürsif Algoritmaların Özellikleri Rekürsif Yaklaşımın Olumsuz Yanı? Rekürsif yaklaşımın kendi kendisini iç içe çağırdığı için yığın(stack) kullanımını arttırmasıdır. Çünkü her fonksiyon çağrılmasında sistem yığınına geri dönüş adresi ve parametreleri yazılır, fonksiyon çalışıp işini bitirdikten sonra yığından işgal ettiği alanı serbest bırakır. Bu durum bellekte alan sıkıntısı problemi oluşturabilir.

Rekürsif Algoritmaların Özellikleri Rekürsif Algoritmada Kendi Kendisini Çağırma Yeri yazsayi(int N) if(n<1) return 1; cout<<n; yazsayi(n-1); main() yazsayi(5); Ekran Çıktısı: 5 4 3 2 1 Ekran Çıktısı: 1 2 3 4 5 yazsayi(int N) if(n<1) return 1; yazsayi(n-1); cout<<n; main() yazsayi(5);

Çeşitli Rekürsif Algoritmalar Dizi elemanlarını sıralama Ağaç veri modelinde dolaşma algoritmaları Graf veri modelinde dolaşma algoritmaları Fibonacci serisi Catalan sayıları Ackermann fonksiyonu Dinamik programlama algoritmaları Hanoi kuleleri çözümü

Rekürsif fibonacci Serisi Hesabı f(n)=f(n-1)+f(n-2) f(0)=0, f(1)=1 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,... unsigned int fibonacci(unsigned int n) unsigned int fib; if(n>1) fib= fibonacci(n-1)+fibonacci(n-2); return fib; else if(n==1) return 1; else return 0;

Rekürsif Catalan Sayıları Hesabı n=(0, 1, 2,...) 1, 1, 2, 5, 14, 42,... C n+1 = (4n + 2)C n n + 2 C 0 = 1 Float Catalan(int N) if(n==0) return 1; return (4*N+2)*Catalan(N+1)/(N+2)

C++ Metin İşlemleri Metin dosyalarını basitçe bir metin editörüyle açıp okuduğumuz (örneğin notepad, vi gibi) dosyalar olarak düşünebiliriz. Bu dosyalarda veri ardışık bir şekilde (sequential) dosyaya yazılmıştır. Dosyadaki herhangi bir veriye erişmek için dosyanın başından o veriye kadar ilerlemek gerekir.

C++ Metin İşlemleri C++ ta dosya işlemleri için fstream kütüphanesinden faydalanırız. #include<fstream> gibi. fstream ile neler yapılabilir. Dosyaların açılması Dosyaların kapatılması Dosyalardan okuma ve yazma işlemleri İlave fonksiyonlar

C++ Metin İşlemleri Dosyaların açılması Dosyalar 3 farklı şekilde açılabilir: ofstream = dosyaya kayıt için kullanılır. << opretörü ile çalışır (Writing Mode) İfstream = dosyadan veri okumak için kullanılır. >> operatörü ile çalışır. (Reading Mode) append = dosyaya veri ekleme (Append Mode)

Örnek #include<fstream> using namespace std; int main() int x; ofstream yaz(«veri.txt»); x=5; yaz<<x; yaz.close(); return 0; #include<fstream> using namespace std; int main() int x; ifstream oku(«veri.txt»); oku>>x; cout<<x; yaz.close(); return 0; Dosyaya veri yazma Dosyadan veri okuma

append; Eğer dosyaya tekrar tekrar birşeyler eklemek istersek, dosyamızı ios::append modunda açmamız gerekir. ofstream(«veri.txt», ios::app); // append -> app şeklinde kısaltılabilir.