Also für meine comp sci-Klasse wurde ich beauftragt, römische Zahlen zu addieren, subtrahieren, teilen und multiplizieren, wenn sie 12 Regeln, die ich gegeben habe, bestehen.Überprüfen von Fehlern der römischen Ziffern gegeben einen Satz von Regeln
Ich erstellte ein Boolean-Array mit 13 Elementen, um zu verfolgen, welche Regeln verletzt wurden. Ich habe eine Funktion namens checkErrors
erstellt, die jede der 12 Regelprüffunktionen aufruft. Ich rufe die checkErrors
an, um jede römische Ziffer zu überprüfen, bevor die Berechnung durchgeführt wird, und auszudrucken, welcher der Fehler falsch ist (falls vorhanden), aber statt nur die falschen auszudrucken, druckt jeder einzelne.
Unten ist ein Ausschnitt von checkErrors
, der für jede Regel (checkErrorOne, checkErrorTwo ... usw.) gleich ist. Wenn die Regel fehlerhaft ist, wird errors[0]
auf false gesetzt, um anzuzeigen, dass die gesamte römische Zahl nicht zulässig ist.
`bool checkErrors(string romanNumeral, bool * errors) {
if (checkErrorOne(romanNumeral) == false) {
errors[1] = false;
errors[0] = false;
}
if (checkErrorTwo(romanNumeral) == false) {
errors[2] = false;
errors[0] = false;
}
if (checkErrorThree(romanNumeral) == false) {
errors[3] = false;
errors[0] = false;
}
if (checkErrorFour(romanNumeral) == false) {
errors[4] = false;
errors[0] = false;
}
if (checkErrorFive(romanNumeral) == false) {
errors[5] = false;
errors[0] = false;
}
if (checkErrorSix(romanNumeral) == false) {
errors[6] = false;
errors[0] = false;
}
if (checkErrorSeven(romanNumeral) == false) {
errors[7] = false;
errors[0] = false;
}
if (checkErrorEight(romanNumeral) == false) {
errors[8] = false;
errors[0] = false;
}
if (checkErrorNine(romanNumeral) == false) {
errors[9] = false;
errors[0] = false;
}
if (checkErrorTen(romanNumeral) == false) {
errors[10] = false;
errors[0] = false;
}
if (checkErrorEleven(romanNumeral) == false) {
errors[11] = false;
errors[0] = false;
}
if (checkErrorTwelve(romanNumeral) == false) {
errors[12] = false;
errors[0] = false;
}
if (errors[0] == true)
return true;
else if (errors[0] == false)
return false;
} `
den Wert des ersten Elements zurück zu sagen, wenn es legal ist.
Danach, wenn ich gehe jede Regel zu drucken, die ich benutze das folgende gebrochen wurde:
void printFunction(string romanNumeral1, string romanNumeral2, string mathOperator, bool errors[]){
if (checkErrors(romanNumeral1, errors) == false && checkErrors(romanNumeral2, errors) == true){
cout << romanNumeral1 << " is illegal becasue" << endl;
if (errors[1] == false)
cout << "Contains a letter that is not M, D, C, L, X, V, or I;" << endl;
if (errors[2] == false)
cout << "I is not followed by I, V, or X;" << endl;
if (errors[3] == false)
cout << "X is not followed by I, V, X, L, or C;" << endl;
für jede der 12 Regeln. Es wird jeder der Fehler gedruckt, nicht jeder Fehler.
Wenn jemand mit meiner Logik helfen könnte, würde es sehr geschätzt werden.
void printFunction(string romanNumeral1, string romanNumeral2, string mathOperator, bool errors[]){
if (checkErrors(romanNumeral1, errors) == false && checkErrors(romanNumeral2, errors) == true){
cout << romanNumeral1 << " is illegal becasue" << endl;
if (errors[1] == false)
cout << "Contains a letter that is not M, D, C, L, X, V, or I;" << endl;
if (errors[2] == false)
cout << "I is not followed by I, V, or X;" << endl;
if (errors[3] == false)
cout << "X is not followed by I, V, X, L, or C;" << endl;
Edit: Warum wird der Code, den ich schrieb 12 Fehler jeder der Ausdruck ich stattdessen die, die das Drucken von nur erstellt, die verletzt wurden?
Dank
Hilfe mit was? Was ist das Problem? – jpo38
Wenn Sie mithilfe eines Debuggers helfen könnten, würde es sehr geschätzt werden. Führen Sie Ihre Programmanweisung nach Anweisung aus, * beobachten Sie * die Werte der Variablen. Lassen Sie uns wissen, welche Aussage das Problem verursacht. –
Was ist der Wert des Array 'errors', wenn alles gedruckt wird? –