alpsahin/tubitak-olimpiyat-dataset-v2 huggingface dataset:
Bilgisayar Olimpiyatı 2016, 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
extern int a;
int main() {
    do {
        do {
            printf("%o", a);
        } while (!1);
    } while (0);
    return 0;
}
int a = 10;
```

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

Şıklar:
A) 1 | B) 10 | C) 12 | D) Derleme zamanı hatası vereceğinden çıktı oluşmaz. | E) Çalışma zamanı hatası vereceğinden çıktı oluşmaz.

Cevap: C 12

Çözüm:
External int dışsal bağlanımı gösterir. Globalde 'a' adında bir değişken varsa, bu değişkenin herhangi bir fonksiyon tarafından kullanılabileceğini söyler. Kendi başına bir değişken özelliği göstermez. Fonksiyonlardaki dışsal bağlanım ifadesi void rastgele(void) ile aynı özelliği taşır. Yani 'a' değişkenin main fonksiyonu tarafından kullanılmasını sağlar. Do- while döngülerinin ikisi de O döneceğinden toplamda 1 kez 'a' değişkeninin değeri yazdırılır. %o ifadesi 8'lik tabanda yazdırmayı belirtir. 10, 8'lik tabanda 12'ye denk geldiğinden program çıktıya 12 yazar.
Bilgisayar Olimpiyatı 2016, 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 a, b;
    a = b = 4, 6;
    while (--a && b++)
        printf("AA");
    return 0;
}
```

Yukarıdaki program ekrana kaç tane A basar?

Şıklar:
A) 1 | B) 3 | C) 6 | D) Derleme zamanı hatası vereceğinden O | E) Çalışma zamanı hatası vereceğinden O

Cevap: C 6

Çözüm:
Satır satır işletelim:
• İlk satırda a ve b değişkenleri tanımlanır.
- İkinci satırda a ve b'nin değeri 4'e eşitlenir ve kullanılmayan 4 sayısını döner. Virgülle ayrılan kısımda farklı bir ifade kullanılmayan 6 sayısını yazar. (Program mantığında boşluğa sayı yazılması çok normaldir. Hatta neredeyse her ifadede bir obje boşluğa yazılır. İfadenin belirttiği ve boşluğa yazdığı değere ise o ifadenin 'döndüğü' değer denir.)
• İlk adımda 3 & 4 yazar ve döngüye girip AA yazdırır.
• 2 & 3 ve 1 & 2 olmak üzere 2 kez tekrar edip O & 1 ifadesiyle döngüden çıkar.
Toplamda 3 kez AA, 6 kez A yazdırmış oluruz.
Bilgisayar Olimpiyatı 2016, 1. Aşama, Soru 38

## [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 q=5;
    for(q=-2;q=-5;q+=3) {
        printf("%d",q);
        break;
    }
    return 0;
}
```

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

Şıklar:
A) -5 | B) -2 | D) 5 | E) Derleme zamanı hatası vereceğinden çıktı oluşmaz.

Cevap: A -5

Çözüm:
Satır satır işletelim:

• q önce 5'e eşitlenir.
• Sonra -2. Sonrada -5'e eşitlenir. "-5 O mıdır?" kontrolü yapılır ve döngüye girer.
• q'nun değeri olan -5 çıktı olarak üretilir.
• “break” ifadesiyle döngüden çıkılır.
Bilgisayar Olimpiyatı 2016, 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() {
    int d;
    for (d=2; d<=7; ++d) {
        while (d) {
            printf("%d ", 1);
            if (d>1)
                break;
        }
    }
    return 0;
}
```

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

Şıklar:
A) 1 | B) 111 | C) 11111 | D) 111111 | E) 1111111

Cevap: D 111111

Çözüm:
Programı işletelim:
- d değişkeni tanımlanır 2'ye eşitlenir ve for döngüsüne girilir.
- while döngüsü içerisinde 1 ekrana yazılır.
- d>1 ifadesi d'nin bitlerini 1 kez kaydırmak, yani 2'ye bölmek demektir. d/2 O olmadığından break kısmına girilir ve while döngüsünden çıkılır.
- d'nin 3, 4, 5, 6, ve 7 değerleri için 5 kez daha bu işlem tekrarlanır ve for döngüsünden çıkılır.
Toplamda 6 kere 1 çıktıya basılmıştır.
Bilgisayar Olimpiyatı 2016, 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() {
    register int d1 = 99;
    int *d2;
    d2=&d1;
    printf("%d ", *d2);
    return 0;
}
```

Yukarıdaki program için aşağıdakilerden hangisi doğrudur?

Şıklar:
A) Çıktı olarak 9 üretir | B) Çıktı olarak 99 üretir. | C) Derleme zamanı hatası verir. | D) Çalışma zamanı hatası verir. | E) Hiçbiri

Cevap: C Derleme zamanı hatası verir.

Çözüm:
Çalıştırıldığı takdirde olacak işlemlere bakalım:
- d1 adında bir değişken tanımlanır ve bu değişkenin değeri 99'a eşitlenir(resgister int, "ram'de register denen daha hızlı çalışan özel bir bölgeden tam sayı değeri tanımla" komutudur. Normal int ile hız dışında farklılık göstermez).
- d2 isimli bir tamsayı göstericisi tanımlanır.
- Normal tamsayı göstericisi olan d2 göstericisi, özel bölgedeki d1 değişkenin olduğu yeri göstermeye çalışır ve derleyici bu işleme müsaade etmez.
Program derleme hatası verir.
Bilgisayar Olimpiyatı 2016, 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
- d1 adında bir değişken tanımlanır ve bu değişkenin değeri 99'a eşitlenir(resgister int, "ram'de register denen daha hızlı çalışan özel bir bölgeden tam sayı değeri tanımla" komutudur. Normal int ile hız dışında farklılık göstermez).
int main() {
    int d[3] = {3, 5, 7};
    int d1 = 0;
    d1 = ++d[d1++ + d1++ + d[-d1] + d1;
    printf("%d ", d1);
    return 0;
}
```

Yukarıdaki program için aşağıdakilerden hangisi doğrudur?

Şıklar:
A) Çıktı olarak 7 üretir | B) Çıktı olarak 9 üretir. | C) Çıktı olarak 11 üretir. | D) Derleme zamanı hatası verir. | E) Hiçbiri

Cevap: C Çıktı olarak 11 üretir.

Çözüm:
Başlangıçta d1=0, d[0] = 3, d[1] = 5 ve d[2] = 7'dir. Şimdi en karmaşık ifade olan 3.satıra bakalım:
- + + d[d1++] kısmında: d1 0 döner, d1'nin değeri 1 olur, d[0]'ın değeri 4 olur ve ifade 4 döner.
- d1++ kısmında: d1 1 döner ve d1'nin değeri 2 olur.
- d[-d1] kısmında: d1'nin değeri 1 olur, d1 1 döner ve d[1]'i kendi değeri olan 5'i döner.
- ifadeye en son d1'ın o anki değeri olan 1 yazılır.
- En sonda ifade şu şekilde olur: d1 = 4 + 1 + 5 + 1;
Yani program d1'nin yeni değeri olan 1'1'i çıktı olarak üretir.
Bilgisayar Olimpiyatı 2016, 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 d[3][2] = {4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
    int i = -1;
    int j;
    j = d[i++] + [++i] + [++i];
    printf("%d", j);
    return 0;
}
}
```

Yukarıdaki program için aşağıdakilerden hangisi doğrudu?

Şıklar:
A) Çıktı olarak 4 üretir. | B) Çıktı olarak 5 üretir. | C) Çıktı olarak 6 üretir. | D) Çalışma zamanı hatası verir. | E) Hiçbiri

Cevap: A Çıktı olarak 4 üretir.

Çözüm:
## Hatırlatma:
• i++ işlemi önce i'nin değerini döner. Sonra i'nin değerini 1 artırır.
• ++işlemi önce i'nin değerini 1 artırır. Aynı gruptaki işlemlerin bitiminden sonra i'nin değerini döner. (Gruplama olayı ayrı bir konu. Kısaca değinirsek +, *, -, /, & gibi operatörler ifadeyi grupları bölerken ar[++i][++i], printf(" %d %d", ++i, ++i) gibi ifadeler grupları bölmez, tek grup sayılır. Kendi bilgisayarınızda daha farklı ifadeler deneyebilirsiniz.)
Şimdi j=d[i++][++i][++i] ifadesine odaklanalım:
• Soldan sağa doğru gelen ilk i++ ifadesinde i o anki değeri -1'i döner ve i1 artırılır.
• ++ifadesi'i yi 1 yapar
• Sonra gelen ++ifadesi'i yi 2 yapar.
• j=d[i++][++i][++i] ifadesi biter. 2. ve 3. boyutlara i'n o anki değeri 2'yi yazar.
Yani j=d[-1][2][2] ifadesi oluşur. 3 boyutlu dizinin hafızadaki yerini, d[a][b][c] için, d+a*b_size*c_size+b*c_size+c şekliden buluruz. Yani:
j=d[-1][2][2]=*(d+(-1)*3*2+2*2+2)=*d=4
Çıktı olarak da j'nin yeni değeri olan 4'ü üretir.
Bilgisayar Olimpiyatı 2016, 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
int main() {
    int *a, *b, *c, *d, e = 4;
    int **dizi[] = {a, b, &c, &d};
    int i;
    *a = *b = *c = *d = e;
    for (i = 0; i <= 3; i++)
        printf("%d ", **dizi[i]);
    return 0;
}
```

Yukarıdaki program için aşağıdakilerden hangisi doğrudur?

Şıklar:
A) Çıktı olarak 4 4 4 4 üretir | B) Çıktı olarak 5 5 5 5 üretir. | C) Derleme zamanı hatası verir. | D) Çalışma zamanı hatası verir. | E) Hiçbiri

Cevap: D Çalışma zamanı hatası verir.

Çözüm:
Kodu inceleyelim:
• İlk olarak 1 tamsayı ve NULL'u gösteren 4 tane gösterici tanımlanıyor.
• Göstericilerin gösterici olan dizi önceden tanımlanan 4 göstericiyi gösteriyor(labilir).
- NULL'u gösteren 4 gösterici NULL'un değerini 4'e eşitlemeye çalışırken çalışma zamanı hatası verir.(NULL'un değeri değişemez çünkü yoktur.)
• A şıkkının olması için gerekli ifade a=b=c=d=&;e; idi.
Bilgisayar Olimpiyatı 2016, 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 x=-2, y=0, z=2;
    z=x=y;
    printf("%d", z);
    return 0;
}
```

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

Şıklar:
A) O | B) 1 | C) 2 | D) Derleme zamanı hatası vereceğinden çıktı oluşmaz. | E) Çalışma zamanı hatası vereceğinden çıktı oluşmaz.

Cevap: A O

Çözüm:
Kodu inceleyelim:
• 3 değişken tanımlanır.
• x, y'ye eşit mi kontrolü yapılır. -2, O'a eşit olmadığından O döner ve z'nin değeri O'a eşitlenir.
• z'nin değeri yazılır.
Bilgisayar Olimpiyatı 2016, 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
int main()
{
    FILE *f1, *f2;
    f1=fopen("temp.txt", "w");
    f2=fopen("temp.txt", "w");
    fputc('1', f1);
    fputc('2', f2);
    fclose(f1);
    fclose(f2);
    return 0;
}
```

Yukarıdaki programın sorunsuz bir şekilde çalışması durumunda temp.txt dosyasının içeriğinde aşağıda-kilerden hangisi olur?

Şıklar:
A) 1 | B) 2 | C) 12 | D) 1 | E) 22

Cevap: B 2

Çözüm:
Kodu inceleyelim:
• fl ve f2 adında içindekileri 'temp.txt' dosyasına yazdıracak 2 farklı dosya tanımlanır.
• fl dosyasına 1 yazdırılır.
• f2 dosyasına 2 yazdırılır.
• fl dosyasının içindekileri temp.txt'nin üzerine yazar. temp.txt = "1" olur.
• fl dosyasının içindekileri temp.txt'nin üzerinde yazar. temp.txt = "2" olur.
## Not:
• fopen ile bir yazma dosyası açıldığında, yazılacak dosyanın içerisi silinir.
• fclose ile bir dosyanın üzerine yazıldığındaysa dosyanın içeriği silinmez.
Yani fl="1234" ve f2="56" olsaydı temp.txt="5634" olurdu.
Ayrıntı: “n” 2 karakter gibi işlev görür. Yani fl="1234" ve f2="n6" olsaydı temp.txt="n64" olurdu.
Bilgisayar Olimpiyatı 2016, 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
unsigned int (*f()) [4] {
    static unsigned int d[4] = {-1,3,1,11};
    return &d;
}
int main() {
    unsigned int (*p) [4];
    p = f();
    printf("%d", *(p+1));
    return 0;
}
```

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

Şıklar:
A) -1 | B) 3 | C) 1 | D) 11 | E) Çalışma zamanı hatası vereceğinden çıktı oluşmaz.

Cevap: B 3

Çözüm:
Kodu inceleyelim:
- Negatif olmayan 4 sayıdan oluşan bir diziyi gösterecek olan göstericiyi dönen bir fonksiyon tanımlanıyor.
- Bu fonksiyon negatif olmayan ve {2³²-1, 3, 1, 11} değerlerine sahip 4 dizinin adresini döner.
- Negatif x sayıları 'unsigned int' yapısına atılabilir değeri 2³² + x olur.
- Bir fonksiyonun gösterici dönmesi, hedef yapının adresinin dönülmesiyle aynıdır çünkü yalın halde yazılan bir gösterici hedef yapısının adresini döner.
- main fonksiyonunda bir dizi göstericisi tanımlanır ve {2³²-1, 3, 1, 11} dizisinin adresini gösterir.
- Bir dizinin adresinde yazan değer, dizinin ilk elemanın adresidir.
- *p, dizinin ilk elemanının adresini döner + 1 ile ikinci elemanın adresini döner. ve başındaki * ile ikinci elemanın değeri döner ve bu değer çıktıya yazılır.
- * adresin içerisindeki değeri döndürür.
{2³²-1, 3, 1, 11} dizisinin 2, elemanının değeri 3'tür.
Bilgisayar Olimpiyatı 2016, 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 main() {
    int a;
    a=5, 10, 15, 20;
    printf("%d", a);
    return 0;
}
```

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

Şıklar:
A) 5 | B) 10 | C) 15 | D) 20 | E) Derleme zamanı hatası vereceğinden çıktı oluşmaz.

Cevap: A 5

Çözüm:
Program sırasıyla: a'yı tanımlar, içerisine 5 yazar, Boşluğa 10, 15 ve 20 yazar(Hiçbir şey olmaz) ve a'nın değeri olan 5'i çıktıya yazar.
Bilgisayar Olimpiyatı 2016, 1. Aşama, Soru 48

## [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
```
enum foo{
    f1,
    f2=3,
    f3,
    f4
};
void main(){
    float d[f1+f4]={1.f,2.f,3.f,4.f,5.f};
    enum foo f5=f3;
    printf("%0.f",d[f5>1+1]);
}
```

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

Şıklar:
A) 1 | B) 2 | C) 3 | D) 4 | E) Derleme zamanı hatası vereceğinden çıktı oluşmaz.

Cevap: B 2

Çözüm:
**enum:** belirli değerleri alabilen tamsayı kümesidir. 'const int' yapısının gruplanmış hali olarak görebilirsiniz. Başlangıçta değeri belirtilmezse en tanımlanan sayının 1 fazlasını değer olarak alır. Daha önce sayı tanımlanmadıysa değeri O'a eşit olur.
Yani:
- Elemanları f1=O, f2=3, f3=4 ve f4=5 olan sabit tamsayı kümesi tanımlanıyor.
- f1+f4=5 elemanlı bir noktalı sayı dizisi oluşturuluyor. Bu dizinin değerleri (1,2,3,4,5)'tir.
- x.f sayısı, x tamsayısının noktalı sayıya dönüştürülmüş halidir. x. veya x.O şeklinde de gösterilebilir.
- Sabit tamsayı kümesinden yeni bir eleman tanımlanıyor ve bu elemanın değeri f3'e eşitleniyor.
- Tanımladığımız foo kümesinde tanımlanacak yeni bir eleman foo kümesinin elemanlarından birine eşit olmak zorundadır. Kümenin elemanları değişemeyeceği gibi kümenin kendisi de değişemez. Yani 'enum foo f5=3:' ifadesi derleme hatasına yol açar.
- f5>1+1 = f5>2 = 4/4 = 1 olduğundan çıktıya d(l) = 2 yazılır.
- %O.f: noktalı sayıyı, noktadan sonra basamak yazdırmadan çıktıya bastır demektir
Bilgisayar Olimpiyatı 2016, 1. Aşama, Soru 49

## [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 x=3;
    int y=2;
    int z=1;
    int *d1[2]={&x,&y};
    int *d2[2]={&y,&z};
    int *(*d3[2])[2]={&d2,&d1};
    printf("%d %d",*(*d3[0])[1], *(*(*d3[0])[1],);
}
```

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

Şıklar:
A) 11 | B) 12 | C) 23 | D) 32 | E) 31

Cevap: B 12

Çözüm:
Kodu inceleyelim:
- 3 tane değişken tanımlanıyor.
- d1 isimli 2 elemanlı gösterici dizisinin ilk elemanı x'in, ikinci elemanı y'nin adresini gösterir.
- d2 isimli 2 elemanlı gösterici dizisinin ilk elemanı y'nin, ikinci elemanı z'nin adresini gösterir.
- d1 ve d2'yi gösteren 2 elemanlı gösterici dizisi tanımlanır.
- İlk çıktı *d3[0] = d2, d2[1] = &z, *(&z) = z = 1 olur
- İkinci çıktı *(d3+1) = d3[1] = &d1, *(&d1)+1 = d1+1, **d(1+1) = *d[1] = *(&y) = y = 2 olur.
Bilgisayar Olimpiyatı 2016, 1. Aşama, Soru 50

## [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
double foo1(double x) {
    x*=2;
    return x;
}

double foo2(double x) {
    return pow(x, 0.5);
}

double foo3(double x) {
    return x++;
}

void main() {
    double(*array[3])(double);
    array[0]=foo3;
    array[1]=foo2;
    array[2]=foo1;
    printf("%.1f", (*array)((*array[2])((**array+1))(4)));
}
```

Yukarıdaki programın sorunsuz bir şekilde derlenmesi durumunda programın çıktısı aşağıdakilerden hangisi olur?

Şıklar:
A) 1.0 | B) 2.0 | C) 3.0 | D) 4.0 | E) Hiçbiri

Cevap: D 4.0

Çözüm:
Kodu inceleyelim:
- 1 noktalı sayıyı parametre olarak alan ve bu değerin 2 katını dönen foo1 fonksiyonu tanımlanır.
- 1 noktalı sayıyı parametre olarak alın ve bu değerin karekökünü dönen foo2 fonksiyonu tanımlanır.
- 1 noktalı sayıyı parametre olarak alılan ve bu değerin kendisini (sonradan artırdığı double önemsiz) dönen foo3 fonksiyonu tanımlanır.
- 3 elemanlı noktalı sayı fonksiyonu göstericisi dizisi 'array' tanımlanır.
- Fonksiyonlar da tanımlandığında hafızada bir yer alır. Fonksiyonun ismi yalın olarak yazıldığında o yerin adresini döner. Diğer yapılarda olduğu gibi fonksiyonun da göstericisi tanımlanabilir. 'array' bu tür göstericilerden oluşan bir dizidir.
- array'in elemanları sırasıyla foo3, foo2 ve foo1 fonksiyonlarının adreslerini gösterir.
- (*array)((*array[2])((**array+1))(4))) ifadesini biraz basitleştirerek ifadenin değerini bulalım:
- (array[0])((*array[2])((**array[1])(4)))
- (array[0])((*array[2])(foo2(4)))
- (array[0])(foo1(foo2(4)))
- foo3(foo1(foo2(4)))
- foo3(foo1(2))
- foo3(4)
- 4
En son çıktıya 4.0 yazılır.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 1

## [1 – 2] Sorular İçin Açıklama
Bir sabit disk üreticisi 3 model sabit disk üretmektedir. Bu modellerin isimleri : U, Y ve T'dir. U modelinde bozuk sektör bulunmamaktadır. Y modelinde bozuk sektör olma ihtimali 1/5'tir. T modelinde bozuk sektör olma ihtimali 4/5'tir. Bir kalite kontrol ekibi bu disklerden rastgele birini seçip test etmekte, disk üzerinde bozuk sektör çıkarsa sabit diski BOZUK olarak etiketlemektedir. Bu ekibin U modelini seçme ihtimali 1/6, Y modelini seçme ihtimali 1/2 ve T modelini seçme ihtimali 1/3'tür. Buna göre aşağıdaki soruları cevaplayınız.

---

Rastgele seçilen bir sabit diskin BOZUK olarak etiketlenme ihtimali nedir?

Şıklar:
A) 1/5 | B) 4/5 | C) 11/30 | D) 19/30 | E) ½

Cevap: C 11/30

Çözüm:
Rastgele seçilen diskin U ve bozuk olma olasılığı 1/6 * O = O, Y ve bozuk olma olasılığı 1/5 * 1/2 = 1/10, T ve bozuk olma olasılığı 1/3 * 4/5 = 4/15 olur. Toplamda ise 11/30 ihtimalle BOZUK olarak etiketlenir
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 2

## [1 – 2] Sorular İçin Açıklama
Bir sabit disk üreticisi 3 model sabit disk üretmektedir. Bu modellerin isimleri : U, Y ve T'dir. U modelinde bozuk sektör bulunmamaktadır. Y modelinde bozuk sektör olma ihtimali 1/5'tir. T modelinde bozuk sektör olma ihtimali 4/5'tir. Bir kalite kontrol ekibi bu disklerden rastgele birini seçip test etmekte, disk üzerinde bozuk sektör çıkarsa sabit diski BOZUK olarak etiketlemektedir. Bu ekibin U modelini seçme ihtimali 1/6, Y modelini seçme ihtimali 1/2 ve T modelini seçme ihtimali 1/3'tür. Buna göre aşağıdaki soruları cevaplayınız.

---

Rastgele seçilen sabit diskin BOZUK olarak etiketlendiğini varsayarsak, bu sabit diskin modelinin Y olma ihtimali nedir?

Şıklar:
A) 3/11 | B) 30/11 | C) 11/12 | D) 4/5 | E) O

Cevap: A 3/11

Çözüm:
Örnek 1'in çözüm mantığından BOZUK olarak etiketlenenlerin 3'ü Y, 8'i T diskidir. Yani 11 diskten 3'ü Y diskidir.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 3

Bir kutuda 100 adet top vardır. Bu toplar turuncu, mavi ve yeşil olmak üzere 3 türlüdür. Kutudan yerine koyarak 2 adet top çekildiği zaman 1. topun yeşil, 2. topun mavi çekilme olasılığı 3/50'dir. Kutudan sa- dece 1 adet top çekildiğinde bu topun yeşil veya mavi olma olasılığı 1/2'dir. Yeşil topların mavi toplardan fazla olduğu biliniyorsa torbadaki mavi top sayısı nedir?

Şıklar:
A) 50 | B) 30 | C) 20 | D) 10 | E) 3

Cevap: C 20

Çözüm:
Kutudaki yeşil top sayısına y, mavi top sayısına m diyelim. Mavi veya yeşil top çıkma olasılığı 1/2 ise m+y = 50 olur. y/100 * m/100 = 3/50 olduğunu biliyoruz. y.m = 600 demek oluyor bu. Yani 600/y+y = 50. Bu denklemi y² - 50y + 600 = 0 şekilden yazarsak y'nin alabileceği 2 değer 20 ile 30 olur. Mavi top daha az olduğundan 20 tanedir.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 5

Bir seyyar satıcının satmaya çalıştığı 7 adet domatesten 2'si çürüktür. Bir müşteri bu domateslerin içinden rastgele 5 adet domatesi yerine koymadan seçiyor. Seçilen domateslerin hiçbirinin çürük olmama ihtimali nedir?

Şıklar:
A) 1/9 | B) 1/3 | C) 7/8 | D) 1/12 | E) 1/21

Cevap: E 1/21

Çözüm:
C(7,5) = 21 kadar farklı seçme durumu var. Hiçbirinin çürük olmadığı 1 durum var. O zaman ihtimal de 1/21 olur.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 6

Bir hücre kültüründe 5 adet hücre bulunmaktadır. Bunların bir kısmı ölü, kalanı ise yaşıyor olsun. İki tane hücre yerine koymadan seçiliyor. Seçilen iki hücrenin de yaşıyor olma ihtimalinin 3/10 olması için bu 5 hücre içinden ölü hücre sayısının hangi değere eşit olması gerekir?

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

Cevap: B 2

Çözüm:
Toplamda C(5,2) = 10 farklı seçme durumu var. Yaşayan x tane hücre varsa C(x,2) farklı durumda seçilenlerin ikisi de yaşar. İkisinin de yaşama olasılığı 3/10 ise C(x,2) = 3 demektir. O zaman x = 3 olur. 5 hücreden 3'ü yaşıyorsa 2'si ölüdür.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 7

Bir testte çoktan seçmeli 5 adet soru vardır. Her soruda 4 adet şık vardır. Bir öğrencinin cevap kâğıdını rastgele işaretleyerek soruların 3 tanesini doğru yapma ihtimali nedir?

Şıklar:
A) 45/128 | B) 45/64 | C) 45/512 | D) 45/256 | E) 45/1024

Cevap: C 45/512

Çözüm:
4^5 = 1024 farklı durum vardır. Hangi soruları doğru yaptığına göre C(5,3) = 10 farklı durumda yanlış yaptığı diğer 2 soru için 3'er farklı işaretleme seçeneği vardır. Yani 10*3*3 = 90 farklı durumda tam olarak 3 tanesini doğru işaretlemiştir.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 9

COLOSSUS kelimesinin harflerini kullanarak bütün harfleri birbirinden farklı kaç adet 3 harfli kelime üretilebilir?

Şıklar:
A) 24 | B) 16 | C) 40 | D) 18 | E) 60

Cevap: E 60

Çözüm:
S harfinden 3, O'dan 2, C,L ve S'den 1 kez geçmektedir. Yani 5 farklı harf bulunmaktadır. Üçlü harfli kelimenin ilk harfine 5, ikinci harfine 4, üçüncü harfine 3 farklı harf gelebilir. Toplamda 3*4*5 = 60 farklı harfleri birbirinden farklı 3 harfli kelime üretilebilir.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 10

(2x²+4x)⁴ ifadesinin açılımında x⁶'nın katsayısı ne olur?

Şıklar:
A) 384 | B) 128 | C) 512 | D) 256 | E) 16

Cevap: A 384

Çözüm:
Binom açılımına göre üsleri dağıttığımızda x⁶ terimini elde etmek için üstü alınacak ifadenin ilk ve ikinci terimine 2 üssünü dağıtmamız lazım. Yani C(4,2)*(2x²)²*(4x)²=384x⁶ ifadesini elde ederiz.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 11

Aşağıda şekli görülen fonksiyonun denklemi hangisidir?
[GÖRSEL]

Şıklar:
A) y=x²-2x+3 | B) y=x²-3x-2 | C) y=x²+2x+3 | D) y=x²-2x-3 | E) y=x²-x-3

Cevap: D y=x²-2x-3

Çözüm:
a*(x-x)*(x-x₂) şeklinde denklem yazalım. x, ve x₂'nin değerlerini şeklin x eksenini kestiği noktalara bakarak -1 ve 3 olduğunu anlayabiliriz. x yerine O koyduğumuzda denklemin a*1*(-3) = -3 sağlaması için a=1 olmalı. O zaman ana denkleminiz y = (x-1)*(x+3) = x² - 2x - 3 olur.
Bilgisayar Olimpiyatı 2017, 1. Aşama, Soru 12

f(x) = |x-1|+|x|+|x+9| olduğuna göre f(-2)+f(0)+f(7) kaçtır?

Şıklar:
A) 29 | B) 30 | C) 31 | D) 32 | E) 33

Cevap: E 33

Çözüm:
f(-2) = |-3| - |-2| + |7| = 8.   f( ) = |-1| - |0| + |9| = 10.   f(7) = |6| - |7| + |16| = 15. O zaman toplam 8 + 10 + 15 = 33.