C++ Genel Özet

Nightmore

Hectopat
Katılım
23 Ekim 2013
Mesajlar
43
Makaleler
1
Daha fazla  
Cinsiyet
Erkek
Meslek
Öğrenci
​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 By Jasper";

cout << "Merhaba Dunya \\n" << "Benim adim By Jasper";
veya
cout << "Merhaba Dunya \\n Benim adim By Jasper;

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:

Kod:
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( **** )
{
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:

Kod:
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 [URL="http://www.turkishajan.com/images/smilies/smile.gif"][IMG]http://www.turkishajan.com/images/smilies/smile.gif[/IMG][/URL])

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

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

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

Örn: 
#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

Kod:
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. 
**** catiyi_ciz( **** ) //parantez içindeki **** ler boş anlamındadır. Kullanmamız şart değildir.
{
cout<< " /\\\\ \\n" ;
cout<< " / \\\\ \\n" ;
cout<< " / \\\\ \\n" ;
cout<< " / \\\\\\n" ;
cout<< "----------\\n";
}

// Evin katini cizen fonksiyon. 
**** kat_ciz( **** ) 
{
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( **** ){

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( **** ){

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.
 
Uyarı! Bu konu 11 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Geri
Yukarı