1. sayfa
rand() %6 --->0 ile 5 arası rastgele tam sayı üret demek... Ama zarların üzerindeki sayıyasal simgeler 1-6 arasındadır. Bu yüzden üretilen rastgele sayıya 1 eklersek (0+1 ile 5+1) arası rastgele üretilen sayı elde etmiş oluruz. Edit: enum status_e { GAME_CONTINUES,PLAYER_WINS,PLAYER_LOSES }; //1 typedef enum status_e status_t; //2 Burada sadece typedef ne küçük bir örnek verilmiş.(typedef) konusunu araştır.Gayet kolay ,hatta kimi zaman program içinde kullanışlı olabiliyor.Birnevi kısayol olarak düşün. ör: typedef int tamsayi; şeklinde bir typedef tanımlaması yaparsak program içerisinde int k=10 yerine tamsayi k=10 şeklinde kullanabilriz.
|
zar konusunu anladım. teşekkürler. İlk sorduğum soruyu tahmin ettiğim gibi tam olarak anlatamadım. Dediğinizi biliyorum typedef ile kendimiz tip oluşturabiliyoruz fakat burda ; typedef enum status_e status_t; oluşturduğumuz status_e tipini kod içinde nerde nasıl kullanmışız onu anlamadım tam olarak. madem status_e yi enum olarak tanımladık neden burada : enum status_e { GAME_CONTINUES,PLAYER_WINS,PLAYER_LOSES }; tekrar enum yazdık? |
Yukardaki örnek kod'da status_t game_status = GAME_CONTINUES; yerine status_e game_status = GAME_CONTINUES; Şeklinde de yazabilirdi.Dediğim gibi typedef'e küçük bir örnek vermiş. Ben sorunuzu bu şekilde anladım.Yanlış anladıysam kusura bakmayın. Edit: Eğer sorunuz enum 'u program içerisinde nasıl kullanıldığını soruyorsanız.Programı trace etmeniz lazım.
|
Birinci enum da sadece şeklini şemalini tarif etmiş olursun. İçerisindeki sembolik sabitler sırayla 0, 1, 2 değerlerini alır. Bu enum u kullanmak için tıpkı değişken gibi bir bildirim gerekir. Nasıl tamsayı için "int a;" demek zorunda isek enum için de "enum status_e a;" demek lazım. Fakat ikide bir bu şekilde yazmak yorabilir bu yüzden bunu biraz kısaltırız. Mesela: typedef enum status_e st; Şimdi enum bildirimi şimdi şu şekilde yapılabilir. st game_status = GAME_CONTINUES; // game_status == 0 game_status = PLAYER_LOSES; // game_status == 2 |
Ayrıca programda küçük bir hata var.Aşağıdaki şekilde olması lazım. if(game_status=PLAYER_WINS) --> if(game_status==PLAYER_WINS) if(game_status=PLAYER_LOSES) --> if(game_status==PLAYER_LOSES) şeklinde olması lazım. |
teşekkürler.
şimdi biraz daha yerleşti kafama mantığı ama küçük şeylere çok takılıyorum. Örneğin yazdığınız kodda status_t yi neden tanımladık. kodu programa kopyaladım status_t yi sildim program sorunsuz çalıştı. 1. mesajımda kopyaladığım kodda da aynı durum söz konusu. #include <iostream> Burda (typedef enum status_e status_t;) status_t yi silip aşağıda (status_t game_status = GAME_CONTINUES;) de status_t yerine status_e yazarsak yine aynı şey çıkıyor ortaya. Anlamadığım nokta burası. Neden status_e ve status_t diye 2 seçenek var. 1 tane olsa ne olurdu. |
gördüm teşekkürler. kodda sadece bu var ama : if(game_status==PLAYER_WINS) diğer seçenek yok. |
Ben onu c kodu zannetmiştim, c++ mış. Bu durumda biraz düzenleme yapmak lazım. 1- C++ ta eski stil başlık dosyası tavsiye edilmez. Yani <stdlib.h> ve <time.h> yerine <cstdlib> ve <ctime> yazmak lazım. Şimdilik bir fark olmasa da ileride durum değişebilir. 2- C++ ta fonksiyonun parametre almadığını belirtmek için void yazmaya gerek yoktur. int main(void) yerine int main() yazılmalıdır. 3- C++ ta struct, class, union ve enum tiplerini deklare ederken bu sözcükleri tekrar yazmaya gerek yoktur. Yani bir kere enum un şeklini bildirdikten sonra kullanmak için; status_e game_status; demek yeterlidir. typedef ile başka bir isim vermeye gerek yok. Oysa bu bir c kodu olmuş olsaydı; enum status_e game_status; yazmak gerekecekti. Sanırım kaynağın deitel ın kitabı. O kitabın yazıldığı sırada c++ standardı tam oturmamıştı. Bazı bilgiler değişmiş olabilir. |
bu kaynak hocanın derste işlediği bi kaynak. Üzerinde herhangi bir yayın veya kitap ismi yok. Fotokopi halinde aldık. Bu kodlarda C diline giriş başlığı altında Türetilmiş Veri Tipleri konusunda ye alıyor. Dietel de C ve C++ diye 2 ye ayrılmış. Bu gördüğümüz kodlar C++ da yer alıyor. Ama dediğim gibi hoca o kaynaktan işlediği için bizde mecburen bu kodlarla çalışıyoruz. |
1. sayfa
Ayrıca //3. yerde 1+rand() %6 işlemini anlatabilir misiniz. Mesela 1 in manası nedir. rand() % 6 nın manası nedir tam olarak çözemedim. Bu işlemle zar atılımı gerçekleşiyor ama neye dayanarak bunu anlamadım tam olarak. [rand() ın rasgele sayı ürettiğini biliyorum buna göre anlatırsanız benim açımdan daha faydalı olabilir]
-Bu kodlar kitaptan birebir geçirildi.-
< Bu mesaj bu kişi tarafından değiştirildi vüvüzela -- 16 Aralık 2010; 0:52:15 >