a) Bir
bankaya sabahleyin gelmiş olan N kişinin, geliş sıralarına göre kuyruk
oluşturduklarını düşünün. Her birinin işleminin 10 saniye ile 1000 sn.
arasında random bir zaman aldığını varsayın. Bunun için öncelikle,
Java’da FIFO kuyruk yapısı (sınıf) tasarlayınız. Her bir banka müşterisine numara
vererek ve her birine random birer işlem süresi atayarak N elemanlı bir kuyruk
oluşturunuz. Her bir müşterinin işi biterek kuyruktan çıkarıldığında işlem
tamamlanma süresini (işlem süresi dahil ne kadar süre kuyrukta kaldığını) liste
halinde yazdırınız. Ayrıca, N müşteri için ortalama işlem tamamlanma süresini
de hesaplayıp yazdırınız.
b) Aynı işlemi aynı değerleri
kullanarak öncelikli kuyruk için tekrarlayınız. Kuyruğu, işlem süresi en kısa
olan müşteri ilk (öncelikli) olarak hizmet alacak şekilde tasarlayınız (kuyruk,
elemanları küçükten büyüğe sıralı tutacak). Bu yapıda, hangi müşterilerin FIFO
kuyruğa göre, daha az beklediğini listeleyiniz (işlem süreleri ve sıra
numaraları ile). Ortalama işlem tamamlanma süresindeki kazancı (a şıkkına göre)
(fark ve %) hesaplayınız.
c) Aynı işlemleri (a ve b) 3
adet gişe için tekrarlayarak süreleri karşılaştırınız.
Musteri.java
public class Musteri {
public final int musteriNo;
public final int islemSuresi;
public int beklemeSuresi;
public int oncelikliBeklemeSuresi;
public Musteri sonraki;
public Musteri(int musteriNo, int islemSuresi)
{
this.islemSuresi = islemSuresi;
this.musteriNo = musteriNo;
this.beklemeSuresi = 0;
}
public Musteri(int musteriNo, int islemSuresi, int beklemeSuresi)
{
this.musteriNo = musteriNo;
this.islemSuresi = islemSuresi;
this.beklemeSuresi = beklemeSuresi;
}
}
Kuyruk.java
public class Kuyruk {
Musteri bas;
Musteri son;
boolean oncelikli;
public Kuyruk() {
bas = null;
son = null;
oncelikli = false;
}
public Kuyruk(boolean oncelikli)
{
this.oncelikli = oncelikli;
bas = null;
son = null;
}
public void kuyrugaEkle(int musteriNo, int islemSuresi)
{
Musteri m = new Musteri(musteriNo, islemSuresi);
kuyrugaEkle(m);
}
public void kuyrugaEkle(int musteriNo, int islemSuresi, int beklemeSuresi)
{
Musteri m = new Musteri(musteriNo, islemSuresi, beklemeSuresi);
kuyrugaEkle(m);
}
private void kuyrugaEkle(Musteri m) {
if(oncelikli)
{
Musteri onceki = null;
Musteri etkin = bas;
while(etkin != null && m.beklemeSuresi > etkin.beklemeSuresi)
{
onceki = etkin;
etkin= etkin.sonraki;
}
if(onceki == null)
{
bas = m;
}
else
{
onceki.sonraki = m;
}
m.sonraki = etkin;
}
else
{
if(son == null)
{
bas = m;
son = m;
}
else
{
son.sonraki = m;
son = m;
}
}
}
public Musteri cikar()
{
Musteri cikan = bas;
if(bas != null)
{
bas = bas.sonraki;
}
return cikan;
}
public boolean bosMu()
{
if(bas == null)
return true;
else
return false;
}
}
Test.java
import javax.swing.JOptionPane;
public class Test {
public static void main(String args[])
{
int n = Integer.parseInt(JOptionPane.showInputDialog("Bankaya kaç kişi geldi?"));
int islemSuresi;
int toplamBeklemeSuresi = 0;
int oncekiBeklemeSuresi = 0;
float[] ortalama = new float[6];
int sayac = 1;
for(int i=1;i<4;i++)
{
System.out.println();
System.out.println(i+ ". Gişe İşlemleri");
System.out.println("--------------------");
Kuyruk k = new Kuyruk();
Kuyruk pk = new Kuyruk(true);
for(int j=1;j<=n;j++)
{
islemSuresi = (int) (10 + Math.random() * 991);
k.kuyrugaEkle(j, islemSuresi);
System.out.println(j+". müşterinin işlem süresi = " + islemSuresi);
}
System.out.println();
while(!k.bosMu())
{
Musteri musteri = k.cikar();
musteri.beklemeSuresi = musteri.islemSuresi + oncekiBeklemeSuresi;
pk.kuyrugaEkle(musteri.musteriNo, musteri.islemSuresi, musteri.beklemeSuresi); // cikan musteriyi
// oncelik kuyruguna ekliyorum
oncekiBeklemeSuresi = musteri.beklemeSuresi;
toplamBeklemeSuresi += musteri.beklemeSuresi;
System.out.println(musteri.musteriNo + " numaralı müşteri " + musteri.beklemeSuresi+ " saniye bekledi.\n");
}
ortalama[i+sayac-2] = toplamBeklemeSuresi / n ;
System.out.println("Ortalama bekleme süresi: "+ ortalama[i+sayac-2]+ " saniye.\n");
System.out.println(i+". Gise'nin Oncelikli Kuyruk Islemleri");
System.out.println("--------------------------------------");
oncekiBeklemeSuresi = 0;
toplamBeklemeSuresi = 0;
while(!pk.bosMu())
{
Musteri musteri = pk.cikar();
musteri.oncelikliBeklemeSuresi = musteri.islemSuresi + oncekiBeklemeSuresi;
oncekiBeklemeSuresi = musteri.beklemeSuresi;
toplamBeklemeSuresi += musteri.beklemeSuresi;
if (musteri.oncelikliBeklemeSuresi < musteri.beklemeSuresi) {//hangisi daha az beklemisse o yazdirilir
System.out.println(musteri.musteriNo+ ". müşteri öncelikli kuyrukta "+ (musteri.beklemeSuresi - musteri.oncelikliBeklemeSuresi)+ " saniye daha az bekledi.");
}
System.out.println(musteri.musteriNo+ " numaralı müşteri "+ musteri.oncelikliBeklemeSuresi+ " saniye bekledi.\n");
}
ortalama[sayac+i-1]=toplamBeklemeSuresi / n ;//oncelik kuyrugu icin ortalama
System.out.println("Ortalama bekleme süresi: "+ ortalama[sayac+i-1]+ " saniye.");
System.out.println("Ortalama islem bekleme süresindeki kazanç: "+(ortalama[i+sayac-2]-ortalama[sayac+i-1])+" saniye.");
System.out.println("Yuzde olarak kazanç: %"+((ortalama[i+sayac-2]-ortalama[sayac+i-1])*100)/(ortalama[sayac+i-1]+ortalama[i+sayac-2]));
sayac++;
}
System.out.println("\nGISE KARSILASTIRMALARI");
System.out.println("----------------------");
System.out.println("1.Gise FIFO Ortalama Bekleme Süresi-->"+ortalama[0]);//1.gise normal ort 2.gise normal ort karsılastır
System.out.println("2.Gise FIFO Ortalama Bekleme Süresi-->"+ortalama[2]);
System.out.println("3.Gise FIFO Ortalama Bekleme Süresi-->"+ortalama[4]);
System.out.println("1.Gise Oncelikli Ortalama Bekleme Süresi-->"+ortalama[1]);//1.gise oncelikli ort 2.gse oncelikli ort karsılastır
System.out.println("2.Gise Oncelikli Ortalama Bekleme Süresi-->"+ortalama[3]);
System.out.println("3.Gise Oncelikli Ortalama Bekleme Süresi-->"+ortalama[5]);
System.out.println("1.Gise Icin Ortalama Bekleme Süresindeki Kazanc(saniye)-->"+(ortalama[0]-ortalama[1]));//kazancları karsılastır saniye ve yüzde olarak
System.out.println("2.Gise Icin Ortalama Bekleme Süresindeki Kazanc(saniye)-->"+(ortalama[2]-ortalama[3]));
System.out.println("3.Gise Icin Ortalama Bekleme Süresindeki Kazanc(saniye)-->"+(ortalama[4]-ortalama[5]));
System.out.println("1.Gise Icin Ortalama Bekleme Süresindeki Kazanc(yüzde)-->%"+(((ortalama[0]-ortalama[1])*100)/(ortalama[0]+ortalama[1])));
System.out.println("2.Gise Icin Ortalama Bekleme Süresindeki Kazanc(yüzde)-->%"+(((ortalama[2]-ortalama[3])*100)/(ortalama[2]+ortalama[3])));
System.out.println("3.Gise Icin Ortalama Bekleme Süresindeki Kazanc(yüzde)-->%"+(((ortalama[4]-ortalama[5])*100)/(ortalama[4]+ortalama[5])));
}
}
birinci Class'ta main kullandiniz mi?>
YanıtlaSil