Jeśli rzecz się sprowadza do podania wyniku testu który będzie wyliczony oddzielnie to sprawa jest banalna - piszesz funkcję np taką:
(w tej implementacji jest @Nency Black: trochę hacków. Wyjaśnię w komentarzach)
std::string whichGroup(int testResult)
{
if (testResult >= 50)//zaczynając porównanie >= od dolnego zakresu powoduję, że każdy rezultat testu jaki zostanie przesłany lepszy od 49 się załapie, nawet jakby było to 1000
{
return "Zaawansowana";//powrót z funkcji powoduje, że reszta warunków nie jest sprawdzana
}
if (testResult >= 30)//tutaj podobny hack jak wyżej, każda liczba od 30 do 49 się załapie. A dlaczego 50 nie, w końcu przecież 50 >= 30? Ponieważ 50 wpadnie w warunek wyżej, i do tego miejsca wykonywanie kodu nie dotrze
{
return "Średnio zaawansowana";
}
//ostatni hack działa na zasadach podobnych do powyższych, ale czemu nie ma sprawdzania tylko od razu zwracanie? Z prostego powodu, jakby rezultat testu pasował do któregoś if-a to by funkcja zakończyła się wcześniej. Skoro kod dotarł tutaj to oznacza, że grupy zaawansowana i średnio zaawansowana nie pasowały, więc już nic innego niż początkująca nie pozostało.
return "Podstawowa"
}
i masz co chciałaś.
EDIT:
@kq mi w komentarzach marudził, że tak trochę niedydaktycznie to zapisane, więc proszę - wersja "przesadnie zgodnie z regułami sztuki" wyglądałaby następująco:
std::string whichGroup(unsigned int testResult)//tutaj maleńki hack uodparniający na przesłanie ujemnej wartości
{
if (testResult >= 50 && testResult <= 70)
{
return "Zaawansowana";
}
else if (testResult >= 30 && testResult <= 49)
{
return "Średnio zaawansowana";
}
else if (testResult >= 0 && testResult <= 29)
{
return "Podstawowa";
}
}