Final Sınavı Soruları için tıklayın.

BİL 143 C Programlaması
Final
TOBB ETU
DEPARTMENT OF COMPUTER ENGINEERING
Süre: 120 dakika
12/04/2014
Adı, Soyadı:
Q1 (25 pts)
Öğrenci no:
Q2(25 pts)
Q3 (30 pts)
Q4 (30pts)
İmza:
TOPLAM (110)
Soru 1 (25 pts):
Aşağıdaki programın çıktısı ne olur?
#include<stdio.h>
int check_special(int num);
int main(){
int n1 = 5,n2=15,i,flag;
for(i=n1+1;i<n2;++i)
{
flag=check_special(i);
if(flag==0)
printf("%d ",i);
}
return 0;
}
int check_special(int num)
{
int j,flag=0;
for(j=2;j<=num/2;++j){
if(num%j==0){
flag=1;
break;
}
}
return flag;
}
Cevap:
1
BİL 143 C Programlaması
Final
Soru 2 (25 pts):
Aşağıdaki programda kullanıcı girdi olarak “1100” girerse programın çıktısı ne olur?
#include<stdio.h>
#include<stdlib.h>
void huffman(char veri[], int hamm[]) ;
void puffman(char veri[], char ver[]) ;
char veri[5],ver[5];
int hamm[8] ;
char ornek[4][8]={"0111000","1010100","1100010","1110001"};
int main(){
int i ;
printf("4 bit veri giriniz: ");
scanf("%s",veri);
puffman (veri,ver) ;
huffman (ver,hamm) ;
printf("\nKodlanmış veri:\n");
for(i=0;i<7;i++)
printf("%d ",hamm[i]);
return 0;
}
void huffman(char veri[], int hamm[])
{
int i,j;
for(i=0;i<7;i++)
{
for(j=0;j<4;j++)
hamm[i]+=((veri[j]-'0')*(ornek[j][i]-'0'));
hamm[i]=hamm[i]%2; } }
void puffman(char veri[], char ver[])
{
int i ;
for(i=0;i<4;i++)
ver[i] = veri[3-i] ; }
Cevap:
2
BİL 143 C Programlaması
Final
Soru 3 (30 pts):
Yazacağınız programın ana kısmında (main) 16 adet tamsayı değerlerinden oluşan bir dizi
tanımlayınız.
Daha sonra yazacağınız find_max_dizi isimli fonksiyon girdi olarak tanımladığınız 16 elemanlı
diziyi alacak ve dizi elemanlarını 4erli gruplara ayırarak her bir grubun toplamını alacak ve 4
elemanlı bir diziyi çıktı olarak verecektir.
Son olarak yazacağınız find_max_one fonksiyonu ile bu gruplar arasından en büyük olan sayıyı
bulacak ve ekrana bastıracaksınız.
Örnek Çıktı:
16 tamsayı değeri giriniz: 1 2 3 4 5 6 7 8 9 10 11 12 9 8 7 6
4 tamsayı dizisi: 10 26 42 30
En büyük değer: 42
3
BİL 143 C Programlaması
Final
Soru 4 (30 pts):
Estimated Weighted Moving Average, network dünyasında gelen bir paketin (TCP segmenti)
tahmini gecikme ve zamanaşımı eşik değerini hesaplamak için kullanılmaktadır. Bu
hesaplamaları yaparken kullanılan formül aşağıdaki gibidir.
EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
DevRTT = (1-)*DevRTT + * |SampleRTT-EstimatedRTT|
TimeoutInterval = EstimatedRTT + 4*DevRTT
Birinci aşamada tahmini bir RTT (round trip time) değeri hesaplanmaktadır. Formülün sağ
tarafındaki değerler bir önceki (estimatedRTT) tahmini ve gerçekleşen (SampleRTT)
gecikmeleri belirtmektedir.
 = 0.125 ve  = 0.25 değerleri tipik olarak doğru değerler olup, siz de hesaplamalarınızda bu
değerleri kullanabilirsiniz.
İkinci aşamada ise hesaplanan ve gerçekleşen ardışık değerler arasındaki deviasyon
hesaplanmaktadır. Benzer şekilde yeni hesaplanan deviasyon değeri (DevRTT) bir önceki
deviasyon değeri, gerçekleşen gecikme (SampleRTT) ve tahmin edilen gecikme (EstimatedRTT)
değerlerine göre hesaplanmaktadır.
Son olarak paket timeout (zamanaşımı) değeri hesaplanır ve gerçekleşen gecikme ile hesaplanan
değer karşılaştırılarak paketin zamanaşımına uğrayıp uğramadığı hesaplanır.
Bir haberleşme sisteminde ölçülen gerçekleşen gecikmeler (SampleRTT) aşağıdaki dizide
verilmiş olsun. Başlangıçtaki EstimatedRTT değeri 70, DevRTT değeri 5 olsun.
double samples = {80,90,50,30,40,90,80,75} ;
Bu bilgiler doğrultusunda verilen dizideki gerçekleşme değerlerinden zamanaşımına uğrayan
değerleri ekrana basacak bir C programı yazınız.
Örnek Çıktı:
Sıra
2
6
7
Hesaplanan Zamanaşımı
87,5
75
79
Gerçekleşen Değer
90
90
80
4