osa1 feed

Bil113 arasınav ve kağıt üzerinde kod yazmak

October 31, 2010 - Tagged as: python, java, tr.

Bugün olduğumuz Bil113 arasınavında gördük ki, “hello world”ü bile Eclipse, Netbeans vs. ile yazan bizler, iş kağıt kalem ile yazmaya gelince çakılıyoruz(ben öyle değil ama yine de çakıldım gerçi). Aslında sınavın kağıt kalemle çözmek için biraz zor olduğunu düşünüyorum. Sınavda onlarca dakika uğraştığım soruları bilgisayar karşısında 5 dakikada çözebildim.

Asal sayıları tespit etme gibi kolay soruları değil de, değişik bir şekilde çözdüğümü düşündüğüm üçgen sorusunu yazayım. Soru: verilen 3 kenarla bir üçgen oluşturulup oluşturulamayacağını döndür(boolean):

public static boolean kontrol(int a, int b, int c) {
    return (a < b+c && a > Math.abs(b-c) && b < a+c && b > Math.abs(a-c) && c < a+b && c > Math.abs(a-b));
}

Bu tek satırı kağıt üzerinde yazmak bayaa zor oluyor gerçi. Neyse. Sınavın sanırım en zor sorusu olan farklı tabanlarda sayıları kaydedip kendi aralarında işleme sokabildiğimiz soru:

public class Sayi {

    String s;
    int d;
    
    public Sayi(String s, int d) {
        
        this.s = s;
        this.d = d;
    }
    
    public int onluk() {
        // this.s'i 10 tabanında döndür            
        int r = 0;
        
        for (int i = 0; i < this.s.length(); i++) {
            r += Integer.parseInt(this.s.substring(i, i+1)) * Math.pow(d, this.s.length()-i-1);
        }
        
        return r;
    }
    
    
    public static String taban(int s, int d) {
        // Girilen s sayısını d tabanında döndür

        String r1 = "";
        String r2 = "";
        
        
        while (s >= d) {
            r1 += s % d;
            s = s / d;
        }
        r1 += s;
        for (int i = 0; i < r1.length(); i++) {
            r2 += r1.substring(r1.length()-i-1, r1.length()-i);
        }
        return r2;
        
    }
    
    public static void main(String[] args) {
        
        Sayi deneme = new Sayi("134125", 6);
        System.out.println(deneme.onluk());
        System.out.println(Sayi.taban(987652, 2));
    }
}

Sorunun tamamı bu kadar değil de, bu kısımdan sonrası ıvır zıvır. Sınavda yaptım bu soruyu aslında da, muhtemelen bir sürü yanlışım çıkacaktır(yeterince detaylı incelenirse, hatta belki de kodum derlenemez bile).

Kağıt-kalem olduğumuz bu programlama sınavından öğrenilenler:

Ekleme

Sınavdan birkaç dakika önce ‘ya çıkarsa’ diye bir arkadaşla yazdığımız, bir matrisin karesini alan kod:

public class MatrisDeneme {
    
    public static void main(String[] args) {
        
        int[][] matris ={{3, 5, 9},
                         {5, 6, 1},
                         {6, 8, 10}};
        
        int[][] yeni ={{0, 0, 0},
                        {0, 0, 0},
                        {0, 0, 0}};
            
        if (matris.length != matris[^0]length) {
            // yapilamaz
        } else {
            for (int i = 0; i < matris.length; i++) {
                // 0 1 2
                for (int j = 0; j < matris.length; j++) {
                    // 00 01 02 10 11 12 20 21 22
                    for (int k = 0; k < matris.length; k++) {
                        yeni[i][j] += matris[k][j]*matris[j][k];
                    }
                }
            }
        }
        
        System.out.println(yeni[^2]2]);
        System.out.println(yeni[^0]1]);
    }

}