Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
37
Cevap
1716
Tıklama
0
Öne Çıkarma
Cevap: C++ ta Random Kodu (2. sayfa)
S
12 yıl
Onbaşı
Konu Sahibi

for(int i=0; i < soruSayisi; i++)
{
2.dereceSorular[rastgeleDeger];
if(strcmp(kullaniciCevabi, cevapAnahtari)) Hocam peki kullaniciCevabinda cin>> diye mi yazicaz ve bunlardan hangilerine ne sekilde tanimlamamiz lazim bide cevap anahtarina dogru olan cevap sikkini mi yazicaz ornegin: a gibi.tesekkur ettim hocam



< Bu ileti mobil sürüm kullanılarak atıldı >

F
12 yıl
Binbaşı

cinle atasan daha iyi olur hocam. Farketmez aslinda. Simdi sizin C++ derecenizi bilmedigim icin birsey diyemiyorum. Cevap anahtarina da dogru sıklari girecegiz.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
G
12 yıl
Yarbay

Bende birkaç tüyo verebilirim. 2 tane paralel dizi yerine soru ve cevabı struct içine koyun.
struct SoruCevap {
string soru;
string cevap;
};

Kaç tane soru varsa tek dizi yapın.
SoruCevap sc[ADET];

Programa her girişte diziyi karıştırın.
std::random_shuffle(sc, sc + ADET);

Kaç tane soru sorulacaksa dizinin başından sorun.
for(int i = 0; i < SORULACAK; ++i)

Cevap otomatikman sorunun içinde olacaktır.
if(sc[ i].cevap == alinan_cevap)

Ve bir tavsiye olarak soru-cevapları kodun içine yazmayın, dosyadan çekin.


Bu mesaja 1 cevap geldi.
F
12 yıl
Binbaşı

quote:

Orijinalden alıntı: elektro_gadget

Bende birkaç tüyo verebilirim. 2 tane paralel dizi yerine soru ve cevabı struct içine koyun.
struct SoruCevap {
string soru;
string cevap;
};

Kaç tane soru varsa tek dizi yapın.
SoruCevap sc[ADET];

Programa her girişte diziyi karıştırın.
std::random_shuffle(sc, sc + ADET);

Kaç tane soru sorulacaksa dizinin başından sorun.
for(int i = 0; i < SORULACAK; ++i)

Cevap otomatikman sorunun içinde olacaktır.
if(sc[ i].cevap == alinan_cevap)

Ve bir tavsiye olarak soru-cevapları kodun içine yazmayın, dosyadan çekin.

Arkadasin yaptigi cok mantikli. Ben struck konusu hakkinda yeteri kadar alistirma yapmadigim icin aktif olarak kullanmak aklima gelmiyor. En yakin zamanda alistirma yapmaliyim. Boyle yap arkadasim benim dedigimden cok daha mantikli.



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı
Konu Sahibi

peki hocam verdiginiz kodlarin sirasi nasil olucak?


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı
Konu Sahibi

Hocam ornegin ben sabahtan beri ugrasiyom biturlu beceremedim tum kodlari birbirine baglayamadim ben kodlari su sekilde yapiyorum
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>
#define SORU_SAY 5
#include <string.h>
#include <stdafx.h>
using namespace std;

int main ()
{ int j,k,l,x;
string sorular[3] = {"Turkiyenin baskenti ? a)istanbul b)ankara c)izmir", "futbol kac kisiyle oynanir ? a)10 b)11 c)12", "amerikanin baskenti ? a)washington b)new york c)oklahoma"};
cin>>j; cin>>k; cin>>l;
char kullaniciCevaplari[] = {'g', 'g', 'g'};
char cevapAnahtari[3] = {'b', 'b', 'a'};
int secilenSoru=0;
int dogruSayisi;
int yanlisSayisi;

srand(time(0));

secilenSoru = rand() % SORU_SAY;

cout << sorular[secilenSoru];

return 0;

for(int i=0; i < 3; i++)
{
if(strcmp(cevapAnahtari, kullaniciCevaplari))
dogruSayisi++;
else
yanlisSayisi++;
}
}


Bu mesaja 1 cevap geldi.
G
12 yıl
Yarbay

Ne yaptın becerdin mi? Bak ben karaladım bişeyler. Buradan birşeyler kapmaya bak. Soruları "sorular.txt" isimli bir dosyaya koyacaksın. Dosya formatı şu şekilde olacak.
Türkiyenin başkenti neresidir?
Ankara
Bursa
İstanbul
Hakkari
C' de ekrana yazı yazdırmak için kullanılan fonksiyon hangisidir?
printf
scanf
memcpy
strcmp

Önce soru daha sonra şıklar. Şıklardan doğru olanı daima en üstte olmalı. Kaç tane şık olacağı koddaki #define SIK_ADET sabiti ile tam olarak eşleşmeli.
 
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <cassert>

#define SIK_ADET 4
#define MAX_SORU 100
using namespace std;

struct SoruCevap {
string soru;
string cevap;
string siklar[SIK_ADET];
};

int sorulariYukle(SoruCevap *sc)
{
ifstream dosya("sorular.txt");
assert(dosya);
srand(time(0));

int i = 0;
for(; true; ++i) {

getline(dosya, sc[i].soru);
if(sc[i].soru.empty())
break;
getline(dosya, sc[i].cevap);
sc[i].siklar[0] = sc[i].cevap;

for(int j = 1; j < SIK_ADET; ++j)
getline(dosya, sc[i].siklar[j]);
random_shuffle(sc[i].siklar, sc[i].siklar + SIK_ADET);
}
dosya.close();
random_shuffle(sc, sc + i);

return i;
}

int main()
{
SoruCevap sc[MAX_SORU];
int adet = sorulariYukle(sc);

int sorulacak, dogru_sayisi = 0, yanlis_sayisi = 0;
cout << "Kaç tane soru sorulsun?: ";
cin >> sorulacak;
cin.ignore();

if(sorulacak > adet)
sorulacak = adet;

string cevap;
char harf[] = {'a', ')', ' ', '\0'};
for(int i = 0; i < sorulacak; ++i) {
cout << sc[i].soru << endl;

for(int s = 0; s < SIK_ADET; ++s) {
cout << harf << sc[i].siklar[s] << endl;
++harf[0];
}
harf[0] = 'a';

cout << "\nCevabınız: ";
getline(cin, cevap);

if(sc[i].cevap == cevap)
++dogru_sayisi;
else
++yanlis_sayisi;
}
cout << "Doğru cevap sayısı: " << dogru_sayisi << endl;
cout << "Yanlış cevap sayısı: " << yanlis_sayisi << endl;

return 0;
}





< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 20 Nisan 2013; 13:11:20 >
Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı
Konu Sahibi

hocam verdigin cevaplar icin cok tesekkur ederim,ama sorular.txt dosyasini nasil kaydedicem masaustune mi?,bide dosyanin icini nasil bi sekilde yazmam gerekli.


Bu mesaja 1 cevap geldi.
G
12 yıl
Yarbay

Kodun bu hali ile çalışması için txt dosyasının program dosyası (exe) ile aynı dizinde olması lazım. Ama sen kodu değiştirerek ve tam yol vererek istediğin yere koyabilirsin.
ifstream dosya("D:\\Ornek\\sorular.txt"); gibi.

Dosyanın içini nasıl yazacağını yukarıda söyledim. Tekrar söylüyorum şu formda olacak.

Soru1
Şık1 (Cevap)
Şık2
Şık3
Soru2
Şık1 (Cevap)
Şık2
Şık3
...

Ne kadar şık varsa kod içinde SIK_ADET sabiti belirtmelisin. Ben 4 olarak ayarladım. Cevabın en üste yazılması gerekliliği kafanı karıştırmasın. Hem şıklar hemde sorular her seferinde karıştırılıyor.


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı
Konu Sahibi

elektro_gadget hocam ben soyle yapiyorum 3tane soru hazirliyorum ve .txt olarak kaydediyorum programin bulundugu alana,sonrada kodu sizin yazdiginiz gibi ayni kopyala yapistir yapiyorum ama .txt icindeki sorular ve sikklar gozukmuyor,bunu nasil cozebilirim acaba ?


Bu mesaja 1 cevap geldi.
G
12 yıl
Yarbay

Yanlış mı anlıyorum acaba kodu derlemeden mi yapıyorsun? Derleyip çalıştıracaksın. Program çalışırken txt yanında olacak.

Eğer txt yi göremezse "Assertion 'dosya' failed. Aborted" diye hata verir.



S
12 yıl
Onbaşı
Konu Sahibi

yok derleyip calistiriyorumda ama cout << "Kaç tane soru sorulsun?: "; yaziyor benim elde ettigim sorular cikmiyor


Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @elektro_gadget
G
12 yıl
Yarbay

Kodu birazcık inceleseydin keşke. Belki soruların tamamı sorulmak istenmez diye öyle yaptım. Eğer txt ye 3 tane soru yazdıysan oraya 3 e kadar bir sayı yazacaksın. Şöyle.

Kaç tane soru sorulsun?: 2


Bu mesaja 1 cevap geldi.
S
12 yıl
Onbaşı
Konu Sahibi

elektro_gadget verdigin herseyi yaptim ama yinede calismiyor.soyle Kaç tane soru sorulsun?: soruyor ardindan herhangi bir tusa basinca birden "Doğru cevap sayısı: "
"Yanlış cevap sayısı" cikiyor ekrana.Sanirim benim sorunum sorulari dogru durust dosyaya atmamam.Ben dosyaya sorulari atma konusunu soyle yapiyorum programin olustugu yer My documents bende txt dosyasini oraya oldugu gibi atiyorum icindede 3 tane soru var sorularda soyle:

Turkiyenin baskenti neresidir?
Ankara (cevap)
Istanbul
Edirne
Izmir

Amerikanin baskenti hangisidir?
Washington (cevap)
boston
los angeles
philedelphia

Kosovanin baskenti?
Prizren
pristina (cevap)
mitrovica
gjakova


elektro_gadget cevabini bekliyorum





< Bu mesaj bu kişi tarafından değiştirildi sertaclincoln -- 20 Nisan 2013; 17:37:52 >
Bu mesaja 1 cevap geldi.
G
12 yıl
Yarbay

Arkadaşım tamam. Al işte sana örnek bir txt.http://www.dosya.tc/server6/NJoJ4l/sorular.txt.html

Bu da kodun sadeleştirilmiş hali. Bunu kullan. Daha da olmazsa yapabileceğim birşey yok. Bende takır takır çalışıyor.

 
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <ctime>
#include <cstdlib>
#include <cassert>

#define SIK_ADET 4
#define MAX_SORU 100
using namespace std;

struct SoruCevap {
string soru;
string cevap;
string siklar[SIK_ADET];
};

int sorulariYukle(SoruCevap *sc)
{
ifstream dosya("sorular.txt");
assert(dosya);
srand(time(0));

int i = 0;
for(; true; ++i) {

getline(dosya, sc[i].soru);
if(sc[i].soru.empty())
break;
getline(dosya, sc[i].cevap);
sc[i].siklar[0] = sc[i].cevap;

for(int j = 1; j < SIK_ADET; ++j)
getline(dosya, sc[i].siklar[j]);
random_shuffle(sc[i].siklar, sc[i].siklar + SIK_ADET);
}
dosya.close();
random_shuffle(sc, sc + i);

return i;
}

int main()
{
SoruCevap sc[MAX_SORU];
int adet = sorulariYukle(sc);

int dogru_sayisi = 0, yanlis_sayisi = 0;
char harf[] = {'a', ')', ' ', '\0'};
string cevap;

for(int i = 0; i < adet; ++i) {
cout << sc[i].soru << endl;

for(int s = 0; s < SIK_ADET; ++s) {
cout << harf << sc[i].siklar[s] << endl;
++harf[0];
}
harf[0] = 'a';

cout << "\nCevabınız: ";
getline(cin, cevap);

if(sc[i].cevap == cevap) {
cout << "Bildiniz!\n\n";
++dogru_sayisi;
}
else {
cout << "Bilemediniz!\n\n";
++yanlis_sayisi;
}
}
cout << "Doğru cevap sayısı: " << dogru_sayisi << endl;
cout << "Yanlış cevap sayısı: " << yanlis_sayisi << endl;

return 0;
}



S
12 yıl
Onbaşı
Konu Sahibi

elektro_gadget kardesim verdigin cevaplar icin cok tesekkur ettim kod simdi bendede takir takir calisiyor,ama kusura bakmasan bi sorum daha olucak.Simdi ben dogru olan sikki kodda mi belirtmem lazim yoksa sorular.txt de mi yani dogru olan sikki nasil belirticez?Cok tesekkur ederim saygilar.





< Bu mesaj bu kişi tarafından değiştirildi sertaclincoln -- 21 Nisan 2013; 19:52:09 >
Bu mesaja 1 cevap geldi.

Bu mesajda bahsedilenler: @elektro_gadget
G
12 yıl
Yarbay

Arkadaşım senin için birşeyler yapıyoruz burada ama lütfen sende anlamak için biraz gayret et. Yanlış saymadıysam bu sorunun cevabını tam 3 kere vermişim. Daha nasıl anlatacağım gerçekten bilmiyorum. txt dosyasını incele. Programı çalıştır ve sorduğu sorulara cevap ver. Program doğru şıkkı biliyor, bunu nasıl yaptığını anlattım. Tekrar gözden geçir. Ayrıca koddaki "sc.siklar[0] = sc[ i].cevap;" satırını da inceleyiver.





< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 21 Nisan 2013; 21:37:54 >

L
12 yıl
Er

Merhaba arkadaslar bende C++ konusunda birazcik yeniyimde, elektro_gadget verdiginiz kod gayet guzeldi calisiyor,fakat benim kafama su takildi sertaclincoln de baslikta belirmis 100 tane soru sorulacak peki bu 100 taneden sadece 10 tane soru sormasini nasil yapicaz? Hayirli aksamlar tesekkur ettim.




Bu mesajda bahsedilenler: @elektro_gadget
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.