İ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İ : 2 hafta Ödev No : 8 1. ve 2. soruların sayfa çıktıları üzerinde el ile çözümleme yapılacaktır. Ekran çıktıları hesaplanarak altlardaki boşluklara yazılacaktır. Uygulama programları olan 3. Soru ise laboratuvarda kontrol edilmeyecek ödev teslim mailine mail yoluyla gönderilecektir. 4. Sorunun UML diyagramı 1. 2. Soru gibi elden teslim edilecek kodlanan sınıflar ise 3. Sorudaki gibi ECLIPSE editöründe kodlanarak mail yolu iödev teslim e-postasına gönderilecektir. 1- Aşağıda kalıtım ve override işlemleri ile ilgili JAVA kodları verilmiştir. Bu kodları el yordamı ile çözerek çıktılarını altlarına yazınız. class Vehicle { public void move() { System.out.println("araç kullan"); class Car extends Vehicle { public void move() { super.move(); System.out.println("otomobil kullan"); public static void main(string[] args) { Vehicle b = new Car(); b.move(); class X { public void methoda() { System.out.println("X sınıfı metodu"); public void metodb() { System.out.println("X sınıfı B metodu"); class Y extends X { public void methoda() { System.out.println("Y sınıfı metodu"); X obj1 = new X(); Y obj2 = new Y(); obj1.methoda(); obj2.methoda(); obj1.metodb(); obj2.metodb(); class A { public A() { System.out.println("New A"); class B extends A { public B() { super(); System.out.println("New B"); public static void main(string[] args) { B b = new B(); class Animal { public Animal() { System.out.println("yeni hayvan oluşturuldu!"); public void sleep() { System.out.println("hayvanlar uyur"); public void eat() { System.out.println("hayvanlar yer"); class Bird extends Animal { public Bird() { super(); System.out.println("yeni kuş oluşturuldu"); public void sleep() { System.out.println("kuşlar uyur"); public static void main(string[] args) { Animal animal = new Animal(); Bird bird = new Bird(); animal.sleep(); animal.eat(); bird.sleep(); bird.eat();
class Hayvan { public Hayvan() { System.out.println("yeni bir hayvan oluştu"); public void uyu() { System.out.println("hayvanlar uyur"); public void ye() { System.out.println("hayvanlar yer"); class Kopek extends Hayvan { public Kopek() { super(); System.out.println("yeni bir kökek oluştu"); public void uyu() { System.out.println("köpek uyuyor"); public void ye() { System.out.println("köpek yiyiyor"); class Kangal extends Kopek { public Kangal() { super(); System.out.println("KANGAL türü köpek oluştu"); public void cobanlikyap() { System.out.println("KANGAL çobanlık yapıyor"); public static void main(string[] args) { Kangal kangal = new Kangal(); kangal.uyu(); kangal.ye(); kangal.cobanlikyap(); class KontrolMerkezi { public static void checkup(sporcu s) { s.calis(); class Sporcu { System.out.println("Sporcu.calis()"); public class Futbolcu extends Sporcu { System.out.println("Futbolcu.calis()"); Sporcu s = new Sporcu(); Futbolcu f = new Futbolcu(); KontrolMerkezi.checkUp(s); KontrolMerkezi.checkUp(f); class Worker { public void work(double a) { System.out.println("Worker.work()"); class Manager extends Worker { public void work(int a) { // adas yordam (overloaded) System.out.println("Manager.work()"); class XX { public XX(int par) { System.out.println("XX Yapilandiricisi " + par); class YY extends XX { public YY(int par) { super(par + 1); System.out.println("YY Yapilandiricisi " + par);
Manager m = new Manager(); m.work(3.3); m.work(2); class ZZ extends YY { public ZZ(int par) { super(par + 1); System.out.println("ZZ Yapilandiricisi " + par); ZZ zz = new ZZ(5); class Animal { class Mammal extends Animal { class Reptile extends Animal { class Dog extends Mammal { Animal a = new Animal(); Mammal m = new Mammal(); Dog d = new Dog(); System.out.println(m instanceof Animal); System.out.println(d instanceof Mammal); System.out.println(d instanceof Animal); class X { public void methodx() { System.out.println("X sınıf methodu"); class Y extends X { public void methody() { System.out.println("Y sınıf methodu"); public class Kalitim extends Y { public void methodz() { System.out.println("Kalıtım sınıf methodu"); Kalitim obj = new Kalitim(); obj.methodx(); obj.methody(); obj.methodz(); class Vehicle { String vehicletype; class Car extends Vehicle { String modeltype; public void showdetail() { vehicletype = "Car"; modeltype = "sports"; System.out.println(modelType +" " +vehicletype); Car car = new Car(); car.showdetail(); class Parent { class Child extends Parent { public void details() { super.name = "Parent"; name = "Child"; System.out.println(super.name + and " +name); Child cobj = new Child(); cobj.details(); class Parent { public void details() { name = "Parent"; System.out.println(name); class Child extends Parent { public void details() { super.details(); name = "Child"; System.out.println(name); class Parent { public Parent(String n) { name = n; class Child extends Parent { public Child(String n1, String n2) { super(n1); this.name = n2; public void details() { System.out.println(super.name +" and " +name);
Child cobj = new Child(); cobj.details(); Child cobj = new Child("Parent", "Child"); cobj.details(); class Box { double width; double height; double depth; Box(double w, double h, double d) { width = w; height = h; depth = d; void getvolume() { System.out.println("Boyut: " + width * height * depth); class MatchBox extends Box { double weight; MatchBox(double w, double h, double d, double m){ super(w, h, d); weight = m; class Counter { int i = 0; Counter increment() { i++; return this; void print() { System.out.println("i = " + i); public class Kalitim extends Counter { Kalitim x = new Kalitim(); x.increment().increment().increment().print(); MatchBox mb1 = new MatchBox(10, 10, 10, 10); mb1.getvolume(); System.out.println("mb1 genişliği " + mb1.width); System.out.println("mb1 yüksekliği" +mb1.height); System.out.println("mb1 derinliği " + mb1.depth); System.out.println("mb1 ağırlığı " + mb1.weight); 2- Aşağıda çok biçimlilik soyut sınıf işlemleri ile ilgili JAVA kodları verilmiştir. Bu kodları el yordamı ile çözerek çıktılarını altlarına yazınız. class Asker { public void selamver() { System.out.println("Asker Selam verdi"); class Hayvan { public void avyakala() { System.out.println("Hayvan avyakala"); class Er extends Asker { public void selamver() { System.out.println("Er Selam verdi"); class Kartal extends Hayvan { public void avyakala() { System.out.println("Kartal avyakala"); class Yuzbasi extends Asker { public void selamver() { System.out.println("Yuzbasi Selam verdi"); class Timsah extends Hayvan { public void avyakala() { System.out.println("Timsah avyakala"); public class ilkclass1 { public static void hazirol(asker a) { a.selamver(); Asker a = new Asker(); Er e = new Er(); public class ilkclass1 { public static Hayvan hayvansec(int sec) { Hayvan h = null; if (sec == 0) h = new Hayvan(); if (sec == 1) h = new Kartal();
Yuzbasi y = new Yuzbasi(); hazirol(a); hazirol(e); hazirol(y); if (sec == 2) h = new Timsah(); return h; Hayvan[] h = new Hayvan[3]; for (int i = 0; i < 3; i++) { h[i] = hayvansec(i); for (int j = 0; j < 3; j++) { h[j].avyakala(); abstract class Arac { int deger; public abstract void Uret(); class Otomobil extends Arac { public void Uret() { System.out.println("OTOMOBİL ÜRETİLDİ"); class Kamyon extends Arac { public void Uret() { System.out.println("Kamyon ÜRETİLDİ"); class Minubus extends Arac { public void Uret() { System.out.println("Minubus ÜRETİLDİ"); public class ilkclass1 { public static void main(string[] args) { Arac ar = null; switch (2) { case 1: ar = new Otomobil(); break; case 2: ar = new Minubus(); break; case 3: ar = new Kamyon(); break; ar.uret(); class Calisan { public String pozisyon = "Calisan"; class Mudur extends Calisan { public Mudur() { pozisyon = "Mudur"; System.out.println("Mudur class Programci extends Calisan { public Programci() { pozisyon = "Programci"; System.out.println("Programci class Pazarlamaci extends Calisan { public Pazarlamaci() { pozisyon = "Pazarlamaci"; System.out.println("Pazarlamaci public static void mesaibasla(calisan[] c) { for (int i = 0; i < c.length; i++) { c[i].calis(); Calisan[] c = new Calisan[4]; c[0] = new Calisan(); c[1] = new Programci(); c[2] = new Pazarlamaci(); c[3] = new Mudur(); mesaibasla(c); abstract class Calisan { public String pozisyon; abstract public void calis(); class Mudur extends Calisan { public Mudur() { pozisyon = "Mudur"; System.out.println("Mudur abstract class Calisan { public String pozisyon; abstract public void calis(); class Mudur extends Calisan { public Mudur() { pozisyon = "Mudur"; System.out.println(pozisyon +"
class Programci extends Calisan { public Programci() { pozisyon = "Programci"; System.out.println("Programci public void zamiste() { System.out.println("Programci Zam Istiyor"); public static void mesaibasla(calisan[] c) { for (int i = 0; i < c.length; i++) { c[i].calis(); Calisan[] c = new Calisan[2]; c[0] = new Programci(); c[1] = new Mudur(); mesaibasla(c); class Programci extends Calisan { public Programci() { pozisyon = "Programci"; System.out.println(pozisyon +" public static void mesaibasla(calisan[] c) { for (int i = 0; i < c.length; i++) { c[i].calis(); Calisan[] c = new Calisan[2]; c[0] = new Programci(); c[1] = new Mudur(); mesaibasla(c); abstract class Calisan { public String pozisyon; abstract public void calis(); public void zamiste() { System.out.println("Calisan zam istiyor"); class Mudur extends Calisan { public Mudur() { pozisyon = "Mudur"; System.out.println(pozisyon + " class Programci extends Calisan { public Programci() { pozisyon = "Programci"; System.out.println(pozisyon + " public void zamiste() { System.out.println(pozisyon + " zamiste"); public static void mesaibasla(calisan[] c) { for (int i = 0; i < c.length; i++) { c[i].calis(); Calisan[] c = new Calisan[2]; c[0] = new Programci(); c[1] = new Mudur(); mesaibasla(c); c[0].zamiste(); c[1].zamiste(); abstract class Sekil { public abstract int cevre(); public abstract int alan(); class Dikdortgen extends Sekil { private int boy; private int en; public Dikdortgen(int boy, int en){ this.boy=boy; this.en=en; public int cevre() { return (2 * (boy + en)); public int alan() { return (boy * en); class Cember extends Sekil { private int yaricap; public Cember(int yaricap){ this.yaricap=yaricap; public int cevre() { return (2 * 3 * yaricap); public int alan() { return (3 * yaricap * yaricap); class EsUcgen extends Sekil { private int kenar; private int yukseklik; public EsUcgen(int kenar, int yukseklik){ this.kenar=kenar; this.yukseklik=yukseklik; public int cevre() { return (kenar * 3); public int alan() { return ((kenar * yukseklik) / 2); public static void mesaibasla(calisan[] c) { for (int i = 0; i < c.length; i++) { c[i].calis();
Sekil[] s = new Sekil[3]; s[0]=new Dikdortgen(3,4); s[1]=new Cember(3); s[2]=new EsUcgen(2,5); System.out.println(s[0].alan()); System.out.println(s[0].cevre()); System.out.println(s[1].alan()); System.out.println(s[1].cevre()); System.out.println(s[2].alan()); System.out.println(s[2].cevre()); abstract class Arac { public abstract void Uret(); class Otomobil extends Arac { public void Uret() { System.out.println("OTOMOBİL ÜRETİLDİ"); class Kamyon extends Arac { public void Uret() { System.out.println("Kamyon ÜRETİLDİ"); class Minubus extends Arac { public void Uret() { System.out.println("Minubus ÜRETİLDİ"); Arac ar = null; for (int i = 1; i <= 3; i++) { switch (i) { case 1: ar = new Otomobil(); class Kedi { public void yakalaav() { System.out.println("Kedi sinifi Av yakaladi"); public class Kaplan extends Kedi { public static void goster(kedi k) { k.yakalaav(); public void yakalaav() { System.out.println("Kaplan sinifi Av yakaladi"); Kedi k = new Kedi(); Kaplan kp = new Kaplan(); goster(k); goster(kp); break; case 2: ar = new Minubus(); break; case 3: ar = new Kamyon(); break; ar.uret(); class Universite { public void derscalis() { System.out.println("Herkes ders calisti"); class Ogrenci extends Universite { public void derscalis() { System.out.println("Ogrenci ders calisti"); class BClass { public void mtoover() { System.out.println("I'm the method of BClass"); class DClass extends BClass { public void mtoover() { System.out.println("I'm the method of DClass");
class Akademisyen extends Universite { public void derscalis() { System.out.println("Akademisyen ders calisti"); public static void hazirlansinavvar(universite uni) { uni.derscalis(); Universite uni = new Universite(); Ogrenci ogr = new Ogrenci(); Akademisyen ogrgor = new Akademisyen(); hazirlansinavvar(uni); hazirlansinavvar(ogr); hazirlansinavvar(ogrgor); BClass obj1 = new BClass(); BClass obj2 = new DClass(); obj1.mtoover(); obj2.mtoover(); abstract class Vehicle { public String vehicletype; public Integer getnumberofseats() { if (this.vehicletype.equals("araba")) { return 5; else if (this.vehicletype.equals("otobüs")){ return 20; else if (this.vehicletype.equals("motor")){ return 1; return null; public String getvehicletype() { return this.vehicletype; public abstract Integer getnumberofwheels(); class Car extends Vehicle { public Car() { this.vehicletype = "araba"; public Integer getnumberofwheels() { return 4; Vehicle mycar = new Car(); System.out.println("Benim" +mycar.getvehicletype() + mycar.getnumberofseats() + " kişiliktir"); System.out.println("Benim" +mycar.getvehicletype() + mycar.getnumberofwheels() + " tekerleklidir");
2- VERİ YAPILARI 2: KUYRUK VERİ YAPISI (Queue Data Structure) Veri yapıları programcılığın en önemli alanlarından birisidir. Veri yapıları içerisinde yığın gibi en yaygın kullanılanlardan bir diğeri ise kuyruk veri yapısıdır. Aşağıda kuyruk veri yapısı ile ilgili detaylı açıklamalar verilmiştir. Bunları inceleyerek istenen kuyruk veri yapısını oluşturacak QueueData sınıfını JAVA ile kodlayınız. KUYRUK VERİ YAPISININ KISA TANITIMI Veri yapıları bilgisayar ortamında verilerin etkin olarak saklanması ve işlenmesi için kullanılan yapılardır. Yığın veri yapısı gibi kuyruk veri yapısı da hafıza gerektiren birçok sistemde önemli ve yaygın kullanımı vardır. Kuyruklar, eleman eklemelerin sondan (back) ve eleman çıkarmaların baştan (front) yapıldığı veri yapılarıdır (Şekil-1). Bir eleman ekleneceği zaman kuyruğun sonuna eklenir. Bir eleman çıkarılacağı zaman kuyrukta bulunan ilk eleman çıkarılır. Bu eleman da kuyruktaki elemanlar içinde ilk eklenen elemandır. Bu nedenle kuyruklara FIFO (First-In First- Out = ilk giren ilk çıkar) listeleri de denilmektedir. Gerçek yaşamda da bankalarda, duraklarda, gişelerde, süpermarketlerde, otoyollarda kuyruklar oluşmaktadır. Kuyruğa ilk olarak girenler işlemlerini ilk olarak tamamlayıp kuyruktan çıkarlar. Veri yapılarındaki kuyruklar bu tür veri yapılarının simülasyonunda kullanılmaktadır. Ayrıca işlemci, yazıcı, disk gibi kaynaklar üzerindeki işlemlerin yürütülmesinde ve bilgisayar ağlarında paketlerin yönlendirilmesinde de kuyruklardan yararlanılmaktadır. Kuyruk veri yapısında kuyruğun başını ve sonunu gösteren iki işaretçi bulunur (Şekil-2). Kuyruk için kuyruk sınıfının global alanında bir int dizi, kuyruk başını gösteren bas işaretçisi, kuyruk sonunu gösteren son değişkenler ve ihtiyaca göre başka değişkenlerde tanımlanmalıdır. DİZİ (int dizi []=new Integer[N]): kuyruk olarak kullanılacak depolama alanıdır. DİZİ[İNDİS] her dizinin bir indis numarası olduğu unutulmamalıdır. Bu uygulamada N değişkeni dizinin boyutunu belirtecektir. KUYRUK BAŞI:(int bas) bu değişken kuyruğun ilk elemanını göstermektedir. Her zaman boş hücreyi gösterir, yani o DİZİ de boş hücrenin İNDİS numarasını tutar. Kuyruktan eleman çekme (silme) yapılacağı zaman bu işaretçinin gösterdiği değer çekilir ve işaretçi bir önceki indisi gösterir. KUYRUK SONU(int son): son değişkeni ise kuyruğun son elemanını işaret etmektedir. Son eleman boş hücreyi yani yeni ekleme yapıldığında kuyruğa ekleme yapılacak hücreyi göstermektedir. Ekleme yapıldıktan sonra bu değişken bir sonraki hücreyi göstermelidir. Aşağıdaki şekli inceleyiniz. YAZILMASI TAVSİYE EDİLEN YORDAMLAR: Yapılandırıcı: public Kuyruk(int N) Kuyruk değişkenlerine gerekli değerlerin atanması sağlanmalıdır. Kuyruk oluşturulurken kuyruk boyu parametre olarak girilmelidir. Kuyruğa veri ekleme: void KuyrugaEkle(int yeni) Kuyruğa int tipinde yeni veri ekleme işlemi yapar. Ekleme işleminde; öncelikle kuyruk dolumu diye kontrol edilir. Kuyruk dolu değilse son değişkeninin gösterdiği indise yeni kaydedilir, son indisinin bir üst hücreyi göstermesi sağlanır. Kuyruktan veri silme: int kuyruksil() Kuyruktan veri silme; bas değişkeninin gösterdiği veriyi döndürüp, bas değişkenini de bir ileri taşınmasından ibarettir.
Kuyruk boş mu?: private boolean kuyrukbos() Kuyruğun boş olup olmadığını döndürür. Kuyruk boşsa TRUE, doluysa FALSE döndürür. Kuyruğun boş olup olmadığı bas ve son değişkenlerinin durumuna göre kontrol edilir. Bu değişkenler aynı indisleri gösteriyorlarsa kuyruk boştur. Bu yordam sadece sınıf içindeki diğer yordamlar tarafından kullanılmalıdır Kuyruk Dolu mu?: private boolean kuyrukdolu() Kuyruğun dolu olup olmadığını döndürür. Kuyruk doluysa TRUE, boşsa FALSE döndürür. Kuyruğun dolu olup olmadığı kuyruğun sonunu gösteren son değişkeni, kuyruğun başını gösteren bas değişkeninden bir önde olduğunda kuyruk dolu olacaktır. Bu yordam sadece sınıf içindeki diğer yordamlar tarafından kullanılmalıdır Kuyruk listele: kuyruklistele() Kuyrukta var olan tüm verileri Kuyrukdaki sıraya göre listeleyerek ekrana yazdırır. Yazdırma işlemi bas değişkeninden başlayarak aşağı doğru tüm verileri ekranayazdıracak bir döngü ile yapılabilir. Kuyruk sırala kuyruksirala() Kuyruktaki tüm elemanları büyükten küçüğe doğru sıralayarak ekrana yazdırır. Bu sıralamada quick sort, buble sort gibi basit sıralama algoritmaları kullanılabilir. Şekil-1: kuyruk yapısına veri ekleme (Push), ve çekme (Pop) Şekil-2: kuyruk baş ve son işaretçileri durumu UML DİYAGRAMI QueueData + N: int + bas: private int + son: private int + dizi: private int[] + QueueData() : public + kuyrukdolu() : private boolean + kuyrukbos() : private boolean + kuyrugaekle(x : int) : public boolean + kuyrukbos() : public int + kuyruklistele() : public void + kuyruksirala() : public void ANA KOD GÖVDESİ: public class QueueData{ final int N;//dizi boyutu private int dizi []=new Integer[N]; private int bas; //kuyruk başı private int son; //kuyruk sonu //Yapılandırıcıda kuyruk boyu ve baş ve son değişkenleri ayarlanmalıdır public QueueData(int N){. //kuyruk dolu ise true donmeli private boolean kuyrukdolu(){. //kuyruk boş ise true dönmeli private boolean kuyrukbos(){
//kuyruğa yeni eleman ekler void kuyrugaekle(int yeni){ //kuyruktan başın gösterdiği elemanı çeker ve döndürür int kuyruksil(){. //kuyruk sırasına göre baştan sona kuyruğu listeler public void kuyruklistele(){ //Kuyruk elemanlarını büyükten küçüğe listeler public void kuyruksirala(){ public static void main(string[] args) { QueueData qd=new QueueData(); qd. kuyrugaekle(3); qd.kuyrugaekle(5); qd.kuyrugaekle(2); qd.kuyrugaekle(8); qd.kuyruksirala(); System.out.println(qd.kuyrukSil() +"kuyruktan çekildi"); qd.kuyruksirala(); İSTENEN EKRAN ÇIKTILARI: 3 5 2 8 3 kuyruktan silindi 5 2 8
3- KALITIM: ARI KOLONİSİ Arıların detaylı şekilde türlerini araştırınız. Kovan içerisinde var olan arı türlerine göre bir soy ağacı oluşturunuz. Kovanda görevli bu arıların her birinin görev listesini v sahip oldukları özelliklerini çıkarınız. UML sınıf diyagramları ile en üstte soyut ArıSinifi ile başlayarak hiyerarşik olarak türeme şekline göre sınıflayınız. Bu sınıflamayı tam bir UML diyagramında gösteriniz. Daha sonra her bir arı türününe ait, görevlerini ve özelliklerini içeren sınıfları JAVA ile kodlayınız. ÖRNEK KISA TANIM Besin Arama surecinin başlangıcında, kaşif arılar çevrede rastgele arama yaparak besin aramaya başlarlar. Besin kaynakları bulunduktan sonra, kaşif arılar artık görevli arı olurlar ve buldukları kaynaklardan kovana nektar taşımaya başlarlar. Her bir görevli arı kovana dönüp getirdiği nektarı boşaltır ve bu noktadan sonra ya bulduğu kaynağa geri döner ya da kaynakla ilgili bilgiyi dans alanında sergilediği dans aracılığıyla kovanda bekleyen gözcü arılara iletir. Eğer faydalandığı kaynak tükenmiş ise görevli kaşif arı haline gelir ve yeni kaynak arayışına yönelir. Kovanda Bekleyen gözcü arılar zengin kaynakları işaret eden dansları izlerler ve yiyeceğin kalitesi ile orantılı olan dans frekansına bağlı olarak bir kaynağı tercih ederler.