# 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`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.yavuzlar.org/egitim/c-plus-plus/2.0-fonksiyonlar/1.9-matematik-math-fonksiyonlari.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
