Dönem ödevim de yardımcı olur musunuz??

enteqre
15-02-2011, 08:06   |  #1  
OP Taze Üye
Teşekkür Sayısı: 0
4 mesaj
Kayıt Tarihi:Kayıt: Şub 2011

arkadaşlar benim sayısal loto yapmam gerkiyor..1 den 49 a kadar olan sayılar 6 sıra 6 sütün şeklinde atanacak.. sayıların hiç biri aynı olmayacakmış....ben bir iki örneğe baktım ama c++ yeni öğreniyoruz...randm döngüsüne göre olması gerektiğini söyledi bna hocam ama yapamadım..yardımcı olursanız çok sevinirim...

muh34
15-02-2011, 18:24   |  #2  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Sayısal loto günümüzde bir çok insan tarafından oynanan şansa dayalı bir oyun sistemidir.Oyun 1-49 arasındaki numaraları ilgili haftanın çekiliş sonucları sonucunda tahmin etmekten geçer.Eger oyuncu 6 adet numara bilirse buyuk odulu kazanmıs olacaktır.Bir sayısal loto kuponunda en fazla 6 adet kolon ve her bir kolonun icerisinde 1'den 49'a kadar sayı degerleri iceren kutucuklar bulunur.Oyuncu bu ust limit degerlerine gore kuponunu doldurarak sonucu beklemeye başlar.Oyunun kısa bir hatırlatmasını yaptıktan sonra asıl problemimiz olan bu oyunu C++ programlama dili ile tasarlamaya calısacagız.

Oncelikle nesneye dayalı bir dil sectigimize gore programı nesneye dayalı programlama mantıgı ile işlemekte yarar goruyorum.Ilk olarak loto adında bir class olusturalım ve bu class'ın niteliklerini belirmeye calısalım.
Daha onceden de hatırlatıldıgı gibi bir sayısal loto kuponu uzerinde 6 adet kolon ve her bir kolon yapısında 49 adet sayısal degerler bulunmaktadır.O halde iki boyutlu bir dizi(two-dimensional array) tanımlamak yerinde bir karar olacaktır.Tanımlanacak bu dizi kullanıcının kuponunu simgeleyen bool tipinde bir dizi olacaktır.Girilen numaralar ise,dizi indeksine yerleştirilerek ilgili indeks degeri true olarak saklanacaktır.Oyunun oynanış mantıgında aslında cok basittir.Kullanıcı oynamak istedigi kolon adedini girerek numaralari hayali bir kuponda işaretleyecektir.Ornegin A kolonunda 23 numaralı degeri giren kullanıcı aslında iki boyutlu kupon dizisinin A.kolonunun 23. indeks degerini true yapmıs olacaktır.

Oyunda birde çekiliş sonucundaki buyuk ikramiye numaralari yer almaktadır.Bu numaralar ise bir kurucu metot(constructor method) icerisinde nesne hazırlanırken tasarlanabilir.C ve C++ programlama dilleri icerisinde rastgele sayı uretici fonksiyon rand() fonksiyonudur.Bu fonksiyon aynı zamanda srand() fonksiyonu ile kullanılarak uretilen degerlerin farklılık oranına azaltıcı etki yapmaktadır.
Sonuc olarak birde karsilastir() metodu ile oynan kupon kontrol edilecektir.Problemin C++ programlama dilindeki karsılıgı asagıdaki gibi olacaktır.

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

class loto {

      bool kupon[6][49];
      int sonuc[6];
      int kolonSayisi,numara;
      char kolonHarfleri[6];
      public:
      loto();
      void oyna();
      void karsilastir();
      };

loto::loto() {

             int i,j;
             for(i=65;i<72;i++)
             kolonHarfleri[i-65]=i;

             for(i=0;i<6;i++)
             for(j=0;j<49;j++)
             kupon[j]=false;

             int topNumarasi;
             bool flag=false;
             srand(time(NULL));
             for(i=0;i<6;i++)
             {
             topNumarasi=rand() % 49 + 1;
             for(j=0;j<i;j++)
             if(topNumarasi==sonuc[j]) {
             flag=true; break;
             }
             if(flag)
             i--;
             else
             sonuc=topNumarasi;
             flag=false;
             }
             }
void loto::oyna() {

     cout << "Lutfen Oynayacaginiz Kolon Sayisini Giriniz:\n";
     cin >> kolonSayisi;
     int i,j,k;
     bool flag=false;
     for(i=0;i<kolonSayisi;i++) 
     {
     cout << kolonHarfleri << ".Kolonu icin 6 adet numara giriniz:\n";
     for(j=0;j<6;j++) 
     {
     cin >> numara;
     if(numara > 0 && numara < 50) 
     {
     for(k=0;k<j;k++)
     if(kupon[numara]) {
     flag=true; break;
     }
     if(flag) {
     cout << "Bir numara en fazla bir kez kullanilabilir,Lutfen tekrar giriniz:\n";
     j--;
     }
     else
     kupon[numara]=true;
     flag=false;
     }
     else {
     cout << "Lutfen 1-49 araliginda numaralar giriniz\n";
     j--;
     }
     }
     }
     }

void loto::karsilastir() {

     int say=0;
     int i,j;

     cout << "Sizin Kuponunuz\n";
     for(i=0;i<kolonSayisi;i++) 
     {
     for(j=0;j<49;j++)
     if(kupon[j])
     cout << j << ' ';
     cout << "\n" << kolonHarfleri << "\n";
     }

     cout << "Haftanin Sansli Numaralari\n";
     for(i=0;i<6;i++)
     cout << sonuc << ' ';


     for(i=0;i<kolonSayisi;i++) {
     for(j=0;j<6;j++)
     if(kupon[sonuc[j]])
     say++;
     cout << kolonHarfleri << ".kuponda " << say << " adet numara bildiniz:";
     }
     }

int main() {
           loto yeni;
           yeni.oyna();
           yeni.karsilastir();
           getchar();
           return 0;   
}             
   Başarılar

WaDe
15-02-2011, 19:25   |  #3  
WaDe avatarı
Yıllanmış Üye
Teşekkür Sayısı: 0
114 mesaj
Kayıt Tarihi:Kayıt: Eyl 2009

süper cvp .......bravo muh34

enteqre
15-02-2011, 21:18   |  #4  
OP Taze Üye
Teşekkür Sayısı: 0
4 mesaj
Kayıt Tarihi:Kayıt: Şub 2011

arkadaşlar saolunda ben daha lise 2 öğrencisiyim..size çok teşekkür ederim çoğu konuda açıklamalarınız yardımcı olmuş bna fakat muh34 ben kolon sayısını ve kolana yazılacak sayıları yaptığınız programda kendim girdim başka türlü programınız çalışmadı...bana sayıları otomatik belirleyen ve 6 sıra 6 sütün olan bir kod gerekiyor ve öğretmenim bna bunu srand ı ve for u kullanarak kısa bir biçimde yapabileceğimi söyledi....ben kendim bir iki şey yaptım ama ekranda bu boş bir sayfa olarak açılıyor...ben size yaptığım kadarını yolayayım ve bunun üzerinden yola çıkalım..tekrar verdiğiniz emek için ve yardımlarınız için teşekkür ederim muh 34...
 
 
 
#include<stdio.h>
#include<time.h>
int main()
{
    int i;
    unsigned besleme;
    scanf("%u",&besleme);
    srand(time(NULL));
    for(i=1;i<=49;i++);
    {
                       for(i=1;i<=6;i++);
                       printf("%49d",1+(rand()%6));
                       if(i%5==0)     
                       printf("/n");
                       }
                       return 0;
                       }
 ="    if(i%5==0)      -> burada bir hata olduğunu düşünüyorum program çalışıyor fakat burda eksik yaptığım bir şeyler var  bana burda yardımcı olursanız sevinirim"

muh34
16-02-2011, 07:43   |  #5  
Yıllanmış Üye
Teşekkür Sayısı: 0
215 mesaj
Kayıt Tarihi:Kayıt: Eki 2010

Yayımladıgım kod calısmaktadır.Sizin kodunuzun ekranda bos bir cıktı saglamasının nedeni bir output cıktı mesajının bulunmamasıdır.Yukarıdaki yazdıgınız kod satırlarına baktıgımda,sanırım siz sadece rand() fonksiyonunun 49 kere 6'şar kez rastgele numaralar uretmesini istiyorsunuz.Fakat bu durumda bir sayısal loto programı degil,sadece rastgele sayı ureten bir program olacaktır.Oncelikle kodunuzdaki besleme degiskeninin gorevi nedir ? Hata oldugunu dusundugunuz kısım,tahminimce her bir kolon sonrasında ' /n ' deyimi ile goruntunun bir alt satıra gecmesidir ki o deger normalde 6 olmalıdır.if(i%6==0).Ancak içteki dongu zaten 6 kez calıstıgı icin hic bir kosul koymadan ' /n ' komutu koyulabilir.Tam olarak ne yapmak istediginizi belirtirseniz daha iyi yardımcı olmaya calısırım.Ancak ogretmeninize size yayımladıgım kodu yolladıgınızda reddetmeyecektir.

Başarılar

enteqre
16-02-2011, 08:01   |  #6  
OP Taze Üye
Teşekkür Sayısı: 0
4 mesaj
Kayıt Tarihi:Kayıt: Şub 2011

önerileriniz için çok teşekkür ederim...sizin yapmış olduğunuz kodu ve kendi yapmış olduğum kodu bu gün öğretmenime göstericem.Hocamdan gereken tam açıklamayıda iki kodu gösterdikten sonra alabiliceğim...ve sizede o zaman doğru bir açıklama yapmış olurum....tekrar teşekkür ederim