CPP 022 – Arrays

Normalde her değişkende bir değer saklayabiliriz. Birden fazla değişkeni saklamak için array kullanıyoruz. Array, bellekte ard arda dizilmiş değişkenlerdir.

5 öğrencilik bir sınıftaki not ortalamalarını hesaplayan bir program yazalım:

#include <iostream>
using namespace std;

int main() {
	int not_00 = 56;
	int not_01 = 75;
	int not_02 = 93;
	int not_03 = 26;
	int not_04 = 87;

	int ortalama_not{};

	ortalama_not += not_00;
	ortalama_not += not_01;
	ortalama_not += not_02;
	ortalama_not += not_03;
	ortalama_not += not_04;

	ortalama_not = ortalama_not / 5;

	cout << "Ortalama not: " << ortalama_not << endl;
	// Ortalama not: 67
}

Çok güzel fakat 5 kişi yerine 30 kişi yapmak isteseydik ne yapacaktık? Fazladan 25 tane daha değşken mi tanımlayacaktık?

Şimdi aynı örneği array ile yapalım:

#include <iostream>
using namespace std;

int main() {
	const int ogrenci_sayisi = 5;
	int ortalama_not{};

	int notlar[ogrenci_sayisi];
	notlar[0] = 56;
	notlar[1] = 75;
	notlar[2] = 93;
	notlar[3] = 26;
	notlar[4] = 87;

	for (int i = 0; i < ogrenci_sayisi; i++)	
		ortalama_not += notlar[i];
	
	ortalama_not = ortalama_not / ogrenci_sayisi;

	cout << "Ortalama not: " << ortalama_not << endl;
	// Ortalama not: 67
}

Biraz daha kompakt bir şekilde yazabiliriz.

#include <iostream>
using namespace std;

int main() {
	const int ogrenci_sayisi = 5;
	int ortalama_not{};

	int notlar[ogrenci_sayisi]{ 56,	75,	93,	26,	87 };

	for (int i = 0; i < ogrenci_sayisi; i++)	
		ortalama_not += notlar[i];
	
	ortalama_not = ortalama_not / ogrenci_sayisi;

	cout << "Ortalama not: " << ortalama_not << endl;
	// Ortalama not: 67
}

gördüğünü üzere aynı kodu çok daha kompakt bir biçimde yazabiliriz. Artık 30 kişilik ya da 50 kişilik bir sınıfın da not ortalamasını rahatlıkla hesaplayabiliriz.

Array’in tutacak eleman sayısını const int ile belirledik. Eğer int ile belirleseydik hata alacaktık. Peki neden? Çünkü array’ler bulunduğu bellek lokasyonu compiler tarafından derleme esnasında belirlenir. Derleme esnasında belirlenene bu alanın çalışma sırasında sabit kalması gerekli. Bunun için const int kullanıyoruz.

Const anahtar sözcüğü bir değişkenin başına geldiğinde o değişkenin çalışma zamanında sabit olacağını garanti eder.


  • Array’in elemanları bellekte ard arda dizilmiştir.
  • Array’in elemanlarına indeks numarasıyla erişebiliriz.
  • Array’lerin indeksleri her zaman 0 dan başlar. Bazı programlama dillerinde 1’den başlar. Sıfırdan başlamasının sebebi bir tık daha verimli olması.

Multi Dimensional Arrays

Şuana kadar kullandığımız array’ler, tek boyutlu array’ler idi. Bir de çok boyutlu arraylerimiz var.

Tek boyutlu array:

1,2,3,4,5

2 boyutlu array:

21,42,37,48,52,
63,75,78,49,10,
48,52,32,94,12

3 boyutlu array:

gibi gibi gibi. Yani tablosal verileri ya da daha fazlasını ifade edebilmek için çok boyutlu arrayleri kullanabiliriz. Örneğin bir resmin piksellerini saklamak için çok boyutlu array uygundur.

Tabi bellek dediğimiz yapı çok boyutlu değil. Tek boyutlu bir array’dir. Peki biz bu tek boyutlu array’de nasıl çok boyutlu array’leri saklayabiliyoruz.

Satırları ard arda ekliyoruz. Resimde göründüğü gibi. İstersek sütunları da ekleyebiliriz:

Tabi bu satır-sütün meselesini biz değil programlama dili hallediyor. C++ row major dizilimi tercih ediyor. Basit bir örnekte gösterelim.

#include <iostream>
using namespace std;

int main() {
	const int row_size = 3;
	const int column_size = 5;

	int A[row_size][column_size]{
		{4,5,7,4,5},
		{1,5,2,1,5},
		{7,1,2,7,1},
	};

	for (int i = 0; i < row_size; i++) {
		for (int j = 0; j < column_size; j++) {
			cout << A[i][j] << ", ";
		}
		cout << endl;
	}
}

// 4, 5, 7, 4, 5,
// 1, 5, 2, 1, 5,
// 7, 1, 2, 7, 1,

Gördüğünüz üzere çok bir numarası yok. Sadece tek bir [] kullanmak yerine iki tane [][] kullanıyoruz. Eğer üç boyutlu olsaydı [][][] yapacaktık. İlk başta biraz beyin gıdıklar ama kullanıldıkça alışılır.


Comments

Leave a Reply

Your email address will not be published. Required fields are marked *