Bu yazımızda
- Temel matematik işlemlerin yapılışı
- Sayıları nasıl saklayacağımızı
- Farklı sayı türleri arasındaki farkları
- Eşittir sembolünün aslında ne anlama geldiğini
- std::cout yerine direk cout nasıl yazılabileceğine
gibi konulardan bahsedeceğiz.
Temel işlemler
Aşağıda 4 temel matematik işlemini görüyoruz. Bu işlemleri yapmak için kullandığımız +,-,*,/ sembollerine “Arithmetic operator” denir. Kodu çalıştırdığımızda alacağımız çıktılar ifadelerin yanına yorum satırı yardımıyla yazılmıştır.
#include <iostream>
int main(){
std::cout << 5 + 3 << "\n"; // 8
std::cout << 5 - 3 << "\n"; // 2
std::cout << 5 * 3 << "\n"; // 15
std::cout << 5 / 3 << "\n"; // 1
}Çıktıları incelediğimizde normal olmayan bir şey farkediyoruz. Toplama(+) çıkarma(-), çarpma(*) işlemlerinin sonucu doğruyken bölme(/) işleminin sonucu yanlış. 5/3 işleminin sonucu matematikte 1.666… sonucunu verir.
Bu hatanın nedeni C++ ‘da ve birçok programlama dilinde sayıların iki farklı şekilde ifade edilmesinden kaynaklanıyor.
- Tamsayılar(integer) (-5, -3, 0, 1, 22 gibi)
- Kayan noktalı(floating point) sayılar (3.14, -273.15 gibi)
Kayan noktalı sayıların Türkçenin aksine . ile yazıldığına dikkat edin.
- Türkçede 3,14
- C++ da 3.14
Bizler kolaylık olsun diye yazımızın devamında tüm kayan noktalı sayılar için float diyeceğiz.
5/3 işleminde tamsayı kullandığımız için sonuç tam sayı oluyor yani virgülden sonraki kısmı atılıyor. Float kullanırsak virgülden sonraki kısmını atmaz:
// Eger integer yerine float kullanirsak sonucu dogru verecektir.
std::cout << 5.0 / 3.0 << "\n"; // 1.66667
// en az bir tanesinin float olmasi yeterli
// bu durumda compiler oteki tamsayiyi da float'a cevirir
std::cout << 5.0 / 3 << "\n"; // 1.66667
std::cout << 5 / 3.0 << "\n"; // 1.66667
// float oldugunu belirtmek icin
// sayinin sonuna tek bir nokta eklememiz yeterli
std::cout << 5 / 3. << "\n"; // 1.66667using namespace std;
Yazıya devam etmeden önce işlerimizi biraz kolaylaştıralım. Öncelikle her cout ifadesinin önüne std:: yazmamıza gerek yok. Dosyamızın başına using namespace std; yazarak bundan sonraki ifadelerimizde std:: yazmaktan kurtulabiliriz. Bu ilerde sıkıntı çıkartabilecek bir metoddur çünkü farklı alan adlarına sahip kütüphaneler kullandığımızda yanlış fonksiyonu çağırma ihtimalimiz var. Şimdilik böyle bir derdimiz olmadığı için gönül rahatlığıyla kullanabiliriz.
Buna alternatif olarak using std::cout; diyerek sadece cout nesnesin std:: ye ait olduğunu belirtebiliriz.
İkinci husus ise ifadelerin sonunda satır atlama karakteri olan “\n” karakterini kullanıyoruz. Bunun alternatifi ise std::endl; ifadesi. İkisinin farkı std::endl yazınnı sonuna “\n” karakterini ekleyip flush yapar.
#include <iostream>
using namespace std;
// using std::cout;
int main(){
cout << 5 << "\n"; // 5
cout << 5 << endl; // 5
}Sayıları saklamak
Sayıları saklamak için değişken dediğimiz yapıları kullanıyoruz. Değişkenler belli bir bellek bölgesinde veri tutar ve ona belli bir anlam katar. Örneğin bellek bölgesinde 01000001010011100100111001000001 verisi bulunabilir ama bunun ne türde bir veri olduğunu bilmeden hiçbir işlem yapamayız hiçbir anlam ifade etmez. Ne zaman bu bir tamsayıdır, bu resimde bir piksel değeridir, müzikte bir nota değeridir gibi bir tanımlama yaptığımızda o veri anlam kazanır. Anlamsız bir veri üzerinde işlem yapamazsınız.
Yani kısacası değişkenler bizlerin işlem yapabilmek için anlam verdiğimiz veri saklayan bellek bölgeleridir. Bunu daha iyi anlamamız için biraz belleğin ne olduğuna bakmamız lazım.
En küçük dijital veri birimi bit ‘tir. Binary Data kelimelerinin kısaltmasından elde edilmiştir. Tutabileceği iki değer vardır: 0 veya 1
Bir sonraki veri birimimiz ise byte ‘dır. Her bir byte, 8 adet bit’ten oluşur. Bu durumu günlük hayatta en çok internet hızında hissederiz. İnternet servis sağlayıcıları bizlere interneti satarken Megabits per second (Mbps) hızıyla satar bu genel olarak kullanıcının “32 megabyte internet aldık 4 megabyte geliyor” isyanlarıyla göğe doğru yükselir. Bu durum ticari ahlaktan yoksundur bir satış tekniğidir. Bunun bir tık ötesi ise “-e kadar” diye nitelendirilen hızlardır.
Artık 1 byte ‘ın 8 bit ‘e eşit olduğunu biliyoruz. Byte ile bit ‘in en önemli farkı bu değildir. En önemli farkı byte ‘ları adreslenebiliyorken bit ‘ler adreslenemiyor.
Adres mi? Belleğimiz, tek bir sütandan oluşan devasa bir tablodan ibarettir. İşlemci bellekten veriyi okurken o verinin bulunduğu satır numarasını verir ve veriyi alır/yazar. Bu satır numaralarına adres diyoruz. Burada tabi fiziksel olarak yazılan bir numara yok. sadece elektrikiği ileten kablolar var o elektriği yönlendirecek yapılar var.
Daha sonraki birimler ise sırasıyla 1024’ün katları şeklinde gitmekte.
- 1 byte = 8 bit
- 1 kilobyte = 1024 byte
- 1 megabyte = 1024 kilobyte
- 1 gigabyte = 1024 megabyte
- 1 terabyte = 1024 gigabyte
Buraya kadar yazılan muhtemelen çok da anlam ifade etmiyor fakat arkaplanda neler döndüğünü az çok bilmek “büyük resmi” görmek için faydalı.

#include <iostream>
using namespace std;
int main(){
int sayi = 5;
// sayi isminde bir integer degiskeni tanimladik
// ve 5 degerini atadik
cout << sayi << endl; // 5
int a, b; // integer tipinde a ve b isminde 2 degisken tanimladik;
a = 5; // a ya 5 degerini atadik
b = 3; // b ye 5 degerini atadik
int c; // c diye bir degisken olusturduk
c = a + b; // a ve b yi toplayip cikan sonucu c ye attik
cout << c << endl; // 8
}Yukarıdaki kodda değişkenin tanımlama ve kullanılmasına ilişkin basit bir örnek görüyoruz. Anlaşılması problem olabilecek noktalardan biri eşittir (=) sembolünün matematikteki anlamından bağımsız bir anlama sahip olması.
- Burada, bir eşitlik durumu söz konusu değil. Burada, atama durumu söz konusu.
- Sembolün sağındaki değeri al solundaki bellek bölgesine yaz anlamına gelir.
- Matematikte (x=x+5) ifadesi geçersiz bir ifadeyken c++ da geçerli bir ifadedir. x değişkenini al ona 5 ekle, çıkan sonucu x ‘e yaz anlamına gelir.
Bir~Değişkenin~Anatomisi\\~~\\
\underbrace{int}_{(1)}~~
\underbrace{lahmacun}_{(2)}~~
\underbrace{=5}_{(3)};
\\~~\\
\begin{align*}
&(1)Türü \\
&(2)Adı \\
&(3)Değeri~(opsiyonel)
\end{align*}- Her değişkenin bir türü/tipi ve ismi vardır.
- Dilin kendisinden gelen primitive types (ilker türler) olabileceği gibi bizlerin tanımladığı veri türleri de olabilir.
- Tek seferde birden fazla değişkeni tanımlayabiliriz
- Bir değişkeni tanımlarken değer atamasını da yapabiliriz. Eğer:
- Değer ataması yapılmışsa: Initialization,
- Değer ataması yapılmamışsa: Declaration, denir
Doğum tarihini hesaplayan bir kod yazalım
#include <iostream>
using namespace std;
int main(){
int dogum_yili, bulundugumuz_yil;
dogum_yili = 1979;
bulundugumuz_yil = 2024;
cout << "Dogum tarihi: " << dogum_yili << endl;
cout << "Bulundugumuz yil: " << bulundugumuz_yil << endl;
cout << "Yas: " << bulundugumuz_yil-dogum_yili << endl;
}
// Cikti:
//
// Dogum tarihi : 1979
// Bulundugumuz yil : 2024
// Yas : 45Vücut kitle indeksinizi hesaplayan bir kod yazalım:
#include <iostream>
using namespace std;
int main(){
// Bu sefer değişkenlerimizi float tipinde oluşturduk.
// Böylece noktalı sayılarla işlem yapabiliriz.
float VKI, agirlik, uzunluk;
// Değişkenlerimize değer atadık
agirlik = 88;
uzunluk = 1.80;
// Kütle indeksini hesapladık ve ekrana bastırdık
VKI = agirlik / (uzunluk * uzunluk);
cout << "Vucut kitle indeksiniz: " << VKI << "'dir.\n";
// Eğer VKI, 25'den küçükse "sağlıklı" yazacak
// değilse "kilo vermelisiniz" yazacak.
if (VKI < 25) {
cout << "Sagliklisiniz." << endl;
}
else {
cout << "Kilo vermelisiniz." << endl;
}
}
// Çıktı
// Vucut kitle indeksiniz: 27.1605'dir.
// Kilo vermelisiniz.
// VKI = ağırlık (kg) / boy (m)²
// 18, 5 kg / m² ‘nin altındaki sonuçlar : Zayıf
// 18, 5 kg / m² ile 24, 9 kg / m² arasındaki sonuçlar : Sağlıklı
// 25 kg / m² ile 29, 9 kg / m² arasındaki sonuçlar : Şişman
// 30 kg / m² ile 39, 9 kg / m² arasındaki sonuçlar : Obez
// 40 kg / m² üzerindeki sonuçlar : Aşırı obez(Morbid obez)
// https://www.acibadem.com.tr/ilgi-alani/vucut-kitle-indeksi-hesaplama/- İşlem önceliği matematikte olan işlem önceliğiyle aynı şekildedir. Eğer işlem sırasını değiştirmek istersek () parantez kullanabiliriz
- Daha sonraki yazılarımızda detaylıca göreceğimiz if-else koşul yapısını görüyoruz. Eğer (VKI<25) koşulu doğru ise if bloğu çalışır. Yanlış ise else bloğu çalışır.
Deneme Zamanı
- Octet nedir?


Leave a Reply