Sie sind auf Seite 1von 7

BAŞKENT ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

2015-2016 ÖĞRETİM YILI BAHAR DÖNEMİ


BİL106 PROGRAMLAMA LABORATUVARI-II
KONU : C++ Sınıflar
HAFTA
• Yapıcı ve üye fonksiyonların kullanımını pekiştirmek.
AMAÇ : • Tam bir sınıf örneği yazmak. 12
• Sınıfı parçalara bölmek
HAZIRLAYAN : Öğr. Gör. Oğul GÖÇMEN SORULAR
SORU-1 SORU-2 SORU-3 SORU-4 SORU-5 TOPLAM
100 Puan - - - - 100 PUAN

SORU-1 Ali ile Veli bir şans oyunu oynamaktadır. Bu oyunun kuralı şu şekildedir:
• Oyuna herhangi bir kişi başlar ve kendi torbasından rastgele bir top çeker.
• Çektiği top kırmızı renkli bir top ise topu torba dışına çıkartır değilse o topu torbaya geri bırakır.
• Çektiği top kırmızı olsa da olmasa da sıra diğer oyuncuya geçer.
• Herhangi bir kişi torba dışında toplamda 3 kırmızı topa sahip olursa o kişi oyunu kazanır ve oyun biter.

Bu oyunu gerçekleştirecek bir C++ programı yazmanız isteniyor. Bu program içerisinde “Torba” isimli bir sınıf
yazınız, bu sınıfın UML diyagramı sizlere verilmiş ve fonksiyonların ne iş yaptıkları altta bildirilmiştir.
Buna göre,
• Bu sınıfın kurucu fonksiyonu ( constructor ) sırası ile kırmızı, sarı ve mavi renkli topların miktarlarını
parametre olarak almalıdır. Eğer herhangi bir renkteki top sayısı parametre olarak verilmez ise, o topun
torba içerisindeki miktarını 10 olarak belirlemelidir. (Default parametre!)
• “Goster” isimli üye fonksiyon, bir torbanın içerisinde hangi renk toptan kaç adet olduğunu ve torbadaki
toplam top sayısını ekranda ilgili get isimli fonksiyonları kendi içinden çağırarak yazdırılmasını sağlar.
• “ToplamTop” isimli üye fonksiyon torbanın içerisinde bulunan toplam top miktarını döndürür.(Ekrana
yazdırmaz! )
• “ToplarinOrani” isimli üye fonksiyon, bir torba içerisinde her renkteki top için, o rengin, toplam top
sayısına olan yüzdelik oranını hesaplar ve ekranda yazdırır.
• “TopCek” isimli üye fonksiyon, torbadan rastgele renkte bir tane topçeker. Renk değerini döndürür ve
gelen renkteki topların sayısından 1 azaltır.
• “TopCikart” isimli üye fonksiyon, kendisine parametre olarak verilen değerdeki topu torbadan çıkartır.
• “TopEkle” isimli fonksiyon, kendisine parametre olarak verilen değerdeki topu torbaya ekler.
• “KirmiziTopAdeti” isimli fonksiyon, o torbadaki kırmızı topların sayısını döndürür.
• “SariTopAdeti” isimli fonksiyon, o torbadaki sarı topların sayısını döndürür.
• “MaviTopAdeti” isimli fonksiyon, o torbadaki mavi topların sayısını döndürür.

Torba
- KirmiziTopSayisi : Integer
- SariTopSayisi : Integer
- MaviTopSayisi : Integer
<< constructor >> + Torba ( Integer=10, Integer=10, Integer=10 )
+ Goster ( ) : Void
+ ToplamTop ( ) : Integer
+ ToplarinOrani ( ) : Void
+ TopCek ( ) : Character
+ TopCikart ( Character ) : Void
+ TopEkle ( Character ) : Void
- KirmiziTopAdeti ( ) : Integer
- SariTopAdeti ( ) : Integer
- MaviTopAdeti ( ) : Integer

1
Oyuna başlamadan önce;
• Ali’nin elindeki A torbasında 10 kırmızı, 6 sarı, 3 adet de mavi renkli top olacak şekilde ayarlayınız.
• Veli’nin elindeki B torbasında 10 kırmızı, 3 sarı, 6 adet de mavi renkli top olacak şekilde ayarlayınız.
Daha sonra programınızı çalıştırın. Dikkat, program tamamen kendi kendine oyunu oynayacaktır.
• Oyun bittiğinde kazanan kişiyi,
• Torbası içerisindeki topların sayısını,
• Torbasındaki topların yüzdelik oranını,
Alt kısımdaki örnek pencerelerde olduğu gibi ekrana yazdıran bir program yazınız.

Not: Yazacağınız kodu 3 parçaya ayırınız!


• “Torba.h” (35 Puan) (Puan Dağılımı : Eksiksiz ara yüz toplam puanıdır. Her eksik -5 Puan)
• “Torba.cpp”(55Puan) (Puan Dağılımı :Toplam 10 fonksiyon yazılacak, her fonksiyon 5 Puan )
• “Source.cpp” (20 Puan) ( Puan Dağılımı : 10 Puan Ali’nin kısmı, 10 Puan Veli’nin kısmı)

Kodlarınızı Visual Studio kullanarak yazınız.

Boş bir Visual C++ projesi yaratın. Sağ sütunda göreceğiniz “source files” klasör simgesine
fare’nin sağ tuşu ile tıkladıktan sonra 2 adet cpp, 1 adet header dosyasını yukarıdaki
isimlendirmelere dikkat ederek oluşturup kayıt ediniz.

Tüm dosyalarınızın Source Files klasörü içerisinde oluşacağını göreceksiniz.

Header dosyasının içerisine #ifndef ... #define .... #endif bildirimlerini koymanıza gerek
yoktur. Derleyicinin bu dosyanın başına otomatik ekleyeceği #pragma once bildirimi bu
adımlara karşı gelmektedir.

ÖRNEK ÇALIŞMA EKRANLARI ( OLASI 2 DURUM VARDIR! )

OYUNU ALİ’NİN KAZANMASI DURUMU OYUNU VELİ’NİN KAZANMASI DURUMU

HATIRLATMA VE DİKKAT!!!

o Visual Studio 2015 kullanarak lab. sorusunu çözerken ;

2
... This function or variable may be in unsafe .... ile başlayan hata mesajları alıyorsanız ve projenizi
çalıştıramıyorsanız; bu uyarı mesajını kaldırmak için alt kısımdaki adımları her yeni proje
oluşturduğunuzda uygulamanız önerilir.

1- Project menüsünden en alttaki Properties kısmını açın.

2- Sol sütundan C/C++ yanındaki ok resmine basarak tüm listenin görünmesini sağlayın.

3- Açılan listeden Preprocessor seçeneğine tıklayın.

4- Sağ sütunda en üstte "Preprocessor Definitions" seçiminin yanındaki aşağı ok resmine basıp, Edit
seçimini yapın.

5- Açılan pencere içerisinde WIN32 yazısının altına fare ile tıklayıp

_CRT_SECURE_NO_WARNINGS ibaresini bu mesajdan kopyalayıp yapıştırın.

6- Her pencereyi onaylayıp, projenizi bir kez daha derleyin.

3
// --- Torba.h TOPLAM 25 PUAN -------

#pragma once

class Torba
{
public:
void ToplarinOrani();
int ToplamTop();
Torba(int, int, int);
char TopCek();
void TopCikart(char);
void TopEkle(char);
void Goster();

private:
int KirmiziTopSayisi;
int MaviTopSayisi;
int SariTopSayisi;
int KirmiziTopAdeti();
int SariTopAdeti();
int MaviTopAdeti();

};

// --- Torba.h BİTTİ ---------------------------------

4
// Torba.cpp --------- TOPLAM 55 PUAN --------------
#include <time.h>
#include <iostream>
#include "Torba.h"

using namespace std;

Torba::Torba(int k = 10, int s = 10, int m = 10)


{
KirmiziTopSayisi = k;
SariTopSayisi = s;
MaviTopSayisi = m;
Goster();
}

int Torba::KirmiziTopAdeti() { return KirmiziTopSayisi; }

int Torba::SariTopAdeti() { return SariTopSayisi; }

int Torba::MaviTopAdeti() { return MaviTopSayisi; }

int Torba::ToplamTop()
{ return KirmiziTopAdeti() + MaviTopAdeti() + SariTopAdeti(); }

void Torba::ToplarinOrani()
{
Goster();
if (ToplamTop()>0)
{
cout << " YUZDELIK ORANLAR " << endl;
cout << " KIRMIZI : % " << (1.0*( KirmiziTopAdeti() ) / ToplamTop() ) * 100 << endl;
cout << " SARI : % " << (1.0*( SariTopAdeti() ) / ToplamTop() ) * 100 << endl;
cout << " MAVi : % " << (1.0*( MaviTopAdeti() ) / ToplamTop() ) * 100 << endl;
}
else {
cout << " YUZDELIK ORANLAR " << endl;
cout << " KIRMIZI : % 0" << endl;
cout << " SARI : % 0" << endl;
cout << " MAVi : % 0" << endl;
}
}

char Torba::TopCek()
{
srand(time(NULL));
switch (rand() % 3)
{
case 0: { KirmiziTopSayisi--; return 'K'; break; } // ÇEKİLEN TOP KIRMIZI ÇIKTI
case 1: { SariTopSayisi--; return 'S'; break;} // ÇEKİLEN TOP SARI ÇIKTI
case 2: { MaviTopSayisi--; return 'M'; break;} // ÇEKİLEN TOP MAVİ ÇIKTI
}
}

void Torba::TopCikart(char renkkodu)


{
switch (renkkodu)
{
case 'K': { KirmiziTopSayisi--; break; } // KIRMIZI TOP SAYISINI AZALT
case 'S': { SariTopSayisi--; break; } // SARI TOP SAYISINI AZALT
case 'M': { MaviTopSayisi--; break; } // MAVI TOP SAYISINI AZALT
}
}

5
void Torba::TopEkle(char renkkodu)
{
switch (renkkodu)
{
case 'K': { KirmiziTopSayisi++; break;} // KIRMIZI TOP SAYISINI ARTTIR
case 'S': { SariTopSayisi++; break;} // SARI TOP SAYISINI ARTTIR
case 'M': { MaviTopSayisi++; break;} // MAVI TOP SAYISINI ARTTIR
}
}

void Torba::Goster()
{
cout << endl;
cout << " Kirmizi = " << KirmiziTopAdeti() << endl;
cout << " Sari = " << SariTopAdeti() << endl;
cout << " Mavi = " << MaviTopAdeti() << endl;
cout << " Toplam = " << ToplamTop() << endl;
cout << endl;
}

// Torba.cpp ----------BİTTİ ---------------

6
// ------Main.cpp ANA PROGRAM TOPLAM : 20 puan -------------
#include <iostream>
#include <time.h>
#include "Torba.h"
using namespace std;
int main()
{ cout << " \n\n Oyuna baslamadan once, Ali'nin torbasi icindeki toplar...";
Torba A(10, 6, 3);
cout << " Oyuna baslamadan once, Veli'nin torbasi icindeki toplar...";
Torba B(10, 3, 6);
int sira = 0, Aadet = 0, Badet = 0;
char renkkodu;
cout << " Oyun basliyor...\n";
while (1)
{
sira++; // OYUN SIRA İLE OYNANSIN

// ALİ'NİN TORBASI İÇİN GEREKLİ İŞLEMLER...


if (sira % 2)
{
renkkodu = A.TopCek();
if (renkkodu == 'K')
{
A.TopEkle(renkkodu);
A.TopCikart(renkkodu);
Aadet++;
if (Aadet == 3)
{
cout << " OYUNU ALI KAZANDI.";
A.ToplarinOrani();
cout << " Oyun bitti !\n\n";
break;
}
}

else
A.TopEkle(renkkodu); // TOP KIRMIZI DEĞİLSE TORBAYA GERİ KOY
}

// VELİ'NİN TORBASI İÇİN GEREKLİ İŞLEMLER


else
{ renkkodu = B.TopCek();
if (renkkodu == 'K')
{
B.TopEkle(renkkodu);
B.TopCikart(renkkodu);
Badet++;

if (Badet == 3)
{
cout << " OYUNU VELI KAZANDI.";
B.ToplarinOrani();
cout << " Oyun bitti !\n\n";
break;

}
}
else
// TOP KIRMIZI DEĞİLSE TORBAYA GERİ KOY
B.TopEkle(renkkodu);
}

}
system("pause");
return 0;
}

Das könnte Ihnen auch gefallen