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

[36-50] Sorular İçin Açıklama
- Soruları C programlama dili çerçevesinde cevaplayınız.
- Derleyici olarak gec 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 arr[] = {1, 2, 3, 4, 5};
int *ptr = arr;
int sum = 0;
for (int i = 0; i < 3; i++) {
sum += *(ptr + *(ptr + i));
}
printf("%d\n", sum);
return 0;
}
```
Yukarıdaki kodun ekran çıktısı nedir?

Şıklar:
A) 6 | B) 7 | C) 8 | D) 9 | E) Hiçbiri

Cevap: D 9

Çözüm:
Kodu adım adım inceleyelim:
1. int arr[] = {1, 2, 3, 4, 5}; Bir tamsayı dizisi arr oluşturulur ve {1, 2, 3, 4, 5} değerleri ile başlatılır.
2. int *ptr = arr; Bir tamsayı göstericisi ptr oluşturulur ve dizinin ilk elemanının adresini (yani arr[0]'ın adresini) işaret eder. Bu durumda *ptr değeri 1'dir.
3. int sum = 0; Bir tamsayı değişkeni sum oluşturulur ve başlangıç değeri 0 olarak atanır.
4. for (int i = 0; i < 3; i++) { ... }: Bu döngü 3 kez çalışacaktır (i 0, 1, ve 2 değerlerini alacaktır).
5. sum += *(ptr + *(ptr + i));: Döngünün her adımında sum değişkenine bir değer eklenecektir. Bu değeri inceleyelim:
o *(ptr + i): Bu ifade, ptr'ın işaret ettiği adresten i tamsayı kadar ileri giderek o adresteki değeri alır.
■ i = 0 için: *(ptr + 0) eşittir *ptr, yani arr[0]'ın değeri olan 1.
■ i = 1 için: *(ptr + 1) eşittir arr[1]'ın değeri olan 2.
■ i = 2 için: * (ptr + 2) eşittir arr[2]'in değeri olan 3.
o * (ptr + * (ptr + i)): Bu ifade ise daha karmaşıktır. Önce * (ptr + i) hesaplanır (yukarıda bulduk). Sonra bu değer, ptr'ın işaret ettiği adresten o değer kadar ileri gidilerek o adresteki değer alınır.
■ i = 0 için: * (ptr + * (ptr + 0)) eşittir * (ptr + 1), yani arr[1]'in değeri olan 2. sum şimdi 0 + 2 = 2 olur.
■ i = 1 için: * (ptr + * (ptr + 1)) eşittir * (ptr + 2), yani arr[2]'in değeri olan 3. sum şimdi 2 + 3 = 5 olur.
■ i = 2 için: * (ptr + * (ptr + 2)) eşittir * (ptr + 3), yani arr[3]'in değeri olan 4. sum şimdi 5 + 4 = 9 olur.
6. **printf(" %d\n", sum)**: Döngü tamamlandıktan sonra sum değişkeninin değeri ekrana yazdırılır.
Bu adımlara göre, sum değişkeninin son değeri 9 olacaktır.
Dolayısıyla kodun ekran çıktısı: 9
Bilgisayar Olimpiyatı 2025, 1. Aşama, Soru 48

[36-50] Sorular İçin Açıklama
- Soruları C programlama dili çerçevesinde cevaplayınız.
- Derleyici olarak gec 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
typedef struct Nokta {
int x;
int y;
} N;
int main() {
N nokta[] = {{10, 20}, {30, 40}, {50, 60}};
N *ptr1 = nokta + 1;
N *ptr2 = nokta + 2;
int val = ...;
printf("%d\n", val);
return 0;
}
```
Yukarıdaki kod parçasında, .... ile gösterilen yere hangi ifade getirilmelidir ki kodun ekran çıktısı 85 olsun?

Şıklar:
A) ptr1->x + ptr2->y | B) ptr1->y + ptr2->x | C) ptr1->y + ptr2->y - 15 | D) ptr1->x + ptr2->x + 25 | E) ptr1->x + ptr1->y + ptr2->x - ptr2->y + 5

Cevap: C ptr1->y + ptr2->y - 15

Çözüm:
struct Point points[] = {{10, 20}, {30, 40}, {50, 60}}, Point struct'larından oluşan bir dizi points oluşturulur ve başlatılır.
struct Point *ptr1 = points + 1;
ptr1, points dizisinin ikinci elemanını işaret eder, yani {30, 40}.
struct Point *ptr2 = points + 2;
ptr2, points dizisinin üçüncü elemanını işaret eder, yani {50, 60}.
int val = ptr1->y + ptr2->y - 15;
ptr1->y: ptr1'in işaret ettiği struct'ın y değerini verir, yani 40.
ptr2->y: ptr2'in işaret ettiği struct'ın y değerini verir, yanı 60.
ptr1->y + ptr2->y - 15: 40 + 60 - 15 = 85.
val = 85
printf("%d\n", val);
val'ın değeri ekrana yazdırılır, yani 85.
Bilgisayar Olimpiyatı 2025, 1. Aşama, Soru 49

[36-50] Sorular İçin Açıklama
- Soruları C programlama dili çerçevesinde cevaplayınız.
- Derleyici olarak gec 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() {  char str1[] = "Bilgisayar";  char str2[] = "Olimpiyatlari";  char str3[40];  char *ptr = str3;  for (int i = 0; i < 9; i += 2)  *ptr++ = str1[i];  for (int i = 7; i >= 0; i--)  if (i % 2 == 0)  *ptr++ = str2[i];  *ptr = '\0';  printf("%s\n", str3);  return 0;  }
```
Aşağıdaki kod parçasının ekran çıktısı nedir?

Şıklar:
A) BliaaypiO 
B) Bliaaypiatr 
C) BliaayipO 
D) BlgaalpiO 
E) BliytaaOlpia

Cevap: A BliaaypiO

Çözüm:
char str1[] = "Bilgisayar"; str1 dizisi "Bilgisayar" string'i ile başlatılır.
char str2[] = "Olimpiyatlari"; str2 dizisi "Olimpiyatlari" string'i ile başlatılır.
char str3[40]; str3 dizisi 40 karakterlik boş bir dizi olarak oluşturulur. char *ptr = str3; ptr işaretçisi str3 dizisinin başlangıç adresine atanır.
İlk döngü:
Bu döngü, str1 dizisinin çift indeksli karakterlerini str3 dizisine kopyalar.
i = 0: str3[0] = 'B'
i = 2: str3[1] = 'I'
i = 4: str3[2] = 'i'
i = 6: str3[3] = 'a'
i = 8: str3[4] = 'a'
str3 dizisi "Bliaa" olur.
İkinci döngü:
Bu döngü, str2 dizisinin çift indeksli karakterlerini tersten str3 dizisine kopyalar.
i = 6: str3[5] = 'y'
i = 4: str3[6] = 'p'
i = 2: str3[7] = 'i'
i = 0: str3[8] = 'O'
str3 dizisi "BliaaypiO" olur.
*ptr = '\0';
str3 dizisinin sonuna null karakteri eklenir. Bu, dizinin bir string olarak doğru şekilde sonlandırılmasını sağlar.
printf("%s\n", str3);
str3 dizisi ekrana yazdırılır.
Bilgisayar Olimpiyatı 2025, 1. Aşama, Soru 50

[36-50] Sorular İçin Açıklama
- Soruları C programlama dili çerçevesinde cevaplayınız.
- Derleyici olarak gec 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 matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int *ptr = &matrix[0][0];
int sum = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if ((i + j) % 2 == 0)
sum += *(ptr + i * 3 + j);
else
sum -= *(ptr + i * 3 + j);
}
}
printf("%d", sum);
return 0;
}
```
Yukarıdaki kodun ekran çıktısı ne olur?

Şıklar:
A) -5 | B) 0 | C) 5 | D) 10 | E) 15

Cevap: C 5

Çözüm:
matrix[3][3] dizisi şu şekilde tanımlanmıştır:
1 2 3
4 5 6
7 8 9
ptr, dizinin başlangıç adresini (matrix[0][0] = 1) gösterir.
i ve j nested loop'ları, her bir dizi elemanını gezer.
(i + j) % 2 == 0 koşulu:
Çift toplamlı indekslerde (i+j çift ise) elemanı sum'a ekler.
Tek toplamlı indekslerde çıkarır.
Hesaplama Tablosu:
<table><tr><td>i</td><td>j</td><td>i+j</td><td>matrix[i][j]</td><td>İşlem</td><td>sum Değişimi</td></tr><tr><td>0</td><td>0</td><td>0</td><td>1</td><td>sum += 1</td><td>0 + 1 = 1</td></tr><tr><td>0</td><td>1</td><td>1</td><td>2</td><td>sum -= 2</td><td>1 - 2 = -1</td></tr><tr><td>0</td><td>2</td><td>2</td><td>3</td><td>sum += 3</td><td>-1 + 3 = 2</td></tr><tr><td>1</td><td>0</td><td>1</td><td>4</td><td>sum -= 4</td><td>2 - 4 = -2</td></tr><tr><td>1</td><td>1</td><td>2</td><td>5</td><td>sum += 5</td><td>-2 + 5 = 3</td></tr><tr><td>1</td><td>2</td><td>3</td><td>6</td><td>sum -= 6</td><td>3 - 6 = -3</td></tr><tr><td>2</td><td>0</td><td>2</td><td>7</td><td>sum += 7</td><td>-3 + 7 = 4</td></tr><tr><td>2</td><td>1</td><td>3</td><td>8</td><td>sum -= 8</td><td>4 - 8 = -4</td></tr><tr><td>2</td><td>2</td><td>4</td><td>9</td><td>sum += 9</td><td>-4 + 9 = 5</td></tr></table>
Sonuç:
sum'nın final değeri 5 olur.
Ortaokul Bilgisayar Olimpiyatı 2019, 1. Aşama, Soru 15

Mehmet ve Ayşe’nin yaşları toplamı 30’dur. Ayşe ve Kenan’ın yaşları toplamı 24’tür. Mehmet ve 
Kenan’ın yaşları toplamı da 28 olduğuna göre Kenan kaç yaşındadır?

Şıklar:
A) 11 
B) 12 
C) 13 
D) 15 
E) 17

Cevap: A 11

Çözüm:
İlk iki verilenden Mehmet ve Kenan’ın yaşları farkının 6 olduğunu buluruz. Yaşları toplamı da 28 olduğuna 
göre Mehmet’in yaşı (6+28)/2=17 olur. Buna göre Kenan da 28-17=11 yaşında olur.
Ortaokul Bilgisayar Olimpiyatı 2019, 1. Aşama, Soru 28

[21-30 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.

---

Aşağıdaki programın 1’den 100’e kadar olan sayıların (1 ve 100 dahil) karelerinin toplamını çıktı olarak 
vermesi için boşluk bırakılan yere aşağıdakilerden hangisi gelmelidir? 
```c
int i = 0; 
int toplam = 0; 
for (i=0;i<100;i++) 
toplam =  ____________________; 
printf("%d\n",toplam);
```

Şıklar:
A) i*i 
B) toplam + i*i 
C) toplam + (i+1)*(i+1)  
D) toplam + i 
E) 100 * 100

Cevap: C toplam + (i+1)*(i+1)

Çözüm:
1’den 100’e kadar olan sayıları toplayabilmek için her adımda toplam değerine sayıların kareleri eklenmelidir. 
Döngü değişkeni 0 ile 99 değerleri arasında değerler almakta ve 100 değerinde döngüyü çalıştırmadan 
döngüden çıktığı için döngü değişkeninin bir fazlası kendisi ile çarpılıp toplam değerine eklenerek soruda 
istenilen sağlanabilir.
Ortaokul Bilgisayar Olimpiyatı 2020, 1. Aşama, Soru 18

[18-20 soruları için açıklama]
100 adet öğrenci mezuniyet resmi için, her öğrencinin sırası 1 ile 100 arasında bir tamsayı olmak üzere, sıraya dizilmiştir. Çekilecek fotoğrafın güzel olabilmesi için belli düzenlemelerin yapılması gerekmektedir. Öğrenciler bu düzenlemeler için gereken bilgileri kolaylık sağlaması için ezberlemiştir. Her öğrenci, 2'nin her doğal sayı kuvveti a için, kendisinden başlayan ve a uzunluğundaki aralıktaki en uzun öğrencinin boyunu ve aralıktaki toplam boy uzunluğunu ezberlemiştir.
Örnek: 40. sıradaki öğrenci [40, 40], [40, 41], [40, 43], [40, 47], [40, 55], [40, 71] aralıklarındaki en uzun 
öğrencinin boyunu ve bu aralıklardaki toplam boy uzunluklarını ezberlemiştir.

---

[37, 73] aralığındaki en uzun boylu öğrencinin boyunu öğrenmek için en az kaç farklı öğrenciye danışılması 
gerekir?

Şıklar:
A) 1 
B) 2  
C) 3 
D) 4 
E) 5

Cevap: B 2

Çözüm:
Herhangi bir [x, y] aralığı için, bu aralığın uzunluğu olan y – x + 1, 2’nin bir doğal sayı kuvveti ise 
sadece x. sıradaki öğrenciye sormak yeterlidir çünkü x. öğrenci bu aralıktaki en uzun öğrencinin 
boyunu ezberlemiştir. Aksi taktirde, [x, y] aralığını kaplayan ve sadece bu aralıktaki öğrencilerden 
oluşan 2’nin bir doğal sayı kuvveti uzunluğunda iki aralık bulabiliriz. Daha açık olmak gerekirse a 
sayısı y – x + 1’den küçük 2’nin en büyük doğal sayı kuvveti olmak üzere [x, x + a - 1] ve [y – a  + 1 ,y] 
aralıkları istenen şartları sağlamaktadır. Bize sorulan [37, 73] aralığının uzunluğu 37 olduğu için, yani 
2’nin bir kuvveti olmadığı için, en az 2 öğrenciye sormamız gerekmektedir.
Ortaokul Bilgisayar Olimpiyatı 2021, 1. Aşama, Soru 15

Bir yolcu A şehrinden B şehrine gidip dönmek ve bunu yaparken hem gidiş hem de dönüşte C şehrine 
uğramak istiyor. Ancak yolcumuz giderken kullandığı A-B arası yolun birebir aynısını dönüşte 
kullanmayı istemiyor. A şehrinden C şehrine 4, B şehrinden C şehrine de 3 yol varsa, yolcumuz A 
şehrinden B şehrine gidip dönmek için kaç farklı yol takip edebilir?

Şıklar:
A) 144 
B) 132 
C) 64 
D) 27 
E) 24

Cevap: B 132

Çözüm:
Yolcu A şehrinden C şehrine 4 C’den B’ye de 3 farklı yoldan gidebilir. Bu durumda A-B arası 12 farklı yol kullanılarak gerçekleştirilebilir. Dönüşte de bu yollardan biri kullanılmayacağına göre 11 farklı seçenek olacaktır. 12*11=132 doğru sonuç olacaktır.
Ortaokul Bilgisayar Olimpiyatı 2021, 1. Aşama, Soru 20

[19-20 soruları için açıklama]
 1
4  2
 3
Ayşe şekildeki pozisyonlara sahip dairesel bir şekilde yerleştirilmiş sayılardan oluşan ve kuralları aşağıda verilen yeni bir işlem makinesi dizayn ediyor.
1. A tuşuna basıldığında sayılar dairesel bir şekilde saat yönünde bir adım olacak şekilde dönüyorlar
2. B tuşuna basıldığında karşılıklı sayılar yer değiştiriyor
3. C tuşuna basıldığında 1. pozisyon ile 2. pozisyon ve 3. pozisyon ile 4. pozisyondaki sayılar yer değiştiriyor
4. D tuşuna basıldığında 1. pozisyonda en küçük, 4. pozisyonda en büyük sayı olacak şekilde sıralama işlemi yapıyor. Yani 1. pozisyon < 2. pozisyon < 3. pozisyon < 4. pozisyon olacaktır.

---

Bir önceki soruda verilen başlangıç durumuna göre aşağıdakilerden hangisine erişilemez?

Şıklar:
A)
 5
6 3
 2
B)
 6
3 5
 2
C)
 2
6 3
 5
D)
 3
5 2
 6
E)
 2
3 6
 5

Cevap: B 6
3 5
 2

Çözüm:
Bir önceki soruda verilen açıklama doğrultusunda farklı bir sekans içeren B şıkkına verilen işlem kümesiyle 
erişilemez.
Ortaokul Bilgisayar Olimpiyatı 2022, 1. Aşama, Soru 5

2’lik taban 1 ve 0’lardan oluşan ve her bir basamağın 2’nin üssü olacak şekilde ifade edildiği bir sayı gösterimidir. Örneğin 10’luk tabandaki 9 sayısının 2’lik tabandaki karşılığı (1001) olacaktır. 2’lik tabanda rastgele üretilen 7 haneli bir sayının tek olma olasılığı nedir?

Şıklar:
A) 1/2
B) 1/8
C) 1/16
D) 1/32
E) 1/64

Cevap: A 1/2

Çözüm:
Sayının tek veya çift olmasını etkileyen en sağdaki bit olacaktır. Tek olabilmesi için en sağdaki bitin 1 olması gereklidir. Önceki bitlerin değeri 2^6 farklı şekilde doldurulabilir, toplam kümemiz de 2^7 farklı sayı içerecektir. Bu durumda doğru cevap 1/2 olmalıdır.
Ortaokul Bilgisayar Olimpiyatı 2022, 1. Aşama, Soru 16

[13-17 soruları için açıklama]
Üç çocuk haftasonu tatilinde kısaca M, S, T ve F olarak isimlendirdiğimiz aşağıdaki dört aktiviteden birini beraberce gerçekleştireceklerdir.
- M: Müzeye gitmek
- S: Sinemaya gitmek
- T: Tiyatroya gitmek
- F: Futbol maçına gitmek
Ancak çocukların hangi aktiviteyi yapmak istediklerine ilişkin farklı tercihleri vardır. Birinci çocuğun birinci tercihi S, ikinci tercihi T, üçüncü tercihi F ve son tercihi de M'dir. Birinci çocuğun tercihlerini şu ifade ile gösteriyoruz: \(S >_1 T >_1 F >_1 M\).
İkinci çocuğun tercihleri şu şekildedir: \(T >_2 F >_2 M >_2 S\).
Üçüncü çocuğun tercihleri ise şu şekildedir: \(F >_3 M >_3 S >_3 T\).
Yapılacak aktiviteye ilişkin çocukların farklı tercihleri olduğu için hangi aktiviteyi gerçekleştireceklerini belirlemek için şöyle bir yol izlemeye karar veriyorlar. Önce aktiviteler rastgele şekilde sıralanır. Bu sıralamaya göre birinci olan aktivite ile ikinci olan aktivite oylamaya sunulur. Bu oylamada çoğunluğun tercih ettiği aktivite üçüncü aktiviteye karşı oylanır. Bu oylamada çoğunluğun tercih ettiği aktive dördüncü aktiviteye karşı oylanır. Son oylamayı kazanan aktivite gerçekleştirilir.

---

24 muhtemel başlangıç sıralamasının kaç tanesinde T aktivitesi gerçekleştirilir?

Şıklar:
A) 8 
B) 10 
C) 12 
D) 14 
E) 16

Cevap: B 10

Çözüm:
T’nin başlangıç sıralamasında birinci yada ikinci olduğu 12 durum vardır. T ikili 
karşılaştırmada geri kalan üç aktivitenin üçüne birden üstünlük sağlamadığı için bu 12 
durumun hiçbirinde T’nin gerçekleştirilmesine karar verilmez. 
T’nin başlangıç sıralamasında üçüncü sırada olduğu 6 durumdan kaç tanesinde seçildiğine 
bakalım. T ikili karşılaştırmada M ve F’ye üstünlük sağladığına göre başlangıç sıralamasında 
dördüncü sırada M ya da F olması gerekir. Başlangıç sıralamasında T’nin üçüncü sırada ve M 
veya F’nin dördüncü sırada olduğu her dört durumda da hem M hem de F ikili 
karşılaştırmada S’ye üstünlük sağladıkları için T kazanmaktadır.  
T’nin başlangıç sıralamasında dördüncü sırada olduğu 6 durumdan kaç tanesinde seçildiğine 
bakalım. F ikili karşılaştırmada hem M’ye hem de S’ye karşı üstünlük sağladığı için bu 6 
durumun hepsinde ikinci ikili karşılaştırmayı F kazanmaktadır ve üçüncü ikili karşılaştırma F 
ve T arasında olmaktadır. T ikili karşılaştırmada F’ye üstünlük sağladığından bu 6 durumun 
altısında da T seçilmektedir. 
Bu yüzden doğru cevap 10’dur.
Ortaokul Bilgisayar Olimpiyatı 2022, 1. Aşama, Soru 18

[18-19 soruları için açıklama]
Çok iyi iki arkadaş olan Beril ile Selim kendi aralarında yeni bir sıralama algoritması geliştirmeye karar veriyorlar. Mevcut algoritmalara çok benzeyen bu algoritmanın ufak değişiklikleri bulunuyor. Belirlenen bir aralık ile tüm dizi en soldan en sağa kadar geziliyor. Eğer sağdaki sayı daha küçükse bu iki sayı yer değiştiriyor. Tüm dizi bu şekilde gezildikten sonra aralık değeri 1.3 ile bölünüp aşağı yuvarlanıyor ve aynı karşılaştırma işlemi en soldan en sağa kadar tekrar yapılıyor.
Örneğin, elimizde en soldaki sayının 0'nci yerde ve en sağdaki sayımızın 7'nci yerde olduğu bir dizi olsun. Eğer başlangıç aralığımız 5 ise, 0. eleman ile 5. eleman karşılaştırılacak ve ihtiyaç varsa bu iki sayı yer değiştirilecektir. Fakat hala 5. elemanın sağında bakılmamış sayılar kalacağı için kaydırma işlemi gerçekleştirilerek 1. eleman ile 6. eleman ve 2. eleman ile 7. eleman karşılaştırılmaları da yapılacaktır. Aralık büyüklüğü 5/1.3=3 (3.8, fakat aşağı yuvarlandığı için 3 oluyor) olacak şekilde güncellenip en soldan en sağa doğru karşılaştırma işlemi tekrar ediliyor. Bu işlemler aralık sayısı 1'in altına inene kadar tekrar ediliyor.

---

Eğer verilen dizide 8 eleman varsa ve başlangıç aralığımız 8 ise kaç adet karşılaştırma 
işlemi gerçekleştirilmiş olacaktır?

Şıklar:
A) 6 
B) 13 
C) 21 
D) 24 
E) 36

Cevap: D 24

Çözüm:
Aralık 8 için 0 karşılaştırma, aralık 6(8/1.3) için 2, aralık 4(6/1.3) için 4, aralık 3(4/1.3) için 
5, aralık 2(3/1.3) için 6 ve aralık 1(2/1.3) için 7 karşılaştırma işlemi gerçekleştirilecektir. 
Toplamı 24 olmaktadır.
Ortaokul Bilgisayar Olimpiyatı 2022, 1. Aşama, Soru 26

[21-30 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
char metin[50]= "Bilgisayar_Olimpiyatlari"; 
printf("%lu,%lu", strlen(metin), sizeof(metin));
```
Yukarıdaki kod parçasının ekran çıktısı nedir? Bu soruda bir karakterin 1 byte yer aldığını varsayınız.

Şıklar:
A) 24,50 
B) 25,50 
C) 24,24 
D) 25,25 
E) Hiçbiri

Cevap: A 24,50

Çözüm:
strlen() fonksiyonu aldığı parametrenin içindeki karakter sayısını sayar. "Bilgisayar_Olimpiyatlari" içinde toplam 24 tane karakter vardır. sizeof() fonksiyonun aldığı parametre bir dizi olduğunda o dizinin hafızada aldığı toplam yeri vermektedir. Her bir karakter 1 byte yer aldığı için bu 50'dir.
Ortaokul Bilgisayar Olimpiyatı 2023, 1. Aşama, Soru 14

Adem, Buğra, Ceyhun, Demir, Ekin, Fazıl, Galip ve Hasan isimli 8 basketbol oyuncusu dörderli iki takıma bölünecektir. Takımlar birbirlerine karşı bir maçta yarışacaktır. Ancak takımların oluşumuyla ilgili belirli kısıtlamalar bulunmaktadır:
1. AdemveBuğra aynı takımda yer alamaz.
2. Ceyhun ve Demir en yakın arkadaşlardır ve aynı takımda olmak istemektedirler.
3. Ekin ve Fazıl rakiptir ve aynı takımda yer almak istemezler.
Verilen tüm koşulları sağlamak şartıyla takımlar kaç farklı şekilde oluşturulabilir?

Şıklar:
A) 2
B) 4
C) 8
D) 16
E) 24

Cevap: B 4

Çözüm:
Oluşturulacak takımların birinde Ceyhun ve Demir birlikte yer alacaklardır. Bu takıma Adem ya da Buğra'dan birinin seçilmesi gerekmektedir. Bu seçim iki farklı şekilde gerçekleştirilebilir. Benzer şekilde bu takıma Ekin ve Fazıl'dan birinin seçilmesi gerekmektedir. Bu seçim de iki farklı şekilde gerçekleştirilebilir. Dolayısıyla takımlar 4 farklı şekilde kurulabilir.
Ortaokul Bilgisayar Olimpiyatı 2023, 1. Aşama, Soru 22

[21-30] Sorular İç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.

---


x bir double sayı iken aşağıdakilerden hangisi virgülden sonra iki hane olacak şekilde bir y
sayısı üretir? Örneğin, x=67.428301 → y=67.43 ve x=67.421301 → y=67.42
```c
double y = ______________;
```

Şıklar:
A) round(x * 100) / 100.0
B) (long)x * 100 / 100
C) round(x) * 100 / 100.0
D) (long)(x * 100.0) / 100
E) (long)(x * 100) / 100.0

Cevap: A round(x * 100) / 100.0

Çözüm:
x 100 ile çarpılır ve virgülden sonra üçüncü hane virgülden sonra ilk hane haline getirilip round ile bu hane üzerinde yuvarlama yapılır ve akabinde 100.0 ile bölünerek virgülden sonra iki hane yeniden elde edilir.
Ortaokul Bilgisayar Olimpiyatı 2023, 1. Aşama, Soru 28

[21-30] Sorular İç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.

---

\( e^x \approx \sum_{n=0}^{N} \frac{x^n}{n!} = \frac{x^{0}}{0!} + \frac{x^{1}}{1!} + \frac{x^{2}}{2!} + \dots + \frac{x^{n}}{n!} + \dots \) serisini hesaplayan fonksiyon aşağıda verilmiştir. Metotta boş bırakılan iki yere sırasıyla aşağıdakilerden hangisi gelmelidir?
```c
double expTaylor(double x, int N) {
double e_x = 0.0;
double a = 1.0, b = 1.0;
for (int n=0; n<=N; n++) {
e_x += a / b;
a *= ____________;
b *= ____________;
}
return e_x;
}
```

Şıklar:
A) x  n + 1
B) x  n
C) x  n - 1
D) x*x  n + 1
E) x*x  n


x
x
x*x
x*x
n + 1
n
n- 1
n + 1
n

Cevap: A x  n + 1

Çözüm:
a değişkeni n iterasyonu içinde x^n değerini b değişkeni ise n! değerini üreterek ilerler.
Ortaokul Bilgisayar Olimpiyatı 2023, 1. Aşama, Soru 29

[21-30] Sorular İç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.

---

Sağdaki çıktının üretilebilmesi için boş yere hangi kod parçacığı gelmelidir?
```c
int K = 18;
for (int i=0; i<=K; i++) {
for (int j=0; j<=K; j++) {
printf("%c", j < _____________ ? ' ' : '.');
}
printf("\n");
}
```

...................
................
.............
...........
........
......
....
...
..
.
..
...
....
......
........
..........
.............
................
...................

Şıklar:
A) sin(M_PI * i)
B) sin(M_PI * i / K)
C) K * sin(M_PI * i / K)
D) K * sin(M_PI * i)
E) K * sin(M_PI * i)

Cevap: C K * sin(M_PI * i / K)

Çözüm:
Sağdaki şekil
0◦ ile π arasında sinüs grafiğini gösterir (yukardan aşağı yönde). Sinüs-1 ile
1 arasında olduğu için K ile çarpılır böylece 0 ile K arasında olan j değişkeni ile kıyaslanabilir hale gelir. Yani cevap C şıkkıdır.
Ortaokul Bilgisayar Olimpiyatı 2023, 1. Aşama, Soru 30

[21-30] Sorular İç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.

---

2 satır ve 3 sütundan oluşan bir arr dizisi için aşağıdaki kod parçacığı çalıştırıldıktan sonra
arr dizisindeki ilk iki satırdaki en büyük sayı ne olur? (Bu kod parçası öncesinde arr
dizisinin içeriği sağda görülmektedir.)

```c
int N = 2, M = 3;
const int K = N * M;
for (int k=0; k<K-1; k++) {
int kx = k % M;
int ky = k / M;
for (int l=k+1; l<K; l++) {
int lx = l % M;
int ly = l / M;
if (arr[ky][kx] > arr[ly][lx])
{
int t = arr[ky][kx];
arr[ky][kx] = arr[ly][lx];
arr[ly][lx] = t;
}
}
}
```

\text{arr} = \begin{bmatrix}
6 & 9 & 3 & 4 \\
16 & 2 & 7 & 14 \\
1 & 15 & 17 & 8
\end{bmatrix}

Şıklar:
A) 7
B) 9
C) 14
D) 15
E) 17

Cevap: B 9

Çözüm:
Verilen kod parçacığı sayıları dizinin üst solunda en küçük sayı ve dizinin alt sağında en
büyük sayı olacak şekilde sıralar. Bu durumda ilk iki satırdaki en büyük sayı ikinci satırın
dördüncü elemanı olur. Bu da tüm sayılar sırlanınca sekizinci büyük sayı yani 9’a eşit olur.
Ortaokul Bilgisayar Olimpiyatı 2024, 1. Aşama, Soru 1

Üç öğrenci arasında beş farklı ödül dağıtılacaktır. Her öğrenci en az bir ödül alacaktır. Ödüllerin dağıtılması
için kaç farklı yol vardır?

Şıklar:
A) 120
B) 150
C) 180
D) 210
E) 240

Cevap: B 150

Çözüm:
Her öğrencinin en az bir ödül alması gerektiği için, her öğrenciye 1, 2 veya 3 ödül verilmelidir. İki durum
olabilir: (1) Bir öğrenci 3 ödül alıyorsa, diğer iki öğrenci sırasıyla birer ödül almalıdır; (2) bir öğrenci 2
ödül alıyorsa, başka bir öğrenci de 2 ödül almalı ve kalan öğrenci bir ödül almalıdır. Bu iki durumu sırasıyla
ele alalım. (1) İlk durumda, 3 ödül alan öğrenci 3 farklı şekilde seçilebilir, bu öğrencinin alacağı ödüller (5
içinden 3 ödül) 10 farklı şekilde seçilebilir, kalan 2 ödül de kalan iki öğrenciye 2 farklı şekilde verilebilir.
Bu durumda ödüller 3x10x2=60 farklı şekilde dağıtılabilir. (2) İkinci durumda, iki öğrenci 2 ödül alırken
bir öğrenci 1 ödül alacaktır. 1 ödül alacak öğrenciyi seçmek için 3 seçenek bulunmaktadır. Diğer iki öğrenci
arasında ilk öğrenciye 2 ödül vermek için 5 ödül arasından 2 ödül 10 farklı şekilde seçilebilir. Böylece
dağıtılacak 3 ödül kalmaktadır. Bunlar arasından ikinci öğrenciye 2 ödül vermek için 3 farklı yol vardır. Son
olarak, yalnızca 1 öğrenci ve 1 ödül kaldığından, bu ödülü dağıtmak için sadece 1 yol vardır. . Bu durumda
ödüller 3x10x3=90 farklı şekilde dağıtılabilir. Birinci ve ikinci durumda toplam 150 farklı şekilde ödül
dağıtılabilir.