Turktekno.net yeniden yayına başladı!! .
Uzun süren kesintinin ardından yeniden sizlerleyiz.

C++ Dersleri [4]

Yazar admin

Programlama dillerinden C++ ile ilgili öğretimlere devam ediyoruz. Hatırlanacağı üzere, bir önceki bölümümüzde örnekleme çalışmalarına başlamıştık. Bu dersimiz ile birlikte bu çalışmaları daha da ileri noktalara götürüp, bol örneklerle bilgimizi pekiştirmeye devam edeceğiz. Ayrıca "Değişkenler" konusuna da değineceğiz…

*3. bölümde verdiğimiz örnekleme çalışmalarıyla devam ediyoruz.


Şimdi size bir örnek daha vereceğim bununla da aynı çıktıyı elde edeceğiz. Arasındaki farkları eminim basit olarak sizlerde göreceksinizdir.

// ilk2.cpp
// Ekrana "Bu benim ilk programım" yazdırıyoruz
#include <stdio.h>
main()
{
printf("Selam bu benim ilk programım.\n");
return 0;
}

Evet şimdi burada çok fark varmış gibi gözüküyor aslında ama öyle değil. Sadece kütüphanemiz stdio.h oldu ve ekrana yazdır fonksiyonumuzda printf oldu. Bu özellik C den kalma. Bunlar diğer program ile aynı işlevi görüyor. Buradaki fark " \n " notasyonu. Bu noptasyon bir sonraki satıra geçmek için kullanılır. Bu notasyonlara Escape dizileri denir. Tablo olarak bunları size veriyorum. Son yazdığımız ilk2.cpp de yerlerine koyarsanız çalışacaktır.

Dizi:

Adı:

\a

Alarm

\b

Bir karakter geri (Backspace)

\f

Formu itekle

\n

Yeni satır ( yukarda kullandığımız (newline) )

\r

Return

\t

Yatay boşluk

Şu an bunları bilmemiz yeterli.

Programlara Açıklama Eklenmesi

Açıklama Nedir?
Değişkenleri tanımlarken dikkat ettiyseniz her C++ komutu ; (noktalı virgül) ile bitiyor. Bu derleyiciye komut yazımının bittiğini belitmek için kullanılıyor.
Programlar uzadıkça ve karmaşıklaştıkça programımıza bir daha ki bakışımızda neyi neden yaptığımızı unutabiliriz. Yada yazılmış olan programı bizden başka kişilerde kullanacak olabilir. Bundan dolayı ne yaptığımıza dair açıklamaları kodun içine serpiştirmeliyiz.
Yazdığınız komutlar basit fonksiyonları içersede detaylı şekilde açıklama eklemenizi öneririm. Böylecene aylar sonra kodunuza tekrar baktığınızda ne yaptığınızı kolayca hatırlayabilirsiniz. Başkası sizin kodunuza baktığında öğrenmesi çok hızlanacaktır.

Açıklamaları C++’ta nasıl tanımlayacaksınız?
C++ program içerisine iki şekilde açıklama eklemenize izin veriyor. Biri C’nin açıklama ekleme şekli olan // kullanılması. C++ derleyicisi // ‘den sonra satır boyunca yazılanların tümünü yok sayar.

Örneğin:
// Bu satır derleyici tarafından umursanmaz
// Ve ben satırın başına // yazarak bu satırın açıklama olduğunu belirtiyorum
// Aşağıda da örnek bir değişken tanımlanmıştır.
long ornek;

C++’ın C’den farklı olarak birden fazla satıra açıklama yazmayı sağlayan bir yapı daha vardır. Bu yapı /* ile başlar */ ile biter. Yukarıdaki örneği bu yapı ile aşağıdaki gibi tanımlayabiliriz.

/* Bu satır derleyici tarafından umursanmaz
Ve ben satırın başına // yazarak bu satırın açıklama olduğunu belirtiyorum
Aşağıda da örnek bir değişken tanımlanmıştır.*/
long ornek;

Basit Bir Program;

Program1:
Amaç: Ekrana, "Selam bu benim ilk programım" yazısını yazdırmak. Input:
#include <stdio.h>
  main()
  { printf("Selam bu benim ilk programım.\n");
  return 0;
  }

output: Selam bu benim ilk programım.

  • Burada,"stdio.h" denilen başlık dosyalarından biridir. Bu başlık dosaları içerisinde çeşitli işler gören farklı fonksiyonlar bulundururlar."
  • "main() " her programda bulunması gereken ana fonksiyondur. Bunsuz asla program yazılmaz.
  • printf(),stdio.h başlık dosyasında bulunan adından da anlaşılacağı gibi yazdırma fonksiyonudur. Yukarıda görüldüğü gibi yazılacak olan şey iki tırnak arasında fonksiyon içine yazılır.
  • "\n " simgesi "newline" karakter olarak adlandırılır.Bir sonraki satıra geçmek için kullanılır. "return 0" programdan çıkışı simgeler.
  • #include directive, işlemciye stdio.h başlık dosyasına bakmasını söyler. Aksi takdir de stdio.hiçerisindeki "printf "fonksiyonu bulunamaz ve program hata verir. Sabit ve Değişken Kavramı i=1 şeklinde bir atama yapıldığında 1 sabit sayı i ise değişkendir. Expression: (2+3)*5 işlemi expression olarak adlandırılır.

Statement: C dilinde, sonunda noktalı virgül ";" olan her ifade "statement" olarak adlandırılır.

Program2:
Amaç: İki sayıyı toplamak ve sonucu ekrana yazdırmak.

int integer_add(int x,int y)
  {
  int result;
  result=x+y;
  return result;
  }
  main(){
  int sum; sum=integer_add(5,12);
  printf("5 ve 12 sayılarının toplamı %d’dir.\n",sum);
  }

DEĞİŞKENLER

Değişken: Bilgisayarının belleğinde bilgi saklamak amacıyla ayrılmış özel bölmelere verilen isimlerdir. Değişkenler bizi uzun uzun bellek adresleri yazmaktan kurtarır. Böylece daha hızlı ve daha kolay bir şekilde bilgisayarımızın hafızasına ulaşır ve işlem yapabiliriz.
Değişkenler genel olarak 3 grupta incelenirler.
1.Veri tiplerine göre değişkenler
2.Tanımlama yerlerine göre değişkenler
3.Saklanış bildirilerine göre değişkenler

1.Veri tiplerine göre değişkenler: Veri tiplerine göre değişkenlere geçmeden önce veri ve veri tiplerinin neler olduğuna değinelim.
         Değişken ismi tanımlarken dikkat edilmesi gereken noktalar şunlardır:

  • Değişkenleri isimlendirmede yalnızca 63 karakter kullanılabilir. Bunlar İngiliz alfabesinde yer alan 26 karakter (küçük ve büyük harf olarak) :

a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z
A, B, C, D, E, F, G,H,I,J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z
Rakam karakterleri
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Alt tire (underscore) karakteri           _

  • Değişken isimleri rakam karakteriyle başlayamaz.
  • C büyük harf küçük harf duyarlığı olan bir dil olduğu için (case sensitive)   isimlendirmelerde de büyük harf ve küçük harfler farklı karakterler olarak ele alınacaktır.

yaz  YAz YaZ   Yaz    yAZ   yAz

  • Kullanılan isimlerin legal olmalarının dışında, anlamlı olmalarına, kodu okuyacak kişiye bir fikir verecek şekilde seçilmelerine de dikkat edilmelidir.
  • Değişkenler istenilen uzunlukta olabilir. Ancak derleyici ilk 31 harfi dikkate alır. C ile assembly  dili iç içe kullanıldığı zaman ilk 6 karakter aynı olmamalıdır. Çünkü böyle bir durumda ilk 6 karakter derleyici tarafından okunur.
  • Tanımlama işlemi noktalı virgül ile sonlandırılmalıdır.
  • Standard ANSI C dilinde 32 tane anahtar sözcük bulunmaktadır. Değişken olarak kullanılmaları yasaklanmıştır.

"auto   break    case    char   const   continue   default   do   double   else    enum    extern   float   for    goto if   int  long register   return    short    signed     sizeof     static     struct   switch    typedef union unsigned    void    volatile  while"

  • Kütüphane fonksiyonlarının isimleri değişken ismi olarak kullanılamaz.
  • Genelde değişkenlerin küçük, sabitlerin büyük harfle yazılması alışkanlık haline gelmiştir.
  • Boşluk hissi vermek istediğimizde _  kullanabiliriz.
  • Library rutinlerinin _ ile başlaması sebebiyle değişken tanımlarken herhangi bir çakışma olmaması için _ ile başlanmaması tercih edilir. Ancak kullanılmasında bir sakınca yoktur.

 int a;
unsigned long int var;
double MFCS;
 unsigned _ses;
signed short toplam;

  • Tip belirten anahtar sözcüklerin yazılmasından sonra aynı tipe ilişkin birden fazla nesnenin bildirimi, isimleri arasına virgül koyularak yapılabilir.

unsigned char ch1, ch2, ch3, ch4;
float FL1, Fl2;
unsigned total, subtotal;
int _vergi_katsayisi, VergiMatrahi;

  • Farklı tiplere ilişkin tanımlamalar virgüllerle birbirinden ayrılamaz.

long x, int y;  /* hata */

  • Tip belirten anahtar sözcük birden fazla ise bunların yazım sırası önemli değildir.

signed long int x;
signed int long x;
long signed int x;
long int signed x;
int long signed x;
int signed long x;

  • C dilinde eğer tanımlama blokların içinde yapılacaksa, tanımlama işlemi blokların ilk işlemi olmak zorundadır. Başka bir deyişle tanımlamalardan önce başka bir ifade bulunmamalı ya da tanımlamadan önce bir fonksiyon çağırılmamalıdır. (Yoksa derleme zamanı sırasında hata oluşur.)


   int  var1, var2;
   char ch1, ch2, ch3;
    var1 = 10;
    float f;                                /*hata*/
 }

Burada hata mesaj ile karşılaşmamak için;
              ** ifade {float f} şeklinde yazılabilir.
              **var1=10 ile float f ifadesi yer değiştirilebilir.

Satır sonunda fazladan kullanılmış bir ‘;’ işareti ve fazladan yazılmış {} yine hata mesajı ile karşılaşılmasına sebep olur. Çünkü C bunları birer komut satırı olarak algılar.

2.Tanımlama yerlerine göre değişkenler
a. Global tanımlanan değişkenler: Tüm program noktalarında geçerli olan değişkenlere denir, genel olarak da isimlendirilirler. Blok dışında tanımlanırlar. Hafızada data segmentinde yer alırlar. Program icrası boyunca yerlerini korurlar. Uzun ömürlüdürler.
b. Local tanımlanan değişkenler: Belirgin noktalarda geçerli olan değişkenlere denir, yerel olarak da isimlendirilirler. Blok içinde tanımlanırlar. Hafızada stack segmentinde yer alırlar. Bloğun icrası boyunca yerlerini korurlar. Kısa ömürlüdürler. Tanımladıkları bloğun dışında tanımsız kabul edilirler. Bu sebeple aynı değişken farklı bloklarda yeniden tanımlanabilir.
c. Formal tanımlanan değişkenler: Local tanımlanmayla aynı özellik gösterir. Fonksiyonlara parametre aktarımı için kullanılırlar.

3.Saklanış bildirilerine göre değişkenler
a. auto: Bu bildiri sadece blok içlerinde ve local değişken tanımlamak için kullanılır. Blok içlerinde tanımlanan değişkenlerin default saklama şekli auto’dur. Bu yüzden en az kullanılan değişken bildirimidir. İlk değer aktarımı auto ile yapılabilir. Ancak auto ile bildirilmiş diziler structure’ler için bu kural geçerli değildir. auto ile tanımlanan değişkenler için stack segmentinde yer ayrılır.

   auto int i;
   auto char isim[15];

b. register: auto gibi sadece blok içlerinde ve local değişken tanımlamak için kullanılır. register ile tanımlanan değişkenler için mikro işlemci registerlerinden biri ayrılır. Bu nedenle daha hızlıdır. Değişkenler 2 byte uzunluğunu aşmamalıdır. Değişkenler char, int ve pointer olarak seçilmelidir. Seçilmediğinde hata mesajı ile karşılaşılmaz. Ancak bildirim register olarak derlenmez. register icrası sona erdiğinde değişken için ayrılan register boşalmış olur.

   register int a; b=a+10
   register double tut;

c. ekstern: Tanımlanması henüz yapılmamış ya da başka bir dosyada tanımlanmış değişkenlerin C tarafından kabul edilmesini sağlar. Blok içinde veya dışında tanımlanabilirler. Sembolik eğişken tanımıdır. Bu bildirim ile ilk değer aktarımı yapılamaz. Çünkü belirgin bir değeri içeren başka bir değişkeni temsil ettiği kabul edilir.

              extern float z;
              extern long maliyet;

d. statik: Blok içinde ve blok dışında tanımlanabilir. Bu bildiri ile tanımlanmış değişken tanım noktasından program sonuna kadar olan alan üzerinde kullanılabilir. Tanımlanmadan önce kullanılamazlar. Sembolize edilemezler. Blok içinde tanımlandığında değişken bellekteki yerini kaybetmez. Daha sonra program yeniden çalıştırıldığında önceki değeri kullanır. İlk değer aktarımı yapıldığında aktarım ilk icra için geçerlidir. Daha sonraki çalıştırmalarda işlemlerden elde edilen değer kullanılır. Dizilere, structurelere ve unionlara ilk değer aktarımı yapmak için kullanılabilir.

       static short wrt=10;
       static char mesaj[20];

e. volatile: Derleyici programları derlerken bazen değişkenlerin içeriklerini bellek kullanımı ve hız açısından değiştirebilir veya bozabilir. Bu tarz derlemelere girilmesi istenmeyen değişkenler volatile bildirisi ile tanımlanır.

        volatile unsigned int yatirim;
        volatile long double kil;

Şimdi bize yine çok lazım olacak bir özellik de değişken tanımlamak ve atama yapmaktır. Bunu bir örnek üzerinde anlatmak istiyorum. Örneğimiz;

// degisken.cpp
// Burda değişken tanımlamayı göreceğiz.
// Aynı zamanda verilen bir sayıyı kendisi ile carpma 2.2=4 gibi
#include <iostream.h>
#include <stdio.h>         // kütüphane dosyamız
main()
{
      int i;               // Değişken tanımlama
      cout << "Bir sayı giriniz: "; 
      cin >>  i;       
      i=i*i;
      cout << "sonuc: " << i ;
return 0;
}

Burada bundan önce yaptığımız programlardan farklı olarak int i kullandık, yani değişken tanımladık.

c = ‘c ‘;
sayi = 100;

Aynı anda birden fazla değişken tanımlanabilir, ve aynı anda birden fazla değişkene değer atanabilir;

int i , j , k;
i = j = k = 100;
i,j,k’nın değeri 100 oldu.

Faruk Alkaya
Selçuk Üniversitesi - Teknik Eğitim Fakültesi

Sonraki makale konumuz "Operatörler"…. 

Yorum Yapın