Advarsel, det følgende er en komplet løsning, hvis du hellere vil løse problemerne så lad være med at folde koden ud.Regnestykkerne kunne man lave som en class:
class RegneStykkeClass
{
public:
RegneStykkeClass(int aA, int aB) : A(aA), B(aB)
{
}
bool Rigtig(int aResultat)
{
return A*B == aResultat;
}
int A, B;
};
Selve tabellen ville jeg lave som en std::vector af regnestykker.
Den vil derved komme til at se sådan ud:
std::vector<RegneStykkeClass> RegneStykker;
Og man kan putte regnestykkerne ind i tabellen:
for(int a = 1; a <= 9; a++)
for(int b = 1; b <= 9; b++)
RegneStykker.push_back(RegneStykkeClass(a, b));
For at det ikke skal blive for kedeligt bør man "ryste posen" så regnestykkerne kommer i tilfældig rækkefølge, først en random generator hjælpe class:
class RandomClass
{
public:
RandomClass()
{
srand(time(0));
}
int operator()(int aRange)
{
return int(1.0*aRange*rand()/RAND_MAX);
}
};
Og så kan vi shuffle:
RandomClass Rand;
std::random_shuffle(RegneStykker.begin(), RegneStykker.end(), Rand);
Og vi kan stille alle spørgsmålene, få svar og checke:
unsigned int n, Rigtige = 0;
for(n = 0; n < RegneStykker.size(); n++)
{
std::cout << RegneStykker[n].A << " * " << RegneStykker[n].B << " = ";
std::cout.flush();
int R;
std::cin >> R;
if(RegneStykker[n].Rigtig(R))
{
Rigtige++;
std::cout << "Rigtigt" << std::endl;
}
else
{
std::cout << "Forkert" << std::endl;
}
}
Og udskrive resultatet:
std::cout << "Du havde " << Rigtige << " ud af 81" << std::endl;
Så manger der blot en main() og følgende include:
#include <iostream>
#include <algorithm>
#include <vector>
#include <time.h>
#include <stdlib.h>