alpsahin/tubitak-olimpiyat-dataset-v2 huggingface dataset:
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 29

### [27 – 29] Sorular İçin Açıklama
Şifreleme Algoritması:
Şifrelenecek metin ve şifrelenmiş metin uzaylarının (mod 26)'da tanımlı olduğunu düşünelim. (mod 26) uzayı, elemanları aşağıdaki harflerin sayısal karşılığı olacak şekilde verilsin.
<table><tr><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td></tr><tr><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td></tr></table>
<table><tr><td>N</td><td>O</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td></tr><tr><td>13</td><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td></tr></table>
Şifreleme işleminde kullanılacak anahtar kümemiz de (mod 26)'da tanımlı K = (a, b) olsun. b değeri (mod 26)'da tüm değerleri alabilirken, a ise sadece OBEB(a, 26) = 1 sonucunu sağlayan değerleri alabilmektedir. x; şifrelenecek değer, y de şifreleme sonucunda elde ettiğimiz değer olsun.
Şifreleme kuralımız: y = e<sub>k</sub>(x) ≡ (a·x + b) (mod 26).
Şifre çözme kuralımız ise: x = d<sub>k</sub>(y) ≡ a<sup>-1</sup>·(y - b) (mod 26).
Örneğin; Şifrelenecek metin "AD" olsun. Yukarıda verilen koşullara bağlı olarak K = (7, 3) olsun. A'nın sayısal karşılığı O, D'nin sayısal karşılığı 3'tür. Bu durumda Şifreli metin şifreleme kuralına bağlı olarak:
\[y_1 = e_k(x) \equiv (a \cdot x + b) \pmod{26}, y_1 = e_k(A) = e_k(O) = (7 \cdot O + 3) \equiv 3 \pmod{26} (3 = D),\]
\[y_2 = e_k(x_2) \equiv (a \cdot x_2 + b) \pmod{26}, y_2 = e_k(D) = e_k(S) = (7 \cdot 3 + 3) \equiv 24 \pmod{26} (24 = Y) \text{ çıkar.}\]
Böylece Şifreli metin: "DY" olarak hesaplanmış olur. Şifreli metni alan kişi de anahtar kümesine sahiptir ve bu anahtar kümesini kullanarak şifre çözme kuralına bağlı olarak "AD" elde edecektir. 7-1 ≡ 15 (mod 26).
\[x_1 = d_k(y_1) \equiv a^{-1} \cdot (y_1 - b) \pmod{26}, x_1 = d_k(D) = d_k(3) = 7^{-1} \cdot (3 - 3) \pmod{26} = 15 \cdot O \equiv O \pmod{26} (O = A),\]
\[x_2 = d_k(y_2) \equiv a^{-1} \cdot (y_2 - b) \pmod{26}, x_2 = d_k(Y) = d_k(24) = 7^{-1} \cdot (24 - 3) \pmod{26} = 15 \cdot 21 \equiv 3 \pmod{26} (3 = D).\]

---

Verilen şifreleme kuralına bağlı olarak (mod 26) uzayında, şifreli metin "FZE" nin şifrelenmeden önceki hali "THE" ise anahtar kümesi (K) aşağıdakilerden hangisi olabilir?

Şıklar:
A) (7, 7) | B) (7, 2) | C) (3, 7) | D) (13, 4) | E) Hiçbiri

Cevap: B (7, 2)

Çözüm:
K(a, b) dersek her bir harf için 1 adet modüler denklem çıkar:
- T ⇒ T=19, F=5, e<sub>k</sub>(19) = (a.19+b) ≡ 5 (mod 26).
- H ⇒ H=7, Z=25, e<sub>k</sub>(19) = (a.7+b) ≡ 25 (mod 26).
- E ⇒ E=4, e<sub>k</sub>(19) = (a.4+b) ≡ 4 (mod 26).
- 2.denklemden 3.yü çıkarırsak 3a ≡ 21 (mod 26) denklemi gelir. 3 ile 26 aralarında asal olduğundan bu denklemin tek sonucunun 7 olduğunu söyleyebiliriz.
- 3.denklemde a yerine 7 yazarsak b'nin 2 olduğunu anlarız.
- O zaman kümemiz(7,2) olur.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 30

## [30 – 31] Sorular İçin Açıklama
**Tanım 1:** m değeri doğal sayılar kümesinin elemanı olmak üzere \(\emptyset(m)\) değeri m ile aralarında asal olan ve m'den küçük tüm doğal sayıların sayısıdır. Örneğin m = 10 olsun. \(\emptyset(10)\) değeri için yukarıdaki tanıma göre 10'dan küçük, 10 ile aralarında asal olan sayılar kümesi \(\{1, 3, 7, 9\}'dur. Bu durumda \(\emptyset(10) = 4'dür.**
\(\emptyset(m) = m \cdot \pi(1 - 1/p)\); p değerleri m'nin asal çarpanlarıdır.
Örnek1: \(\emptyset(10) = 10 \cdot (1 - 1/p)\). 10'un asal çarpanları, 10 = 2·5'den, 2 ve 5'dir.
\(\emptyset(10) = 10 \cdot (1 - 1/2) \cdot (1 - 1/5) = 10 \cdot (1/2) \cdot (4/5) = 4\)
Örnek2: \(\emptyset(12) = 12 \cdot (1 - 1/p)\). 12'nin asal çarpanları, 12 = \((2^2 \cdot 3)'\)'den, 2 ve 3'dür.
\(\emptyset(12) = 12 \cdot (1 - 1/2) \cdot (1 - 1/3) = 12 \cdot (1/2) \cdot (2/3) = 4\)
Eğer m değeri asal ise \(\emptyset(m) = (m - 1)'\)'dir (Asal sayı; 1'e ve kendisinden başka sayıya bölünemeyen sayıdır).
**Tanım 2:** OBEB(a, m) = 1'ise \(a^{20m} \equiv 1 \pmod{m}'\)dir.

---

Aşağıdakilerden hangisi \(13^{422} \equiv ? \pmod{31}\)'e ait çözümdür?

Şıklar:
A) 12 | B) 13 | C) 14 | D) 30 | E) \(\emptyset\)

Cevap: C 14

Çözüm:
31 asal sayı olduğundan \(\emptyset(31) = 30\) olduğunu biliyoruz. \(a^{20m} \equiv 1 \pmod{m}\) formülündeki m yerine 31 ve a yerine 13 yazarsak \(13^{30} \equiv 1 \pmod{31}\) ile elde ederiz. \(13^{422}\)'deki her \(13^{30}\)'u çıkarırsak, 422 mod 30 = 2 olduğundan geriye \(13^2\)'kalır. Yani denklemimiz 169 mod 31 olur. Bu değer 14'e eşittir.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 31

## [30 – 31] Sorular İçin Açıklama
**Tanım 1:** m değeri doğal sayılar kümesinin elemanı olmak üzere \(\emptyset(m)\) değeri m ile aralarında asal olan ve m'den küçük tüm doğal sayıların sayısıdır. Örneğin m = 10 olsun. \(\emptyset(10)\) değeri için yukarıdaki tanıma göre 10'dan küçük, 10 ile aralarında asal olan sayılar kümesi \(\{1, 3, 7, 9\}'dur. Bu durumda \(\emptyset(10) = 4'dür.**
\(\emptyset(m) = m \cdot \pi(1 - 1/p)\); p değerleri m'nin asal çarpanlarıdır.
Örnek1: \(\emptyset(10) = 10 \cdot (1 - 1/p)\). 10'un asal çarpanları, 10 = 2·5'den, 2 ve 5'dir.
\(\emptyset(10) = 10 \cdot (1 - 1/2) \cdot (1 - 1/5) = 10 \cdot (1/2) \cdot (4/5) = 4\)
Örnek2: \(\emptyset(12) = 12 \cdot (1 - 1/p)\). 12'nin asal çarpanları, 12 = \((2^2 \cdot 3)'\)'den, 2 ve 3'dür.
\(\emptyset(12) = 12 \cdot (1 - 1/2) \cdot (1 - 1/3) = 12 \cdot (1/2) \cdot (2/3) = 4\)
Eğer m değeri asal ise \(\emptyset(m) = (m - 1)'\)'dir (Asal sayı; 1'e ve kendisinden başka sayıya bölünemeyen sayıdır).
**Tanım 2:** OBEB(a, m) = 1'ise \(a^{20m} \equiv 1 \pmod{m}'\)dir.

---

\(x^{38} \equiv 3 \pmod{13}\) denkleminin çözüm kümesi aşağıdakilerden hangisidir?

Şıklar:
A) \(\{4, 9\}\) | B) \(\{4\}\) | C) \(\{0, 9\}\) | D) \(\{4, 0\}\) | E) \(\{0\}\)

Cevap: A \(\{4, 9\}\)

Çözüm:
13 asal olduğundan \(\emptyset(13) = 12\) diyebiliriz. x'in üstünün 12'yle modunu alırsak yeni denkleminiz \(x^2 \equiv 3 \pmod{13}\) olur. \(3 \equiv 16 \equiv 4^2 \pmod{13}\) olduğundan x=4 diyebiliriz. Aynı şekilde \(3 \equiv 81 \equiv 9^2 \pmod{13}\) olduğundan x=9 da diyebilir. Cevabın olmama durumu olan \(\emptyset\)'yi çözüm kümesine ekleyemeyiz. O zaman çözüm kümesi \(\{4, 9\}\) olur.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 32

## [32 – 35] Sorular İçin Açıklama
Hakkı, Mustafa, Ramiz, Kemal, Süleyman, Zeynep, Serpil, Burcu ve Elif bilgisayar mühendisliği bölümü öğrencileridir. Bu öğrencilerin her biri bölüm derslerinden olan Programlama, Veritabanı ve Ağ Güvenliği derslerinden birini sevmektedir. Bununla ilgili aşağıdaki bilgiler verilmiştir.
- Hakkı, Programlama dersini sevmektedir.
- Her dersi seven 3'er kişi bulunmaktadır.
- Süleyman, Mustafa ve Burcu aynı dersi sevmektedir.
- Serpil ve Elif aynı dersi sevmektedir ancak Zeynep farklı bir dersi sevmektedir.
- Ramiz ve Kemal farklı dersleri sevmektedir.

## AÇIKLAMA
Sorumuza genel bir bakış atacak olursak biz 9 kişiyi 3 farklı küme ile gruplandırmak istiyoruz. Bunlara 1.küme, 2.küme ve 3.küme diyelim. Küme isimleri değişebildiğinden insanları boş kümelerden istediğimize yerleştirebiliriz. Şimdi özellikle göre kümelerindirme işlemi yapalım.
• Hakkı 1.kümede olsun. 1.kümenin ismi Programlama.
- Süleyman, Mustafa ve Burcu 2.kümede olsun. 2.kümenin ismi Veritabanı veya Ağ güvenliği olabilir. 2.küme artık doludur.
• Ramiz ve Kemal'den biri 1.kümeye diğeri 3.kümeye gidecektir. Yerleri değişebilir.
• 1.kümede 1 boşluk, 3.kümede 2 boşluk olduğundan; Zeynep 1.kümeye, Serpil ve Elif 3.kümeye gider.
• Şimdi sorularımıza bakalım.

---

Aşağıdaki öğrencilerden hangisinin sevdiği ders kesin olarak bilinmektedir?

Şıklar:
A) Ramiz | B) Kemal | C) Süleyman | D) Serpil | E) Zeynep

Cevap: E Zeynep

Çözüm:
İsminin Programlama olduğunu bildiğimiz 1.kümede Zeynep ve Hakkının bulunduğu Kesindir.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 34

## [32 – 35] Sorular İçin Açıklama
Hakkı, Mustafa, Ramiz, Kemal, Süleyman, Zeynep, Serpil, Burcu ve Elif bilgisayar mühendisliği bölümü öğrencileridir. Bu öğrencilerin her biri bölüm derslerinden olan Programlama, Veritabanı ve Ağ Güvenliği derslerinden birini sevmektedir. Bununla ilgili aşağıdaki bilgiler verilmiştir.
- Hakkı, Programlama dersini sevmektedir.
- Her dersi seven 3'er kişi bulunmaktadır.
- Süleyman, Mustafa ve Burcu aynı dersi sevmektedir.
- Serpil ve Elif aynı dersi sevmektedir ancak Zeynep farklı bir dersi sevmektedir.
- Ramiz ve Kemal farklı dersleri sevmektedir.

## AÇIKLAMA
Sorumuza genel bir bakış atacak olursak biz 9 kişiyi 3 farklı küme ile gruplandırmak istiyoruz. Bunlara 1.küme, 2.küme ve 3.küme diyelim. Küme isimleri değişebildiğinden insanları boş kümelerden istediğimize yerleştirebiliriz. Şimdi özellikle göre kümelerindirme işlemi yapalım.
• Hakkı 1.kümede olsun. 1.kümenin ismi Programlama.
- Süleyman, Mustafa ve Burcu 2.kümede olsun. 2.kümenin ismi Veritabanı veya Ağ güvenliği olabilir. 2.küme artık doludur.
• Ramiz ve Kemal'den biri 1.kümeye diğeri 3.kümeye gidecektir. Yerleri değişebilir.
• 1.kümede 1 boşluk, 3.kümede 2 boşluk olduğundan; Zeynep 1.kümeye, Serpil ve Elif 3.kümeye gider.
• Şimdi sorularımıza bakalım.

---

Mustafa'nın Ağ Güvenliği dersini sevdiği durumda, aşağıdakilerden hangisi kesinlikle yanlıştır?

Şıklar:
A) Ramiz, Ağ Güvenliği dersini sevmektedir. | B) Deniz, Programlama dersini sevmektedir. | C) Zeynep, Programlama dersini sevmektedir. | D) Serpil, Veritabanı dersini sevmektedir. | E) Burcu, Ağ Güvenliği dersini sevmektedir.

Cevap: A Ramiz, Ağ Güvenliği dersini sevmektedir.

Çözüm:
Mustafa'nın bulunduğu 2.kümenin ismi Ağ Güvenliği oldu. O zaman 3.kümenin ismi de Veritabanı olur. Bu gözlemden sonra şıklara bakalım:
Ramiz'in kümesi belirli değildir. 1. veya 3. olabilir. Bu kümelerin isimleri sırasıyla Programlama ve Veritabanı olduğundan, Ramiz Ağ Güvenliği dersiniz sevemez. Yanlış.
• Deniz grubumuzda olmadığından Programlama dersini sevmesi için bir engel yok. Doğru.
• Zeynep Programlama isimli 1.kümededir. Doğru.
• Serpil Veritabanı isimli 3.kümededir. Doğru.
• Burcu Ağ güvenliği isimi 2.kümededir. Doğru.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 35

## [32 – 35] Sorular İçin Açıklama
Hakkı, Mustafa, Ramiz, Kemal, Süleyman, Zeynep, Serpil, Burcu ve Elif bilgisayar mühendisliği bölümü öğrencileridir. Bu öğrencilerin her biri bölüm derslerinden olan Programlama, Veritabanı ve Ağ Güvenliği derslerinden birini sevmektedir. Bununla ilgili aşağıdaki bilgiler verilmiştir.
- Hakkı, Programlama dersini sevmektedir.
- Her dersi seven 3'er kişi bulunmaktadır.
- Süleyman, Mustafa ve Burcu aynı dersi sevmektedir.
- Serpil ve Elif aynı dersi sevmektedir ancak Zeynep farklı bir dersi sevmektedir.
- Ramiz ve Kemal farklı dersleri sevmektedir.

## AÇIKLAMA
Sorumuza genel bir bakış atacak olursak biz 9 kişiyi 3 farklı küme ile gruplandırmak istiyoruz. Bunlara 1.küme, 2.küme ve 3.küme diyelim. Küme isimleri değişebildiğinden insanları boş kümelerden istediğimize yerleştirebiliriz. Şimdi özellikle göre kümelerindirme işlemi yapalım.
• Hakkı 1.kümede olsun. 1.kümenin ismi Programlama.
- Süleyman, Mustafa ve Burcu 2.kümede olsun. 2.kümenin ismi Veritabanı veya Ağ güvenliği olabilir. 2.küme artık doludur.
• Ramiz ve Kemal'den biri 1.kümeye diğeri 3.kümeye gidecektir. Yerleri değişebilir.
• 1.kümede 1 boşluk, 3.kümede 2 boşluk olduğundan; Zeynep 1.kümeye, Serpil ve Elif 3.kümeye gider.
• Şimdi sorularımıza bakalım.

---

Burcu'nun Veritabanı dersini sevdiği durumda, aşağıdakilerden hangisini kesinlikle doğrudur?

Şıklar:
A) Ramiz, Programlama dersini sevmektedir. | B) Kemal, Ağ Güvenliği dersini sevmektedir. | C) Elif, Ağ Güvenliği dersini sevmektedir. | D) Zeynep ve Kemal aynı dersi sevmektedir. | E) Ramiz ve Serpil farklı dersleri sevmektedir.

Cevap: C Elif, Ağ Güvenliği dersini sevmektedir.

Çözüm:
Burcunun bulunduğu 2.kümenin ismi Veritabanı oldu. O zaman 3.kümenin ismi de Ağ Güvenliği olur. Bu gözlemden sonra şıklara bakalım:
## • Ramiz'in hangi kümede olduğu hala belirli değildir. Yanlış.
• Kemal de Ramiz gibi 1. veya 3. kümede bulunabilir. Yeri kesin değildir. Yanlış.
• Elif 3.kümededir. 3.kümenin ismiye Ağ güvenliğidir. Doğru
• Kemal'in kümesi belirli değildir. Yanlış.
• Ramiz'in kümesi belli değildir. 3.kümede olursa Serpil ile aynı kümede olmuş olur. Yanlış.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 36

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
void Yazdir(int n, ...)
{
    va_list v1;
    va_start(v1, n);
    for (int i=0; i < n; i++)
    {
        const char *deg = va_arg(v1, const char *);
        printf("%s", deg);
    }
    va_end(v1);
    printf("\n");
}

int main()
{
    Yazdir(4, "i", "s", "t", 5);
    return 0;
}
```

Yukardaki programın çıktısı nedir?

Şıklar:
A) i | i | s | t | i | 5 | | B) | t | i | s | l | i | l | t | | C) i | i | s | t | t | (n | u | l) | D) Derleme zamanı hatası oluşur. | E) Çalışma zamanı hatası oluşur.

Cevap: D Derleme zamanı hatası oluşur.

Çözüm:
... hiçbir parametre belirtmediğinden Yazdir fonksiyonunu çağırmada derleme hatası verir.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 37

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
int main() {
    int i, r, m, cnt, c, d, sw;
    i = 0;
    r = 10;
    m = 5;
    cnt = (rand() % m) + (m - 3);
    int *arr = (int *)malloc(sizeof(int) * cnt);
    while(i < cnt) {
        arr[i++] = (rand() % r) + 1;
    }
    for (c = 0; c < (cnt - 1); c++) {
        for (d = 0; d < cnt - c - 1; d++) {
            if (arr[d] < arr[d + 1]) {
                sw = arr[d];
                arr[d] = arr[d + 1];
                arr[d + 1] = sw;
            }
        }
    }
    for (c = 0; c < cnt; c++) {
        printf("%d ", arr[c]);
    }
    return(0);
}
```

C standart kütüphanesi içerisinde bulunan rand() rastgele tam sayı üreten bir fonksiyondur. r = 10 ve m = 5 için yukarda verilen C programının çıktısı aşağıdakilerden hangisi olabilir?

Şıklar:
A) [0] [4] [9] [1] | B) [0] [9] [4] [1] | C) [1] [4] [9] [0] | D) [2] [5] [9] [12] | E) [12] [9] [5] [2]

Cevap: A [0] [4] [9] [1]

Çözüm:
Bu soruyu 2 farklı yöntemle çözelim. İlki gözlem yapmayı gerektirmiyor ama uzun. 2. yöntemde ise güzel bir gözlemle daha kısa bir çözüm bulabiliyoruz.
### Yöntem 1:
Girdilere bakarak veri elde edelim. [2, 6] aralığında rastgele değer alacak olan cnt'nin değeri 4, [1,10] aralığında rastgele değer alacak olan arr[i] değerleri rastgele sırayla 1, 4, 9 ve 10'dur (D ve E aralığında dışında olduğundan A, B ve C şıklarının ortak verilerine bakıyoruz). 1 hiçbir zaman sola gidemeyeceğinden dolayı C şıkkını elde etmek için başlangıç dizisindeki 1'in yeri en solda olmalıdır ki bu durumda 1 sağa kayacağından C şıkkı olamaz. A şıkkına bakacak olursak, 3 adımlık c for'unda en kötü ihtimalle 2.adımda 4 ve 9 yan yana bulunacağından 2.adımda 4 ve 9 yer değiştirir ve A şıkkındaki dizi elde edilemez.
### Yöntem 2:
Her 2.döngüde [0,k] aralığındaki(k=cnt-c-1) en küçük sayıyı son indise atıyor ve ilk döngüde c 1.arttığından k'yi bir azaltıyor. [0,k-1] için aynı işlemi yapıyor. Yani bu 2 döngü sayıları büyükten küçüğe sıralıyor. O zaman sayı aralığındaki sıralı tek seçenek B şıkkıdır.
Bu şekilde basit gözlemlerin soruyu ne kadar kolaylaştırabileceğini görmüş oluyoruz.
Sırayla kodu işletelim:
• int_yazdir1 fonksiyonunda dizimizin ilk 4 sayısı yazdırılır. Yazdırılan: 1, 2, 3, 4
• int_yazdir2 fonksiyonunda dizi pointer ile alınıp ilk indisten başlayarak dizinin bütün sayıları ve bilinmeyen sayıda ?' yazılır. Yazdırılan: 1, 2, 3, 5, ? ...
Bu şartları sağlayan sadece A şıkkıdır.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 39

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
int main() {
    for (3; 2; 1)
        printf("Merhaba!\n");
}
```

Yukarıda verilen program hangi çıktıyı üretir?

Şıklar:
A) Ekrana 3 kez Merhabal yazar. | B) Sonsuz döngüye girer ve sürekli Merhabal yazar. | C) Derleme zamanı hatası oluşur. | D) Ekrana herhangi bir çıktı vermez. | E) Ekrana bir kez Merhabal yazar.

Cevap: B Sonsuz döngüye girer ve sürekli Merhabal yazar.

Çözüm:
For döngülü yapısında 2.bölmedeki yer O dan farklı olduğu sürece içindeki işlemleri yapar. Her zaman 2 olduğundan sonsuz döngüye girer.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 40

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
int main() {
    int a[10] = {2, 5, 1, 9, 4, 8, 6, 10};
    printf("%d\n", a[a[1]]);
}
```

Yukarıda verilen program hangi çıktıyı üretir?

Şıklar:
A) 2 | B) 5 | C) 8 | D) O | E) Çalışma zamanı hatası oluşur.

Cevap: C 8

Çözüm:
a[t] = 5'tir. a[a[t]] = a[5] = 8 olur.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 41

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
int main()
{
    int dizi[2][2] = {0, 1, 2, 3};
    int i;
    int toplam = 0;

    for (i = 0; i < 3; ++i) {
        int a, b;
        a = i % 2;

        if (a) {
            b = 0;
        } else {
            b = 1;
        }

        toplam += dizi[a][b];
    }

    printf("%d\n", toplam);
    return 0;
}
```

Yukarıda verilen program hangi çıktıyı üretir?

Şıklar:
A) O | B) 1 | C) 3 | D) 4 | E) 6

Cevap: D 4

Çözüm:
For'daki her i değeri için a ve b'yi inceleyelim:
- \(i = O \Rightarrow a = O, b = 1\) o zaman dizi = 1
- \(i = 1 \Rightarrow a = 1, b = O\) o zaman dizi = 2
- \(i = 2 \Rightarrow a = O, b = 1\) o zaman dizi = 1
Toplam'ın son değeri 4 olur.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 42

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
int main()
{
    int i = 5;
    printf("%d \n", i++ + ++i);
    return 1;
}
```

Yukarıda verilen program hangi çıktıyı üretir?

Şıklar:
A) 5                                    B) 7                                    C) 11                                   D) 12                                    E) 13

Cevap: D 7

Çözüm:
• İ++ önce değer döner sonra i’yi artırır.
• İ++ önce i’yi artırır sonra değer döner.
• İ++   +   ++i işlemi soldan sağa işletilir.
• Printf’de sağdan sola işletilen şey virgüller arasındaki ifaderdir. Karıştırmamak gerekir.
Yani i++ 5 dönecek ve i’nin yeni değeri 6 olacak. ++i i’nin değerini 7 yapacak ve 7 dönecek. İfade 5+7=12 olur.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 43

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
void main()
{
    int M[5][5] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
                    11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
                    21, 22, 23, 24, 25 }, swp, i, j, k;
    for (i = 0; i < 5; i++)
    {
        for (j = 0; j < 5; j++)
        {
            for (k = i; k < j; k++)
            {
                swp = M[i][j];
                M[i][j] = M[j][i];
                M[j][i] = swp;
            }
        }
    }
    printf("%2d 
 %2d 
 %2d", M[4][1], M[4][2], M[4][3]);
}
```

Yukarıda verilen program hangi çıktıyı üretir?

Şıklar:
A) 5 | 10 | 15 | B) 10 | 23 | 20 | C) 22 | 23 | 24 | D) 17 | 18 | 9 | E) 15 | 19 | 23

Cevap: B 10 | 23 | 20

Çözüm:
Öncelikle bu döngülerde yapılan şeyin, her i, j değeri için -eğer j-i pozitif ve tekse- i,j indisine j,i indisinin değerlerini değiştirmek olduğunu gözlemlemek lazım.
Şimdi her i için değeri değişecek indilere bakalım:
- \(i = 0 \rightarrow 0,1 - 1,0 \quad 0,3 - 3,0\)
- \(i = 1 \rightarrow 1,2 - 2,1 \quad 1,4 - 4,1\)
- \(i = 2 \rightarrow 2,3 - 3,2\)
- \(i = 3 \rightarrow 4,3 - 3,4\)
- \(i = 4 \rightarrow -\)
i, j indisinin başlangıç değerini \(i*5+j+1\) formuluyle hesaplayalım. Bu verilere göre:
- 4,1 indisinin asıl değeri 1, 4 indisidir (10).
- 4,2 indisinin değeri değişmemiştir (23).
- 4,3 indisinin asıl değeri 3, 4 indisidir (20).
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 44

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
int main()
{
    int dizi[] = {0, 1, 2, 3, 4, 5};
    int* i = dizi + 3;
    int x = ++*i;
    int y = x + *i;
    printf("%d\n", y);
    return 0;
}
```

Yukarıda verilen program hangi çıktıyı üretir?

Şıklar:
A) 4                                    B) 5                                    C) 6                                    D) 7                                    E) 8

Cevap: E 8

Çözüm:
Satırları işletelim:
• I pointer dizinin 3'ünü gösterir( değeri 3).
• Dizinin 3'ünün değeri 1 artar ve 4 olur. x'i 4'e eşitler
• y'yi 4 ve 4'ün toplamına eşitler.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 45

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
void main()
{
    int a = 5, b;
    float f = 25.0, g;
    b = a / 2 + a * 0.2;
    g = a / 2.0 + f / 2;
    printf("b: %d 
 g: %2.2f", b, g);
}
```

Yukarıda verilen program hangi çıktıyı üretir?

Şıklar:
A) b: 1|g: 13.75 | B) b: 2|g: 14.50 | C) b: 3 | g: 15.00 | D) b: 4|g: 15.50 | E) Derleme zamanı hatası oluşur.

Cevap: C b: 3 | g: 15.00

Çözüm:
Satırları işletelim:
• a / 2 ifadesi tamsayı bölmesi yapar ve 2 döner. a * O.2 ifadesinde a float'a dönüşür ve noktalı sayı çarpmasıyla 1.0 döner. b'nin değeri 3 olur.
• a/2.0 noktalı sayı bölmesi yapar ve 2.5 döner. f/2 ifadesi noktalı sayı bölmesi yapar ve 12.5 döner. g'nin değeri 15.00 olur.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 46

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
void main()
{
    int a;
    a = (int)(3.5 + ((float)(5.0 / 2) * 3));
    printf("%d", a);
}
```

Yukarıda verilen program hangi çıktıyı üretir?

Şıklar:
A) 9 
B) 10 
C) 11     
D) 12          
E) Derleme zamanı hatası oluşur.

Cevap: C 11

Çözüm:
5.0 / 2 = 2.5 -> 2.5 * 3 = 7.5 -> 7.5+3.5 = 11.0
11.0 tam sayıya dönüşür ve 11 olur.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 47

## [36 – 50] Sorular için Açıklama
• Soruları C programlama dili çerçevesinde cevaplayınız.
• Derleyici olarak gcc kullanıldığını varsayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

```c
int f(int x)
{
    if (x == 0) return 1;
    else if (x == 1) return 3;
    else
    {
        printf("%d ", f(x - 2) + f(x - 1));
        return f(x - 1) + f(x - 2);
    }
}

void main()
{
    f(4);
}
```

Yukarıda verilen program hangi çıktıyı üretir?

Şıklar:
A) 47 47 17 47 4 | B) 44 47 41 47 4 4 | C) 117 744 33 11 | D) 4 4 4 7 11 7 4 4 4 | E) 1 3 4 7 11 7 4 3 1

Cevap: B 44 47 41 47 4 4

Çözüm:
f()'yi, O<=i<=4 için küçükten büyüğe hesaplayıp çıktılarını yanına yazalım.
- Çıktı yok, f(O) = 1
- Çıktı yok, f(1) = 3
- Çıktı: f(O)+f(1)=4, f(2) = f(1)+f(O) = 4
- Çıktı: f(1)(boş) f(2)(4) f(1)+f(2)=7 f(2)(4) f(1)(boş), f(2)+f(1)=7.
- Çıktı: f(2)(4) f(3)(4 7 4) f(2)+f(3)=11 f(3)(4 7 4) f(2)(4), f(4)=f(3)+f(2)=11
Yani tek satırda aralarında birer boşlukla (gösterim için 3 tane yerleştiriyoruz):
4 47 4 11 47 4 4