Temel Bilgiler [Linkleri görebilmek için üye olun veya giriş yapın.]
C++ bilindiği gibi programlama dünyasında en
çok ilgi gören C dilinden türemiştir. C++'ı klasik C dilinden farklı
yapan yanı; Nesne Yönelimli Programlamayı da ( Object Oriented
Programming) C'nin sözdizimi kurallarıyla birlikte desteklemesidir.
Normalde C ile sadece yapısal programlama yaparken C++ dili ile hem
yapısal hem de nesne yönelimli programlar yazabilirisiniz. C++ diline
başlarken önce dilin C'den gelen ve temel olan özelliklerini öğrenmek
gerekir. Örneğin* değişken tanımlama* atama ve diğer basit aritmektik
işlemler* kontrol yapıları ve döngüler gibi.
Teknolojinin ulaştığı son noktadaki programlama
dillerinden olan C ve C++* bir çok yeni ve güçlü özellikleri içerir.
Derslerimiz devam ettikçe bunların teker teker içine gireceğiz. C
dilinin özelliklerinin %80 i C++'da da mevcuttur (bu karşılaştırma şahsi
görüşümdür). Zaten C++* C'nin üst gurubudur. Bunu şöyle
sıralayabiliriz. C* C++ ve C# dır.
C dilinin avantajları* az komut kümesinden oluşması
ve bu komutların diğer yüksek seviyeli dillere nazaran daha hızlı
çalışmasıdır. Ayrıca C deki kütüphaneler sayesinde fonksiyon
tanımlamanıza gerek kalmadan işlemlerinizi yapmak mümkün olacaktır. Bu
konuda çok detaya inmeden* programlamaya geçmek istiyorum. Çünkü*
programlamaya başladığımızda her örnekten sonra o an kullandığımız
programın içinde geçen fonksiyon* hata* değişken* belirleyiciler*
kısıtlamalar* notasyonlar v.s gibi bilgilerden ara ara bahsedeceğim.
Yalnız çok önemli olan bir konuya burada değinmek istiyorum. C nin
avantajlarını programlamayla birlikte görmek güzel ama C nin
dezavantajlarını programlamadan önce bilmeliyiz ki bunlardan sakınalım.
Öncelikle Tanımlayıcılardan bahsetmek istiyorum. Her derleyici ve
assmbley için değişkenleri* sabitleri* etiketleri ve fonksiyon adlarını
tanımlama kuralları vardır. Bu notasyonlara* tanımlayıcı denir. C++ da
tüm tanımlayıcılar a* . . . * z - A* . . . * Z harfleri ile ya da alt
çizgi "_" ile başlar. Bundan sonra rakam* harf* ya da alt çizgi
kullanılabilir. ANCI C uyumlu derleyiciler 31 karaktere kadar
tanımlayıcı kabul ederler fakat tanımlayıcının ilk sekiz karakterini
kullanmayı kendimize alışkanlık etmeliyiz. Dikkat etmemiz gereken
özelliklerden biri de kullandığımız ifadelerdeki büyük küçük harflerdir.
C ve C++ büyük ve küçük harf duyarlılığına sahiptir. Kullandığımız
ifadeleri birbirinden farklı ve aynı ifade olarak kullanıyorsak
programımız hata verecektir. Bunu bir örnekle anlatayım:
Program
PROGRAM
progRAM
ProgRam Bu şekilde tanımlarsak hepsi birbirinden
farklı ifadeler olarak C++ da okunacaktır. Biz Şunu alışkanlık
edinmeliyiz; tanımlayıcılarımızın baş harfi büyük olacak. Büyük ve küçük
harf kombinasyonlarının kullanılması ile önceden yapılan tanımlamalar
bazen işi zorlaştırabilir. Eğer bu değişkenlerden birini kullanmak
isterseniz* bu zamana kadar nasıl tanımladığınızı bilmeniz gerekir.
Örneğin printf()`in PRINTF() olarak çağrılması durumunda " bilinmeyen
tanımlayıcı " (Unknown identifier) hata mesajı vererek sizi uyarır. Buna
benzer olarak %f ve %F kullanımı hata verdirecektir. Programlamayı
yaparken bunlara dikkat etmemiz gerekecek. Çünkü bir değişkeni veya
tanımlayıcıyı başta nasıl kullandıysanız üç* dört sayfa kod yazdıktan
sonrada aynı şekliyle kullanmak zorundasınızdır. İşte burada en büyük
handikap yaşanacaktır. Çünkü C/C++ derleyicileri her zaman hatanın nerde
olduğunu göstermez. Bunu programcı kendisi satır satır takip ederek
bulacaktır. Bundan dolayı bu söylediklerime baştan dikkat etmemiz
gerekiyor.
Tavsiyeler:
İyi bir programlama yapabilmek için benim size olan tavsiyelerim;
daha az kod kullanarak daha çok işlem yapabilme. Gerçi bunu yapsak zaten
profesyonel oluruz . Zaten C++ `ın
paradigması da buradan geliyor. Aslında C++ da yapabileceğimiz tüm
programları C de yapma olanağımız var ama bu bize hem fazla kod yazmayı
gerektirecek hem de zaman kaybetmemize sebep olacak. Zaten bunlardan
kaçındığımız için C++ diyoruz. Elimizde nesneye yönelik bir dil varken
ve kullanacağımız fonksiyonlar içinde hazır olarak mevcutsa* tabi bize
de bunun keyfini sürmek kalıyor. Tavsiyelerimden biride derslerde
verdiğimiz örneklerin dışında aynı algoritmaya benzer farklı örnekler
yapın. Öğrenmenin en iyi yolu yanlış yapmaktır. Bunu şöyle izah edeyim:
eğer yanlış yapıyorsanız ve de o yanlışın kaynağını bulup
düzeltebiliyorsanız* o an onu öğrenmişsiniz demektir. Tabi örnekler
sizin için alıştırma olacaktır ve hafızanızda kalıcı bir yer tutacaktır.
Bunca kodu başka türlü hafızada tutamayız. İlk başlarda sık sık not
alınız* mümkün olduğunca da bol örnek yapınız. Örneklerinizi de kendiniz
düşünüp kendi hayal gücünüzle oluşturursanız eminim bu işi
başaracaksınızdır. Başta çok zor gelebilir ama başarı ter dökülmeden
olmaz. Bu kısmı fazla uzatıp sizi daha başlamadan C/C++ dan
uzaklaştırmak istemiyorum.
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:
"//" 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.
#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* tabi neden olmasın
öyle değil mi?
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.
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.
Ş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.
Şu an bunları bilmeniz yeterli.
Dizi:
Değişkenler
Ş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ız
main()
{
int i; // Değişken tanımlama
cout << "Bir sayı giriniz: ";
cin >> i;
i=i*i;
cout << "sonuc: " << i ;
return 0;
} Burada bundan önce yaptığımız programlardan farklı olarak int i
kullandık* yani değişken tanımladık.
Değişken Nasıl Tanımlanır?
Değişkenleri tanımlamak için aşağıdaki şema kullanılır.
[Veri Tipi] [Değişken Adı];
Örneğin
int sayi;
Şimdi degisken.cpp örneğindeki int i; kısmını anlamışsınızdır. Burada
değişkenlere değinmek istiyorum. Biz yukarda İçinde sayı tutan bir
değişkeni tanımladık. Benzer olarak aşağıdaki tanımlamalar da vardır.
char c;
int i;
float f;
double d;
unsigned int ui;
Burada [Veri Tipi] [Değişken Adı]; bu kalıba göre tanımlama yaptığımız
için önce Veri Tiplerini inceleyelim.
Veri Tipleri
1) İnt tip.
Integer = Tamsayı
Tamsayıları içerir. Bellekte 2 Byte tutar. DOS'ta ve Win3.1'de 16 bit
uzunlugunda ama Windows9x* WinNT* Win200 ve WinXP 32 bit uzunluğundadır.
Değer aralıkları Short ve long için değişir.
Örnek: 5* -20* 1 gibi.
2) Sort tip.
Tam sayıları içerir. 16 bit uzunluğundadır.
signed: -32768 ile +32767 arasinda değer alır* unsigned: 0 ile 65535
arasinda değer alır.
3) Long tip.
Tam sayılar içerir. 32 bit uzunluğundadır.
signed: -2147483648 ile +2177483647 arasinda değer alır* unsigned: 0 ile
65535 arasinda değer alır.
4) Gerçel Tipler (Float* Double* Long double)
Gerçel sayıları içerirler.
float : Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralığında değer
alır. Hassasiyet 7-8 basamaktır.
double : Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralığında
değer alır. Hassasiyet 15-16 basamaktır.
long double : doublenin tipinin daha genişidir.1.2E-4932 ile 1.2E-4932
aralığında değer alır. Hassasiyet 19-20 basamak.
5) Char Tip
Char : Karakter
Alfanumerik karakterleri içerir. Ve ya 8 bit uzunluğunda tamsayı.
signed: -128 ile 127 arasinda değer alır* unsigned: 0 ile 255 arasında
değer alır.
Örneğin: ' 0*1*2*3*4*5*6*7*... ' * ' **-*+*... ' *
'a*b*c*....*A*B*C*D***** '
6) Bool tip.
true(dogru) = 1 veya false(yanlis) = 0 değerini alır. Eski derleyiciler
bu türü desteklemeyebilir. Yeni ANSI C++ standardında eklenmiştir. Bu
soyut matematik gördüyseniz. "p V q" ya benzer ( matematikçiyiz*
konuşturalım azıcık). Değer aralığı ise ya 1 dir (doğru) yada 0 dır
(yanlış).
7) Enum tip.
enum sıralanmış değerleri tutar. Short int ile aynı değeri taşır.
Başta Fazla Detaya inip sizi bunaltmak istemiyorum. Çünkü C++ dili
başlarda karmaşık gelen bir dildir. Bu da zaten kendisini yüksek
seviyeli bir dil yapıyor . Ben size Bu
dilin temel özelliklerini anlatarak basit programlar yapmayı
göstereceğim.
Bu temel bilgileri aldıktan sonra programlamaya geçebiliriz. Derleyici
Olarak ben Turbo C++ 3.1 i tavsiye ederim. Şu an bununla başlar iseniz
işiniz daha kolay olacaktır (bence). İlerde Borland a geçeceğiz.
Değişken tanımlama konusunda bir konuya daha değinmek istiyorum.
Değişkenlere değer atama ve aynı anda bir çok değişken tanımlamamız C++
da mümkündür.
char c = 'c';
int i = 5;
Daha sonradan değer atama:
char c;
int i;
c = 'c ';
i = 5;
Bir de aynı anda bir çok değişken tanımlayalım.
Örneğin:
int x * y * z;
x = y = z = 5;
x*y*z' nın değeri 5 oldu
Bir sonraki derste ise değişkenlerle birlikte bir de Operatörleri ele
alacağız.
Operatörler I
Operatör ve Operand nedir?
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:
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;
} 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:
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örler III
Mantıksal Operatörler (Lojik Operatör Sembolleri) :
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ü; iki 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.
İlerde fonksiyonlara geçince* bunları ve diğerlerini de göreceğiz. Şu an
için sizi bunlarla yormak istemiyorum.
Program Kontrol ve Döngü Komutları
Daha önceki bölümlerde* standart veri tiplerini
öğrendik* bununla birlikte diğer dillerde olmayan fakat C/C++`a özgü
işlemleri de tanıdık. Şimdi ise C/C++ mantıksal kontrol yapılarını
öğreneceğiz. Bu komutların bir çoğu diğer yüksek seviyeli dillerde de
mevcuttur. Örneğin; if* if-else* switch* for* while ve do-while
döngüleri. Fakat ?:* break* ve continue komutları gibi yalnızca C/C++`a
özgü kontrol komutları da vardır. Ne demiştik C++ * C yi kapsar. O halde
C de olan tüm mantıksal kontrol yapıları C++ da da mevcuttur.
Programlar (algoritmalar) üç temel blok kullanılarak
gerçekleştirilebilirler. Bunlar; artarda* bir koşula bağlı olarak ve
sonlu sayıda yineleme (döngü) dür.
Biz şimdi bu Mantıksal ifadeleri teker teker ele alacağız. Hem Bu sayede
hepsine daha çok yer vermiş olacağız ve de örneklerle bunu
pekiştireceğiz. Şimdiye kadar geldiğimiz bölümleri iyi bilip* Mantıksal
ifadelerin yapılarını da öğrendiğimizde* bayağı bir yol kat etmiş
olacağız.
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));
....
} Derdimi anlamış olduğunuzu ümit ediyorum . Ama 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 ";
} Anlamış olduğunuzu umut ederek if komutunu burada
bitiriyorum.
If-else Komutları
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.
[Linkleri görebilmek için üye olun veya giriş yapın.]
//sayı tekmi çiftmi onu görüceğiz
#include
main()
{
int sayi;
cout<< "Bir sayı giriniz:";
cin >> sayi;
if (sayi %2==1 )
cout <<"tek";
else
cout << "çift" ;
} Bir örnek daha verelim:
[Linkleri görebilmek için üye olun veya giriş yapın.]
#include
main()
{
int not;
cout<< "Notu giriniz:";
cin >> not;
if (not >= 50)
cout << "Geçti!";
else
cout << "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.
[Linkleri görebilmek için üye olun veya giriş yapın.]
// 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!";
else
cout <<"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ütte de geçer not en az 60. Sanırım bu basit
örneklerle olayı iyice kavramışızdır. if-else i de burada bitiriyoruz.
C++ bilindiği gibi programlama dünyasında en
çok ilgi gören C dilinden türemiştir. C++'ı klasik C dilinden farklı
yapan yanı; Nesne Yönelimli Programlamayı da ( Object Oriented
Programming) C'nin sözdizimi kurallarıyla birlikte desteklemesidir.
Normalde C ile sadece yapısal programlama yaparken C++ dili ile hem
yapısal hem de nesne yönelimli programlar yazabilirisiniz. C++ diline
başlarken önce dilin C'den gelen ve temel olan özelliklerini öğrenmek
gerekir. Örneğin* değişken tanımlama* atama ve diğer basit aritmektik
işlemler* kontrol yapıları ve döngüler gibi.
Teknolojinin ulaştığı son noktadaki programlama
dillerinden olan C ve C++* bir çok yeni ve güçlü özellikleri içerir.
Derslerimiz devam ettikçe bunların teker teker içine gireceğiz. C
dilinin özelliklerinin %80 i C++'da da mevcuttur (bu karşılaştırma şahsi
görüşümdür). Zaten C++* C'nin üst gurubudur. Bunu şöyle
sıralayabiliriz. C* C++ ve C# dır.
C dilinin avantajları* az komut kümesinden oluşması
ve bu komutların diğer yüksek seviyeli dillere nazaran daha hızlı
çalışmasıdır. Ayrıca C deki kütüphaneler sayesinde fonksiyon
tanımlamanıza gerek kalmadan işlemlerinizi yapmak mümkün olacaktır. Bu
konuda çok detaya inmeden* programlamaya geçmek istiyorum. Çünkü*
programlamaya başladığımızda her örnekten sonra o an kullandığımız
programın içinde geçen fonksiyon* hata* değişken* belirleyiciler*
kısıtlamalar* notasyonlar v.s gibi bilgilerden ara ara bahsedeceğim.
Yalnız çok önemli olan bir konuya burada değinmek istiyorum. C nin
avantajlarını programlamayla birlikte görmek güzel ama C nin
dezavantajlarını programlamadan önce bilmeliyiz ki bunlardan sakınalım.
Öncelikle Tanımlayıcılardan bahsetmek istiyorum. Her derleyici ve
assmbley için değişkenleri* sabitleri* etiketleri ve fonksiyon adlarını
tanımlama kuralları vardır. Bu notasyonlara* tanımlayıcı denir. C++ da
tüm tanımlayıcılar a* . . . * z - A* . . . * Z harfleri ile ya da alt
çizgi "_" ile başlar. Bundan sonra rakam* harf* ya da alt çizgi
kullanılabilir. ANCI C uyumlu derleyiciler 31 karaktere kadar
tanımlayıcı kabul ederler fakat tanımlayıcının ilk sekiz karakterini
kullanmayı kendimize alışkanlık etmeliyiz. Dikkat etmemiz gereken
özelliklerden biri de kullandığımız ifadelerdeki büyük küçük harflerdir.
C ve C++ büyük ve küçük harf duyarlılığına sahiptir. Kullandığımız
ifadeleri birbirinden farklı ve aynı ifade olarak kullanıyorsak
programımız hata verecektir. Bunu bir örnekle anlatayım:
Program
PROGRAM
progRAM
ProgRam Bu şekilde tanımlarsak hepsi birbirinden
farklı ifadeler olarak C++ da okunacaktır. Biz Şunu alışkanlık
edinmeliyiz; tanımlayıcılarımızın baş harfi büyük olacak. Büyük ve küçük
harf kombinasyonlarının kullanılması ile önceden yapılan tanımlamalar
bazen işi zorlaştırabilir. Eğer bu değişkenlerden birini kullanmak
isterseniz* bu zamana kadar nasıl tanımladığınızı bilmeniz gerekir.
Örneğin printf()`in PRINTF() olarak çağrılması durumunda " bilinmeyen
tanımlayıcı " (Unknown identifier) hata mesajı vererek sizi uyarır. Buna
benzer olarak %f ve %F kullanımı hata verdirecektir. Programlamayı
yaparken bunlara dikkat etmemiz gerekecek. Çünkü bir değişkeni veya
tanımlayıcıyı başta nasıl kullandıysanız üç* dört sayfa kod yazdıktan
sonrada aynı şekliyle kullanmak zorundasınızdır. İşte burada en büyük
handikap yaşanacaktır. Çünkü C/C++ derleyicileri her zaman hatanın nerde
olduğunu göstermez. Bunu programcı kendisi satır satır takip ederek
bulacaktır. Bundan dolayı bu söylediklerime baştan dikkat etmemiz
gerekiyor.
Tavsiyeler:
İyi bir programlama yapabilmek için benim size olan tavsiyelerim;
daha az kod kullanarak daha çok işlem yapabilme. Gerçi bunu yapsak zaten
profesyonel oluruz . Zaten C++ `ın
paradigması da buradan geliyor. Aslında C++ da yapabileceğimiz tüm
programları C de yapma olanağımız var ama bu bize hem fazla kod yazmayı
gerektirecek hem de zaman kaybetmemize sebep olacak. Zaten bunlardan
kaçındığımız için C++ diyoruz. Elimizde nesneye yönelik bir dil varken
ve kullanacağımız fonksiyonlar içinde hazır olarak mevcutsa* tabi bize
de bunun keyfini sürmek kalıyor. Tavsiyelerimden biride derslerde
verdiğimiz örneklerin dışında aynı algoritmaya benzer farklı örnekler
yapın. Öğrenmenin en iyi yolu yanlış yapmaktır. Bunu şöyle izah edeyim:
eğer yanlış yapıyorsanız ve de o yanlışın kaynağını bulup
düzeltebiliyorsanız* o an onu öğrenmişsiniz demektir. Tabi örnekler
sizin için alıştırma olacaktır ve hafızanızda kalıcı bir yer tutacaktır.
Bunca kodu başka türlü hafızada tutamayız. İlk başlarda sık sık not
alınız* mümkün olduğunca da bol örnek yapınız. Örneklerinizi de kendiniz
düşünüp kendi hayal gücünüzle oluşturursanız eminim bu işi
başaracaksınızdır. Başta çok zor gelebilir ama başarı ter dökülmeden
olmaz. Bu kısmı fazla uzatıp sizi daha başlamadan C/C++ dan
uzaklaştırmak istemiyorum.
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:
"//" 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.
#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* tabi neden olmasın
öyle değil mi?
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.
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.
Ş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.
Şu an bunları bilmeniz yeterli.
Dizi:
Değişkenler
Ş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ız
main()
{
int i; // Değişken tanımlama
cout << "Bir sayı giriniz: ";
cin >> i;
i=i*i;
cout << "sonuc: " << i ;
return 0;
} Burada bundan önce yaptığımız programlardan farklı olarak int i
kullandık* yani değişken tanımladık.
Değişken Nasıl Tanımlanır?
Değişkenleri tanımlamak için aşağıdaki şema kullanılır.
[Veri Tipi] [Değişken Adı];
Örneğin
int sayi;
Şimdi degisken.cpp örneğindeki int i; kısmını anlamışsınızdır. Burada
değişkenlere değinmek istiyorum. Biz yukarda İçinde sayı tutan bir
değişkeni tanımladık. Benzer olarak aşağıdaki tanımlamalar da vardır.
char c;
int i;
float f;
double d;
unsigned int ui;
Burada [Veri Tipi] [Değişken Adı]; bu kalıba göre tanımlama yaptığımız
için önce Veri Tiplerini inceleyelim.
Veri Tipleri
1) İnt tip.
Integer = Tamsayı
Tamsayıları içerir. Bellekte 2 Byte tutar. DOS'ta ve Win3.1'de 16 bit
uzunlugunda ama Windows9x* WinNT* Win200 ve WinXP 32 bit uzunluğundadır.
Değer aralıkları Short ve long için değişir.
Örnek: 5* -20* 1 gibi.
2) Sort tip.
Tam sayıları içerir. 16 bit uzunluğundadır.
signed: -32768 ile +32767 arasinda değer alır* unsigned: 0 ile 65535
arasinda değer alır.
3) Long tip.
Tam sayılar içerir. 32 bit uzunluğundadır.
signed: -2147483648 ile +2177483647 arasinda değer alır* unsigned: 0 ile
65535 arasinda değer alır.
4) Gerçel Tipler (Float* Double* Long double)
Gerçel sayıları içerirler.
float : Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralığında değer
alır. Hassasiyet 7-8 basamaktır.
double : Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralığında
değer alır. Hassasiyet 15-16 basamaktır.
long double : doublenin tipinin daha genişidir.1.2E-4932 ile 1.2E-4932
aralığında değer alır. Hassasiyet 19-20 basamak.
5) Char Tip
Char : Karakter
Alfanumerik karakterleri içerir. Ve ya 8 bit uzunluğunda tamsayı.
signed: -128 ile 127 arasinda değer alır* unsigned: 0 ile 255 arasında
değer alır.
Örneğin: ' 0*1*2*3*4*5*6*7*... ' * ' **-*+*... ' *
'a*b*c*....*A*B*C*D***** '
6) Bool tip.
true(dogru) = 1 veya false(yanlis) = 0 değerini alır. Eski derleyiciler
bu türü desteklemeyebilir. Yeni ANSI C++ standardında eklenmiştir. Bu
soyut matematik gördüyseniz. "p V q" ya benzer ( matematikçiyiz*
konuşturalım azıcık). Değer aralığı ise ya 1 dir (doğru) yada 0 dır
(yanlış).
7) Enum tip.
enum sıralanmış değerleri tutar. Short int ile aynı değeri taşır.
Başta Fazla Detaya inip sizi bunaltmak istemiyorum. Çünkü C++ dili
başlarda karmaşık gelen bir dildir. Bu da zaten kendisini yüksek
seviyeli bir dil yapıyor . Ben size Bu
dilin temel özelliklerini anlatarak basit programlar yapmayı
göstereceğim.
Bu temel bilgileri aldıktan sonra programlamaya geçebiliriz. Derleyici
Olarak ben Turbo C++ 3.1 i tavsiye ederim. Şu an bununla başlar iseniz
işiniz daha kolay olacaktır (bence). İlerde Borland a geçeceğiz.
Değişken tanımlama konusunda bir konuya daha değinmek istiyorum.
Değişkenlere değer atama ve aynı anda bir çok değişken tanımlamamız C++
da mümkündür.
char c = 'c';
int i = 5;
Daha sonradan değer atama:
char c;
int i;
c = 'c ';
i = 5;
Bir de aynı anda bir çok değişken tanımlayalım.
Örneğin:
int x * y * z;
x = y = z = 5;
x*y*z' nın değeri 5 oldu
Bir sonraki derste ise değişkenlerle birlikte bir de Operatörleri ele
alacağız.
Operatörler I
Operatör ve Operand nedir?
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:
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;
} 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:
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örler III
Mantıksal Operatörler (Lojik Operatör Sembolleri) :
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ü; iki 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.
İlerde fonksiyonlara geçince* bunları ve diğerlerini de göreceğiz. Şu an
için sizi bunlarla yormak istemiyorum.
Program Kontrol ve Döngü Komutları
Daha önceki bölümlerde* standart veri tiplerini
öğrendik* bununla birlikte diğer dillerde olmayan fakat C/C++`a özgü
işlemleri de tanıdık. Şimdi ise C/C++ mantıksal kontrol yapılarını
öğreneceğiz. Bu komutların bir çoğu diğer yüksek seviyeli dillerde de
mevcuttur. Örneğin; if* if-else* switch* for* while ve do-while
döngüleri. Fakat ?:* break* ve continue komutları gibi yalnızca C/C++`a
özgü kontrol komutları da vardır. Ne demiştik C++ * C yi kapsar. O halde
C de olan tüm mantıksal kontrol yapıları C++ da da mevcuttur.
Programlar (algoritmalar) üç temel blok kullanılarak
gerçekleştirilebilirler. Bunlar; artarda* bir koşula bağlı olarak ve
sonlu sayıda yineleme (döngü) dür.
Biz şimdi bu Mantıksal ifadeleri teker teker ele alacağız. Hem Bu sayede
hepsine daha çok yer vermiş olacağız ve de örneklerle bunu
pekiştireceğiz. Şimdiye kadar geldiğimiz bölümleri iyi bilip* Mantıksal
ifadelerin yapılarını da öğrendiğimizde* bayağı bir yol kat etmiş
olacağız.
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));
....
} Derdimi anlamış olduğunuzu ümit ediyorum . Ama 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 ";
} Anlamış olduğunuzu umut ederek if komutunu burada
bitiriyorum.
If-else Komutları
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.
[Linkleri görebilmek için üye olun veya giriş yapın.]
//sayı tekmi çiftmi onu görüceğiz
#include
main()
{
int sayi;
cout<< "Bir sayı giriniz:";
cin >> sayi;
if (sayi %2==1 )
cout <<"tek";
else
cout << "çift" ;
} Bir örnek daha verelim:
[Linkleri görebilmek için üye olun veya giriş yapın.]
#include
main()
{
int not;
cout<< "Notu giriniz:";
cin >> not;
if (not >= 50)
cout << "Geçti!";
else
cout << "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.
[Linkleri görebilmek için üye olun veya giriş yapın.]
// 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!";
else
cout <<"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ütte de geçer not en az 60. Sanırım bu basit
örneklerle olayı iyice kavramışızdır. if-else i de burada bitiriyoruz.
En son TanriLar_OkuLu tarafından Perş. Mayıs 06, 2010 4:50 pm tarihinde değiştirildi, toplamda 1 kere değiştirildi