28 Ocak 2010 Perşembe

Tümleme Programı

Sorumuz; Mesela elimizde 10010110 diye dizimiz olsun. İlk önce birleri sıfır; sıfırları bir yapıp(01101001) sonra ikilik sistemde bir ekleyen program yazalım. Sonuc 01101010 olacak.

C 'ye göre programımız;

char dizi[9];
int i=0,elde=1;

for(i=0;i<8;i++)
scanf("%d",&dizi[i]);

for(i=0;i<8;i++)
{
if(dizi[i]==0)
dizi[i]=1;
else dizi[i]=0;
}

for(i=0;i<8;i++)
printf("%d",dizi[i]);

for(i=7;i>-1;i--)
{
switch(elde)
{
case 0: if(dizi[i]==0)
{
elde=0;
dizi[i]=0;
} else
{
elde=0;
dizi[i]=1;
}
break;
case 1: if(dizi[i]==1)
{
elde=1;
dizi[i]=0;
} else
{
elde=0;
dizi[i]=1;
}
break;

}
}
printf("\n");
for(i=0;i<8;i++)
printf("%d",dizi[i]);

Not : Her zamanki gibi farklı ve daha basit yöntem ile çözülebilir.

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...

27 Ocak 2010 Çarşamba

Tipler ile İlgili Bilgi

Evet yine beraberiz.. Biraz yavaş gidiyorum ama bilgileri birden verip sıkmak istemiyorum. Bu seferde size "tipler" hakkında ufak bilgi vereceğim.

Her zamanki gibi çok fazla bilgi verip sizi derin denizlerde boğulmaya bırakmayacağım. Genelde tipler anlatılırken bir sürü tip verilir. Bu tipleri yerinde kullanmak çok önemlidir fakat şu anda hiç kimse (bu yazıyı okuyanlar) bir yerde çalışıp büyük projelere imza atmıyordur. O yüzden 2 tane tipi açıklayacağım sadece.

İlk önce " Tipi Nedir? " ondan bahsedelim.
Tip, değişkenlerin içeriğine hangi bilginin geleceğini belirlediğimiz bir özellik diyebiliriz. Mesela sayısal tipinde tanmladıysak, içine sadece sayı alabilir. Aslında bu bir nevi veri güvenliğini sağlıyor. Seçtiğimiz her tipin bir boyutu oldğunu da düşünürsek gereksiz yere fazla yer veya az yer ayırmış olmamamız gerekir ama bu bilgi şu an için önemli değil sadece bilin yeter.


Şimdi de tipleri 2'ye ayıralım. Sayısal ve Karakterler diye.

Sayısal; Üzerinde matematik işlemi yapmamız gerekirse bu tipi kullanacağız.
Örnek; 12, 2, -78, 69.43, 72.544 gibi
Buna Int denir.

Karakter; Üzerinde işlem yapmamız gerekli değil ise bu tipi kullancağız.
Örnek; Ö, S, 3, gibi
Buna Char denir.

Dikkat ettiyseniz Karakterde sayıları kullanabiliyoruz fakat sayısalda karakterleri kullanamıyoruz.

Not: Kafanızı karıştırmamak için sadece iki tipden bahsettim. Zaten ilerki programlarımızda diğerlerine değineceğiz.

18 Ocak 2010 Pazartesi

Değişkenler Konusu

Bugün size değişkenlerden bahsedeceğim. Bakalım neler çıkacak ortaya.

Her zaman yapmaya çalıştığım gibi gerçek hayattan örnekler vermeye çalışacağım. Böyle anlatılması daha doğru ve akılda kalıcı olduğuna inanıyorum.

Değişkenler bilgileri saklayabildiğimiz yerlerdir. Bu sanal bir açıklama.
Peki bunu gerçekleştirelim. Konteyner kargo gemilerini düşünelim. Konteynerların hepsi aynı büyüklükte ve renkte ise bunları nasıl ayırt edebiliriz? Üstünde yazan etiket ile bu işlemi yapabiliriz değil mi?
Konteynerlara değişken dersek içindekilere "bilgi", etiketinede "değişken ismi" demiş oluruz.

Değişkenler hakkında daha fazla şey söylenebilir tabiki ama şuanda kafa karıştırmaya gerek yok. Mesela yaşam alanları diye önemli bir konu var. Bunuda fonksiyonlarda ele almayı düşünüyorum.

Bol kodlu 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..