ALGORİTMA VE PROGRAMLAMA I

Benzer belgeler
ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#8

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

C PROGRAMLAMA D İ L İ

BİL1001 Bilgisayar Bilimlerine Giriş 1

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

Dr. Fatih AY Tel: fatihay@fatihay.net

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA II

ALGORİTMA VE PROGRAMLAMA I

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

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

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

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

ALGORİTMA VE PROGRAMLAMA I

YZM 2105 Nesneye Yönelik Programlama

Hafta 12 Karakter Tutan Diziler

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

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

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

Giriş. ENF102 Jeoloji

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

Özyineleme (Recursion)

Diziler (Arrays) Çok Boyutlu Diziler

Programlama Dilleri 1. Ders 4: Diziler

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

ALGORİTMA VE PROGRAMLAMA I

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 I

HSancak Nesne Tabanlı Programlama I Ders Notları

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

YZM 2105 Nesneye Yönelik Programlama

STRİNG DİZİLER(KATARLAR)

ALGORİTMA VE PROGRAMLAMA I

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

C Programlama Dilininin Basit Yapıları

YZM 2105 Nesneye Yönelik Programlama

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

JAVADA DİZİ İŞLEMLERİ

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

YZM 2116 Veri Yapıları

Fonksiyonlar (Altprogram)

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

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

Genel Programlama II

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

BLM 111 ALGORİTMA VE PROGRAMLAMA I

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-7 Sıralama Algoritmaları

Yrd. Doç. Dr. Ümit ATİLA

C Programlama Dilinde Değişkenler

Diziler İndisli Değişkenler

YZM VERİ YAPILARI DERS#9: HASH FONKSİYONLARI

PROGRAMLAMAYA GİRİŞ DERS 2

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

C#(Sharp) Programlama Dili

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-8 Değişken Tipleri ve Temel Giriş/Çıkış İşlemleri

EBG101 PROGRAMLAMA TEMELLERİ VE ALGORİTMA

Diziler. Dizi Tanımı Dizi Elemanlarına Değer Atama Diziler ve Göstergeler 2-Boyutlu Diziler

BİLG Dr. Mustafa T. Babagil 1

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

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

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

2. Dereceden Denklemin Köklerini Bulan Program

Veri Yapıları Laboratuvarı

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

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

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

İnternet Programcılığı Dersi 2.Dönem Ders Notu

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

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

Length: metin uzunluğunu yada diğer bir deyişle dizi elaman sayısını döndürür.

Matlab da Dizi ve Matrisler. Mustafa Coşar

ALGORİTMA VE PROGRAMLAMA I DERS NOTU#10

Internet Programming II

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN

C Konsol Giriş Çıkış Fonksiyonları

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

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

Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı

Yrd. Doç. Dr. Caner ÖZCAN

YZM 2116 Veri Yapıları

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

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

ALGORİTMA VE PROGRAMLAMA I DERS#1

B02.6 Karar Verme, Eşitlik ve Bağıntı Operatörleri

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

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

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İ

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

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

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-2 Değişken Kavramı ve Temel Operatörler

Transkript:

ALGORİTMA VE PROGRAMLAMA I Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr YZM 1101 Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi

Genel Bakış 2 Diziler Dizi Nedir? Dizilerin Bildirimi Dizilere Başlangıç Değeri Verme Dizilerde Arama ve Sıralama Algoritmaları Dizilerde Arama Doğrusal Arama (Linear Search) Karakter Dizileri Karakter Dizilerini Okumak ve Yazmak Karakter Dizilerinin Uzunluğunu Bulmak Karakter Dizilerini Birleştirmek Karakter Dizisi Kopyalamak Karakter Dizilerini Karşılaştırmak

1. BÖLÜM 3 Diziler

Dizi Nedir? 4 Veri yapısı türlerinden bir tanesidir (Array, Struct, Pointer, Class ). İçerisinde birden fazla, aynı tip ve aynı isimdeki veriyi bellekte depolayabilen değişkenlere dizi denir. Örneğin: Bir sınıftaki öğrencilerin notlarını saklamak için dizileri kullanmak mümkündür.

Dizilerin Bildirimi 5 Bir dizi çok sayıda değişken barındırdığından, bunları birbirinden ayırt etmek için indis adı verilen bilgiler kullanılır. C Programlama Dili'nde, bir dizi hangi tipte tanımlanmış olursa olsun başlangıç indisi her zaman 0'dır. Diziler tanımlanırken, dizinin adı, dizinin boyutu, dizi elemanların hangi tipte olacağı belirtilmelidir.

Dizilerin Bildirimi (devam ) 6 Bir dizinin bildirim işleminin genel biçimi aşağıdaki gibidir: veritipi dizi_adı[eleman_sayısı]; Örneğin double türündeki 8 adet öğrenci notunu bellekte tutmak için aşağıdaki gibi bir dizi tanımlayabiliriz. double ogrenci_notu[8];

Örnek: Dizilerin Bildirimi (devam ) 7 ogrenci_notu[0] ogrenci_notu[1] ogrenci_notu[2] ogrenci_notu[3] ogrenci_notu[4] ogrenci_notu[5] ogrenci_notu[6] ogrenci_notu[7] 45 56 78 93 78 69 77 90 1. eleman 2. eleman 3. eleman 4. eleman 5. eleman 6. eleman 7. eleman 8. eleman

Örnek: Dizilerin Bildirimi (devam ) 8 Dizinin ismi ogrenci_notu dur. Dizinin 8 elemanı ogrenci_notu[0], ogrenci_notu[1],..., ogrenci_notu[7] şeklinde gösterilmiştir. ogrenci_notu[0] içinde tutulan değer 45, ogrenci_notu[1] içinde tutulan değer 56, ogrenci_notu[7] içinde tutulan değer 90 dır. Bu dizinin ilk iki elemanının içinde tutulan değerlerin toplamını yazdırmak isteseydik; printf( Sonuc: %f, ogrenci_notu[0] + ogrenci_notu[1]); Sonuc: 101

Örnek: Dizilerin Bildirimi (devam ) 9 Bu dizinin yedinci elemanının değerini ikiye bölüp, oluşan sonucu x değişkenine atasaydık; x = ogrenci_notu[6] / 2; Dizinin yedinci elemanı ile yedinci dizi elemanı arasındaki farkı önemlidir. Dizi indisleri 0 dan başladığı için dizinin yedinci elemanı 6 indisine sahiptir. yedinci dizi elemanı ise 7 indisine sahiptir ve aslında dizinin sekizinci elemanıdır.

Dizilere Başlangıç Değeri Verme 10 Bir dizi, doğal olarak bazı veriler içerecektir. Diziye aynı anda birden fazla değer atanabilir. Bunun için söz konusu değerler { } işaretleri arasında virgül ile ayrılarak yazılırlar. Örnek: float kutle[5] = { 8.471, 3.683, 9.107, 4.739, 3.918 }; int maliyet[3] = { 25, 72, 94 }; double a[4] = { 10.0, 5.2, 7.5, 0.0}; Küme parantezleri sonlandırıcı ; karakteri ile bitmektedir.

Dizilere Başlangıç Değeri Verme (devam ) 11 Bir dizinin uzunluğu belirtilmeden de başlangıç değeri atamak mümkündür. Örnek: int a[] = { 100, 200, 300, 400 }; float v[] = { 9.8, 11.0, 7.5, 0.0, 12.5}; Derleyici bu şekilde bir atama ile karşılaştığında, küme parantezi içindeki eleman sayısını hesaplar ve dizinin o uzunlukta açıldığını varsayar. Yukarıdaki örnekte, a dizisinin 4, v dizisinin 5 elemanlı olduğu varsayılır.

Dizilere Başlangıç Değeri Verme (devam ) 12 Dizilere başlangıç değeri atarken, tüm elemanlara değer vermeden de atama yapmak mümkündür. Örnek: int sayilar[20] = {0}; Tüm dizi elemanlarına 0 değeri atanır int sayilar[20] = {1, 2, 3}; Dizinin ilk 3 elemanına 1,2 ve 3 değerleri atanır. 4 ten itibaren olan dizi elemanlarına 0 değeri atanır Sayısal tipindeki dizi elemanlarına 0 değeri, metin tipindeki dizi elemanlarına NULL değeri atanır.

Örnek1: Dizi elemanlarına değer atama ve okuma 13 Tek boyutlu, 5 elemanlı, sayısal (int) bir dizi tanımlanarak: Dizi elemanlarına dizi indislerinin 3 katı for döngüsü içerisinde değer olarak atanacaktır. Yine başka bir for döngüsü içerisinde bu değerler ekrana yazdırılacaktır.

14 Örnek1: Dizi elemanlarına değer atama ve okuma (devam )

Örnek2: Dizi atamaları 15 int x[5]; int i = 2; // 5 elemanlı sayısal x dizisi x[0] = 20; x[2.3] = 5; // Geçerli atama // Geçersiz atama x[2*i 3] = 3; // Geçerli atama, x[1] dizi elemanına 3 değerini atar x[i++]; x[(int) x[1]]; // Önce x[2] dizi elemanına erişilir daha sonra i değişkenine 3 değeri atanır // x[3] dizi elemanına erişilir

Örnek3: Klavyeden sayısal değer girme 16 Klavyeden maksimum 10 tane sayısal değer girilecektir. Girilen sayılar bir dizide saklanacaktır. Sayı girme işlemi 0 girilene kadar devam edecektir. 0 değeri girildiği anda 0 sayısı hariç girilen diğer tüm değerler diziden okunarak ekrana yazdırılacaktır.

17 Örnek3: Klavyeden sayısal değer girme (devam..)

18 Dizi Kullanımlarında Dikkat Edilmesi Gereken En Önemli Nokta Dizi boyunca döngü kullanırken dizi indisi asla 0 ın altına inmemeli ve her zaman dizideki toplam eleman sayısından az olmalıdır (büyüklük- 1). Döngü devam şartının bu aralığın dışındaki elemanlara ulaşılmasını engellediğinden emin olmamız gereklidir. Dizi sınırlarının dışındaki elemanları kullanmanın yaratacağı hatalar (genelde ciddi hatalardır) sistemden sisteme farklılık gösterir.

19 Örnek4: Dizi elemanı değeri kadar ekrana * karakteri yazdırma (Uygulama Dersi) 10 elemanlı { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 } grafik isimli bir dizi oluşturulacaktır. Dizideki elemanlar tek tek okunarak her dizi elemanının sayısı kadar ekrana * karakteri yazdırılacaktır. Ekran çıktısı aşağıdaki gibi olacaktır.

Dizilerde Arama ve Sıralama Algoritmaları 20 Arama ve sıralama algoritmaları (Search and sort algorithms) programlama ve yazılım geliştirme dünyasında hem akademik hem de endüstri açısından önemli bir yere sahiptirler. Özellikle büyük veri kaynakları ile çalışırken, aradığınız veriye en hızlı şekilde ulaşmanız doğru algoritmayı kullanmanıza bağlıdır.

Dizilerde Arama 21 Bir dizinin, belli bir arama değerine eşit olan bir değer içerip içermediğine karar vermek gerekebilir. Dizinin belirli bir elemanını bulma sürecine arama denir. Ders kapsamında 2 tane arama tekniği üzerinde durulacaktır: Doğrusal Arama (Linear / Sequential Search) İkili Arama (Binary Search)

Doğrusal Arama 22 Dizinin ilk elemanından başlanarak dizinin her elemanı, arama değeriyle karşılaştırılır. Aranan değer bulunduğunda ilgili dizi elemanının indisi değer olarak döndürülür. Aranan değer bulunamazsa -1 değeri döndürülür, Dizi herhangi bir şekilde sıralanmadığından değer ilk ya da son elemanda bulunabilir. Dolayısıyla, program ortalama olarak, arama değeriyle dizinin elemanlarının yarısını karşılaştırmalıdır.

Doğrusal Arama (devam ) 23

Karakter Dizileri (Strings) 24 Bazı programlama dillerinde karakter dizilerini tutmak için özel veri türleri (String, string vb.) bulunmaktadır. Ancak C programlama dilinde böyle bir veri türü olmadığı için yerine karakterlerden oluşan bir boyutlu diziler kullanılır. Karakter dizilerine özel olarak, karakter dizilerinin sonuna sonlandırıcı karakter olarak adlandırılan bir simge eklenir. Sonlandırıcı karakter: Dizinin bittiği yeri gösterir, ASCII tablosunun sıfır numaralı ('\0') karakteridir.

Karakter Dizileri (Strings) devam 25 Karakter dizilerine 2 şekilde başlangıç değeri verilebilir: (1) char s[7] = {'d','e','n','e','m','e','\0'}; (2) char s[7] = "deneme"; Birinci tanımlamada sonlandırıcı karakter programcı tarafından konmalıdır. İkinci tanımlamada ise buna gerek yoktur. Çünkü, sonlandırıcı karakter bu atamayla, derleyici tarafından eklenir.

Karakter Dizilerini Okumak 26 Bir karakter dizisini klavyeden okumak için C'nin standart gets() fonksiyonu kullanılır. stdio.h dışında yeni bir kitaplığı C programına dahil etmeye gerek yoktur. Bu fonksiyon herhangi bir indeks tanımlamadan karakter dizilerinin okunmasını sağlar. Okuduğu karakter dizisinin sonuna satır sonu işaretini değil, NULL değerini yerleştirir.

Karakter Dizilerini Okumak (devam ) 27 gets() fonksiyonu, klavyeden girilen karakter dizilerini, herhangi bir ek tanımlamaya gerek duymadan bir dizi içine yerleştirir. Dizinin her bir karakteri dizinin farklı bir hücresi içine yerleşir. Örnek: char ad[20];... gets(ad);

Örnek5: Karakter Dizisi Okuma ve Yazma 28 Maksimum 50 karakter okuyabilecek bir karakter dizisi tanımlayın. Klavyeden karakter dizisini okuyun ve ekrana karakterleri yazdırın. Tek tek karakterleri yazdırın Tüm metni tek seferde yazdırın

Örnek5: Karakter Dizisi Okuma ve Yazma (devam ) 29

Karakter Dizilerinin Uzunluğu Bulmak 30 Bazı uygulamalarda bir karakter dizisinin uzunluğunu bulmak gerekebilir. Bir karakter dizisinin uzunluğunu, yani kaç karakter içerdiğini bulmak için C'nin standart strlen() fonksiyonu kullanılır. Uzunluk bulunurken, içerdiği en son karakter olan NULL karakteri göz özüne alınmaz. Örneğin, karakter dizisi "abc" değerlerini içeriyorsa, strlen() fonksiyonu bu uzunluk olarak "3" değerini döndürür.

31 Örnek6: Girilen Karakter Dizisinin Uzunluğunu Bulmak

Karakter Dizilerini Birleştirmek 32 İki karakter dizisini birleştirilerek tek bir karakter dizisi haline dönüştürmek için C'nin strcat() fonksiyonu kullanılır. Bu fonksiyon, var olan bir karakter dizisinin sonuna bir başka karakter dizisini ekleyecektir. Örneğin "abc" karakter dizisinin sonuna "def" karakter dizisi strcat() fonksiyonu kullanılarak eklenebilir.

33 Örnek7: Girilen Karakter Dizilerini Birleştirmek

Karakter Dizisi Kopyalama 34 Karakter dizilerine direk atama yapılamamaktadır. Örneğin aşağıdaki atama ifadesi yanlıştır: char dizi[50]; katar = "abcde"; Çünkü bu atama göstergeye yapılan atamadır. Göstergelerin ne olduğunu daha sonra detaylı olarak ele alınacaktır. Atamanın bir karakter dizisine yapılabilmesi için, C'nin standart strcpy() fonksiyonu kullanılır.

Örnek8: Karakter Dizilerini Kopyalamak 35

Karakter Dizilerini Karşılaştırmak 36 İki karakter dizisinin birbirleriyle karşılaştırılarak, içerdiği karakterlerin aynı olup olmadıkları test edilebilir. Bu amaçla strcmp() fonksiyonu kullanılır. Karşılaştırma sonucunda, her iki karakter dizisi birbirinin aynı ise "0"; birbirinden farklı ise "1" değeri üretilir. Elde edilen bu değer kullanılarak programın akışı yönlendirilebilir.

Örnek9: Karakter Dizilerini Karşılaştırmak 37

KAYNAKLAR 38 N. Ercil Çağıltay ve ark., C DERSİ PROGRAMLAMAYA GİRİŞ, Ada Matbaacılık, ANKARA; 2009. Milli Eğitim Bakanlığı "Programlamaya Giriş ve Algoritmalar Ders Notları", 2007 http://tr.wikipedia.org/wiki/code::blocks http://www.codeblocks.org http://www.algoritmaveprogramlama.com http://www1.gantep.edu.tr/~bingul/c

39 İYİ ÇALIŞMALAR Yrd. Doç. Dr. Deniz KILINÇ deniz.kilinc@cbu.edu.tr