2017-03-16 4 views
0

Ich arbeite an einem Programm, das ein zufälliges deutsches Wort druckt, dann gibt der Benutzer die Zahl ein, wenn sie korrekt ist, addiert er eins, um Punkte zu erzielen, wenn es nichts tut. Ich bin immer noch ein Anfänger, also ist es nur eine Menge von if-Anweisungen, gibt es einen Weg, wo ich nur eine Funktion mit minimalen Zahlen haben kann, dann der Computer setzt sie zufällig zusammen und in der Lage, die richtige Antwort von den falschen zu sagen?Effizienterer Weg, um ein Zahlenspeicherprogramm zu erstellen

Wie kann ich einen zufälligen deutschen Wortgenerator erstellen, ohne eine if-Anweisung für jede Zahl machen zu müssen?

~ bearbeitet 1

start: 
string zero = "Null", one = "Eins", two = "Zwei", three = "Drei", four = "Vier", five = "Funf"; 
int ans, score = 0; 
srand(time(0));   
int x = rand() % 5;  
if (x == 0) 
{ 
    cout << zero; 
    cin>>ans 
     if (ans == 0) 
     { 
      score = score + 1; 
      goto start; 
     } 
     else 
    goto start; 
} 
if (x == 1) 
{ 
    cout << one; 
    goto start; 
} 

Die im Art und Weise versucht, es zu tun, ist die minimale Menge an Zahlen irgendwo setzen, dann der Computer eine Gruppe von ihnen zieht und druckt sie, dann wird der Benutzer gibt die Zahl und Wenn sie stimmen, steigt ihre Punktzahl.

beispiel

Ausgabe: hundertsechsundzwanzig
-Eingang: 126
korrekt

+5

Können Sie uns bitte ein Beispiel für eine Sitzung zeigen, in der Ihr Programm läuft? Zum Beispiel zeigen Sie ein paar Zeilen von Eingabe und Ausgabe? Und wie speichern Sie die Wörter, wie wählen Sie ein Wort aus? Und bitte versuchen Sie uns zumindest * einen * Code zu zeigen, vorzugsweise und wenn möglich ein [minimales, vollständiges und verifizierbares Beispiel] (http://stackoverflow.com/help/mcve). –

+1

Haben Sie dieses Problem selbst ausprobiert? –

+1

Der einfachste Weg ist, eine Liste von Wörtern zu haben und dann zufällig eine auszuwählen, anstatt zu versuchen, sie zu erzeugen. – NathanOliver

Antwort

0

Im Gegensatz zu anderen Sprachen, die ich weiß, gibt es eine gewisse Logik, wie die Zahlen werden in deutscher Sprache zusammen. Zum Beispiel "Sechs und Dreißig", "Sechs und Zwanzig" usw. Ganz ähnlich wie die Engländer "sechsunddreißig" und "sechsundzwanzig", nur die Reihenfolge der Zahlen ist ein wenig anders.

Das bedeutet, dass Sie leicht Ihr Problem, indem drei Zufallszahl (jeweils zwischen 0 und 9) und sie jeweils als Index in drei Arrays verwenden lösen können. Vielleicht so etwas wie diese:

std::string const hundreds[10] = { 
    "", 
    "hundert", 
    "zweihundert", 
    // etc... 
}; 

std::string const tens[10] = { 
    "", 
    "", // Special case for the tens 
    "und swanzig", 
    "und dreißig", 
    // etc... 
} 

std::string const ones[10] = { 
    "null", 
    "ein", 
    "zwei", 
    // etc... 
}; 

unsigned hundred_digit = get_random_number_between_0_and_9(); 
unsigned ten_digit = get_random_number_between_0_and_9(); 
unsigned one_digit = get_random_number_between_0_and_9(); 

std::string number = hundreds[hundred_digit] + ' ' + ones[one_digit] + ' ' + tens[ten_digit]; 

Wie oben in einem Kommentar erwähnt, wenn ten_digit ist 1 dann müssen Sie einige spezielle Handhabung dafür. Kann es aber immer noch mit einem Array lösen. Ein Sonderfall, wenn die one_digit Null ist, könnte auch nützlich sein, ebenso wie andere Fälle. Aber hoffentlich bekommst du den allgemeinen Kern von allem.

Verwandte Themen