30 Aralık 2011 Cuma

Sensin Salak!

Burayı ihmal ettim, javayı ihmal ettim. Ve yine yeni yeniden bir sınava birkaç gün kala. Hoş değil java'nın bu oyunları.
Geçen java labında asistan, "java for dummies" (salaklar için java) diye internette yardımcı siteler bulabilirsiniz dedi. Salaklar için java ve ben gittikçe salaklaşıyorum. Bu yazı da çok salak oldu ayrıca.

14 Aralık 2011 Çarşamba

sizi java'yla tanıştırmama izin verin sayın kediseverler.

 Java nedir? Bu aralar hayatımın temel soru ve sorunlarından biri.

Java bir object-oriented programlama dilidir. Programlama methodolojisine göre, bir program birbirleriyle methodlar yardımıyla etkileşim içinde olan objelerden meydana gelmiştir. Aynı tür objeler, aynı class içinde bulunurlar. Java'da bütün yapılar classların bir parçasıdır. Her java programı en azından bir class'a sahiptir. Her bir class, methodları ve datayı tanımlayan yapılardır. Methodlar ise, komutları(statement) içeren yapılardır. Bütün java uygulama programları main methodla başlar.

 Evet söz uçar, yazı kalır; ama bu yazı pek akılda kalır değil.

public class deneme_sesbirki {
       
    /**
     * Creates a new instance of <code>deneme_sesbirki</code>.
     */
    public deneme_sesbirki() {
    }
   
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    }

En başta gördüğünüz "deneme_sesbirki" class'ın yani programın adı. main(String[]args) ise main method'umuz. Komutları bu kısmın içine yazacağız. Aradaki açıklamalara takılmayın.

System.out.println Bu en başta kafa karıştıran kelimeler bütünü, aslında candır, canandır. Bu komut, yazdığınız programın dili olur, sesi olur, bülbül gibi şakıtır programı. 

System.out, ekrana outpu göndermemizi sağlayan bir objedir. Objelerden tarafından gerçekleştirilen işlere, method denir. Println, System.out objesinin gerçekleştirdiği iştir/methoddur.

Java'da Değişken Tanımlama

Java'da dğeişken tanımlamak için, önce o değişkenin türünü, sonra adını belirtmeniz lazım. = bu arkadaş, değişken atama/belirleme operatorü olarak kullanılır. +'nın ise iki tür kullanımı var. 1.si iki iki dört eder'deki kullanımı, 2.si ise concatenation yani herhangi iki değişkeni yanyana yazmamızı sağlamasıdır.

Kod:? Gizemli duruşuna bakmayın yahu. Kod dediğin, şu dünyada bir program veya o bile değil, bir program parçasıdır.
Source Code daha bir mağrur durur. Java gibi high-level programlama dillerinde yazılan kodlardır. Compiler programların inputları olurlar.

Class
Java programları, class denilen küçük parçalara bölünmüşlerdir. Her class, farklı dosyalardadır ve ayrı olarak derlenirler. Her class tanımı, class'ın adıyla aynı adda ve .java ile biten bir dosyada olmalıdır.

Hasılı nerdeee Matlab'ın printf'i, disp'i, nerdee Java'nın system.out.println'i. Nerde Matlab'ın o değişkenin türünü kendi anlayan üstün zekası, nerde Java'nın küstahlığı. Evet kediseverler, bu java. Java, bunlar da kediseverler. Java sizinle tanıştığına memnun olmuş. Ya siz?

12 Aralık 2011 Pazartesi

Java Age Finder/Yaş Bulma Kodu

 Topu topu 5 puanlık performans notunun yüzde bilmem kaçını etkileyecek, belki de hiç etkilemeyecek bir ödev için saatlerimi harcadığıma inanamıyorum. Bu durumun en boğucu ve sinir bozucu yanı ise, insanı bir kısır döngüye itmesidir. Aptal saptal bir iş için ne kadar çok zaman harcarsanız, o kadar çok pişman olursunuz, aynı zamanda o kadar ona tutsak olursunuz. Bu kadar zaman harcadım bari harcadığıma değsin derken, bedeli ödenemeyecek şeyler yitirirsiniz. O kadar çok şey yitirirsiniz ki artık yitirdikleriniz gözünüze gelmemeye başlar ve daha çok şey yitirirsiniz. Bildiğin bataklık ve çırpındıkça batma kuralı.

 İnternetten kopyala-yapıştır-sonra üstünde biraz oyna ve özgünleştirmeye çalış olduğu için bu ödev, harcadığım onca zamana karşılık hiçbir şey öğrenemedim. Neyse en azından burada paylaşıp, birilerinin işine yarar hale getirebilirim bu ödevi. Amaç java'da doğum tarihini giren kullanıcının yaşını ve doğduğu günün haftanın hangi günü olduğunu bulan bir kod yazmaktı. Ve kod sizindir:

 Here is a little java program which takes the birthdate of the user as input and then displays his age and the weekday of his born:

import static java.util.Calendar.DATE;
import static java.util.Calendar.DAY_OF_WEEK;
import static java.util.Calendar.MONTH;
import static java.util.Calendar.YEAR;
import java.text.DateFormatSymbols;
import java.util.*;
public class agefinderrr
{
     public static void main(String[] args)
     {
      //This program get the birth date of the user as input and displays the age of the user and birthday of the user as sunday,monday etc.
      Scanner kb=new Scanner(System.in);
    System.out.print("Enter your birth year:");
      int byear=kb.nextInt();
      System.out.print("Enter your birth month:");
      int bmonth=kb.nextInt();
      System.out.print("Enter your birth day(1-31):");
      int bdate=kb.nextInt();
      GregorianCalendar birthdate = new GregorianCalendar(byear,bmonth,bdate);
      GregorianCalendar currentdate = new GregorianCalendar();
      GregorianCalendar birthday = new GregorianCalendar(currentdate.get(YEAR),birthdate.get(MONTH),birthdate.get(DATE));
      int theage = currentdate.get(currentdate.YEAR) - birthdate.get(YEAR);
      String[] brthday = new DateFormatSymbols().getWeekdays();
      System.out.println("This year you " + (birthday.after(currentdate) ? " will be " : "are ") + theage + " years old.");
      System.out.println("You were born on a " + brthday[birthdate.get(DAY_OF_WEEK)]);
     }
}

her ayrılık, özlemi yanında getirir.

Matlab'ı özlemek, evet var böyle bir şey. Matlab'ın samimiyeti, Java'nın o resmiyetiyle tanışınca burunda tüter. Yine bir kaybetmeden-değeri-anlaşılamayan vakası, yine hüzün, yine sigaramın dumanı.

25 Kasım 2011 Cuma

Matlab'ın haşin yüzü

Matlab'la yollarımızı ayırdığımız, mutluluk ve hüznü  (An itibariyle aklıma bir sorunun cevabında bir hata yaptığımı hatırlamamla hüzün kısmını daha ağır bastığını ifade etmeliyim.)  bir arada yaşadığımız şu günde, biraz açıklama yapmayı gerekli buluyorum. Bu blog, en azından matlab konusunda amacını yerine getirememiştir. Bildiklerimi bloga yazacak ve dahi bilgisayarı açacak kadar vaktim olmadığından dolayı, çırpınışlarımın yalnızca buraya yansıyan 8 posttan ibaret olmadığını bilmelisiniz sayın kediseverler. Çırptım, çırpındım, karıştırdım, sana kek yaptım .Nitekim cs hayattan önemli mi? Değil.

19 Kasım 2011 Cumartesi

":" kullanarak adresleme

Va(:), Va'nın bütün elemanları demektir.
Va(m:n) m'den n'e kadar olan elemanları
A(:,n) n. kolondaki bütün elemanları
A(n,:) n. satırdaki bütün elemanları
A(:,m:n)
A(m:n,:)
A(m:n,p:q)


A(1,2:end) 1.satır, 2.sütun'dan son sütuna kadar. (end fonksiyonu)

A(2)=5 dersen, A2nın ikinci elemanı 5 olur ki.
Daha önce belirtilen herhangi bir şekilde adresleme yaptıktan sonra, onu bir array'e eşitlediğinde, eleman değiştirme işlemi gerçekleşir.


İlginç:

d=[1,2,3;4,5,6]
d =
     1     2     3
     4     5     6

d(1:end)
ans =
     1     4     2     5     3     6


d(2,:)=[4 5 6]
d =
     1     2     3
     4     5     6

 d(2,:)=[4 5 6 7]
??? Subscripted assignment dimension mismatch.

d(2,:)= 0
d =
     1     2     3
     0     0     0

Indeks

Index: array'deki elemanları ifade etmek için kullanılan bir sayıdır.
Array'den bir değeri çağırmak için;

A=[2,13,16]

A(1,2)
ans =
    13

indeksleme 1'den başlar.


Kısa kıcacık bir özet, bir hatırlatma

() adreslemede
[] array tanımlamada kullanılır.

Built-in fonksiyonlarını kullanarak ön değer atama (initialization)

Ön değer atama için matlab fonksiyonları;

zeros(n)
zeros(n,m)

x=zeros(2)
x =
     0     0
     0     0


ones(n)
ones(n,m)

ones(2,3)
ans =
     1     1     1
     1     1     1


eye(n)     identity matrix
eye(n,m)

eye(3,4)
ans =
     1     0     0     0
     0     1     0     0
     0     0     1     0

eye(3,2)
ans =
     1     0
     0     1
     0     0

Vector Oluşturmanın Yolları

Colon Operator nedir?
colon operator   first:increment:last

x=1:2:10
x =
     1     3     5     7     9

2'yi yazmazsan(tabiki illa 2 olmak zorunda değil, aralığı belirtiyor), aralığı 1 alır.

y=0:0.5
y =
     0

Linspace (x1,x2,N) satır vektörü

x=linspace(10,20,5)
x =
   10.0000   12.5000   15.0000   17.5000   20.0000

Logspace(x1,x2,N) logaritmik olarak eşit aralıklı noktalar

N yazılmadıysa, 100 anlaşılır.

Bir array'i tanımlama

1-A=[2 13 16]

2-A=[2,13,16]

; der ki yeni bir satır geliyor.

3- B=[2,3,4;5,6,8;7 9 13]
    B =
     2     3     4
     5     6     8
     7     9    13

4-Concetanating; bir array'i  diğeri cinsinden tanımlama.

alt alta
C=[A;B]
C =
     2    13    16
     2     3     4
     5     6     8
     7     9    13

yan yana
D=[C C]
D =
     2    13    16     2    13    16
     2     3     4     2     3     4
     5     6     8     5     6     8
     7     9    13     7     9    13

Depreme Dayanıklı bir Matlab için

Bir program bir input olabilir. ">>"la başlayan command line'ı bul, başla yazmaya.
Eğer yazdığın komut'un sonuna, ";" eklersen hesaplamanın sonucu, command window'da gösterilmez.
clc dedin mi command window'a hayatına temiz bir sayfayla devam eder. clear yazarsan, workspace arkadaşımız (hani kedileri seven, bizden biri) evini siler, süpürür, bal dök yala, ne variable kalmış, ne de onun adı.

Diyleim ki gorilin biri seni kovalıyor, ne dersin "Heeeelp!!". Mesela help elfun yazdın mı sana bütün matematiksel fonksiyonları verir. Helpdesk dersin yardım ekranını açar. Ya da helpwin dersin çeşit çeşit komutları, fonksiyoları sıralar ki, ohh seç beğen al. lookfor ... yazarsın, ... nın bulunduğu bütün m. fileları, fonksiyonları arar, bulur, getirir önüne.
Demo yazarsın, sana özel öğretmen tutarlar, matlab dersi verir.

Variable(Değişken) nedir?

Bir dizi numara yahu, bakma öyle gizemli durduğuna. Adını koyar, numerik değerleri de peşine takarız ve bir variable doğar. Assignment command çalıştırmamız ile variable work spacede yerini alır. Kerata ya, sonraki cebirsel hesaplamalarımıza yardımcı olur. Aslında variable hafızadaki ayrılmış bir bölgenin yeridir. Variable ad koymanın da bir adabı vardır. Örneğin boşluk bırakıp yazamazsın iki kelimeyi, "_" koyman lazımdır. Anlamlı isimler koymak lazım ki sonra hatırlayabilelim. Numaralar, harfler ve "_" kullanılabilir. "Ha name demişim, ha Name" deme, matlab'ın gözleri keskindir. Ve her variable, bir arraydır.
single number array, scalar,
row array, row vector,
array of n rows x m columns, matrix,

Variables row ve column numarasıyla indekslenir.

Matrix'e girdim!

Bu blogun ilham kaynağı, baş belası ama bal tatlısı Matlab, 4. kuşak programlama dillerinden biridir. Matematik fonksiyonlarını ve komutlarını über yetenekleriyle birleştirir ve bize sonucu verir. Matlab'da Matlab komutlarını içeren programları(scriptleri) çalıştırır ve geliştiririz. Matlab, üst düzey bilgisayar dilleri için tanımlanmış olan formal compilation, linking/loading and execution process'leri içermez.

Önce övelim sonra kötüleriz. Şimdi bu matlab kolay kullanılır. Editor'u olsun, Debugger'ı olsun, workspace browserı ve online manualları olsun, hepsi hizmetimizdedir. Sonra platform independence'ı vardır. Yanisi, hangi platform'da yazarsan yaz, bütün platformlarda çalışır (platform'dan neyi kastettiğimden emin değilim, emin olmadığımdan da emin değilim). Sonra önceden tanımlanmış fonksiyonları kullanmamıza izin verir. Son olarak diyelim sin 30'u çizceksin, uğraşma kardeşim gel yaz matlab'a o yüzden milisaniyede.

Dedikodu zamanı; bu matlab var ya bazen işi öyle ağırdan alır ki, sabırsız bünyelere işkencede kullanılabilir. Ama bir sorun bakalım nden yavaşsın diye. Şimdi programlar aletden bağımsız bir p coduna derlendikleri için ve bu p codu program çalıştırıldığında çevrildiği için, programların çalışması yavaş olur. Ayrıca bu matlab kendini bulunmaz hint kumaşı sanır, öğrenci edition'ı bile cep yakar. (Torrent!!)

Matlab'ın iç yüzü

Command Window denilen ortadaki boşluk, komutları yazdıkça dolar, dolar, kimi zaman hata verir, üzer, şaşırtır, kızdırır, kimi zaman umutsuzca yazılan bir komutun çalışmasıyla neşeye boğar, sizi kucaklar.

Command History dediğin var ya hiç unutmaz, asla affetmez.

Workspace tanımladığın değerleri, minleri ve maxları, isimlerini (yanında ne olduğunu gösteren sembolüyle) biriktirir, sen değiştir dedin mi değiştirir, uysal bir tiptir, kedileri sever.

Current Folder başlığı altında yazdığın scriptlerden fonksiyonlara kadar ne varsa başlığıyla sıralanır ki, canın istediğinde bir tıkla açabilesin.

Programlamaya giriş niteliğinde pek önemli ders

Programlama belirli bir problemi çözmek için bir nevi araç oluşturma işlemidir.

Main memory, aktif olarak kullanılan programların ve verilerin depolandığı birincil depolama alanına denir. Bildiğin RAM'dır bilesin, aklın hard diske gitmesin.

CPU: gizemli duruşlu bu üçlü program emirlerini yürüten chip'dir. Bildiğin işlemci, Intel Pentium 4 gibi. Dur bakiyim benimki neymiş; Intel Core Duo.

Operating System (bildiğin işletim sistemi yahu (mesela mesela; Windows XP veya 2000, Unix, Linux, Mac OS)), makinede yaptığımız bütün aktiviteleri kontrol eder. Kullanıcı arayüzü sağlar. Main memory ve CPU'yu gibi kaynakları yönetir.

Şimdi de Software Tools'dan bahsedelim. Bunlar; spesifik proglemleri çözmek için oluşturulmuş ticari programlardır.
1-Word Processors: yazı ve grafik girmenizi, düzenlemenizi sağlayan programlardır. Microsoft Word gibi. Şu anda da bir yazı girdiğime göre, blogger'da da bir word processor kullanılmış demektir. (devbirkedinin bilgisayar bilgisi kendi işini görecek kadardır. Lütfen ahkam kesmelerine aldırış etmeyiniz.)

2-Spreadsheets: Çizim kabiliyeti ile yardımcı olur bizlere.

3-Database Management Programs: Büyük miktardaki verileri, saklamak, kolayca geri almak, incelemek ve biçimlendirmek için kullanılan programlar, Access, ORacle, MySQL gibi.

Ve son olarak, 4-Computer-aided desing(CAD) packages: Gerçek dünyada objelerin bilgisayar modellerini tanımlamanızı sağlar ve genelde mühendislik uygulamaları için kullanılır.
İtiraf ediyorum: tam anlamıyla anladığım yalnızca Word Processors oldu. Biliyorum yalnız değilim.

Bilgisayar  numaralarda, yazılara, grafiklerden videolara bütün bilgileri saklıyor. Peki ama nasıl?
Bütün bilgiler dijitalleştirilmiş(sayısallaştırılmış) şekilde, parçalara bölünür ve numaralar olarak temsil edilir. Bilgiler sayısallaştırıldıktan sonra, Binary Number System kullanılarak hafızada saklanır. Bir binary digit'e bit denir. Bir bit ya 1 ya da 0'dır. Bitlerin permütasyonu değerleri saklamak için kullanılır. Her bir bit permütasyonu, belirli  bir şeyi temsil eder. N bits, 2 üzeri N ögeyi temsil eder.
Main memory yani RAM, birçok hafıza hücresine bölünmüştür. Her hafıza hücresi, tamamen onun olan, yalnızca onu tanımlayan numerik bir adrese sahiptir. Her hafıza hücresi(memory cell), genellikle 8 bit'i (1 byte) saklar. Yüksek değerler, ard arda gelen hafıza bölümlerinde saklanır.

Verileri saklamak ve yönetmek için iki yol vardır; Analog ve Digital.
Digital saklama yönteminde, bilgi parçalara bölünür ve her parça yarı şekilde ifade edilir. Boşluklar, basamaklar ve noktalama işaretleri dahil her karakter bir sayı olarak saklanır.

Son olarak bilgisayar dilinden bahsedeceğiz. Program dilleri, programcının bilgisayardan istenilen şeyi bilgisayarın anlayacağı şekilde anlatmasını sağlar. Program dillerinin gücü, açıklığı ve farklı işlemciler tarafından kullanılabilirliği (portability) önemlidir. Her tür işlemci (CPU) kendi özel makine diline sahiptir. Bir işlemci türünde bir programın çalıştırılabilmesi için, onun makine diline çevrilmesi lazımdır. Bu işlem çeşitli şekillerde yapıalbilir. Mesela mesela compiler denilen bir program kullanırız. Bu program, kaynak kodu, hedef dile çevirir ki bu hedef dil genellikle belirli bir işlemci türünün makine dilidir.

Bir dilin syntax kuralları, bizim sembolleri, kelimeleri ve belirteçleri (identifiers) nasıl yazacağımızı belirler. Bir program ifadesinin Semantics'i ise, o ifadenin programdaki amacını veya rolünü ifade eder. Bir program syntactically doğru olabilir ama bu onun mantıksal olarak yani semantically doğru olduğunu göstermez. Yanisi, bir program bizim dediğimizi yapar, ne demek istediğimizi değil.

Her son olarak dediğinde bil ki o son olmayabilir. Programlar 3 tip error verirler.
1- Syntax hataları (veya diğer temel problemler compile-time errors gibi) Şekilsel hatalar yani. Üstündeki giydiğin eteğe yakışmamış gibi bir durum.
2- Programı çalıştırırken bir problem oluşabilir. Örneğin 0'a bölmeyi deneme programın anormal bir şekilde sonlanmasına sebep olur.  (run-time errors.)
3-Program çalışabilir ama yanlış sonuçlar üretir. Bunun sebebi yanlış formül kullanma olabilir. (logical errors)

Buraya kadar dayanabildiysen okur, seni yerime sınava sokmayı düşünüyorum, haberin ola!