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
© Copyright 2024 Paperzz