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++) {
Integer.parseInt(this.s.substring(i, i+1)) * Math.pow(d, this.s.length()-i-1);
r +=
}
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++) {
substring(r1.length()-i-1, r1.length()-i);
r2 += r1.
}return r2;
}
public static void main(String[] args) {
new Sayi("134125", 6);
Sayi deneme = 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:
Java’da String’lerle intler birbirlerine eklenebiliyor(concatenate yani, String’in yanına int’i String’e çevirerek ekleme). Sınavda int’i String’e çevirmeyi bulamadığım için eklenebildikleirini varsayarak yapmıştım. Gerçekten de öyleymiş.
this
kelimesi tam olarak Python’daki self
e eşit değilmiş. Hala çözemedim tam olarak ama, bununla alakalı bir yazı yazacağım.
Kodu izlemek çok zor bir olay(değişkenlerin değerleri, ekrana yazdırılanlar vs). Scope, class ve instance değişkenlerinin özelliklerini vs. çok iyi bilmek gerekiyor. this
e Python’daki self
muamelesi yaptım, bakalım sonuç ne olacak.
IDLE, ipython gibi araçlardan mıdır nedir, test etmeden hiçbir şeyi düzgün yazamadığımı farkettim. Python’da ne zaman bir şeyden emin olmasam test ederek doğru yolu buluyordum. Java’da bu çok daha zor olduğundan, hatta kağıt kalem ile imkansız olduğundan, zor anlar yaşadım diyebiliriz.
Yine sanırım eski alışkanlıklardan, kodu okuyup takip etmek yerine, merak ettiğin yerlere print’ler yerleştirerek kodu takip ettiğimden, kağıt üzerinde etkili olamadım(?!) diyebilirim. Çok sinir bozucu bir iş.
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]);
}
}