inönü üniversitesi mühendislik fakültesi bilgisayar mühendisliği

advertisement
İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ
YAPILARI DERSİ LABORATUAR ÖDEVİ
AD SOYAD:
OKUL NO:
TESLİM TARİHİ:
TESLİM SÜRESİ: 2 hafta
ÖDEV NO: 5
1- BANKA KUYRUK UYGULAMASI:
Şekil-1(a)’da bir bankanın danışma kuyruğu ve müşterileri vezneleri temsili olarak verilmiştir. Gelen müşterilerin
veznelere dağıtım mekanizması aşağıda anlatılmıştır. Ayrıca yazılması tavsiye edilen sınıflar şekil-2(b)’de verilmiş
ve bu sınıf ve metotları anlatılmıştır.
Bu anlatılanlara bakarak gerekli sınıf ve yordamları yazınız.
(a)
(b)
Şekil-1: (a)Banka için danışma ve vezne kuyruk gösterimi (b) yazılması tavsiye edilen sınıflar ve metotları.
DANIŞMA ve VEZNE KUYRUĞU DAĞITIM MEKANİZMASI:





Bankaya yeni gelen müşteri ismi ile bankanın danışma kuyruğuna girer.
Bu kuyruk en fazla 10 kişiliktir.
Danışmada kuyruğa giren müşteriler işlem yapmaları için 4 adet vezneye dağıtılacaktır.
Her vezneye yine en fazla 5’er müşteri eklenebilecektir. Eğer her vezne 5’er kişi ile dolu ise danışmadan
veznelere kimse gönderilmeyecektir.
Danışmadan veznelere müşteri dağıtma mekanizması ise; en az sayıda müşterisi olan vezne kuyruğunun
bulunması ve danışma kuyruğunda sırası gelen müşterinin bu vezne kuyruğuna eklenmesinden ibarettir.
YAZILMASI TAVSİYE EDİLEN SINIF ve METOTLARI:
public class BankaMusteriKuyruk {
Bu sınıf danışma önündeki gelen müşterilerin isimleri ile dâhil edildikleri ana kuyruktur. Ekleme ve çekme
işlemleri kuyruk mantığı ile tasarlanacaktır. Kuyruk yapısı JAVA’nın kendi altındaki LinkedList<String>
yapısı kuyruk mekanizmasına uyarlanarak kullanılacaktır. JAVA’nın LinkedList sınıfı daha önceki
ödevlerde gösterilmiştir.
public BankaMusteriKuyruk()
Yapılandırıcı metotdur ve içerisinde LinkedList<String> yapılandırılabilir.
boolean bankaKuyrukEkle(String yeniMusteri, vezneKuyruk vk[]) :
Bu metot parametre listesindeki yeniMusteri Stringini listedeki müşteri sayısı 10’dan az ise
kuyruğa ekler. Aynı zamanda ekleme işleminden sonra vezneKuyruk vk[] ile vezne kuyruk
sınıfından gelen 4 adet veznedeki her bir kuyruğu kontrol edip en az sayıdaki elemanlı vezneyi
bularak en öndeki müşteriyi oraya gönderir, kendi listesinden de bu müşteriyi siler. Ekleme işlemi
yapılmışsa metot true, yapılmamışsa false dönecektir.
String bankaKuyrukCek():
Bu metot kuyruk mekanizmasına uygun olarak müşteri isim listesinden bir isim çekme işini
yapacaktır. Burada listedeki eleman sayısı düşünülmelidir.
vezneKuyruk enKucukKuyrukBul(vezneKuyruk vk[])
Bu metot vezneKuyruk vk[] dizisindeki vezne nesnelerinin en az müşteri olan vezneKuyruk vk
nesnesini döndürmekle sorumludur.
void uygunVezneyeGonder(vezneKuyruk vk[])
Bu metot vezneKuyruk vk[] parametresi içerisinde bulunan en küçük elemanlı vezne listesine
banka kuyruğundan müşteri çekip göndermekle sorumludur.
void bankaKuyrukListele()
Bu metot banka kuyruğu listesindeki tüm isimleri alt alta ekrana yazdırmadan sorumludur.
public class vezneKuyruk { :
Bu sınıf bir tek veznenin sahip olması gereken metot ve özellikleri (sınıf değişkenleri) içerisinde barındırır.
Banka danışma kuyruğu gibi kendi içinde LinkedList<String> içerir ve kuyruk modeline göre
ekleme/çekme işlemleri yapılacaktır. Ana programda bu sınıftan 4 adet dizi şeklinde tanımlanarak
yapılandırıcıları çağrılacaktır.
public vezneKuyruk():
Yapılandırıcı metottur ve içerisinde LinkedList<String> yapılandırılabilir.
boolean vezneKuyrukEkle(String yeniMusteri):
Bu metot parametre listesindeki yeniMusteri Stringini vezne listedeki müşteri sayısı 5’den az ise
kuyruğa ekler. Ekleme işlemi yapılmışsa metot true, yapılmamışsa false dönecektir.
void vezneKuyrukListele():
Bu metot banka kuyruğu listesindeki tüm isimleri alt alta ekrana yazdırmadan sorumludur.
int vezneKuyrukBoy():
Vezne kuyruğundaki müşteri sayısını döndürür.
public class anaSinif {
vezneKuyruk vk[]=new vezneKuyruk[4];
for(int i=0;i<vk.length;i++){
vk[i]=new vezneKuyruk();
}
Bu sınıf main() metodunu içeren ana sınıftır. Bu metot altında banka kuyruğu sınıfı ve 4 adet vezne
kuyruğu sınıfı dizi halinde tanımlanmalı ve değerleri atanmalıdır. Vezne kuyruğu sınıfından dizi oluşturma ve
yapılandırıcı çağırma mekanizması yan tarafta verilmiştir.
Bu sınıf altında konsol ekranına bir menü getirilerek müşteri kuyruğuna eleman ekleme işlemi, vezne ve
danışman kuyruklarının birlikte ekrana bastırılmasının istenmesi gibi işlemler yapılır. Bu sayede danışman
kuyruğuna eklenecek bir müşterinin vezne kuyruklarına dağıtımı görülecektir.
2- JAVAFX ListView, JAVA LinkedList İLE STACK UYGULAMASI
Daha önce JAVA konsol ortamında bir Stack uygulaması yazılmıştı. Bu uygulamada ise JAVAFX Scene Builder ‘ in
ListView‘ i ve JAVA altındaki LinkedList’i kullanılarak görsel bir uygulama geliştirilecektir. Şekil-1(a)’da
geliştirilecek kullanıcı arayüzünün Scene Builder ortamındaki görüntüsü verilmiştir.
Aşağıda anlatılan yöntemler ve çalışma mekanizması kullanılarak Scene Builder ile arayüzü tasarlayınız, Stack
uygulamasını yazınız.
(a)
(b)
(c)
Şekil-1: (a) Scene Builder ekran görüntüsü (b) Stack eklemesi yapılmış ve listView’de Stack çıktısı ekranı (c) Stack’den
silme yapılmış (veysel) çıktı ekranı
ÇALIŞMA MEKANİZMASI:

StackList içerisinde JAVA LinkedList kullanılarak Stack mantığına uyarlanacaktır.

Scene Builder ekranında Stack Ekle butonuna tıklandığında StackList içerisinde stack mantığı ile
tasarlanmış JAVA LinkedList’e değeri ekleyecek ve eski ListView silinerek LinkedList’ in tamamının
yeniden ListView’e yazdırılması (refreshListView()) sağlanacaktır.

Scene Builder ekranında Stack Sil butonuna tıklandığında StackList içerisinde stack mantığı ile
tasarlanmış JAVA LinkedList’den en son eklenen değer silinecek ve arayüzdeki eski ListView silinerek
LinkedList’ in tamamının yeniden ListView’e yazdırılması (refreshListView()) sağlanacaktır.

Böylece tüm değişimler sadece LinkedList üzerinde yapılacak ve değişimlerin (ekleme, Silme işlemleri..)
LinkedList’de yeniden yazdırılması sağlanmış olacaktır.
YAZILMASI TAVSİYE EDİLEN SINIF ve METOTLAR
public class Controller implements Initializable{
Bu sınıf kontrolör sınıfıdır ve içerisinde buton fonksiyonları, arayüz
eleman tanımları ve bazı özel metotlar içerir. Ayrıca StackList sınıfından
bir nesne oluşturulmalı ve ekleme silme işlemlerinin bu sınıf nesnesi
üzerinde yapılması sağlanmalıdır.
public void btnEkleStack(ActionEvent event):
Stack ekle butonuna tıklandığında aktif olur. LinkedList’e
ekleme yapmamızı sağlar ve yeni listenin tazelenerek ListView
üzerinden görünmesini sağlar.
public void btnSilStack(ActionEvent event):
stack Sil butonuna tıklandığında aktif olur. LinkedList’den
silme yapmamızı ve yeni listenin tazelenerek ListView üzerinden
görünmesini sağlar.
public void refreshListView():
içerisinde ListView ‘e ekleme/silme işlemlerini yapabilmemiz
gerekli olan ObservableList<String> sınıfı tanımlanır.
ListView içerisindeki tüm değerlerin ListView’e aktarımı
tamamlanır (Şekil-1(b),(c)).
Şekil-2: Yazılması tavsiye edilen sınıflar
ve metotlar
class StackList {
Bu sınıf JAVA’ya ait olan LinkedList sınıfına ait bir nesnenin üretilip
bu LinkedList’in bir Stack yapısına uyarlandığı sınıftır.
LinkedList sınıfından bir referans sınıfın özelliği olmalıdır.
public StackList():
StackList sınıfının yapılandırıcısıdır ve içerisinde sınıfın özelliği
olarak tanımlanan LinkedList referansının bir nesneye
bağlanması işlemi yapılmalıdır.
boolean addStack(String newOne):
Tanımlanan LinkedList içerisindeki değer 20’nin altındaysa
Stack’e kayıt yapar ve true döner.
void listStack():
Yığının tüm elemanlarını konsol ortamında ekrana yazdırmak için
kullanılır.
String getStack(int index):
Parametre olarak verilen indeksdeki yığın elemanını döndürür. Bu
metot yığın elemanlarını ListView içerisine yazdırmak için
kullanılacaktır.
String pullStack()
Tanımlanan LinkedList içerisindeki değer varsa Stack’den
silme/çekme işlemi yapar ve çektiği değeri döndürür. Stack silme
işlemi sırasında kullanılacaktır.
int getStackSize()
Stack boyutunu döndürür.
3- JAVAFX ListView, JAVA LinkedList İLE KUYRUK (Queue) UYGULAMASI
Daha önce JAVA konsol ortamında bir Queue(kuyruk) uygulaması yazılmıştı. Bu uygulamada ise JAVAFX Scene
Builder ‘ in ListView‘ i ve JAVA altındaki LinkedList’i kullanılarak görsel bir uygulama geliştirilecektir. Şekil1(a)’da geliştirilecek kullanıcı arayüzünün Scene Builder ortamındaki görüntüsü verilmiştir.
Aşağıda anlatılan yöntemler ve çalışma mekanizması kullanılarak Scene Builder ile arayüzü tasarlayınız, Kuyruk
uygulamasını yazınız.
(b)
(b)
(c)
Şekil-1: (a) Scene Builder ekran görüntüsü (b) Kuyruk eklemesi yapılmış ve listView’de Kuyruk çıktısı ekranı (c)
Kuyruktan silme yapılmış (Ali) çıktı ekranı
ÇALIŞMA MEKANİZMASI:

QueueList içerisinde JAVA LinkedList kullanılarak Kuyruk mantığına uyarlanacaktır.

Scene Builder ekranında Kuyruk Ekle butonuna tıklandığında QueueList içerisinde Kuyruk mantığı ile
tasarlanmış JAVA LinkedList’in en sonuna text alanındaki değer ekleyecek ve eski ListView silinerek
LinkedList’ in tamamının yeniden ListView’e yazdırılması (refreshListView()) sağlanacaktır.

Scene Builder ekranında Kuyruk Sil butonuna tıklandığında QueueList içerisinde Kuyruk mantığı ile
tasarlanmış JAVA LinkedList’den en başına eklenen değer silinecek ve arayüzdeki eski ListView silinerek
LinkedList’ in tamamının yeniden ListView’e yazdırılması (refreshListView()) sağlanacaktır.

Böylece tüm değişimler sadece LinkedList üzerinde yapılacak ve değişimlerin (ekleme, Silme işlemleri..)
LinkedList’de yeniden yazdırılması sağlanmış olacaktır.
YAZILMASI TAVSİYE EDİLEN SINIF ve METOTLAR
public class Controller implements Initializable{
Bu sınıf kontrolör sınıfıdır ve içerisinde buton fonksiyonları, arayüz
eleman tanımları ve bazı özel metotlar içerir. Ayrıca KuyrukList
sınıfından bir nesne oluşturulmalı ve ekleme silme işlemlerinin bu sınıf
nesnesi üzerinde yapılması sağlanmalıdır.
public void btnEkleKuyruk(ActionEvent event):
Kuyruk ekle butonuna tıklandığında aktif olur. LinkedList’in en
sonuna ekleme yapmamızı sağlar ve yeni listenin tazelenerek
ListView üzerinden görünmesini sağlar.
public void btnSilKuyruk(ActionEvent event):
Kuyruk Sil butonuna tıklandığında aktif olur. LinkedList’in en
başından silme/çekme yapmamızı ve yeni listenin tazelenerek
ListView üzerinden görünmesini sağlar.
public void refreshListView():
içerisinde ListView ‘e ekleme/silme işlemlerini yapabilmemiz
gerekli olan ObservableList<String> sınıfı tanımlanır.
ListView içerisindeki tüm değerlerin ListView’e aktarımı
tamamlanır (Şekil-1(b),(c)).
Şekil-2: Yazılması tavsiye edilen sınıflar
ve metotlar
class QueueList {
Bu sınıf JAVA’ya ait olan LinkedList sınıfına ait bir nesnenin üretilip
bu LinkedList’in bir Kuyruk yapısına uyarlandığı sınıftır.
LinkedList sınıfından bir referans, sınıfın özelliği olmalıdır.
public QueueList():
QueueList sınıfının yapılandırıcısıdır ve içerisinde sınıfın özelliği
olarak tanımlanan LinkedList referansının bir nesneye
bağlanması işlemi yapılmalıdır.
boolean addQueue(String newOne):
Tanımlanan LinkedList içerisindeki değer 20’nin altındaysa
Kuyruğa kayıt yapar ve true döner.
void listQueue():
Kuyruğun tüm elemanlarını konsol ortamında ekrana yazdırmak
için kullanılır.
String getQueue(int index):
Parametre olarak verilen indeksdeki Kuyruk elemanını döndürür.
Bu metot yığın elemanlarını ListView içerisine yazdırmak için
kullanılacaktır.
String pullQueue()
Tanımlanan LinkedList içerisindeki değer varsa Kuyruktan
silme/çekme işlemi yapar ve çektiği değeri döndürür. Kuyruk silme
işlemi sırasında kullanılacaktır.
int getQueueSize()
Kuyruk boyutunu döndürür.
4- RECURSIVE BINARY SEARCH TREE CLASS
Bir ikili arama ağacı düğüm sınıfı yazılacaktır. Düğüm sınıfının altına yazılan tüm metotlar düğüm sınıfı altında
yazılacak ve metotlar özyinelemeli (Recursive) metotlar olacaktır. Aşağıda yazılması bu düğüm sınıfı için yazılması
istenen metotları isimleri verilmiştir.
Şekil-1’de eklemelerle oluşturulması istenen örnek ağaç yapısı verilmiştir. Bu sınıftan sonra main yordamını içeren
bir ana sınıf yazılacaktır.
Buna göre ana sınıf içerisinde aşağıdaki listenin eklenmesi için gerekli komutlar yazıldıktan sonra ağaç üzerinde ara
gezinti yapıldığında sıralı olarak tüm ağaç elemanlarını yazdıran JAVA programını yazınız.
YAZILMASI İSTENEN BST SINIFI METOTLARI
1. Yapılandırıcı
2. Ağaca eleman ekleme
3. Ağaçtan eleman silme
4. Ağaçta arama
5. En büyük eleman ara
6. En küçük eleman ara
7. Bir düğümün altındaki en büyük elemanı ara
8. Bir düğümün altındaki en küçük elemanı ara
9. Önce gezinti
10. Ara gezinti
11. Sonra gezinti
Şekil-1: oluşturulması istenen örnek ağaç yaısı
Download