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.