1. Reklam


    1. joysro
      ledas
      jungler
      keasro
      zeus
      karantina

CrAzY_emre İle C++'ya Temel giriş


  1. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
    Temel Bilgiler

    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.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
    Kod:
    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!



    Kod:
    // ilk1.cpp
    // Ekrana "Bu benim ilk programım" yazdırıyoruz
    #include <iostream.h>
    
    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 <iostream.h> : 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




    Kod:
    // ilk2.cpp
    // Ekrana "Bu benim ilk programım" yazdırıyoruz
    #include <stdio.h>
    main()
    {
    printf("Selam bu benim ilk programım.\n"); 
    return 0; 
    } 
    Evet şimdi burada çok fark varmış gibi gözüküyor aslında ama öyle değil. Sadece kütüphanemiz stdio.h oldu ve ekrana yazdır fonksiyonumuzda printf oldu. Bu özellik C den kalma. Bunlar diğer program ile aynı işlevi görüyor. Buradaki fark " \n " notasyonu. Bu noptasyon bir sonraki satıra geçmek için kullanılır. Bu notasyonlara Escape dizileri denir. Tablo olarak bunları size veriyorum. Son yazdığımız ilk2.cpp de yerlerine koyarsanız çalışacaktır.
    Dizi: Adı: \a Alarm \b Bir karakter geri (Backspace) \f Formu itekle \n Yeni satır ( yukarda kullandığımız (newline) ) \r Return \t Yatay boşluk Şu an bunları bilmemiz yeterli.





    Kod:
    function bolumSec(id) { if (id!="") { document.location = "dersler.asp?id=" + id; } else { document.location = "dersler.asp?"; } } 
    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;


    Kod:
    // degisken.cpp
    // Burda değişken tanımlamayı göreceğiz.
    // Aynı zamanda verilen bir sayıyı kendisi ile carpma 2.2=4 gibi
    
    #include <iostream.h>
    #include <stdio.h> // kütüphane dosyamız
    main()
    {
    int i; // Değişken tanımlama
    cout << "Bir sayı giriniz: "; 
    cin >> i; 
    i=i*i;
    cout << "sonuc: " << i ;
    return 0;
    } 
    Burada bundan önce yaptığımız programlardan farklı olarak int i kullandık, yani değişken tanımladık.
    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.
    Kod:
    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.

    Kod:
    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:
    Kod:
    5, -20, 1
    gibi.

    2) Sort tip.

    Tam sayıları içerir. 16 bit uzunluğundadır.
    Kod:
    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.
    Kod:
    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.
    Kod:
    float : Bellekte 4 Byte yer tutar. 3.4E-38 ile 3.4E+38 aralığında değer alır. Hassasiyet 7-8 
    basamaktır.
    Kod:
    double : Bellekte 8 Byte ter tutar. 1.7E-308 ile 1.7E308 aralığında değer alır. Hassasiyet 15-16 
    basamaktır.
    Kod:
    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:
    Kod:
    ' 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.
    Kod:
    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:
    Kod:
    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
    Kod:
    + , - , * , / , % , ++ , -- 
    2) Karşılaştırma operatörleri
    Kod:
    < , > , <=, >= , ==, !=
    3) Eşitleme operatörleri
    Kod:
    = , += , -=, *= , /= , %= , <=, >>=, &=, != , ^= 
    4) Mantıksal Operatörler
    Kod:
    ! , || , && 
    5) Bit bazında işlem yapan operatörler
    Kod:
    & , ! , ^ , ~ , 
    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.
    Kod:
    // toplama.cpp
    //Vize ve final notlarinindan geçme notunu hesaplama
    
    #include <iostream.h>
    #include <math.h>
    
    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.
    Kod:
    // carpim.cpp
    // x i bir arttırıp y yi bir azaltıp çarptık.
    
    #include <iostream.h>
    
    main()
    {
    int x = 5;
    int y = 10;
    cout << "x = " <<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<<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.



    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ü; 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.





    Kod:
    function bolumSec(id) { if (id!="") { document.location = "dersler.asp?id=" + id; } else { document.location = "dersler.asp?"; } }
    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.
    Kod:
    //not.cpp
    // 50 ve 50 den yukarsı geçiyor.
    #include <iostream.h>
    
    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.
    Kod:
    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.

    Kod:
    //pozitif.cpp
    // Bunada açıklama yaptırmayın ( yapamadımda)
    #include <iostream.h>
    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 <iostream.h>
    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;
    Kod:
    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.
    Kod:
    //tekcift.cpp
    //sayı tekmi çiftmi onu görüceğiz
    #include <iostream.h>
    main()
    {
    int sayi;
    cout<< "Bir sayı giriniz:";
    cin >> sayi; 
    if (sayi %2==1 )
    cout <<"tek";
    else
    cout << "çift" ;
    } Bir örnek daha verelim:
    //ifelse.cpp
    #include <iostream.h>
    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.
    Kod:
    //sinav.cpp
    // alt alta if-else
    #include <iostream.h>
    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.





    ?: Komutu


    Bu komut, yalnızca C++ a özgüdür. Kendine özgü bir yazılımı ve mantıksal kullanımı vardır. 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:
    Kod:
    //tekcift.cpp
    //tekcift.cpp yi bu sefer ?: ile yapıyoruz
    #include <iostream.h>
    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.
    Kod:
    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 <iostream.h>
    
    main()
    {
    int i;
    cout<< " 1 ile 4 arası sir 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:
    Kod:
    //ucgen.cpp
    // Program gireceğimiz ölçülere göre üçgenin Alan, Yükseklik ve Tabanını bulur
    // switch-case örneğimiz.
    
    #include <iostream.h>
    
    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" << endl
    << " A ---> Alan : Bulmak için yükseklik ve tabanı gireceğiz:" << endl 
    << " h ---> Yükseklik : Bulmak için alan ve tabanı gireceğiz:" << endl 
    << " t ---> Taban : Bulmak için alan ve yüksekliği gireceğiz:" << endl 
    << endl << endl; 
    cout<< "Seçeneğiniz? ---> A, h, t :"; 
    cin>> secenek; 
    
    switch(secenek) 
    { 
    case 'a':
    
    case 'A': 
    { 
    cout<< endl <<endl <<"Yükseklik: "; 
    cin>> yukseklik; 
    cout<<endl << "Taban: "; 
    cin >> taban; 
    
    alan = 0.5 * taban * yukseklik; 
    
    cout<<endl << endl << "Alanı: " << alan << endl; 
    
    break; 
    }
    
    case 'h': 
    case 'H': 
    { 
    cout<< endl << endl <<"Alanı: "; 
    cin>> alan; 
    cout<<endl << "Tanabı: "; 
    cin >> taban; 
    
    yukseklik = 2.0 * alan / taban; 
    
    cout << endl << endl << "Yükselik: " << yukseklik << endl; 
    break; 
    } 
    
    case 't': 
    case 'T': 
    { 
    cout << endl <<endl <<"Alanı: "; 
    cin >> alan; 
    cout << endl << "Yüksekliği: "; 
    cin >> 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 continue Yukarı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 %u

    Hazırlamış Olduğum Program:

    Böleni Gir,Bölümü Gir,Kalanı Gir=Bölünen

    Kod:
    #include <cstdlib>
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    void cls()
    {
         system("cls");     
    }
    
    int main(int argc, char *argv[])
    {
        string msg = "Hicbir sayi sifira bolunmez::Sonuc::Tanimsizdir.";
        string msg2 = "Bolum sifir olamaz...";
        
        bas:
        //bolünen, bölen, bölüm, kalan
        //bolünen = bölen * bölüm + kalan
        int bolunen;
        int bolen, bolum, kalan;
        
        cout <<"Boleni gir: "; 
        cin>>bolen;
        if(bolen == 0) {
                 cls();
                 cout<<msg;
                 getch();
                 cls();
                 goto bas;
        }
        cout<<"Bolumu gir: ";
        cin>>bolum;
        if(bolum == 0) {
                 cls();
                 cout<<msg2;
                 getch();
                 cls();
                 goto bas;
        }
        cout<<"Kalani gir: ";
        cin>>kalan;
        
        bolunen = bolen * bolum + kalan;
        
        cout<<"Bolunen sayi "<<bolunen<<" dir.\n\n";
    
        system("PAUSE");
        cls();
        goto bas;
        return EXIT_SUCCESS;
    }
    [​IMG]

    Not:Programı indir.Üstteki kodu kopyala yapıştır yap.Sonra Derle ve Çalıştıra Tıkla.


    C++ Download

    Virüs Analizi
    http://www.virustotal.com/tr/analisis/77ecf877ce34fda2f369053f365fa793

    Download Link:
    Download
    http://rapidshare.com/files/141862824/devcpp_setup.exe1.exe.html
    Download


    [​IMG]

    Yorumlarınızı Bekliyorum
     
  2. 0live

    0live Öğretiyorum rank8

    Kayıt:
    6 Temmuz 2007
    Mesajlar:
    733
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Şehir:
    ....
    güzel paylasım biraz grafik pls
     
  3. Black Rain

    Black Rain Aileden rank8

    Kayıt:
    17 Kasım 2007
    Mesajlar:
    10.698
    Beğenilen Mesajlar:
    2
    Ödül Puanları:
    38
    Meslek:
    Kamyon Şöförü
    Şehir:
    Bursa / Gemlik
    Güzel Paylaşım Olmuş Emre...
     
  4. Roland Deschain

    Roland Deschain Öğretiyorum rank8

    Kayıt:
    28 Nisan 2007
    Mesajlar:
    690
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Meslek:
    Öğrenci
    Şehir:
    Gilead
  5. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
    Yorumlar için teşekkürler birazdan programdan görseller koyucam
     
  6. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
    İmage hata veriyor görseller geciktiği için özür dilerim
     
  7. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
    Ss konmuştur.Teşekkürler.
     
  8. _CaspeR_

    _CaspeR_ Buralıyım rank8

    Kayıt:
    27 Nisan 2007
    Mesajlar:
    3.887
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Şehir:
    EXtraloob.com !!
    CrAzY_emre Farkıyla C/C++'ya Temel giriş

    CrAzY_emre Neden Konularda Artık Yeni Modan Bumu Sabit Yerine Artık
     
  9. 0live

    0live Öğretiyorum rank8

    Kayıt:
    6 Temmuz 2007
    Mesajlar:
    733
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Şehir:
    ....
    1 tane mi?
     
  10. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
    furkanın yaptığı gibi yapmaya çalışmıştım.Sabit olsun demiyorum artık.
     
  11. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
    1 tane yetmiyormu kanka.
     
  12. 0live

    0live Öğretiyorum rank8

    Kayıt:
    6 Temmuz 2007
    Mesajlar:
    733
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Şehir:
    ....
    Örneğin 'Pc ye format atma'die bi topic e 1tane ss koymak uygun olur mu o kadar büyük ve dev anlatıma 1 ss?
     
  13. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
    Kendi yaptığım programdan ss koydum takıldığınız bir yer olursa sorabilirsiniz.
     
  14. _CaspeR_

    _CaspeR_ Buralıyım rank8

    Kayıt:
    27 Nisan 2007
    Mesajlar:
    3.887
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Şehir:
    EXtraloob.com !!

    başkalarından özenti olmaki farkını belli et bak mesela extraloob.com sitesi hiç kimseye özenti değil herşey kendine özgü ile herşeyi


    kimseyi özenti etrme
     
  15. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
  16. Black Rain

    Black Rain Aileden rank8

    Kayıt:
    17 Kasım 2007
    Mesajlar:
    10.698
    Beğenilen Mesajlar:
    2
    Ödül Puanları:
    38
    Meslek:
    Kamyon Şöförü
    Şehir:
    Bursa / Gemlik
    Bırakın Yavs 40 Yılda Bi Fakemiz Çıkmış Onuda Elimden almayın hehehehehehehehhehe :lol:

    @Emre
    Güzel Konu Olmuş :)
     
  17. Statuss

    Statuss Bilgiliyim rank8

    Kayıt:
    25 Haziran 2008
    Mesajlar:
    1.178
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    36
    Şehir:
    the wrong place
    Madem taner öyle dedi bende İle yazdım pek fark yok ama olsun
     
  18. Roland Deschain

    Roland Deschain Öğretiyorum rank8

    Kayıt:
    28 Nisan 2007
    Mesajlar:
    690
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Meslek:
    Öğrenci
    Şehir:
    Gilead
    :mrgreen:
     
  19. Roland Deschain

    Roland Deschain Öğretiyorum rank8

    Kayıt:
    28 Nisan 2007
    Mesajlar:
    690
    Beğenilen Mesajlar:
    0
    Ödül Puanları:
    0
    Meslek:
    Öğrenci
    Şehir:
    Gilead

    ne de güzel öğretiyorsun :mrgreen:
     
  20. Black Rain

    Black Rain Aileden rank8

    Kayıt:
    17 Kasım 2007
    Mesajlar:
    10.698
    Beğenilen Mesajlar:
    2
    Ödül Puanları:
    38
    Meslek:
    Kamyon Şöförü
    Şehir:
    Bursa / Gemlik
    Sus çaktırma yahu :D :lol: