> For the complete documentation index, see [llms.txt](https://docs.yavuzlar.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.yavuzlar.org/egitim/c-plus-plus/2.0-fonksiyonlar/1.9-matematik-math-fonksiyonlari.md).

# 1.9 Matematik (Math) Fonksiyonları

C++ dilinde matematiksel işlemleri gerçekleştirmek için çeşitli operatörler ve fonksiyonlar bulunmaktadır. Bu bölümde, C++'da matematiksel işlemleri nasıl yapabileceğinizi, `cmath` kütüphanesini kullanarak temel matematik fonksiyonlarını nasıl uygulayabileceğinizi ve bu konularla ilgili alıştırmaları öğreneceksiniz.

### C++ Matematik Operatörleri

C++ dilinde matematiksel işlemler yapmak için kullanılan temel operatörler şunlardır:

| Operatör | Açıklama        | Örnek            |
| -------- | --------------- | ---------------- |
| `+`      | Toplama         | `a + b`          |
| `-`      | Çıkarma         | `a - b`          |
| `*`      | Çarpma          | `a * b`          |
| `/`      | Bölme           | `a / b`          |
| `%`      | Modülüs (kalan) | `a % b`          |
| `++`     | Artırma         | `a++` veya `++a` |
| `--`     | Azaltma         | `a--` veya `--a` |

#### Örnek Kod

```cpp
#include <iostream>
using namespace std;

int main() {
    int a = 10;
    int b = 3;

    cout << "Toplama: " << (a + b) << endl;       // 13
    cout << "Çıkarma: " << (a - b) << endl;      // 7
    cout << "Çarpma: " << (a * b) << endl;        // 30
    cout << "Bölme: " << (a / b) << endl;         // 3
    cout << "Modülüs: " << (a % b) << endl;      // 1

    // Artırma ve Azaltma
    cout << "a++: " << a++ << endl;               // 10, sonra a = 11
    cout << "++a: " << ++a << endl;               // 12
    cout << "a--: " << a-- << endl;               // 12, sonra a = 11
    cout << "--a: " << --a << endl;               // 10

    return 0;
}
```

**Çıktı:**

```
Toplama: 13
Çıkarma: 7
Çarpma: 30
Bölme: 3
Modülüs: 1
a++: 10
++a: 12
a--: 12
--a: 10
```

**`cmath` Kütüphanesi**

C++'da gelişmiş matematiksel işlemler gerçekleştirmek için `<cmath>` kütüphanesi kullanılır. Bu kütüphane, trigonometrik fonksiyonlar, üs alma, karekök gibi birçok fonksiyonu içerir.

#### `cmath` Kütüphanesini Dahil Etme:

```cpp
#include <cmath>
```

### Temel Matematik Fonksiyonları

`<cmath>` kütüphanesi içinde bulunan bazı temel matematik fonksiyonları şunlardır:

#### 1. Mutlak Değer (`abs`)

Bir sayının mutlak değerini (pozitif değerini) döndürür.

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int a = -10;
    double b = -5.5;

    cout << "abs(a): " << abs(a) << endl;       // 10
    cout << "abs(b): " << abs(b) << endl;       // 5.5

    return 0;
}
```

#### 2. Karekök (`sqrt`)

Bir sayının karekökünü döndürür.

```cpp
cppCopy code#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double num = 25.0;

    cout << "sqrt(num): " << sqrt(num) << endl; // 5

    return 0;
}
```

#### 3. Üs Alma (`pow`)

Bir sayının belirtilen üssünü döndürür.

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double base = 2.0;
    double exponent = 3.0;

    cout << "pow(base, exponent): " << pow(base, exponent) << endl; // 8

    return 0;
}
```

#### 4. Sinüs (`sin`), Kosinüs (`cos`), Tanjant (`tan`)

Açıları radyan cinsinden alır ve trigonometrik değerleri döndürür.

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double angle = 45.0;
    double radians = angle * (M_PI / 180.0); // Dereceyi radyana çevirme

    cout << "sin(" << angle << "°): " << sin(radians) << endl; // ~0.7071
    cout << "cos(" << angle << "°): " << cos(radians) << endl; // ~0.7071
    cout << "tan(" << angle << "°): " << tan(radians) << endl; // ~1

    return 0;
}
```

#### 5. Logaritma (`log`, `log10`)

Doğal logaritmayı (`log`) ve 10 tabanında logaritmayı (`log10`) döndürür.

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double num = 100.0;

    cout << "log(num): " << log(num) << endl;       // ~4.6052 (ln(100))
    cout << "log10(num): " << log10(num) << endl;   // 2 (log10(100))

    return 0;
}
```

#### 6. Üstünü Al (`exp`)

`e` sayısının belirtilen üsse yükseltilmiş halini döndürür.

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double exponent = 1.0;

    cout << "exp(exponent): " << exp(exponent) << endl; // ~2.7183 (e^1)

    return 0;
}
```

### Rastgele Sayılar Üretme

C++'da rastgele sayılar üretmek için çeşitli yöntemler bulunmaktadır. Modern C++'da `<random>` kütüphanesi kullanılarak daha güvenilir ve esnek rastgele sayı üretimi yapılabilir.

#### Örnek: Basit Rastgele Sayı Üretimi

```cpp
#include <iostream>
#include <cstdlib> // rand() ve srand() için
#include <ctime>   // time() için
using namespace std;

int main() {
    // Rastgele sayı üreteciyi başlatma
    srand(time(0));

    // 0 ile 99 arasında rastgele bir sayı üretme
    int randomNumber = rand() % 100;
    cout << "Rastgele Sayı: " << randomNumber << endl;

    return 0;
}
```

#### Modern C++ ile Rastgele Sayılar

```cpp
#include <iostream>
#include <random>
using namespace std;

int main() {
    // Rastgele sayı üreteci oluşturma
    random_device rd;  // Cihazdan rastgele bitler alır
    mt19937 gen(rd()); // Mersenne Twister motoru
    uniform_int_distribution<> distrib(1, 100); // 1 ile 100 arasında

    // 10 rastgele sayı üretme
    for(int i = 0; i < 10; ++i) {
        cout << distrib(gen) << " ";
    }
    cout << endl;

    return 0;
}
```

***

### Matematiksel Sabitler

C++'da matematiksel sabitler `cmath` kütüphanesi içinde tanımlanmıştır. Bazı yaygın sabitler şunlardır:

| Sabit     | Açıklama                  |
| --------- | ------------------------- |
| `M_PI`    | Pi sayısı (3.14159...)    |
| `M_E`     | Euler sayısı (2.71828...) |
| `M_SQRT2` | √2 (1.41421...)           |
| `M_LN2`   | ln(2) (0.693147...)       |

#### Örnek Kullanım

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    cout << "Pi: " << M_PI << endl;         // 3.14159...
    cout << "Euler Sayısı: " << M_E << endl; // 2.71828...
    cout << "Karekök 2: " << M_SQRT2 << endl; // 1.41421...
    cout << "ln(2): " << M_LN2 << endl;       // 0.693147...

    return 0;
}
```

*Not: Bazı derleyicilerde `M_PI` gibi sabitler tanımlı olmayabilir. Bu durumda, kendi sabitlerinizi tanımlayabilirsiniz:*

```cpp
const double PI = 3.14159265358979323846;
```

***

### Alıştırmalar

#### S1) Aşağıdaki C++ Kodunun Çıktısı Nedir?

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double num = -16.0;

    cout << "abs(num): " << abs(num) << endl;
    cout << "sqrt(abs(num)): " << sqrt(abs(num)) << endl;
    cout << "pow(2, 3): " << pow(2, 3) << endl;

    return 0;
}
```

a) `abs(num): -16`\
b) `abs(num): 16`\
c) `sqrt(abs(num)): 4`\
d) `pow(2, 3): 8`\
e) Tüm çıktılar doğru

***

#### S2) Aşağıdaki C++ Kodunun Çıktısı Nedir?

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double angle = 60.0;
    double radians = angle * (M_PI / 180.0);

    cout << "sin(60°): " << sin(radians) << endl;
    cout << "cos(60°): " << cos(radians) << endl;
    cout << "tan(60°): " << tan(radians) << endl;

    return 0;
}
```

a) `sin(60°): 0.866025`\
b) `cos(60°): 0.5`\
c) `tan(60°): 1.73205`\
d) Hepsi doğru\
e) Hepsi yanlış

***

#### S3) Aşağıdaki C++ Kodunda Hangi Satır Hata Verir?

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double x = 9.0;
    double y = sqrt(x);
    double z = pow(x, 2);

    cout << "y: " << y << endl;
    cout << "z: " << z << endl;

    // double w = sqrt(-4.0); // Bu satır hata verir
    // cout << "w: " << w << endl;

    return 0;
}
```

a) `double y = sqrt(x);`\
b) `double z = pow(x, 2);`\
c) `double w = sqrt(-4.0);`\
d) Hiçbir satır hata vermez

***

#### S4) Aşağıdaki C++ Kodunun Çıktısı Nedir?

```cpp
#include <iostream>
#include <cmath>
using namespace std;

int main() {
    double num = 8.0;

    cout << "log(num): " << log(num) << endl;       // Doğal logaritma (ln)
    cout << "log10(num): " << log10(num) << endl;   // 10 tabanında logaritma

    return 0;
}
```

a) `log(num): 2.07944`\
b) `log10(num): 0.90309`\
c) Her ikisi de doğru\
d) Her ikisi de yanlış

***

#### S5) Aşağıdaki C++ Kodunda Hangi Fonksiyon Kullanılarak `C++` stringi `C`-Style stringe dönüştürülmüştür?

```cpp
#include <iostream>
#include <string>
#include <cstring>
using namespace std;

int main() {
    string cppString = "C++ ile string";
    const char* cString = cppString.c_str();

    cout << "C-Style String: " << cString << endl;
    return 0;
}
```

a) `strcpy`\
b) `c_str`\
c) `strcat`\
d) `strlen`
