27 Eylül 2012 Perşembe

Java - Otopark


Bir fabrikadan üretim hatası ile çıkan arabalar, daha sonra kaza testlerinde kullanılmak için bir otoparka yerleştirilmektedir. Otomobiller, otoparkın ilk yani 1. katına bir kuyruk, 2. katına bir yığıt ve 3. katına da bir dairesel bağlaçlı liste düzeninde yerleştirilip alınmaktadır. Otopark 6 katlı olup bu yapı üst katlarda da tekrarlanmaktadır.
Random bir kat numarası seçilmekte ve ardından 1 adet araba kaza testi için otoparktan alınmaktadır. Sadece arabaların bağlaçlı liste düzeninde yerleştirildiği katlarda, alınacak araba balon problemine benzer şekilde n adet araba atlanarak seçilmekte ve bağlaçlı listelerde kalınan yer tutulmaktadır.   

Java dilinde bu problemin çözümünü ve simülasyonunu yapan programı yazınız:
a)         Tüm veri yapılarına 30’ar adet araba yerleştiriniz ve listeyi ekrana yazdırınız. Arabaların her birinin farklı renklerde olduğunu düşünüp Renkleri (Kırmızı, Yeşil, Mavi,… gibi) “text” olarak temsil edebilirsiniz. (Java’nın hazır Stack, Queue sınıfları kullanılmalı; Dairesel bağlaçlı listeyi ise kendiniz tasarlamalısınız.) İpucu: Kolaylık açısından, katları vektörde temsil edebilirsiniz.
b)         Tüm arabalar bitene kadar yukarıda anlatılan işlemi tekrarlayınız ve her turda, katlarda kalanların, silinenlerin renklerini ekrana yazdırınız. Son kalan arabanın rengini belirtiniz.
c)         Kullandığınız bilgisayarın 3 saniyede ortalama kaç adet otopark problemi çözebildiğini hesaplatınız. Zamanı hesaplarken ekrana yazdırma, girdi alma gibi komutları devre dışı bırakacak şekilde kodu ayarlayınız.


Araba.java

public class Araba {
public int no;
private String renk;
public Araba sonraki;
public Araba(int no)
{
this.no = no;
String[] renkler = {"Siyah","Mavi","Yesil","Kırmızı","Turuncu","Sarı","Turuncu","Gri","Beyaz"};
this.renk = renkler[(int) (Math.random() * renkler.length)];
}
public void cikaniYazdir()
{
System.out.print(renk + " ");
}
public String toString()
{
return renk;
}

} 



DaireselBaglıListe.java


public class DaireselBaglıListe {
Araba etkin;
int katNo;
public DaireselBaglıListe(int katNo)
{
this.katNo = katNo;
etkin = null;
}
public void ekle(int no)
{
if(etkin == null) // liste bos ise
{
Araba yeniAraba = new Araba(no);
etkin = yeniAraba;
etkin.sonraki = etkin;  // dairesel oldugu icin
}
else
{
Araba yeniAraba = new Araba(no);
Araba simdiki = etkin;
Araba gecici = etkin;
do {
gecici = gecici.sonraki;
simdiki = gecici.sonraki;
} while (simdiki != etkin);
etkin.sonraki = yeniAraba;
yeniAraba.sonraki = etkin;
}
}
public void cikar(int n)
{
Araba cikan = etkin.sonraki; // cikarilacak olan
if(n == 1) // teker teker cikarilacaksa
{
while(cikan.sonraki != etkin)
{
cikan = cikan.sonraki;
}
System.out.println(katNo+".kattaki "+n+".sıradaki arabalar cikarilmaktadır. "+"\nListedeki arabalar:\n");
yazdir();
System.out.println("Cikarilan Araba ");
etkin.cikaniYazdir();
cikan.sonraki = etkin.sonraki;
etkin = etkin.sonraki;
System.out.println("\nListedeki arabalar:\n");
yazdir();
}
else
{
System.out.print("\n"+katNo+".katta ilk arabadan itibaren her "+n+".araba cikarilmaktadır.\n\n");
System.out.println(katNo + ". katta olan arabalar:");
yazdir();
System.out.println();
int sayac = 1;
while (sayac < n - 1) {// n defa dönmek için..
sayac++;
etkin = etkin.sonraki;
cikan = cikan.sonraki;
}
System.out.println("\n"+katNo+".katta "+"cikarilan; ");
cikan.cikaniYazdir();// her turda kat numarası ve n değerinin
// yazdırılması
System.out.println();// bir satır alta geçmek için
etkin.sonraki = cikan.sonraki;
etkin = etkin.sonraki;
cikan = cikan.sonraki.sonraki;
}
System.out.println("\n"+katNo+".katta "+"kalanlar;\t");
yazdir();// ekrana yazdirma methodu 
System.out.println();
}

void yazdir() {
Araba dolas;
dolas = etkin;
do{
dolas.cikaniYazdir();
}while(dolas != etkin);
}
public boolean doluMu() {
if (etkin == etkin.sonraki)
return false;
else
return true;
}
public int bosMu() {
if (etkin == null)
return 1;
else
return 0;
}

}


Test.java


import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;


public class Test {
public static void main(String args[])
{
int n = 0;
int kontrol1 = 0;
int kontrol2 = 0;
String[] kalanlar = {null,null,null,null,null,null};  // katlarda son kalan arabalar
do{
System.out.println("Kaç arabada bir çıkarılsın (bir araba)");
Scanner input = new Scanner(System.in);
n = input.nextInt();
}while(n <= 0);
int sayac1 = 1;   // baglı listeli katlarda araba eklerken kullanılacak
int sayac2 = 1;
int kacinciKat = 3;
Stack<Araba> kat5 = new Stack<Araba>();
Stack<Araba> kat2 = new Stack<Araba>();
Queue<Araba> kat1 = new LinkedList<Araba>();
Queue<Araba> kat4 = new LinkedList<Araba>();
for(int i=1;i<31;i++)
{
Araba araba = new Araba(i);
kat2.push(araba);
}
for(int j=1;j<31;j++)
{
Araba araba = new Araba(j);
kat5.push(araba);
}
for(int m=1;m<31;m++)
{
Araba araba = new Araba(m);
kat1.add(araba);
}
for(int k=1;k<31;k++)
{
Araba araba = new Araba(k);
kat4.add(araba);
}
  Iterator<Araba> itr1=kat1.iterator();    
      Iterator<Araba> itr2=kat2.iterator();    
      Iterator<Araba> itr3=kat5.iterator();   
      Iterator<Araba> itr4=kat4.iterator();
      
      System.out.print("1.kattaki arabalar\n");    
      listele(itr1);
      System.out.print("\n");
      System.out.print("2.kattaki arabalar\n");    
      listele(itr2);
      System.out.print("\n");
      System.out.print("4.kattaki arabalar\n");     
      listele(itr4);                               
      System.out.print("\n");
      System.out.print("5.kattaki arabalar\n");
      listele(itr3);
      
      
      DaireselBaglıListe kat3 = new DaireselBaglıListe(kacinciKat);      
      DaireselBaglıListe kat6 = new DaireselBaglıListe(kacinciKat+3);    
                                           
while(sayac1<=30){
kat3.ekle(sayac1);     
sayac1++;                
}
   System.out.println("\n"+kacinciKat+". kattaki arabalar:");   
kat3.yazdir();                 
kacinciKat+=3;                       
while(sayac2<=30){   
kat6.ekle(sayac2);
sayac2++;
}
System.out.println("\n"+kacinciKat+". kattaki arabalar:"); 
kat6.yazdir();       
System.out.println();  
System.out.println("----------------------------------------------------------------------------");
int random_sayi=-1;     
int problemSayisi=0;
long zaman;
final long baslangic = System.currentTimeMillis();
while(kat1.size()!=0 || kat2.size()!=0 || kat4.size()!=0 || kat5.size()!=0 || kontrol1!=1 || kontrol2!=1){
random_sayi=(int)(Math.random()*6);   
switch(random_sayi)                  
{                             
case 0:  
System.out.println("1. kattaki arabalar");  
System.out.println(kat1);
if(kat1.size()==0)
{
System.out.println("Kat bos!\n");  
break;
}
if(kat1.size()==1)
{  
kalanlar[0]=kat1.peek().toString(); 
                                   
}
System.out.println("Silinen araba:"+kat1.remove());   
   System.out.println(kat1);    
   System.out.println();   
 
break;  
case 1:
System.out.println("2. kattaki arabalar");  
System.out.println(kat2);                    
if(kat2.size()==0)
{
System.out.println("Kat bos!\n");    
break;
}
if(kat2.size()==1)
{
kalanlar[1]=kat2.peek().toString();    
                                                    
}
System.out.println("Silinen araba:"+kat2.pop());  
   System.out.println(kat2);            
   System.out.println();                  
break;                          
case 2:
if(kat3.bosMu()==1){    
System.out.println("Kat bos!\n");
break;    
}
if(kat3.doluMu()==false)   
{
if(kontrol1==0){            
kalanlar[2]=kat3.etkin.toString();        
System.out.println("3. kattaki arabalar\n");
System.out.print("3.katta ilk arabadan itibaren her "+n+".araba cikarilmaktadır.\n\n");
System.out.println("3.katta kalan arabalar :");
System.out.println(kat3.etkin);
System.out.println("\n3.katta cikarilan;");  
System.out.println(kat3.etkin);
System.out.println("\n3.katta kalanlar;\n");
kontrol1++;  
}
else   
{
System.out.println("3. kattaki arabalar\n");
System.out.println("Kat bos!\n");
  break;  
}
 
}
else{   
System.out.println("3. kattaki arabalar");   
kat3.cikar(n);        
}
System.out.println();
   
break;  
case 3:
System.out.println("4. kattaki arabalar");    
System.out.println(kat4);
if(kat4.size()==0)   
{
System.out.println("Kat bos!\n");   
break;
}
if(kat4.size()==1)    
{
kalanlar[3]=kat4.peek().toString();   
}
System.out.println("Silinen araba:"+kat4.remove());   
   System.out.println(kat4);
   System.out.println();
break;       
case 4:
System.out.println("5. kattaki arabalar");   
System.out.println(kat5);
if(kat5.size()==0)   
{
System.out.println("Kat bos!\n");
break;
}
if(kat5.size()==1)   
{
kalanlar[4]=kat5.peek().toString();
}
System.out.println("Silinen araba:"+kat5.pop());  
   System.out.println(kat5);
   System.out.println();
break;  
case 5:
if(kat6.bosMu()==1){   
System.out.println("kat bos!");
break;    
}
if(kat6.doluMu()==false)   
{   
   if(kontrol2==0){   
kalanlar[5]=kat6.etkin.toString();  
System.out.println("6. kattaki arabalar\n");
System.out.print("6.katta ilk arabadan itibaren her "+n+".araba cikarilmaktadır.\n\n");
System.out.println("6.katta kalan arabalar :");
System.out.println(kat6.etkin);
System.out.println("\n6.katta cikarilan;");  
System.out.println(kat6.etkin);
System.out.println("\n6.katta kalanlar;\n");
kontrol2++;   
}
  else  
  {
  System.out.println("6. kattaki arabalar\n");
  System.out.println("Kat bos!\n");
  break;
  }
}
else {  
System.out.println("6. kattaki arabalar");   
kat6.cikar(n);
}
System.out.println();
 
break;  
problemSayisi++;   // While'in kac kez dondugunu gormek icin kullandigimiz degisken.
}
  
final long bitis = System.currentTimeMillis(); //islem bitince sistem saatine bakildi.
zaman=bitis-baslangic;   // Aradaki zaman farki bulundu.
if(zaman==0){ 
System.out.println("Problemin cozum suresi, sistem saatinin algilayabilecegi kadar buyuk degil.");
}
else{    
System.out.println("----------------------------------------------------------------------------");
System.out.println("\n\n"+problemSayisi+" kere while dongusune girildi.");
System.out.println("1 adet problem yaklasik "+zaman+" milisaniyede cozuldu.");
System.out.println("3 saniyede cozulebilecek otopark problemi sayisi = "+(long)3000/zaman);
}
 
System.out.println("1.kattan son cikarilan araba: " +kalanlar[0]);
System.out.println("2.kattan son cikarilan araba: " +kalanlar[1]);
System.out.println("3.kattan son cikarilan araba: " +kalanlar[2]);
System.out.println("4.kattan son cikarilan araba: " +kalanlar[3]);
System.out.println("5.kattan son cikarilan araba: " +kalanlar[4]);
System.out.println("6.kattan son cikarilan araba: " +kalanlar[5]);
}
public static void listele(Iterator<Araba> itr1)
{
System.out.print("Arabaların renkleri:");  
while(itr1.hasNext())
      {
      Araba iteratorValue=itr1.next();  
      
      System.out.print(iteratorValue+" ");
      }
}

}






Hiç yorum yok:

Yorum Gönder