Zostałem przydzielony do pracy domowej w mojej klasie programowania. Rozumiem istotę tego, ale czuję się trochę zagubiony. Chciałbym uzyskać pomoc i informacje zwrotne na ten temat.
Mój problem: Szczególny skład talentów ma 5 sędziów, z których każdy przyznaje każdemu z wykonawców ocenę od 0 do 10. Dopuszczalne są wyniki ułamkowe, takie jak 8.3. Ostateczną punktację wykonawcy określa się, opuszczając najniższy i najwyższy wynik, a następnie uśredniając 3 pozostałe punkty. Napisz program, który używa tej metody do obliczenia wyniku zawodnika. Powinien zawierać następujące funkcje:
double getJudgeData () powinien zapytać użytkownika o aOcena sędziego i zatwierdzenie wyniku, funkcja ta powinna zostać wywołana 5 razy od głównej, raz dla każdego z 5 sędziów. void calcScore () powinien obliczyć i wyświetlić średnią z trzech wyników, które pozostają po usunięciu najwyższych i najniższych wyników uzyskanych przez wykonawcę. Ta funkcja powinna zostać wywołana jeden raz z głównego i powinna zostać przekazana 5 punktom. Dwie ostatnie funkcje, opisane poniżej, powinny być wywoływane przez calcScore, która wykorzystuje zwrócone informacje w celu ustalenia, które wyniki mają zostać usunięte.
double findLowest () powinien znaleźć i zwrócićnajniższy z pięciu wyników przeszedł do niego. double findHighest () powinien znaleźć i zwrócić najwyższą z pięciu otrzymanych wyników. Weryfikacja danych wejściowych: nie akceptuj ocen sędziów niższych niż 0 lub wyższych niż 10.
Rozumiem, że kod służący do uzyskania danych sędziów będzie wyglądał dokładnie tak samo
Double getJudgeData(double score){
cout << "Judge, please enter your score";
cin >> score;
while (score<0.0 || score> 10.0){
cout << "Invalid score. Please enter a correct one";
cin>>score
}
return score;
}
Zasadniczo to powtórzone 4 razy, na 5 razyw sumie. Pomyślałem, że po prostu zmienię nazwę zmiennej na score1, score2 itd. Aby dowiedzieć się, jakie są najwyższe i najniższe wyniki, pomyślałem, że mogę użyć kilku instrukcji if. Na przykład,
if (score < lowest)
lowest=score;
else if (score1 < score)
lowest = score1;
else if (score2 < score)
lowest = score2;
else if (score3 < score)
lowest = score3;
else if (score4 < score)
lowest = score4;
a przeciwieństwo dla najwyższych.
Domyślam się, że moim największym problemem jest kodowanievoid calcscore () i zrozumienie tego wszystkiego. Czuję, że zupełnie tego nie rozumiem, tak jak rozumiem, że używam funkcji, aby dowiedzieć się o wynikach sędziów w każdym przypadku i odesłać wynik do głównego. "BUt, po prostu nie mam ochoty rozumiem, czym jestem robić. Chciałbym wskazówek. Z góry dziękuję.
EDYTOWAĆ Okej, pracowałem nad moim kodem i kontynuowałem.
#include <iostream>
using namespace std;
double getJudgeData(double score) {
cout << "Judge 1 please enter your score: ";
cin >> score;
while (score < 0.0 || score > 10.0) {
cout << "Invalid score. Please enter a correct one" << endl;
cin >> score;
}
return score;
}
double getJudgeData1(double score1) {
cout << "Judge 2 please enter your score: ";
cin >> score1;
while (score1 < 0.0 || score1 > 10.0) {
cout << "Invalid score. Please enter a correct one" << endl;
cin >> score1;
}
return score1;
}
double getJudgeData2(double score2) {
cout << "Judge 3 please enter your score: ";
cin >> score2;
while (score2 < 0.0 || score2 > 10.0) {
cout << "Invalid score. Please enter a correct one" << endl;
cin >> score2;
}
return score2;
}
double getJudgeData3(double score3) {
cout << "Judge 4 please enter your score: ";
cin >> score3;
while (score3 < 0.0 || score3 > 10.0) {
cout << "Invalid score. Please enter a correct one" << endl;
cin >> score3;
}
return score3;
}
double getJudgeData4(double score4) {
cout << "Judge 5 please enter your score: ";
cin >> score4;
while (score4 < 0.0 || score4 > 10.0) {
cout << "Invalid score. Please enter a correct one" << endl;
cin >> score4;
}
return score4;
}
double findHighest(double score, double score1, double score2, double score3, double score4) {
double highest = score;
if (score1 > highest)
highest = score1;
else if (score2 > highest)
highest = score2;
else if (score3 > highest)
highest = score3;
else if (score4 > highest)
highest = score4;
return highest;
}
double findLowest(double score, double score1, double score2, double score3, double score4) {
double lowest = score;
if (score1 < lowest)
lowest = score1;
else if (score2 < lowest)
lowest = score2;
else if (score3 < lowest)
lowest = score3;
else if (score4 < lowest)
lowest = score4;
return lowest;
}
void calcScore(double score, double score1, double score2, double score3, double score4, double highest, double lowest) {
double findHighest(highest);
double findLowest(lowest);
double avgScore = (score + score1 + score2 + score3 + score4 - lowest - highest) / 3;
cout << "nThe contestant"s average score is: " << avgScore << endl;
}
int main(double score, double score1, double score2, double score3, double score4, double highest, double lowest) {
getJudgeData(score);
getJudgeData1(score1);
getJudgeData2(score2);
getJudgeData3(score3);
getJudgeData4(score4);
system("PAUSE");
return 0;
}
Działa i jest w stanie wykryć, czy kod jestnieważne dla wszystkich sędziów. Zaraz po otrzymaniu wszystkich danych wejściowych dla sędziów po prostu powie "naciśnij dowolny klawisz, aby kontynuować" dwa razy i koniec.Nie wydaje się, że nie przechodzi przez pustą sekcję calcscore.
Odpowiedzi:
0 dla odpowiedzi № 1Chciałbym zebrać 5 punktów w wektorze. Następnie obliczyć wynik iteracji wszystkich, podsumowując je, śledząc najniższy / najwyższy, a następnie odjąć oba od sumy.
Nie zamierzam napisać dla ciebie kodu, ale wydaje mi się, że to dobry sposób na zrobienie tego.
Odpowiedź na komentarz:
Wtedy twoja min / max będzie musiała być jakąś głupotą:
double min(double a0, double a1, double a2, ...)
{
double min = a0;
if (a1 < min) min = a1;
if (a2 < min) min = a2;
...
return min;
}
Pomiń lub nie uzyskaj parametrów końca ogona, jeśli którakolwiek z pierwszych jest mniejsza niż a0.
0 dla odpowiedzi nr 2
Prawdopodobnie rozwiązanie powinno się kręcić wokół
averageScore = (score1 + score2 + score3 + score4 + score5 - findLowest() - findHighest()) / 3;
To pozwoli ci nie dbać o to, który wynik jest najniższy i najwyższy, tylko o wartości najwyższych i najniższych wyników.