c etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
c etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

28 Ocak 2010 Perşembe

Diziler

Evet tiplerden bahsettiğimize göre çok önemli olan dizilere geçebiliriz.

Diyelimki bir sınıf var ve siz bu sınıfın yaşlarını tutmak ve ortalama, toplama gibi işlemler yapmak istiyorsunuz. Öğrenci sayısıda 30 olsun. Her bir öğrenci için ayrı ayrı INT tipinde değişken mi tanımlamamız gerekecek? İşte bu sorunu çözmek için "dizi" kullanabiliriz. Dizimizin boyutunu 30 olarak ayarlarsak 30 tane değişken tanımlamış gibi oluruz. Bunlara ulaşmak içinde "indis" dediğimiz bir değişken kullanırız.

Şimdi bunu gerçekleyelim;
C için;
int Ogrenciler[30];

dediğimiz zaman Ogrenciler değişkeni içiin 30 blok ayırdı. Eğer kod içinde 1. öğrenciye ulaşmak için Ogrenciler[0], 3. öğrenciye ulaşmak için ise Ogrenciler[2] dememiz yeterli olacak.

Peki neden 3. öğrenci için indisimiz 2 oldu. Dizilerde mantık her zaman indis 0 dan başlar. O yüzden ulaşmak istediğimiz yerin indisi (eksi)-1 olacak.

Char değişkeninde sadece bir harf tutabiliyorduk. Peki kelime tutmak istesek ne olacak?

İşte bunuda dizi ile çözebiliriz. Nasıl mı?

Char Soyadlar[20];

dersek; Soyadlar için 20 tane char girebilir demek olmuyor mu?

Soyadlar[0]='S';
Soyadlar[1]='e';
Soyadlar[2]='l';
Soyadlar[3]='a';
Soyadlar[4]='m';
Soyadlar[5]='t';
Soyadlar[6]='o';
Soyadlar[7]='ğ';
Soyadlar[8]='l';
Soyadlar[9]='u';

görüldüğü gibi soyadımı bir dizi içinde tutabildim.

Umarım anlaşılmıştır. Gelecek yazımda bununla ilgili bir örnek yapmayı düşünüyorum.

Bol algoritmalı günler...

13 Ocak 2010 Çarşamba

Program yazmaya başlayalım...

Çok uzun bir ara versekte tekrar başlayıp, en iyi yerlere gelmeye çalışacağız. Şimdi bir önceki yazımda algoritmaya değinmiştik. Tabi bu işler 30 satırlık bir yazı ile ne anlatılır ne de anlaşılabilir. Onun için örnekler ile bunu pekiştirmeye çalışacağız.

Örneğimize daha doğrusu problemimize gelince;

Elimizde bir kova mavi boya ve bir kova kırmızı boya(aynı boyutlarda) var. Bunları yer diğiştirmek..

Şimdi çözüme geçelim.

Hafif bir analiz yapalım;
Şimdi bunları yerdeğiştirmek için bir tanesini boşaltmamız gerekmez mi? Evet gerekir ama bunu toprağa dökmek yanlış olur herhalde? O zaman bu işlem için üçüncü kovaya ihtiyaç duyarız.

Şimdi mantığımızı toplayalım;
2'si dolu olmak üzere 3 tane kovamız var. 1. kovayı alıp 3. kovaya dökelim. Sonra da 2. kovayı 1. kovaya dökelim. Şimdi 2. kovadakini 1. kovaya yerleştirmiş olduk. 3. kovamızdakinide 2. kovamıza döktükmüydü bu işlem tamamlanmış olur.

Şimdi bunun kodlarını yazalım.

C# için kod parçacığı;
string tempKova = string.Empty; // 3. kovamızı oluşturduk.

tempKova = txtKova1.Text;
txtKova1.Text = txtKova2.Text;
txtKova2.Text = tempKova;

C için kod parçacığı;
char kova1, kova2, kova3;
kova1='S';
kova2='O';
kova3=' ';
printf("1. Kova=%c\n",kova1);
printf("2. Kova=%c\n",kova2);
printf("3. Kova=%c\n",kova3);
kova3 = kova1;
kova1=kova2;
kova2=kova3;
printf("Yer degistikten sonra...\n");
printf("1. Kova=%c\n",kova1);
printf("2. Kova=%c\n",kova2);
printf("3. Kova=%c\n",kova3);

burda dikkat etmemiz gereken 2 kodda da değişken tipleri aynı olmalıdır. Aksi takirde taşma ya da tip uyuşmazlığı olabilir.

Eğer bu sorunu örneğimize uygularsak;
3. kovamızın 1. kovamızdan küçük olduğunu düşünelim. Taşan kısme elimizde tutamayız değil mi? ya da 2. kovamız delikli olsun yine istediğimiz sonucu alamayız.

Şimdilik kodlar üzerine kafa yormayın eğer bilmiyorsanız. Onlara daha sonra değineceğiz...

Not: Hiç bir programın yapılış tarzı tek değildir. Farklı yapılabilir.

Hepinize bol kodlu günler..