Ulusal Bilgisayar Olimpiyadı 2009 – Soru 36

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.
‘i3(3(<)i)’ komutu kaç numaralı şekli çizer?
A) (1)
B) (6)
C) (9)
D) (10)
E) (14)

CEVAP: Nispeten kolay bir soru. Komutu incelersek ilk olarak kuzeye ilerleyip daha sonra 3 kere 135 derece sola dönüp ilerlemeliyiz.

Soru 36

Soru 36

Yukarıdaki şekilden takip edersek önce kuzeye yani 1′den 2′ye. Daha sonra sola 135 derece dönüp ileriye. Yani 2′den 3′e. Yine 135 derece sola dönüş ve ilerleme : 3′den 1′e. Son kez 135 derece sola ve ileri : 1′den 4′e. Doğru cevap C) (9)

Ulusal Bilgisayar Olimpiyadı 2009 – Soru 37

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.
‘i3(3([i]>))’ komutu kaç numaralı şekli çizer?
A) (8)
B) (3)
C) (11)
D) (14)
E) (7)

CEVAP: Verilen komutu incelersek önce bir defa kuzeye ilerleyip arkasından 9 kere parantez içindeki komutu işletmemiz gerektiği anlaşılır. Parantez içindeki komut ise konumumuzu kaydetmeyi sonra ilerlemeyi sonra kaydettiğimiz konuma geri dönmeyi ve en sonunda sağa 45 derecelik bir dönüş yapmamızı söylüyor. Soru37
Yukarıdaki şekilden tosbağanın izleyeceği yolu takip edelim. Önce ilerle komutuyla 1′den 2′ye gidiyoruz. Kaydet komutu 2. noktada kuzey yönünü kaydeder. İlerle komutu 2′den 3′e gider. Kaydettiğimiz 2 noktasına geri geliyoruz. 45 derece sağa dönüş yapıyoruz. Konumumuzu kaydedip ilerleyerek 2′den 4′e gidiyoruz. Kaydettiğimiz 2 noktasına geri geliyoruz. 45 derece sağa dönüş yapıyoruz. Konumumuzu kaydedip ilerleyerek 2′den 5′e gidiyoruz.Bu işlemi 9 kere tekrarladığımızda yukarıdaki şekili elde etmiş oluyoruz. Doğru şıkkımız A.

Ulusal Bilgisayar Olimpiyadı 2009 – Soru 38

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.
‘8(i3(>))’ Komutu kaç numaralı şekli çizer?
A) (12)
B) (10)
C) (4)
D) (5)
E) (2)

CEVAP : 39. ve 40. soruya nazaran daha kolay bir soru. Yapmamız gereken komutları takip ederek yolu çizmek. Verilen komutu incelersek 8 kere aynı komutların tekrar edilmesini istiyoruz. Tekrar edeceğimiz komut ise ileri gidip sağa 3*45 yani 135 derecelik dönüş yapmak. Yani tosbağamız sırasıyla aşağıda verilen köşelerden geçer :
soru38
Doğru seçenek B şıkkı.

Ulusal Bilgisayar Olimpiyadı 2009 – Soru 39

Soru metni için öncelikle 40. soruda verdiğimiz açıklamaları okuyun.

Aşağıdakilerden hangisi (5) numaralı şekli çizer.
A) 4([<i2(3(>)i)]>>)
B) >4([i]>>i>>i)
C) 4([ii3(>>>i)]>>)]
D) 4([ii3(>>>i)]>)]
E) >4([i]>>i>i)

CEVAP: Şekil her ne kadar karmaşık görünsede aynı alt şeklin 4 kere tekrar edilmesinden oluşuyor. Yapı olarak 40. soruya çok benziyor. Biz 5 numaralı şeklin sol üst çeyreğindeki şeklin çizilmesine odaklanalım.
Soru 39
Yukarıdaki şekle göre algoritmamızı yazmaya başlayabiliriz. Tosbağamız kuzeye baktığından dolayı öncelikle 45 derecelik sola dönüş gerekli bize. İfademiz < şeklinde başlıyor. 1′den 2′ye gitmek için ilerliyoruz. İfademiz <i oldu. 2. köşeden saat yönünde 135 derecelik dönüş lazım. İfademiz <i>>> oldu. 2′den 3′e gitmek istiyoruz. İfademiz <igt;>>i oldu. Yine 3. köşede 135 derecelik dönüş yapmamız gerekiyor. İfademiz <i>>>i>>> oldu. 3′den 4′e gitmek istiyoruz. İfademiz <i>>>i>>>i oldu. Diğer tüm alt şekiller için aynı algoritma uygulanabilir. Bunu değişik şekillerde sadeleştirebiliriz. Örneğin <2(i3(>))i veya <i2(3(>)i) şeklinde sadeleştirebiliriz. Diğer şekilleride çizebilmek için bize 90 derecelik dönüşler gerekli. Tabi bunun için öncelikle ilk konumumuzu hatırlamalı ve alt şeklin çizilmesi bittiği zaman tekrar ilk konuma dönmemiz gerekir. Yani ifade [<i2(3(>)i)] şeklini alır. Bunun sonuna 90 derecelik dönüş ekleyip işlemi 4 kere tekrarlamamız 5 numaralı şeklin çizilmesini sağlayacaktır. İfademiz 4([<i2(3(>)i)]>>) şeklini aldı. Doğru seçenek A şıkkı.
Not: Çizim Dia yazılım ile üretilmiştir.

Ulusal Bilgisayar Olimpiyadı 2009 – Soru 40

Soru40
Soru40-Devam

Aşağıdakilerden hangisi 13 numaralı şekli çizer?
A) 4([i<[i]>[i]]>)
B) 4([i<[i>>i]]>>)
C) >4([i<[i]>>[i]]>>)
D) 4([i<[i]>>[i]]>>)
E) 4([i<[i]>>[i]]>)

CEVAP: 13 Numaralı şekli incelediğimizde Y biçimli bir şeklin 4 defa 4 ana yönde tekrarlandığını görmekteyiz. Öyleyse yapmamız gereken Y biçimli çizim için gerekli olan algoritmayı bulup bunu 4 defa yinelemek olacaktır. Kuzeye bakan Y biçimli yolu çizmeden önce yerimizi kaydetmeliyiz ki geri dönüp diğer yönelere de çizim yapabilelim. O zaman ifademiz [] içinde yeralacaktır. İlk yapmamız gereken kuzeye bir çizgi çizmek. İfademiz [i] şeklini aldı. Bu noktada iki farklı yöntem uygulanabilir. Önce soldaki sonra sağdaki bacak çizilebilir, veya tersi olarak önce sağdaki sonra soldaki bacak çizilebilir. Şıkları incelediğimizde tüm seçeneklerde önce sola dönüş yapıldığını görüyoruz yani önce soldaki bacağın çizilmesi isteniyor. Sol 45 derecelik bir dönüş gerekli. İfade [i<] şeklini alır. Bu noktaya sağ bacağı çizmek için geri döneceğimizden kaydediyoruz. İfade[i<[] şeklini alır. Sol bacağı çiziyoruz. İfade [i<[i] şeklini aldı. Sağ bacağı çizmek için bir önceki konumumuza gidiyoruz. İfade [i<[i]] şeklini aldı. Yönümüzü sağ bacağa çevirmek için 90 derece sağa dönmemiz gerekiyor. Çift dönüş gerekli. İfademiz [i<[i]>>] şeklini aldı. Burada yerimizi kaydetmemize gerek olmamasına rağmen tüm seçeneklerde yer kaydedilmiş. İfademiz [i<[i]>>[] şeklini aldı. Sağ bacağı çiziyoruz. [i<[i]>>[i]. Önce sağ bacağı çizmeden önceki konumumuza daha sonra da ilk konumumuza geri dönüyoruz. İfademiz [i<[i]>>[i]] oldu. Şu anda kuzeye bakan Y şeklini tamamlamış bulunuyoruz ve tosbağamızın yönü kuzeye bakıyor. Burada yine iki farklı yol izlenebilir. Saat yönünde veya saat yönünün tersinde ilerlenebilir. Saat yönünde dönmeyi tercih ediyoruz. 90 derecelik dönüş gerekli. İfademiz [i<[i]>>[i]]>> şeklini aldı. Aynı algoritmayı 4 kere uygulamak istiyoruz. İfademiz 4([i<[i]>>[i]]>>) şeklini aldı. Doğru seçenek D şıkkı. Burada tekrar dikkatinizi çekmek istiyorumaynı şekli çizecek birden fazla algoritma olabilir. Burada seçenekleri takip ederek doğru sonuca ulaşabilirsiniz.

Ulusal Bilgisayar Olimpiyadı 2009 – Soru 41

Aşağıdaki programın çalışması sonucu ekrana ne basılır?

int n=5, t, a, b, c;
main(void)
{ for (a=1; a<=n; a+=1)
     for (b=1; b<=a; b+=2)
        for (c=1; c<=b; c+=3) t += a+b+c;
   printf("%d",t); }

A) 36
B) 54
C) 67
D) 74
E) 93

CEVAP: 42. Soruyla aynı tip soru. Takip edeceğimiz yöntem 42. soru ile aynı olacaktır. Yine döngü değişkenlerinin alabilecekleri değerleri yazarak işe başlayalım.

a : 1, 2, 3, 4, 5
b : 1, 3, 5
c : 1, 4

a = 1 iken b = 1 c = 1 olabilir
a = 2 iken b = 1 c = 1 olabilir
a = 3 iken b = 1 c = 1 olabilir
b = 3 c = 1 olabilir
a = 4 iken b = 1 c = 1 olabilir
b = 3 c = 1 olabilir
a = 5 iken b = 1 c = 1 olabilir
b = 3 c = 1 olabilir
b = 5 c = 1 olabilir
b = 5 c = 4 olabilir
Buradan t değişkeninde birikecek olan değer = [1+1+1] + [2+1+1] + [3+1+1] + [3+3+1] + [4+1+1] + [4+3+1] +[5+1+1] + [5+3+1] + [5+5+1]+ [5+5+4] = 74 Doğru seçenek D.

Ulusal Bilgisayar Olimpiyadı 2009 – Soru 42

Aşağıdaki programın çalışması sonucu ne basılır?

int n=5, t, a, b, c;
main(void)
{ for (a=1; a<=n; a+=1)
     for (b=1; b<=a; b+=3)
        for (c=1; c<=b; c+=2) t += a+b+c;
   printf("%d",t); }

A) 36
B) 54
C) 67
D) 74
E) 93

CEVAP : İçiçe geçmiş döngü soruları çetrefilli olabilir. Genelde bu tür sorular için herkesin ayrı bir stratejisi vardır. Benim stretejim döngü değişkenlerinin alabileceği değerleri listeleyip kontrol ifadelerini doğrulamaktır. Yukarıdaki soru için sırasıyla a, b, c değişkeninin alabileceği değerleri yazalım :

a : 1, 2, 3, 4, 5
b : 1, 4
c : 1, 3

a = 1 iken b = 1 ve c = 1 olabilir.
a = 2 iken b = 1 ve c = 1 olabilir.
a = 3 iken b = 1 ve c = 1 olabilir.
a = 4 iken b = 1 ve c = 1 olabilir.
b = 4 ve c = 1 olabilir.
b = 4 ve c = 3 olabilir.
a = 5 iken b = 1 ve c = 1 olabilir.
b = 4 ve c = 1 olabilir.
b = 4 ve c = 3 olabilir.
Buradan t değişkeninde birikecek olan değer = [1+1+1] + [2+1+1] + [3+1+1] +[4+1+1] +[4+4+1] +[4+4+3] + [5+1+1]
+ [5+4+1] + [5+4+3] = 67. Doğrue seçenek C.