IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası

IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası (https://www.ircforumlari.net/)
-   C ve C++ (https://www.ircforumlari.net/c-ve-c/)
-   -   C++ Özet (sıfırdan) (https://www.ircforumlari.net/c-ve-c/537144-c-ozet-sifirdan.html)

SeckiN 13 Temmuz 2013 16:26

C++ Özet (sıfırdan)
 
Bu döküman bir çok C++ dökümanından özetlenmiştir.

A) GİRİŞ:

Algoritma

C/C++ dilini ve komutlarını öğrenmek, programlamaya başlamak için şarttır ama algoritma oluşturamadığımız sürece bir program oluşturmazsınız.
Algoritma, mantıktır. Yani neyi, nasıl yapacağınızı belirtir. Algoritma türetmek için geliştirilmiş bir metot yok.
Her program için o metodu sizin bulmanız gerekiyor. Basit bir örnek üzerinden düşünelim. Bir markete gittiniz,
kasada ki görevliye aldığınız ürünü gösterdiniz, parayı uzattınız, paranın üstünü aldınız. Günlük hayatta gayet normal olan bu durumu
biraz değiştirelim. Karşınızda insan değil, elektronik bir kasiyer olsun. Ona göre bir algoritma geliştirirsek,
1-) Ürüne bak;
2-) Ürün Fiyatını bul;
3-) Parayı al;
4-) Alınan paradan ürün fiyatını çıkar;
5-) Kalan parayı ver.
gibi.

Temel Bilgiler:

Yorum Satırı

Kod satırını önemli veya unutmamazın gereken şeyleri bir nevi not almak için iki tane slah ( // ) kullanılır.
Böylece program bunları kod olarak algılamaz fakat siz not olarak görebilirsiniz.

Artırma-Azaltma
Form: Açıklama:
i++ İşlem sonrası arttırma
++i İşlem öncesi arttırma Genellikle döngülerde kullanılırlar.
i-- İşlem sonrası azaltma
--i İşlem öncesi azaltma

int --> tamsayı
float ve double --> ondalıklı sayı
char --> karakter

using namespace std;Bu bir isim uzayıdır. Tanımlamada kullanılır, gerekli bir koddur.

main( ){} Bu bizim ana fonksiyonumuzdur. Programda mutlaka olmalıdır.

cout << "..."; ekrana yazı yazdırmaya yarayan koddur.
Kullanım şekli:
cout << "Merhaba Dünya";

cin >> ... ; program bizden bir ifade girmemizi bekler/ister.
Kullanım şekli:
cin >> x; (x program içinde atadığımız değerdir. a, b, y gibi bir şey de olabilir.)

endl; ve "\\n" bir alt satıra inmek için yazılan kodlardır.
Kullanım şekli:

cout << "Merhaba Dunya" << endl << "Benim adim CyberEnes";

cout << "Merhaba Dunya \\n" << "Benim adim CyberEnes";
veya
cout << "Merhaba Dunya \\n Benim adim CyberEnes;

Dikkat:
Her çıkıştan (<<) sonra noktalı virgül kullanılmaz. Sadece en sonda kod bitince kullanılır.

getch();
return 0; Bu iki kod programın işlemler bittikten sonra ekranda kalmasını sağlar.


B) BAZI YAPILAR:

if-else Böyledir-değildir manasına gelir. if içerisindeki koşul sağlanıyorsa if’in süslü parantezindeki kodlar;
koşul sağlanmıyorsa else içerisindeki süslü parantezdeki kodlar devreye girer/işlenir.

Kullanım Şekli:

if( kosul ) {
komut(lar)
}
else {
komut(lar)
}

Örn:

Kod:

#include <conio.h>
#include <iostream>
using namespace std;
main( )
{
    int sayi;
    cout << "Lutfen bir tam sayi giriniz:";
    cin >> sayi;
   
        if ( sayi % 2 == 1) {            //sayının 2 ye göre modu (ikiye bölündüğünde kalan)
          cout<< "Sayi Tek" ;      // 1 ise tek 0 ise çifttir.
                  }   
        else
            cout<< "Sayi Cift" ;
       
    getch();
    return 0;
}

break "Kırmak" anlamına gelir. Programın herhangi bir yerinde bu komutu kullandığımız zaman kodlar sonlanır.

Örn:

Kod:

#include <iostream>
#include <conio.h>
using namespace std;

main(){

    int x;
    for(x=0;x<=15;x++){

          cout<< x << endl;
          if(x==9)      //x = 9 olduğunda program durur.
          break;     

}
getch();
}

contiune "Devam et" anlamına gelir. İşlem yapmadan döngüyü devam ettirmek gibi durumlarda kullanılır.

Örn:

Kod:

#include<iostream>
using namespace std;
main( )
{
    int x;
    for( x = 0; x <= 20; x++ ) {  // x=0 olduğu için 0 yazar. Eğer x=1 yazarsak
                    // program 1 den başlar.
          if( x>10 && x<16) // x 10’dan büyük ve 16’dan küçük olduğunda yazdırmadan atlayacak.
                        continue;
         
          cout << x << "\\n";
         
    }
    getch( );
    return 0;
}

goto Programda bir yerden bir yere atlamada/geçmede kullanılır.

Örn:

Kod:

#include <iostream>
#include <conio.h>
main( void )
{
    int i = 0;
   
    baslangic_noktasi:

    cout<< "Merhaba Dünya\\n" ;
    // i degerini arttiriyoruz.
    i++;
    // i degeri kontrol ediliyor. Sayet 10’dan kucukse,
    // en basa donuyor.
    if( i<10 ) goto baslangic_noktasi;
   
    getch();
    return 0;
}

class

Kullanım Şekli:

class sinifadi {
private: //private içinde bulunan kod özeldir. sınıf dışından ulaşılamaz
fonksiyon ve degiskenler

public:
fonksiyon ve degiskenler

}nesnelistesi;

Örn:

Kod:

#include <iostream>
#include <conio.h>
using namespace std;

float pi=3.14;

class kure {
                            //private kullanmadan direk public yazabiliriz.
    public:     
         
        float r;
       
        float hacim(){
              return 4*r*r*r*pi/3;
              }
        float alan(){
              return r*r*4*pi;
           
              }
       
    }test;

main(){
   
    // r=3 de hacim ve alan ayni :))
   
      cout << "Yaricap giriniz: ";
      cin >> test.r;
      cout << "r= " << test.r << endl;
     
      cout << "Kurenin hacmi: " << test.hacim() << endl;
      cout << "Kurenin alani: " << test.alan();

getch();
return 0;

}

switch - case Yapı olarak if-else ’ye benzer ama farklılıkları vardır.
switch - case yapısında, aralık değeri girmezsiniz. Direkt olarak ifadelerin bir şeylere eşit olup olmadığına bakarsınız.
Diğer farksa, switch - case yapılarında, illa ki uygun koşulun sağlanmasıyla yapının kesilmek zorunda olmayışıdır.
’break’ komutu kullanmadığınız takdirde, diğer şartların içindeki işlemleri de yapma imkanınız olabilir.
switch case en tepeden başlayarak şartları tek tek kontrol eder. Uygun şart yakalanırsa,
bundan sonra ki ifadeleri kontrol etmeden doğru kabul eder. Ve şayet siz break koymamışsanız, eşitlik uygun olsun olmasın,
alt tarafta kalan case’lere ait komutlarda çalıştırılacaktır.


Örn:

Kod:

#include <iostream>
#include <conio.h>
using namespace std;
main()
{

    int not;
    cout<<"Lutfen notu giriniz> ";
    cin >> not;
    switch( not / 10 ) {
          case 10:
          case 9: cout<<"NOT: A\\n"; break;
          case 8: cout<<"NOT: B\\n"; break;
          case 7: cout<<"NOT: C\\n"; break;
          case 6: cout<<"NOT: D\\n"; break;
          case 5:
          case 4:
          case 3:
          case 2:
          case 1:
          case 0: cout<<"NOT: F\\n"; break;
          default:
              cout<<"HATA: Bilinmeyen bir deger girdiniz!\\n";
    }

getch();
return 0;

}

C) DÖNGÜLER:

While

while (kosul) {

kod(lar)

}

Örn:

Kod:

#include <iostream>
using namespace std;

main(){

// Bu program ekrana 10 kez merhaba dunya yazacaktır.
int i = 0;

while(i++ < 10){

          cout<< "merhaba dunya \\n";

              }

getch();
return 0;
        }

Do-While Bu döngüye koşulun doğru olup olmadığına bakılmaksızın bir kez girilir.

do {
komut(lar)
}
while( koşul );

Örn:
Kod:

#include <conio.h>
#include <iostream>
using namespace std;
main()
{

    int x=3;

    do{
   
    cout << "Selam\\n";
    x++;

    }while( x<10);

getch();
return 0;

}

Yukarıdaki örnekte x=10 deseydik döngü ne olursa olsun 1 defa çalışacağı
için ekrana 1 kez Selam yazacaktı. Şimdi ise 7 kez Selam yazar.

For

for( deger_atama ; koşul ; artırma/azaltma ) {

kod(lar)

}

Örn:

Kod:

#include <conio.h>
#include <iostream>
using namespace std;
main()
{
//tekrar ekrana merhaba dunya yazsın
        int x;
       
        for(x=0;x<=5;x++){        //x<=5 dediğimiz için ekrana 6 tane yazar, sadece < deseydik 5 kez yazacaktı
             
              cout << "merhaba dunya" << endl;
             
              }
       
        getch();
   
}

D)FONKSİYONLAR:

Her seferinde aynı işlemi yapan kodu yazmak oldukça zahmetli olurdu. Fonksiyonlar, bu soruna yönelik yaratılmıştır.
Sadece bir kereye mahsus yapılacak işlem tanımlanır. Ardından dilediğiniz kadar, bu fonksiyonu çağırırsınız.


main( ) fonksiyonu
main( ) fonksiyonu içersinde yer almayan kodlar çalışmaz.C programlama dilinde, bir kodun çalışması
main( ) fonksiyonun içersinde olup olmamasına bağlıdır. Bir nevi başlangıç noktası olarak düşünebiliriz.
Her programda sadece bir tane main( ) fonksiyonu bulunur. Başka fonksiyonların, kütüphanelerin,
kod parçalarının çalıştırılması main( ) içersinde direkt veya dolaylı refere edilmesiyle alakalıdır.

Fonksiyon Oluşturma

Kendinize ait fonksiyonlar oluşturabilirsiniz. Oluşturacağınız fonksiyonlar,
vereceğiniz işlemi yapmakla görevlidir ve çağrıldıkça tekrar tekrar çalışır.

Bir örnek ile açıklayalım:

Aşağıdaki programın bir zorluğu yok fakat çok uzun.

Kod:

#include <iostream>
#include <conio.h>
using namespace std;
main( )
{
    cout<< "    /\\\\  \\n" ;
    cout<< "  / \\\\ \\n" ;
    cout<< " /    \\\\ \\n" ;
    cout<< " /      \\\\\\n" ;
    cout<< "----------\\n";
    cout<< "|        |\\n" ;
    cout<< "|        |\\n" ;
    cout<< "|        |\\n" ;
    cout<< "----------\\n";
   
    getch();
    return 0;
}

Fonksiyon kullanarak ve bunu kısaltabiliriz. Birden çok kat çizdiğimizi düşünürsek fonksiyon kullanmadan bu
işlemi yapmak gerçekten çok uzun olurdu.


Kod:

#include <iostream>
#include <conio.h>
using namespace std;

// Evin catisini cizen fonksiyon.
void catiyi_ciz( void )        //parantez içindeki void ler boş anlamındadır. Kullanmamız şart değildir.
{
    cout<< "    /\\\\  \\n" ;
    cout<< "  / \\\\ \\n" ;
    cout<< " /    \\\\ \\n" ;
    cout<< " /      \\\\\\n" ;
    cout<< "----------\\n";
}

// Evin katini cizen fonksiyon.
void kat_ciz( void )
{
    cout<< "|        |\\n" ;
    cout<< "|        |\\n" ;
    cout<< "|        |\\n" ;
    cout<< "----------\\n";
}

// Programin calismasini saglayan ana fonksiyon.
main( )
{
    catiyi_ciz( );
    kat_ciz( );
    kat_ciz( );
    kat_ciz( );



    getch();
    return 0;
}

Antiparantez: Benim şimdiye kadar fonksiyonlar anladığım bu kadar olduğu için kendimde bilmeden
ileri gitmek istemedim.

E)ÖNİŞLEMCİ KOMUTLARI:

Önişlemci komutlarının amacı, bir şeyi başka bir şekilde ifade etmektir.
Bir program yazdığınızı düşünün... Bu programda, PI değerini birçok yerde kullanmanız gerekiyor.
Siz de PI değeri olması gereken her yere, 3.14 yazıyorsunuz. Oldukça sıkıcı bir iş.
İleride PI’yi, 3.141592653 olarak değiştirmek isterseniz daha da sıkıcı hâle dönüşebilir.

#define

#define komutu, adından da anlaşılabileceği gibi tanımlama işlemleri için kullanılır.
Bunun için #define yazıp bir boşluk bıraktıkan sonra, önce kullanacağımız bir isim verilir,
ardından da yerine geçeceği değer.

Kısaca:

Kod:

#include<iostream>
#define PI    3.14159                  //artık PI değeri 3.14159’dur.
#define ekrana_yazdir cout
#define deger_al      cin

#undef

Bazı durumlarda, #define komutuyla tanımladığımız şeyleri, iptal etmek isteriz.
Tanımlamayı iptal etmek için, #undef komutu kullanılır.
Örneğin #undef PI yazdığınız da, o noktadan itibaren PI tanımsız olacaktır.
#define ile oluşturduğunuz sembolleri belirli noktalardan sonra geçerliliğini iptal
etmek veya yeniden tanımlamak için #undef komutunu kullanabilirsiniz.


#ifdef ve #ifndef

Önişlemci komutlarında bir sembol veya simgenin daha önce tanıtılıp tanıtılmadığını kontrol etmek isteyebiliriz.
Tanıtılmışsa, şöyle yapılsın; yok tanıtılmadıysa, böyle olsun gibi farklı durumlarda ne olacağını belirten yapılar
gerekebilir. Bu açığı kapatmak için #ifdef (if defined - şayet tanımlandıysa) veya
#ifndef (if not defined - şayet tanımlanmadıysa) operatörleri kullanılır.

Kısa bir örnekle ile açıklayacak olursak:

Kod:

#include <stdio.h>
#include <iostream>
#include <conio.h>
using namespace std;

main( void ){
   
    int yaricap;
    float alan;
    cout<< "Cemberin yari capini giriniz: " ;
    cin >> yaricap;

    // Şu noktaya kadar tanımlı bir PI değeri bulunmuyor.
    // #ifndef opertörü bu durumu kontrol ediyor.
    // Eğer tanımsızsa, PI’nin tanımlanması sağlanıyor.
    #ifndef PI         
          #define PI 3.14
    #endif

    alan = PI * yaricap * yaricap;
    cout << "Cember alani: " << alan ;

            getch();
    return 0;
}

#if, #else, #endif, #elif

Bazen bir değerin tanımlanıp, tanımlanmadığını bilmek yetmez. Bazı değerler, bayrak (flag) olarak kullanılır.
Yani eğer doğruysa, böyle yapılması lâzım, aksi hâlde böyle olacak gibi... Bazı programlar, önişlemci komutlarından yararlanır.
Değişken yerine, önişlemcileri kullanarak tanımlanan simgeler, bu programlarda flag görevi görür.

Kod:

#include <stdio.h>
#include <iostream>
#include <conio.h>
#define HASSASLIK_DERECESI 2          //buradaki 2 degerini degistirirsek #elif komutları ona göre isler.
using namespace std;

main( void ){
   
    int yaricap;
    float alan;
    cout<< "Cemberin yari capini giriniz> " ;
    cin >> yaricap ;

    // Hassaslık derecesi, pi sayısının virgülden kaç
    // basamak sonrasının hesaba katılacağını belirtir.
    // Eğer hassaslık derecesi bunlara uymuyorsa, alan
    // değeri -1 yapılır.
   
    #if ( HASSASLIK_DERECESI == 0 )
          alan = 3 * yaricap * yaricap;
    #elif ( HASSASLIK_DERECESI == 1 )
          alan = 3.1 * yaricap * yaricap;
    #elif ( HASSASLIK_DERECESI == 2 )
          alan = 3.14 * yaricap * yaricap;
    #elif ( HASSASLIK_DERECESI == 3 )
          alan = 3.141 * yaricap * yaricap;
    #elif ( HASSASLIK_DERECESI == 4 )
          alan = 3.1415 * yaricap * yaricap;
    #elif ( HASSASLIK_DERECESI == 5 )
          alan = 3.14159 * yaricap * yaricap;
   
    #else                    //hassasiyet 5den buyuk olursa alan -1 olur.
          alan = -1;
    #endif

    cout<< "Cember alani: "<< alan ;

        getch();
    return 0;
}

#include

#include komutu, programımıza bir başlık dosyasının dahil edileceğini belirtir.
Bu başlık dosyası, standart giriş çıkış işlemlerini içeren bir kütüphane olabileceği gibi,
kendimize ait fonksiyonların bulunduğu bir dosya da olabilir.



Alıntı


Tüm Zamanlar GMT +3 Olarak Ayarlanmış. Şuanki Zaman: 10:06.

Powered by vBulletin® Version 3.8.8 Beta 3
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
Copyright ©2004 - 2024 IRCForumlari.Net