Categories
Algorithms and Programming II

Final Sample Questions

Çok Biçimlilik (Polymorphism)

  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. hesaplamaAdimlari değerini 0’a atamaktadır.
    sirala pure virtual fonksiyon olarak tanımlanmalıdır.
    hesaplamaAdimlariniGetir fonksiyonu argüman almadan, geriye hesaplamaAdimlari integer değişkenini geriye döndürmektedir..

    protected olarak;

    int hesaplamaAdimlari olacaktır.

    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 vektor alıp, geriye selection sort algoritması ile sıralanmış vektör 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 vektor alıp, geriye bubbleSort algoritması ile sıralanmış vektör 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 vektörü 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. islemciler isminde bir sınıf oluşturunuz. Bu sınıf’ın public olarak pure virtual flopsGucunuGetir isminde bir fonksiyonu bulunacaktır (FLOPS, floating point operations per second’un kısaltmasıdır. Bir işlemcinin saniyedeki floating point işlemini ne kadar yapabildiğini ifade eder, CPU hesaplama gücünü gösterir). 

    amd, intel ve arm isminde üç sınıf daha oluşturup, bu sınıfları islemciler sınıfından kalıtım yapınız. 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 islemciler sınıfından 100 elemanlı bir pointer array’i oluşturarak, bu dizinin 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 diziyi 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. Bu sınıfın petrolFiyatiAl isminde pure virtual bir sınıfı bulunacaktır. Protected 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.

Şablonlar (Templates)

  1. Kendisine verilen iki numerik (float, int, double) sayının farkının mutlak değerini geri döndüren bir şablon tabanlı fonksiyon geliştiriniz. Bu fonksiyonu test eden bir yazılım geliştiriniz.
  2. toplama isminde bir şablon fonksiyonu geliştiriniz. Bu fonksiyona vektör<şablon> argüman gelmekte ve geriye şablon türünde döndürülmektedir. Fonksiyon aldığı vektörün içerisindeki tüm sayıları toplayarak geriye tek bir sayı döndürmektedir. Bu fonksiyonu test eden bir uygulama geliştiriniz.
  3. frekansSay isminde bir fonksiyon gerçeklenecektir. Bu fonksiyon bir vektör<şablon> ve bir şablon argüman almaktadır. frekansSay fonksiyonu aldığı şablon argüman vektörün içerisinde ne kadar geçtiğini bulup geriye döndürmektedir(Örneğin vektör içeriği 3 5 6 7 8 9 3 4 3 5 olsun ve diğer argüman 3 olsun, geriye 3 değerini döndürmelidir). Bu fonksiyonu test edecek bir kod parçacığı geliştiriniz.

İstisna İdaresi (Exception Handling)

  1. Aşağıdaki Account ismindeki bir sınıfın kod parçacığında, hatalı durumlar için fonksiyonlarda -1 değeri döndürülerek işlemlerin devam ettirilmemesi sağlanmıştır. -1 geriye döndürmek yerine istisna idaresi yaklaşımlarını kullanan bir kod parçacığı hazırlayıp test edecek bir kod geliştiriniz.

    class Account {
      private:
        double balance;
      public:
        Account() {
          balance = 0;
        }
      Account(double initialDeposit) {
        balance = initialDeposit;
      }
      double getBalance() {
        return balance;
      }  double deposit(double amount) {
        if (amount > 0)
          balance += amount;
        else
          return -1;
        return balance;
      }
      double withdraw(double amount) {
        if ((amount > balance) || (amount < 0))
          return -1;
        else
          balance -= amount;
        return balance;
      }
    };
  2. Bir integer argüman alıp geriye aldığı integer argümanın karekökünü döndüren bir fonksiyon geliştiriniz. Fonksiyona verilen argüman tam kare değil ise (kare kökü tam sayı değil ise) istisna oluşturulmalıdır. Bu fonksiyonu test eden bir kod parçacığı geliştiriniz.
  3. tekrarsizIntVektor isminde bir sınıf geliştiriniz. Bu sınıfın push_back isminde integer argüman alan bir fonksiyonu bulunacatır. Private olarak vector sayilar değişkeni bulunacaktır. push_back fonksiyonu vektöre, alınan argümanı yazmaktadır. Ancak alınan argüman daha önce vektörde bulunuyorsa istisna oluşturarak aynı sayının tekrar eklenmemesini sağlayacaktır. tekrarsizIntVektor fonksiyonunu test eden bir uygulama geliştiriniz.

Dosya Okuma/Yazma

  1. 10 satır içerikli bir test dosyası yaratınız. Bu test dosyasını okuyup, kullanıcıdan silinmesini istediği satırı soran ve test dosyasından bu satır ile birlikte tüm boş satırların silinmesini sağlayan bir uygulama geliştiriniz.
  2. Kullanıcıdan iki string alınız. İlk string’i bir test dosyasında arayıp, bulunan yerlerine bu kelimenin yerine, kullanıcıdan alınan 2. kelimeyi yerleştiriniz. 
  3. Bir test dosyasındaki tüm kelimelerin baş harflerini büyük harf, diğer harfleri ise küçük harfe dönüştüren bir uygulama geliştiriniz. 

String İşleme

  1. Kullanıcıdan kişinin tam ismini girmesini isteyiniz. Girilen tam ismin,ad bölümlerinin kısaltmaları ile ekrana bastırınız. Örneğin “Ahmet Mehmet Yılmaz” girişi için beklenen çıktı “A. M. Yılmaz”
  2. Kullanıcıdan alınan bir string’de, kaç adet ünlü, ünsüz harf, rakam ve boşluk karakteri olduğunu bulan bir uygulama geliştiriniz. Tespit edilen ünlü, ünsüz harf, rakam ve boşluk karakteri sayılarını ekrana bastırınız.
  3. Kullanıcıdan alınan bir sting’de, string’in içerdiği en fazla aynı harf’i tespit edip ekrana bastıran bir uygulama geliştiriniz. Örneğin “abcd a a a b cdefa” girişi için, beklenen çıkış “a harfi 5 tekrar” olmalıdır.
  4. Girilen bir string’in palindrome olup olmadığını kontrol edip ekrana bastıran bir uygulama geliştiriniz. Palindrome string’lerin özelliği, metin ortasından bölündüğünde sağdaki ve soldakilerin ayna görüntüsü gibi aynı olmasıdır. Örneğin aba, aabaa, acdfdca, ccacc, abba palindrome string’lerdir.
  5. Nokta ile ayrılmış kelimeleri kullanıcıdan string olarak alınız (Örneğin ali.deneme.test). Her bir kelimeyi kendi içerisinde ters döndürüp ekrana bastıran bir uygulama geliştiriniz(ali.deneme.test girişi için, beklenen çıkış ila.emened.tset).  

STL (Standard Template Library)

  1. Öğrencilerin notlarının tutulacağı bir vektör oluşturunuz. Bu vektörün türü integer olacaktır. Öğrenci notunu kullanıcıdan isteyen ve  -1 girilene kadar sürekli vektör’e yeni öğrenci notu ekleyiniz. STL kütüphanelerini kullanarak minimum ve maksimum notu ekrana gösteriniz.
  2. Aşağıda ad ve soyadlar içeren bir metin dosyası örneği verilmiştir.

    Emre Levent
    Ugur Ozbalkan
    Emre Levent
    Ali Yılmaz
    Veli Yılmaz

    Bu dosyada bazı isimler tekrar yazılmıştır. Gönderilecek bir davet için aynı kişiye birden çok davetin gönderilmemesi istenmektedir. Bir linked-list konteyner’ı kullanarak dosyadan okunan isim soyisim satırlarını, listeye sırayla ekleyiniz. Listede gezerek aynı olan ad ve soyadları listeden silip, listenin sadeleştirilmiş halini ekrana bastırınız.
  3. Reverse Polish Notation (RPN) isminde, matematiksel ifadelerin gösterildiği bir format bulunmaktadır. Bir çok matematiksel gösterimin aksine RPN’de operatör operasyona girecek sayılardan sonra gelir. Yani önce işlem yapılacak sayılar sonra operasyonun ne olduğu bilgisi yazılır. RPN gösterimi ile matematiksel işlemler yapmak için STL’de bulunan STACK konteyner’i kullanılacaktır.

    Boş bir stack konteyner’i tanımladıktan sonra,

    Kullanıcıdan sayı giriş’i alınırsa, stack’e push edin
    + işareti alınırsa, stack’teki son iki sayı pop edilir ve bu sayılar toplanarak stack’e geri push edilir.
    – işareti alınırsa, stack’teki son iki sayı pop edilir ve bu sayılar çıkarılarak (ikinci okunan – ilk okunan) stack’e geri push edilir.
    * işareti olursa, stack’teki son iki sayı pop edilir ve bu sayılar çarpılarak stack’e geri push edilir.
    / işareti olursa, stack’teki son iki sayı pop edilir ve bu sayılar bölünerek (ikinci okunan / ilk okunan) stack’e geri push edilir.
    q harfi alınırsa, stack’in top elemanı ekrana bastırılır ve program bitirilir.

    Eğer bir operator (+, -, *, /) geldiğinde stack’te iki eleman yoksa (yani işlem yapacak 2 sayı yoksa) hata mesajı ekrana yazdırınız.

    Örnek:

    ((10 – (2 + 3))*2)/5 işlemini yaptırmak için kullanıcının girdiği girişler:

    10
    2
    3
    +

    2
    *
    5
    /
    q

    Çıktı: Tepe eleman 2’dir.