Beruflich Dokumente
Kultur Dokumente
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.
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.
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.
HATIRLATMA VE DİKKAT!!!
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.
2- Sol sütundan C/C++ yanındaki ok resmine basarak tüm listenin görünmesini sağlayın.
4- Sağ sütunda en üstte "Preprocessor Definitions" seçiminin yanındaki aşağı ok resmine basıp, Edit
seçimini yapın.
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();
};
4
// Torba.cpp --------- TOPLAM 55 PUAN --------------
#include <time.h>
#include <iostream>
#include "Torba.h"
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
}
}
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;
}
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
else
A.TopEkle(renkkodu); // TOP KIRMIZI DEĞİLSE TORBAYA GERİ KOY
}
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;
}