31 Ağustos 2015 Pazartesi

C ve C++ KONU ANLATIMLARI 1 - BASİT C PROGRAMLARI

Bu konu anlatımı dizisinde üniversitede C programlama dersi gören ya da C programlamaya merakı olan ve hobi olarak öğrenmek isteyen okuyucular için kademeli olarak C programlama konu anlatımları yer almaktadır. Yazılım konusunda diğer istekleriniz ve sorularınız için yorum bölümüne yazmanız yeterli olacaktır.


BASİT C PROGRAMLARI - BİR METNİ YAZDIRMAK

     C'deki bazı özel yazım biçimleri eğer daha önceden C ile programlama yapmadıysanız size garip gelebilir. Ama zamanla bu özel yazım biçimlerine alışacaksınız. İsterseniz basit bir programla başlayalım. İlk örneğimiz, bir satırlık bir metni bilgisayarda yazdırmak ile ilgilidir. Program ve programın bilgisayardaki çıktısı aşağıdaki şekilde ( Şekil 2.1 ) gösterilmiştir.



1  /* Şekil 2.1:fig02_01.c
2  C ile ilk program */
3  #include<stdio.h>
4
5  int main ( )
6  {
7  printf ( "C'ye hoş geldiniz!\n" ) ;
8
9  return 0;
10  }


C'ye hoş geldiniz!


Şekil 2.1 Metin yazdırma programı


     Her ne kadar basit bir program olarak gözükse de C'nin çok önemli bir kaç özelliğini bu sayede tanımış oluyoruz. Şimdi programı satır satır, daha detaylı bir biçimde inceleyelim.1 ve 2 numaralı satırlar /* ile başlayıp */ ile bitmektedir. Bu işaretler arasına yorumlar yazılır. Yorumlar yazmak, okunurluğu artırmak amacıyla özellikle uzun programlarda kullandığımız bir özelliktir. Yorum satırlarında bilgisayar hiçbir işlem yapmaz çünkü C derleyicileri bu satırları atlar. Dolayısıyla, yorum satırları için makine diline çevrilmiş kodlar oluşturulmaz. Programımızdaki yorum satırı ise şekil numarasını, dosya adını ve programın amacını açıklamaktadır.Yorumlar, diğer kişilerin programınızı anlamasında yardımcı olur ancak çok fazla yorum programın okunurluğunu azaltır.

Genel Programlama Hataları 2.1
Yorum satırının sonuna */ işaretini koymayı unutmak

Genel programlama hataları 2.2
Yorum satırına */ ile başlamak ve /veya yorum satırını /* ile bitirmek.

3. satırda karşılaştığımız
#include <stdio.h>
C önişlemcisine bir emir göndermektedir. # işaretiyle başlayan satırlar, program derlenmeden önce önişlemci tarafından işlenirler. Bu satır, önişlemciye standart giriş/çıkış öncü dosyasının (stdio.h) içeriğini programa eklemesini söyler. Bu öncü dosya, derleyicinin printf gibi standart giriş/çıkış fonksiyonlarını derlerken kullanacağı bilgi ve bildirimleri içerir. Öncü dosya ayrıca, derleyicinin kütüphane fonksiyonu çağrılarının doğru yapılıp yapılmadığını anlamasında yardımcı olan bilgiler içerir. Öncü dosyalar hakkında daha detaylı bilgiyi 5.ünitede vereceğiz.

İyi Programlama Alıştırmaları 2.1
<stdio.h> öncü dosyasının eklenmesi tercihe bağlıdır fakat standart giriş/çıkış fonksiyonlarının kullanıldığı programlara eklenmelidir. Bu sayede, derleyici, hataları derleme anında bulabilecektir. Aksi takdirde, hatalar programın çalıştırıldığı anda ortaya çıkar. Bu tür hataların düzeltilmesi oldukça güç olur.

5.satırdaki
int main( )
her C programının bir parçasıdır. main kelimesinden sonraki parantezler main'in fonksiyon adı verilen program oluşturma bloklarından biri olduğunu gösterir. C programları bir veya birden fazla fonksiyon içerebilir ancak bunlardan biri mutlaka main olmalıdır. C'de her program main fonksiyonunu çalıştırarak başlar.

İyi Programlama Alıştırmaları 2.2
Her fonksiyondan sonra fonksiyonu anlatan bir yorum satırı yazılmalıdır.
Küme parantezi, { , her fonksiyonun gövdesinin başına yazılır. Diğer küme parantezi , } , ise her fonksiyonun sonuna yazılmalıdır. Bu iki parantez arasında kalan program parçacığına blok denir. Bloklar C'de önemli program birimleridir.

7.satırdaki

printf ( "C'ye hoş geldiniz!\n" ) ;

bilgisayara bir iş yaptırır. Yaptırdığı iş, iki tırnak işareti arasındaki karakterleri ekrana yazdırmaktır. Yazdırılacak karakterlerin tümüne karakter dizesi ( string ), mesaj ya da hazır bilgi ( literal ) denir. printf, parantezler içindeki bağımsız değişkenler (argument) ve noktalı virgülden oluşan bu satıra ifade denir. Her ifade noktalı virgül ile bitmelidir.(Noktalı virgüle ifade sonlandırıcı da denir) Az önceki printf ifadesi çalıştırıldığında ekrana, C'ye hoş geldiniz! yazdırır. printf ifadesindeki tırnak işaretleri arasındaki karakterler aynen ekrana yazdırılır. Ancak \n karakterlerinin yazdırılmadığına dikkat ediniz. Ters eğik çizgi ( \ ), çıkış karakteri olarak adlandırılır ve printf'in farklı bir iş yapması gerektiğini belirtir. printf, ters çizgi işaretiyle karşılaştığında, bu işaretten sonraki karaktere bakar ve bu karaktere göre bazı özel işler yapar.Ters çizgi işareti ( \ ) ve bu işaretten sonra gelen karaktere çıkış sırası denir.
\n çıkış sırası, yeni satır anlamına gelir ve imlecin yeni satıra geçmesine sebep olur.Diğer çıkış sıraları Şekil 2.2'de gösterilmiştir. Şekil 2.2'deki bazı çıkış sıraları garip gözükebilir. printf, ters çizgi işaretini ( \ ) çıkış karakteri olarak algıladığından printf ile ters çizgi işareti yazdırmak istediğimizde iki tane ters çizgi işaretini ( \\ ) birlikte kullanmalıyız. printf ile tırnak işaretini yazdırmak da bir sorun gibi gözükmektedir çünkü tırnak işareti printf ile kullanıldığında, yazdırılacak karakterlerin sınırlarını belirler. printf ile tırnak işareti yazdırmak istersek, \" çıkış sırasını kullanmalıyız.
Küme parantezi , } , main fonksiyonunun sonuna ulaşıldığını gösterir.

Genel Programlama Hataları 2.3
printf yerine print yazmak hatadır.
printf’in bilgisayara bir iş yaptırdığını söyledik. Her program çalıştırıldığında bir çok çeşitli işlem yapar ve kararlar verir. Bu ünite sonunda karar verme üzerinde duracağız ve 3. ünitede
karar verdirme modellerini daha ayrıntılı açıklayacağız.
printf ve scanf gibi standart kütüphane fonksiyonlarının C programlama dilinin bir parçası olmadığını bilmek oldukça önemlidir. Bu yüzden, derleyici printf ve scanf yanlış yazılırsa hata bulamaz. Derleyici, printf gibi bir kütüphane fonksiyonu gördüğünde makine diline çevrilmiş programda boşluk bırakır ve bu boşluğa kütüphaneye gidileceğini belirten bir işaret koyar. Çünkü, derleyici kütüphanenin nerede olduğunu bilemez. Fakat bağlayıcı bilir. Böylelikle, bağlayıcı çalıştığında makine diline çevrilmiş programdaki boşluklara uygun kütüphane fonksiyonlarının kodlarını yerleştirir ve makine diline çevrilmiş programı tamamlar. Artık program çalıştırılmaya hazırdır. Bağlanmış programlara çalıştırılabilir (executable) program denir.Eğer fonksiyon ismi yanlış yazılırsa hatayı bağlayıcı bulabilir. Çünkü programda yazılan fonksiyon ismiyle kütüphane fonksiyonunun ismini eşleyemez.

Çıkış                Sırası Tanım
\n                      Yeni satır.İmleci yeni satırın başına geçirir.
\t                       Yatay tab.İmleci bir sonraki tab başlangıcına taşır.
\a                      Alarm.Sistemdeki zili çalar.
\\                       Ters çizgi. printf içinde ters çizgi karakterini yazdırır.
\"                      Tırnak . printf içinde tırnak karakterini yazdırır.


İyi Programlama Alıştırmaları 2.3
     Yazdırma işlemi yapan bir fonksiyon tarafından yazdırılan son karakter ( \n ) olmalıdır.Bu sayede fonksiyonun, ekran imlecini yeni satırın başlangıcına götürmesi sağlanır. Bu tarz bize, yazılım geliştirme ortamlarında temel amaç olan yazılımın yeniden kullanılabilirliğini artırma fırsatı verir.

İyi Programlama Alıştırmaları 2.4
    Fonksiyon bloklarının içini yazmaya, küme parantezlerinden daha içerde başlamak (3 boşluk bırakarak) fonksiyonun gövdesini daha belirgin hale getirir. Bu sayede, programımız daha okunur hale gelecektir.

İyi Programlama Alıştırmaları 2.5
     Kendinize göre bir girinti miktarı belirleyin ve gerekli tüm yerlerde bu girinti miktarını kullanın. Girintiler yaratmak için tab tuşu kullanılabilir ancak kimi zaman tab başlangıçları sorun yaratabilir. Bu sebepten, en iyisi 3 boşluk bırakarak girintiler oluşturmaktır.
printf fonksiyonu kullanılarak, C'ye hoş geldiniz! mesajı farklı biçimlerde yazdırılabilir. Örneğin, Şekil 2.3'teki program, Şekil 2.1'deki programla aynı çıktıyı üretir. Çünkü her printf, kendi mesajını yazdırmaya, eğer bazı özel çıkış dizileri kullanılmamışsa, diğer printf'in kaldığı yerden başlar. 7. satırdaki ilk printf , C'ye kısmını ve bir adet boşlukkarakterini yazdırır. 8.satırdaki printf yazdırmaya bu boşluktan sonra başlar. Tek bir printf ile Şekil 2.4'te olduğu gibi birden fazla satır yazdırmak mümkündür. Her seferinde \n çıkış sırası imleci yeni satıra geçirir ve yazım işleminin yeni satırdan devam etmesini sağlar.

1 /*Şekil 2.3:prog02_03.c
2 Tek bir satıra iki ayrı printf ifadesiyle yazdırma yapmak*/
3 #include <stdio.h>
4
5 int main( )
6 {
7 printf( "C'ye " );
8 printf( "hoş geldiniz!\n" );
9
10 return 0;
11 }


C' ye hoş geldiniz!

Şekil 2.3 Tek bir satıra ayrı printf ifadeleriyle yazdırma yapmak.

------------------------------------------------------------------------------

1 /*Şekil 2.4:prog02_04.c
2 Tek bir printf ile birden fazla satırda yazdırma işlemi yapmak*/
3 #include <stdio.h>
4
5 int main( )
6 {
7 printf("C'ye\nhoş geldiniz!\n");
8
9 return 0;
10 }


C'ye hoş geldiniz!

Şekil 2.4 Tek bir printf ile birden fazla satırda yazdırma yapmak



BASİT C PROGRAMLARI-İKİ TAM SAYIYI TOPLATMAK

     Bu programımızda scanf fonksiyonunu kullanarak, kullanıcıların klavyeden gireceği iki tamsayıyı tespit edip, bunları toplatacağız. Toplamı ise printf fonksiyonu sayesinde ekranda göstereceğiz. Program ve programın örnek bir çıktısı Şekil 2.5'te gösterilmiştir.

/*Toplama programı*/ yorumu, programın amacını belirmektedir. Daha önceden belirttiğimiz gibi, her program main çalıştırılarak başlar. Küme parantezleri main fonksiyonunun gövdesinin başlangıcını ve bitişini belirtirler.

1 /*Şekil 2.5:prog02_05.c
2 Toplama programı*/
3 #include <stdio.h>
4
5 int main( )
6 {
7 int tamsayi1,tamsayi2,toplam; /*bildirim*/
8
9 printf ( "İlk tamsayıyı giriniz\n" );                /*mesaj yazdırma*/
10 scanf ( "%d",&tamsayi1);                           /*ilk tamsayının okunması*/
11 printf ( "İkinci tamsayıyı giriniz\n" );         /*mesaj yazdırma*/
12 scanf ( "%d",&tamsayi2);                           /*ikinci tamsayının okunması*/
13 toplam = tamsayi1+tamsayi2;                    /*toplamın atanması*/
14 printf ( "Toplam %d dir\n",toplam );         /*toplamın yazdırılması*/
15
16 return 0;                                                     /*programın başarıyla sona erdiğini belirtmek*/
17 }


İlk tamsayıyı giriniz 45 İkinci tamsayıyı giriniz 72 Toplam 117 dir

Şekil 2.5 Toplama programı


7.satırdaki

int tamsayi1, tamsayi2, toplam;

bir bildirimdir. tamsayi1, tamsayi2 ve toplam, değişkenlerin isimleridir. Değişkenler, programın kullanabileceği bir değerin saklanacağı hafıza konumlarıdır. Bu bildirim, tamsayi1, tamsayi2 ve toplam değişkenlerinin int tipinde olduklarını yani bu değişkenlerin 7, -11, 0, 31914 gibi tamsayı değerlerini tutacağını belirtir. Değişkenlerin programda kullanılabilmesi için değişkenler bir isim ve değişken tipiyle, main fonksiyonunun başladığını belirten küme işaretinden , { , hemen sonra bildirilmelidir. C'de int tipinden başka veri tipleri de vardır. Aynı tipte değişkenler tek bir bildirim sayesinde bildirilebilirler. Her değişken için 3 ayrı bildirim yazabilirdik ancak az önce yaptığımız bildirim daha uygundur.

İyi Programlama Alıştırmaları 2.6
     Virgülden hemen sonra bir boşluk bırakmak programın okunurluğunu arttırır.
C'de değişken isimleri geçerli tanıtıcılardan (identifier) biri olabilir. Tanıtıcılar, harf, rakam ve alt çizgi karakterlerinin dizisidir. Ancak bu diziler rakamla başlayamaz. Bir tanıtıcı, istenen
uzunlukta olabilir ancak ANSI C standardındaki derleyiciler için yalnızca ilk 31 karakter önemlidir. C, harf duyarlıdır. C'de büyük harf küçük harf ayrımı yapılır. Bu sebepten, a1 ve A1 farklı tanıtıcılardır.

Genel Programlama Hataları 2.4
Küçük harf kullanılması gereken bir yerde büyük harf kullanılması hatadır. Örneğin, main yerine Main yazmak hatadır.

Taşınırlık İpuçları 2.1
Tanıtıcılarınızı 31 karakterden kısa tutmaya çalışın. Bu, taşınırlığı artıracaktır.

İyi Programlama Alıştırmaları 2.7
Anlamlı değişken isimleri kullanmak programda daha az yorum satırı yazmamız demektir.

İyi Programlama Alıştırmaları 2.8
Basit bir değişken olarak kullanılacak tanıtıcılar küçük harfle başlamalıdır. İleride, büyük harfle başlayacak ya da tüm harfleri büyük harf olan, özel öneme sahip değişkenlerden bahsedeceğiz.

İyi Programlama Alıştırmaları 2.9
     Bir çok kelimeden oluşan değişken isimleri, programı daha okunabilir yapar. Ancak kelimeleri birleşik yazmaktan kaçının. Bunun yerine, kelimelerin arasında alt çizgi kullanın. Eğer kelimeleri birleşik yazmak istiyorsanız, ikinci kelimeden sonrasını büyük harfle başlatın. toplamkomisyon yerine toplam_komisyon ya da toplamKomisyon yazın.
Bildirimleri, bir fonksiyonun gövdesini başlatan küme parantezinden hemen sonra ve çalıştırılabilir ifadelerden önce yazın. Örneğin, Şekil 2.5'teki örnekte bildirimleri ilk printf'ten sonra yapmak bir yazım hatası ( syntax error ) olacaktı. Yazım hataları, derleyici bir ifadeyi tanıyamadığında gerçekleşir. Derleyici, bir hata mesajı oluşturarak programcıya yanlış ifadeleri düzeltmesi gerektiğini söyler. Yazım hataları dilin yanlış kullanılması yüzünden oluşur.Yazım hatalarına derleme hataları ya da derleme zamanı hataları da denir.

Genel Programlama Hataları 2.5
Değişken bildirimlerini çalıştırılabilir ifadelerden sonra yapmak hatadır.

İyi Programlama Alıştırmaları 2.10
Bildirimlerle, çalıştırılabilir ifadeler arasında boş bir satır bırakmak bildirimlerin sona erdiğini vurgulamaya yarar.


9.satırdaki
printf ( "İlk tamsayı giriniz\n" );
ifadesi, İlk tamsayıyı giriniz mesajını ekrana yazdırır ve imleci yeni satıra geçirir.Bu mesaj, kullanıcıya bir işlem yapması gerektiğini söyler.
Diğer ifade olan
scanf ( "%d", &tamsayi1 );
kullanıcının gireceği değeri almak için kullanılır. scanf fonksiyonu, giriş değerini standart girişten alır. Standart giriş genellikle klavyedir.
scanf fonksiyonunda iki argüman ( bağımsız değişken ) görüyoruz ; “%d” ve &tamsayi1. İlk argüman, biçim kontrol dizesi olarak adlandırılır ve kullanıcı tarafından girilmesi beklenen verinin tipini belirtir. %d dönüşüm belirteci, verinin tamsayı olması gerektiğini belirtir. (d harfi İngilizce decimal integer teriminin kısaltmasıdır.) % karakterine, scanf tarafından (ve ileride göreceğimiz gibi printf tarafından) ters çizgi ( \ ) gibi bir çıkış karakteri biçiminde ve %d'ye ise çıkış dizisi biçiminde davranılır. scanf'in 2.argümanı & karakteriyle başlar ve bir değişken ismiyle devam eder. & karakterine adres operatörü denir. Değişken ismiyle birlikte kullanıldığında & karakteri, scanf fonksiyonuna tamsayi1 değişkeninin hangi hafıza konumuna yerleştirileceğini söyler. Bilgisayar, tamsayi1 değişkeninin değerini o konuma yerleştirir. & operatörünün kullanımı, yeni programcılara ya da başka programlama dillerinde böyle bir operatöre ihtiyaç duymayan programcılara garip gelebilir. Şimdilik, scanf içinde her değişken isminden önce & operatörünü kullanın. Bu kuralın istisnalarını 6. ve 7.ünitelerde anlatacağız. & operatörün gerçek anlamı, 7.ünitede göstericiler konusunu anlattığımızda anlaşılacaktır.

     Bilgisayar, scanf'i çalıştırdığında kullanıcının tamsayi1 değişkeni için bir değer girmesini bekler. Kullanıcı, bir tamsayı yazarak ve ardından da giriş tuşuna basarak sayıyı bilgisayara gönderir. Bilgisayar bu sayıyı, ya da bu değeri, tamsayi1 değişkenine atar. Programın devamında tamsayi1 kullanılacağında, her sferinde girilen bu değer kullanılır. printf ve scanf fonksiyonları, kullanıcıyla bilgisayar arasında iletişimi sağlar. Bu iletişim, bir diyalog sayesinde gerçekleştiği için buna interaktif kullanım da denir.

printf ( "İkinci tam sayıyı giriniz\n");
ifadesi, İkinci tam sayıyı giriniz mesajını ekrana yazdırır ve imleci yeni satırın başlangıcına taşır. Bu printf, kullanıcıya bir işlem yapması gerektiğini belirtir.
scanf ( "%d", &tamsayi2 );
ifadesi, kullanıcıdan tamsayi2 değişkeni için bir değer elde eder. 13. satırdaki
toplam = tamsayi1 + tamsayi2;
ataması tamsayı1 ve tamsayı2 değişkenlerinin toplamını hesaplayarak sonucu, atama operatörünü ( = ) kullanarak, toplam değişkenine atar. Bu ifade, "toplam, tamsayi1 + tamsayi2 değerini alır" şeklinde okunur. + operatörü, tamsayi1 ve tamsayi2 olmak üzere, iki operand kullanmıştır. = operatörü ise toplam ve tamsayi1 + tamsayi2 ifadesinin sonucu olmak üzere, yine iki operand kullanmıştır.

İyi Programlama Alıştırmaları 2.11
     Operatörün her iki tarafına da bir boşluk bırakılmalıdır. Bu sayede program daha okunabilir olur.
Genel Programlama Hataları 2.6
Atama ifadelerinde hesaplama, = operatörünün sağ tarafında bulunmalıdır. Hesaplama operatörün solunda yapılırsa yazım hatası ortaya çıkar.

14. satırdaki
printf ( "Toplam %d dir\n", toplam );
ifadesi, printf fonksiyonunu çağırıp Toplam bilgisinden sonra, toplam değişkeninin sayısal değerini yazdırır. printf'in iki argümanı vardır; "Toplam %d dir\n" ve "toplam". İlk argüman, biçim kontrol dizesi olarak adlandırılır. Bu argüman, yazdırılacak karakterlerle, bir tamsayının yazdırılacağını gösteren %d dönüşüm belirtecini içerir. İkinci argüman yazdırılacak değeri belirler. Bir tamsayı için dönüşüm belirtecinin printf ve scanf'de aynı olduğuna dikkat ediniz. Bu durum, C de çoğu veri tipi için geçerlidir.
Hesaplamalar, printf ifadelerinin içinde de gerçekleştirilebilir. Daha önceden yazdığımız iki ifadeyi tek bir ifade biçiminde
printf ( "Toplam %d dir\n", tamsayi1 + tamsayi2 );
şeklinde de yazabilirdik.

16. satırdaki
return 0;
ifadesi 0 değerini, programın çalıştırıldığı işletim sistemi ortamına gönderir ve böylelikle işletim sistemine programın başarılı bir şekilde çalıştırıldığını belirtir. Bir programdaki her hangi bir hatayı işletim sistemine nasıl belirteceğinizi öğrenmek için işletim sisteminizin kılavuzunu inceleyiniz.
Küme parantezi, } , main fonksiyonunun sonuna ulaşıldığını gösterir.

Genel Programlama Hataları 2.7
printf ya da scanf içindeki biçim kontrol dizesinde, tırnak karakterlerinden birini ya da ikisini birden unutmak.
Genel Programlama Hataları 2.8
printf ya da scanf içindeki biçim kontrol dizesinde, % dönüşüm belirleme karakterini unutmak.
Genel Programlama Hataları 2.9
printf ya da scanf içinde ki \n çıkış sırasını, biçim kontrol dizesi dışına yerleştirmek.
Genel Programlama Hataları 2.10
Dönüşüm belirteçleri içeren bir printf ifadesi içinde, değerleri yazdırılacak deyimleri dahil etmeyi unutmak.
Genel Programlama Hataları 2.11
Bir deyim yazdırılacağında printf biçim kontrol dizesi içinde bir dönüşüm belirteci yazmamak.
Genel Programlama Hataları 2.12
Biçim kontrol dizesini yazdırılacak deyimlerden ayırmak için kullanılması gereken virgül ( ,) karakterini biçim kontrol dizesi içine yazmak.
Genel Programlama Hataları 2.13
scanf ifadesi içinde, bir değişkenin başına & konması gerekirken bu karakteri unutmak.
Çoğu sistemde, çalışma zamanlı bu hataya erişim hatası denir. Böyle bir hata, programcı erişim haklarına sahip olmayan bir hafıza alanına erişmek istediği zaman oluşur. Bu hatanın sebebi hakkında detaylı bilgiyi 7. ünitede açıklayacağız.
Genel Programlama Hataları 2.14
printf ifadesi içinde, bir değişkenin başına & operatörü yazmak.
7. ünitede göstericileri çalıştığımızda, bir değişkenin adresini yazdıracağımızda bu değişken ismi ile birlikte & operatörünü kullandığımızı göreceksiniz. Ancak ilerleyen bir kaç ünite boyunca printf ifadeleri içinde & operatörünü kullanmayacağız.



HAFIZA KONULARI

tamsayi1, tamsayi2 ve toplam gibi değişken isimleri gerçekte bilgisayar hafızasında konumlar belirtir. Her değişkenin ismi, tipi ve değeri vardır.

Şekil 2.5’deki toplama programında(üst tarafta)

scanf ( "%d", &tamsayi1 );

ifadesi çalıştırıldığında, kullanıcı tarafından girilen değer tamsayi1 isminin atandığı hafıza konumuna yerleştirilir. Kullanıcının, tamsayi1 değişkenin değeri olarak 45 girdiğini varsayalım. Bilgisayar 45'i tamsayi1 konumuna Şekil 2.6' da gösterildiği gibi yerleştirir.

tamsayi1     45
Şekil 2.6 Bir değişkenin ismini ve değerini gösteren hafıza konumu


Bir değer hafıza konumuna yerleştirildiğinde, daha önceden o hafıza konumunda bulunan değerin üzerine yazılır. Bu konumda daha önceden bulunan değer silindiğinden hafızaya yazma işlemi destructive read-in olarak adlandırılır.

Toplama programımıza geri döndüğümüzde
scanf ( "%d", &tamsayi2 );
ifadesi çalıştırıldığında, kullanıcının 72 değerini girdiğini varsayalım. Bu değer, tamsayi2 konumuna yerleştirilir ve hafıza Şekil 2.7’de görüldüğü gibi olur. Bu konumların hafızada ard arda gelmeleri zorunluluğu yoktur.

Program tamsayi1 ve tamsayi2 değerlerini aldıktan sonra bu değerleri toplar ve toplamı, toplam değişkenine yerleştirir.

toplam = tamsayi1 + tamsayi2;

ifadesi, toplama yapmanın yanında toplam değişkeninin eski değerini silerek yerine yenisini yazar. Toplam hesaplandıktan sonra hafıza Şekil 2.8’deki gibi görünür.
tamsayi1 ve tamsayi2 değişkenlerinin değerlerinin, toplama işlemine girmeden önceki değerlerini koruduğuna dikkat ediniz. Bu değerler, toplama işleminde kullanılmışlardır fakat değiştirilmemişlerdir. Bu sebepten, bir hafıza konumundan okuma işlemi yapıldığında buna non-destructive read-out denir.

tamsayi1                   45


tamsayi2                   72
Şekil 2.7 Değişkenler girildikten sonra hafıza konumları



tamsayi1                   45


tamsayi2                   72


toplam                      117
Şekil 2.8 Hesaplamadan sonra hafıza konumları

---Bir daha ki konu anlatımı "C'de Aritmetik,Eşitlik ve Karar Verme Operatörleri" Konusu ile Devam Edecektir.

Hiç yorum yok:

Yorum Gönder

Oyuncu ve Oyun Sistemleri Albümü