C ++
PROGRAMLAMA DİLLERİ
Programlama dili programcının programı yazarken kullandığı özel bir dildir. Bilgisayara yaptırılacak olan işlerin bilgisayarın anlayabileceği dilde ifade edilmesidir. Bütün programlar programlama dilleri ile yazılır. Bilgisayar gibi programlama dilleri de çeşitli süreçlerden geçerek geliştirilmişlerdir. Programlama dilleri genellikle İngilizce kelimelerden seçilmiş ve ya kodlanmış kısaltmalardan oluşur.
Program yazarken dil seçimi, yazılacak programın niteliğine göre yapılmalıdır. Örneğin bir muhasebe programı yazmak için seçilen dil, bazı matematik programlarının yazılması için uygun olmayabilir.
Bir hücrede akım bulunması hali (1) ve bulunmaması hali (0) sayılmaktadır. Bu nedenle bilgisayara kayıt, ikili, sekizli, on altlı ve otuz ikili sistemler ile yapılmaktadır. Bilgisayar kullanımının artması ile ihtiyaçlara göre programlama dilleri geliştirilmiştir.
C++ Programlama Dilinin Tarihi _______________________________________
C++ temel olarak Bjarne Stroustrup tarafından tasarlanmıştır. Tasarım 1979 yılında başlamış ve çeşitli aşamalardan geçmiştir. Stroustrup önce C’ye sınıflar eklemiş ve bunu “ C with classes” biçiminde isimlendirmiştir. C++ ismi 1893 yılında verilmiştir. İlk ticari derleyici 1987 yılında yazılmıştır. Standarsazyon çalışmaları 1991 yılında başlamıştır, 1996 da taslaklar hazırlanmış ve 1998 yılında resmi standartlar yayınlanmıştır. C++ evrimini tamamlamış bir programlama dili değildir. Hala bir takım yenilikler dile eklenmektedir. Bir sonraki standartlarda pek çok yenilik eklenmiş olacaktır.
C++ Nasıl Bir Dildir? ________________________________________
C++ C nin nesne yönelimli programlama tekniğinin uygulayabilmek için geliştirilmiş bir dildir. C++ ile C arasında bazı istisnalar dışında bir kapsama ilişkisi vardır. Yani C de geçerli olan her şey C++ dada geçerlidir. Ancak C++ ın fazlalıkları vardır. Yani bazı istisnalar dışında bir C programı C++ derleyicisi ile derlenip çalıştırılır.
Nesne yönelimli programlama tekniği büyük projeleri gerçekleştirme hedefi ile geliştirilmiş bir tekniktir. Satır sayısı çok fazla olan büyük projeler yapısal programlama tekniği ile çok zor geliştirilebilir. C yapısal programlama tekniğini uygulayabilmek için tasarlanmıştır.Halbuki C++ nesne yönelimli programlama tekniğini kullanmak için tasarlanmıştır. C++ genel olarak C den daha yüksek seviyeli bir programlama dilidir.
Nesne yönelimli programlama tekniği büyük projeleri gerçekleştirme hedefi ile geliştirilmiş bir tekniktir. Satır sayısı çok fazla olan büyük projeler yapısal programlama tekniği ile çok zor geliştirilebilir. C yapısal programlama tekniğini uygulayabilmek için tasarlanmıştır.Halbuki C++ nesne yönelimli programlama tekniğini kullanmak için tasarlanmıştır. C++ genel olarak C den daha yüksek seviyeli bir programlama dilidir.
Visual C++ 6.0 da C++ çalışabilmek için yapılmasın gereken temel işlemler:__________________________________________________ ____
1-File/New/Project seçilir ve Proje türü olarak win32 console application seçilir.Bu menüdeki location projeyi oluşturacağımız ana dizini belirtir.Her proje bu ana dizi içerisinde bir dizin açılarak oluşturulur.
2-Bu seçimden sonra yeni bir menü çıkar ve buradan “ An Empty Project “ seçilir.
3- Bundan sonra program bir cpp uzantılı kaynak dosyaya yazılır. Bu program projeye eklenir. Dosyanın projeye eklenmesi iki şekilde yapılabilir.
a)Project work space üzerinde File view seçilip proje ismine sağ klik yapılır ve buradan “ Add Files To Project “ seçilir. Project work space penceresi ALT+ 0 ile görüntülenebilir.
b) Project /files bölümünden ekleme yapılabilir.
Ekleme yapıldıktan sonra project work space/ Fileview/SourceFiles altında eklenen dosya görünür.
4-Programı derlemek için Build/Compile seçilir.Ya da CTRL + F5 tuşlarına basılır.Bu işlem derleme ve link işlemlerini yaparak programı çalıştıracaktır.
5-Oluşturulan proje istenildiği zaman files/openworkspace ile geri açılabilir.Projenin diskete alınarak taşınabilmesi için projenin oluşturulduğu dizinin debug dizini silinmelidir.Debug dizini yoksa zaten yeniden oluşturulmaktadır.
C++ derlercileri genellikle C derleyicilerini de barındırmaktadır. Yazılan programın C Derleyicisi ile mi yoksa C++ derleyicisi ile mi derleneceği dosyanın uzantısına bakılarak otomatik olarak belirlenir.
C ise .c C++ ile ise .cpp olarak derleyecektir...
Temel Bilgiler
--------------------------------------------------------------------------------
Bu dili anlatırken azda olsa belli bir düzeyde programlama bilgisine sahip olduğunuzu düşünmekteyiz. Ancak yeni başlayanlar ada mümkün olan en iyi şekilde yaklaşabilmek için başlangıçta C++ diline ait veri tiplerinden, değişken tanımlamadan ve değişkenlere değer atamadan bahsedip, basit bir C++ programının yapısına göz atacağız. Hazır mısınız ? Hiç vakit kaybetmeden başlıyoruz.
ÖNEMLİ NOTLAR:
C++, büyük ve küçük harfe duyarlı bir dildir.
Cümleler ; (noktalı virgül) ile biter.
Veri TipleriVeri: Bilgisayarda üzerinde işlem yaptığımız, hafızada tuttuğumuz her türlü bilgiye veri denir.
Veri Tipleri: Bir verinin bellekte ne şekilde tutulacağı, veri değerinin ne şekilde yorumlanacağı ve verinin hangi işlemlere tabi tutulacağına dair derleyiciye bilgi verirler.
Veri tipleri 2’ye ayrılır:
1. Temel Veri Tipleri: Programlama dilinin tasarımından kaynaklanan ve dilin kurallarına göre varlığı garanti altına alınmış olan tiplerdir. Her programlama dili programcının doğrudan kullanabileceği, çeşitli özelliklere sahip veri tipleri tanımlar. C dilinde de önceden tanımlanmış 11 adet veri tipi vardır.
2. Tanımlanan Veri Tipleri: Programlama dillerinin çoğu, önceden tanımlanmış veri tiplerine ek olarak, programcının da yeni tipler tanımlanmasına izin vermektedir. Programcının tanımlayacağı bir nesne için önceden tanımlanmış veri tipleri yetersiz kalıyorsa, programcı kendi veri tipini oluşturulabilir. C dilinde de programcı yeni bir veri tipini derleyiciye tanıtabilir ve tanıttığı veri tipinden nesneler tanımlayabilir.
Temel veri tipleri 2’ye ayrılır:
1. Tamsayı Tipleri: Tamsayı değişken ve sabitleri tanımlamak için kullanılan tiplerdir. Bu değişken ve sabitlere ondalıklı değer aktarılamaz. Program içinde sekizlik, onluk ve on altılık tabanda belirtilebilirler ve derleyicinin tipine göre 16 Bit ve 32 bit şeklinde saklanırlar.
2. Gerçek Sayı Tipleri: Reel sayıları belirtmek için kullanılırlar. Ya tamsayı ile kesir kısmı arasına nokta konarak ya da bilimsel gösterimle belirtilirler. İkinci yöntem genelde çok büyük ve çok küçük sayılar için kullanılır.
Tamsayı Tipleria. (un)signed char tipi: İngilizcede “character” sözcüğünün kısaltılması ile elde edilmiştir. Türkçeye karakter olarak çevrilmiştir. ASCII tablosundaki her bir eleman karakter olarak nitelendirilebilir. Ayrıca signed (işaretli) tipi için -128/127 sayı aralığında değer alabilirken, unsigned (işaretsiz) tipi için 0/255 sayı aralığında değer alır.
b. (un)signed short int tipi: Kısa tamsayı tipidir. İşaretli short int veri tipinden bir nesne -32768/32767 aralığındaki tamsayı değerlerini tutabilirken, işaretsiz short tipi söz konusu olduğunda tutulabilecek değerler 0/65535 aralığında olabilir.
c. (un)signed int tipi: Tamsayı tipidir. int veri tipinin 2 byte uzunluğunda olduğu sistemlerde bu veri tipinin sayı sınırları, işaretli int tipi için -32768/32767, işaretsiz int veri tipi için 0/65535 arasında olacaktır. 4 byte uzunluğundaki sistemlerde ise aralıklar çok daha geniştir.
d. (un)signed long int tipi: Sistemlerin çoğunda, long int veri tipinden oluşturulan nesne bellekte 4 byte'lık bir alan kaplayacaktır. İşaretli short int veri tipinden bir nesne -2147483648/2147483647 aralığındaki tamsayı değerlerini tutabilirken, işaretsiz long int türü söz konusu olduğunda tutulabilecek değerler 0/4294967296 aralığında olabilir.
TAMSAYI TİPLERİ
(INTEGER TYPES)
TİP İSMİUZUNLUK(byte)
(DOS / UNIX)SINIR DEĞERLERİ
signed char1-128127
unsigned char10255
signed short int2-32.76832.767
unsigned short int2065.535
signed int24-32.768
-2.147.483.64832.767
2.147.483.647
unsigned int240
065.535
4.294.967.296
long int4-2.147.483.6482.147.483.647
unsigned long int404.294.967.29
Gerçek Sayı Tipleri C dilinde gerçek sayı değerlerini tutabilmek için 3 ayrı veri türü tanımlanmıştır. Bunlar sırasıyla, float, double ve long double veri türleridir. Gerçek sayı veri türlerinin hepsi işaretlidir. Yani gerçek sayı veri türleri içinde hem pozitif hem de negatif değerler tutulabilir. Gerçek sayıların bellekte tutulması sistemden sisteme değişebilen özellikler içerebilir. Ancak sistemlerin çoğunda IEEE 754 sayılı standarda uyulmaktadır.
a. float tipi: Sistemlerin hemen hemen hepsinde float veri türünden bir nesne tanımlandığı zaman bellekte 4 byte yer kaplayacaktır. 4 byte'lık yani 32 bitlik alana özel bir kodlama yapılarak gerçek sayı değeri tutulur. 4 byte'lık gerçek sayı formatı "single precision " (tek hassasiyet) olarak isimlendirilmiştir. Bu standartta 32 bitlik alan 3 bölüme ayrılmıştır.
1 bitlik alan (sign bit): Gerçek sayının işaret bilgisini yani pzoitif mi negatif mi olduğu bilgisini tutar.
8 bitlik alan (exponential part) : Tam sayı kısmını tutar.
23 bitlik alan (fraction part) : Sayının ondalık kısmını tutar.
b. double tipi: Sistemlerin hemen hemen hepsinde double veri türünden bir nesne tanımlandığı zaman bellekte 8 byte yer kaplayacaktır. Gerçek sayıların bellekte tutulması sistemden sisteme değişebilen özellikler içerebilir.
c. long double tipi: long double veri türünden bir nesne tanımlandığı zaman bellekte 10 byte yer kaplayacaktır.
GERÇEK SAYI TİPLERİ
(FLOATING TYPES)
TİP İSMİUZUNLUK (byte)SINIR DEĞERLERİ

en küçük pozitif değeren büyük pozitif değer
float43.40 x 10-383.40 x 1038
double81.17 x 10-3081.17 x 10-308
long double103.4 x 10-49321.1 x 104932
Bu veri tipleri ile değişkenlerin tanımlanması:Tip belirten kelimeDeğişken ismi;
Değişkenlere ilk değer aktarımı:
Tip belirten kelimeDeğişken ismi= İlk değer;

Tanımlanan veri tipleriDizi tipiveri tipi dizi ismi[rakam];int no [15];
String tipichar dizi ismi[rakam];char a[30];
Pointer tipiveri tipi adres tipi*değişken ismi;int*m;
Structure tipistruct{alt alan tanımları}değişkenleri listesi;struct{unsigned char ad[10];}isim,yas;isim.ad yas.soy
Union tipcharASCII karakterleri ve çok küçük sayılar için kullanılır.
enumSıralanmış değerleri tutar.
intSayma sayıları.
longSayma sayıları.
floatOndalıklı sayılar.
doubleOndalıklı sayılar.
longdouble Ondalıklı sayılar.
voidDeğersiz - boş.
Temel Veri Tiplerinin UzunluklarıNot: Bu değerler 32 Bit uygulama geliştirme ortamındaki platformlara özeldir. Platformdan platforma değişebilir.
bool0--1
char-128 -- 127
enumint ile aynı değerde
int-2,147,483,648 -- 2,147,483,647
long-2,147,483,648 -- 2,147,483,647
float3.4E +/- 38
double1.7E +/- 308
long double1.2E +/- 4932
C++ İle Programlamaya Giriş İlk programımız!// ilk1.cpp// Ekrana "Bu benim ilk programım" yazdırıyoruz#include int main(){cout << "Bu benim ilk programım";return 0; }Şimdi Yazdığımız programı inceleyelim:1) "//" işaretini açıklama satırlarında kullanıyoruz. C++ derleyicisi bu notasyonla başlayan satırı okumaz. Bununla birlikte daha uzun cümlelerimiz olursa bunları da " /* */ " notasyonunun içinde yazıcağız. Bu özellik de C den bize kalma. Demiştik zaten C `nin tüm özelliklerini C++ içerir. Fakat biz genelde " // " yi kullanacağız.2) #include : Bu bizim C++ da bulunan kütüphane dosyamızı çağırmaya yarıyor. Ben size şöyle tarif edeyim. iostream.h kütüphanesindeki hazır olan " cout " fonksiyonunu çağırıyor. Yani buda bizim fazla kod yazmamıza engel oluyor. .h ile biten dosyalar kütüphane dosyalarıdır. Bunu şuna da benzetebiliriz. Farz edelim ki elimizde bir alet çantası var içinden tornavidayı çağırdığımızda vida sıkacağızdır. Bu da ona benziyor. C++ da ki hazır kütüphanelerde bir çok hazır fonksiyonlar vardır. İlerde Bu hazır fonksiyonlar işimizi görmemeye başlayınca kendi kütüphanemizi yapmaya başlayacağız. Tabi bu seviyeye geldiğimizde olayı hemen hemen kavramış olacağız.3) Daha sonraki satır her C++ programında mutlaka bulunması gereken bir satırdır. Her C++ programında main() fonksiyonu olmak zorundadır; bu fonksiyonumuzun önünde ise o fonksiyonun dönderdiği değişkenin veri tipi olmalıdır. Tabi ki C++ fonksiyonlar ve onların dönderdikleri değerler konusunu da ileride işleyeceğiz.4) Bir sonraki satırda ise; C++ fonksiyonlar ve kod blokları " { } " parantezleri arasında bulunmalıdır. main de bir fonksiyon ise onun içindeki kodlar doğal olarak { } parantezleri arasındadır.
Program derlenip çalıştırıldığında ise ( Turbo C++ 3.1 kullanıyorsanız ctrl+f9 kısa yoluyla programı çalıştırabilirsiniz (Run) ) karşımıza "Bu benim ilk programım" yazısı çıkacaktır. İşte bu yazıyı ekrana veren komut da iostream.h kütüphanesindeki cout fonksiyonudur.Önemli bir nokta ise C++ dilinde her satır ifadenin sonuna " ; " koymak zorundayız. Bundan farklı olarak #include satırlarının ve bir kaç farklı satırın arkasına " ; " gelmez. Bunları ileride göreceğiz.Return 0 : programımızın (aynı zamanda main fonksiyonumuzun) çıkış noktasıdır. Eğer return ile 0 değeri dönderirsek programımızın güvenle çıktığını işletim sistemine bildirmiş oluruz. Bu sayede güvenle programımızın çalıştığını göreceğiz.
C++ Dersleri [4] Saturday, 25 February 2006 Okunma; 2540
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... Her Yönüyle C++ Her Yönüyle C++ [2] C++ Dersleri [3]*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 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
\bBir karakter geri (Backspace)
\fFormu itekle
\nYeni satır ( yukarda kullandığımız (newline) )
\rReturn
\tYatay 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 umursanmazVe ben satırın başına // yazarak bu satırın açıklama olduğunu belirtiyorumAş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 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şkenler2.Tanımlama yerlerine göre değişkenler3.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, zA, B, C, D, E, F, G,H,I,J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, ZRakam karakterleri0, 1, 2, 3, 4, 5, 6, 7, 8, 9Alt 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şkenlera. 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şkenlera. 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+10register 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 #include // kütüphane dosyamızmain(){int i; // Değişken tanımlamacout << "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.
Operatörler I
Bunu bir örnek üzerinde anlatmak istiyorum. Örneğin; x + y 'de x ve y operand + ise operatördür. Bu bir aritmetiksel operatördür. Matematikte işlemler operatörler ve operandlar ile anlatılır. Operatörleri öncelikle türlerine göre ayıralım:1) Aritmetiksel operatörler + , - , * , / , % , ++ , -- 2) Karşılaştırma operatörleri < , > , <=, >= , ==, != 3) Eşitleme operatörleri = , += , -=, *= , /= , %= , <=, >>=, &=, != , ^= 4) Mantıksal Operatörler ! , , && 5) Bit bazında işlem yapan operatörler & , ! , ^ , ~ , Aritmetiksel (Matematiksel) Operatörler:Matematiksel ifadeleri günlük hayattaki biçimde bilgisayarda yazamadığımız için belli kurallara uymamız gerekir. Bu kısım önemli olduğu için biraz geniş yer vereceğim. Kullandığımız matematiksel işlemler ve anlamları şöyledir:
C++ işlemi:
Aritmetik operatör:
Toplama
+
Çıkarma
-
Çarpma
*
Bölme
/
Modulus(mod)
%
Bir arttırma
++
Bir azaltma
--

Bu operatörle verilen iki veya daha fazla operand toplanabilir. Yazılış şekli Aşağıdaki gibidir.
değişken1 + değişken2
Eğer bu iki değişkeni Sonuç gibi başka bir değişkene atarsak eşitleme operatörüyle aşağıdaki gibi yaparız.
Sonuç = değişken1 + değişken2
Buna bir örnek verelim.// toplama.cpp//Vize ve final notlarinindan geçme notunu hesaplama#include #include main() { int vize, final, ort;vize = 10;final = 80; ort = vize * 0.4 + final * 0.6;cout<< "Geçme notunuz: " << ort;}__________________
ÇILGIN TÜRK
staticiation Kullanıcının Profilini Göster staticiation Anasayfasını Ziyaret Et staticiation tarafından yazılan bütün mesajları göster staticiation isimli kullanıcıyıarkadaş listenize Ekleyin
11.06.2007 #2 (permalink) staticiation Çılgın Türk

Katılma Tarihi: Feb 2006Nereden: C:/windows/system32Yaş: 22Mesajlar: 2,274 Meslek : Programmer
--------------------------------------------------------------------------------
Burada çarpma operatörünü de kullandık sanırım, artık diğerlerinin de ne olduğunu kavramış oldunuz. Bir örnekte işi ucuza getirdim . Fakat bir artma ve bir azalmaya örnek verelim. Bu bana çok lazım olmuştu. Burada dikkat etmemiz gereken olay " ++ " operatörünü değişkenin önüne yazmanız gerektiğidir. Bu sayede değişken bir arttırılarak işleme konur. Arkasına konursa değişken işlenir, sonra bir arttırılır. " -- " operatöründe ise aynı şekilde de bir azaltma yapılır.// carpim.cpp // x i bir arttırıp y yi bir azaltıp çarptık.#include main(){int x = 5;int y = 10;cout << "x = " <<< endl; cout << "y = " << y << endl;cout <<"++x * --y = " << ++x * --y ;}
İşte bir fark daha yakaladık bunu da hemen örnek üzerinde anlatalım. Sanırım buraya kadar geldiğimiz yerlerde "int" i, çarpma işlemini, bir arttırıp azaltmayı gördük, ama diyeceksiniz ki "endl " ne oluyor? Hemen açıklayayım; Satır sonunu belirterek yeni satıra geçmemizi sağlar, bir nevi " \n " Escape operatörü gibi bir işleve sahiptir.
Operatörler II
Karşılaştırma Operatörleri:Operatör
C++ örneği
Anlamı
>
x > y
x, y'den büyüktür
<
x < y
x, y'den küçüktür
>=
x >= y
x, y'den büyüktür veya y'ye eşittir
<=
x <= y
x, y'den küçüktür veya y`ye eşittir
==
x ==y
x, y'ye eşittir
!=
x != y
x, y'ye eşit degildir

Bunların teker teker ne olduğunu söylemeye gerek yok. İfadeler gayet basittir. Burada dikkat etmemiz gereken önemli bir şey var: " >=, <=, ==, !=" notasyonlarını kullanırken iki notasyon arasında boşluk bırakmamalıyız. Buna dikkat edelim!
Eşitleme ( Atama) Operatörleri:Bunlarıda liste halinda verelim.Operatör
C++ örneği
Anlamı
=
x = y
x`in değeri y'ninkine atanır
+=
x += y
x`e x+y'nin değeri atanır.
-=
x -= y
x`e x-y`nin değeri atanır.
*=
x *= y
x`e x*y'nin değeri atanır.
/=
x /= y
x`e x/y`nin değeri atanır
%=
x %= y
x`e x%y'nin değeri atanır.
<<=
x <<= y
x`e x<
>>=
x >>= y
x`e x>>y'nin değeri atanır.
&=
x &= y
x`e x&y'nin değeri atanır.
!=
x != y
x`e x!y'nin değeri atanır.
^=
x ^= y
x`e x^y'nin değeri atanır.

Operatörler III
Mantıksal Operatörler (Lojik Operatör Sembolleri) :
Operatör
C++ örneği
Anlamı
!
x ! y
x değil y
&&
x && y
x ve y

x y
x veya y

Burası biraz Soyut Matematik, biraz değinmek istiyorum. Yukarıda gördüğümüz mantıksal operatörler, Doğru (1) yada Yanlış (0) sonucunu argümanlara bakarak üretirler. Mantıksal Değil (!), değeri tersine çevirir. Ve ( && ) operatörü ise yalnızca her iki ifadede Doğru (1) ise sonuç Doğru (1) ` dur; diğer durumlarda Yanlış (0)` dır. Veya` da ( ) ise yalnızca iki ifadenin Yanlış (0) durumunda sonuç Yanlış (0) olur diğer durumlarda Doğru (1)`dur.
Ne diyorlardı? En iyi programcılar matematikçilerden çıkar . Arkadaşlar umarım zorlanmıyorsunuzdur. Olabildiğince ince eliyorum ve anlayacağınız şekle indirgemeye çalışıyorum. Bunun üstüne bir çay içerim. Geldiğimde devam edeceğim...
Bit bazında İşlem Yapan Operatörler :Bu kısımda Soyut Matematiğin daha da ayrıntılarına girilmesi gerekiyor. Ben size kısaca bunu anlatayım. Çok karışıklık da sizi yoracaktır. Örnekleri yaparken yine üstünde dururuz.
Bit bazında işlem yapan operatörler şunlardır: AND (Ve ( & ) , OR (Veya ( ~ )), XOR ( ^ ).
And (&) operatörü; Bitleri karşılaştırır. Eğer her ikisi de Doğru (1) ise sonuç Doğru (1), aksi halde Yanlış (0)`dır.
OR (~) operatörü; İki biti karşılaştırır ve eğer ikisi de Doğru (1) ise yada birisi Doğru (1) ise sonucu Doğru (1) yapar. OR işlemi belirli bir bit i Doğru (1) e çekmek için kullanılabilir.
XOR (^) operatörü; Bit düzeyinde EXCLUSIVE OR (dışında tutan veya) (Türkçe'sini çevirince saçma oluyor) işlemi yalnızca karşılaştırılan bitler bir birinden farklı ise Doğru (1) üretir, aksi halde Yanlış (0) üretir. ! işareti ise her bir bit i ters çevirir.
Not: Bunlar yeni başlayanlar için yorucu olabilir. Son iki bölümün fazla üstünde durmayın.
Bir de bize C++ile gelmiş olan operatörlerden bahsetmek istiyorum. Bunlar; " :: " Erim çözünürlüğü (Scope resolution operatörü). " * " Dolaylı adresleme (Pointerlerle kullanacağız). " & " Adres operatörü (Pointerlerle kullanacağız). " New " Dinamik bellek ayırma ." sizeof " Nesne Boyutu.
SABİTLER
Veriler ya nesnelerin içerisinde ya da doğrudan sabit biçiminde bulunurlar. Sabitler nesne biçiminde olmayan, programcı tarafından doğrudan girilen verilerdir. Örneğin :
x = y + z;
ifadesi bize a ve b içindeki sayıların toplanacağı ve c’ye aktarılacağını anlatır. Oysa
d = x + 10;
ifadesinde x değişkeni içinde saklanan değer ile 10 sayısı toplanmıştır. Burada 10 sayısı herhangi bir değişkenin içindeki değer değildir, doğrudan sayı biçiminde yazılmıştır.Nesnelerin türleri olduğu gibi sabitlerin de türleri vardır. Nesnelerin türleri daha önce gördüğümüz gibi bildirim yapılırken belirlenir. Sabitlerin türlerini ise derleyici, belirli kurallar dahilinde sabitlerin yazılış biçimlerinden tespit eder. Sabitlerin türlerini bilmek zorundayız, çünkü C dilinde sabitler ve değişkenler ve operatörler bir araya getirilerek kombine edilerek ifadeler (expressions) oluşturulur. Daha sonra detaylı göreceğimiz gibi C dilinde ifadelerin de bir türü vardır ve ifadelerin türleri, içerdikleri sabit ve değişkenlerin türlerinden elde edilir.O halde sabit türlerini detaylı olarak inceleyelim :
(signed) int türden sabitlerBunlar tipik olarak int türden değişkenlerine atanan ve tamsayı biçiminde olan sabitlerdir, yazılırken herhangi bir ek almazlar.
C’de int türü sınırları içinde olan her tamsayı birer int sabit (ya da int türden sabit) olarak ele alınır.-253000025789-3200
Sayılarının hepsi (signed) int türden sabit olarak ele alınırlar, çünkü int türü sayı sınırları içinde bulunuyorlar ve sonlarında herhangi bir ek bulunmuyor.
Ancak C dilinde int türü sistem bağımlıdır ve int sabitleri de sistemden sisteme değişebilir.sistem
uzunluk
sınır değerler
DOS, Windows 3.1
2 byte
- 32768, + 32767
UNIX WINDOWS 95
4 byte
-2147483648, + 2147483647

Örneğin 425000 Dos’ta int sabiti değildir ama UNİX’de int sabittir.
(signed) long türden sabitlerLong türden sabitler iki türlü ifade edilirler :1. long int türünün sayı sınırları içinde bulunan bir sayının sonuna L ya da l yazarak.Bu durumda derleyiciler ilgili sayı int sınırları içinde olsa da long sabit olarak ele alır. 22345l long sabittir. çünkü sonunda l eki var. 0l, -23465L, 325l long sabitlerdir.
long sabit kullanımında algılanması daha kolay olduğu için L soneki tercih edilmelidir. l soneki 1 rakamıyla görünüm açısından çok benzediği için karışıklığa neden olabilir.
2. int türün sayı sınırlarını aşan fakat long int türü sayı sınırları içinde kalan her tamsayı doğrudan long int türden sabit olarak ele alınır. Bu durum doğal olarak, DOS gibi int ve long türlerinin birbirinden farklı olduğu sistemlerde anlamlıdır.Örneğin DOS’da 325000-333331278902
long türden sabitlerdir. Oysa 32 bitlik sistemlerde long türünün uzunluğuyla int türün uzunluğu aynı (4 byte) olduğu için bu sayılar int sabiti olarak ele alınacaktır. Bu sistemlerde yukarıdaki sayıları long sabit olarak ele almak istersek sonlarına l ya da L eki eklememiz gerekmektedir.
char sabitleri (char türden sabitler)char sabitleri tipik olarak char türden nesnelere atanan sabitlerdir. (Böyle bir zorunluluk yok)char türden sabitler C dilinde dört ayrı biçimde bulunabilirler.
1. istenilen bir karakter tek tırnak (single quote) içerisinde kullanılırsa char türden sabit olarak ele alınır. Örnek :
'a''J''Ç'':''8''<'
Herbiri birer char türden sabitidir.
C dilinde tek tırnak içerisinde belirtilen char sabitleri, aslında o karakterin karakter setindeki (örneğin ASCII tablosundaki) sıra numarasını gösteren bir tamsayıdır.
{char ch;
ch = 'a';...}Bu örnekte aslında ch isimli char türden değişkene a karakterinin ASCII tablosundaki sıra numarası olan 97 sayısı aktarılmaktadır. Tek tırnak içindeki karakter sabitlerini görünce aslında onların küçük birer tamsayı olduğunu bilmeliyiz. Çünkü bellekte karakter diye birşey yoktur herşey ikilik sistemde 1 ve 0 lardan oluşan sayılardır.Yukarıdaki örnekte istersek ch değişkenine aşağıdaki gibi bir atama yapabiliriz:
ch = 'a' + 3;.
Bu durumda ch değişkenine sayısal olarak 100 değeri atanacaktır. Bu sayıya da ASCII tablosundaki 'd' karakteri karşılık gelir.
2) Önceden tanımlanmış ters bölü karakter sabitleri (escape sequences)
Yukarıda tanımlanan yöntemde ekrana basılamayan yani ekranda görüntü oluşturmayan (non printable) karakterleri ifade edemeyiz. Örneğin çan karakteri (beep sesi) ya da backspace karakteri ekrana basılamaz. Tek tırnak içindeki ters bölü (back slash) karakterinden sonra yer alan bazı karakterler çok kullanılan ancak basılamayan bazı karakterlerin yerlerini tutarlar. Bunların listesi aşağıda verilmiştir:
ÖNCEDEN TANIMLANMIŞ TERS BÖLÜ KARAKTER SABİTLERİ (ESCAPE SEQUENCES)



TANIM / DESCRIPTION
ASCII NO






'\0'
'\x0'
'\0'
NULL karakter
0
'\a'
'\x7'
'\07'
çan sesi (alert)
7
'\b'
'\x8'
'\010'
geri boşluk (back space)
8
'\t'
'\x9'
'\011'
tab karakteri (tab)
9
'\n'
'\xA'
'\012'
aşağı satır (new line)
10
'\v'
'\xB'
'\013'
düşey tab (vertical tab)
11
'\f'
'\xC'
'\014'
sayfa ileri (form feed)
12
'\r'
'\xD'
'\015'
satır başı (carriage return)
13
'\"'
'\x22'
'\042'
çift tırnak (double quote)
34
'\\'
'\x5C'
'\134'
ters bölü (back slash)
92


Kullanılışlarına bir örnek :{char ch;ch = '\a';}
3) 16'lık (hexadecimal) sayı sisteminde tanımlanmış karakter sabitleriTek tırnak içinde tersbölü ve x karakterlerinden sonra bir hex sayı verilirse bu ASCII tablosundaki o sayısal değerin gösterdiği sıra numarasındaki karaktere işaret eden bir karakter sabitidir.
'\x41' /* 41H numaralı ASCII karakteridir. */'\xff' /* FFH numaralı '2' karakter sabitidir. */'\x1C' /* 1C numaralı ASCII karakter sabitidir. */
Not : x yerine X karakteri C'nin ilk klasik versiyonunda kabul ediliyordu şimdi artık geçerli değildir. Örnek :{char harf;harf = '\x41'; }
Yukarıdaki örnekte harf isimli char türden değişkene 41H ASCII sıra no.lu karakter atanmıştır. Bu da desimal sistemdeki 65 sayısına eşittir. 65 sıra nolu ASCII karakteri 'A' karakteridir. Dolayısıyla harf isimli değişkene 'A' atanmıştır.
4) 8'lik (octal) sayı sistemde tanımlanmış karakter sabitleriTek tırnak içinde tersbölü karakterinden sonra bir oktal sayı (en fazla 3 digit) yazılırsa bu kullanılan karakter setindeki o sayısal değerin gösterdiği sıra numarasındaki karaktere işaret eden bir karakter sabitidir. Örneğin :
'\012' /* 10 numaralı ASCII karakteri, Tam sayı değeri 10 */'\16' /* 14 numaralı ASCII karakteri. Tam sayı değeri 14 */'\123' /* 83 numaralı ASCII karakteri. Tam sayı değeri 83 */
Program içinde kullanımına bir örnek:{char a, b;a = '\xbc' ; /* hex sistemde tanımlanmış char sabit */b = '\012'; /* oktal sistemde tanımlanmış bir char sabit */}
7 numaralı ASCII karakteri olan çan karakterini sabit olarak 3 biçimde de yazabiliriz.
'\x7' /* hex gösterimli karakter sabiti */'\07' /* oktal gösterimli karakter sabiti */'\a' /* önceden belirlenmiş ters bölü karakter sabiti */
Burada tercih edilecek biçim son biçim olmalıdır. Hem taşınabilir bir biçimdir hem de okunabilirliği daha iyidir. Başka karakter setlerinde çan sesi karakteri 7 sıra numaralı karakter olmayabilir ama önceden belirlenmiş ters bölü karakter sabiti şeklinde ifade edersek hangi sistem olursa olsun çan sesi karakterini verecektir. Ayrıca kodu okuyan kişi çan sesi karakterinin 7 numaralı ASCII karakteri olduğunu bilmeyebilir ama C programcısı olarak '\a' nın çan sesi karakteri olduğunu bilecektir.
Karakter sabitleri konusunu kapatmadan önce karakter setleri konusunda da biraz bilgi verelim :Günümüzde kullanılan en popüler karakter seti ASCII karakter setidir. ASCII (American Standard Code for Information Interchange) sözcüklerinin başharflerinden oluşan bir kısaltmadır. ASCII setinin orjinal versiyonunda karakterler 7 bitlik bir alanda kodlanmıştır. Bazı bilgisayarlar ise 8 bit alana genişletilmiş ASCII seti kullanırlar ki bu sette 128 yerine 256 karakter temsil edilebilmektedir. Farklı bilgisayarlar farklı karakter setleri kullanabilmektedir. Örnek olarak IBM mainframe'leri daha eski bir set olan EBDCID seti kullanırlar. Unicode ismi verilen daha geliştirilmiş bir karakter seti vardır ki karakterler 2 byte alanda temsil edildikleri için bu sette 65.536 farklı karakter yer alabilmektedir. Gelecekte bir çok makinanın bu karakter setini destekleyecek biçmde tasarlanacağı düşünülmektedir.
İşaretsiz türlere ilişkin sabitlerİşaretsiz türlere ilişkin sabitler onların işaretli biçimlerinin sonuna u ya da U getirilmesiyle elde edilirler.
-15000 (signed) int sabit15000U (unsigned) int sabit.1200L (signed) long sabit1200Lu (unsigned) long sabit.
Sonek olarak kullanılan l, L, u ve U harflerinin sırası önemli değildir:
123ul123UL123Lu123lu
Hepsi geçerli (unsigned) long sabitlerdir.
Tamsayı sabitlerinin 16'lık ve 8'lik sistemlerde gösterilmesiC dilinde tamsayı sabitleri (char, int, long) 10'luk sistemin yanısıra 16'lık ve 8'lik sistemlerde de yazılabilirler.Bu sistemlerde yazılmış tamsayı sabit türleri için yukarıda verilen kurallar aynen geçerlidir. Çünkü bir sayıyı 16'lık ya da 8'lik sistemde yazmakla onun yalnızca görünümünü değiştirmiş oluruz. Sabit türleri gösterim biçimiyle değil nicelikle ilişkilidir. C dilinde ikilik sayı sisteminde sabitlerin yazılması söz konusu değildir.
16'lık sistemde gösterim 0Xbbb.. biçimindedir. (b karakterleri basamakları gösteriyor, 9'dan büyük basamak değerleri için A, B, C, D, E, F karakterleri ya da a, b, c, d, e, f karakterleri kullanılabilir.8'lik sistemde ise 0bbb.. biçimindedir. (nadir olarak kullanılır). Örnekler:
0x12 sayısı hex gösterimli bir int sabittir. 10luk sistemde 18 sayısına karşılık gelir.0X12L sayısı hex gösterimli bir long sabittir. 0x1C205470 hex gösterimli bir long sabittir. Çünkü (DOS'da) int sayı sınırını aşmaktadır.0x1934ul hex gösterimli (unsigned) long sabittir.
01234 oktal gösterimli int sabit0567L oktal gösterimli long sabit0777U oktal gösterimli (unsigned) int sabit0452Lu oktal gösterimli (unsigned) long sabit.
Sabitler yukarıda gösterildiği gibi her üç sayı sisteminde de yazılabilir, hatta bir ifade içinde kullanılan sabitler farklı sayı sistemlerinde de yazılmış olabilirler, bu derleme zamanında error oluşturacak bir neden olmayıp tamamen legaldir:....int x;x = 0x1AC2 + 345 + 01234;
16.000 karakterlik bir makale yeterli sanırım [ ilk defa kullanıyoruz sitemizde ;)]. İsterseniz makalemize burada son verelim. Bir sonraki konumuz ise "Gerçek Sayı Sabitleri" ve daha fazlası...
Gerçek Sayı Sabitleri
1) Float türden sabitlerNokta içeren ve sonuna f ya da F getirilmiş sabitler float türden sabitler olarak ele alınırlar. Örneğin:1.31F10.F-2.456f
float türden sabitlerdir.
Not : Klasik C'de, yani C dilinin standartlaştırılmasından önceki dönemde float türden bir sabit elde etmek için, sayının sonuna f eki alması yeterliydi; yani nokta içermesi gerekmiyordu. Ama standartlarda yapılan değişiklikle artık float sabitlerin sonuna ek gelse de mutlaka nokta içermeleri gerekiyor. Yani derleyiciler 3f
şeklinde bir yazımı derleme zamanında bir error mesajıyla bildiriyorlar.
2) Double türden sabitlerSonuna f ya da F eki almamış nokta içeren sabitler ile float duyarlığını aşmış sabitler double sabitler olarak değerlendirilirler.Örneğin :-24.5
double türden sabittir.
3) Long double türden sabitlerLong double türden sabitler noktalı ya da üstel biçimdeki sayıların sonuna l ya da L getirilerek elde edilirler :1.34L10.2L
long double türden sabitlerdir.
Gerçek sayı sabitlerinin üstel biçimde gösterilmesi :
Gerçek sayı sabitleri üstel biçimde de ifade edilebilirler, bunun için sayının sonuna e ya da E eki getirilerek bir tamsayı yazılır. Bu, sayının 10x gibi bir çarpanla çarpıldığını gösterir.2.3e+04f1.74e-6F8.e+9f
burada e 10'un kuveti anlamına gelmektedir:1.34E-2f ile 0.0134-1.2E+2F ile 120.f aynı sabitlerdir.
-45.67e+35L1.2E+200
C++ KONTROL YAPILARI

• IF ELSE• FOR• WHİLE• SWİTCH CASE• DO WHİLE
IF KOMUTU:if komutu anlaşılması ve yazılımı en basit olanıdır. if komutu, bir grup komutun koşullu olarak yürütülmesi amacıyla kullanılır. Buna bir örnek verecek olursak; düşünün ki bir sınav yapılıyor ve 50 ve üzeri alanlar geçecek. Bunun için if i kullanırsak not 50 ye eşit veya büyükse (büyük eşit) geçer not olacak. //not.cpp// 50 ve 50 den yukarsı geçiyor.#include main(){int not;cout << "Notu yazınız:"; cin >> not; if ( not >= 50 )cout << "Geçtiniz!";}
Sanırım bu örnekte ne dediğimi anlamış olacaksınız. if ( not >= 50 )cout << "Geçtiniz!";if (ifade){Komut;Komut;...}
Burda görüldüğü gibi if (ifade) ve sonraki komutlarda { } bloğunun içine yazılır. Şimdi if`e bir de şu açıdan yaklaşalım. if in kelime anlamı "eğer" dir. Mantık şudur: eğer belirtilen parametre doğruysa, if komutu, if ten sonra gelen bloktaki fonksiyonları gerçekleştirir. Doğru değilse, if den sonraki bloğu yok sayar. Burada bir detaya daha inmek istiyorum. Ne demiştik, mantık işlemlerinde olay ya doğrudur (1) ya da yanlıştır (0). Şimdi yukarıdaki if in genel kullanım şekline tekrar bakalım. Bunu, eğer parametre doğru ise kullanabiliriz. Bir de bunun tersini düşünelim. Bit bazında işlemlerde sanırım ( ! ) bunu görmüştük. Her bir biti ters çevirir. if (!ifade){komut (yanlış (0));Komut (yanlış (0));....}
Bence buranın üstünde biraz daha duralım. Çünkü bunu anlarsak diğerlerinde zorlanmayız. Son yaptığımızda ifadeyi tersine çevirdik. //pozitif.cpp// Bunada açıklama yaptırmayın ( yapamadımda)#include main(){int x;cout << "Bir sayı girin:" ;cin>> x;if ( x > 0 )cout << "Pozitif" ;}
Aynısının negatif ini de siz yapın. Şimdi bir de iç içe if örneğine bakalım://gecti.cpp// Buna açıklama yapmıycam!#include main(){int not;cout << "Notunuzu giriniz:";cin >> not;if ( not> 50)cout << "Geçtiniz!" ;if (not < 50)cout << "Kaldınız!" ;if ( not==50)cout << "zar zor geçtin ";}

IF ELSE:
if-else komutu iki işlemden hangisinin uygulanacağına karar verir. Else kısmı seçimlidir, gerekmiyorsa kullanılmayabilir. Yazılım kuralı ile şöyledir;
if ( ifade)komut1;else komut2;
Daha genel şekliyle;
if ( ifade ) {komut1;komut2;...}else {komut1;komut2;...}
Veya lojik olarak baktığımızda sanırım daha iyi anlayacaksınız;
if (ifade)blok_dogru (1);else blok_yanlis (0);
Sanırım artık açıklama yapmama gerek kalmayacak. Şimdi örneklerle bunu pekiştirmeye çalışalım:
//tekcift.cpp//sayı tekmi çiftmi onu görüceğiz#include main(){int sayi;cout<< "Bir sayı giriniz:";cin >> sayi; if (sayi %2==1 )cout <<"tek";elsecout << "çift" ;}
Bir örnek daha verelim:
//ifelse.cpp#include main(){int not;cout<< "Notu giriniz:";cin >> not;if (not >= 50)cout << "Geçti!";elsecout << "Kaldı!";}
if kısmından anlatmaya başlayacağım. Eğer notumuz 50 ye eşit veya 50 den büyük ise geçiyoruz aksi halde kalıyoruz.
Bir de bir if-else in altında bir tane daha if-else kullanalım.
//sinav.cpp// alt alta if-else#include main(){int not;cout<< "Not`u giriniz:";cin >> not;if (not >= 50)cout << "Geçtiniz!";else{cout <<"Bütten alınan not:";cin >>not;if( not>=60 )cout << "Geçtiniz!";elsecout <<"Kaldınız!"; }}
Burada da şunu inceledik: Diyelim ki sınava girdik ve notumuzu öğrendik, notu giriyoruz 50 nin altındaysa kalıyoruz ve bütünleme sınavına giriyoruz. Bütünlemede de geçer not en az 60. Sanırım bu basit örneklerle olayı iyice kavramışızdır. if-else i de burada bitiriyoruz.
?: Komutu
Bu komut, yalnızca C++ a özgüdür. Kendine özgü bir yazılımı ve mantıksal kullanımı vardır ve if-else komutunun kısaltılmışıdır. Fakat, tüm if-else komutları yerine kullanılmaz. Yalnızca karşılaştırma sonrası, tek komut kullanılan uygulamalar için geçerlidir. Bu söylediklerimizi örnek üstünde gösterelim:
//tekcift.cpp//tekcift.cpp yi bu sefer ?: ile yapıyoruz#include main(){int sayi;cout<< "Bir sayı giriniz:";cin >> sayi; cout << (sayi %2==1 ? "tek" : "çift") ;}
Kullanış biçimi: cout << (sayi %2==1 ? "tek" : "çift") ; çok basit ama dikkat edelim. Her zaman kullanmıyoruz.
Switch-case Komutları:
Switch Case deyimi işlev bakımından if deyimine çok benzemektedir. Çok sayıda if işlem blokları kullandığımızda programın okunurluğu azalacak ve programı izlemek zorlaşacaktır. Programımızın bir değerini bir çok değerle karşılaştırmak gerektiğinde switch komutunu kullanacağız. Switch seçeneği ile değişkenin durumuna göre bir çok durum içersinden bir tanesi gerçekleştirilir. İstersek de if deyimi ile switch case' yi birlikte kullanabiliriz. Switch in yaptığı iş kısaca, ifadenin değerini sırayla sabitlerle karşılaştırarak ve her satırı işlemektir.
switch( Kontrol Değişkeni ){case Sabit1 : komut1; case Sabit2 : komut2; ...default : Komutson;}
Buna en basit örneğimizi verelim:
//switch.cpp// switch-case yi öğreniyoruz. #include main(){int i;cout<< " 1 ile 4 arası bir sayı giriniz:";cin>>i;switch(i){ case 1 :cout<<"1 Girdiniz"; break;case 2 :cout<<"2 Girdiniz"; break;case 3 :cout<<"3 Girdiniz"; break;case 4 :cout<<"4 Girdiniz"; break; default:cout<<"1 ile 4 ten farklı"; }
Burada gördüğümüz gibi i değişkenine bağlı olarak Program işliyor. Case'lerinin aldığı değere göre kendinden sonra gelen komutları işliyorlar.
Burada daha önce görmediğimiz break komutunu gördük. Buna ilerde daha detaylı olarak değineceğim. Fakat biraz bahsetmek istiyorum.
Programımızda değişkene 1 değerini verdiğimizi farz edelim. Case 1 adlı satırı geçip ondan sonraki komut dizisini işleme soktuk. Bu işlemin tamamlanması için break komutu kullanılıyor. Yazılımda break komutu goto gibi işlev görür ve derleyiciye switch komutundan çıkması için talimat verir. Sorunu ortadan kaldırmak için her durum için break deyimi eklemeliyiz (tavsiye). Ne demiştik; bir çok karşılaştırma olduğunda switch'e ihtiyaç duyuyoruz. Karşılaştırmaların hiç biri olmadığı anda da ortaya default tan sonraki satırın işlenmesi kalıyor. Sanırım bu örnekte basit olarak anlamış olacağız.
Daha karmaşık bir örnek verecek olursak:
//ucgen.cpp// Program gireceğimiz ölçülere göre üçgenin Alan, Yükseklik ve Tabanını bulur// switch-case örneğimiz. #include int main() { char secenek; float alan, yukseklik, taban; cout << "Program gireceğimiz ölçülere göre üçgen'in Alan, Yükseklik ve Tabanını bulur!\n" <<> Alan : Bulmak için yükseklik ve tabanı gireceğiz:" <<> Yükseklik : Bulmak için alan ve tabanı gireceğiz:" <<> Taban : Bulmak için alan ve yüksekliği gireceğiz:" <<> A, h, t :"; cin>> secenek; switch(secenek) { case 'a': case 'A': { cout<<>> yukseklik; cout<<< "Taban: "; cin >> taban; alan = 0.5 * taban * yukseklik; cout<<<>> alan; cout<<< "Tanabı: "; cin >> taban; yukseklik = 2.0 * alan / taban; cout <<>> alan; cout <<>> yukseklik; taban = 2.0 * yukseklik / alan; cout << endl << endl <<"Tabanı: " << taban << endl; break; } } return 0; }
Gayet basit bir örnek değişkenleri tanımladık. Caseleri koyduk ve caselerden sonra gelecek komut satırlarını yerleştirdik. Bu program göründüğü gibi zor değildir.
Döngü Komutları:
Bir ya da birden fazla deyimin tekrar edilmesini sağlarlar. Döngüler, " belli bir koşul sağlandığı sürece sürekli çalıştırılacak kod parçası " olarak nitelendirilebilir. For döngüsü, while döngüsü, do-while döngüleri, diğer yüksek seviyeli dillerdeki gibidir. Ancak en büyük fark, programın bu tekrar döngüleri istediğinde terk edebilmesidir. C/C++, döngüden çıkmak için beş ayrı yöntem vardır.
Sonlama Tipi Açıklama
normal Tüm tekrarlar yapılır ve test ifadesi işartı sağlanırsa döngüden çıkar.
break Beklenen hatayla karşılaştığında kullanılır
continue Döngü içinde mantıksal akışa göre kullanılır
break ve continueYukarıdakilerin karmaşık bileşimi.
exit Ciddi ve geri alınamaz hata oluştuğunda.


C/C++ da ki döngülerin arasındaki fark, beklenen döngü sayıları arasındaki farktan kaynaklanır. Eğer önceden belirli bir döngü sayımız mevcut ise For döngüsü kullanılır. while ve do-while döngülerinde döngü sayısı belli değildir. C++ nın bize vermiş olduğu esneklik sayesinde, döngüleri son derece esnek bir biçimde kullanma şansımız vardır.
While Döngüsü:
İçlerinde anlatımı ve anlaşılması en kolay olan döngüdür. While döngüsü, döngü sayısının belli olmadığı zamanlarda kullanılır.
while ( koşul ) Komut;__________________
ÇILGIN TÜRK
staticiation Kullanıcının Profilini Göster staticiation Anasayfasını Ziyaret Et staticiation tarafından yazılan bütün mesajları göster staticiation isimli kullanıcıyıarkadaş listenize Ekleyin
11.06.2007 #3 (permalink) staticiation Çılgın Türk

Katılma Tarihi: Feb 2006Nereden: C:/windows/system32Yaş: 22Mesajlar: 2,274 Meslek : Programmer
--------------------------------------------------------------------------------
While döngüsü, içinde bulunan ifade doğru olduğu sürece altındaki komut veya komut bloğu yürütülür. Eğer yanlış ise kontrol bir sonraki komut veya komut bloğuna geçer.
While döngüsü daha genel şekliyle:
while ( ifade ){komut;komut;komut;...}
Burada bir şeye dikkat etmenizi istiyorum. Çoklu komutlar kullandığımızda { } parantezleri gereklidir.
// while1.cpp// while döngüsünü kullandık// girdiğimiz sayıdan 100 e kadar olan sayıları topladık #include main(){int x, y;y= 0;cout<< " Bir Sayı Giriniz ( Sayı 100 den küçük olucak ) : ";cin>>x;while (x< 101){ y =y+x;x =x+1; } cout<< "Toplam= "<< y;}
Burada önce x ve y yi tanımladık. y=0 değerini verdik. Sonra klavyeden girilen değerin x olduğunu yazdık. while (x< 101) işte burada ifademiz x< 101. Şimdi bu koşul sağlanıncaya kadar döngümüz devam edecek. While' den sonraki bloğa geçtiğimizde ise. y` ye x i ekliyoruz ve x in değerini her seferinde 1 arttırıyoruz. Sanırım bu basit örnekte döngünün basit yapısını ve mantığını anlamış oldunuz.
Döngünün verilen ifade veya koşula göre sağlanması döngülerin en önemli konusudur. Eğer bir döngüden çıkılmazsa o döngü sınırsızdır. Buna da "sonsuzdöngü" denir.
Döngüler konusunda en çok rastlayacağımız hata da budur. Şimdi buna bir örnek verelim. Fakat, şimdiden uyarıyorum, sonsuz döngü yapıldığında bilgisayarınız kilitlenebilir. Onun için buna şimdiden hazır olun. Zaten bir sefer denediğimizde ne demek istediğimi anlayacaksınızdır.
//sonsuz.cpp//while döngüsü ile sonsuz bir döngü yaptık #include main(){int x=1;while(x)cout<< "x= "<< x++<< endl;}
Burada neden sonsuz bir döngü oldu? Evet işte x ifadesini koşula bağlamadık. Şayet while(x<10) demiş olsaydık. 1,2,3,4,5,6,7,8,9 a kadar x sayısı sıralanacaktı.
#include //klavye.cpp//while döngüsü ile klavyeden girilen sayı main(){int x, y = 0; while (y<>>x;y = y+x;}cout<< "Toplam= "<< y ;}
Bu programda da klavyeden girilen sayıların toplamı 20' den büyük olunca program Toplam olarak söylüyor. Sanırım basit While yapısını anladınız. Şimdi birazda karmaşık programcıklar yapalım.
1. Örnek: Girilen altı not'un ortalamasını alıyor.
//ortalama.cpp// while döngüsü ile girilen notların ortalamasını aldık. #include int main(){int toplam, sayac, not, ortalama; toplam = 0;sayac = 1; while ( sayac <= 6 ){cout << "Notu giriniz: ";cin >>not; toplam = toplam + not;sayac = sayac + 1; } ortalama = toplam / 6;cout << "Sınıf ortalaması = " << ortalama << endl; return 0; }
Bu örneğimizde yine toplam, sayac, not, ortalama gibi değişkenleri tanımladık. ( toplam =0 ; ve sayac = 1; ) de değişkenlere ilk değerlerini atadık. While döngüsünün içinde sayac değişkenimizi altı defa işlemesini söyledik. Sonra alttaki toplam ve sayac bölümlerinde ise toplam a not' u ekliyoruz, her seferinde de sayaç değerini bir arttırıyoruz ve sayac değeri 6' ya gelince while döngümüz duruyor. Program sonra toplamı alıp altıya böler bu sayede ortalamayı alır, sonrada çıktısını gerçekleştirir.
2. Örnek:
//faktoriyel.cpp// while ile faktoriyel hesaplama #include int main(){int sayi;long int faktoriyel=1;cout << "Bir sayı giriniz: ";cin >> sayi;cout <<> 1)faktoriyel *= sayi--; cout << faktoriyel << endl;return 0;}
Burda while (sayi>1) şeklinde koşulumuzu belirttik. Bir altında ise faktoriyel *= sayi--; evet burda da daha önce gördüğümüz gibi eşitleme operatörü olan ( *= ) i kullandık.
Yani faktoriyel'e faktoriyel*sayi-- nin değeri atanır. Matematiğini düşünürseniz; 7 sayısının faktöriyeli 7 *= 7-- gibi. yani 7 ye devamlı 7-- oda 6 demektir. 6 ile çarpımı eklenir, bu 6-- ile devam eder. En basit anlatımı bu.
Sonrada tüm while döngüsü bittikten sonrada faktoriyel' in sonucu çıktı olarak ekrana gelir. Bu örnekte negatif sayıların faktöriyelini de 1'e eşit tutuyor: Dikkat ediniz.
Negatif sayıların faktöriyeli alınmaz şartını koymadık. Şayet siz koymak isterseniz bir if else bloğu yerleştirmelisiniz if(sayi>=0) faktoriyel al yoksa faktoriyel alma gibi.
3. Örnek:
// maas.cpp// while if-else ile bir maas vergi uygulaması #include int main( ){unsigned long maas, net, vergi = 0.0; // maas net vergi bunları tanımladık cout<< "Lütfen maaşınızı giriniz: "; // maası giriyoruzcin>> maas; // maası programa alıyoruz while( maas >= 0.0 ) // maaşın koşlunu yazıyorus döngüye{ if( maas <= 250000000 ) // maaş 250 milyondan az isevergi = 0.0;else // vergi yokif( maas < vergi =" maas" isevergi =" maas" net =" maas">> maas; // maaşı program alıyor }return 1; }
Bu örnekte sanırım fazla açıklama yok. Sizden istediğim, üç kişinin maaşını girdikten sonra onların alacağı toplam maaş ve ödemeleri gereken toplam vergiyi bulmanız. Bunu yaparsanız buraya kadar olanlardan bir şeyler anlamışızdır.
Burada bırakmak istiyorum. Bir sonrakikonularımızda Döngü tiplerine devam edeceğiz. Görüşmek üzere.
Do - while Döngüsü:
Bu döngü while döngüsünün biraz değiştirilmiş halidir. Do-while döngüsünde karşılaştırma işlemi, döngünün sonunda gerçekleşir. Bunun sonucu olarak döngünün içine en az bir defa girilmiş olur. Yapısı aşağıdaki gibidir.
docümlewhile ( koşul );
do' nun altındaki cümle kısmındaki komut satırları birden fazla olursa diğer döngülerde olduğu gibi " { } " içine alıyoruz. Bunu kullanmamız kodları okuma da ve ayırma da daha çok işimize yarayacaktır.
do{cümlecümlecümle...}while ( koşul );
Şimdi yukarıda demek istediğimizi standart kod satırı üzerinde anlatalım. Kodları yazdığımızda, komut sırası do'ya geldiği zaman, do' dan sonraki komutun döngünün başı olduğunu belirtiyor.
Diğerlerinden farklı ( for, While ) olarak döngüye giriş yapıyor, yani hiçbir kontrol yapmadan en az bir defa döngünün içine girmiş oluyoruz. While'e geldiğinde ise koşulu kontrol ediyor, eğer doğru ise döngünün başındaki komuta giderek yeniden komutları işliyor. Eğer koşul kontrolü yanlış ise while'den bir sonra ki komutu veya komutları işleyip döngüden çıkıyor. Şimdi bu söylediklerimizi örnek üzerinde gösterelim.
//do.cpp// number echoer//do-while döngüsünü kullandık#include int main (){unsigned long x;do {cout<< "Bir sayı giriniz ( Durdurmak için 0 ) : ";cin>> x;cout<< "Girdiğiniz sayı: " << x << "\n";}while (x != 0);return 0;}
Örneğimizde de görüldüğü gibi önce do dan sonraki komutlar işleniyor. Şayet 0 girersek while işlemeye başlıyor. Do-while döngüsü C++ da çok fazla kullanılmaz bunun yerine biz for' u kullanacağız çünkü for döngüsü çok daha güçlüdür.
For Döngüsü
For döngüsünün çalışması, döngünün kontrol değişkenine başlangıç değerinin atanması ile başlar. Aşağıda vereceğimiz ilk değer atama cümlesinden kastımızda budur. Yani bu kısımda başlangıç tanımları yapılır.
For döngüsünün başlangıç adımıdır. Bu kısımda yapılan bir değişken tanımındaki değişkenin ömrü, for döngüsünün sonunda biter. Sonra döngü koşul kısmına gelinir ve bu test edilir. Şayet değeri !0, doğru (1) olduğunda döngü içindeki komutlar uygulanır. Arttırma ise for döngüsü işleminin sonunda meydana gelir. for içindeki tüm deyimler meydana geldikten sonra uygulanır.
Genel yapısı:for ( ilk değer atamalar, koşul, arttırma)cümle
Bunu daha da genellersek, diğerlerinde de olduğu gibi cümleler birden fazla olduğunda komut bloğu arasına alınacaktır.
for ( ilk değer atamalar, koşul, arttırma){cümle1cümle2cümle3...}
Bu söylediklerimizi bir örnek üzerinde izah edelim.
//for.cpp// for döngüsüyle bir örnek.#include int main (){for (int n=10; n> 0; n--){cout <<> ";} cout<< "Bitti!";return 0;}
Ben sadece for (int n=10; n>0; n--) kısmı anlatacağım, diğer kısımlar apaçık gözüküyor zaten. For diyip () imizi açtık. Sonra içine ilk basamağımız olan değişken tanımlamamızı yaptık. İnt n=10; Bu bizim yukarıda bahsettiğimiz ilk değer atamalar kısmı. Daha sonra koşulumuzu yazdık. n>0; bunu test ettik ve !0 yani doğru (1) çıktı. Sonrada n-- yi yazdık. Genel tanımda yazdığımız arttırma kısmı. Aslında buna yenileme komutları desek daha doğru olur. Biz bu örnekte örneğin azaltma yaptık. Neyse umarım bu for örneğini anlamışsınızdır.
C++ da yapacağımız çoğu örnekte for u kullanacağız. C++ 'nın en güçlü yanlarından biriside for döngüsüdür. For döngüsünün başında yani ilk değer atama kısmında birden çok değişken tanımlayıp değer atıyorsak bunları virgül ( , ) ile bir birinden ayırmalıyız. İlk değer atamadan koşul bölümüne geçtiğimizde ve koşul bölümünden arttırma ya geçerken noktalı virgül ( ; ) kullanmalıyız. Tabi kullandığımız bu üç kısım seçimlidir istersek boş bırakabiliriz. Fakat, noktalı virgüller ( ; ) konulması zorunludur.
1.Örneğimiz://factoriyel_for.cpp//for döngüsüyle faktöriyel hesap.#include int main(){int fac, sayi;cout<<"Sayıyı giriniz: ";cin>>sayi;fac=1;for (int j=1; j<=sayi; j++){fac=fac*j;}cout<<"Sonuc: \a"<< fac;return 0;}
Bu örneğimiz oldukça basit. Bildiğimiz matematiksel faktöriyel işlemini C++ kodları olarak yazdık. (\a yı kullandım bip! demesi için ).
2.Örneğimiz://carpim_for.cpp// iç içe for döngüsüyle çarpım tablosu#include main(){cout<<"Çarpım Tablosu! \n"<=10; x++) {for (y =1; y<=10; y++)cout<<" "<<"\n"; } }
Görüldüğü gibi ilk for döngüsünde, birinci bileşen olan x i önce 1 e eşitledik sonra birer arttırarak 10' a kadar götürdük. Sonraki for da da aynısını y için yaptık ve bu iki bileşeni çarparak ekrana yazdırdık. Son derece basit bir örnek.
3.Örneğimiz://asal_for.cpp// for , if ve while ile asal sayı bulma#include int main(){int sayi;cout << "Bir sayı girinizr: ";cin >> sayi;for (int sayac=1; sayac< test =" sayac;asal"> 2)if ((sayac % test) == 0)asal = 0;if (asal == 1)cout<< sayac << " bir asal sayıdır!\n";}return 0;}
Bu örneğimizde ikinci örneğimize benziyor. İçinde for, while ve if de var. While ve if' in içindeki matematiksel ifadeleri biliyorsak örnek gayet basit gelecektir.
Break Komutu
Break komutunu, swtich komutundan çıkmak için önceki derslerimizde görmüştük. Komutun kendine özgü bir kullanımı daha vardır. Break komutu bir döngünün içinde çalıştırılırsa o an o döngü biter. Bir goto gibi işlem gördüğünü de söyleyebiliriz. Break kullanınca Program döngüyü bitirir ve döngünün sonundaki satırdan çalışmaya devam eder. Bir örnek verelim.
//break.cpp//break komutunu kullandik.#include main(){for (int x = 1; x <= 10; x++) {if (x == 7) {break;}cout<< x << " ";}}
İşte örneğimizde gördüğünüz gibi. X 7'ye eşit olunca break; döngüyü bitiriyor ve döngüden sonraki satırı çalıştırmaya başlıyor.
Continue Komutu
Continue komutu bir döngü içinde çalıştırılırsa , o döngü içinde bulunan tur sona erer ancak döngü devam eder. Diğer bir deyişle, gövdenin içinde bulunan continue komutundan sonra gelen cümleleri atlayarak, döngüyü devam ettirir. Bunu bir örnekle açıklayayım.
//continue.cpp//continue ve break komutunu kullandik.#include main(){for(int i=0; i <= 9; i++){if(i==5)break;cout<<< endl;}for(int x=0; x <= 9; x++){if(x ==3)continue;cout<< x;}}
Bu örnekte break ve continue'yu birlikte kullandım. Hem continue'yu hem de break ve continue karışımını bir arada vermiş oluruz diye düşünüyorum.
Örneğimizi inceleyecek olursak. Break olan kısımda görüleceği gibi 5'e kadar döngü devam ediyor, döngü bitiyor ve ondan sonraki cümleye geçiliyor. Sonra yine bir for döngüsü başlıyor ve bu sefer x 3' e eşit olana kadar devam ediyor. 3'e eşit olunca da if içindeki x==3 koşulunu sınıyor ve continue ye olduğu için bunu atlıyor. Zaten ekran çıktısını aldığınızda ne demek istediğimi daha rahat anlayacaksınız

FONKSİYONLAR
Bir fonksiyon birkaç tane Program ifadesini tekbirim içinde gruplar ve buna bir isim verir. Bu birim daha sonra programın diğer bölümleri tarafından çağrılabilir.Fonksiyonları kullanmanın en önemli sebebi bir programın kavramsal olarak düzenlenmesine yardımcı olmaktadır.
Fonksiyon kullanmanın diğer bir sebebi fonksiyonlar programın boyutunu küçültmeleridir. Bir program içinde birden fazla yerde ortaya çıkan herhangi bir komut dizisi fonksiyon içine alınmaya adaydır. Fonksiyon program boyunca pek çok kere çalıştırılıyor olsa bile fonksiyonun kodu bellekte tek bir yerde saklanır.
Basit Fonksiyonlar
Şimdi basit fonksiyonlar konusunu basit bir program üzerinde inceleyerek anlatalım. Fonksiyonumuzun ismi TABLE ve programın listesi şöyledir:
// table.cpp// basit bir fonksiyon#include #include
void starline(); // fonksiyonun deklare edilmesi
void main(){clrscr();starline(); // fonksiyonun cagrilmasicout << " ~~Bilgisayar data Bilgileri~~ " << endl;starline();cout <<"Char -128 to 127" << endl<<"Short -32,768 to 32,767" << endl<<"Int Sisteme bagli " << endl<<"Long -2,147,483,648 to 2,147,483,647" << endl;starline(); // fonksiyona cagrigetch();}// Fonksiyon burada yaziliyor
void starline(){for(int j=0; j<40; j++)cout<<"*";cout<
Program çıktısı şöyledir
********************************************Bilgisayar Data Bilgileri********************************************char -128 to 127short -32,768 to 32,767int system dependentlong -2,147,483,648 to 2,147,483,647********************************************
Bu program iki fonksiyondan oluşur : main() ve starline(). Bir fonksiyonu programa dahil etmek için üç tane bileşen vardır : fonksiyon deklarasyonu, fonksiyona yapılan çağrılar ve fonksiyonun tanımı.
Fonksiyonun Deklare Edilmesi
Nasıl ki bir değişkeni derleyiciye bildirmeden kullanamıyorsunuz. Bunu yapmanın iki yolu vardır biri fonksiyonu çağrılmadan önce deklare etmektir. Diğeri çağrılmadan önce tanımlamaktır. Biz şimdi çağrılmadan önce deklare edeceğiz.TABLE programında starline() fonksiyonu şu satırda deklare edilir:
void starline();
Bu deklarasyon derleyiciye daha sonraki bir noktada starline isminde bir fonksiyon sunmayı planladığımızı anlatır. Void anahtar kelimesi fonksiyonun döndürdüğü bir değer olmadığını, boş parantezler ise argüman almadığını belirtir.Fonksiyon deklarasyonu noktalı virgülle sona erdiğine dikkat edin. Bu kendi başına komple bir ifadedir.
Fonksiyonun deklarasyonuna ayrıca prototip de denir,çünkü fonksiyon deklarasyonları fonksiyonların bir modelini veya taslağını sunar. Fonksiyon deklarasyonları derleyiciye,”Program içinde buna benzer bir fonksiyon birazdan ortaya çıkacak, bu nedenle,fonksiyonun kendisini görmeden onunla ilgili referansları görürsen bir problem yok” derler. Deklarasyonda kullanılan bilgiler (fonksiyondan dönen değerin tipi ve argümanların tipi ve sayısı) kimi zaman fonksiyonun imzası olarak adlandırılır.
Fonksiyonu Çağırmak
Fonksiyon main()’den üç kez çağrılır. Bu üç çağrının her biri şu şekilde görünür:
Starline();
Fonksiyonu çağırmak için yapmamız gereken işin hepsi bu kadar: Fonksiyon ismi ve peşinden gelen bir çift parantez. Çağrının söz dizimi, fonksiyon deklarasyonunda kullanılan ifade ile aynıdır; tek bir fark vardır, çağrıda fonksiyondan dönen değer yer almaz. Çağrı noktalı virgül ile sona erer. Çağrı ifadesini çalıştırmak fonksiyonu çalıştırmak demektir; yani kontrol fonksiyona geçer,fonksiyonun tanımındaki ifadeler çalıştırılır, sonra kontrol fonksiyon çağrısını takip eden ifadeye geri döner.
Fonksiyonun Tanımı
Nihayet fonksiyonun kendisine gelebildik. Buna fonksiyonun tanımı denir. Tanım fonksiyonun asıl kodunu içerir.starline()’tanımı şöyledir:
Void starline() //deklarator{for(int j=0; j<45;j++) // fonksiyonun gövdesi cout<<”*”;cout<
Tanım deklaratör olarak adlandırılan bir satırdan ve bunu takip eden fonksiyon gövdesinden ibarettir. Fonksiyon gövdesi küme parantezleriyle sınırlandırılmış fonksiyonu oluşturan ifadelerden meydana gelir.
Deklaratör deklarasyonla uyuşmak zorundadır: Aynı fonksiyon ismini kullanmalı,aynı tiple ve aynı sırada argüman içermeli ve döndürdüğü değer aynı tipte olmalıdır.
Deklaratörün noktalı virgül ile sona ermediğine dikkat edin.Bir fonksiyon çağrıldığında kontrol fonksiyon gövdesindeki ilk ifadeye aktarılır.sonra fonksiyon gövdesindeki diğer ifadeler çalıştırılır. Kapanan parantez ile karşılaşınca kontrol, fonksiyonu çağıran programa geri döner.
Deklarasyondan Kurtulmak
Bir fonksiyonu bir program içine yerleştirmek için ikinci bir yaklaşım,fonksiyon deklarasyonunu kaldırmak ve fonksiyon tanımını program listesi içinde fonksiyona yapılan ilk çağrıdan önce yerleştirmektir.
Deklarasyonu ortadan kaldırdığından dolayı,kısa programlar için bu yaklaşım daha basit olabilir,fakat daha az esnekti. Birkaç taneden fazla fonksiyon olduğunda,bu tekniği kullanmak için programcının fonksiyonları düzenleme işine hatırı sayılır ölçüde emek vermesi gerekir. Öyle ki,her fonksiyon kendisini çağıran diğer fonksiyonlardan önce yer almalıdır. Kimi zaman bu imkansızdır. Ayrıca birçok programcı main()’i program listesinde en başa yerleştirmeyi tercih eder, çünkü program çalışmaya bu noktadan başlar.
Sabitleri Aktarmak
Örnek olarak son örnekteki starline() fonksiyonunun çok katlı olduğuna karar verdiğimizi varsayalım. Her zaman 45 yıldız basan bir fonksiyon yerine ,herhangi bir karakteri herhangi sayıda basacak bir fonksiyon istiyoruz.İşte bu fonksiyonu şu şekilde gösterebiliriz ;
//basit.cpp#include#includevoid repchar(char,int); // fonksiyon deklarasyonuvoid main(){ clrscr();repchar('-',43); //fonksiyoncout << "Bilgisayar Data Bilgileri " << endl;repchar('=',23);cout <<"char -128 to 127" << endl<<"short -32,768 to 32,767" << endl<<"int Sisteme bagli" << endl<<"long -2,147,483,648 to 2,147,483,647" << endl;repchar('-',43); // fonksiyona cagrigetch();}// fonksiyon tanimivoid repchar(char ch,int n) //fonksiyon deklaratoru{for(int j=0;j<<
Bu fonksiyonda gireceğimiz değerleri char ve int olarak belirledikten sonra istediğimiz yerde tek satırda ne kadar ve ne nasıl bir char değeri gireceğimizi yazdırabileceğimiz bir programı gösterdik. Programın çıktısı şöyle olurdu:
-------------------------------------------Bilgisayar Data Bilgileri=======================char -128 to 127short -32,768 to 32,767int system dependentlong -2,147,483,648 to 2,147,483,647-------------------------------------------
Fonksiyon tanımındaki deklaratör bu parametrelerin hem veri tiplerini hem de isimlerini açıkça belirtir:
void repchar(char ch,int n);
Değişkenleri Aktarmak
Burada bir önümüzdeki örnekten farklı olan şey şudur kullanıcıya kaç tane ve nasıl bir karakter girmesi gerekeceğini siz sorduruyorsunuz. Bunu örnekte gösterelim:
// sira.cpp#include #include
void repchar(char,int); // fonksiyon deklarasyonu
int main(){char chin;int nin;clrscr();cout << "Bir Karakter Giriniz: ";cin >> chin;cout << "Kac kere tekrarlamak istediginizi giriniz: ";cin >> nin;cout << endl << endl;repchar(chin,nin); // fonksiyona cagrigetch();return 0;}//repchar()//fonksiyon tanimivoid repchar(char ch,int n) // fonksiyon deklaratoru{for (int j=0;j<< ch;cout << endl;}
Deklarasyonda Yer alan İsimler
Bunu bir örnekle anlatabiliriz:
Void display_point(int,int); //deklarasyon
Fakat daha iyi bir yaklaşım şöyle olur:
Void display_point(inthoriz,intvert); //deklarasyon
Bu iki deklarasyon derleyiciye tam olarak aynı şeyi ifade eder. Ancak ilk yaklaşımda (int,int) ifadesi hangi argümanın düşey hangi argümanın yatay koordinat için olduğunu söylememektedir.İkinci programın avantajı programcı için daha avantajlı olmasıdır.
Fonksiyonlardan Değer Döndürmek
Bir fonksiyon çağrısını tamamladıktan sonra kendisini çağıran programa tek bir değer döndürebilir.Genellikle döndürülen bu değer,fonksiyonun çözdüğü problemin cevabını içerirBunu pound ağırlık birimini kilograma çeviren bir programla inceleyelim:
//convert.cpp//poundu kilograma cevirir#include#include
float Ibstokg(float); //deklarasyon
int main(){float Ibs,kgs;clrscr();cout<<>>Ibs;kgs=Ibstokg(Ibs);cout<< "Senin agirligin " << kgs << " kilogram." << endl;getch();return 0;}//Ibstokg()//poundu kilograma ceviriyor
float Ibstokg(float pounds){float kilograms=0.453592*pounds;return kilograms;}
Bir fonksiyon değer döndürecekse, bu değerin veri tipi açıkça belirtilmelidir. Fonksiyon deklarasyonu bunu, veri tipini fonksiyon deklarasyonunda ve tanımında fonksiyon isminden önce yerleştirerek gerçekleştirilir. Önceki program örneklerindeki fonksiyonlar bir değer döndürmüyordu; bu nedenle döndürülen değer tipi için void kullanılmıştı bu programda Ibstokg() fonksiyonu float tipinde bir değer döndürür. Dolayısıyla, fonksiyon deklarasyonu şu şekilde olur:
Float Ibstokg(float);
Birinci float döndürülen değerin tipini belirtir. Parantez içindeki float ise ibstokg()’a aktarılacak argümanın tipinin be float olduğunu ifade eder.
Return ifadesi
Ibsto kg() fonksiyonuna pound cinsinden bir ağırlığı simgeleyen bir argüman aktarılır ve bu değer pounds parametresinde saklanır. Fonksiyon pound değerini bir sabit ile çarparak kilogram cinsinden karşılık gelen ağırlığı hesaplar; sonuç kilograms değişkeninde saklanır. Bu değişkenin değeri sonra, fonksiyonu çağıran programa bir return ifadesi,kullanılarak döndürülür:
Dikkat ederseniz hem main()’de hem de Ibstokg()’da değişkenini saklamak için bir yer mevcuttur:main()içinde kgs ve Ibstokg()içinde kilograms. Fonksiyon döndüğü zaman kilograms içindeki değer kgs içine kopyalanır . Fonksiyonu çağıran program, fonksiyonun içindeki kilograms değişkenine erişmez; sadece değişkenin değeri döndürülür.
Bir fonksiyona birçok argüman aktarılabilirken,fonksiyondan sadece tek bir değer döner. Daha fazla bilgi döndürmeniz gerektiğinde bu bir kısıtlamadır. Bununla birlikte fonksiyonlardan birden fazla değişken döndürmenin başka yöntemleri de vardır.
Bir fonksiyonun döndürdüğü tipi fonksiyon deklarasyonuna her zaman dahil etmeniz gerekir. Eğer fonksiyon bir değer döndürmüyorsa,bunu belirtmek için void anahtar kelimesini kullanın. Eğer fonksiyon deklarasyonunda döndürülen değerin tipini kullanmazsanız,derleyici fonksiyonun bir int döndürdüğünü varsayar.
Gereksiz Değişkenlerden Kurtulmak
Convert programı anlaşılırlık amacıyla kullanılan ama gerçekten gerekli olmayan birkaç tane değişken içerir.
//convert.cpp//poundu kilograma cevirir#include#include
float Ibstokg(float); //deklarasyon
int main(){float Ibs,kgs;clrscr();cout<<>>Ibs;kgs=Ibstokg(Ibs);cout<< "Senin agirligin " << kgs << " kilogram." << endl;getch();return 0;}//Ibstokg()//poundu kilograma ceviriyor
float Ibstokg(float pounds){float kilograms=0.453592*pounds;return kilograms;}
main()’de kgs değişkeni converts programından çıkartılır. Bunun yerine cout ifadesinin içine Ibstokg(9 fonksiyonu doğrudan eklenir
Ayrıca Ibstokg() fonksiyonunda kilograms değişkeni artık kullanılmaz
return 0.453592*pounds;
Hesaplama tamamlanır ve elde edilen sonuç,tıpkı bir değişkenin değerinde olduğu gibi, fonksiyonu çağıran programa döndürülür.Anlaşılırlık sağlama için programcılar genellikle return ifadesinde kullanılan deyimin etrafına parantez koyarlar:
return (0.453592*pounds);
Fonksiyonun Yinelenmesi
Fonksiyonların varlığı,yinelenme olarak adlandırılan bir programlama tekniğini mümkün kılıyor. Yinelenme, bir fonksiyonun kendisini çağırmasıdır. Bu biraz olmayacak bir şey gibi gelebilir; üstelik yinelenen bir fonksiyon genellikle bir programlama hatasıdır. Yinede doğru kullanıldığında bu teknik şaşırtıcı ölçüde güçlü olabilir.Yineleme uzun açılamalardan çok bir örnekle daha iyi anlaşılır:
//faktor.cpp//yineleme kullanarak faktoriyel hesabi#include#include
unsigned long factfunc(unsigned long); //deklarasyon
int main(){int n;unsigned long fact;clrscr();cout << "integer bir sayi giriniz: ";cin >> n;fact=factfunc(n);cout <<>1)return ( n * factfunc(n-1)); //kendini cagirirelsereturn 1;}
Burada fonksiyon yinelenmesi bölümünde girilen herhangi bir sayı kendisini bir azaltarak sürekli kendisiyle çarpar buda faktöriyelin tanımıdır.Yinelenen her fonksiyonda,yinelemeye son vermek için bir şart sağlamak zorundayız. Aksi takdirde fonksiyon sonsuza kadar kendisini çağırır ve programın çökmesine neden olur. Factfunc () fonksiyonundaki if ifadesi bu görevi görür; n,1 olduğunda yinelemeyi durdurur.
Yinelenen bir fonksiyon kendisini çağırırken,bunun birçok versiyonunun bellekte saklandığı doğru mu? Aslında değil. Her versiyonun değişkenleri bellekte saklanır,fakat fonksiyonun kodu tek kopyadır. Böyleyken bile defalarca kendi kendini çağıran (yinelenen) bir fonksiyon bellekte saklanan çok sayıda değişken üretebilir; sistemin hepsini saklayacak yeterli yeri yoksa bu durum sistem açısından problem oluşturabilir.__________________
ÇILGIN TÜRK
staticiation Kullanıcının Profilini Göster staticiation Anasayfasını Ziyaret Et staticiation tarafından yazılan bütün mesajları göster staticiation isimli kullanıcıyıarkadaş listenize Ekleyin
11.06.2007 #4 (permalink) staticiation Çılgın Türk

Katılma Tarihi: Feb 2006Nereden: C:/windows/system32Yaş: 22Mesajlar: 2,274 Meslek : Programmer
--------------------------------------------------------------------------------
HAZIR KÜTÜPHANE FONKSİYONLARI
Her C++ derleyicisi Program yazılmasını kolaylaştırmak, çok kullanılacak program parçalarını hazır bulundurmak amacıyla kütüphane fonksiyonlarına sahiptir. Kütüphane fonksiyonları konularına göre sınıflanır ve anlamlı bir adlandırma ile anılırlar. Örneğin matematiksel kütüphanede cos(), sin(), sqrt() gibi matematiksel işlemlerle ilgili fonksiyonlar bulunurken, grafik kütüphanede grafikle ilgili işlerin kotarılması için gerekli fonksiyonlar bulunur...
Bu bölümde hemen hemen tüm C++ derleycilerinin desteklediği ANSI C kütüphane fonksiyonları aşağıdaki başlıklar altında ele alınmıştır:
¦ Karakterler üzerinde işlem yapan fonksiyonlar¦ Katarlar üzerinde işlem yapan fonksiyonlar¦ Bellek alanı üzerinde işlem yapan fonksiyonlar¦ Standart Giriş/Çıkış fonksiyonları¦ Matematiksel fonksiyonlar¦ Esnek argüman aktarını fonksiyonları¦ Zaman ve Tarih fonksiyonlar¦ Yerel olmayan Dallanma fonksiyonlar¦ Ayrıcalıklı Durum Kontrolü ile ilgili komutlar¦ Hata ayıklama fonksiyonları¦ Yerelleştirme fonksiyonları
1. Karakterler Üzerine İşlem Yapan FonksiyonlarTek bir karakter üzerinde işlem yapan bu makro fonksiyonlar sorgulama ve değiştirme olarak iki kümeye ayrılır. Sorgulama fonksiyonları, bir karakterin kullanılan karakter kümesindeki sınıfını belirler; tamsayı tipte olup, olumlu olduğu zaman sıfırdan farklı bir sayı, olumsuzsa sıfır gönderirler. Değiştirme fonksiyonları kendisine gelen karakteri büyük ya da küçük harfe dönüştürmek için kullanılır.Bu ayrıttaki fonksiyonların tamamı makro olup herhangi biri kullanıldığında, ctype.h adlı başlık dosyası program içine aşağıdaki gibi yazılarak koyulmalıdır:ÖRNEK:İSasCİİO Bildiri mi: int isascii (int kr) ;¦ ir, normai bir ASCII karakterse sıfırdan farklı; aksi durumda sıfır gönderir. Normal¦ASCII karakterler 7 Bit olup, sayısal kodları kümenin 0-127 arasında olanlardır.
2. Katarlar Üzerinde ve Bellek Alanında İşlem Yapan FonksiyonlarKatar, NULL (\0') ile sonlandırılmış karakter dizisidir; üzerinde işlem yapan fonksiyonlar (adları str... İle başlar) iki kümeye ayrılır. İlki kopyalama işlemi yapanlar olup genelde karakter işaretçi gönderirler; ikinicisi sorgulama işlemi yapanlar olup mantıksal sonuç gönderirler.
Bellek alanı üzerinde işlem yapan fonksiyonlar (adlan mem... ile başlar) katar üzerinde İşlem yapanlara benzer, ancak bunlar NULL ile karşılaştığında işlemi sonlandırmazlar.
Olup olmadığı programcıya bırakılmıştır; istenmeyen durumlar oluşabilir, dikkatli olunmalıdır !
ÖRNEK:StrcmpO Bildirimi: int stremp (const char *kl, const char *k2);İki katarı karşılaştırır: eşitse 0; ki alfabetik sırada daha önceyse eksi tamsayı; ki alfa-I betik sırada daha sonraysa artı tamsayı gönderir.
3. Matematiksel Fonksiyonlar Matematiksel fonksiyonların tipleri çift duyarlı gerçel sayıdır (double); bu nedenle bildirimlerinin yapıldığı math.h adlı başlık dosyası, program içine aşağıdaki gibi yazılarak koyulmalıdır :#include Bu başlık dosyası içinde bazı simgesel sabit bildirimleri de yapılmıştır: EDOM (error Domain), HUGE_VAL, ERANGE,...
Fonksiyonlara gelen parametreler belirlenen sınırların dışındaysa, errno.h adlı başlık dosyası içinde bildirilmiş olan errno adlı değişkene EDOM atanır. Örneğin sqrt() fonksiyonuyla eksi bir sayının karekökü hesaplanmaz; eksi sayılar sınırların dışındadır.
4. Esnek Argüman Aktarım FonksiyonlarıBir fonksiyonun, programın değişik yerlerinde farklı sayıda parametreyle çağrılacak biçimde tanımlanması için, stdarg.h adlı başlık dosyasında özel bir tip bildirimi ve 3 tane makro fonksiyon tanımlanması yapılmıştır, vajisî adlı bu özel tip birçok derleyicide "typedef char *va_list" olarak bildirilmiş bir işaretçidir. İlgili makro fonksiyonlar aşağıda açıklanmış olup kullanılacaksa stdarg.h adlı başlık dosyası program içineftinclude biçiminde yazılarak koyulması gerekir.
5 . Zaman ve Tarih FonksiyonlarıZaman ve tarih ile ilgili fonksiyonların bildirimleri ve bazı yeni veri tiplerinin tanımlanması time.h adlı başlık dosyasında yapılmıştır. İlgili başlık dosyasında tanımlanmış olan yeni veri tipleri ve topluluk:
typedef long clock_t; cypedef long time_t;struct Cm {int tm_sec; /* saniye için 0..59 */int tm__min; /* dakika için 0..59 */int tm__hour; /* saat için 0..23 */ine tm_mday; /* gün için 1..31 */int tmjnon; /* ay için 0.. 11 */int tm^year; /* yıl için 1900... */int tm_wday; /* Haftanın günleri için 0(pazar)..6 */int tm_jyday; /* yılın günleri için 0.365 */int^i.*.,, /* ^seyazsaafuygutoyor VBildirimi yapılmış zaman ve tarih fonksiyonları,
6 . Yerel Olmayan Dallanma FonksiyonlarıYapısal bir dil olan C, program içinde dallanma deyimi (goto...) kullanılmasına gerpk olmayacak biçimde esnek kontrol ve döngü deyimlerine sahiptir. Buna karşın, zaman zaman, dallanma deyimi kullanılması gerektiği durumlarla da karşılaşılır. Eğer dallanma yapılacak yer ile o anda bulunulan yer, aynı fonksiyon içerisindeyse yerel; farklı fonksiyon içerisindeyse yerel olmayan dallanma olarak adlandırılır. Yerel dallanmalar goto deyimi ve etiket kullanılarak gerçeklenir (bkz. Ayrıt 4.4.). Yerel olmayan dallanma yapılabilmesi için (yerel için de kullanılabilir) setjmp.h adlı başlık dosyasında özel bir değişken tipi bildirimi ve iki tane makro fonksiyon tanımlanması yapılmıştır. Bunlar kullanılarak program içinde herhangi bir yere dallanma yapılabilir; kullanılırsa, setjmp.h adlı başlık dosyası program içine aşağıdaki gibi yazılarak koyulmalıdır.#include
7. Ayrıcalıklı Durum KontrolüProgramın yürütülmesi sırasında, o anda yapılan işi kesen ayrıcalıklı durumlar oluşabilmektedir. Örneğin, bir sayının sıfıra bölünmesi sonsuz bir değer olacağından herhangi bir sayısal değişkende saklanamaz ve ayrıcalıklı durum kabul edilir. Ayrıcalıklı durumlar programın yürütülmesi anında oluşabileceği gibi donanım tarafından da üretilebilir (örneğin, CTRL-C veya CTRL-BREAK tuşlarına basılarak). Bir sistemde hangi ayrıcalıklı durumların olduğu, sistemin başvuru kitaplarından öğrenilebilir.
Sistemde, oluşabilecek her ayrıcalıklı durum için yürütülecek, sistemin bir parçası olan hazır bir fonksiyon vardır; herhangi bir ayrıcalıklı durum oluştuğunda ilgili fonksiyon yürütülür. İstenirse, sisteme yerleştirilmiş olan hazır ayrıcalıklı durum fonksiyonları (exceptional handler routine) , yeni yazılan birisiyle değiştirilebilir. Bu amaçla signal.h adlı başlık dosyasında bazı simgesel sabitler ve fonksiyon bildirimleri yapılmıştır. Dolayısıyla, bu başlık dosya aşağıdaki gibi yazılarak program içine koyulmalıdır.#include
Gerçek ve Tanımlı Parametrelerin Karşılaştırılması
Her fonksiyon tanımı, tanımlı argüman listesi (formal argüment list) olarak adlandırılan bir argüman listesine sahiptir. Listedeki öğeler keyfidir, dolayısıyla gerçek liste boş olabilir ya da integer, float ve character gibi veri tiplerinin bir birleşimini içerebilir.
Fonksiyon program tarafından çağrıldığında, bir argüman listesi fonksiyona ayrıca aktarılır. Bu listeye gerçek argüman listesi (actual argument list) denir. ANSI C kodu yazarken, güçlü bir zorlama olmasa da genellikle, tanımlı ve gerçek parametreler arasında bire bir eşleşme vardır.
Aşağıdaki C kod satırını inceleyin:Printf(“This is hexademical %x and octal %o “, ians);
Bu durumda printf () fonksiyonuna iki tane beklense de, tek bir argüman aktarılır. Daha az argüman sağlanırsa, eksik argümanlara anlamsız ilk değer ataması yapılır. C++, tanımlı argüman listesine varsayılan değer sağlanmasına izin vererek bir dereceye kadar bu problemin üstesinden gelir. Gerçek argüman listesinde bir argüman eksik olduğunda, varsayılan argüman otomatik olarak yerine geçirilir. Örneğin C++ içinde fonksiyon prototipi aşağıdaki gibi görünebilir:İnt ifonsiyonunuz(int it, float fu= 4.2,int iv=10)
Dikkat ederseniz, fu yada vi değerleri ifonksiyonunuz() fonksiyon çağrısında belirtilmezse, gösterilen değerler (4.2 ya da 10) kullanılacaktır. C++ varsayılan değerler kullanan tüm tanımlı argümanların, tanımlı argüman listesinin sonunda listelenmesini gerektirir. Diğer bir deyişle, ifonksiyonunuz(10) ve ifonksiyonunuz (10, 15.2) geçerlidir. Eğer fu sağlanmazsa iv de sağlanıyor olamaz.
main() Foksiyonun Parametreleri ve Kullanımı
Main fonksiyonu program çalışmaya başladığında çalıştırılan fonksiyondur. Bu fonksiyon üç parametre alır. Bu parametrelerin kullanılması zorunlu değildir. Şimdi bu sırası ile bu parametrelerin kullanım anlamlarına amaçlarına değinelim. Bir çok program, komut satırı parametrelerini aktif bir şekilde kullanır. Mesala sıkıştırma programları sıkıştırılacak dosyaların isimleri, sıkıştırma işleminden sonra oluşturulacak dosya isimi, sıkıştırma şekli gibi bilgileri komut satırı parametreleri arcılığıyla kullanıcıdan alırlar. Main fonksiyonun ilk iki parametresi komutsatırı parametrelerinin işlenmesi için kullanılır. Üçüncü parametre ise ortam değişkenlerinin (environment variables) değerlerini içerir.
main( int argc, char* argv[], char *env[]){
}
main fonksiyonun genel tanımlaması yukarıdaki gibidir. İlk parametre komut satırından geçilen parametrelerin sayısını tutar. Programın ismi de bir komut satırı parametresi olarak kabul edilir yani her program en az bir komut satırı parametresi içerir. argc parameteresinin değeri en az bir olur. argv parametresi ise boyutu bilinmeyen stringler dizisidir. Bu parametrenin her bir elemanı bir komut satır parametresinin başlangıç adresini tutar. argc ve argv parametreleri birlikte bir anlama kazanırlar.
env parametresinde ise PATH, TEMP gibi ortam değişkenlerinin değerleri tutulur. env parametresi de uzunluğu bilinmeyen bir string dizisidir. Fakat dikkat edilirse env parametresi için komut satırı parametrelerinde olduğu gibi kaç adet ortam değişkeni olduğunu gösteren bir parametre yoktur. Bunun yerine env dizisinin son elemanı NULL değerini içerir.
Void Parametreler:
ANSI C standartlarına göre void, fonksiyon argümanlarının yokluğunu açık olarak ifade etmek için kullanılmalıdır. C++ içinde void zorunlu değildir, ancak kullanımı akıllıca görülür. Aşağıdaki Program voutput () adında, argüman alamayan ve bir değer döndürmeyen basit bir fonksiyona sahiptir ve main () fonksiyonu, voutput () fonksiyonunu çağırır. Voutput () fonksiyonu bittiğinde, kontrol main () fonksiyonuna geri döner. Bu yazabileceğimiz en basit fonksiyon tiplerinden biridir:
////fvoid.cpp : Konsol uygulaması icin giris noktası tanımlıyor.// Bir fonksiyonla bir mesaj yazdiran bir c++ fonksiyonu.// Fonksiyon standart C kutuphanesinden sqrt fonksiyonunu // ve bir void tipi arguman kullanıyor.// Copyright (c) Chris H. Pappas ve William H. Murray, 2001//
#include “stdafx.h”#include #include
using namespace std;
Void voutput(void);İnt main(int argc, char* argv[]){cout << “this program will find the square root. \n\n” ;voutput ();
return (0);}Void voutput(void){double dt =12345.0;double du ;
du = sqrt(dt) ;cout << “ the square root of “
C++ Dersleri
<< “ is “ << du ;}
Örneği incelemediğinizde, voutput() fonksiyonunun sqrt () isimli C kütüphane fonksiyonunu çağırdığını fark edeceksiniz. sqrt () kütüphane fonksiyonunun protipi cmath içinde bulunur. Fonksiyon, argüman olarak double (çift duyarlılıklı sayı ) kabul eder ve kare kökü double tipinde döndürür.
char Parametreler:
Karakter bilgisi de bir fonksiyona aktarılabilir. Aşağıdaki örnekte main() fonksiyonu içinde, klavyeden bir karakter alınıyor ve voutput() fonksiyonuna aktarılıyor. get() fonksiyonuna karakteri okuyor. Standart C kütüphanesinde get( ) fonksiyonuyla yakından ilgili başka fonksiyonlar vardır: getc( ), getchar ( ) ve getche ( ). Bu fonksiyonlar C++ içinde de kullanılabilir, ama cin çoğu durumda muhtemelen daha iyi bir seçimdir. Aşağıdaki gösterildiği gibi get ( ) fonksiyonu, standart girdi cihazından (klavye) bir karakter alır ve ekranda görüntülemeden bir karakter değer döndürülür.
//// fchar.cpp : Konsol uygulaması icin giris noktası tanımlıyor.// Bir fonksiyonla bir mesaj yazdiran bir c++ fonksiyonu.// Fonksiyon standart C kutuphanesinden sqrt fonksiyonunu // ve bir void tipi arguman kullanıyor.// Copyright (c) Chris H. Pappas ve William H. Murray, 2001//
#include “stdafx.h”#include
using namespace std;
void voutput(char c);
int main(int argc, char* argv[] ){char cyourchar;
cout << “ Enter one character from the keyboard .>” ;cyourchar = cin get ( );
voutput (cyourchar);
return (0);
}
void voutput (char c)
{cout << “\nThe character entered is ; “ << c << endl;cout << “\nThe next five characters are :”;for ( int j = 0 < 5; j++ )cout << “ “ << ++c;}
Yukarıdaki listede, fonksiyona tek bir karakterin aktarıldığına dikkat edin. Fonksiyon daha sonra, bir mesaj ve karakteri takip eden 5 karakter yazdırıyor.
int Parametreler:
Aşağıdaki uygulamada, klavyeden C++ cin fonksiyonuyla tek bir tamsayı okunacaktır. Bu tamsayı vside( ) fonksiyonu, sağlanan bu genişliği bir karenin alanı, bir küpün hacmi ve yüzey alanını hesaplamakta ve yazdırmakta kulanacaktır.
//// finit.cpp : Konsol uygulaması icin giris noktası tanımlıyor.// Bu C++ programi, verilen bir uzunluga gore degerleri hesaplar.// Fonksiyon int tipi arguman kullanıyor ve // scanf ( ) fonksiyonuyla uzunluk kabul ediyor.// Copyright (c) Chris H. Pappas ve William H. Murray, 2001//
#include “stdafx.h”#include
using namespace std;
void vside(int is);int main(int argc, char * argv[]){cout << “ Enter the lenght, as an integer, \n;cout << “ from the keyboard ->” ;cin >> iyourlength;vside(iyourlength);
return (0);}
void vside(int is ){int iarea, ivolume, isarea;
iarea = is * is ;ivolume = is * is ;isarea = 6 * iarea;
cout << “ \nThe the lenght, of side is “ << is << endl;cout << “A square would have an area of “ << iarea << endl;cout << “A cube would have a volume of “ << ivolume << endl;cout << “ The surface area of the cube is “ << isarea;}
is değişkenin ve hesaplanan tüm değerlerin tamsayı olduğuna dikkat edin. Bir dairenin ve kürenin yarıçapı olsaydı, hesaplanan tiplere ne olurdu? Farkları görmek için algoritmayı yeniden yazmayı deneyin.
Float Parametreler
Kayan noktalı sayılar da fonksiyonlara argüman olarak aktarılabilir. Aşağıdaki örnekte iki kayan noktalı sayı dağeri vhypotenuse( ) ismindeki fonksiyona aktarılıyor. Cin fonksiyonu, klavyeden her iki kayan noktalı değeri almak için kullanılıyor:
//// ffloat.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.// Dik ücgenin hipotenusun bulan C++ programi.// Fonksiyon float tipi arguman kullaniliyor ve klavyeden // scanf fonksiyonuyla girdi aliyor.// Copyright ( c ) Chris H. Pappas ve William H. Murray, 2001//
#inculude “stdafx.h”#include #include
using namespace std;
void vhypotenuse(float fx, float fy);
int main(int argc, char* argv []){float fxlen,fylen;
cout << “ Enter the base of the right triangle -> “;cin >> fxlen;
cout << “ \nEnter the base of the right triangle -> “;cin >> fylen;vhypotenuse(fxlen,fylen);return (0);}void vhypotenuse (float ft,float fu){double dresult;dresult = hypot((double) ft, (double) fu);cout << “ \nThe hypotenuse of the right triangle is “<< dresult;}
double Parametreler
double tipi çok kesin bir kayan noktalı değerdir. Tüm cmath fonksiyonları double tipleri kabul eder ve döndürür. Aşağıdaki program, klavyeden iki çift duyarlıklı değer kabul ediyor. vpover ( ) fonksiyonu, ilk sayının ikinci sayı kadar üssünü hesaplıyor. Her iki değer de double olduğundan dolayı, 45.7 sayısının 5.2 üssünü hesaplayabilirsiniz ve 42811841,757 bulursunuz.
//// ffloat.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.// Bir sayiyinin bir ussunu alan C++ programi.// Fonksiyon double tipi arguman kullaniliyor ve pow fonksiyonunu kullanıyor // Copyright ( c ) Chris H. Pappas ve William H. Murray, 2001//
#inculude “stdafx.h”#include #include
using namespace std;
void vpower(double dt, double du);
int main(int argc, char* argv []){double dtnum, dunum;
cout << “ Enter the base number -> “;cin >> dtnum;
cout << “ \nEnter the power -> “;cin >> dunum;vpower(dtnum, dunum);
return (0);}void vpower(double dt, double du);{double danswer;
danswer =pow(dt,du);cout.setf(ios::fixed);cout << “ \nThe results is” << setprecision(3) << danswer;
}
Bu fonksiyon bir sayinin üssünü bulmak için cmath dosyasının içinde protiplenmiş pow( ) kütüphane fonksiyonunu kullanıyoruz.
Dizi Parametreler:
Aşağıdaki uygulama, referansla çağırma yöntemiyle bir dizinin içeriğinin nasıl bir fonksiyonu aktarıldığını gösteriyor. Bu örnekte dizinin ilk elemanının adresi bir işaretçiyle aktarılıyor.
//// fpnptr.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.// C++ programi bir diziyle bir fonksiyon cagıracak.// Fonksiyon dizi bilgisini aktarmak icin bir isartci kullaniliyor. // Copyright ( c ) Chris H. Pappas ve William H. Murray, 2001//
#inculude “stdafx.h”#include
using namespace std;
void voutput(int *pinums);
int main(int argc, char* argv []){
int yourarray[7] = {2,7,15,32,45,3,1};faverage = fsum/iv;cout << “\nThe average is” << faverage << endl;}
Ortalama, terimleri toplayıp terim sayısına bölerek elde ediliyor. cout akışı ekrana gönderilen çıktıyı biçimlendirmek için kullanılır.
İki anlamlılık hatası
C++ derleyicisi aynı sayıda parametrelere sahip birden fazla aynı isimli fonksiyonun bulunması durumunda çağırılma ifadesine tür bakımından uygun bir fonksiyon bulamazsa bu durum iki anlamlılık hatasına yol açar. Bu durumun 3 istisnası vardır:
1. Fonksiyon char ya da short parametreyle çağırılmışsa char ya da short int parametreye sahip bir fonksiyon yok ancak int parametreye sahip bir fonksiyon varsa int parametreye sahip olan fonksiyon çağırılır. 2. Fonksiyon float parametreyle çağırılmışsa ancak float parametreye sahip bir fonksiyon yok double parametreye sahip bir fonksiyon tanımlanmışsa bu durumda double parametreye sahip olan fonksiyon çağırılır.3. Fonksiyon aynı türden const olmayan bir ifadeyle çağırılmışsa ancak aynı türden const parametreye sahip bir fonksiyon ya tanımlanmışsa tür uyuşumunun sağlandığı kabul edilir ve const parametreye sahip olan fonksiyon çağırılır.
Fonksiyon Dönüş Tipler
Bu kısımda C ve C++ programlamada mümkün olan fonksiyonlar için önemli dönüş tiplerinden her biri için bir bulacaksınız. Fonksiyonun tipi tarafından döndürülen değerin tipini belirtir. Önceki konudaki örnekler hiçbiri fonksiyondan bilgi döndürmüyor çünkü void tipindedirler.
void Dönüş Tipi
void daha önceki tüm örneklerde kullanılmıştır ve buradaki örnek biraz daha karışıktır. C ve C++ dillerinin, sayısal bilginin ikilik (binary) değil ama onaltılık (hexadecimal), onluk (decimal) ve sekizlik (octal) düzenlerde biçimlendirilmesine izin verdiğinizi öğrendiniz. Veriyi ikilik düzen biçimde belirtmek, ikili matematikte ve Bit maskeleri (bit masks) geliştirmede kullanışlıdır. vbinary () fonksiyonu, klavyeden girilen onluk sayiyi ekranda ikilik temsile dönüştürür. İkilik rakamlar tek bir ikilik sayı olarak paketlenmez ve dizide kendi başlarına depolanırlar. İkilik bir sayıyı incelemek için dizinin içeriği yazdırılmalıdır.
//// voidf.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.// void fonksiyon tipini ornekleyen C++ programi.// program bir sayinin ikilik esdegerini yazdiracak.// Copyright ( c ) Chris H. ve William H. Murray, 2001//
#include “stdafx.h”#include
using namespace std;
void vbinary(int ivalue);
int main(int argc, char* argv[] ){int value;cout << “Enter a number (base 10) for conversion to”<< “binary ->”;cin >> ivalue;vbinary(ivalue);
return (0);}
void vbinary(int idata) int t =0;int iyourarray[50];while (idata !=0) {iyourarray[t] = (idata %2);idata /= 2;t++;
}
for(--t; t>=0; t--)cout << iyourarray[t];cout << endl;}
Üst tabanlardan alt tabanlara dönmüşüm prosesi, basit bir matematiksel algoritmalardan ibarettir. Örneğin, 10 tabanlı bir sayı bir değer tabana, sayıyı yeni tabana arka arkaya bölerek dönüştürülür. Sayı 10 tabanından 2 tabanına dönüştürülecekse, 10 tabanlı sayı arka arkaya 2 ile bölünür. Bu işlem bir bölüm, bir de artan oluşturur. Her ardışık bölme için bölme, bölünen haline gelir. Kalan, dönüştürülen sayının bir basamağı olur. İkilik dönüşüm durumunda kalan ya birdir ya da sıfırdır.
vbinary () fonksiyonunda, idata sıfıra ulaşmadıkça matematiksel işlemi yapan bir while dögüsükullanılır. Modül operatörü kalanı saptar ve bit’i dizide saklar. Daha sonra, idata üzerinde bölme yapılır ve sadece tamsayı sonuç saklanır. Bu süreç, bölen (bu halde data) sıfır olana kadar tekrarlanır.
İkilik sonucu oluşturan her dizi bit’i, diziden ters sırayla boşaltılmalıdır. Bunu program içeriğinde görebilirsiniz. Fonksiyonda kullanılan her for döngüsünü inceleyin.
char Dönüş Tipi
Önceki uygulamadan biraz farklı bir örnekle inceleyelim. C++ fonksiyonu clowercase () bir jarakter argüman alır ve aynı karakter tipini döndürür. Bu örnekte, klavyeden alınan bir büyük harf fonksiyona aktarılıyor. Fonksiyon tolower () kütühane fonksiyonunu (standart kütüphaneden ve cctype dosyasında prototiplenen) kullanarak karakteri küçük harfe dönüştürüyor. tolower () fonksiyonuyla ilgili toascii () ve toupper () fonksiyonlarını kapsar.
//// charf.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.// Karakter fonksiyon tipini ornekleyen C++ programi.// Fonksiyon buyuk harf karakter alıyor ve// kucuk harfe donusturuyor.// Copyright ( c ) Chris H. ve William H. Murray, 2001//
#include “stdafx.h”#include #include
using namespace std;
char clowercase(char c);
int main(int argc, char* argv[] ){Char clowchar, chichar;Cout << “Enter an uppercase character ->”;Chichar = cin.get();
Clowchar = clowercase(chichar);Cout << “The characterin lowercase is:” <
Return (0);}
Char clowercase(char c){Return (tolower (c));
}
bool Dönüş Tipi
Yeni bool tipinin kullanımı aşağıdaki uygulamada, bu yeni ANSI C tipini dödüren is_upper () ve is_lower () fonksiyonlarının tanımlanmasıyla örneklenmiştir:
//// bool.cpp : Konsol uygulamasi icin giris noktasi tanimliyor.// bool yeni ANSI C/C++ tipinin kullanimi// gosteren C++ programi.// Copyright ( c ) Chris H. ve William H. Murray, 2001//
#include “stdafx.h”#include
using namespace std;
bool is_upper(char);bool is_tolower(char);
int main(int argc, char* argv[] ){
Char cTestChar = ‘T’ ;bool bIsUppercase, bIsLowercase;
bIsUppercase = is_upper(cTestChar);bIsLowercase = is_lower(cTestChar);
cout << “The letter T”<< (bIsUppercase ? “is” : “isn’t” ) << “upper case.\n”;
cout << “The letter T”<< (bIsKowercase ? “is” : “isn’t” ) << “lower case.”;
return(0);}bool is_upper(char c){return (ch >= ‘A’ && ch <= ‘Z’ );}
bool is_lower(char ch)
{return (ch >= ‘a’ && ch <= ‘z’ );}
int Dönüş Tipi
Aşağıdaki fonksiyon tam sayı kabul ediyor ve döndürüyor. icube( ) fonksiyonu main( ) içinde üretilen bir sayıyı kabul ediyor, küpünü alıyor ve tamsayı değeri main( ) fonksiyonuna döndürüyor. asıl sayı ve küpü ekrana yazdırılıyor:
////jntf.cpp: Konsol uygulaması için giriş noktası tanımlıyor.// C++ programı tamsayı fonksiyon tipini gösteriyor.//Fonksiyon birer birer tamsayılar alıyor ve //birer birer birer küplerini donduruyor.//Copyright (c) Chris H. Pappas ve William H. Murray,2001//
#include”stdafx.h”#include
using namespace std;
int icube(int ivalue);
int main (int argc, char*argv[]){int inumbercube;
for(int k=0;k<20;k+=2){inumbercube=icube(k);cout<<”the cube of the number”<<<”is”<}
return(0);}int icube(int value){return (ivalue*ivalue*ivalue);}
long Dönüş Tipi
Aşağıdaki C++ örneğinde bir programın nasıl bir tamsayı değer kabul ettiğini ve bir long döndürdüğünü göreceksiniz. Visual C/C++ ve diğer yaygın derleyicilerin kullandığı long tipi, standart ANSI C tipi olarak tanınmaz. Fonksiyon 2’nin bir tamsayı üssünü hesaplıyor.////longf.cpp :Konsol uygulaması için giriş noktası tanımlıyor.//C++ programı long fonksiyon tipini örnekliyor.//Fonksiyon birer birer tamsayılar alıyor ve //2’nin bu tamsayı üssünü donduruyor.//Copyright (c) Chris H. Pappas ve William H. Murray,2001//#include “stdafx.h”#include
using namespace std;
long power(int ivalue);
int main (int argc, char* argv[]){long lanswer;
for(int k=0;k<31;k++){lanswer=lpower(k);cout<<”2 raised to the “<<<”power is”<<}
return(0);}int t;long Iseed=1;
for (t=0:tIseed*=2;Return (Iseed);}
Bu uygulamada fonksiyon, asıl sayıyı sadece belirtilen üsse çıkana kadar çarpıyor. Örneğin, 2üssü 6 için program aşağıdaki çarpmayı yapıyor:
2*2*2*2*2*2=64
float Dönüş Tipi
Aşağıdaki uygulama, bir float dizi argümanın bir fonksiyona aktarılmasını ve float döndürülmesini gösteriyor. Bu C++ örneği dizideki tüm elemanların çarpımını bulacaktır.
////floatf.cpp :Konsol uygulaması için giriş noktası tanımlıyor.//C++ programı float fonksiyon tipini örnekliyor.//Fonksiyon kayan noktalı sayı dizisi alıyor ve //carpımları kayan noktalı sayı olarak donduruyor.//Copyright (c) Chris H. Pappas ve William H. Murray,2001//
#include “stdafx.h”#include
using namespace std;
float fproduct(float farray[]);
int main (int argc, char* argv[]){float fmyarray[7]={4.3,1.8,6.12,3.19,0.01234,0.1,9876.2};float fmultiplied;
fmultiplied=fproduct(fmyarray);cout<<”the product of all array entries is:”<<
return(0);}
float fproduct(float farray[]){float fpartial;
fpartial=farry[0];for(int i=1;i<7;i++)fpartial*=farray[i];return(fpartial);}
double Dönüş Tipi
Aşağıdaki örnek ir programın nasıl double tipi kabul ettiğini ve döndürdüğünü gösteriyor. dtrigcosine( ) fonksiyonu derece cinsinden verilen bir açıyı kosinüs değerine çeviriyor:
////double.cpp :Konsol uygulaması için giriş noktası tanımlıyor.//C++ programı double fonksiyon tipini örnekliyor.//Fonksiyon 0’dan 90’a tamsayıları birer birer alıyor ve //her birinin kosinüsünü birer birer donduruyor.//Copyright (c) Chris H. Pappas ve William H. Murray,2001//
#include “stdafx.h”#include#include
using namespace std;
const doule dPi=3.14159265359;double dtrigcosine (double dangle);
int main (int argc,char*argv[]){double dcosine ;
for (int j=0;j<91;j++){dcosine=dtrigcosine((double)j);cout <<”the cosine of”<<<”degrees is”<}
return(0);}
double dtrigcosine(double dangle){double dpartial;dparial=cos((dPi/18.0)*dangle);return(dpartial);}
DİZİLER(ARRAYS):
Bellekte ardışıl bir biçimde bulunan ve aynı türden nesnelerin oluşturduğu veri yapısına dizi denir. Dizilerin kullanılmasını gerektiren iki önemli özellikleri vardır :
1. Bellekte ardışıl (contigous) olarak bulunmaları2. elemanların aynı türden nesne olmalarıdır.
Diziler bileşik nesnelerdir. Yani bir dizinin tanımlanmasıyla birden fazla sayıda nesne birlikte tanımlanabilir. (bileşik sözcüğü ingilizce aggregate sözcüğünün karşılığı olarak kullanılmıştır.)
Örneğin 10 elemanlık bir dizi tanımlamak yerine, şüphesiz farklı isimde 10 ayrı nesne de tanımlanabilir. Ama 10 ayrı nesne tanımlandığında bu nesnelerin bellekte ardışıl (contigous) olarak yerleşmeleri garanti altına alınmış bir özellik değildir. Oysa dizi tanımlamasında, dizinin elemanı olan bütün nesnelerin bellekte ardışıl (contigous) olarak yer almaları garanti altına alınmış bir özelliktir.
Diziler aslında bellekte ardışıl olarak yer alan n adet aynı türden nesnenin oluşturduğu veri yapıları olduğuna göre dizi elemanı olan nesnelerin de kullanılmasından önce tanımlanmaları gerekecektir.
DİZİ NİTELİKLERİ:
• Dizi içindeki başlı başına her veri öğesine eleman denir.• Tüm elemanlar aynı veri tipinde elamanlar olmalıdır.• Tüm elamanlar bilgisayarın belleğinde ardışık olarak depolanır ve ilk elemanın indisi sıfırdır.• Dizinin ismi, dizinin ilk eleman adresini temsil eden sabit bir değişkendir.
TÜR : dizi elemanlarının türünü gösteren anahtar sözcüktür.DİZİ İSMİ : isimlendirme kurallarına uygun olarak verilecek herhangi bir isimdir.ELEMAN SAYISI : dizinin kaç elemana sahip olduğunu gösterir.
Örnek dizi bildirimleri:
double a[20]; /* a, 20 elemanlı ve elemanları double türden olan bir dizidir*/float ave[10]; /* ave 10 elemanlı ve her elemanı float türden olan bir dizidir. */unsigned long total[100]; /* total 100 elemanlı ve her elemanı unsigned long türden olan bir dizidir */char path[80]; /* path 80 elemanlı ve her elemanı char türden olan bir dizidir. */
Bildirim ifadesinde yer alan eleman sayısının mutlaka tamsayı türlerinden birinden sabit ifadesi olması zorunludur... (Kaynak: Turkstudent.Net)

Dizilerin ilk kullanıma hazırlanması
Dizilerin ilk kullanıma hazırlanması için üç teknik vardır.• Varsayılan durumda, oluşturdukları esnada: Bu sadece global ya da stratejik diziler için geçerlidir.• Sabit ilk değer atama verisi sağlayarak, oluşturduklarında açık olarak.• Programın çalışması esnasında diziye veri atama ya da kopyalama yaparken.
1. Diziden saklanan elemanlar (mantıksal) kesinlikle ardışık bloklarda saklanırlar.“Bilgisayar bir adresteki veriye o adresi yani kutucuğun numarasını kullanarak erişir. Eğer bir kutucuğun numarasını biliyorsak, o kutucuğun beli sayıda ilerisindeki yada gerisindeki kutucuklara da erişmemiz mümkün olacaktır. Bu da bize bellekle ilgili işlem yaparken son derece büyük bir avantaj kazandırır. Bir bölge üzerinde çalışırken, sadece başlangıç noktası olarak alacağımız bir adres ve o adrese belli uzaklıktaki adrslere erişmek için basit sayılar kullanabiliriz.”2. ilk elemanın indisi daima 0(sıfır)’dır.Bu sayı Pascal vb. bazı dillerde 1’dir, farka dikkat edin.3. Dizinin adı, dizideki ilk elemanın adresini içeren sabit bir değişkendir.
Dizilerin tanımlanması ve değer atma
Bir dizi çok basit bir şekilde tanımlanır.
int a[100];
gibi. Bunun biçimi şöyledir.
[] ;
Bu tip tanımlamada boyut sabit olmak zorundadır. (C++’da değişken boyutlu diziler de tanımlanabilir, ancak bunu birazdan göreceğiz.) Sabit sayı doğrudan verilmek zorunda değildir, sabit bir değişken ile de verilebilir.
const int boyut=10;int a[boyut ] ;
Bu, özellikle aynı boyutta birçok dizi ile çalışacaksanız, programın denenmesinde işe yarayacaktır. Örneğin, asıl program boyutu 1000 olan dizilerle çalışacaktır, ancak siz programın çalışmasını denerken daha küçük boyutlu dizilerle çalışmak istiyorsunuzdur.
const int boyut=10;int a[boyut), b[boyut]; //…Şeklindeki tanımlar, programın çalıştığından emin olunduktan sonra, sadececonst int boyut=10;satırıconst int boyut =1000; olarak değiştirilerek asıl amaca göre düzenlenmiş olur.
Şu ana kadar dizileri tanıttık ancak içerdikleri değeler, daha doğrusu ilk değerler ile ilgili üç şekilde oluşur demiştik şimdi bunları örneklerle açıklayalım.
1. Durağan ve global dizilerde oluşturuldukları anda içerik otomatik olarak belirlenebilir.
Örnek:#include const int boyut=5;int globaldizi[boyut];main() {static int duragandizi [boyut];for (int i=0;icout
Program çıktısı0 0 0 0 00 0 0 0 0Görüldüğü gibi, dizi oluşturulurken elemanlara ait bellek blokları temizlenmiş ve sıfırlarla doldurulmuştur. Bu sıfır dolu içerik de int tipi için 0 değeri olarak yorumlanmaktadır.
2. Duyuru sırasında sabit değerler belirilerek belirlenebilir.
Örnek:int sayilar[2]={1,2};float gammaxyz[3]={5.6, 4.5, 7.8};
Bu durumda sık rastlanan bir hata ise belirtilenden fazla sayıda değer yazmaktır. Mesela float gammaxyz[3] dizisi 3 elemanlı bir dizidir. Dört eleman yazılırsa hata verecektir.Bu tür hataların önüne geçmek için birçok derleyicinin desteklediği bir özellik vardır. Bu derleyiciler, dizi tanımlanırken içeriği belirleniyorsa boyut bilgisi istemezler. Bu özellikle karakter dizileri için işe yarar. Örneğin;
char hata1[ ]=” diske yazma hatası \n “;
Bu gibi dizilerin boyutunu yazmak için yazdığınız cümlenin kaç karakter olduğunu saymanız gerekmeyecektir.
3. Program işleyişi sırasında indiler kullanarak her elemana tek tek veri kopyalanabilir.
Üçüncü yöntem ise, program akışı içinde en çok kullanılan yöntemdir. Bu yöntemi kullanabilmek için , öncelikle dizi indislerinin nasıl kullanılacağını görmek gerekmektedir.__________________
ÇILGIN TÜRK
staticiation Kullanıcının Profilini Göster staticiation Anasayfasını Ziyaret Et staticiation tarafından yazılan bütün mesajları göster staticiation isimli kullanıcıyıarkadaş listenize Ekleyin
11.06.2007 #5 (permalink) staticiation Çılgın Türk

Katılma Tarihi: Feb 2006Nereden: C:/windows/system32Yaş: 22Mesajlar: 2,274 Meslek : Programmer
--------------------------------------------------------------------------------
İNDİSLERİ KULLANMAK
Bir dizi tanımlandığı zaman
İnt stok[100];Bu dizinin elemanları için ardışık bir alan açılır. Bu alanların her birine indisi kullanarak erişebiliriz.
İnt i=0;Stok[5]=3;Cout<
Yukarıdaki örnekte olduğu gibi.Ancak dikkat edilmesi gereken şey dizi boyutunu geçmemektir. Sık yapılan bir hata
Cont int boyut=100;Double dizi[boyut];//…dizi [boyut]=x;
şeklindedir. Burada dizi elemanlarının indisleri 0 dan 99 a kadarken, biz indisi 100 olan bir elemana erişmeye çalışıyoruz. Bazı derleyiciler bu durumu doğrudan hata olarak rapor ederlerken, bazıları da değişken boyutlu diziler varsaydıkları için bu durumu görmezden gelirler. Bu durumda dikkatli olmak programcının sorumluluğundadır.
Dizi indisleri birer sabit yada değişken olabileceği gibi, int tipine dönüşe herhangi bir ifade de olabilir.
İnt x,y,z;İnt a[100];//…a[x-y+z]=5;
Tabii, yine bu ifadelerin dizi sınırlarını aşıp aşmayacağı derleyici tarafından bilinmez, çünkü bu değişkenlerin değerleri değerleri Program akışı sırasında değişebilir.

SİZEOF, DİZİLER VE ADRESLER
Sizeof işleci dizilerle de kullanılabilir. Örneğin, aşağıdaki program ile tanımlanan bir dizinin boyutunu byte olarak görebiliyoruz.
// 4_13_1.cpp#include
void main() {int a[10];cout<<” a dizisinin boyutu “<<
Dizilerin içerdiği elemanların adresleri tek tek elde edilebilir. Bu aşağıdaki şekilde yapılır.
&a[i]
ifadesi, a dizisinin i indisli elemanının adresini verir. Aşağıdaki program bunu göstermektedir.
//4_13_2.cpp
#include#include
void main() {int a[10] ;cout<<”sizeof (int) is “<<10;i++)cout<<”&a[“<<<”]=”<<&a[i]<
Bu program derlendikten sonra aşağıdaki çıktıyı vermektedir.
Sizeof(int) is 4&a[0]=0x0064fddc&a[1]=0x0064fde0&a[2]=0x0064fde4&a[3]=0x0064fde8&a[4]=0x0064fdec&a[5]=0x0064fdf0&a[6]=0x0064fdf4&a[7]=0x0064fdf8&a[8]=0x0064fdfc&a[9]=0x0064fd00
Onaltılı sayı düzeni ile ilgili bir bilginiz varsa, bu sayıların farkı hemen algılanmıştır. Ancak kalın yazılan ikililerde verilen sayıların arasındaki farkın 4 olduğu diğer satırlardan kolay anlaşılıyor.
Yani, gerçekten de bir dizinin elemanları bellekte ardışık yerlerde saklanmaktadır.
SÖZCÜKLER
C ve C++’da sözcükler için (strings) için ayrı bir temel tip yoktur. Ancak gerek işaretçiler, gerekse diziler kullanılarak sözcüklerle ilgili işlemler kolaylıkla yapılır.
char x[8]=”merhaba”;char y[8]={‘m’, ’ e’, ’r’, ’h’, ’a’, ’b’, ’a’ , ‘\0’ };
dizilerinin içerikleri tamamen aynıdır.
ÇOK BOYUTLU DİZİLER
Şimdiye kadarki örnekler hep tek boyutlu yani elemanlarına tek indizle ulaşılabilen diziler içeriyordu. İki boyulu dizi ise aslında, elemanları tek boyutlu diziler olan bir dizidir - matris. Tanımlanması ise tek boyutlu dizi gibi - ama iki boyutu da vererek olur:
veritipi diziadi[boyut1][boyut2]
İki boyutlu diziler, boyutlardan birisinin satır sayısını, diğerinin ise sütun sayısını gösteren bir matris olarak kabul edilebilir.
int t, i, num[3][4];
for (t=0; t<3; t++) for (i=0; i<4; i++) num[t] = (t*4)+i+1;
kod parçası num adlı iki boyutlu diziye 1-12 arası sayılar atar ve bunlar şu şekilde yerleştirilir:
0 1 2 3 0 1 2 3 4 1 5 6 7 8 2 9 10 11 12
Bu dizi hafızaya yerleştirilirken önce satır satır yerleştirilir. (Çizim)
İki boyultu dizilerin tanımlandığı gibi, ikiden fazla boyuta sahip diziler de tanımlanabilir:
veritipi diziadi[boyut1][boyut2]…[boyutn]
Fakat bu kullanım çok gerekmedikçe kullanılmaz çünkü doğru erişimi gerçekleştirmek oldukça zordur.
Const int satır=5;Const int sutun=3;
int veri [satır][sutun]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 };
Burada 5 satır ve 3 sutundan oluşan bir iki boyutlu dizi tanımlanmış.
ÖRNEK: Bir uçak benzetimi(simulasyon) yazarsak, yerküredeki girinti ve çıkıntıları, örneğin dağları bir şekilde saklamanız gerekli. Coğrafyadan hatırlayacağınız eş yükselti eğrileri bunun için çok uygun olmayabilir. Bunun yerine bütün haritayı karelere ayırmayı önerebiliriz.100 200 200 100100 200 300 200100 100 300 200100 100 100 100
Burada coğrafi haritayı 16 eşit parçaya ayırıp, her parçanın solda yükseklik tanımını verdik. Şekle bakarsanız karmaşık bir haritanın son derece küçük bir veri miktarı ile simgelenecek hale geldiğini görürsünüz. Bu veri, gerçeği tam yansıtmasa bile iş görecek durumdadır.
Peki biz bu veriyi nasıl saklamalıyız? İki boyutlu bir dizimiz olsaydı ve iki ayrı indeks kullanarak iki ayrı koordinat sistemindeki değerleri verebilseydik, işimizi görürdü. İşte c++’da da biz aynen bunu gerçekleştireceğiz.
ÖRNEK: #include#includeconst int boyut=4;int dizi[boyut][boyut];
main(){ clrscr();int a;for (int i=0;ia;dizi[i][k]=a;}}
cout<<"----------------------\n";for (int t=0;t
cout<<<" ";cout<<"\n";}
getch();return 1;}

Karakter Katarı Fonksiyonları ve Karakter Dizileri
Karakter katarı veri tiplerinin yönetim biçimlerinden dolayı, fonksiyon argümanı olarak karakter dizilerini kullanan birçok fonksiyon burada incelenmemiştir. Bu fonksiyonlar özellikle gets( ), puts( ), fgets( ), fputs( ),sprintf( ), stpcpy( ), strcat( ), strncmp( ) ve strln( ) fonksiyonlardır. Bu fonksiyonları anlatmanın en kolay yollarından biri, birkaç örnek program göstermektir.
gets( ), puts( ), fgets( ), fputs( ) ve sprintf( )
strcpy( ) fonksiyonu bir karakter katarının (szsource_string) içeriğini ikinci karakter katarına (szdestination_string)kopyalar.
strcat( ) fonksiyonu iki karakter katarını birleştirir. İki karakter katarı da null sonlandırmalı olmalıdır ve sonucun kendiside null sonlandırmalıdır. Aşağıdki program strcpy( ) fonksiyonu bilginizin üzerine kuruludur ve strcat( ) foksiyonunu tanıtır:
//// strcat.cpp :Konsol uygulaması için giriş noktası tanımlanıyor.// strcat fonksiyonunu gösteren ir c++ programı// copyright (c) Chris H. Papas and William H. Murray, 2001// #include using namespace std#define iSTRING_SIZE 35
int main (int argc, char* argv[]){char szgreeting[]= “Good morning”,szname[]=”Carolyn,”,szmessage[iSTRING_SIZE];
strcpy(szmessage, szgreeting);strcat(szmessage, szname);strcat(szmessage,”how are you?”);cout<<”\n<
return(0);}
Bu örnekle ilk değer ataması szgreeting ve szname değişkenlerine yapılmış, szmessage değişkenine yapılmamıştır. Daha sonra strcat( ) fonksiyonu, szname (“carolyn,”) ile “Good morning” karakter katarını birleştirir ve sonuç, szmessage içinde saklanır. Son strcat( ) fonksiyon çağrısı, bir karakter katarı sabitinin bir karakter katarına nasıl eklenebildiğini gösteriyor. Burada “how are you?”, szmessage güncel içeriğine ekleniyor (“good morning caroline,”). Program aşağıdaki çıktıyıverir:
Good morning Carolyn, how are you?
strcmp( ) İki sözcüğün (iki karakter katarının) aynı olup olmadığını kontrol etmek için kullanılır. Bu fonksiyon büyük/küçük harf duyarlı değildir.
strlen( ) fonksiyonu çok yararlıdır. İşaret edilen karakter katarındaki, null sonlandırıcısı hariç karakter sayısını döndürür. kaynaklar:Faruk AlkayaSelçuk Üniversitesi - Teknik Eğitim Fakültesi

turkstudent.net programlama.com mutasyon.net papatya.gen.tr VİSUAL C++.NET Chris H.Pappas , William H. Murray,III ISBN: 975-297-217-9 C++ İLE NESNE TABANLI PROGRAMLAMA Bora GÜNGÖREN
Yayın yok.
Yayın yok.

Hakkımda

Fotoğrafım
I'd rather die saying what I believe, than live saying what I don't believe./ SOCRATES ____________________ Düşünmediklerimi söyleyerek yaşamaktansa , düşündüklerimi söyleyerek ölmeyi tercih ederim. / SOCRATES