Veri Yapıları: Proje 1

Bu sene Veri Yapıları dersi alıyoruz. Veri yapılarının uygulamalarını JAVA’da yaptığımız için JAVA’ya ve nesneye yönelik programlamaya ısınmak zorundayız.

Senenin birinci veri yapıları ödevi de tam olarak bunu amaçlanarak verilmiş bize.

Veri yapıları ödevlerini dört kişilik bir ekip olarak yapmaktayız. Kaynak kodlarını örnek almak, fikir edinmek ve bilgi sahibi olma amaçlı kullanabilirsiniz. Eğer projenin kodlarını indirmeden incelemek isterseniz, yazının devamında kodları bulabilirsiniz. Elipse kurulumu hakkında yardıma ihtiyacınız varsa şu yazım işinize yarayabilir.

Sınav Dağılımı

SinavDagilim.java ```java import java.util.Scanner;

/* class SinavDagilim * Authors: Özlem Gürses, Hüseyin Yaşar, Didem Kayalı * Beta Tester: Umut Benzer / public class SinavDagilim { / function kacSinirKullanilacak * Author: Hüseyin Yaşar * * @param: Öğrenci sayısı ve sınıf kapasiteleri * @return: Öğrencilerin kaç sınıfa yerleştirileceği / private static int kacSinifKullanilacak(int ogrSayi, int sinifKapasite[]) { int kapasitelerToplami = 0; int kullanilacakSinifSayisi = 0; for (int i = 0; i < 5; i++) { kapasitelerToplami+=sinifKapasite[i]; kullanilacakSinifSayisi++; if(kapasitelerToplami>=ogrSayi) break; } return kullanilacakSinifSayisi; } / function dagilimBul * Author: Hüseyin Yaşar * * @param: Sıralanmış sınıf kapasiteleri, öğrenci sayısı, boş sınıf mevcudu dizisi * @return: Sınıflara kaçar kişi koyulacağının bilgisi */ private static void dagilimBul(int sinifKapasite[], int ogrSayi, int sinifMevcut[]) { int kapasitelerToplami = 0; int a = kacSinifKullanilacak(ogrSayi, sinifKapasite); float[] sinifMevcutOndalikli = new float[a]; float kusuratlarToplami = 0; for (int i = 0; i < a; i++) { kapasitelerToplami += sinifKapasite[i]; } for (int i = 0; i < a; i++) { sinifMevcutOndalikli[i] = sinifKapasite[i] * ((float) ogrSayi / (float) kapasitelerToplami); sinifMevcut[i] = (int) sinifMevcutOndalikli[i]; kusuratlarToplami += sinifMevcutOndalikli[i] - sinifMevcut[i]; }

if (kusuratlarToplami > 0) { for (int i = 0; i < a; i++) { sinifMevcut[i]++; kusuratlarToplami--; if (kusuratlarToplami <= 0) break; /* küsüratların toplamı olan tamsayıyı soldan sağa * birer birer bitene kadar dağıtır * kusuratlar toplamı daima tamsayı gelmesi gereken bir * sayıdır, örneğin 0.2 ve 0.8 gibi artanlar olur, * bunların toplamı daima tamsayıdır, ama bazen bölümlerde * 0.19999999 ve 0.7999999999 gibi sayılar gelebilir, * bunların toplamları 0.999999 gibi sayılardır, dolayısıyla * 1 eksildiği zaman 0'ın altına düşer, bu yüzden if satırında * küçüktür ibaresi kullanılmıştır. / } } } / function sirala * Author: Didem Kayalı * * @param: Sıralanacak integer dizisi * @return: Sıralanmış integer dizisi (büyükten küçüğe) * * Dizi referans olarak gönderileceğinden void döndürmesi * yeterlidir. Asıl değişiklikler asıl diziye yansıtılır. / private static void sirala(int sinifKapasite[]) { / Standart Bubble Sort Algoritması / for (int i = 0; i < sinifKapasite.length - 1; i++) { for (int j = i + 1; j < sinifKapasite.length; j++) { if (sinifKapasite[j] > sinifKapasite[i]) { int b = sinifKapasite[j]; sinifKapasite[j] = sinifKapasite[i]; sinifKapasite[i] = b; } } } } / function dagit * Author: Özlem Gürses * * @param: Sıralanmış sınıf kapasiteleri, içerilerine yerleştirilecek öğrenci sayısı

  • @return: Ekrana çıktı / private static void dagit(int sinifKapasite[], int sinifMevcut[]) { String ad[] = { "umut", "didem", "özlem", "hüseyin", "hülya", "banu", "ajdar","ayşe","mehmet","hüsnü","canan","metin","okşan" }; String soyad[] = { "benzer", "kayalı", "gürses", "yaşar", "avşar", "alkan", "anık","sert","andıç","yılmaz","şahin","kurt","çelik", "boya","hüyük","güler","sever","ceylan"}; / * "" sayısının fazla olması, daha az ek seçilmesini sağlamaya * yöneliktir. */ String ekleAd[] = { "can", "gül", "nur", "su", "","","" }; String ekleSoyad[] = { "oğlu", "gil", "öz", "","","","" };

for (int i = 0; i <= sinifKapasite.length-1; i++) { /* UBenzer düzenleme */ if(sinifKapasite[i]==0) { System.out.print((i+1)+". sınıf boş sınıftır.\n"); } else if(sinifMevcut[i]==0){ System.out.print(sinifKapasite[i]+" kişilik sınıfa öğrenci yerleştirilmemiştir.\n"); } else { float ort = (float) 100 * sinifMevcut[i] / sinifKapasite[i]; System.out.println("\n\n" + sinifKapasite[i] + " kişilik sınıfa " + sinifMevcut[i] + " kişi yerleştirildi.\nsınıfın doluluk oranı: " + ort + " %dır."); for (int k = 0; k < sinifMevcut[i]; k++) { String yeniIsim = ad[(int) (Math.random() * ad.length)] .concat(ekleAd[(int) (Math.random() * ekleAd.length)]); String yeniSoyisim = soyad[(int) (Math.random() * soyad.length)] .concat(ekleSoyad[(int) (Math.random() * ekleSoyad.length)]); int yil = (int) (Math.random() * 8); System.out.print((k+1) + ". 05-0" + yil + "-" + (int) (Math.random() * 9) + (int) (Math.random() * 9) + (int) (Math.random() * 9) + (int) (Math.random() * 9) + " "+yeniIsim + " " + yeniSoyisim+"\n"); } } }

} /* function main * Author: Hüseyin Yaşar / public static void main(String[] args) { int[] sinifKapasite = new int[5]; int[] sinifMevcut = new int[5]; int ogrSayi; int top; int kntrl = 0; Scanner str = new Scanner(System.in); do { top=0; if(kntrl==1) System.out.println("Hatalı giriş."); System.out.println("Yerlestirilecek ogrenci sayisini giriniz: "); ogrSayi = str.nextInt(); if(ogrSayi < 100 || ogrSayi > 200){ kntrl = 1; continue; } for(int i=0; i<sinifKapasite.length; i++){ System.out.println((i+1)+". sinifin kapasitesini giriniz: "); sinifKapasite[i]=str.nextInt(); if(sinifKapasite[i]<0) { kntrl = 1; break; } top+=sinifKapasite[i]; } if(top < ogrSayi) { kntrl = 1; } else { kntrl = 0; } } while(kntrl==1); sirala(sinifKapasite); dagilimBul(sinifKapasite, ogrSayi, sinifMevcut); / Hata ayıklama */ System.out.println(sinifMevcut[0] + " " + sinifMevcut[1] + " " + sinifMevcut[2] + " " + sinifMevcut[3] + " " + sinifMevcut[4] + " " ); dagit(sinifKapasite, sinifMevcut); } }


## IMKB Endeksi

*IMKB.java* ```java
 /* class IMKB * Authors: Umut Benzer, Özlem Gürses, Hüseyin Yaşar, Didem Kayalı * */

public class IMKB { /* function main * Author: Umut Benzer */ public static void main(String[] args) {

System.out.println("Çökmez Bilişim Sistemleri Gururla Sunar :)\n" + "Veri Yapıları Proje 1.2\n" + "IMKB Endeks 0.2\n\n" + "05-06-7657 Hüseyin YAŞAR\n" + "05-06-7669 Didem KAYALI\n" + "05-06-7670 Umut BENZER\n" + "05-07-8496 Özlem GÜRSES\n\n");

int ay = 1; float toplamIMKBDeger = 0; int toplamIMKBSayi = 0; float gecenAyIMKBDeger = deger(0);

int oncekiIMKBSeans = 0;

/* En yüksek üç değerin ve seans numaralarının tutulacağı yapı. */ float IMKBEnYuksekDeger[] = { -1, -1, -1 }; int IMKBEnYuksekSeans[] = { -1, -1, -1 };

/* En düşük üç değerin ve seans numaralarının tutulacağı yapı. */ float IMKBEnDusukDeger[] = { -1, -1, -1 }; int IMKBEnDusukSeans[] = { -1, -1, -1 };

for (int sayac = 1; sayac <= 730; sayac++) { /* * Bu yılın her seansı için işlem tekrarlanır. */

if (deger(sayac) != -1) { /* Eğer tatil gününe denk gelmediysek */

/* Her seans için değişim farkı bulunup ekrana yazdırılır */ System.out .println(((oncekiIMKBSeans == 0) ? "Bir önceki yılın son günü " : hangiAy(oncekiIMKBSeans) + ". ayın " + hangiGun(oncekiIMKBSeans) + ". günü ") + ((sayac % 2 == 0) ? "1" : "2") + ". seans ile " + hangiAy(sayac) + ".ayın " + hangiGun(sayac) + ". günü " + ((sayac % 2 == 0) ? "2" : "1") + ". seansı arası değişim oranı: " + degisimOrani(deger(oncekiIMKBSeans), deger(sayac)) + "%");

/* * Değişim oranlarını hesaplarken tatil günlerinde hata olmaması * için bir önceki seansın değeri bu değişkende tutulur. */ oncekiIMKBSeans = sayac;

/* * O ayın seans verileri toplamIMKBDeger değişkenine eklenir. * Ayda kaç seans olduğu toplamIMKBSayi ile hatırlanır., */ toplamIMKBDeger += deger(sayac); toplamIMKBSayi++;

/* * En düşük değer olup olmadığını araştır. IMKBEnDusuk[2] küçük * değerlerin en büyüğünü, IMKBEnDusuk[0] küçük değerlerin en * küçüğünü saklar. */ if ((deger(sayac) <= IMKBEnDusukDeger[2]) || IMKBEnDusukDeger[2] == -1) { if ((deger(sayac) <= IMKBEnDusukDeger[1]) || IMKBEnDusukDeger[1] == -1) { if ((deger(sayac) <= IMKBEnDusukDeger[0]) || IMKBEnDusukDeger[0] == -1) { /* Şimdiye kadarki en küçük değeri bulduk! */ IMKBEnDusukDeger[2] = IMKBEnDusukDeger[1]; IMKBEnDusukSeans[2] = IMKBEnDusukSeans[1];

IMKBEnDusukDeger[1] = IMKBEnDusukDeger[0]; IMKBEnDusukSeans[1] = IMKBEnDusukSeans[0];

IMKBEnDusukDeger[0] = deger(sayac); IMKBEnDusukSeans[0] = sayac; } else { /* Şimdiye kadarki en küçük ikinci değeri bulduk! */ IMKBEnDusukDeger[2] = IMKBEnDusukDeger[1]; IMKBEnDusukSeans[2] = IMKBEnDusukSeans[1];

IMKBEnDusukDeger[1] = deger(sayac); IMKBEnDusukSeans[1] = sayac; } } else { /* Şimdiye kadarki en küçük üçüncü değeri bulduk! */ IMKBEnDusukDeger[2] = deger(sayac); IMKBEnDusukSeans[2] = sayac; } }

/* * En yüksek değer olup olmadığını araştır. IMKBEnYuksek[2] * büyük değerlerin en küçüğünü, IMKBEnYuksek[0] büyük * değerlerin en büyüğünü saklar. */ if ((deger(sayac) >= IMKBEnYuksekDeger[2]) || IMKBEnYuksekDeger[2] == -1) { if ((deger(sayac) >= IMKBEnYuksekDeger[1]) || IMKBEnYuksekDeger[1] == -1) { if ((deger(sayac) >= IMKBEnYuksekDeger[0]) || IMKBEnYuksekDeger[0] == -1) { /* Şimdiye kadarki en büyük değeri bulduk! */ IMKBEnYuksekDeger[2] = IMKBEnYuksekDeger[1]; IMKBEnYuksekSeans[2] = IMKBEnYuksekSeans[1];

IMKBEnYuksekDeger[1] = IMKBEnYuksekDeger[0]; IMKBEnYuksekSeans[1] = IMKBEnYuksekSeans[0];

IMKBEnYuksekDeger[0] = deger(sayac); IMKBEnYuksekSeans[0] = sayac; } else { /* Şimdiye kadarki en küçük ikinci değeri bulduk! */ IMKBEnYuksekDeger[2] = IMKBEnYuksekDeger[1]; IMKBEnYuksekSeans[2] = IMKBEnYuksekSeans[1];

IMKBEnYuksekDeger[1] = deger(sayac); IMKBEnYuksekSeans[1] = sayac; } } else { /* Şimdiye kadarki en küçük üçüncü değeri bulduk! */ IMKBEnYuksekDeger[2] = deger(sayac); IMKBEnYuksekSeans[2] = sayac; } }

/* Ayın son seansına gelmişsek */ if (hangiAy(sayac + 1) != ay) { System.out.println("\n" + ay + ".ay için endeks ortalaması: " + (toplamIMKBDeger / toplamIMKBSayi)); System.out.println(((ay == 1) ? "Geçen yılın son ayı" : (ay - 1) + ". ay") + " ile " + ay + ". ay arasındaki değişim oranı: " + degisimOrani(gecenAyIMKBDeger, deger(sayac)) + "%\n"); gecenAyIMKBDeger = deger(sayac); toplamIMKBDeger = 0; toplamIMKBSayi = 0; ay++; } } }

System.out.println("\n\nEndeksin en düşük olduğu üç gün:");

for (int sayac = 0; sayac < 3; sayac++) { System.out.println(hangiAy(IMKBEnDusukSeans[sayac]) + ". ayın " + hangiGun(IMKBEnDusukSeans[sayac]) + ". gününün " + ((IMKBEnDusukSeans[sayac] % 2 == 0) ? "2" : "1") + ". seansı. (Puan: " + IMKBEnDusukDeger[sayac] + ")"); }

System.out.println("\n\nEndeksin en yüksek olduğu üç gün:");

for (int sayac = 0; sayac < 3; sayac++) { System.out.println(hangiAy(IMKBEnYuksekSeans[sayac]) + ". ayın " + hangiGun(IMKBEnYuksekSeans[sayac]) + ". gününün " + ((IMKBEnYuksekSeans[sayac] % 2 == 0) ? "2" : "1") + ". seansı. (Puan: " + IMKBEnYuksekDeger[sayac] + ")"); }

}

/* function hangiGun * Author: Didem Kayalı * * @param: Seans numarası * @return: Ayın bir günü (1-31) Seansın ayın hangi * gününe ait olduğunu döndürür. */ private static int hangiGun(int seansno) { int kalan = seansno % 2;

if ((seansno >= 1) && (seansno <= 62)) { if (kalan == 1) return ((seansno / 2) + 1); else return (seansno / 2); } else if ((seansno >= 63) && (seansno <= 118)) { if (kalan == 1) return (((seansno - 62) / 2) + 1); else return ((seansno - 62) / 2);

} else if ((seansno >= 119) && (seansno <= 180)) { if (kalan == 1) return (((seansno - 118) / 2) + 1); else return ((seansno - 118) / 2); } else if ((seansno >= 181) && (seansno <= 240)) { if (kalan == 1) return (((seansno - 180) / 2) + 1); else return ((seansno - 180) / 2); } else if ((seansno >= 241) && (seansno <= 302)) { if (kalan == 1) return (((seansno - 240) / 2) + 1); else return ((seansno - 240) / 2); } else if ((seansno >= 303) && (seansno <= 362)) { if (kalan == 1) return (((seansno - 302) / 2) + 1); else return ((seansno - 302) / 2); } else if ((seansno >= 363) && (seansno <= 424)) { if (kalan == 1) return (((seansno - 362) / 2) + 1); else return ((seansno - 362) / 2); } else if ((seansno >= 425) && (seansno <= 486)) { if (kalan == 1) return (((seansno - 424) / 2) + 1); else return ((seansno - 424) / 2); } else if ((seansno >= 487) && (seansno <= 546)) { if (kalan == 1) return (((seansno - 486) / 2) + 1); else return ((seansno - 486) / 2); } else if ((seansno >= 547) && (seansno <= 608)) { if (kalan == 1) return (((seansno - 546) / 2) + 1); else return ((seansno - 546) / 2); } else if ((seansno >= 609) && (seansno <= 668)) { if (kalan == 1) return (((seansno - 608) / 2) + 1); else return ((seansno - 608) / 2); } else if ((seansno >= 669) && (seansno <= 730)) { if (kalan == 1) return (((seansno - 668) / 2) + 1); else return ((seansno - 668) / 2); } else return -1; }

/* function hangiAy * Author: Didem Kayalı * * @param: Seans numarası * @return: Yılın bir ayı (1-12) Seansın ayın hangi * aya ait olduğunu döndürür. */ private static int hangiAy(int seansno) { /* Didem */ /* Eğer 730'dan fazlaysa -1 döndürmeli */ if ((seansno >= 1) && (seansno <= 62)) return 1;

else if ((seansno >= 63) && (seansno <= 118))

return 2;

else if ((seansno >= 119) && (seansno <= 180))

return 3;

else if ((seansno >= 181) && (seansno <= 240))

return 4;

else if ((seansno >= 241) && (seansno <= 302))

return 5;

else if ((seansno >= 303) && (seansno <= 362))

return 6;

else if ((seansno >= 363) && (seansno <= 424))

return 7;

else if ((seansno >= 425) && (seansno <= 486))

return 8;

else if ((seansno >= 487) && (seansno <= 546))

return 9;

else if ((seansno >= 547) && (seansno <= 608))

return 10;

else if ((seansno >= 609) && (seansno <= 668))

return 11;

else if ((seansno >= 669) && (seansno <= 730))

return 12;

else

return -1; }

/* function degisimOrani * Author: Didem Kayalı * * @param: İlk seansın değeri * @param: İkinci seansın değeri * @return: Seanslar arası değişim oranı * * Seanslar arasındaki değişim oranını % * cinsinden döndürür. */ private static float degisimOrani(float ilkyuzde, float sonyuzde) { return (100 * (sonyuzde - ilkyuzde)) / ilkyuzde; }

/* function tatilMi * Author: Özlem Gürses * * @param: Seans numarası * @return: Seansın olması gerektiği günün tatil olup * olmadığı */ private static boolean tatilMi(int no) { int yil[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int ay = hangiAy(no); int gun = 0; for (int i = 0; i < ay; i++) { gun += yil[i]; } gun += hangiGun(no);

/* * JOptionPane.showMessageDialog(null, "Gün: " + gun + "\n" + "No" + no + * "\nAy =" + ay + "\nhangigun(no) " + hangiGun(no), * "tatilMi",JOptionPane.PLAIN_MESSAGE); */

if (gun % 7 == 0 || gun % 7 == 6) return true; else return false;

}

/* function deger * Author: Hüseyin Yaşar * * @param: Seans numarası * @return: Eğer seans tatil gününe denk gelmiyorsa * rastgele bir seans değeri üretir. Tatil günleri için -1 döndürür. */ private static float deger(int seansno) { if (tatilMi(seansno)) return -1;

float IMKBdegeri; IMKBdegeri = 30000 + 20000 * randomFonksiyon(seansno); return IMKBdegeri; }

private static float randomFonksiyon(int x) { float y; y = (float) Math.sin(x) + (float) Math.sin(x / 2) + 2 + parcaliFonksiyon(x); // Math.sin(double x) metodu double döndürdüğü için her kullanımından // önce floata çevrilir. y /= 4; return y; }

private static float parcaliFonksiyon(int a) { float x, y; x = a; if (0 <= x && x < 70) y = 0; else if (70 <= x && x < 315) y = -x / 180 + 1; else if (315 <= x && x < 450) y = 1; else if (450 <= x && x < 720) y = x / 360 + 2; else if (720 <= x) y = 0; else { System.out.println("Random hatası"); return -1; } return y; } }