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

## [26-30] Sorular için açıklama
x-y kartezyen koordinat düzleminde iki boyutlu çizim yapan bir çizim dili şu şekilde tanımlanıyor. Dilde ekrana çizilebilen iki çeşit şekil bulunmaktadır: (i) merkezi koordinat sisteminin merkezinde 1 birim çapında bir çember, (ii) sol alt köşesi koordinat sisteminin merkezinde, alt kenarı x eksenine paralel 1 birim kenar uzunluğunda bir kare. Ekrana karmaşık şekiller çizebilmeyi mümkün kılmak için koordinat sisteminin taşınmasını ve döndürülmesini sağlayan komutlarda dilde bulunmaktadır.
Koordinat sistemini başlangıç durumuna getirmek için özel bir komut vardır. Aşağıdaki tabloda bu dildeki komutlar ve açıklamaları verilmiştir.
<table><tr><td>Komut</td><td>Açıklama</td></tr><tr><td>Ç</td><td>Merkezi o anki koordinat sisteminin merkezinde ve 1 birim çapında bir çember çiz.</td></tr><tr><td>K</td><td>O anki koordinat sistemine göre sol alt köşesi koordinat sisteminin merkezinde, alt kenarı o anki x eksenine paralel ve 1 birim kenar uzunluğu olan bir kare çiz.</td></tr><tr><td>T(tx, ty)</td><td>x-y koordinat sisteminin o anki merkezini (tx, ty) birim öteye taşı. Yani, o anki merkez (mx, my) ise yeni merkezi (mx + tx, my + ty) yap.</td></tr><tr><td>D(a)</td><td>x-y koordinat sistemini saat yönünün tersinde a derece döndür.</td></tr><tr><td>B</td><td>x-y koordinat sisteminin merkezini (0,0) koordinatı yap ve x-y eksenlerini başlangıç pozisyonuna getir, yani x eksenini yatay ve y eksenini dikey konuma getir.</td></tr></table>
Komut dizisi her zaman soldan sağa doğru çalıştırılan virgül ile ayrılmış komutlar olarak verilir. Örneğin, aşağıdaki dokuz komut içeren komut dizisi hemen altta verilen şekli çizer. K, T(1, 1), D(45), K, T(-2, 0), C, B, D(-45), K
[GÖRSEL]
Takip eden 1-9 numaralı şekiller sorularda referans verilen şekillerdir. Örnek şekil ve diğer şekillerde verilen koordinat sistemi başlangıç koordinatlarını göstermektedir. Şekillerdeki ızgaralar 1 birim arayla çizilmiştir.
[GÖRSEL]

---

T(-2, 1), K, T(2, O), D(180), K, T(1, -1), Ç, K, T(1, -1), K, T(-2, O), D(-135), T(-2, 1), K komut dizisi kaç numaralı şekli çizer?

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

Cevap: B (2)

Çözüm:
Şeklimizi çizelim:
• T(-2, 1)
Konum-Yön: -2, 1 - O
• Kare çizelim: K(-2, 1, O)
• T(2, O) - D(180)
Konum-Yön: O, 1 - 180
• Kare çizelim: K(O, 1, 180)
• T(1, -1)
Konum-Yön: 1, O - 180
• Çember çizelim: Ç(1, O)
• Kare çizelim: K(1, O, 180)
• T(1, -1)
Konum-Yön: 2, -1 - 180
Konum-Yön: 2, -1 - 180
Konum-Yön:-2, O - 45
• Kare çizelim: K(-2, -1, 180)
• T(-2, O), D(-135), T(-2, 1)
Konum-Yön: -2, O - 45
• Kare çizelim: K(-2, O, 45)
En son şekil: Ç(1, O) - K(-2, 1, O) - K(O, 1, 180) - K(1, O, 180) - K(2, -1, 180) - K(-2, O, 45), 2.şekil
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 30

## [26-30] Sorular için açıklama
x-y kartezyen koordinat düzleminde iki boyutlu çizim yapan bir çizim dili şu şekilde tanımlanıyor. Dilde ekrana çizilebilen iki çeşit şekil bulunmaktadır: (i) merkezi koordinat sisteminin merkezinde 1 birim çapında bir çember, (ii) sol alt köşesi koordinat sisteminin merkezinde, alt kenarı x eksenine paralel 1 birim kenar uzunluğunda bir kare. Ekrana karmaşık şekiller çizebilmeyi mümkün kılmak için koordinat sisteminin taşınmasını ve döndürülmesini sağlayan komutlarda dilde bulunmaktadır.
Koordinat sistemini başlangıç durumuna getirmek için özel bir komut vardır. Aşağıdaki tabloda bu dildeki komutlar ve açıklamaları verilmiştir.
<table><tr><td>Komut</td><td>Açıklama</td></tr><tr><td>Ç</td><td>Merkezi o anki koordinat sisteminin merkezinde ve 1 birim çapında bir çember çiz.</td></tr><tr><td>K</td><td>O anki koordinat sistemine göre sol alt köşesi koordinat sisteminin merkezinde, alt kenarı o anki x eksenine paralel ve 1 birim kenar uzunluğu olan bir kare çiz.</td></tr><tr><td>T(tx, ty)</td><td>x-y koordinat sisteminin o anki merkezini (tx, ty) birim öteye taşı. Yani, o anki merkez (mx, my) ise yeni merkezi (mx + tx, my + ty) yap.</td></tr><tr><td>D(a)</td><td>x-y koordinat sistemini saat yönünün tersinde a derece döndür.</td></tr><tr><td>B</td><td>x-y koordinat sisteminin merkezini (0,0) koordinatı yap ve x-y eksenlerini başlangıç pozisyonuna getir, yani x eksenini yatay ve y eksenini dikey konuma getir.</td></tr></table>
Komut dizisi her zaman soldan sağa doğru çalıştırılan virgül ile ayrılmış komutlar olarak verilir. Örneğin, aşağıdaki dokuz komut içeren komut dizisi hemen altta verilen şekli çizer. K, T(1, 1), D(45), K, T(-2, 0), C, B, D(-45), K
[GÖRSEL]
Takip eden 1-9 numaralı şekiller sorularda referans verilen şekillerdir. Örnek şekil ve diğer şekillerde verilen koordinat sistemi başlangıç koordinatlarını göstermektedir. Şekillerdeki ızgaralar 1 birim arayla çizilmiştir.
[GÖRSEL]

---

Aşağıdaki komut dizilerinden hangisi (6) numaralı şekli çizer?

Şıklar:
A) T(-1, O), Ç, D(45), K, T(1, -1), K, T(2, 1), Ç, D(135), K | B) D(90), T(-1, 1), Ç, D(-45), K, T(1, -1), K, T(2, 1) Ç, D(135), K | C) D(90), T(-1, O), Ç, D(45), K, T(1, 1), K, T(2, 1), Ç, D(90), K | D) T(-1, 1), Ç, D(-45), K, T(1, 1), K, T(2, 1) Ç, D(135), K | E) Hiçbiri

Cevap: E Hiçbiri

Çözüm:
6 numaralı şekil için (-1, 1) noktasında Ç(-1, 1), K(-1, 1, 45) ve (K(-1, 1, -90)=K(O, O, 90)) olması gerekir. Aynı zamanda (2, 1) noktasında Ç(2, 1) ve K(2, 1, -135) olması gereklidir.
Şıklara bakalım:
A) Ç(-1, O) içerir. Olamaz.
B) En sondaki kare K(2, 1, 180)'dir fakat K(2, 1, -135) olmalıdır. Gerisi doğrudur. Olamaz.
C) Ç(-1, O) içerir. Olamaz.
D) İlk kare K(-1, 1, -45)'tir fakat K(-1, 1, 45) olmalıdır. Olamaz.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 31

Elemanları tamsayı olan 10 elemanlı bir S kümesi, küçükten büyüğe sıralandığında en küçük eleman 5, en büyük eleman ise 16 olarak bulunmuştur. 7 sayısının bu kümenin içinde olduğu bilindiğine göre belirtilen özelliklere sahip kaç farklı S yazılabilir? [S bir küme olduğundan eleman tekrarı olamaz ve elemanların yazılış sırası önemsizdir.]

Şıklar:
A) 36 | B) 45 | C) 35 | D) 28 | E) 16

Cevap: A 36

Çözüm:
[5,16] aralığındaki 12 sayıdan 10 tane seçilecektir. 5, 7 ve 16'ın seçildiği bilindiğinden bu seçim \(\binom{9}{7} = \frac{9*8}{2} = 9*4 = 36\) farklı şekilde yapılabilir.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 32

### [32-35] Sorular için açıklama
X, Y ve Z aşağıda verildiği gibi tanımlanmış karşılıklı özyineli nesnelerdir. Tanımlardaki a, b, c ve • atomik sembollerdir. X, Y ya da Z ile tanımlanamayan tüm nesneler geçersizdir.
\[X = \begin{cases} a \cdot a & \text{ya da;} \\ a \cdot X' \cdot a & \text{ya da;} \\ b \cdot Y' \cdot b & \text{ya da;} \\ c \cdot Z' \cdot c & \text{ya da;} \end{cases} \quad Y = \begin{cases} b \cdot b & \text{ya da;} \\ X' \cdot a & \text{ya da;} \\ Y' \cdot b & \text{ya da;} \\ Z' \cdot c & \text{ya da;} \end{cases} \quad Z = \begin{cases} c \cdot c & \text{ya da;} \\ a \cdot X' & \text{ya da;} \\ b \cdot Y' & \text{ya da;} \\ c \cdot Z' & \text{ya da;} \end{cases}\]
İfadelerdeki X' nesnesi X, Y' nesnesi Y, ve Z' nesnesi Z cinsinden başka nesnelerdir. Sırasıyla X, Y ve Z tipinden nesneleri girdi olarak alan f, g ve h fonksiyonları aşağıda tanımlanmıştır. Bu fonksiyonlar karşılıklı özyineli fonksiyonlar olup yalnız a, b ve c harflerini içeren kelimeler oluştururlar.
\[f(X) = \begin{cases} aa & \text{eğer } X = a \cdot a \\ aa f(X') & \text{eğer } X = a \cdot X' \cdot a \\ g(Y') bb & \text{eğer } X = b \cdot Y' \cdot b \\ h(Z') c & \text{eğer } X = c \cdot Z' \cdot c \end{cases} \quad g(Y) = \begin{cases} bb & \text{eğer } Y = b \cdot b \\ f(X') a & \text{eğer } Y = X' \cdot a \\ g(Y') b & \text{eğer } Y = Y' \cdot b \\ h(Z') c & \text{eğer } Y = Z' \cdot c \end{cases}\]

---

Hangisi geçersiz bir nesnedir?

Şıklar:
A) \(b \cdot a \cdot a \cdot a \cdot c \cdot b \cdot b\) | B) \(c \cdot c \cdot c \cdot b \cdot b \cdot b \cdot c\) | C) \(c \cdot c \cdot c \cdot b \cdot b\) | D) \(a \cdot c \cdot b \cdot b \cdot b \cdot c\)
E) \(b \cdot c \cdot c \cdot a \cdot c \cdot b \cdot b\)

Cevap: E \(b \cdot c \cdot c \cdot a \cdot c \cdot b \cdot b\)

Çözüm:
Şiklara bakalım:
A) Nesnemize Y nesnesi diyelim.(Diğerleri hızlıca eleniyor) O zaman:
b•a•a•a•c•b•b.Y nesnesi olmadır.
b•a•a•a•c.Y nesnesi olmadır.
b•a•a•a.Z nesnesi olmadır.
a•a•a.Y nesnesi olmadır.
a•a.X nesnesi olmadır. Yani ifademiz Y nesnesidir.

B) Nesnemize X nesnesi diyelim. O zaman:
c•c•c•b•b•b•c.X nesnesi olmadır.
c•c•b•b•b.Z nesnesi olmadır.
b•b•b.Z nesnesi olmadır.
b•b.Y nesnesi olmadır. Yani ifademiz X nesnesidir.

C) Nesnemize Y nesnesi diyelim. O zaman:
c•c•c•b•b.Y nesnesi olmadır.
c•c•c.Y nesnesi olmadır.
c•c.Z nesnesi olmadır. Yani ifademiz Y nesnesidir.
## 
D) Nesnemiz Z nesnesi diyelim. O zaman:
a•c•b•b•b•c.Z nesnesi olmalı.
c•b•b•b•c.X nesnesi olmalı.
b•b•b.Y nesnesi olmalı.
b•b.Y nesnesi olmalı. Yani ifademiz Z nesnesidir.

E) Geçersiz bir nesnedir.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 33

### [32-35] Sorular için açıklama
X, Y ve Z aşağıda verildiği gibi tanımlanmış karşılıklı özyineli nesnelerdir. Tanımlardaki a, b, c ve • atomik sembollerdir. X, Y ya da Z ile tanımlanamayan tüm nesneler geçersizdir.
\[X = \begin{cases} a \cdot a & \text{ya da;} \\ a \cdot X' \cdot a & \text{ya da;} \\ b \cdot Y' \cdot b & \text{ya da;} \\ c \cdot Z' \cdot c & \text{ya da;} \end{cases} \quad Y = \begin{cases} b \cdot b & \text{ya da;} \\ X' \cdot a & \text{ya da;} \\ Y' \cdot b & \text{ya da;} \\ Z' \cdot c & \text{ya da;} \end{cases} \quad Z = \begin{cases} c \cdot c & \text{ya da;} \\ a \cdot X' & \text{ya da;} \\ b \cdot Y' & \text{ya da;} \\ c \cdot Z' & \text{ya da;} \end{cases}\]
İfadelerdeki X' nesnesi X, Y' nesnesi Y, ve Z' nesnesi Z cinsinden başka nesnelerdir. Sırasıyla X, Y ve Z tipinden nesneleri girdi olarak alan f, g ve h fonksiyonları aşağıda tanımlanmıştır. Bu fonksiyonlar karşılıklı özyineli fonksiyonlar olup yalnız a, b ve c harflerini içeren kelimeler oluştururlar.
\[f(X) = \begin{cases} aa & \text{eğer } X = a \cdot a \\ aa f(X') & \text{eğer } X = a \cdot X' \cdot a \\ g(Y') bb & \text{eğer } X = b \cdot Y' \cdot b \\ h(Z') c & \text{eğer } X = c \cdot Z' \cdot c \end{cases} \quad g(Y) = \begin{cases} bb & \text{eğer } Y = b \cdot b \\ f(X') a & \text{eğer } Y = X' \cdot a \\ g(Y') b & \text{eğer } Y = Y' \cdot b \\ h(Z') c & \text{eğer } Y = Z' \cdot c \end{cases}\]

---

f (b • c • c • c • c • a • b) işleminin sonucu nedir?

Şıklar:
A) cccabb | B) cccabb | C) cacbbb | D) ccaabb | E) Hiçbiri

Cevap: E Hiçbiri

Çözüm:
## Şiklara bakalım:
A) Nesnemize Y nesnesi diyelim.(Diğerleri hızlıca eleniyor) O zaman:
b • a • a • a • c • b • b, Y nesnesi olmadır.
b • a • a • a • c, Y nesnesi olmadır.
b • a • a • a, Z nesnesi olmadır.
a • a • a, Y nesnesi olmadır.
a • a, X nesnesi olmadır. Yani ifademiz Y nesnesidir.
B) Nesnemize X nesnesi diyelim. O zaman:
c • c • c • b • b • b • c, X nesnesi olmadır.
c • c • b • b • b, Z nesnesi olmadır.
b • b • b, Z nesnesi olmadır.

text<|/ref|>
[[137,
b • b, Y nesnesi olmadır. Yani ifademiz X nesnesidir.
C) Nesnemize Y nesnesi diyelim. O zaman:
c • c • c • b • b, Y nesnesi olmadır.
c • c • c, Y nesnesi olmadır.
c • c, Z nesnesi olmadır. Yani ifademiz Y nesnesidir.
## D) Nesnemiz Z nesnesi diyelim. O zaman:
a • c • b • b • b • c, Z nesnesi olmalı.
c • b • b • b • c, X nesnesi olmalı.
b • b • b, Y nesnesi olmalı.
b • b, Y nesnesi olmalı. Yani ifademiz Z nesnesidir.
## E) Geçersiz bir nesnedir.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 34

### [32-35] Sorular için açıklama
X, Y ve Z aşağıda verildiği gibi tanımlanmış karşılıklı özyineli nesnelerdir. Tanımlardaki a, b, c ve • atomik sembollerdir. X, Y ya da Z ile tanımlanamayan tüm nesneler geçersizdir.
\[X = \begin{cases} a \cdot a & \text{ya da;} \\ a \cdot X' \cdot a & \text{ya da;} \\ b \cdot Y' \cdot b & \text{ya da;} \\ c \cdot Z' \cdot c & \text{ya da;} \end{cases} \quad Y = \begin{cases} b \cdot b & \text{ya da;} \\ X' \cdot a & \text{ya da;} \\ Y' \cdot b & \text{ya da;} \\ Z' \cdot c & \text{ya da;} \end{cases} \quad Z = \begin{cases} c \cdot c & \text{ya da;} \\ a \cdot X' & \text{ya da;} \\ b \cdot Y' & \text{ya da;} \\ c \cdot Z' & \text{ya da;} \end{cases}\]
İfadelerdeki X' nesnesi X, Y' nesnesi Y, ve Z' nesnesi Z cinsinden başka nesnelerdir. Sırasıyla X, Y ve Z tipinden nesneleri girdi olarak alan f, g ve h fonksiyonları aşağıda tanımlanmıştır. Bu fonksiyonlar karşılıklı özyineli fonksiyonlar olup yalnız a, b ve c harflerini içeren kelimeler oluştururlar.
\[f(X) = \begin{cases} aa & \text{eğer } X = a \cdot a \\ aa f(X') & \text{eğer } X = a \cdot X' \cdot a \\ g(Y') bb & \text{eğer } X = b \cdot Y' \cdot b \\ h(Z') c & \text{eğer } X = c \cdot Z' \cdot c \end{cases} \quad g(Y) = \begin{cases} bb & \text{eğer } Y = b \cdot b \\ f(X') a & \text{eğer } Y = X' \cdot a \\ g(Y') b & \text{eğer } Y = Y' \cdot b \\ h(Z') c & \text{eğer } Y = Z' \cdot c \end{cases}\]

---

g(a • c • c • c • c • a • a) işleminin sonucu nedir?

Şıklar:
A) cccacaaa | B) accacbb | C) ccccaaa | D) aacccca | E) Hiçbiri

Cevap: D aacccca

Çözüm:
İfadeyi sadeleştirelim:
• g(a•c•c•c•c•a•a)
• f(a•c•c•c•c•a)a
• aa f(c•c•c•c•c)a
• aa h(c•c•c)ca
• aa c(c•c)ca
• aa cccca → aacccca
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 35

### [32-35] Sorular için açıklama
X, Y ve Z aşağıda verildiği gibi tanımlanmış karşılıklı özyineli nesnelerdir. Tanımlardaki a, b, c ve • atomik sembollerdir. X, Y ya da Z ile tanımlanamayan tüm nesneler geçersizdir.
\[X = \begin{cases} a \cdot a & \text{ya da;} \\ a \cdot X' \cdot a & \text{ya da;} \\ b \cdot Y' \cdot b & \text{ya da;} \\ c \cdot Z' \cdot c & \text{ya da;} \end{cases} \quad Y = \begin{cases} b \cdot b & \text{ya da;} \\ X' \cdot a & \text{ya da;} \\ Y' \cdot b & \text{ya da;} \\ Z' \cdot c & \text{ya da;} \end{cases} \quad Z = \begin{cases} c \cdot c & \text{ya da;} \\ a \cdot X' & \text{ya da;} \\ b \cdot Y' & \text{ya da;} \\ c \cdot Z' & \text{ya da;} \end{cases}\]
İfadelerdeki X' nesnesi X, Y' nesnesi Y, ve Z' nesnesi Z cinsinden başka nesnelerdir. Sırasıyla X, Y ve Z tipinden nesneleri girdi olarak alan f, g ve h fonksiyonları aşağıda tanımlanmıştır. Bu fonksiyonlar karşılıklı özyineli fonksiyonlar olup yalnız a, b ve c harflerini içeren kelimeler oluştururlar.
\[f(X) = \begin{cases} aa & \text{eğer } X = a \cdot a \\ aa f(X') & \text{eğer } X = a \cdot X' \cdot a \\ g(Y') bb & \text{eğer } X = b \cdot Y' \cdot b \\ h(Z') c & \text{eğer } X = c \cdot Z' \cdot c \end{cases} \quad g(Y) = \begin{cases} bb & \text{eğer } Y = b \cdot b \\ f(X') a & \text{eğer } Y = X' \cdot a \\ g(Y') b & \text{eğer } Y = Y' \cdot b \\ h(Z') c & \text{eğer } Y = Z' \cdot c \end{cases}\]

---

h(a • b • b • b • b • c • b) işleminin sonucu nedir?

Şıklar:
A) abbbcbb | B) abbcbb | C) abbcbb | D) abccbb | E) Hiçbiri

Cevap: A abbbcbb

Çözüm:
İfadeyi sadeleştirelim:
• h(a•b•b•b•b•c•b)
• af(b•b•b•b•c•b)
• ag(b•b•b•c)bb
• ah(b•b•b)cbb
• ah(b•b•b)cbb

text<|/ref|>
[[77,
• abh(b•b)cbb
abbbcbb → abbbcbb
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 36

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---
int a[3][4]={{1, 2, 3, 3}, {4, 5, 6, 6}, {7, 8, 9, 9};
short b[4][2]={{1, 1}, {1, 0}, {0, 0}, {0, 1}}, i;
void main() {
for (i=0; 2*b[i][1]+b[i][0]; i++)
printf("%d %d ", a[b[i][0]][i], a[i+1][i]);
}

Yukarıda verilen program çıktı olarak ne üretir?

Şıklar:
A) 54 | B) 4458 | C) 5478 | D) Çalışma zamanı hatası verir | E) Derleme zamanı hatası verir

Cevap: B 4458

Çözüm:
Programı inceleyelim:
- İlk döngü i=0 ve i=1 için çıktı basar ve i=2 için 2*b[i][i+1]+b[i][0] = 2*0+0 = 0 olur ve çıkar.
- i=0 için, a[b[i][0]] = a[i][0] = 4, a[i+1][i] = a[i][0] = 4 olur.
- i=1 için, a[b[i][0]] = a[i][1] = 5, a[i+1][i] = a[2][i] = 8 olur.
- O zaman çıktıya 4 4 5 8 basılır.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 37

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

int a[3][4]={{1, 2, 3, 3}, {4, 5, 6, 6}, {7, 8, 9, 9}};
short b[4][2]={{1, 1}, {1, 0}, {0, 0}, {0, 1}}, i;
void main() {
for (i=0; 2++; i++)
printf("%d %d ", a[b[i][0]][i], a[i+1][i]);
}

Yukarıda verilen program çıktı olarak ne üretir?

Şıklar:
A) 54 | B) 4458 | C) 5478 | D) Çalışma zamanı hatası verir | E) Derleme zamanın hatası verir

Cevap: E Derleme zamanın hatası verir

Çözüm:
2 const int (sabit tamsayı) türündedir ve (++) operatorü ile artırılamaz.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 38

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---


int x=1, y=2, z=3, t=4;
void main() {
x = 3 + (t*=y+=z-=t+2)-7 + -y;
printf("%d %d %d %d", x, y, z, t);
}

Yukarıda verilen program çıktı olarak ne üretir?

Şıklar:
A) -7 2 3 4 | B) -7 -2 3 4 | C) -7 -1 -3 -4 | D) -7 -1 3 4 | E) Derleme zamanı hatası verir

Cevap: C -7 -1 -3 -4

Çözüm:
İşlem sırasına göre işlemleri yapalım:
- \(x = 3 + (t* = y + z = t + 2) - 7 + -y\) ifadesini işlem sırasına göre sadeleştirirsek:
- \(x = 3 + (t* = y + z = 4 + 2) - 7 + -y\), \(x=1, y=2, z=3, t=4\)
- \(x = 3 + (t* = y + z = -3) - 7 + -y\), \(x=1, y=2, z=-3, t=4\)
- \(x = 3 + (t* = -1) - 7 + -y\), \(x=1, y=-1, z=-3, t=4\)
- \(x = 3 + (-4) - 7 + -y\), \(x=1, y=-1, z=-4, t=-4\)
- \(x = 3 + (-4) - 7 + -(-1) = -7\), \(x=1, y=-1, z=-3, t=-4\)
en son \(x=-7, y=-1, z=-3, t=-4\) olur ve bu değerler çıktıya yazılır.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 39

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

int i=2;
void main() {
do {
printf("%d ", i);
--i;
} while (printf("%d ", i));
}


Yukarıda verilen program çıktı olarak ne üretir?

Şıklar:
A) Sonsuz döngüde sürekli bir şeyler yazar
B) 2 1 0
C) 2 1 1 0
D) 2 1 1
E) Derleme zamanı hatası verir

Cevap: A Sonsuz döngüde sürekli bir şeyler yazar

Çözüm:
printf() fonksiyonu yazdığı karakter sayısını döner. Yani burada her zaman 1 den büyük bir değer döner ve bu durum 
sonsuz döngüde sürekli bir şeyler yazmasına sebep olur.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 40

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

int x=15;
int fun(int y) {
y=y+x; x=y-x; y=y-x;
return y;
}
void main() {
printf("%d", (fun(x+x)+30)+x);
}

Yukarıda verilen program çıktı olarak ne üretir?

Şıklar:
A) 60 | B) 45 | C) 90 | D) 75 | E) Derleme zamanı hatası verir

Cevap: D 75

Çözüm:
İşlemleri yapalım:
• işlemler soldan sağa yapılır. Yani ilk önce f(x+x) = f(15+15) fonksiyonu çağırılır.
• Fonksiyonda en başta x=15, y=30
• y = y+x; x = 15, y = 45 olur.
• x = y-x; x = 30, y = 45 olur.
• y = y-x; x = 30, y = 15 olur.
• En son y=15 döner ve printf("%d", (15+30)+x); ifadesi sona kalır.
• x = 30 olduğundan ekrana (15+30)+30 = 75 yazılır.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 41

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

int arr[]={1, -3, 0, 5, 4, 7, 8, 9, -2, 8};
int fun (int i, int j, int *ip) {
    if (j-i <=0) return 0;
    else
        return fun(i+1, j-1, ip+1) + *ip;
}
void main() {
    printf("F1:%d, F2:%d", fun(0, 9, arr), fun(1, 7, arr+1));
}

Yukarıda verilen program çıktı olarak ne üretir?

Şıklar:
A) F1:7, F2:2 | B) F1:2, F2:7 | C) F1:7, F2:7 | D) F1:2, F2:2 | E) Hiçbiri

Cevap: A F1:7, F2:2

Çözüm:
Fonksiyonumuz bir aralık ve bir göstercil(pounter) aldığında oradan başlayıp aralık kapanana kadar göstercisi ilerler ver fonksiyon göstercinin geçtiği yerlerin değerlerinin toplamını döner. Buna göre 2 kere çağırılan fonksiyonun ne döndüğüne bakalım:
- fun(O, 9, arr) çağırıldığında fun(5, 4, arr+5)'e kadar ilerler ve aradaki, [arr, arr+5) aralığındaki, değerlerin toplamını döner. Bu değerler sırasıyla 1, -3, O, 5, 4'tür. Yani 1 + -3 + O + 5 + 4 = 7 döner.
- fun(l, 7, arr+1) çağırıldığında fun(4, 4, arr+4)'e kadar ilerler ve aradaki, [arr+1, arr+4) aralığındaki, değerlerin toplamını döNER. Bu değerler sırasıyla -3, O, 5'tür.
Yani -3 + O + 5 = 2 döner.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 42

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

char *f1="%d ";
char *f2="%d %d ";
char *f3="%d %d %d ";
int x=1, y=2, z=3;
void main() {
    printf(f1, x, y);
    printf(f2, x, y);
    printf(f2, x, y, z);
    printf(f3, x, y, z);
}

Yukarıda verilen program çıktı olarak ne üretir?

Şıklar:
A) 1212123123 | B) 112212123 | C) 11212123 | D) Çalışma zamanı hatası verir | E) Derleme zamanı hatası verir

Cevap: C 11212123

Çözüm:
printf fonksiyonuna eksik parametre göndermek derleme hatasına yol açarken fazla parametre göndermekten bir şey olmaz. O zaman ilk olarak f1 ile "1" yazar. Sonra f2 ile "12" ve tekrardan f2 ile "12" yazar. En son ise f3 ile "123" yazar. Çıktı en son 11212123 olur.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 43

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

int fun(int y) {
    return y<5 ? y: fun(y/10)+y%10;
}
void main() {
    printf("%d", fun(3806));
}

Yukarıda verilen program çıktı olarak ne üretir?

Şıklar:
A) 12 | B) 17 | C) 22 | D) 3806 | E) Sonsuz döngüye gireceğinden sonuç üretmez

Cevap: B 17

Çözüm:
?: if yapısıyla benzerdir. (x? y:z) şeklinde kullanılır. Eğer x doğru ise y'yi yanlış ise z'yi döner. fun fonksiyonu her adımda son basamağı silip onu toplama eklediğinden, sayının rakamlarının toplamını döner. O zaman çıktıya  \( 3 + 8 + 0 + 6 = 17 \)  yazdırılır.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 44

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

int *ipA, j;
void main() {
    ipA = (int *) malloc(sizeof(int)*5);
    for (j=0; j<5; j++) ipA[(j+1)%5]=j+1;
    for (j=0; j<5; j++)
        printf("%d ", ipA[j]+j);
    free(ipA);
}

Yukarıda verilen program çıktı olarak ne üretir?

Şıklar:
A) 52468 | B) 51234 | C) 246810 | D) 12345 | E) Hiçbiri

Cevap: A 52468

Çözüm:
İpA göstéricisi, malloc fonksiyonuyla alınmış 5 tane tamsayılık yerin başını gösterir. Sonrasında bu 5 yerden i,yer(i ∈ [1, 4]) i değerine sahip olurken (iP[A[i]] = i) O, yer 5 değerine sahip olur (iP[A[O]] = 5). En son iP[A][j]+j değerleri yazdırılır ki bu değer sırasıyla 5+O, 1+1, 2+2, 3+3, 4+4'dür.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 45

## [36-50] Sorular için açıklama
• Soruları standart C (ANSI C) programlama dili çerçevesinde cevaplayınız.
• Gerekli tüm başlık (header) dosyalarının verilen programa dahil edildiğini varsayınız.

---

**Öğretmenleri Ali, Veli ve Fatma'dan O'dan 110'a kadar olan tek sayıların toplamını yazdıran program yazmalarını istemiştir. Öğrencilerin yazdıkları program aşağıda verilmiştir.**
<table><tr><td>Ali</td><td>Veli</td><td>Fatma</td></tr><tr><td>void Topla() {<br/>printf("%d", 30);<br/>printf("%d", 2);<br/>printf("%d", 5); }</td><td>void Topla() {<br/>int i, sum;<br/>for (i=0, sum=0; i&lt;110; i++)<br/>sum += i%2 ? i: 0;<br/>printf("%d", sum); }</td><td>void Topla() {<br/>int i=1, sum=0;<br/>while (i&lt;122) {<br/>sum +=25; i++;<br/>}</td></tr></table>
**Buna göre kimin programı doğrudur?**

Şıklar:
A) Yalnız Veli | B) Yalnız Fatma | C) Yalnız Ali ve Veli | D) Yalnız Veli ve Fatma | E) Ali, Veli ve Fatma

Cevap: E Ali, Veli ve Fatma

Çözüm:
1'den 110'a kadar olan tek sayıların toplamı = 1 + 3 + ... + 109 = 55+2(1+2+...+54) = 55+54*55 = 55*55 = 3025 olur. Programlara bakarsak:
- Ali'nin programı 3025 yazdığından doğrudur.
- Veli'nin programı O ile 109 arasındaki her tek sayıyı toplar ve doğru cevabı bulur.
- Fatma'nın programı ise çıktıya 25*121=3025 basar. Yani bu program da doğrudur.