duyuruElektroArge.com'a Hoşgeldiniz. Üye Olmak İçin Tıklayın. duyuru





houseForum ana sayfa   iletişimİletişim   bilgiSSS  
kırmızı yeşil mavi
ekleKayıt  anahtarGiriş
evForum ana sayfa goE-Kütüphane goE-Ders goC
 

  • Reklam

Ders 4 Değişkenler

C Dili Dersleri - Okan Bilke

Ders 4 Değişkenler

Mesajgönderen okanbilke » 29 Nis 2013 03:19

Değişkenler her programlama dilinde bulunurlar. Değişkenler değeri programcı tarafından belirlenen ifadelerdir. Kendimiz bir değişken ismi belirleriz ve bu değişkene bir tür seçerek onu tanımlarız. Daha sonra program içerisinde bu değişken ismi ile değişkene atadığımız değeri kullanırız. Değişkeni tanımladığımızda, bellekte tanımladığımız değişken için bir yer ayrılır. Bu yere değişkenin ismi verilir ve içine de değişkene atadığımız değer konur. Örneğin pi isminde bir değişken tanımlayarak değerini 3,1415 olarak belirlediğimizi düşünelim. Bu durumda değişkenimizi şu şekilde tanımlarız:
double pi=3.1415;

Bu tanımlamadan bellekte pi isimli değişkenimiz için bir kutu açılacaktır ve içine 3.1415 değeri koyulacaktır:
Pi
3.1415

Program içerisinde 3.1415 değerini kullanmak istediğimizde yapacağımız tek şey kutunun ismini (pi) kullanarak 3.1415 değerine ulaşmak olacaktır.
Program içerisinde daha sonra bu değişkenin değerini(kutunun içindeki değeri) istediğimiz şekilde değiştirebiliriz.
Şimdi örnek bir program üzerinde değişken kullanımını inceleyelim.
//degiskenler.cpp - 28.04.2013 - Okan BİLKE -www.elektroarge.com

#include <stdio.h>

int main()
{
double pi=3.1415;
printf("PI nin degeri: %f",pi);
getchar();
return 0;
}

Programımızın çıktısı:
PI nin degeri: 3.141500
olacaktır.
Şimdi bu programımızı inceleyelim. Programımızın bizi en çok ilgilendiren satırı değişkenimizi tanımlayıp değer verdiğimiz 8. satırımızdır. Bu satırda, double türünde, pi isminde, değeri 3.1415 olan bir değişken tanımlıyoruz. Değişkenimizin ismi pi'dir. Bu ismi ona biz verdik. Belli kurallara uymak kaydıyla istediğimiz başka bir ismi de verebilirdik. Örneğin: sayi, oran gibi.
Değişkenin TürüDeğişkenin İsmiDeğişkenin Değeri
doublepi= 3.1415;

Değişkenleri tanımlamak için türlerini belirtmek zorundayız. Bir değişken tanımlandığında, bilgisayarımızın belleğinde bu değişkene ait değişkenin türüne göre bir yer ayrılacaktır. Bizim örneğimizde 8. satır işletildiğinde bellekte 8 byte'lık yer ayrılacaktır ve bu yerin ismi pi olacaktır.
Değişkenleri tanımlarken türlerini belirtmek zorunda olduğumuzu söyledik. Ancak değişkenlerin ilk değerlerini onları tanımladığımız satırda vermek zorunda değiliz. Örneğin;
double pi = 3.1415;

satırını şu şekilde de yazabilirdik:
double pi;
pi = 3.1415;

Burda double pi; satırı ile yine bir değişken tanımlamış olduk. Bellekte yine 8 byte'lık bir yer ayrılmış oldu. Bir alt satırda da ayrılan bu yere 3.1415 değerini atadık.
Tek satırda birden fazla değişken tanımlayabiliriz. Bu durumda o satırda geçen tüm değişkenler aynı türe ait olur:
double not1, not2, not3;

not1, not2 ve not3 değişkenlerinin üçü de double türündendir.
Değişkenlerimizi istediğimiz türde belirleyebileceğimizi söylemiştik. Ancak bir değişkene değer atarken bu değerin değişkenin türü ile sınırlı olacağını unutmamalıyız. Değişkenlerin sınırlarını ayrıntılı olarak 3. Dersimiz olan Veri Türleri dersinden inceleyebilirsiniz. Bu dersimizdeki tabloya göre, örneğin, char tipindeki değişkenimize 420 değerini veremeyiz. Yukarıdaki örneğimizde pi değişkeninin türünü double olarak belirledik çünkü kullanacağımız 3.1415 ifadesi bir gerçek sayıdır ve double türü ile ifade edilmelidir. double türü yerine float veya long türü de kullanabilirdik.
Gördüğünüz gibi değişkenlerimizin değerini belirlemek için sınırlar içinde kalmak kaydı ile istediğimiz değeri kullanabiliyoruz. Değişkenlere atadığımız bu değeri program içerisinde değiştirebileceğimizi söylemiştik. Şimdi bunu bir örnekle görelim.
//degiskenler2.cpp - 29.04.2013 - Okan BİLKE -www.elektroarge.com

#include <stdio.h>

int main()
{
double oran = 2.17;
printf("oran: %f\n",oran);

printf("degiskenin degerini degistirelim...\n");
oran=4.4442;

printf("oran: %f\n",oran);
getchar();
return 0;
}

Programımızın çıktısı şu şekilde olacaktır.
oran: 2.170000
degiskenin degerini degistirelim...
oran: 4.444200

Programımızı inceleyecek olursak 7. satırda double türünde oran isminde ve 2.17 değerinde bir değişken tanımladık.
8. satırda, değişkenimizin değerini ekrana yazdırıyoruz:
oran: 2.170000

11.satırda değişkenimizin değerini 2.17'den 4.4442'ye değiştiriyoruz. Bu satırın 7. satır ile çok önemli bir farkı vardır: 7. satırda biz türünü belirterek yeni bir değişken oluşturmuştuk. Bu değişkeni oluşturduğumuzda bilgisayarımızın belleğinde 8 Byte'lık bir yer ayrılmıştı ve ayrılan bu yere oran adı verilmişti. Şimdi ise 11. satırda 8 Byte'lık yerin sadece değerini değiştiriyoruz. Bellekte ayrıca bir yer oluşturmuyoruz.
11. satırda değerini değiştirdiğimiz değişkenimizi 13. satırda ekrana yazdırarak değişikliği gözlemliyoruz:
oran: 4.444200

Değişkenlere isim verirken belirli kurallara uymak zorunda olduğumuzdan bahsetmiştik. Şimdi bu kuralları inceleyelim.
  1. Değişken isimleri alfanümerik bir karakter ile başlamalıdır:(Bu kuralın tek istisnası alt çizgi karakteridir.(_) Değişken isimleri alfanümerik karakterler haricinde alt çizgi ile de başlayabilirler)
    Alfanümerik Karakterler; rakamlar, noktalama işaretleri, özel karakterler ve boşluk karakterleri dışında kalan karakterlerdir(yani yalnızca harfler). Değişken isimleri alfanümerik bir karakterle başlamak zorundadır. Özel bir karakterle veya bir sayı ile başlayamaz. Ancak sayılar değişken ismi içerisinde bulunabilir.
    Geçerli TanımlamalarGeçersiz Tanımlamalar
    int katsayi;int 2katsayi;
    char aktifCh;char 99aktifCh;

  2. Değişken isimleri özel karakterler ve boşluklar içeremezler:Değişken isimleri altçizgi karakteri dışında özel karakterler ve boşluk içeremezler.
    Geçerli TanımlamalarGeçersiz Tanımlamalar
    int oranGir;int oran gir;
    double pi;double pi?;
    long aktifID;long aktif-ID;

  3. C için ayrılmış kelimeler değişken ismi olarak kullanılamazlar: Bu dersimizin sonunda değineceğimiz bazı kelimeleri C kendi kullanımı için ayırmıştır. Bu kelimeleri biz programcılar değişkenlerimizi isimlendirmek için kullanamayız. Örneğin int sözcüğü C için bir tür belirleyicidir. Bu yüzden ayrılmıştır.
    Geçerli TanımlamalarGeçersiz Tanımlamalar
    int tamsayi;int int;
    long katAl;long double;

  4. Değişken isimlerinin uzunluğu 31 karakteri geçmemelidir: Kullanacağımız değişkenlerin uzunluğu en fazla 31 karakter olmalıdır. Birçok sistem için ilk 31 karakter anlamlıdır. Zaten çok uzun değişken isimleri programcı için de mantıklı değildir.
  5. Değişken isimlerinde büyük-küçük harf farkı vardır: C, büyük küçük harf duyarlılığı olan case sensitive bir dildir. Bu C için 'a' ve "A" karakterlerinin aynı şeyi ifade etmediği anlamına gelir. C için int max, int MAX, int Max tanımlamalarının hepsi birbirinden farklıdır.
Şimdi gördüğümüz bilgiler ışında tüm türlerle ilgili bir program yazalım ve bu türlerin değerlerini printf yardımıyla ekrana yazdıralım.
//degiskenler3.cpp - 29.04.2013 - Okan BİLKE -www.elektroarge.com

#include <stdio.h>

int main()
{
//degiskenlerimizi tanimlayalim

int tams = 7; //tamsayi
unsigned int uTams = 55000; //isaretsiz tamsayi

short kisaTams = 30000; //kisa tamsayi
unsigned short uKisaTams = 60000; //isaretsiz kisa tamsayi

long uzunTams = 398162092; //uzun tamsayi
unsigned long uUzunTams = 4047483649; //isaretsiz uzun tamsayi

char karakter = 125; //karakter
unsigned char uKarakter = 252; //isaretsiz karakter

double realDouble = 97223.787844; //ondalikli gercek sayi
float realFloat = 223.52; //ondalikli gercek sayi

//degiskenlerimizi yazdiralim

printf("tamsayi: %d \n",tams);
printf("isaretsiz tamsayi: %u \n",uTams);

printf("kisa tamsayi: %d \n", kisaTams);
printf("isaretsiz kisa tamsayi: %u \n", uKisaTams);

printf("uzun tamsayi: %ld \n",uzunTams);
printf("isaretsiz uzun tamsayi: %u \n",uUzunTams);

printf("karakter: %d \n", karakter);
printf("isaretsiz karakter: %d \n", uKarakter);

printf("double: %f \n",realDouble);
printf("float: %f \n",realFloat);

getchar();
return 0;
}


Programımızın çıktısı şu şekilde olacaktır:
tamsayi: 7
isaretsiz tamsayi: 55000
kisa tamsayi: 30000
isaretsiz kisa tamsayi: 60000
uzun tamsayi: 398162092
isaretsiz uzun tamsayi: 4047483649
karakter: 125
isaretsiz karakter: 252
double: 97223.787844
float: 223.520004


Değişkenleri İsimlendirirken Nelere Dikkat Etmeliyiz?
Değişkenlere istediğimiz ismi verebileceğimizden bahsettik. Ancak bu, bir değişken tanımlarken ona aklımıza gelen ilk ismi ya da çok sevdiğimiz bir ismi vermeliyiz anlamına gelmiyor. Yani ayy bu değişken çok tatlı oldu dur ben buna kedimin adını vereyim demeyin :) şaka bir yana değişken isimlerini ne koyarsanız koyun bu C için pek birşey farkettirmeyecektir. Bu açıdan baktığımızda istediğimiz değişken ismini, kurallara uyduğu sürece istediğimiz yerde kullanabiliriz. Ancak biz programcılar için aynı şey geçerli değildir. Bizim için değişken isimleri de çok önemlidir.
Değişken isimleri programın okunabilirliğini(readability) konusunda önemlidir. Okunabilirlik bir programın onu inceleyen bir programcı tarafından ne kadar kolay anlaşılabildiğinin bir ölçüsüdür. Bir program ne kadar anlaşılabilir ise o kadar okunabilirdir. Değişken isimleri de okunabilirlikte önemli bir yer tutar. Seçtiğimiz değişken isimleri, herşeyden önce bir anlam ifade etmelidir. Örneğin
int ortalama;

şeklinde bir tanım bu değişkenin içerisinde bir şeyin ortalamasının tutulacağını belirtir. Biz bu tanımlamayı
int x;

şeklinde de yaparak içinde ortalama tutabilirdik. Ancak programımızı inceleyen biri,
int x;

satırını gördüğünde x değişkeninin ne iş yaptığını anlayamaz. Bunu bulmak için program içinde x değişkeninin kullanıldığı diğer satırlara bakarak bir tahmin yürütebilir. Programımız 20 satırdan oluşuyorsa bu sorun olmayabilir ama peki bin satırdan oluşuyorsa? Bu yüzden değişken isimlerimizi mümkün olduğu kadar anlamlı sözcüklerden seçmeliyiz. Programımızı yazarken mutlaka bizim dışımızda birinin de bu kodları okuyacağını düşünmeliyiz. Böyle birşey olmayacak olsa bile bu düşünce ile programlarımızı yazmalıyız.
Değişken isimlerini anlamlı sözcüklerden seçmenin yanı sıra değişkenin tanımlandığı satıra o değişkenin görevini yorum şeklinde yazmak da güzel bir kodlama alışkanlığıdır:
int ortalama;  //1. siniflarin matematik notu ortalamasi

Büyük yazılım projeleri aynı anda birçok kişinin aynı program üzerinde sistemli bir şekilde çalışması ile gerçekleşir. Günümüzde artık tek başına çalışan programcılar azaldı çünkü çağımızın yazılım gereksinimleri tek bir kişinin program yazması ile karşılanabilecek gibi değil. Bu yüzden özellikle bir grup çalışması yaparken program içinde kullanılacak isimlendirmeler çok önemlidir. Yazdığınız program üzerinde sizin dışınızda onlarca kişi daha çalışabilir. Onların, sizin programınız üzerinde hızlı çalışabilmeleri çok önemlidir.
Şimdi okunabilirliğin önemini görmek için bir program yazalım. Bu programı iki değişik şekilde yazacağız: İlkini bahsettiğimiz yöntemler olmadan, ikincisini ise okunabilirliği yüksek bir şekilde yazmaya çalışacağız.
//okunabilirlik.cpp - 29.04.2013 - Okan BİLKE -www.elektroarge.com
#include <stdio.h>
int main(){ printf("bu cok basit bir program "); printf("olmasina ragmen ");
printf("okunabilirligi "); printf("cok dusuk"); getchar(); return 0; }

Çok karışık görünüyor değil mi? Aslında oldukça basit bir program. Yaptığı iş şu cümleyi ekrana yazmak:
bu cok basit bir program olmasina ragmen okunabilirligi cok dusuk

Programımızı şu şekilde de yazabilirdik:
//okunabilirlik2.cpp - 29.04.2013 - Okan BİLKE -www.elektroarge.com

#include <stdio.h>

int main()
{
printf("bu cok basit bir program ");
printf("olmasina ragmen ");
printf("okunabilirligi ");
printf("cok dusuk");
getchar();
return 0;
}

Değişkenlerin Ömrü
Değişkenlerin tür, isim ve değer özelliklerinin dışında ömür(Scope) özelliği vardır. Değişkenler, tanımlandıkları andan itibaren yaşamaya başlarlar. Tanımlandıkları blok son bulduğunda değişkenlerin ömrü de son bulur. C de süslü parantezler arasında kalan alanlar blok olarak adlandırılır.
int main()
{
.
.
}

Gördüğünüz gibi şimdiye kadar yaptığımız tüm örneklerde zaten blok kullandık. Her fonksiyonun bir bloğu vardır(hatırlayacağınız gibi main() de özel bir fonksiyondu) İleriki derslerimizde de diğer özel fonksiyonlara değineceğiz. Blokları süslü parantez karakterleri ile biz kendimiz de belirleyebiliriz. Örneğin main() fonksiyonu içerisine bir blok ekleyelim. Bu konu özellikle programcılık gören öğrencilerin çok düştüğü bir konudur. Dikkatle incelemenizi tavsiye ederim.
int main()
{
..
{
//bu alan bizim bloğumuz
}
..
}

main() fonksiyonu içerisinde oluşturduğumuz blok { karakteri ile başlar, } karakteri ile son bulur.
İşte değişkenler, tanımlandıkları blok içerisinde kullanılabilirler. Yani bir değişkeni hangi blok içerisinde tanımladıysak, sadece o blog içerisinde ismini yazarak kullanabiliriz. O bloğun dışında değişkenlerimizi kullanamayız. Blok kullanımını fonksiyonlar konusunu gördükten sonra daha iyi anlayacağız. Şu anda kullandığımız tek blok main() fonksiyonuna ait olan bloktur. Şimdi main fonksiyonu içerisinde bir blok da biz oluşturalım ve o blokta bir değişken tanımlayalım:
int main()
{
int uzunyasayandegisken;
{
int kisayasayandegisken;
}
//kisayasayandegisken burada kullanilamaz
//printf(kisayasamlidegisken); ==> hata
}

Örneğimizde iki adet blok bulunuyor: Birinci blok 2. satırda başlıyor ve 9. satırda son buluyor. İkinci blok ise 4. satırda başlayıp 6. satırda son buluyor. Şimdi 3. satırda tanımladığımız uzunyasayandegisken isimli değişkenimiz, 2. satırda başlayan bloğa ait olduğu için 2 ve 9. satırlar arasında heryerde kullanılabilir.
5. satırda tanımladığımız kisayasayandegisken isimli değişken ise sadece 4 ve 6. satırlar arasında geçerlidir. Bu değişkeni örneğin 8. satırda kullanmaya kalkarsak derleyici bize böyle bir değişkenin tanımlanmadığını söyleyerek hata verecektir. Çünkü kisayasamlidegisken değişkenimizin ömrü 6. satırdaki } karakteri ile bitmiştir.
Şimdi başka bir örnek ile anlattıklarımızı inceleyelim:
//scope.cpp - 29.04.2013 - Okan BİLKE -www.elektroarge.com

#include <stdio.h>

int main()
{

int uzunyasam=2;
{

int kisayasam=7;
printf("kisa yasamli degisken: %d \n", kisayasam);
printf("uzun yasamli degisken: %d \n", uzunyasam);
}

//printf("kisa yasamli degisken: %d \n", kisayasam);
printf("uzun yasamli degisken: %d \n", uzunyasam);

getchar();
return 0;
}

Programımız bu şekilde gayet düzgün çalışacaktır ve ekrana aşağıdaki satırları yazacaktır:
kisa yasamli degisken: 7
uzun yasamli degisken: 2
uzun yasamli degisken: 2

Yukarıda da belirttiğimiz gibi 11. satırda tanımladığımız kisayasam isimli değişkenimiz sadece 9. ve 14. satırlar arasında kullanılabilir. Bu yüzden 16. satırın başında // yorum karakterlerini ekleyerek bu satırı derleyiciden gizledik çünkü bu satır hata verecektir. kisayasam isimli bir değişkenin tanımlanmamış olduğunu söyleyecektir.
Şimdi değişkenlerle ilgili bir başka program yapalım ve bir dairenin alanını ve çevresini hesaplayalım.
//scope2.cpp - 29.04.2013 - Okan BİLKE -www.elektroarge.com

#include <stdio.h>

int main()
{
float r=3.5; //dairenin yaricapi
float pi=3.1415; //PI sabiti
float cevre;
float alan;

//hesaplamalar
cevre = 2 * pi * r;
alan= pi * r * r;

//ekrana yazdir
printf("dairenin cevresi: %f cm \n", cevre); //cevre
printf("dairenin alani: %f cm2 \n", alan); //alan

getchar();
return 0;

}

Bu kodun yarıçapını kullanıcıdan alan versiyonu için: topic160.html adresine bakabilirsiniz. Kodlarımızın çıktısı şöyle olacaktır:
dairenin cevresi: 21.990499 cm
dairenin alani: 38.483376 cm2

Değişkenler konusu dersimiz burada bitiyor. Gerçekten uzun bir ders oldu umarım çok uzun diye geçmeyip buraya kadar okuyabilmişsinizdir. Benimde yaklaşık 4-5 saattir uğraşmam gerekti. Dersimizi bitirmeden önce konu içinde söylediğim gibi C'nin kendine ayrılmış kelimelerine değinip dersimizi bitirelim.

Ayrılmış(Reserved) Kelimeler
C'de değişken ismi olarak kullanamayacağımız bazı sözcükler vardır. Bu sözcükler C'nin kendi kullanımı için özel olarak ayrılmıştır. Örneğin if sözcüğü gibi. if sözcüğü ileriki derslerimizde detaylı olarak göreceğimiz gibi C'nin karar yapılarında kullanılan bir ifadedir. Bu sözcüğü değişken ismi olarak veya başka amaçlar için kullanamayız. C'nin diğer ayrılmış sözcükleri şöyledir:

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
Bazı derleyiciler kendi özel ayrılmış kelimelerini de belirleyebilirler. Eğer böyle birşey söz konusu ise bu durum derleyici dökümantasyonunda belirtilir. C'de tüm ayrılmış kelimeler küçük harflerden oluşur. Evet arkadaşlar zor da olsa değişkenler konumuzu bitirdik. Değişkenler C'nin temeli olduğu ve her programda istisnasız kullanıldığı ve internette bu konuya olan önemin azlığınıda göz önünde bulundurarak uzun bir ders hazırladım. Biraz uzun olsa da umarım dayanmışsınızdır ve işinize yarar. Bir sonraki dersimiz "Sabitler" dersinde görüşmek üzere...

Ders İçinde Yazılmış Tüm Programlar ve Kodları Ektedir.
Mesaj içeriğini görmek için kayıt ve giriş gerektirir


DERS 5 - SABİTLER

C Dili Dersleri Ders Listesi
okanbilke@gmail.com
Kullanıcı avatarı
okanbilke
Site Kurucusu
Site Kurucusu
 
Mesajlar: 721
Beğendiklerim: 0 mesaj
Beğenilenlerim: 0 mesaj
Kayıt: 15 Mar 2013 13:09
Konum: Ankara

Reklam

Re: Ders 4 Değişkenler

Mesajgönderen BelkiOlur... » 16 Ağu 2016 23:21

Ders bana çok kısa geldi son paragrafta söylediklerinizi aksine. :) Bi çırpıda okuyup unuttuklarımı tekrarlamış oldum. Uzun zamandır C derslerime devam etmiyodum zamanım olmadığı için. Ama artık C ile birlikte Java derslerine de başlamayı düşünüyorum. Size gerçekten çok teşekkür ederim emeklerinizden ötürü. Bu sitenin değeri bilinmiyo. Bunu ilk üye olduğum andan beri hep söyler dururum kendi kendime. İnş sunucu sorunlarından ötürü veya yeterli ilgiyi görmediği için bu site kapanmaya mahkum olmaz. Ben ve benim gibiler yıllarca faydalanmaya devam eder umarım.
Kullanıcı avatarı
BelkiOlur...
Çırak
Çırak
 
Mesajlar: 4
Beğendiklerim: 0 mesaj
Beğenilenlerim: 0 mesaj
Kayıt: 12 May 2015 16:32


Dön C

Kimler çevrimiçi

Bu forumu gezen kullanıcılar: Hiç bir kayıtlı kullanıcı yok ve 0 misafir


  • Reklam