Categories
Object Oriented Design

Midterm Sample Questions

Veri Koleksiyonları

  1. 10 ile 100 arasında rasgele bir sayı oluşturun. Oluşturulan rasgele sayı kadar bir liste oluşturarak içerisine rasgele sayılar ekleyiniz. Eklenen sayıların ortanca sayısını ekrana gösteren bir uygulama geliştiriniz.
  2. 10 ile 100 arasında rasgele iki sayı oluşturun. Oluşturulan 1. rasgele sayı kadar 1. listeye rasgele sayılar yerleştiriniz. Oluşturulan 2. rasgele sayı kadar 2. listeye rasgele sayılar yerleştiriniz. Bu iki liste arasındaki ortak elemanları ekrana gösteren bir uygulama geliştiriniz. Not: Ortak sayılar aranırken aynı sayı sadece bir defa ekrana basılmalıdır.

Objeler ve Sınıflar

  1. dikdortgenPrizmasi isminde bir sınıf geliştirilecektir. Aşağıdaki şekilde bir dikdörtgen prizması verilmiştir.


    Bu sınıfın private olarak en, boy ve yukseklik ve public alan değişkenleri bulunmaktadır.

    Constructor’unda 3 adet integer almakta ve değişkenlere yazmaktadır.

    hacimHesapla fonksiyonu geriye en, boy, yukseklik değişkenlerinin çarpımını döndürmektedir ve alan değişkenine kaydetmektedir.

    yuzeyAlanHesapla fonksiyonu ise, tüm yüzlerin alan toplamını geri döndürmektedir.

    dikdortgenPrizmasi sınıfını test eden bir kod geliştiriniz. Sınıftan yaratılan objenin hacimHesapla ve yuzeyAlanHesapla fonksiyonlarını kullanarak ekrana bastırınız.

  2. zaman isimli bir sınıf oluşturunuz.

    public olarak,

    * int yil
    * int ay
    * int gun
    * int saat
    * int dakika
    * int saniye

    * zaman(self, int, int, int, int, int, int)
    * zaman farkAl(zaman)
    * void bastir()

    değişken ve fonksiyonları bulunmaktadır.

    Sınıf’ın constructor’undan alınan argümanlar, sınıf değişkenlerine yazılmaktadır.

    farkAl fonksiyonu, zaman sınıfı objesi alıp, şu anki obje ile argüman olarak alınan objenin arasındaki farkı alıp geriye zaman sınıfı olarak döndürmektedir. Eğer şuanki obje, argüman olarak alınan objeye göre daha yeni bir tarih ise, geriye dönecek tüm zaman değişkenleri -1 olacaktır.

    bastir fonksiyonu ise tüm değişkenleri ekrana bastırmaktadır.

    Main’de zaman sınıfından iki obje türetip, ilk objenin farkAl fonksiyonuna ikinci objeyi argüman olarak gönderip, geri dönen zaman sınıfının değişkenlerini ekrana bastir fonksiyonu ile bastiriniz.

  3. ikizkenarUcken isimli bir sınıf yaratınız.

    Bu sınıfta private olarak,

    * int ikizKenarAcisi
    * int digerAci
    * int digerAciHesaplama()

    değişkenler ve fonksiyonu

    Public olarak,

    * ikizKenarUcken(int)
    * int ikizKenarAcisiAl()

    fonksiyonu bulunmaktadır.

    Constructor’da alınan argüman, ikizKenarAcisi değişkenine yazılmakta ve digerAciHesaplama fonksiyonu çağrılmaktadır.

    ikizKenarAcisiAl() fonksiyonu geriye ikizKenarAcisi degiskenini dondurmektedir.

    digerAciHesaplama fonksiyonu, ikizKenarAcisi değişkenini iki ile çarparak 180’den çıkartıp, digerAci değişkenine yazmaktadır. digerAci değişkeni – hesaplanır ise, bu fonksiyon hata mesajı yazdıracaktır. Eğer digerAci değişkeni 60 çıktı ise, ekrana “Eşkenar üçken” yazdırılacaktır.

    ikizKenarUcken sınıfını test edecek bir kod parçacığı geliştiriniz.

Kalıtım

  1. Bir üniversite’nin ders bilgilerini içerecek bir uygulama geliştirilecektir.

    Fizik, kimya, matematik ve ders isminde 4 sınıf oluşturunuz.

    ders sınıfında;

    * string dersAdi
    * int kayitliOgrenciSayisi

    değişkenleri bulunacaktır.

    Fizik, kimya ve matematik sınıfları, ders sınıfından kalıtım yapılacaktır.

    Bu sınıfların constructor’unda ders adı ve kayitliOgrenciSayisi parametresi alarak dersAdı ve kayitliOgrenciSayisi değişkenlerine yazacaktır.

    Bu sınıfların içine yazılacak, kimyaDeneyiYap, fizikDeneyiYap, matematikDeneyiYap fonksiyonları ile ekrana “Fizik deneyi yapıldı”, “Kimya deneyi yapıldı”, “Matematik deneyi yapıldı” metinlerini bastırınız (Örn kimya sınıfı için sadece kimyaDeneyiYap fonksiyonu olacak).

    Fizik, kimya ve matematik sınıflarından birer obje yaratıp, alma fonksiyonları ile ders isim ve kayıtlı öğrenci sayısını ekrana bastıran bir test uygulaması geliştiriniz.

  2. dikdortgen ve dikdortgenAlan isimli iki sınıf oluşturulacaktır.

    dikdortgen sınıfında;

    * int en
    * int boy

    değişkenleri ve 

    * int enAl()
    * int boyAl()
    * int enAyarla(int)
    * int boyAyarla(int)

    fonksiyonları bulunmaktadır. Al fonksiyonları değeri geri döndürmekte, ayarla fonksiyonları ise aldığı argümanı değişkenlere atamaktadır. Ayarla fonksiyonları girilen sayının 0’dan büyük, 1000’den küçük olmasını kontrol etmekte, doğru giriş alındıysa geriye 0, yanlış ise 1 döndürmektedirler.

    dikdortgenAlan sınıfında

    * int alanHesapla()

    fonksiyonu bulunmaktadır. Bu fonksiyon aldığı argümanları çarparak geri döndürmektedir.

    dikdörtgenAlan sınıfı dikdortgen sınıfından türetilmiştir.

    dikdortgenAlan sınıfından bir obje türetip, en ve boy değerlerini kullanıcıdan alarak sınıf değişkenlerine yazınız. En ve boy değişkenleri istenen aralıkta değilse, tekrar giriş yapmasını fonksiyondan dönen değere göre sağlayınız.

    alanHesapla fonksiyonunu çağırarak, hesaplanmış alanı ekrana bastırınız.

  3. Aşağıda birbirleri ile olan ilişkisi UML diyagramı olarak verilen sınıfları geliştiriniz.


    vadesizHesap ve vadeliHesap sınıfları, hesapBilgileri sınıfından türetilmiştir.hesapBilgileri sınıfındaki;

    paraYatir fonksiyonu, bakiye değişkeninin değerinin üzerine eklenerek güncellemektedir. Aldığı argüman 0’dan küçük ise kullanıcıya hata mesajı göstermelidir.

    vadesizHesap sınıfındaki;

    Constructor aldığı iki parametreyi, eksiBakiyeUcreti ve eksiBakiyeLimiti değişkenlerine yazmaktadır.

    paraCek fonksiyonu, bakiye değişkeninin değerinden eksilterek güncellemektedir. Aldığı argüman 0’dan küçük ise kullanıcıya hata mesajı göstermelidir. Ayrıca güncellenecek değer en fazla -eksiBakiyeLimiti kadar olabilir. -eksiBakiyeLimiti’den fazla olduğu durumda kullanıcıya hata mesajı göstermelidir.

    Örn. eksikBakiyeLimiti 2000 ise, kullanıcının bakiyesi -2000’den daha az olamaz.

    Eğer kullanıcının yapılan paraCek fonksiyonu ile bakiyesi 0’ın altına düşüyorsa, bakiyeden ayrıca eksiBakiyeUcreti’de çıkartılır.

    vadeliHesap sınıfındaki;

    Constructor aldığı parametreyi, yillikFaizOrani değişkenine yazmaktadır.

    faizOdemesiHesapla fonksiyonu çağrıldığında, faizOranına göre bakiye değişkenini artırmaktadır. Örn faiz oranı 11 ise, bakiye+= bakiye * 11 /100 yapılacaktır.

Çok Biçimlilik

  1. siralamaAlgoritmalari isiminde bir sınıf oluşturunuz.

    Bu sınıfın içerisinde public olarak;

    siralamaAlgoritmari constructor’u, constructor parametre almamaktadır. Sınıfta bulunan değişken hesaplamaAdimlari değerini 0’a atamaktadır.

    hesaplamaAdimlariniGetir fonksiyonu argüman almadan, geriye hesaplamaAdimlari integer değişkenini geriye döndürmektedir..

    selectionSortAlgoritması isminde bir sınıf tanımanacaktır. Bu sınıf siralamaAlgoritmalari sınıfından kalıtım yapılacaktır. Public olarak sirala fonksiyonu tanımlanacaktır. Bu fonksiyon liste alıp, geriye selection sort algoritması ile sıralanmış liste döndürecektir. Bu fonksiyonda selection sort algoritmasının kaç döngü adımında tamamlandığını sıralama işleminin sonunda sınıftaki hesaplamaAdimlari değişkenine yazmaktadır. 

    bubbleSortAlgoritmasi isminde bir sınıf tanımanacaktır. Bu sınıf siralamaAlgoritmalari sınıfından kalıtım yapılacaktır. Public olarak sirala fonksiyonu tanımlanacaktır. Bu fonksiyon liste alıp, geriye bubbleSort algoritması ile sıralanmış liste döndürecektir. Bu fonksiyonda bubbleSort algoritmasının kaç döngü adımında tamamlandığını sıralama işleminin sonunda sınıftaki hesaplamaAdimlari değişkenine yazmaktadır. 

    Main’de selectionSortAlgoritmasi ve bubbleSortAlgoritmasi sınıflarından birer obje türeterek, rasgele elemanlar doldurulmuş 100 elemana sahip bir listeyi objelerin sirala fonksiyonlarına besleyiniz. Fonksiyonlardan dönen sıralanmış vektörleri ekrana bastırınız ve objelerin hesaplamaAdimlariniGetir fonksiyonlarını çağırarak algoritmaların sıralamayı kaç adımda yaptığını ekrana bastırınız.
  2. amd, intel ve arm isminde üç sınıf oluşturunuz. Bu sınıflara public olaral flopsGucunuGetir fonksiyonu yazınız.

    amd sınıfında bu fonksiyon geriye 1 milyon,
    intel sınıfında geriye 2 milyon,
    arm sınıfında geriye 3 milyon

    döndürecektir. 

    Mainde 100 elemanlı bir liste oluşturarak, bu listenin ilk 50 elemanına amd sınıfından, 25 elemanına intel ve kalan 25 elemanına arm sınıfından türetilmiş objeleri atayınız. Tüm listeyi döngü ile tarayarak flopsGucunuGetir fonksiyonunu çağırarak bir integer değişkenin üzerinde toplayınız. Toplam sonucu, CPU’ların toplam gücü olarak ekrana bastırınız.
  3. petrol isminde bir sınıf oluşturunuz. Public olarak litreFiyati değişkeni vardır. Sınıfın constructor’unda aldığı bir argümanı bu değişkene yazmaktadır.

    karaAraci ve denizAraci isminde iki sınıf oluşturup bu sınıfları petrol sınıfından kalıtım yapınız. Sınıflara constructor tanımalayarak bir argüman alıp, aldığı argümanı kalıtım yaptığı petrol sınıfının constructor’u üzerinden litreFiyatı değişkenine yazmalıdır. Her iki sınıftada petrolFiyatiAl fonksiyonunu yazınız.

    karaAraci sınıfı için petrolFiyatiAl fonksiyonu litreyi gösteren bir argüman alıp, geriye litre * 1.70 * litreFiyati ile çarparak geriye döndürülmelidir.
    denizAraci sınıfı için petrolFiyatiAl fonksiyonu litreyi gösteren bir argüman alıp, geriye litre *litreFiyatı ile çarparak geriye döndürülmelidir.

    Mainde karaAraci ve denizAraci sınıflarından birer obje yaratarak, petrolFiyatiAl fonksiyonlarına 10 (kara aracı) ve 20 (deniz aracı) girişleri vererek dönen değeri ekrana bastırınız.