Categories
Algorithms and Programming II

Midterm Sample Questions

Vektörler

  1. 10 ile 100 arasında rasgele bir sayı oluşturun. Oluşturulan rasgele sayı kadar bir integer vektörün 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. vektöre rasgele sayılar yerleştiriniz. Oluşturulan 2. rasgele sayı kadar 2. vektöre rasgele sayılar yerleştiriniz. Bu iki vektör 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.

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 integer 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(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.

  4. Bir basketbol takımı için uygulama geliştirilecektir.

    oyuncular isminde bir sınıf yaratınız.

    Private olarak,

    * string isim
    * int oyuncuNo
    * int yas
    * static int takimdakiOyuncuSayisi
    * static string takimAdi

    değişkenleri ve

    Public olarak,

    * oyuncular(string, int, int)
    * void bastir()

    fonksiyonları bulunmaktadır. Constructor’da aldığı argümanlar, isim, oyuncuNo ve yaş değişkenlerine yazılmaktadır. Ayrıca constructor, takimdakiOyuncuSayisi değerini 1 arttırmaktadır.

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

    oyuncular sınıfını test eden kod parçacığında, takimAdi değerini “Fenerbahçe”, takimdakiOyuncuSayisini ise 0 olarak başlatınız.

    oyuncular sınından 2 obje türetiniz ve sonuncu yaratılan objenin bastir fonksiyonunu çağırınız. Ardından 3 obje daha türetip tekrar son yaratılan objenin bastir fonksiyonunu çağırınız.

Operatör Aşırı Yükleme

  1. dikdortgenlerPrizması (Sınıflar bölümündeki 1. soru) sınıfları toplama ve çıkartma işlemleri desteklenmesi istenmektedir.

    Buna göre;

    iki dikdortgenlerPrizması sınıfı arasında + işareti olduğunda, iki sınıf’ın alan değerleri toplanarak, geriye integer döndürülecektir.

    dikdortgenlerPrizması sınıfının aşırı yükleme fonksiyonlarını da içeren bir test kod parçacığı geliştiriniz.

  2. zaman (Sınıflar bölümündeki 2. soru) sınıfları toplama ve çıkartma işlemleri desteklenmesi istenmektedir.

    Buna göre;

    iki zaman sınıfı + işareti ile toplandığında ortaya çıkan yeni zaman değeri, zaman sınıfı olarak geri döndürülmeli,

    zaman sınfı + işareti ile bir integer sayı ile toplanırken, integer sayı, zaman sınıfının yıl değerine eklenmelidir,

    iki zaman sınıfı – işareti ile çıkartıldığında, aynı farkAl fonksiyonundaki işlemler yapılmalıdır.

    zaman sınıfının aşırı yükleme fonksiyonlarını da içeren bir test kod parçacığı geliştiriniz.

  3. ikizKenarUcken (Sınıflar bölümündeki 3. soru) sınıfları toplama ve çıkartma işlemleri desteklenmesi istenmektedir.

    Buna göre;

    iki ikizKenarUcken sınıfı arasında * işareti olduğunda, ikizKenarUcken sınıflarından ikizKenarAcisiAl fonksiyonları ile değerler alınıp çarpımları geriye integer olarak döndürülecektir..

    ikizKenarUcken sınıfının aşırı yükleme fonksiyonunu da içeren bir test kod parçacığı geliştiriniz.

Kalıtım (Inheritance)

  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;

    protected olarak

    * 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;

    protected olarak

    * int en
    * int boy

    değişkenleri ve public olarak

    * 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ığıa 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

    public olarak

    * 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.

  4. Mantık kapılarını simule eden bir yazılım geliştirilecektir.

    Mantık kapıları genellikle bir veya birden çok giriş alarak, iç mekanizmalarına göre bir çıkış üretirler.

    Ve (And), Veya (Or) ve Değil (Not) kapıları tasarlanacaktır. Aşağıda mantık kapılarının doğruluk tabloları verilmektedir.

    Aşağıdaki şekilde mantık kapıları için yaratılacak sınıfların hiyerarşisi verilmektedir.

    Bütün mantık kapılarında (Ve, Veya, Değil için) tek bir çıkış vardır. Ayrıca programda her bir mantık kapısından bir obje oluşturulduğunda bunlara özel adlar verilebilir. Bu genel özellikler mantikKapisi sınıfında barındırılacaktır.

    mantikKapisi sınıfı;
    protected olarak,

    * string isim

    * int cikis

    public olarak,

    * mantikKapisi (string)

    * string isimAl()

    * int cikisAl()

    değişken ve fonksiyonlarını barındırmaktadır. Constructor’a verilen string argüman, isim değişkenine yazılmaktadır.

    isimAl fonksiyonu isim değişkenini döndürmekte,

    cikisAl fonksiyonu ise cikis değişkenini dondurmektedir.

    ikiGirisliKapilar sınıfı;

    private olarak,

    * int pinA

    * int pinAGirildi

    * int pinB

    * int pinBGirildi

    public olarak,

    * ikiGirisliKapilar(string)

    * int pinA_Al()

    * int pinB_Al()

    değişken ve fonksiyonlarından oluşmaktadır.

    Constructor’da alınan string değişken, kalıtım yapılmış mantikKapisi sınıfının constructor’una verilecektir.

    Örn. ikiGirisliKapilar(string n) { … }  yazmak yerine ikiGirisliKapilar(string n) : mantikKapisi(n) { … } yazılabilir.

    Constructor aynı zamanda, pinAGirildi ve pinBGirildi değerleri 0 olarak atanacaktır.

    pinA_Al fonksiyonunda, eğer pinAGirildi değeri 0 ise, yani daha önceden giriş yapılmadı ise, kullanıcıdan klavyeden giriş alınarak pinA değişekenine yazılmalı ve pinAGirildi değeri 1 yapılmalıdır. Ardından fonksiyon pinA değişkenini döndürmeldir. Eğer daha önceden giriş yapıldıysa (pinAGirildi == 1 ise) fonksiyon sadece pinA değişkeninin değerini döndürmelidir.

    pinB_Al fonksiyonu’da pinA_Al fonksiyonu ile aynı görevdedir. İşlemleri pinB için yapmaktadır.
    tekGirisliKapilar sınıfı;

    private olarak,

    *int pin

    *int pinGirildi

    public olarak,

    * tekGirisliKapilar(string)

    * int pin_Al()

    değişken ve fonksiyonlarından oluşmaktadır.

    Constructor, ikiGirisliKapilar sınıfında olduğu gibi, mantikKapisi sınıfının constructor’una aldığı argümanı vermektedir.

    pin_Al() fonksiyonu, ikiGirisliKapilar sınıfındaki pinA_Al fonksiyonunda olduğu gibi çalışmaktadır. İşlemleri pin değişkeni için yapmaktadır.

    veKapisi sınıfı;
    public olarak,

    * veKapisi(string)

    * islemYap()

    fonksiyonlarına sahiptir.

    Constructor’da aldığı string argümanı, türetildiği ikiGirisliKapilar sınıfının constructor’una vermektedir.

    islemYap fonksiyonu ise, pinA_Al ve pinB_Al fonksiyonlarını çağırarak iki integer değişken alır. Bu değişkenlerin ikiside 1 ise geriye 1, değilse 0 döndürür.
    veyaKapisi sınıfı;

    public olarak,

    * veyaKapisi(string)

    * islemYap()

    fonksiyonlarına sahiptir.

    Constructor’da aldığı string argümanı, türetildiği ikiGirisliKapilar sınıfının constructor’una vermektedir.

    islemYap fonksiyonu ise, pinA_Al ve pinB_Al fonksiyonlarını çağırarak iki integer değişken alır. Bu değişkenlerin en az birisi 1 ise geriye 1, değilse 0 döndürür.
    degilKapisi sınıfı;

    public olarak,

    * degilKapisi(string)

    * islemYap()

    fonksiyonlarına sahiptir.

    Constructor’da aldığı string argümanı, türetildiği tekGirisliKapilar sınıfının constructor’una vermektedir.

    islemYap fonksiyonu ise, pin_Al fonksiyonunu çağırarak bir integer değişken alır. Geriye bu değişkenin değilini alarak döndürür.

    Main’de veKapisi, veyaKapisi, degilKapisi sınıflarından birer obje türerek çalıştırınız. Geri döndürdükleri değerleri ekrana bastırınız.