Categories
Object Oriented Design

Feedback

Ders hakkında geri bildirimleriniz önemlidir.

Kayıtlı öğrencilerin her hafta geri bildirimleri için LMS sistemi üzerinden “Geri Bildirim Formu” açılacaktır. 

Her doldurulan geribildirim için 0.5 puan sene sonu notuna eklenecektir.

Anonim olarak geri bildirimde bulunmak için aşağıdaki linki kullanabilirsiniz.

https://docs.google.com/forms/d/e/1FAIpQLSd23R8gvWSKOiA5h3YC6Cdgq9iZ-En9I-5Y1wR9AwKhAXGaTA/viewform?vc=0&c=0&w=1

Categories
Object Oriented Design

LMS and Piazza

Öğrencilerin soru sorup yanıt alabileceği bir soru cevap sistemi sunulmaktadır. Ders duyuruları, öğrenci soruları ve cevapları için bir platformdur. Aşağıdan erişebilirsiniz. 

https://piazza.com/class/kdc28to4h0ehd

LMS (Learning Management System), bazı ödevlerin teslimi için LMS sistemi üzerinden olması istenecektir.

Categories
Digital Design

LMS and Piazza

Öğrencilerin soru sorup yanıt alabileceği bir soru cevap sistemi sunulmaktadır. Ders duyuruları, öğrenci soruları ve cevapları için bir platformdur. Aşağıdan erişebilirsiniz. 

https://piazza.com/class/l92b9ta0yvo4ou/

LMS (Learning Management System), bazı ödevlerin teslimi için LMS sistemi üzerinden olması istenecektir.

Categories
Digital Design

Grades

Categories
Object Oriented Design

Grades

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.

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.
Categories
Algorithms and Programming II

Exams and Sample Questions

Vize

Final

Categories
Algorithms and Programming II

Labs

LabKonuTarihİndirme
1Sınıf ve Objelere Giriş13.02.2020
2Sınıflar I (Classes)27.02.2020
3Sınıflar II (Classes)05.03.2020
4Operatör Aşırı Yükleme12.03.2020
5Kalıtım (Inheritance)2.04.2020
6Çok Biçimlilik (Polymorphism)9.04.2020
7Şablonlar (Templates)16.04.2020
8İstisna İdaresi (Exception Handling)23.04.2020 
Categories
Algorithms and Programming II

Tools

Bu sayfada ders içeriklerine destek olması amacıyla sunulmuş çeşitli araçlar bulunmaktadır. LAB, ödev ve vize ve final sınavlarına hazırlık için kullanılacaktır.

Araç AdıİçerikAdres
Otomatik Sınav SistemiBu araç ile çeşitli algoritma soruları sorulmakta ve cevapları otomatik olarak kontrol edilmektedir. Algoritma geliştirme kabileiyetini arttırmak için tasarlanmıştır.http://www.levent.tc/files/courses/tools/sinavsistemi