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 950702059”);

            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)