İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ AD SOYAD : TESLİM TARİHİ : OKUL NO : TESLİM SÜRESİ : 1 hafta Ödev No : 5 1. ve 2. sorular sayfa çıktıları üzerinde el ile çözümleme yapılacaktır. Ekran çıktıları hesaplanarak altlardaki boşluklara yazılacaktır. 3. soru araştırma ödevi olup çalışma şeklinin anlatıldığı şekilsel anlatım el yazısı ile, kodlar ise lab da ECLIPSE ortamında teslim edilecektir. Uygulama programları olan 4. ve 5. soruları ise ECLIPSE editöründe kodlanarak laboratuvar dersinde laboratuvar görevlisi asistanlara sunulacaktır. 1- Aşağıda statik metod ve değişkenlerle ilgili verilen kod parçaları çalıştığında oluşacak ekran çıktılarını altlarındaki boşluğa çözümleme yaparak el yazısı ile doldurunuz. Eğer kodlarda Hata varsa alttaki boşluğa ok işareti ile hatalı satırı göstererek doğrusunu yazınız. Eksik satır varsa ok işareti ile hangi aralığa nereye ekleneceğini göstererek alttaki boşluğa eklenmesi gereken satırı ekleyiniz. Hatalar düzeltildikten sonraki ekran çıktısını yazınız. class Languages { class Difference { display(); static void display() { System.out.println("JAVA favori programlama dilim"); t.display(); Difference t = new Difference(); show(); static void display() { System.out.println("Programlama yapmak harika"); void show(){ System.out.println("JAVA harika bir dil"); class StaticBlock { System.out.println("Ana metod devrede"); static { System.out.println("ilk Statik bloklar çalışır"); System.out.println(" kullanıyorsunuz"); static { String os = System.getenv("OS");//DİKKAT!! System.out.print("işletim sistemi olarak " + os); public static int abs(int x) { if (x < 0) return -x; else return x; System.out.println(fr.abs(-5)); fre fr = new fre(); System.out.println(fr.abs((int)-5.4)); public static int abs(int x) { if (x < 0) return -x; else return x; public double abs(double x) { if (x < 0) return -x; else return x; System.out.println(abs(-54)); fre fr = new fre(); System.out.println(abs(-521.412));
public static boolean asalsayimi(int N) { if (N < 2) return false; for (int i = 2; i <= N / i; i++) if (N % i == 0) return false; return true; int N=6; if(asalsayimi(n)) System.out.print(N+" asal bir sayıdır.."); else System.out.print(N+" asal değildir"); public static int max3(int a, int b, int c) { int max = a; if (b > max) max = b; if (c > max) max = c; return max; public static double max3(double a,double b,double c){ double max = a; if (b > max) max = b; if (c > max) max = c; return max; System.out.println(max3(4, 7, 1)); System.out.println(max3(4.0, 6.6, 9.1)); public static String duplicate(string s) { String t = s + s; return t; String s = "Merhaba "; s = duplicate(s); String t = "Bay "; t = duplicate(duplicate(duplicate(t))); System.out.println(s + t); int count = 0; public void increment() { count++; fre obj1 = new fre(); fre obj2 = new fre(); obj1.increment(); obj2.increment(); System.out.println("Obj1in sayısı= " + obj1.count); System.out.println("Obj2nin sayısı= " + obj2.count); int count = 0; public static int increment() { return count++; System.out.println("count= " +increment()); System.out.println("count= " +increment()); static int count = 0; int sayi = 8; public int increment(int sayi) { this.sayi += sayi; return count++; fre obj1 = new fre(); fre obj2 = new fre(); System.out.println("count= " + obj1.increment(4)); System.out.println("sayi= " + obj1.sayi); System.out.println("count= " + obj2.increment(2)); System.out.println("sayi= " + obj2.sayi);
static int num; static String mystr; static { System.out.println("Static Block 1"); num = 68; mystr = "Block1"; static { System.out.println("Static Block 2"); num = 98; mystr = "Block2"; System.out.println("num'ın değeri= " + num); System.out.println("myStr'nin değeri= " + mystr); static int i; static String s; fre obj = new fre(); obj.i++; obj.s = "merhaba "; System.out.println("i: " + obj.i); System.out.println("s: " + obj.s); i++; s += "arkadas"; System.out.println("i: " + i); System.out.println("s: " + s); int i = 5; String s = "JAVA çok harika bir dil"; static void display() { System.out.println("i: " + i); System.out.println("s: " + s); static int count = 0; int sayi = 8; public static int foob(int sayi) { count += sayi; return count++; display(); count++; fre obj1 = new fre(); fre obj2 = new fre(); System.out.println("count= " + foob(4)); System.out.println("sayi= " + obj1.sayi); System.out.println("count= " + foob(2)); System.out.println("sayi= " + obj2.sayi); 2- Aşağıda JAVA da değişken dizileri, nesne dizileri ile ilgili verilen kod parçalarını el yordamı ile çözerek altlarındaki boşluklara alınması gereken ekran çıktılarını alınız. String[][] isimler = { { "Mr. ", "Mrs. ", "Ms. ", { "Smith", "Jones" ; System.out.println(isimler[0][0] + isimler[1][0]); System.out.println(isimler[0][2] + isimler[1][1]); char[] cpyden = { 'd', 'e', 'k', 'a', 'h', 'v', 'e', 'i', 'n', 'a', 't', 'e', 'd' ; char[] cpy = new char[7]; System.arraycopy(cpyden, 2, cpy, 2, 5); System.out.println(new String(cpy));
int[] intdizi = new int[3]; intdizi[0] = 1; intdizi[1] = 2; intdizi[2] = 3; for (int i = 0; i<intdizi.length; i++) { System.out.println(intDizi[i]); int[] intdizi = new int[3]; intdizi[0] = 1; intdizi[1] = 2; intdizi[2] = 3; int i=0; while(i < intdizi.length) { System.out.println(++intDizi[i++]); int[] intdizi = new int[3]; int dizi[]={5, 6, 7, 8; intdizi[0] = 1; intdizi[1] = 2; intdizi[2] = 3; int i=0; dizi=intdizi; while(i < dizi.length) { System.out.println(dizi[i++]); static String[] strdizi; String dizi[]={"java ","çok ","harika ","bir ","dildir"; int i=0; strdizi=dizi; while(i < strdizi.length) { System.out.println(strDizi[i++]); int[] a = { 1, 2, 3 ; int[] b = { 1, 2, 3 ; if(a == b) System.out.println("Eşit"); else System.out.println("Eşit değil"); static String[] strdizi; int[] a = { 1, 2, 3 ; int[] b = { 1, 2, 3 ; int N=a.length; for (int j = 0; j < N; j++) System.out.println(++b[--a[j]]); static int fool(int[] val) { int mi = 0; for (int i = 1; i < val.length; i++) { if (val[i] < val[mi]) { mi = i; return mi; int Z[] = { 5, 2, 6, 1 ; System.out.print(fool(Z)+Z[0]); public int sool(int[] noos, int toot) { for (int i = 0; i < noos.length; i++) { if (noos[i] == toot) return i; return -1; int Z[] = new int[]{ 4, 6, 2, 8, 7, 0 ; JavaArray ja = new JavaArray(); System.out.print(ja.sool(Z, 5));
class Calisan { int id; String isim; public void setdata(int id, String isim) { this.id = id; this.isim = isim; public void displaydata() { System.out.println("Calisan ID : " + this.id); System.out.println("Calisan İsmi : " + this.isim); Calisan[] emp = new Calisan[2]; emp[0]=new Calisan(); emp[1]=new Calisan(); emp[0].setdata(1, "ABC"); emp[1].setdata(2, "XYZ"); emp[0].displaydata(); emp[1].displaydata(); class Calisan { int id; String isim; public Calisan(){ System.out.println("yeni bir çalışan oluşturuldu.."); int N=5; Calisan[] emp = new Calisan[N]; for(int i=0;i<n;i++) emp[i]=new Calisan(); class Calisan { int id; String isim; class Calisan { int id; String isim; public Calisan(int i){ System.out.println(i +". yeni çalışan oluşturuldu"); int N=5; Calisan[] emp = new Calisan[N]; for(int i=0; i<emp.length; i++) emp[i] = new Calisan(i); public Calisan(int id) { this.id = id; System.out.println(id + " id'li çalışan oluşturuldu"); int N = 5; Calisan[] emp = new Calisan[] { new Calisan(5), new Calisan(14), new Calisan(50) ; int suit, rank; String objn; public JavaArray() { this.suit = 0; this.rank = 0; System.out.println("parametresiz yapılandırıcı"); public JavaArray(int suit, int rank) { this.suit = suit; this.rank = rank; System.out.println("2 parametreli yapılandırıcı"); JavaArray ja1[] = new JavaArray[] { new JavaArray(), new JavaArray(1, 3), new JavaArray(), new JavaArray(3, 5) ; public JavaArray(String objn) { this.objn = objn; System.out.println(objN +" isimli nesne üretildi"); String[] suits = { "JAVA", "C#", "Delphi", "C++" ; JavaArray ja1[] = new JavaArray[suits.length]; for (int i=0;i<ja1.length;i++) ja1[i]=new JavaArray(suits[i]);
String objn; String objn; public JavaArray(String objn) { this.objn = objn; String getobjname(javaarray ja) { return ja.objn; void yazdir(string N){ System.out.println(N); String[] ss={"java","c#","delphi","c++"; JavaArray ja1[] = new JavaArray[ss.length]; for (int i = 0; i < ja1.length; i++) { ja1[i] = new JavaArray(suits[i]); ja1[i].yazdir(ja1[i].getobjname(ja1[i])); public JavaArray(String objn) { this.objn = objn; System.out.println(objN +" yazılım platformu"); String[] ss ={"JAVA","C#","Delphi","C++"; JavaArray ja1[] = new JavaArray[ss.length]; JavaArray ja2[] = ja1; for (int i = 0; i < ja2.length; i++) ja2[i] = new JavaArray(ss[i]); 3- ARAŞTIRMA ÖDEVİ: 8 VEZİR PROBLEMİ Bu araştırmada, 8 vezir problemini daha önce verilmiş olan araştırma ödevlerinden Back Tracing algoritması ile çözümü yapılacaktır. İnternet ortamında 8 vezir problemini Back Tracing algoritması ve permutasyon yöntemi ile çözen JAVA kodlarını araştırıp ECLIPSE editöründe kodlayınız. Yazılan kodları dikkatli bir şekilde inceleyiniz. Kodun hangi parçasının ne amaç ile yazıldığını anlayınız. Programın genel çalışma şeklini şekilsel olarak modelleyerek çiziniz. KLASİK 8 VEZİR PROBLEMİ: 8 veziri bir 8x8 satranç tahtası üzerinde iki vezir aynı satır, sütun veya çapraz gelmeyecek şekilde (vezirler birbirini yemeyecek şekilde..) yerleştirilmesini sağlama problemidir. İki vezirin aynı satır veya sütunda yer alamayacağı 8! = 40.320 ihtimal vardır. Back tracing algoritması ve permutasyon uygulaması ile her bir satıra (0-7) arasındaki en uygun yerleşim seçilir. ÖRNEK EKRAN ÇIKTISI: * * * V * * * * * * * * V * * * * V * * * * * * * V * * * * * * * * * * * * V * * * * V * * * * * * V * * * * * * * * * * * V * * * * * * V * * * * V * * * * * * * * * * * * V * * * * * * * V * * * * V * * * * * * * * V * * V * * * * * * * V * * * * * * * Bu uygulama kodları laboratuvar dersinde incelenecek ve sorular sorulacaktır. Kodlar çıktı alınmayacak sadece ECLIPSE ortamında olacaktır. Kodların çalışma mekanizmasını anlatan çizimler laboratuvar günü teslim edilecektir.
4- YAPAY SİNİR HÜCRESİ TASARIMI 2: Daha önceki YSH probleminde 4 girişli bir Yapay Sinir Hücresinin tasarımını yapılmıştı. Bu uygulamada ise girdi sayısı ve ağırlıkları sınırsız olan bir çok girişli YSH sınıfı yazılacaktır. Bu sınıf kendisine parametre olarak verilen istenen büyüklükteki girdileri ve ağırlıklarını alarak gerekli çıktıyı üretmesi gerekmektedir. Yazılması tavsiye edilen yordamlar ANA KOD GÖVDESİ kısmında verilmiş ayrıca UML diyagramıyla da sınıf yapısı modellenmiştir. Sınıfın çalıştığını anlamak için, Ana Kod Gövdesindeki main metodu çalıştığında programın İSTENEN EKRAN ÇIKTILARI üretmesi gerekmektedir. KISA TANITIM YAPAY SİNİR AĞLARI (YSA) (Artificial Neural Network (ANN)) Yapay Sinir Ağları (YSA) insan beyninin özelliklerinden olan öğrenme yolu ile yeni bilgiler türetebilme, yeni bilgiler oluşturabilme ve keşfedebilme gibi yetenekleri herhangi bir yardım almadan otomatik olarak gerçekleştirmek amacı ile geliştirilen bilgisayar sistemleridir. Bu yetenekleri klasik programlama yöntemleri ile gerçekleştirmek oldukça zor veya mümkün değildir. O nedenle Yapay Sinir Ağları programlaması çok zor veya mümkün olmayan olaylar için geliştirilmiş bir bilgisayar bilim dalıdır. YAPAY SİNİR HÜCRESİ (YSH) Biyolojik Sinir Sistemleri sinir hücrelerinden oluşması gibi Yapay Sinir Ağları da Yapay Sinir Hücrelerinden meydana gelir. YSH nin genel yapısı şekil-1 de verilmiştir. YSH 5 temel elemandan oluşur. Bunlar Girdiler, Ağırlıklar, Toplama Fonksiyonu (NET), Aktivasyon Fonksiyonu (F(NET)) ve Çıktıdır. Girdiler: YSH ne dış dünyadan gelen bilgilerdir. Ağırlıklar: Bir yapay hücreye gelen bilginin önemini ve hücre üzerinde etkisini gösterir. Ağırlık 1, Girdi 1 in hücre üzerindeki etkisini gösterir. Toplama Fonksiyonu (NET()): bu fonksiyon hücreye gelen net bilgiyi hesaplar. Bu işlemi ağırlıklı toplamı bularak yapar. Bu metot; her gelen Girdiyi kendi Ağırlığı ile çarparak toplama yöntemi ile elde edilir. (, ) = G i : i. girdi değeri A i : i. girdiye ait ağırlık n: toplam girdi adedi Aktivasyon Fonksiyonu (F(NET)): Bu fonksiyon, hücreye gelen net girdiyi işleyerek hücrenin girdilere karşılık üreteceği çıktıyı hesaplar. En yaygın kullanılan aktivasyon fonksiyonu Sigmoid Fonksiyonudur: ( ) = + Girdi 1 Ağırlık 1 Girdi 2 Ağırlık 2 Girdi 3 Ağırlık 3 Girdi 4 Ağırlık 4 Toplama Fonksiyonu (NET) NET Aktivasyon Fonksiyonu F(NET) Çıktı g1=0.5 a1= - 0.2 g2=0.6 a2=0.6 g3=0.2 a3=0.2 g4=0.7 a4= - 0.1 NET(g,a)=0.23 NET F(NET) Çıktı=0.56 Şekil-1: YSH genel yapısı NET= 0.5* -0.2 + 0.6*0.6 + 0.2*0.2 + 0.7* -0.1 NET= 0.23 ( ) = +. =. Şekil-2: Bir YSH çalışma örneği
ÇOK GİRİŞLİ YAPAY SİNİR HÜCRESİ SINIFI (public class YSH_MultiInput) UML DİYAGRAMI + girdiler: double[] + agirliklar: double[] YSH_MultiInput + YSH_MultiInput(girdiler: double[], agirliklar :double[]) + NET(): double + F(NET: double): double ANA KOD GÖVDESİ: public class YSH_MultiInput { double girdiler[];// çok girişli YSH için girdi dizisi double agirliklar[];// çok girişli YSH girdilerine ait ağırlık değerleri dizisi public YSH_MultiInput(double girdiler[], double agirliklar[]) { // 1- yukarıda referans olarak açılan girdi ve ağırlık dizileriburada gereken boyutla oluşturulmalıdır // 2- Yapılandırıcı içerisinde dışarıdan gelen girdi ve ağırlık dizileri // sınıfın girdi ve ağırlıklarına yüklenmelidir double NET() { // verilen NET toplama fonksiyonu ile tüm girdi ve ağırlıkları için NET çıkışı hesaplanmalı // sonuç geri döndürülmelidir double NET = 0; return NET; double F(double NET) { // NET() fonksiyonunda elde edilen NET değeri ile // F(NET) hesabı sigmoid fonksiyonuna göre hesaplanmalı // ve değer döndürülmelidir // YSH sınıfına Girdi ve Ağırlıkları gönderilmektedir double girdiler[] = { 0.5, 0.6, 0.2, 0.7 ; double agirliklar[] = { -0.2, 0.6, 0.2, -0.1 ; YSH_MultiInput ysh_mi = new YSH_MultiInput(girdiler, agirliklar); double NET = ysh_mi.net(); System.out.println("NET(g,a)= " + NET); System.out.print("F(NET)= " + ysh_mi.f(net)); İSTENEN EKRAN ÇIKTILARI: NET(g,a)= 0.23000000000000004 F(NET)= 0.5572478545985556
5- Bu uygulamada bir dizi büyütme sınıfı (public class MatrisBuyutme) yazılacaktır. Bu sınıfa ait UML sınıf diyagramı ve ANA KOD BLOĞU aşağıda verilmiştir. Sınıfın yapacağı işlem aşağıdaki şekilsel gösterimde anlatılmıştır. Mainde verilen örnek girdiye göre; 3x3 lük bir matris ve 2 kat büyütüleceği sınıf yapılandırıcısına girdi olarak verilmiş ve oluşan ekran çıktısı aşağıda verilmiştir. Bu işlemi yerine getirmesi için yazılması tavsiye edilen yordam ve sınıf değişkenleri UML diyagramında gösterilmiştir. Bu ekran çıktısını sağlayacak programı JAVA dilinde kodlayınız ve ECLIPSE platformunda çalışır hale getiriniz. MATRİS BÜYÜTME ŞEKİLSEL GÖSTERİM 5 3 2 4 x 2 5 3 2 4 5 5 3 3 5 5 3 3 2 2 4 4 2 2 4 4 2 x 2 matris 2 x 2 lik matrisi 2 kat büyüt büyük matrisi doldur BÜYÜK MATRİSE DEĞER YERLEŞTİRME (buyukmatriseyerlestir()) İÇİN BAZI YÖNTEMLER 1- satır satır tarama yaparken kat değeri adet gelen matrisin her hücresi büyük matrise kopyalanabilir. Bu işlem kat kadar sütuna uygulanır. 2- sutun sutun tarama yaparak kat değeri adet gelen matrisin her hücresi büyük matrise kopyalanabilir. Bu işlem kat kadar satıra uygulanır. (tavsiye edilen uygulama yöntemi) MATRİS BÜYÜTME SINIFI UML DİYAGRAMI MatrisBuyutme + gelenmatris: int[][] + buyukmatris: int[][] + MatrisBuyutme(gelenMatris : int[][], kat: int) + buyukmatriseyerlestir() : void + matrisyazdir(matris : int[][]): static void ANA KOD BLOĞU public class MatrisBuyutme { //sınıf değişkenlerinin referansları oluşturuluyor int[][] gelenmatris; int[][] buyukmatris; int kat; public MatrisBuyutme(int[][] gelenmatris, int kat) { //yapılandırıcı içerisinde referans sınıf değişkenleri parametre olarak gelen değişkenlerin büyüklüğüne göre oluşturulacak //gelen matrisin referansı sınıfa ait gelen matris referansına bağlanacak //buyuk matris için gelen matris x 2 katlık yeni matris oluşturulacak
void buyukmatriseyerlestir() { //oluştutulan büyük matrisin içerisinin gelen matris değerlerine göre doldurulması burada yapılacaktır. //bu doldurma işlemi çok farklı yöntemlerle yapılabilir public static void matrisyazdir(int[][] matris) { // herhangi bir n x m lik matrisi matris formatına uygun olarak ekrana basar int[][] a = new int[][] { { 1, 2, 3, { 4, 5, 6, { 1, 4, 2 ; MatrisBuyutme mb = new MatrisBuyutme(a, 2); mb.buyukmatriseyerlestir(); matrisyazdir(mb.buyukmatris); ÖRNEK GİRDİ İÇİN ALINAN EKRAN ÇIKTISI: 1 1 2 2 3 3 1 1 2 2 3 3 1 1 2 2 3 3 4 4 5 5 6 6 4 4 5 5 6 6 4 4 5 5 6 6