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

## [32-36] soruları için açıklama
Size bir kaplumbağa çizim dili veriliyor. Bu dilde çizimler sanal bir kaplumbağayı hareket ettirerek elde ediliyor. Kurallara göre kaplumbağanın yüzü her zaman 8 doğrultudan birisine bakar ve kaplumbağa sadece bu yönlerde ileri doğru bir sonraki kesişim noktasına kadar hareket eder. Bu hareket sırasında da geçtiği yolu çizer. Kaplumbağanın hareketlerini tanımlayan dil aşağıdaki öğelerden oluşur:
i Kaplumbağanın kendi yönünde ileri doğru, bir sonraki kesişim noktasına kadar gitmesini ve bu yolu çizmesini sağlayan komut.
Kaplumbağanın bulunduğu konumda saat yönünün tersinde (soluna doğru) 45 derece dönmesini sağlayan komut.
> Kaplumbağanın bulunduğu konumda saat yönünde (sağına doğru) 45 derece dönmesini sağlayan komut.
[GÖRSEL]
Yukarıda sağdaki çizim A noktasından başlayan kaplumbağanın 'i>3(>i)ik<[i]ik' komutunu çalıştırmasıyla çizilmiştir ve kaplumbağa bu komut sonrasında B durumunda kalır.
Aşağıdaki soruları bu kaplumbağa dil tanımına göre yanıtlayınız. Kaplumbağa komuta her zaman kuzey (y ekseni artı yönünde) yönünde başlar. Kaplumbağa bir çizginin üzerinden birden fazla kez geçebilir ve bu çizilmiş yolu etkilemez.
[GÖRSEL]

---

'i>2(3(>i)3(>i)' komutu kaç numaralı şekli çizer?

Şıklar:
A) (1) | B) (6) | C) (9) | D) (10) | E) (14)

Cevap: E (14)

Çözüm:
Şekilimizi çizelim:
- Kaplumbağa önce sağ-üste doğru gider. ( >i)
- Sonra 3 kere sola yönelip 1 birim sola gider. Tekrardan 3 kere sola yönelir ve 1 birim sağ-alta doğru gider (2(3(>i)). Şekil şöyle olur:
[GÖRSEL]
- En son D'den A'ya doğru gider ve 14. Şekli çizmiş olur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 33

## [32-36] soruları için açıklama
Size bir kaplumbağa çizim dili veriliyor. Bu dilde çizimler sanal bir kaplumbağayı hareket ettirerek elde ediliyor. Kurallara göre kaplumbağanın yüzü her zaman 8 doğrultudan birisine bakar ve kaplumbağa sadece bu yönlerde ileri doğru bir sonraki kesişim noktasına kadar hareket eder. Bu hareket sırasında da geçtiği yolu çizer. Kaplumbağanın hareketlerini tanımlayan dil aşağıdaki öğelerden oluşur:
i Kaplumbağanın kendi yönünde ileri doğru, bir sonraki kesişim noktasına kadar gitmesini ve bu yolu çizmesini sağlayan komut.
Kaplumbağanın bulunduğu konumda saat yönünün tersinde (soluna doğru) 45 derece dönmesini sağlayan komut.
> Kaplumbağanın bulunduğu konumda saat yönünde (sağına doğru) 45 derece dönmesini sağlayan komut.
[GÖRSEL]
Yukarıda sağdaki çizim A noktasından başlayan kaplumbağanın 'i>3(>i)ik<[i]ik' komutunu çalıştırmasıyla çizilmiştir ve kaplumbağa bu komut sonrasında B durumunda kalır.
Aşağıdaki soruları bu kaplumbağa dil tanımına göre yanıtlayınız. Kaplumbağa komuta her zaman kuzey (y ekseni artı yönünde) yönünde başlar. Kaplumbağa bir çizginin üzerinden birden fazla kez geçebilir ve bu çizilmiş yolu etkilemez.
[GÖRSEL]

---

‘i4(i<3(i)<i)’ komutu kaç numaralı şekli çizer?

Şıklar:
A) (8) | B) (3) | C) (11) | D) (5) | E) (7)

Cevap: B (3)

Çözüm:
Şeklimizi çizelim:
• 1. leri gider ve 4 kere şu şekli çizdirecek bir komutu(i<1<<<i) uygular:
[GÖRSEL]
Başlangıçta A noktasında yukarı bakan kaplumbağa, komut dizisi bitiminde A noktasında sağa bakar.
• O zaman 1 ileri gittikten sonra bu işlem 4 kere tekrarlanırsa şekil şöyle olur:
[GÖRSEL]
• (A'dan B'ye gider ve 4 kere belirtilen şekli çizer)
• En son 3 numaralı şekil çizilmiş olur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 34

## [32-36] soruları için açıklama
Size bir kaplumbağa çizim dili veriliyor. Bu dilde çizimler sanal bir kaplumbağayı hareket ettirerek elde ediliyor. Kurallara göre kaplumbağanın yüzü her zaman 8 doğrultudan birisine bakar ve kaplumbağa sadece bu yönlerde ileri doğru bir sonraki kesişim noktasına kadar hareket eder. Bu hareket sırasında da geçtiği yolu çizer. Kaplumbağanın hareketlerini tanımlayan dil aşağıdaki öğelerden oluşur:
i Kaplumbağanın kendi yönünde ileri doğru, bir sonraki kesişim noktasına kadar gitmesini ve bu yolu çizmesini sağlayan komut.
Kaplumbağanın bulunduğu konumda saat yönünün tersinde (soluna doğru) 45 derece dönmesini sağlayan komut.
> Kaplumbağanın bulunduğu konumda saat yönünde (sağına doğru) 45 derece dönmesini sağlayan komut.
[GÖRSEL]
Yukarıda sağdaki çizim A noktasından başlayan kaplumbağanın 'i>3(>i)ik<[i]ik' komutunu çalıştırmasıyla çizilmiştir ve kaplumbağa bu komut sonrasında B durumunda kalır.
Aşağıdaki soruları bu kaplumbağa dil tanımına göre yanıtlayınız. Kaplumbağa komuta her zaman kuzey (y ekseni artı yönünde) yönünde başlar. Kaplumbağa bir çizginin üzerinden birden fazla kez geçebilir ve bu çizilmiş yolu etkilemez.
[GÖRSEL]

---

'8(2(i<))'komutu kaç numaralı şekli çizer?

Şıklar:
A) (12) | B) (10) | C) (8) | D) (5) | E) (13)

Cevap: A (12)

Çözüm:
Bu işlem 16(i<) işlemine denktir. Her adımda 45 derece sola döneceğinden ve 1 birim ilerleyeceğinden geniş bir sekizgen çizer. Bu sekizgen de 12. şekildir.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 35

## [32-36] soruları için açıklama
Size bir kaplumbağa çizim dili veriliyor. Bu dilde çizimler sanal bir kaplumbağayı hareket ettirerek elde ediliyor. Kurallara göre kaplumbağanın yüzü her zaman 8 doğrultudan birisine bakar ve kaplumbağa sadece bu yönlerde ileri doğru bir sonraki kesişim noktasına kadar hareket eder. Bu hareket sırasında da geçtiği yolu çizer. Kaplumbağanın hareketlerini tanımlayan dil aşağıdaki öğelerden oluşur:
i Kaplumbağanın kendi yönünde ileri doğru, bir sonraki kesişim noktasına kadar gitmesini ve bu yolu çizmesini sağlayan komut.
Kaplumbağanın bulunduğu konumda saat yönünün tersinde (soluna doğru) 45 derece dönmesini sağlayan komut.
> Kaplumbağanın bulunduğu konumda saat yönünde (sağına doğru) 45 derece dönmesini sağlayan komut.
[GÖRSEL]
Yukarıda sağdaki çizim A noktasından başlayan kaplumbağanın 'i>3(>i)ik<[i]ik' komutunu çalıştırmasıyla çizilmiştir ve kaplumbağa bu komut sonrasında B durumunda kalır.
Aşağıdaki soruları bu kaplumbağa dil tanımına göre yanıtlayınız. Kaplumbağa komuta her zaman kuzey (y ekseni artı yönünde) yönünde başlar. Kaplumbağa bir çizginin üzerinden birden fazla kez geçebilir ve bu çizilmiş yolu etkilemez.
[GÖRSEL]

---

'8(2(li<)>)'komutu kaç numaralı şekli çizer?

Şıklar:
A) (12) | B) (10) | C) (8) | D) (5) | E) (13)

Cevap: C (8)

Çözüm:
Bu işlem 16(li<) işlemine denk gelir. Anımsamada eski konuma ve yöne geri döneceğinden bu işlem 16(li<) işlemiyle aynıdır. 16(li<) işleminde ise her yönüne 1 çizgi çizer ki bu şekil 8. şekildir.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 36

## [32-36] soruları için açıklama
Size bir kaplumbağa çizim dili veriliyor. Bu dilde çizimler sanal bir kaplumbağayı hareket ettirerek elde ediliyor. Kurallara göre kaplumbağanın yüzü her zaman 8 doğrultudan birisine bakar ve kaplumbağa sadece bu yönlerde ileri doğru bir sonraki kesişim noktasına kadar hareket eder. Bu hareket sırasında da geçtiği yolu çizer. Kaplumbağanın hareketlerini tanımlayan dil aşağıdaki öğelerden oluşur:
i Kaplumbağanın kendi yönünde ileri doğru, bir sonraki kesişim noktasına kadar gitmesini ve bu yolu çizmesini sağlayan komut.
Kaplumbağanın bulunduğu konumda saat yönünün tersinde (soluna doğru) 45 derece dönmesini sağlayan komut.
> Kaplumbağanın bulunduğu konumda saat yönünde (sağına doğru) 45 derece dönmesini sağlayan komut.
[GÖRSEL]
Yukarıda sağdaki çizim A noktasından başlayan kaplumbağanın 'i>3(>i)ik<[i]ik' komutunu çalıştırmasıyla çizilmiştir ve kaplumbağa bu komut sonrasında B durumunda kalır.
Aşağıdaki soruları bu kaplumbağa dil tanımına göre yanıtlayınız. Kaplumbağa komuta her zaman kuzey (y ekseni artı yönünde) yönünde başlar. Kaplumbağa bir çizginin üzerinden birden fazla kez geçebilir ve bu çizilmiş yolu etkilemez.
[GÖRSEL]

---

Aşağıdakilerden hangisi (4) numaralı şekli çizer?

Şıklar:
A) <<3(4(i>>)>>) | B) <<3(4(i>>)>>) | C) <<3(4(i>>)>>)<<) | D) <<3(4(i>>)>>)>>) | E) <<3(4(i>>)>>)>>)

Cevap: D <<3(4(i>>)>>)>>)

Çözüm:
4 numaralı şekil bir karenin 3 yöne çizilmesiyle oluşur. Her kare [4(i>>)] dizisiyle oluşur. Yani ilk gidilen kenar karenin sol kenarıdır. O zaman ilk olarak sola bakmak, sonraki her adımda ise 90 derece dağa gitmek gerekir. Dediğim işlem ise <<3(4(i>>)>>)>>) dizisiyle gerçekleşir.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 37

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın çalışması sonucu çıktı ne olur?
int a[10]={1,2,3,4,5,6,7,8,9,10}, i;
int main()
{ for (i=9; i>0; i--) if ((i%2)==0) a[i] = a[i]+a[i-1];
for (i=0; i<10; i++) printf("%d ", a[i]); }

Şıklar:
A) 1361052128364555 | B) 13579113151719 | C) 1254961381710 | D) 12345678910 | E) 1123456789

Cevap: C 1254961381710

Çözüm:
Üstteki for döngüsünü incelediğimizde dizideki O'dan büyük ve çift indisli elemanların değerini bir önceki elemanın değerince artırıyor. O zaman işlemler sonunda dizi {1, 2, 5, 4, 9, 6, 13, 8, 17, 10} haline döner. O zaman program C seçeneğindeki gibi çıktı oluşturur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 38

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın çalışması sonucu çıktı ne olur?

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

Şıklar:
A) 1361052128364555 | B) 135791113151719 | C) 1254961381710 | D) 12345678910 | E) 1123456789

Cevap: B 135791113151719

Çözüm:
Üstteki for döngüsünü incelediğimize dizideki O'dan büyük indisli elemanların değerini bir önceki elemanın deşerince artırıyor, döngüde i değişkeni azalarak döngü ilerlediği için ekleme yapılan değişken daha değişmemiş oluyor. O zaman işlemler sonunda dizi {1, 3, 5, 7, 9, 11, 13, 15, 17, 19} haline döner. O zaman program B seçeneğindeki gibi çıktı oluşturur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 39

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın çalışması sonucu çıktısı ne olur?
```c
int a[10]={1,2,3,4.5,6,7,8,9,10}, i;
int main()
{
int i=0; i<9; i++) if ((a[i]%2)==0) a[i+1] = a[i]+a[i+1];
for (i=0; i<10; i++) printf("%d ",a[i]);
}
```

Şıklar:
A) 136105 2128364555 | B) 135791113151719 | C) 125496 1381710 | D) 12345678910 | E) 1123456789

Cevap: C 125496 1381710

Çözüm:
Üstteki for döngüsünü incelediğimizde dizideki Ö'dan büyük ve çift indisli elemanların değerini bir önceki elemanın değerince artırıyor, çünkü dikkat ederseniz if sadece i tek ise doğru oluyor ve i+1. dizi elemanına işlem yapılıyor. O zaman işlemler sonunda dizi {1, 2, 5, 4, 9, 6, 13, 8, 17, 10} haline döner. O zaman program C seçeneğindeki gibi çıktı oluşturur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 40

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın çalışması sonucu çıktı ne olur?
int a[10]={1,2,3,4,5,6,7,8,9,10}, i;
int main()
{
for (i=9; i>0; i--) a[i] = a[i-1];
for (i=0; i<10; i++) printf("%d ", a[i]);
}

Şıklar:
A) 13610152128364555 | B) 135791113151719 | C) 1254961381710 | D) 12345678910 | E) 1123456789

Cevap: E 1123456789

Çözüm:
İlk döngüye bakarsak her elemana solundaki elemanın değeri atanıyor. İlk eleman hariç, ilk eleman hala ilk değerini koruyor. O zaman dizi {1, 1, 2, 3, 4, 5, 6, 7, 8, 9} şeklini alır ve E seçeneğindeki gibi çıktı oluşur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 41

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın çalışması sonucu çıktısı ne olur?
int a[10]={1,2,3,4,5, 6, 7, 8, 9, 10}, i;
int main()
{
for (i=0; i<9; i++) a[i+1] = a[i]+a[i+1];
for (i=0; i<10; i++) printf("%d ",a[i]);
}

text<|/ref|>
[[132,

text<|/ref|>
[[132,

Şıklar:
A) 13610152128364555 | B) 135791113151719 | C) 1254961381710 | D) 12345678910 | E) 1123456789

Cevap: A 13610152128364555

Çözüm:
Döngüye dikkatle bakarsanız i+1. Elemana atama yaparken i.eleman zaten değiştirilmiş. İlk eleman ilk halini koruyor. İkinci eleman ilk dizideki ilk elemanla ikinci elemanın toplamını tutuyor. Üçüncü eleman ise ilk dizideki ilk üç elemanın toplamını tutuyor. Genellersek i+1.elemana atama yaparken dizinin i.elemanı dizideki O'dan i'ye kadar indislenmiş elemanların toplamını tutuyor. Sonra buna i+1.elemanı ekleyip dizinin i+1. elemanı yapılıyor. O zaman son dizideki i. eleman ilk dizide O'dan i'ye kadar indislenmiş elemanların toplamını tutuyor. O zaman son dizi f(1, 3, 6, 10, 15, 21, 28, 36, 45, 55) halini alır ve A seçeneğindeki gibi çıktı oluşur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 42

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın derlenip çalıştırılmasında ne yazar?
int i=1;
int main()
{
switch (++i)
{
case 1: printf("***");
case 2: printf("****");
case 4: printf("*****");
default: printf(""); }
}

Şıklar:
A) * | B) ** | C) *** | D) ***** | E) *********

Cevap: E *********

Çözüm:
İlk değeri 1 olan i değişkeni 1 artıp switch kısmında 2 değeri döner. O zaman kod case 2: kısmına girer ve 3 kere '*' yazdırır. Ama dikkat ederseniz break ifadesi yazılmamış o zaman aşağıdaki printfler de çalışır ve 6 defa daha '*' yazılır. O zaman toplamda 9 kere yazılmış olur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 43

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın derlenip çalıştırılmasında en olur?
int x;
int main()
{
x = 8/3;
if (!x==x) printf("EVET");
else printf("HAYIR");
if (x) printf("EVET");
if (!x) printf("HAYIR");
}

Şıklar:
A) Bu program derlenemez. | B) EVET yazar. | C) EVETHAYIR yazar. | D) EVETEVET yazar. | E) HAYIREVET yazar.

Cevap: A Bu program derlenemez.

Çözüm:
'I' işleminin önceliği '=' den fazladır. O zaman ilk if'in içinde 1=x gibi bir işlem yapılmaya çalışılacağı için program derleme zamanı hatası verir.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 44

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın derlenip çalıştırılmasında ne yazar?
int a[]={1,2,3,4,5}, i,j;
int main()
{
for (i=0,j=sizeof(a)/sizeof(i); i<j; ++i)
printf(" %d",a[i]+a[a[i]-1]);
}

Şıklar:
A) 12 345 | B) 4 6 8 10 12 | C) 13 579 | D) 0 13 579 | E) 2 4 6 8 10

Cevap: E 2 4 6 8 10

Çözüm:
Dizinin sizefo'unu integer sizefo'una böldüğümüzde dizi integer dizisi olduğu için dizideki eleman sayısı döner. Yani for döngüsü kısaca sırasıyla dizinin elemanlarını soldan sağa gezer. Dolayısıyla çıktı E seçeneğindeki gibi olur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 45

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın derlenip çalıştırılmasında Ne yazar?
int f(int n)
{
int i;
for (i=1; n/i; i*=10)
n = (n/(10*i))*(10*i) + (n%(10*i))/i + n%i;
return n;
}
int main()
{
printf("%d", f(18475));
}

Şıklar:
A) 25 | B) 18475 | C) 0 | D) 1 | E) 57481

Cevap: A 25

Çözüm:
Dikkat ederseniz f fonksiyonu verilen değişkenin rakamlarının toplamını döndürür. Bunu şu şekilde yapar: Rakamları 1O'un artan kuvvetleri şeklinde gezer, her adımda Şu anki basamağı O yapıp rakamsal değerini sayıya ekler. En sonunda en sol basamak da O'landığında sadece sayının rakamları toplamı kalır. O zaman cevap 18475 sayısının rakamları toplamı yani 25 olur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 46

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın derlenip çalıştırılmasında ne yazar?
int main()
{
int a=10, b=6, c=7;
if (b %= (a %= b) * c >= 3 * c-b) printf("1");
else if (a ? b : c == 0) printf("2");
else if (c == c || a && b) printf("3");
else if (!c || printf("4")) printf("4");
}

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

Cevap: C 3

Çözüm:
İlk if'i parantezle düzenlediğimizde şu ifade oluşur: (b %= (a %= b) * c) >= (3 * c) - b). O zaman işlemleri soldan sağa doğru işlersek a, b, c'nin son değerleri sırasıyla (4, 0, 7) olur ve ilk if şartı yanlış çıkar. İkinci if de b=0 olduğu için yanlıştır ama 3.if doğru bir şart içerir, o zaman kod 3 yazdırır.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 47

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın derlenip çalıştırılmasında **ne yazar**?
int fn(int a, int d, int *c)
{
int b;
b = a+d;
*c = (a+d)/2;
printf("b:%d,", b);
return b/2;
}
int main()
{
int a, b;
b = fn(3, 7, &a);
b = fn(a, 3, &a);
printf("a:%d", a);
return 0;
}

Şıklar:
A) b:1O, b:1O, a:4 | B) b:1O, b:8, a:4 | C) b:1O, b:3, a:O | D) b:1O, b:1O, a:O | E) b:8, b:8, a:4

Cevap: B b:1O, b:8, a:4

Çözüm:
Verilen fn fonksiyonu aldığı ilk iki sayının ortalamasını (integer bölme ile) 3.parametre olan değişkene atayıp bu ortalamayı döndürür. O zaman ana kodu satır satır inceleyelim:
- İlk başta 3, 7, &a ile fn'yi çağırır, fn a değişkenine 5 atar ve "b:1O" yazdırır. Sonra da b değişkenin 5 atar. Sonra a ve b'nin değerleri 5'e eşit olur.
- Ardından fonksiyon 5, 3, &a ile çağırılır, a değişkenine 4 atanıp "b: 8" yazdırılır. Sonrasında da b değişkenine de 4 atanır.
- En sonda ise "a: 4" yazdırılır.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 48

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın derlenip çalıştırılmasında ne yazar?
int a[]={1,2,3,4,5}, i;
int main(void)
{
for (i=1; i<5; ++i) a[i] = a[4*i];
for (i=0; i<5; ++i) printf("%d ", a[i]);
}

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

Cevap: C 1 1 1 1 1

Çözüm:
For döngüsünde sırasıyla şu işlemler yapılır:
• a[1] = a[0]
• a[2] = a[0]
• a[3] = a[i]
• a[4] = a[0]
İşlemler sonunda dizi {1, 1, 1, 1} halini alır. O zaman çıktı C seçeneğindeki gibi olur.
Bilgisayar Olimpiyatı 2010, 1. Aşama, Soru 50

## [37-50] soruları için açıklama
Takip eden sorular standart (ANSI) C çerçevesinde cevaplandırılacaktır. Hiçbir soru hesapta taşma (overflow) kavramına dayandırılmamıştır. Gerekli başlık dosyalarının (header files) derleme sırasında katılmış olduğunu varsayınız.

---

Aşağıdaki programın derlenip çalıştırılmasında ne yazar?
int i=0, n=10;
int f(int n, int *i)
{
if (n==0) return *i;
else
{
(*i)++;
return n+f(n/2, i);
}
}
int main()
{
if (f(n, &i) || f(n++, &i) || f(n*n++, &i)) n = f(n, &i);
printf("%d %d", n, i);
}

Şıklar:
A) 10 0 | B) 8 8 | C) 8 0 | D) 26 8 | E) 43 25

Cevap: D 26 8

Çözüm:
İf şartını soldan sağa inceleyelim:
• f(10, &i), 22 döndürür ve i'nin değerini 4 yapar. 22 "TRUE" bir değer olduğu için diğer if içi şartlara bakılmaz. En son da n=f(10, &i) işlemi yapılır ve fonksiyon 26 döndürür, i'nin değeri de 8'e eşit olur. O zaman D seçeneği doğru seçenektir.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 1

A ve B takımları aralarında 3 maç yapacaklardır. Bu 3 maçın 2'sini kazanan şampiyon olacaktır. Eğer ilk iki maçı aynı takım kazanırsa, o takım şampiyon olacak ve 3. maç oynanmayacaktır. Maçların beraberlik ile sonuçlanma ihtimalinin olmadığını varsayın. A takımının önceki maçlardan bağımsız olmak üzere her bir maçı kazanma ihtimalinin 2/5 olduğu göz önüne alındığında, şampiyon olan takımın ilk maçı kaybetme ihtimali nedir?

Şıklar:
A) 3/5 | B) 3/25 | C) 6/25 | D) 12/25 | E) 1/5

Cevap: C 6/25

Çözüm:
A takımının ilk maçı kaybedip şampiyon olma ihtimali \(\frac{3}{5} * \frac{2}{5} = \frac{12}{25}\) B takımının ilk maçı kaybedip şampiyon olma ihtIMALI \(\frac{2}{5} * \frac{3}{5} = \frac{18}{125}\) Toplam olasılık o zaman \(\frac{12}{125} + \frac{18}{125} = \frac{30}{125} = \frac{6}{25}\)
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 2

Salgın olarak ortaya çıkan X hastalığının bir kişide görünme ihtimali 2/10 'dur. Bir doktor, kendi-sine gelen kişilerde bu hastalığın olup olmadığı ile ilgili teşhis koymaktadır. Eğer bir kişi X hastalığına sahipse, doktor 3/5 ihtimal ile hastalığın bu kişide olduğu teşhisini koyar. Eğer bir kişi X hastalığına sahip değilse, doktor 3/4 ihtimal ile hastalığın bu kişide olmadığı teşhisini koyar. Buna göre, doktorun koymuş olduğu teşhisin yanlış olma ihtimali yüzde kaçtır?

Şıklar:
A) %28 | B) %48 | C) %50 | D) %14 | E) %10

Cevap: A %28

Çözüm:
100 kişi var diyelim. 20 kişide X hastalığı vardır. O zaman 12 X hastalığına sahip kişiye hastasın der. 8 kişiye yanlış teşhis koyar. 80 X hastalığına sahip olmayan kişiden 60'ına doğru. 20 kişiye de yanlış teşhis koyar. O zaman doktor 100 kişiden 8+20=28'ine yanlış teşhis koyar.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 3

Birbiri ile aynı boyut ve renkte olan 10 tane top 6 farklı kutuya kaç farklı şekilde dağıtılabilir?

Şıklar:
A) 3003 | B) 720 | C) 151200 | D) 120 | E) 600

Cevap: A 3003

Çözüm:
Tekrarlı kombinasyon yöntemi ile 10 özdeş top 6 farklı kutuya
\[ \left( \frac{10+6-1}{6-1} \right) = \frac{(15*14*13*12*11)}{5*4*3*2*1} = 7 * 13 * 3 * 11 = 91 * 3 * 11 = 273 * 11 = 3003 \text{ farklı şekilde dağıtılabilir.} \]
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 4

SAAKAR kelimesindeki harflerin yerleri değiştirilerek 6 harfli kaç farklı kelime elde edilir?

Şıklar:
A) 24 | B) 48 | C) 60 | D) 120 | E) 720

Cevap: D 120

Çözüm:
Toplamda 6 harf olduğundan ve 3 tanesi aynı olduğundan \(\frac{6!}{3!} = 6 * 5 * 4 = 120\) farklı kelime elde edilir.
Bilgisayar Olimpiyatı 2011, 1. Aşama, Soru 5

Bir ailenin farklı yaşlarda 3 çocuğu vardır. En küçük 2 çocuktan en az birinin Erkek olduğu bilindiğine göre, bu ailenin en az 2 Erkek çocuğa sahip olma ihtimali nedir? [Bir çocuğun Erkek/Kız olma ihtimalinin eşit, ve çocukların cinsiyetlerinin birbirlerinden bağımsız olduğunu kabul ediniz.]

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

Cevap: C 2/3

Çözüm:
Eğer en küçük 2 çocuktan 1 tanesi erkekse en büyük çocuk da erkek olmalıdır. 2 farklı şekilde olabilir.(eke, kee) Eğer en küçük 2 çocuktan ikisi de erkekse en büyük çocuk kız veya erkek olabilir (eek, eee). En küçük 2 çocuğun ikisi de kız olamayacağından toplamda 6 durum vardır ve bu durumların 4'ünde en az 2 erkek çocuk vardır. İhtimal: 4/6 = 2/3