NANTAI NVERSTES ALGORTMA VE PROGRAMLAMAYA GR FONKSYONLARA DZ

  • Slides: 21
Download presentation
NİŞANTAŞI ÜNİVERSİTESİ ALGORİTMA VE PROGRAMLAMAYA GİRİŞ FONKSİYONLARA DİZİ GEÇİRME, ÇOK BOYUTLU DİZİLER İktisadi, İdari

NİŞANTAŞI ÜNİVERSİTESİ ALGORİTMA VE PROGRAMLAMAYA GİRİŞ FONKSİYONLARA DİZİ GEÇİRME, ÇOK BOYUTLU DİZİLER İktisadi, İdari ve Sosyal Bilimler Fakültesi iisbf. nisantasi. edu. tr TESİ NİŞANTAŞI ÜNİVERSİ ©

DEĞİŞKEN SINIFI • Bir değişkenin bir programdaki yaşam süresi değişkenin sınıfına bağlıdır. C 'de

DEĞİŞKEN SINIFI • Bir değişkenin bir programdaki yaşam süresi değişkenin sınıfına bağlıdır. C 'de iki sınıf vardır: 1. otomatik (automatic) , 2. statik (static). • Otomatik değişkenler geçici değişkenlerdir. Tanımlandıkları blok'a girildiği veya tanımlandıkları fonksiyon çağrıl dığı zaman yaratılırlar, bloktan veya fonksiyondan çıkıldığında yok edilirler. Bu yüzden bu değişkenlere otomatik denilir. Kaynak: İbrahim Güney, C Programlama Dili, Nobel Yayıncılık 2

DEĞİŞKEN SINIFI • Statik değişkenler ise programın çalıştığı süre içinde var olmaya, yani değerlerini

DEĞİŞKEN SINIFI • Statik değişkenler ise programın çalıştığı süre içinde var olmaya, yani değerlerini saklı tutmaya devam ederler. Statik bir değişken tanıtımı şöyledir: static tip değişken_adı; • Bir değişkenin bir de geçerli olduğu alan (scope) vardır, statik bir değişken, ta nımlandığı fonksiyon için geçerli olur. Başka fonksiyonlarda tanınmaz, geçerli olmaz. • Bütün fonksiyonlar için tanımlı olmasını istiyorsak, onu bu fonksiyonlardan ya da main( ) 'den önce tanıtmamız gerekir. Kaynak: İbrahim Güney, C Programlama Dili, Nobel Yayıncılık 3

DEĞİŞKEN SINIFI • Fonksiyon içinde bir diziye ilk değer verilebilmesi için dizinin statik olarak

DEĞİŞKEN SINIFI • Fonksiyon içinde bir diziye ilk değer verilebilmesi için dizinin statik olarak tanıtılması gerekir, main() den önce tanıtılan küresel değişkenler gibi dizilere de ilk değer verilebilir. • Statik değişkenler tanımlandıkları fonksiyon dışında geçerli olmazlar. • Bir dizi static olarak tanıtılırsa elemanları otomatik olarak sıfırlanır. Kaynak: İbrahim Güney, C Programlama Dili, Nobel Yayıncılık 4

DEĞİŞKEN SINIFI • Bir programda bir değişkenin yaşam süresi üç farklı düzeyde olabilir: 1.

DEĞİŞKEN SINIFI • Bir programda bir değişkenin yaşam süresi üç farklı düzeyde olabilir: 1. Blok düzeyinde 2. Fonksiyon düzeyinde 3. Dosya düzeyinde. • Dosya düzeyinde olanlar en uzun yaşam süresi olan değişkenlerdir. Program çalışmaya devam ettikçe varlıklarını sürdürürler. Bir değişken fonksiyon içinde statik olarak tanıtılırsa yaşam süresi fonksiyon düzeyinde olur. Kaynak: İbrahim Güney, C Programlama Dili, Nobel Yayıncılık 5

ÖRNEK • Elemanlarının değerleri klavyeden girilen, 5 elemanlı 2 tamsayı dizisinin tanımlandığı; bu dizilerin

ÖRNEK • Elemanlarının değerleri klavyeden girilen, 5 elemanlı 2 tamsayı dizisinin tanımlandığı; bu dizilerin aynı sıradaki elemanlarının toplamını hesaplayarak üçüncü bir diziye aktaran C programını yazınız. 6

ÖRNEK 7

ÖRNEK 7

ÖRNEK • Elemanları klavyeden girilen 10 elemanlı bir tamsayı dizi içerisindeki en büyük sayıyı

ÖRNEK • Elemanları klavyeden girilen 10 elemanlı bir tamsayı dizi içerisindeki en büyük sayıyı bulan ve ekrana yazdıran programı yazınız. 8

ÖRNEK 9

ÖRNEK 9

ÖRNEK • 10 elemanlı bir tamsayı dizisi içerisindeki sayıları küçükten büyüğe doğru sıraya dizen

ÖRNEK • 10 elemanlı bir tamsayı dizisi içerisindeki sayıları küçükten büyüğe doğru sıraya dizen ve sıralı diziyi ekrana yazdıran programı yazınız. 10

ÖRNEK 11

ÖRNEK 11

KAYNAKLAR • Fahri Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin Yayıncılık • İbrahim Güney,

KAYNAKLAR • Fahri Vatansever, Algoritma Geliştirme ve Programlamaya Giriş, Seçkin Yayıncılık • İbrahim Güney, C Programlama Dili, Nobel Yayıncılık

FONKSİYONLARA DİZİ GEÇİRME • Bir fonksiyona bir dizi geçirmek için fonksiyon adının yanındaki parantezlerin

FONKSİYONLARA DİZİ GEÇİRME • Bir fonksiyona bir dizi geçirmek için fonksiyon adının yanındaki parantezlerin arasına dizinin sadece adını (köşeli parantezleri değil) yazmak yeterlidir. Örneğin a[10] dizisini, fonk() adlı fonksiyona geçirmek için şu komutu kullanırız: fonk (a) ; • Bilindiği gibi fonksiyonlar iki farklı yolla çağırılır: a) değer ile çağrı b) adres ile çağrı. • Değer ile çağrıda argümanın kopyası fonksiyona gönderilir. Çağırılan fonksiyon içinde doğrudan doğruya argümana ulaşılamaz ve dolayısıyla değeri değiştirilemez. Kaynak: İbrahim Güney, C Programlama Dili, Nobel Yayıncılık 13

FONKSİYONLARA DİZİ GEÇİRME • Şimdi şu soruyu soralım: fonk(a); çağrısı hangi yolla yapılan bir

FONKSİYONLARA DİZİ GEÇİRME • Şimdi şu soruyu soralım: fonk(a); çağrısı hangi yolla yapılan bir çağındır? • Bir dizinin adresi söz konusu edilmek istenirse dizinin sadece adı göz önüne alınır. O halde fonk (a) ifadesinde fonksiyona dizinin adresi geçirilmektedir. Böylece çağırılan fonksiyon içinde dizinin elemanları değiştirilebilir. O halde bir dizi bir fonksiyona geçirilince dizideki ilk elemanın adresi parametreye geçirilmiş olur. Kaynak: İbrahim Güney, C Programlama Dili, Nobel Yayıncılık 14

ÇOK BOYUTLU DİZİLER • Satır ve sütunlarda yer alan veri tabloları iki boyutlu dizilerle

ÇOK BOYUTLU DİZİLER • Satır ve sütunlarda yer alan veri tabloları iki boyutlu dizilerle gösterilir. • Böyle bir tablonun özel bir elemanını göstermek için satır ve sütun numarası verilmelidir. • İlk indis satır numarası, ikinci indis de sütun numarasını gösterir. • İki boyutlu bir dizi tanıtımının genel formatı şöyledir. tip dizi_adı[m] [n] ; • İlk parantez içindeki m tam değeri satır boyutunu, ikinci parantez içindeki n de sütun boyutunu gösterir. 15

ÇOK BOYUTLU DİZİLER • Örnek: int matris [2] [3] ; float v[3] [1]; •

ÇOK BOYUTLU DİZİLER • Örnek: int matris [2] [3] ; float v[3] [1]; • İndisler bilindiği gibi sıfırdan başlar. a[3][2] dizisini tablo ile gösterelim: 0. sütun 1. sütun 0. satır a[0][0] a[0][1] 1. satır a[1][0] a[1][1] 2. satır a[2][0] a[2][1] 16

ÇOK BOYUTLU DİZİLER • Bu tablo bellekte tek boyutlu bir dizi olarak yer alır.

ÇOK BOYUTLU DİZİLER • Bu tablo bellekte tek boyutlu bir dizi olarak yer alır. a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] 17

İKİ BOYUTLU DİZİLERE İLK DEĞER VERİLMESİ • İki boyutlu dizilere ilk değer verilmesi, tek

İKİ BOYUTLU DİZİLERE İLK DEĞER VERİLMESİ • İki boyutlu dizilere ilk değer verilmesi, tek boyutlu dizilerde olduğu gibidir. • a[3][4] dizisine bu ilk değerler bir kaç türlü verilebilir: 1) int a[3][4]= { {1, 3, 5, 2 }, {2, 4, 6, 3 }, { 3, 5, 7, 8 } } Her satırın elemanları iki ayraç arasında ve aralarına virgül konarak yazılır, son satır da hep sıfır değeri varsa, o satır yazılmayabilir. derleyici elemanların yerine sıfır alır. 2) int a[3][4]= {1, 3, 5, 2, 3, 4, 6, 3, 3, 5, 7, 8 } Kaynak: İbrahim Güney, C Programlama Dili, Nobel Yayıncılık 18

İKİ BOYUTLU DİZİLERE İLK DEĞER VERİLMESİ • Bazı derleyiciler static belirticisi yazılmayan tanıtımlarda hata

İKİ BOYUTLU DİZİLERE İLK DEĞER VERİLMESİ • Bazı derleyiciler static belirticisi yazılmayan tanıtımlarda hata mesajı verir. • Bazı derleyiciler fonksiyon içinde dizilere ilk değer verilmesine izin verirken diğer bazıları static belirticisinin kullanılmasını ister. Kaynak: İbrahim Güney, C Programlama Dili, Nobel Yayıncılık 19

ÖRNEK • İlk değerleri program içerisinde verilen 3 x 2 boyutundaki iki matrisin toplamını

ÖRNEK • İlk değerleri program içerisinde verilen 3 x 2 boyutundaki iki matrisin toplamını hesaplayarak sonucu yazdıran C programını yazınız. 20

ÖRNEK 21

ÖRNEK 21