Evo i moje implementacije funkcije za pomoc prijatelja.Nije nesto ali mislim da moze da posluzi.
PS.Sanse da prijatelj pogodi tacan odgovor je 75%.
Kod:
void PomocPr(string oodg[4],char ttacan){
int odg_p[4],indexT,indexN,i;
indexN=rand()%4;
cout << "Upravo ste iskoristili pomoc prijatelja" << endl;
if(ttacan=='a') indexT=0;
if(ttacan=='b') indexT=1;
if(ttacan=='c') indexT=2;
if(ttacan=='d') indexT=3;
if(indexT==indexN) indexN=rand()%4;
i=rand()%4;
odg_p[0]=indexT;
odg_p[1]=indexN;
odg_p[2]=indexT;
odg_p[3]=indexT;
cout << "Mislim da je tacan odgovor pod " << oodg[odg_p[i]] << endl;
}
Ovo čini mi se daje 25% šanse da prijatelj pogodi tačan odgovor. Mislim da bi bilo bolje nešto ovako:
double sansa[15];
sansa[0] = 98;
sansa[1] = 95;
sansa[2] = 92;
sansa[3] = 87;
sansa[4] = 80;
sansa[5] = 73;
...
sansa[13] = 34;
sansa[14] = 30; // najmanja šansa da će pogoditi, jer je 25% šansa da bez ikakvog znanja pogodi tačan odgovor, pa je ovo malo više.
Ovo su šanse da će prijatelj pogoditi tačan odgovor. Onda stavimo rand da vraća vrijednost od 0 do 100. Sve što preostaje jeste da stavimo
if ((rand() - sansa[rbroj]) > 0)
kod u kojem prijatelj odabere tačan odgovor;
else
kod u kojem prijatelj odabere random jedan od 3 preostala netačna odgovora;
ispiši odgovor;
Odabir jednog od 3 preostala netačna odgovora može da se realizuje kao rand() % 4, pri čemu to ponavljamo dok god je rezultat rand() % 4 operacije jednak broju tačnog odgovora. Rezultat je da ako rand() % 4 vrati npr. 1, a drugi odgovor (sa indeksom 1) je tačan, onda ponavlja traženje nasumičnog broja.
Naravno, u slučaju da je već iskorištena pomoć pola-pola imamo jedan tačan i jedan netačan odgovor, pa ako nije uspjela šansa da pogodimo tačan odgovor onda će ponavljati ovu rand operaciju dok god je rezultat indeks tačnog odgovora ili indeks odgovora koji je izbačen uz pomoć pola-pola.
Pri tome još treba uzeti u obzir da kad ima duplo manje odgovora nakon pola-pola onda je veća šansa da će prijatelj pogoditi tačan odgovor. Ja bih ovdje to izračunao tako što bih rekao da je šansa da prijatelj pogriješi duplo manja nego kad nema pola-pola pomoći. To znači da će nakon pola-pola šansa za tačan odgovor prijatelja biti:
sansa1[0] = 99;
sansa1[1] = 97;
sansa1[2] = 96;
sansa1[3] = 93;
sansa1[4] = 90;
sansa1[5] = 86;
...
sansa[13] = 68;
sansa[14] = 65;
Ovo meni lično ne bi bilo dovoljno, smatram da bi trebala za par procenata šansa tačnog pogotka da bude niža za teža pitanja, ali nema veze, može i ovo. A uvijek se može i ovaj niz šansi ručno inicijalizovati, što uopšte nije problem.
Sad onaj gore dio malo izmjeniti:
bool pola; // true ako smo iskoristili pola-pola pomoć, false ako nismo
if ( (!pola) && ((rand() - sansa[rbroj]) > 0) || (pola && ((rand() - sansa1[rbroj]) > 0) )
kod u kojem prijatelj odabere tačan odgovor;
else
kod u kojem prijatelj odabere random jedan dostupan, a netačan odgovor;
ispiši odgovor;
Ovim smo postigli da će prijatelj odgovoriti tačno ako:
- nismo iskoristili pola-pola i računa se obična šansa za pogodak ili
- jesmo iskoristili pola-pola i računa se izmjenjena, nešto veća, šansa za pogodak
Što se tiče koda za random netačan odgovor to je najbolje preko f-ja za netačan odgovor, pri čemu jedna ima dva argumenta više nego druga i od toga da li smo iskoristili pola-pola pomoć zavisi koju pozivamo. Npr:
if ( (!pola) && ((rand() - sansa[rbroj]) > 0) || (pola && ((rand() - sansa1[rbroj]) > 0) )
kod u kojem prijatelj odabere tačan odgovor;
else if (!pola)
netacan1 (argument,..., tačanodg); // argument po imenu tačanodg služi da bi funkcija znala koji odgovor je tačan i da ponavlja postupak traženja ako se potrefi taj odgovor
else
netacan2 (argument,..., tačanodg, pola1, pola2); // tačanodg isto kao i gore + još i pola1 i pola2 kao indeksi ona dva odgovora koja su izbačena pozivom pomoći pola-pola
ispiši odgovor;