Süre 90 dakika, sınav kapalı kitaptır. Başarılar J
Soru 0) Ekrana isminizi, soy isminiz ve öğrenci numaranızı yazdıran bir program yazınız. (sadece bu soru için program tam olmalı (include, return satırları gibi) ve yazım hatası bulundurmamalıdır ve kodunuz compile edildiğinde hata vermemelidir. )
Farklı şekillerde yapılabileceği gibi en basit hali aşağıdadır:
#include <stdio.h>
int main(){
printf(“Şadi Evren ŞEKER
return
0;
}
Bu soruyu tam olarak yapan az kişi var. Genel yapılan
hatalar: Curve Bracket
koymayı unutmak, int değişken tanımlayarak içine
öğrenci numarası koymak (integer değişkenler en fazla
32768 olabilir), kodun tamamını yazmamak (include
satırları vs. )
Soru 1) Aşağıdaki kod size verilmiştir:
typedef struct {
int x;
int y;
} Point;
Aşağıdaki sorular için kartezyen uzayı düşününüz. (kartezyen uzay yukarı doğru gittikçe y’nin arttığı, sağa doğru gittikçe de x’in arttığı uzaydır).
a) Bir dikdörtgen struct’ı tanımlayınız.
b) Bir fonksiyon yazınız
ve bu fonksiyon sayesinde verilen bir parametrenin sizin tanımladığınız dikdörtgen
yapısına uygun olup olmadığını bulunuz.
Farklı cevapları olabileceği gibi aşağıda örnek çözüm verilmiştir:
a)
typedef struct {
Point p1; //sol üst köşe
Point p2; //sağ üst köşe
Point p3; //sol alt köşe
Point p4; // sağ alt köşe
}rectangle;
b)
int rectanglemi (rectangle
r){
if(p1.x==p2.x && p1.y== p3.y && p2.y==p4.y&&p4.x==p2.x)
return 1;
else
return 0;
}
Sık yapılan hatalar, soruda açıkca “verilen bir parametrenin tanımladığınız dikdörtgen
olup olmadığını bulun” diyor. Fonksiyona parametre olarak rectangle
(dikdörtgen) tipinden bir parametre geçirilmesi gerekiyordu.
Tanımladığınız rectangle
yapısına göre (ki bir point bir en ve boy ile veya
iki point ile veya bir point
bir köşegen ve bir açı ile de rectangle
tanımlanabilir) uygun olup olmadığını bulackatınız.
Soru 2) Aşağıda, derste de işlenilen insertion sort algoritmasının kodu verilmiştir (satır başlarında bulunan sayılar satır numarasını ifade etmektedir)
01: #include <stdio.h>
02:
03: #define N 3
04:
05:
06: int main(void)
07: {
08: double x[N];
09: double swap;
10: int i, j;
11:
12: x[0] = 3.0; x[1] = 2.0; x[2] = 1.0;
13:
14: for (i = 0; i < N; i++)
15: for (j = i; j > 0; j--)
16: if (x[j-1] > x[j]) {
17: swap = x[j];
18: x[j] = x[j-1];
19: x[j-1] = swap;
20: }
21:
22: printf("%.1f %.1f %.1f\n", x[0], x[1], x[2]);
23: return 0;
24: }
a) 15. satırı aşağıdaki şekilde değiştirirsek kod başarılı bir şekilde çalışmaya devam eder mi? Cevabınızı açıklayınız.
15: for (j = i; j >= 0; j--)
a) Sonuç değişmez, çalıştırıp deneyebilirsiniz
b) 14. satırı aşağıdaki şekilde değiştirirsek kod başarılı bir şekilde çalışmaya devam eder mi? Cevabınızı açıklayınız.
14: for (i = 1; i < N; i++)
b) Sonuç değişmez, çalıştırıp deneyebilirsiniz
Soru 3) Aşağıda verilen recursive fonksiyon için :
int f(int a[], int n)
{
int x;
if (n == 0)
return 0;
x = f(a, n-1);
if (a[n-1] > x)
return a[n-1];
return x;
}
a) Aşağıda verilen main fonksiyonu ile çalıştırdığımızı düşünelim. Ekranda görülenleri yazınız:
int main(void) {
int a[5] = {3, 1, 4, 2, 2};
printf("%d\n", f(a,5));
return 0;
}
a) 4, çalıştırıp deneyebilirsiniz
b) Aşağıda verilen main fonksiyonu ile çalıştırdığımızı düşünelim. Ekranda görülenleri yazınız:
int main(void) {
int a[5] = {-3, -1, -4, -2, -2};
printf("%d\n", f(a,5));
return 0;
}
b) 0, çalıştırıp deneyebilirsiniz
Soru 4) Aşağıda verilen fibonacci hesaplayan fonksiyonu düşünelim:
int F(int n) {
if (n == 0 || n == 1)
return n;
return F(n-1) + F(n-2);
}
a) F(4) için kaç kere F fonksiyonu çağrılır?
b) F(2) için kaç kere F fonksiyonu çağrılır?
c) F(1) için kaç kere F fonksiyonu çağrılır?
a)8
b)3
c)1
“Computer Science is no more about computers
than astronomy is about telescopes. “
(E. W. Dijkstra)