TÜBİTAK – 2023 Bilim Olimpiyatları – Bilgisayar – A Kitapçığı – Soru 44

C Programlama Tübitak - Bilim Olimpiyat Soruları Yazılım

Soru : Aşağıdaki kod parçası için şıklarda verilen ifadelerden hangisi yanlıştır?


const int n = 5;
int p[] = {10, 2, 15, 1, 5};

// Bölüm 1
for (int i=0; i<n; i++)
	printf("%3d ", p[i]);
printf("\n");

// Bölüm 2
int s[n];
for (int i=0; i<n; i++) 
{
	s[i] = 0;
	p[i] += (i > 0 ? p[i-1] : 0);
}

// Bölüm 3
int c = 100000;
for (int k=0; k<c; k++) 
{
	int r = rand() % p[n - 1];
	for (int i=0; i<n; i++) 
	{
		if (p[i] > r) 
		{
			s[i]++;
			break;
		}
	}
}

// Bölüm 4
double scaler = (double)c / p[n-1];
for (int i=0; i<n; i++) 
{
	s[i] = (int)(s[i] / scaler + 0.5);
	printf("%3d ", s[i]);
}

Seçenekler :

A) Bölüm 1’deki for döngüsü p dizisinin içindeki elemanları ekrana yazar
B) Bölüm 2’de s dizisinin içi sıfırlanır ve p dizisi kümülatif artan hale getirilir
C) Bölüm 3’te p dizisinin orijinal halindeki sayıların büyüklüğüne uygun olarak rastgele sayılar atılır ve s dizisinde atılan sayı indeksi bir arttırılır (örneğin en büyük 15 olduğu için rastgele atılan sayı en çok 2, en küçük 1 olduğu için rastgele sayı en az 3 olur)
D) Bölüm 4’te s dizisindeki sayılar bir sabit sayıya göre normalize edilir ve ekrana yazılır
E) Bölüm 4’te ekrana yazılan çıktı ile Bölüm 1’de ekrana yazılan çıktı çok büyük olasılıkla aynıdır

Cevap : Bölüm’4 te s dizisindeki sayılar p dizisinin orijinal halinin toplamına (yani mevcut halinde en son elemanına) bölünerek normalize edilir, sabit bir sayıya göre değil. Cevap D
şıkkıdır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir