Temel Bilgisayar Programlama



Benzer belgeler
Genel Programlama II

B02.8 Bölüm Değerlendirmeleri ve Özet

K12NET Eğitim Yönetim Sistemi

ENF TEMEL BİLGİSAYAR BİLİMLERİ Eğitim/Öğretim Yılı Bahar Dönemi DÖNEM SONU LAB. ÖDEV TESLİM DUYURUSU

TEKNOLOJİ VE TASARIM

ÖĞRENME FAALĠYETĠ GELĠġMĠġ ÖZELLĠKLER

Endüstri Mühendisliğine Giriş. Jane M. Fraser. Bölüm 2. Sık sık duyacağınız büyük fikirler

OYUN GELİŞTİRME AŞAMALARI-I. Oyununuzun senaryosunu kısaca tanıtınız/ amacınıda belirtiniz:

B05.11 Faaliyet Alanı

Uzem Eğitmen Girişi. Şekil 1. Sisteme girdikten sonra Şekil 2 deki ekran karşımıza çıkacak. Bu ekrandaki adımları kısaca tanıyalım.

MAT223 AYRIK MATEMATİK

BBY 310 BİLGİ SİSTEMLERİ TASARIMI TASARIM PLANI ÖDEVİ [HİLAL ŞEKER& GÜLÜMCAN KAYI]

BİR SAYININ ÖZÜ VE DÖRT İŞLEM

İŞLEM BASAMAKLARI, KARŞILAŞILABİLECEK HATALAR ve ÇÖZÜM YOLLARI

Resim 1: Kongre katılımı (erken kayıt + 4 günlük kongre oteli konaklaması) için gereken miktarın yıllar içerisindeki seyri.

OPERATÖRLER BÖLÜM Giriş Aritmetik Operatörler

Bilgisayar Uygulamaları PSİ105

İçinde x, y, z gibi değişkenler geçen önermelere açık önerme denir.

2008 YILI MERKEZİ YÖNETİM BÜTÇESİ ÖN DEĞERLENDİRME NOTU

BİT ini Kullanarak Bilgiye Ulaşma ve Biçimlendirme (web tarayıcıları, eklentiler, arama motorları, ansiklopediler, çevrimiçi kütüphaneler ve sanal

DİKKAT! SORU KİTAPÇIĞINIZIN TÜRÜNÜ "A" OLARAK CEVAP KÂĞIDINA İŞARETLEMEYİ UNUTMAYINIZ. SAYISAL BÖLÜM SAYISAL-2 TESTİ

1.Temel Kavramlar 2. ÆÍlemler

VEGAWINA VERSION

VEZNE PROGRAMINDA POSTA ÜCRETİ İLE İLGİLİ YAPILAN DÜZENLEMELER (Vezne Sürüm: )

Bilgisayarla Tasarım I (GRT 207) Ders Detayları

ANALOG LABORATUARI İÇİN BAZI GEREKLİ BİLGİLER

ELITE A.G. KS100/HEFM SICAK-SOĞUK ETĐKET BOY KESME VE ĐŞARETLEME MAKĐNASI KULLANIM KILAVUZU

Bölüm 3. Sentaks ve semantik tarifi ISBN

C/C++ DERS KONULARI. Kaynaklar 1. C Programlama dili, Kemal Yarcı 2. C/C++, Gürcan Banger 3. C ve Siz, Fatih Ekici

MAKÜ YAZ OKULU YARDIM DOKÜMANI 1. Yaz Okulu Ön Hazırlık İşlemleri (Yaz Dönemi Oidb tarafından aktifleştirildikten sonra) Son aktif ders kodlarının

ETKİLEŞİMLİ TAHTA KORUMA SİSTEMİ KURULUM

BÖL-1B. Fatih University- Faculty of Engineering- Electric and Electronic Dept.

YILDIZ TEKNİK ÜNİVERSİTESİ DERS GÖREVLENDİRME YÖNERGESİ

İleri Diferansiyel Denklemler

Yandaki resimlerde Excel Pazartesi den başlayarak günleri otomatik olarak doldurmuştur.

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

Bölgeler kullanarak yer çekimini kaldırabilir, sisli ortamlar yaratabilirsiniz.

1. YAPISAL KIRILMA TESTLERİ

C Operatörler. Öğr. Gör. M. Ozan AKI. Rev 1.0

Şaft: Şaft ve Mafsallar:

Şekil 1. Sistem Açılış Sayfası

Nesneye Yönelik Programlama-JAVA, Ders sorumlusu Yrd.Doç.Dr.Hilmi KU ÇU

Q-BIZ VIEWER KULLANIM KILAVUZU

ENF-106 C Programlama Dili Ders İçeriği. Grafik fonksiyonları C Programlama Dili Ders Notları Dr. Oğuz ÜSTÜN

Farklı Televizyon Yayın Ortamlarında Aynı Anda Farklı Reklam Yayını Bir Koltuğa İki Karpuz Sığar mı?

MİKRO İKTİSAT ÇALIŞMA SORULARI-10 TAM REKABET PİYASASI

MÜHENDİSLİK ve MİMARLIK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ ELEKTRONİK DEVRELER LABORATUVARI DENEY FÖYÜ 1

ARAŞTIRMA PROJESİ NEDİR, NASIL HAZIRLANIR, NASIL UYGULANIR? Prof. Dr. Mehmet AY

TEŞEKKÜR Bizler anne ve babalarımıza, bize her zaman yardım eden matematik öğretmenimiz Zeliha Çetinel e, sınıf öğretmenimiz Zuhal Tek e, arkadaşımız

0 dan matematik. Bora Arslantürk. çalışma kitabı

M i m e d ö ğ r e n c i p r o j e l e r i y a r ı ş m a s ı soru ve cevapları

Digifresh Kullanım Kılavuzu

K.S.Ü. MÜHENDİSLİK MİMARLIK FAKÜLTESİ TEKSTİL MÜHENDİSLİĞİ BÖLÜMÜ BİTİRME ÖDEVİ / BİTİRME PROJESİ DERSLERİ İLE İLGİLİ İLKELER

İSTANBUL TİCARET ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BİLGİSAYAR SİSTEMLERİ LABORATUARI YÜZEY DOLDURMA TEKNİKLERİ

Analiz aşaması sıralayıcı olurusa proje yapımında daha kolay ilerlemek mümkün olacaktır.

Veri Toplama Yöntemleri. Prof.Dr.Besti Üstün

ÇARPANLAR VE KATLAR BİR DOĞAL SAYININ ÇARPANLARINI BULMA. 3. Aşağıda verilen sayıların çarpanlarından asal olanları belirleyelim.

KAPSAMLI İÇERİK SADELEŞTİRİLMİŞ ARAMA MOTORU YENİLİKÇİ BİLGİ İŞLEME TEKNOLOJİSİ PRATİK GÖRÜNTÜLEME ARAÇLARI MOBİL ERİŞİM

Olasılık ve İstatistik Dersinin Öğretiminde Deney ve Simülasyon

Tasarım Raporu. Grup İsmi. Yasemin ÇALIK, Fatih KAÇAK. Kısa Özet

Kalkınma Politikasının Temelleri

İşletme Gelişimi Atölye Soruları

BÖLÜM 3 FREKANS DAĞILIMLARI VE FREKANS TABLOLARININ HAZIRLANMASI

Üniversitelerde Yabancı Dil Öğretimi

ÖĞRENME FAALĠYETĠ 6 ÖĞRENME FAALĠYETĠ NESNE ĠġLEMLERĠ

Sonlu Durumlu Makineler

DERLEYİCİ TASARIMI ÖDEV-2 RAPORU

Kullanım kılavuzu HERE Maps

01 OCAK 2015 ELEKTRİK AKIMI VE LAMBA PARLAKLIĞI SALİH MERT İLİ DENİZLİ ANADOLU LİSESİ 10/A 436

int printf (const char *format [, argument,...]);

Ek 1. Fen Maddelerini Anlama Testi (FEMAT) Sevgili öğrenciler,

Uzaktan Kumanda (Yalnızca Belirli Modellerde)

YÖNETMELİK ANKARA ÜNİVERSİTESİ YABANCI DİL EĞİTİM VE ÖĞRETİM YÖNETMELİĞİ BİRİNCİ BÖLÜM. Amaç, Kapsam, Dayanak ve Tanımlar

CSD-OS İşletim Sistemi Projesi - Fonksiyon Açıklama Standardı

Temel Giriş/Çıkış Fonksiyonları (Devam) Örnek :

Mimari Anlatım Teknikleri I (MMR 103) Ders Detayları

BURHANETTİN YILDIZ TEKNİK VE ENDÜSTRİ MESLEK LİSESİ

KÜMELER A) 1 B) 2 C) 3 D) 4 E) 5 A) 1 B) 2 C) 3 D) 4 E) 5 A) 30 B) 31 C) 32 D) 33 E) 34 A) 30 B) 25 C) 21 D) 19 E) 17 A) 24 B) 26 C) 28 D) 30 E) 32

FOTOĞRAFÇILIK HAKKINDA KISA NOTLAR

SINIF KURALLARI. Amaç: Öğrencilerin sınıf kurallarını öğrenmesi ve uygulaması. Düzey: 1. sınıf ve üstü

Y.T.Ü. İSTATİSTİK BÖLÜMÜ STAJ BİLGİLENDİRME TOPLANTISI

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

1 Semboller. 3 Kurallara Uygun Kullanım. 4 Önceden Görülebilen Hatalı Kullanım Şekli. 2 Emniyet ve Tehlikeler. 1.1 İkaz Bilgileri. 1.

Monopol. (Tekel) Piyasası

OYUN GELİŞTİRME AŞAMALARI-I

T.C. GAZİ ÜNİVERSİTESİ Uzaktan Eğitim Uygulama ve Araştırma Merkezi Müdürlüğü ÖĞRENCİ İŞLERİ DAİRE BAŞKANLIĞINA

Evrak Ekle. Kurum İçi Giden Evrak Ekleme. Kırmızı renker; doldurulması zorunlu alanları ifade etmektedir. İleri Geri tarihli işlem yapılamamaktadır.

Sürücü Gönder. Yönetici Kılavuzu

Sketch Up. - Bilgisayar Dersleri 1. 3 Boyutlu Çizimler ve Google

- TESTO Hava Hızı ve Debisi Ölçüm Cihazı TANITMA VE KULLANMA KILAVUZU

AĞ ÜZERİNDEN YAZICI ve TARAYICI TANIMLAMA KLAVUZU

DOĞRUDAN FAALİYET DESTEĞİ PROGRAMI PROJE UYGULAMA EĞİTİMLERİ

26 Ağustos 2010 tarih ve sayılı Resmi Gazete de yayınlanmıştır

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

Yrd. Doç. Dr. Caner ÖZCAN

3- Kayan Filament Teorisi

TOHUMLUK VERİ YÖNETİM SİSTEMİ. KULLANIM ve YARDIM KILAVUZU

MADDE 3 (1) Bu Yönetmelik, 4/11/1981 tarihli ve 2547 sayılı Yükseköğretim Kanununun 14 ve 49 uncu maddelerine dayanılarak hazırlanmıştır.

Yrd. Doç. Dr. Caner ÖZCAN

DENEY 2: PROTOBOARD TANITIMI VE DEVRE KURMA

Transkript:

BÖLÜM 9: Fonksiyonlara dizi aktarma Fonksiyonlara dizi aktarmak değişken aktarmaya benzer. Örnek olarak verilen öğrenci notlarını ekrana yazan bir program kodlayalım. Fonksiyon prototipi yazılırken, dizinin tipi ve eleman sayısı belirtilmelidir. Fonksiyonun icra bloğunda ise herhangi bir dizi adı parametre olarak yazılmalıdır. Normal değişken parametrelerden farklı olarak dizinin eleman sayısının da belirtilmesidir. Dizi gönderilen fonksiyonlar çağrılırken sadece dizinin isminin yazılması yeterlidir. Örneğimizde main fonksiyonu içinden listele() fonksiyonunu çağırırken de öyle yaptık. Şimdide en düşük, en yüksek ve ortalama notu bulmaya yarayan fonksiyonları yazalım. Öğr.Gör. Fatih ÖCAL Sayfa 1

Ekran Çıktısı Öğr.Gör. Fatih ÖCAL Sayfa 2

Yazdığımız örneklerde dizilerin eleman sayısı biliniyordu. Fakat her zaman dizinin eleman sayısı bilinmeyebilir yada fonksiyonumuzun farklı eleman sayılarına diziler için kullanılabilir olmasını isteyebiliriz. Ki böyle bir fonksiyon çok daha kullanışlı olacaktır. Örneğin farklı sayıda öğrenciler bulunan sınıflar için yukarıdaki örneğimizin kullanılabilir olmasını istersek fonksiyonlarımızı aşağıdaki gibi düzenlememiz gerekir. Bu örneğimizde görüldüğü gibi dizi adıyla bitlikte eleman dizinin sayısını da gönderirsek fonksiyonumuzu farklı sayılarda elemanları olan diziler için kullanabiliriz. Fonksiyonlardan dizi döndürme Bunun için daha önce gördüğümüz referans parametresi ile fonksiyon çağırma konusunu hatırlayacak olursak pointerlerden faydalandığımızı biliyorsunuz. Dizilerin aktarılmasıda, referans yoluyla olur. Fonksiyon içersinde dizi elemanları üzerinde yapacağınız tüm değişiklikler dizinin aslı üzerinde de değişikliğe sebep olur. Şimdi tüm notları 3 puan öteleyecek bir örnek yapalım. Öğr.Gör. Fatih ÖCAL Sayfa 3

Örnekte görüldüğü gibi fonksiyon içerisinde diziyle ilgili yaptığımız tüm değişikler, dizinin aslına da yansımıştır. Şimdi fonksiyondan dizi döndürme konusunu inceleyelim. Aslında fonksiyondan dizi pek doğru bir isimlendirme değil. Gerçekte döndürdüğümüz şey, dizinin kendisi değil, sadece başlangıç adresidir. Dolayısıyla bir dizi değil Pointer döndürdüğümüzü söyleyebiliriz. Şimdi kendisine gönderilen iki dizinin birleşimini döndüren bir örnek yapalım. Öğr.Gör. Fatih ÖCAL Sayfa 4

Fonksiyonlara çok boyutlu dizilerin aktarımı İki boyutlu dizilerin fonksiyonlara parametre olarak gönderilmesi, tek boyutlu dizilerin gönderimi gibidir. Ancak ikinci boyutun eleman sayısının mutlaka bildirilmesi gerekir. Şimdi 4 öğrencinin bir quiz, bir vize ve birde final notunu gönderelim. Öğr.Gör. Fatih ÖCAL Sayfa 5

Aslında burada 4x3 bir matris işlemi yapılmıştır. Bu birinci boyutunda 4, ikinci boyutunda ise 3 elemanı olan iki boyutlu bir dizidir. Fonksiyonun tanımlama satırında dizinin birinci boyut(satır) eleman sayısı belirtilmemiştir. Gerekte yoktur. Fakat ikinci boyut(sütun) eleman sayısı belirtilmek zorundadır. Fonksiyonlara çok boyutlu diziler aktarılırken fonksiyonun tanımlama kısmında çok boyutlu dizinin ilk boyut eleman sayısının yazılması zorunlu değildir. Bu sebeple bizde int notlistesi[ ][3] şeklinde yazdık. Eğer 5x4x2 gibi bir diziyi fonksiyona parametre olarak verecek olsaydık int liste[ ][ 5 ][ 2 ] olarak yazmamız gerekirdi. Özetle fonksiyonu tanımlarken dizilerin ilk boyut eleman sayısını yazıp yazmamakta bir zaruret yoktur; Fakat diğer boyutların eleman sayılarının yazılması zorunludur. Böylece aynı fonksiyonu ilk boyutu farklı uzunluklarda olan diziler için kullanabiliriz. Dinamik Bellek Yönetimi Dizileri etkin bir biçimde kullanmayı öğrendiğinizi ya da öğreneceğinizi umuyorum. Ancak dizilerle ilgili işlememiz gereken son bir konu var: Dinamik Bellek Yönetimi... Şimdiye kadar yazdığımız programlarda kaç eleman olacağı önceden belliydi. Yani sınıf listesiyle ilgili bir program yazacaksak, sınıfın kaç kişi olduğunu biliyormuşuz gibi davranıyorduk. Programın en başında kaç elemanlık alana ihtiyacımız varsa, o kadar yer ayırıyorduk. Ama bu gerçek dünyada karşımıza çıkacak problemler için yeterli bir yaklaşım değildir. Örneğin bir sınıfta 100 öğrenci varken, diğer bir sınıfta 50 öğrenci olabilir ve siz her ortamda çalışsın diye 200 kişilik bir üst sınır koyamazsınız. Bu, hem hafızanın verimsiz kullanılmasına yol açar; hem de karma eğitimlerin yapıldığı bazı fakültelerde sayı Öğr.Gör. Fatih ÖCAL Sayfa 6

yetmeyebilir. Statik bir şekilde dizi tanımlayarak bu sorunların üstesinden gelemezsiniz. Çözüm dinamik bellek yönetimindedir. Dinamik bellek yönetiminde, dizilerin boyutları önceden belirlenmez. Program akışında dizi boyutunu ayarlarız ve gereken bellek miktarı, program çalışırken tahsis edilir. Dinamik bellek tahsisi için calloc( ) ve malloc( ) olmak üzere iki önemli fonksiyonumuz vardır. Bellekte yer ayrılmasını bu fonksiyonlarla sağlarız. Her iki fonksiyon da stdlib kütüphanesinde bulunur. Bu yüzden fonksiyonlardan herhangi birini kullanacağınız zaman, programın başına #include<stdlib.h> yazılması gerekir. calloc( ) fonksiyonu aşağıdaki gibi kullanılır: isaretci_adi = calloc( eleman_sayisi, her_elemanin_boyutu ); calloc( ) fonksiyonu eleman sayısını, eleman boyutuyla çarparak hafızada gereken bellek alanını ayırır. Dinamik oluşturduğunuz dizi içersindeki her elemana, otomatik olarak ilk değer 0 atanır. malloc( ) fonksiyonu, calloc( ) gibi dinamik bellek ayrımı için kullanılır. calloc( ) fonksiyonundan farklı olarak ilk değer ataması yapmaz. Kullanımıysa aşağıdaki gibidir: isaretci_adi = malloc( eleman_sayisi * her_elemanin_boyutu ); Bu kadar konuşmadan sonra işi pratiğe dökelim ve dinamik bellekle ilgili ilk programımızı yazalım: Ekran çıktısı Öğr.Gör. Fatih ÖCAL Sayfa 7

Yazdığınız programların bir süre sonra bilgisayar belleğini korkunç bir şekilde işgal etmesini istemiyorsanız, free( ) fonksiyonunu kullanmanız gerekmektedir. Gelişmiş programlama dillerinde ( örneğin, Java, C#, vb... ) kullanılmayan nesnelerin temizlenmesi otomatik olarak çöp toplayıcılarla ( Garbage Collector ) yapılmaktadır. Ne yazık ki C programlama dili için bir çöp toplayıcı yoktur ve iyi programcıyla, kötü programcı burada kendisini belli eder. Programınızı bir kereliğine çalıştırıyorsanız ya da yazdığınız program çok ufaksa, boş yere tüketilen bellek miktarını farketmeyebilirsiniz. Ancak büyük boyutta ve kapsamlı bir program söz konusuysa, efektif bellek yönetiminin ne kadar önemli olduğunu daha iyi anlarsınız. Gereksiz tüketilen bellekten kaçınmak gerekmektedir. Bunun için fazla bir şey yapmanız gerekmez; calloc( ) fonksiyonuyla tahsis ettiğiniz alanı, işiniz bittikten sonra free( ) fonksiyonuyla boşaltmanız yeterlidir. Konu önemli olduğu için tekrar ediyorum; artık kullanmadığınız bir dinamik dizi söz konusuysa onu free( ) fonksiyonuyla kaldırılabilir hâle getirmelisiniz! calloc( ) ile yazdığımız programı birde malloc( ) fonksiyonunu ile yazalım: Ekran çıktısı Hafıza alanı ayırırken bazen bir problem çıkabilir. Örneğin bellekte yeterli alan olmayabilir ya da benzeri bir sıkıntı olmuştur. Bu tarz problemlerin sık olacağını düşünmeyin. Ancak hafızanın gerçekten ayrılıp ayrılmadığını kontrol edip, işinizi garantiye almak isterseniz, aşağıdaki yöntemi kullanabilirsiniz: Öğr.Gör. Fatih ÖCAL Sayfa 8

Dinamik hafıza kullanarak dizi oluşturmayı gördük. Ancak bu diziler tek boyutlu dizilerdi. Daha önce pointer işaret eden pointer'ları görmüştük. Şimdi onları kullanarak dinamik çok boyutlu dizi oluşturalım. Öğr.Gör. Fatih ÖCAL Sayfa 9

Öğr.Gör. Fatih ÖCAL Sayfa 10

Yukardaki örnek karmaşık gelebilir ancak koyu yazılmış yerlerini öğrendiğiniz takdirde, problem hallolacaktır. KAYNAKÇA Fatih Öcal Ders notları(1989-2012). A. Bingul, C Programlama, http://www1.gantep.edu.tr/~bingul/c/index.php Ç. Çebi, C Programlama Dersi, http://www.cagataycebi.com F. Kadifeli, A. C. C. Say, M. U. Çağlayan, C Programlama Dili, 2007, http://www.kadifeli.com/fedon/stdcprtr.php Emre Ayrılmaz. C# 3.0 ile Programlama Temelleri. Bilge Adam Yayınları, İstanbul:2008 Mehmet Aktaş, EBİL Eğitim ve Yazılım Ltd. Şti. Mustafa Aksu, Algoritma ve Programlamaya Giriş Ders Notları. <www.hakankör.com.tr> www.gokhandokuyucu.com <eylül 2011> Öğr.Gör. Fatih ÖCAL Sayfa 11