Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
DİZİLER
2
Dizi Nedir? Tek isim altında gruplandırılmış değişkenler (aynı tipteki) toplamıdır. Daha özel olarak, aynı tipte ve aynı isimle belirtilmiş değişkenler için bir grup hafıza yerleşimidir. Dizilerin oluşturulmasında kullanımında olduğu gibi kabul edilmiş özel düzenler vardır, fakat birbiriyle ilişkili değişkenlerle çalışmayı daha kolaylaştırır.
3
Tam olarak ne hakkında konuşuyoruz?!
On öğrenciniz olduğunu ve herbiri için notları kaydederek programınız boyunca kullanmak istediğinizi varsayalım (yalnızca döngüyü değil her bir notu hatırlamamız ve saymamız veya ortalamasını almamız vb. gerekir) Zor yolla yapılabilir: iStudentOneGrade olarak on değişken belirleyin iStudentTwoGrade, iStudentThreeGrade, etc. Kullanması ve amaçlarımız doğrultusunda yönetilmesi oldukça zor Bunun yerine bunu kolay yoldan yapmak için bir dizi kullanılabilir.
4
Bir dizi değişkenini kullanmak
arrStudentGrades[10] isimli bir dizi değişkeni oluşturun Aşağıdaki gibi bildirin: int arrStudentGrades[ 10 ]; Bu, hafızada, # ‘in bakmak istediğiniz belirli bir öğrenciyi temsil ettiği arrStudentGrades[#] olarak başvurulabilecek 10 tamsayılık bir bölge tesis eder. “arr” öneki bir Hungarian gösterimidir (gerekli değil)
5
Dizi İsimlendirme Hususları
Dizi değişkeni isimleri seçerken değişken isimlendirme kuralları uygulanır. Harf, rakam ve alt çizgi karakterlerinin birleşimidir Bir rakamla başlayamaz Değişken isimleri için önerilen tüm iyi programlama ipuçlarını takip edin isimlendirirken yalnızca sıradan bir değişkenmiş gibi düşünün Hungarian gösterimini kullanıyorsanız, iStudentGrades[10]yerine arrStudentGrades[10] kullanın
6
Dizinin Bölümleri Dizinin henüz görmediğimiz bir terminolojisi vardır
Elemanlar Gösterge (veya yerleşim numarası) İndis Sıfırıncı eleman
7
Elemanlar Dizi tarafından temsil edilen bağımsız parçaların numaralarına işaret eder. 10 tamsayılı bir dizinin 10 elemanı olduğunu söylenir 15 gerçel sayılı dizinin 15 elemanı olduğu söylenir 5 karakterli bir dizinin 5 elemanı olduğunu söylenir ve saire...
8
Gösterge (Yerleşim Numarası veya İndis)
Dizi içindeki belirli bir elemana işaret eder Aynı zamanda yerleşim numarası veya daha resmi şekilde indis olarak da bilinir. Dizideki ilk eleman 0 (sıfır) göstergesi veya indisi ile temsil edilir. Örneğin; arrStudentGrades[ 0 ] İlk yerleşim sıfırıncı eleman olarak bilinir. İkinci yerleşim şu şekilde temsil edilir arrStudentGrades[ 1 ]
9
Dizi yerleşimlerini hesaplamak
C’de dizilerin elemanları 0 indisi ile başlar ve artarak devam eder (eleman sayısı - 1’e kadar) Örneğin, 10 öğrencinin notları ile doldurulmuş dizimiz aşağıdaki gibi görünecektir: 88 82 90 89 98 78 38 99 76 85 Value 9 8 7 6 5 4 3 2 1 Index
10
Dizi yerleşimleri (devam)
Bunlara dizi isimlerini takiben köşeli parantez içindeki indis numaralarını belirterek erişebiliriz. Örneğin; printf (“The third student’s grade is %d\n”, arrStudentGrades[ 2 ] ); Dizi içindeki yalnızca üçüncü tamsayı yerini yazar (0’ın ilk, 1’in ikinci, ve 2’nin üçüncü gösterge / indis elemanı olduğunu hatırlayın) Çıktı şöyle görünecektir: The third student’s grade is 99
11
Dizi yerleşimleri (devam)
İndis yerleşiminin 0’dan başlaması başlangıçta kafa karıştırıcı olabilir Bu pek çok off-by-one hatalarının sebebidir bu yüzden bu kavrama dikkatlice çalışın
12
Kitap terminolojisiyle konu
Kitap açıklamaları: “Her dizinin ilk elemanı sıfırıncı elemandır. Bu nedenle c dizisinin ilk elemanına c[0] , c dizisinin ikinci elemanına c[1] ... olarak ve, genellikle c dizisinin i’ninci elemanına c[i-1] olarak başvurulur.” “dizinin yedinci elemanı” ve “dizi elemanı yedi” arasındaki farka dikkat etmek önemlidir. Çünkü dizi indisleri 0 ile başlar, “dizinin yedinci elemanı” indis olarak 6’ya sahip olduğu gibi “dizi elemanı yedi” indis olarak 7 ’ye sahiptir ve aslında dizinin sekizinci elemanıdır. Eğer sayfa 197 eleman 0 deseydi daha az kafa karıştırıcı olabilirdi.
13
indis terminolojisi Bu noktadan itibaren, bu ders için, dizi elemanlarının tüm referansları dizinin indisini işaret edecektir. Dizideki bir elemanın yeri ile ilgili tartışmak istediğimiz olayda, onun yerini işaret edeceğiz. Bir başka deyişle, sıfırıncı elemanı işaret etmediğimiz sürece i’ninci elemanı veya eleman i gösterimini kullanmayacağız.
14
Dizilerin bazı güçlü özellikleri
İfadeleri indis olarak kullanabilme Ör: eğer değişken a = 1 ve b = 2 ise arrStudentGrades[ a+b ] yazmak, arrStudentGrades[3] yazmak ile aynı olacaktır. İfadelerde dizi elemanlarını kullanabilme E.g. int iGradeTotal = 0 ; iGradeTotal = arrStudentGrades[ 0 ] + arrStudentGrades[ 1 ] + arrStudentGrades[ 2 ] + … arrStudentGrades[ 9 ] ; Bütün dizi elemanlarını toplayıp bunu iGradeTotal’da depolayacaktır.
15
Güçlü özellikler (devam)
Dizi elemanlarını başka değerlere veya ifadelere eşitleyebilme. Örneğin: arrStudentGrades[ 1 ] = 100 ; Bu, dizi elemanını 1 indisi ile 100 notuna eşitler. Böylece 2. öğrenci 100 notunu alacaktır.
16
Öyleyse dizileri nasıl kullanıyoruz?
Başka değişkenlere uygulanan benzer kavramlar Dizi bildirilmeli Dizi başlangıç durumuna getirilmeli Sıradan değişkenlerin kullanımına benzer şekilde dizileri ifadelerde ve fonksiyonlarda kullanabilme, elemanlarının değerini belirleyebilme veya değerlerini kullanabilme
17
Bir diziyi bildirmek #define GRID_ROWS_MAX 8
Dizideki elemanların tipi, dizinin ismi ve dizideki eleman sayısı belirtilmelidir, böylece bilgisayar dizi için yeterli hafızayı bir yana ayırır. Bildirim, diğer değişkenlerin bildirimi ile benzerdir (parantezler ve elemanların numaraları hariç): int iMyFirstArray[ 15 ] ; or int iMyFirstArray[ 15 ], iMySecondArray[ 20 ]; Dizinin büyüklüğünü belirlemek için #define sabitini kullanabilirsiniz #define GRID_ROWS_MAX 8 int arrGridRows[ GRID_ROWS_MAX ] ;
18
Bir diziyi başlangıç durumuna getirmek
Diğer değişkenlerde yaptığınız gibi bir diziyi bildirdiğiniz zaman başlangıç durumuna getirebilirsiniz Yazım tamamen farklı, şimdi aynı anda birden fazla elemanı başlangıç durumuna getiriyorsunuz Bildirimin bir yolu, başlatıcılar kullanılarak: int iMyFirstArray[ 5 ] = { 0, 0, 0, 0, 0 } ; Birbirlerinden virgüllerle ayrılan başlangıç sıfırlarının etrafındaki parantezlere dikkat edin
19
Bir diziyi başlangıç durumuna getirmek (devam)
Sahip olduğunuz elemanlardan daha az sayıda başlangıç değerini belirtecekseniz, kalanların tümü 0 değeriyle başlangıç durumuna getirilecektir! Örneğin: int iMyFirstArray[ 5 ] = { 0 }; bütün elemanları 0 olarak ayarlar. int iMyFirstArray[ 5 ] = { 4 }; int iMyFirstArray[ 5 ] = { 4 }; 0’ıncı elemanı 4 ve kalanları 0 olarak ayarlar.
20
Bir diziyi büyüklük belirtmeden başlangıç durumuna getirmek
Aynı zamanda eleman sayısını ve başlangıç değerlerini aynı adımda belirleyebirsiniz: int iMyFirstArray[ ] = { 0, 0, 0, 0, 0 } ; Dikkat: HİÇBİR büyüklük yoktur; C diziyi beş başlangıç değeri verdiğinizde otomatik olarak 5 elemanlı yapar.
21
Diziyi bir for döngüsüyle başlangıç durumuna getirmek
Bir diziyi bildirdikten sonra, programınızın gövdesi içinde onu başlangıç durumuna bir for döngüsü kullanarak getirebilirsiniz. int i = 0, iMyFirstArray[ 5 ] ; /* size is 5*/ /* büyüklük 5*/ for ( i = 0 ; i <= 4 ; i++ ) { iMyFirstArray[ i ] = 0 ; } /* end for i */ /*i for’unun sonu */ Üst sınırın 5 değil 4 olduğuna dikkat edin! Böylece, 5 elemanlı bir dizi için 0’dan 4’e kadar döneceksiniz.
22
Elemanlara for döngüsü ile erişmek
Bir dizinin elemanlarını yazdırmak için bir for döngüsü kullanılabilir #define SIZE 5 int i = 0, iMyFirstArray[ SIZE ] ; /* go through all element index */ /* göstergedeki tüm elemanlar boyunca ilerle */ for ( i = 0 ; i <= SIZE - 1 ; i++ ) { printf( “%d”, iMyFirstArray[ i ]) ; } /* end for i */ /* i for’unun sonu */
23
int myFirstArray[SIZE], i; for (i=0; i<=SIZE-1; i++)
#define SIZE 10 int main() { int myFirstArray[SIZE], i; for (i=0; i<=SIZE-1; i++) myFirstArray[i] = i * 2; printf("myFirstArray with subscript of %d holds the value %d\n", i, myFirstArray[i]); return 0; }
24
Diziler devamı
25
Dizilerin yeniden incelenmesi
Elemanlar: Dizi tarafından temsil edilen bağımsız parçaların numaralarına işaret eder Gösterge (veya daha resmi şekilde, İndis) Dizi içindeki belirli bir elemana işaret eder Dizideki ilk eleman 0 (sıfır) göstergesi veya indisi ile temsil edilir. Örneğin, arrStudentGrades[ 0 ] İkinci yerleşim şu şekilde temsil edilir arrStudentGrades[ 1 ]
26
Dizi yerleşimler (tekrar inceleme)
C’de dizilerin elemanları 0 indisi ile başlar ve artarak devam eder (eleman sayısı - 1’e kadar) Örneğin, 10 öğrencinin notları ile doldurulmuş dizimiz aşağıdaki gibi görünebilir: 88 82 90 89 98 78 38 99 76 85 Value 9 8 7 6 5 4 3 2 1 Index
27
Dizi hakkında (devam) İndis yerleşiminin 0’dan başlaması başlangıçta kafa karıştırıcı olabilir
28
Dizileri daha az karmaşık hale getirmek
Bu off-by-one hatalarından kurtulmayı nasıl deneyebiliriz? İlk bileşenimize indis sıfır olarak başvurmayı nasıl engelleyebiliriz? Son bileşenimize indis “eleman sayısı - 1” olarak başvurmayı nasıl engelleyebiliriz?
29
Daha çok sezgisel kullanım için dizileri nasıl yapılandırmalıyız
İhtiyaç duyduğunuzdan bir fazla elemanı olan bir dizi oluşturun indis 0 ile temsil edilen bileşene öylesine bir değer yerleştirin Geçerli verileri indis 1 ile yerleştirmeye başlayın Bu yolla, “asıl” ilk bileşeniniz indis 0 değerine değil indis 1 değerine sahip olacaktır ve son geçerli bileşeninizin indis değeri dizinin büyüklüğü değerine eşit olacaktır (büyüklük - 1 değil)
30
Örnek On öğrenciniz olduğunu ve herbiri için notları kaydederek programınız boyunca kullanmak istediğinizi varsayalım (yalnızca döngüyü değil her bir notu bunları bir kez saymak yada ortalamalarını almak için hatırlamamız gerekir)
31
Dizi yerleşimlerini hesaplamak, eski örnek, yeni yöntem
On öğrenciyi ve notlarını tutan dizimizi hatırlıyor musunuz? Onbir elemanlı bir dizi oluşturun 10 öğrencinin notları ile doldurulmuş dizimiz aşağıdaki gibi görünecektir: 88 82 90 89 98 78 38 99 76 85 Değer 10 9 8 7 6 5 4 3 2 1 İndis
32
Eski örnek, yeni yöntem devam
Bu yolla, 1. Öğrenci ile ilgilenmeye ihtiyaç duyduğunuzda, indis 0’a değil indis 1’e başvuruyorsunuz. Şimdi, bir for döngüsünde 1 ile başlayabilirsiniz ve eleman sayısı kadar tekraralayabilirsiniz (eleman sayısı - 1 değil) Bazen anlaşılırlık fazladan hafıza kullanımına ağır basar Eğer pek çok dizisi bulunan büyük programlara sahipseniz hafızaya değmeyebilir. Gerçek şu ki, böyle ucuz ve bol hafıza ile, pek çok durumda muhtemelen büyük bir çalışma olmayacaktır.
33
Uyarı Programınızda bu çalışmayı anlaşılır biçimde açıklayın
Bunu kullanırsanız, BÜTÜN program boyunca İSTİKRARLI olun. Bunu bir dizi için kullanıp diğerleri için kullanmamak daha fazla karışıklık oluşturacaktır.
34
C’nin dizi sınırı kontrolü yoktur
Programınızın bir dizinin sınırları dışındaki bir elemana erişmediğinden emin olmak sizin sorumluluğunuzdadır. Örneğin, eğer 10 büyüklüğünde bir dizi bildirmişseniz, ve indis 10’a erişmeye çalışıyorsanız (hatırlayın, en yüksek geçerli indis 9’dur), var olmayan bir elemana erişmeye kalkışıyorsunuz.
35
Dizilerde tamsayılarla sınırlandırılmıyorsunuz.
Başka tipteki diziler Dizilerde tamsayılarla sınırlandırılmıyorsunuz. Gerçel tipleri (float, double) ve hatta karakterleri içeren pek çok farklı tipte diziler oluşturabilirsiniz. Bir karakter dizisi, bir string(karakter diziyi)’i depolamak için kullanılabilir.
36
Strings (Karakter) Diziler
Karakter dizileri daha önce görmüştük: printf kullanırken, tırnak işaretleri arasındaki «malzeme» bir karakter dizidir. printf(“Hi, I am a string!\n”); Parçalara ayırdığınızda, bunun gibi bir karakter dizi gerçekte karakterlerden oluşmuş bir dizidir. Öyleyse bu karakter dizileri nasıl bildiriyoruz?
37
Karakter dizileri bildirmek
char cMyFirstString[ ] = “Hello”; Bu bir dizi oluşturur ve dizinin elemanlarını karakter dizi içindeki her biri ayrı karakter olarak başlangıç durumuna getirir. Hatırlayın, dizi için bir boyut belirlemediğimiz sürece, başlangıç değeri boyutu belirler. Karakter diziler en sonunda diziye de eklenen gizli bir karakter içerirler. Yani “Hello” dizisinin büyüklüğü, karakter dizi sonlandırma karakteri - boş karakter olarak bilinir - eklendiğinden beş değil altıdır.
38
Null (Boş) karakter Karakter diziler, karakter dizinin sonunu belirten özel bir sonlandırma karakterine sahiptir. Boş karakter ters kesme imini takip eden bir sıfırdan oluşur. Bunun şöyle bir görüntüsü vardır: ‘\0’ C’deki bütün karakter diziler bununla biter. Bir karakter dizisi bulunduran bütün diziler bütün karakterleri olduğu gibi boşluk karakterini de barındıracak kadar büyük olarak bildirilmelidir.
39
Bir başka şekilde bildirmek ve başlangıç durumuna getirmek
Bir tamsayı dizisini başlatıcılarla nasıl başlangıç durumuna getirdiğimizi hatırlıyor musunuz? int iMyFirstArray[ 5 ] = { 0, 0, 0, 0, 0 } ; Karakter dizi için benzeri bir şeyler başlatıcılarla yapılabilir char cMyFirstString[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’,‘\0’}; Bu bir dizi oluşturur ve dizinin elemanlarını birbirinden farklı karakterlerle başlatır (en sondaki boşluk karakterine dikkat edin)
40
Bildirmek ve Başlangıç Durumuna Getirmek (devam)
Tamsayılarda olduğu gibi, sahip olduğunuz eleman sayısından daha az başlangıç değeri belirtirseniz, geriye kalanların tümü 0 değeriyle başlar. Örneğin, char cMyFirstString[ 5 ] = { ‘A’ }; sıfırıncı elemanı ‘A’ ve geriye kalanları 0 olarak belirler. Karakter dizi “A” olacaktır “A0000” değil. karakterden sonraki ilk 0 boşluk karakteri olarak okunur.
41
Bir dizideki karakterlere erişmek
Madem ki bir karakter dizi karakterlerden oluşan bir dizidir, her bir elemana tamsayı dizilerinde olduğu gibi erişilebilir. Örneğin, char cMyFirstString[ ] = “Hello”; cMyFirstString[ 0 ] /* ‘H’ karakteridir …. cMyFirstString[ 2 ] /* ‘l’ dir.
42
Karakter dizileri yazdırmak
Zor yolda yazdırabilirsiniz... for ( i = 0; sMyFirstString[ i ] != ‘\0’ ; i++ ) { printf( “%c”, sMyFirstString[ i ] ) ; } ... Yada daha kolay bir yol: printf (“%s\n”, sMyFirstString ); Yeni dönüşüm karakterinin karakter diziyi belirten %s olduğuna dikkat edin.
43
Girdileri Karakter Diziler olarak Okumak
Klavyeden girdiğiniz bir stringi bir karakter diziye okuyabilirsiniz. İlk önce, beklenen girdiyi tutabileccek kadar büyük bir dizi oluşturmalısınız. char sInput[ 20 ] ; Daha sonra scanf’i %s belirteci ile kullanın scanf( “%s”, sInput ); Scanf’deki DİZİ İSMİNİN ÖNÜNDE & BULUNMADIĞINA DİKKAT EDİN! Diziler için buna gerek duyulmaz!
44
Girdiyi Okumak devam Siz bir whitespace karakteri girene kadar scanf diziyi doldurmaya devam eder. Dizinizin girdi için yeterli uzunlukta olması SİZİN sorumluluğunuzdadır. Eğer dizi girdi için çok küçükse, scanf dizi uzunluğunun sınırları dışında yazmaya devam eder. muhtemelen bir çalışma-anı hatasıyla sonuçlanacaktır. Hatırlayın, boşluk karakteri için bir yer bırakmalısınız!
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.