Betrag in Zahlen

comuda

Grünschnabel
Hallo Community,

ich versuche gerade folgenende Aufgabe zu lösen:

Schreiben Sie für die Girokontoverwaltung ein C-Programm zum Vordrucken von Schecks mit dem
Betrag in Worten ausgeschrieben. In dieser Aufgabe sollen nur Beträge ohne Nachkommastellen
zwischen 0 und 1000 in Worten ausgegeben werden, also z.B. bei Eingabe von 35 die Ausgabe
"fuenfunddreissig". Umlaute und „ß“ sollen dabei wie im Kreuzworträtsel durch normale Zeichen
ersetzt werden. Bei Falscheingaben soll eine entsprechende Fehlermeldung ausgegeben werden.
Infos zur Schreibweise von Zahlen: http://www.vocabulix.com/grammatik/deutsche-zahlen.shtml
Aufgabe

Nun meine Frage: Es muss doch eine Vereinfachung geben so dass ich nicht für jede Zahl von 0 bis 1000 eine eigene Zuweisung anlegen muss oder?

Mit welcher Funktion kann ich diese Aufgabe bearbeiten?

Danke schon mal!
 
Hallo comuda

Grundsätzlich ist das natürlich richtig, dass du nicht jede Zahl aufschreiben musst. Überlege dir nach welchem Schema in der Sprache die Zahlen gebildet werden, hier ein paar Denkanstösse:

Hunderter:
einhundert
zweihundert
...

Einer:
einund ...
zweiund ...
dreiund ...
...

Und ein paar arithmetische Überlegungen:
Code:
534 / 100 = 5
423 / 100 = 4
317 / 100 = 3

534 % 100 = 34
423 % 100 = 23
317 % 100 = 17

534 % 10 = 4
423 % 10 = 3
317 % 10 = 7

(534 % 100) / 10 = 3
(423 % 100) / 10 = 2
(317 % 100) / 10 = 1

Wenn du dir jetzt noch folgende Daten vorgibst:
C:
	static const char* lower[] = {
		"null",
		"eins",
		"zwei",
		"drei",
		"vier",
		"fuenf",
		"sechs",
		"sieben",
		"acht",
		"neun",
		"zehn",
		"elf",
		"zwoelf",
		"dreizehn",
		"vierzehn",
		"fuenfzehn",
		"sechzehn",
		"siebzehn",
		"achtzehn",
		"neunzehn"
	};

	static const char* upper[] = {
		"null",
		"zehn",
		"zwanzig",
		"dreissig",
		"vierzig",
		"fuenfzig",
		"sechzig",
		"siebzig",
		"achtzig",
		"neunzig"
	};

Solltest du eigentlich keine Probleme mehr haben.

Viele Grüsse
Cromon
 
Hi und Willkommen bei tutorials.de,

natürlich gibt es eine Vereinfachung, und genau die sollst du ja machen :)

Was du brauchst sind "nur" folgende Wörter/Strings:
"ein", "zwei", "drei" ... "neunzehn"
"zwanzig", "dreissig", "vierzig" ... "neunzig"
"s" (bei ein-s), "und", "null", "hundert", "tausend"

32 Stück.

Zuerst auf Sonderfälle prüfen: 0 und 1000.
Wenn die Zahl eines von den beiden ist, eifnach das passende Wort ausgeben und fertig.

Sonst:
Zuerst die Hunterterstelle hernehmen.
Wenn 0, nichts tun
Wenn 1: "hundert" ausgeben
2-9: "zwei"-"hundert", "drei"-"hundert"...einfach zwei Strings nacheinander ausgeben.


Dazu kommt das noch der Rest der Zahl:
Wenn man Tausender- und Hunderterstelle wegnimmt (modulo)
bleibt eine Zahl zwischen 1 und 99 übrig (0 nicht, weil das ggf. vorher schon behandelt wurde)

Wenn 1: "ein"-"s"
2-19: "zwei", "drei"..."neunzehn"...die Strings dafür eben
(11-19 sind ja nicht einundzehnzig bis neunundzehnzig, daher Sonderbehandlung)

Für 20-99:
Wenn die Einerstelle nicht 0 ist: "ein"-"und" bis "neun"-"und"
und danach der Name der Zehnerstelle "zwanzig" bins "neunzig"

Damit wäre alles zusammengesetzt...einfach die passenden Strings hintereinander ausgeben...
 
#include <stdio.h>
#include <stdlib.h>

int main()

{
int betrag;
printf("Geben Sie einen Betrag in Zahlen zwischen 0 und 1000 ein:\n");

scanf("%d",&betrag);

if(betrag > 1000 ){

printf("Keine korrekte Eingabe!\n");
}

switch(betrag) {
case 0: printf("Null\n"); break;
case 1: printf("Eins\n"); break;
case 2: printf("Zwei\n"); break;
case 3: printf("Drei\n"); break;
case 4: printf("Vier\n"); break;
case 5: printf("Fünf\n"); break;
case 6: printf("Sechs\n"); break;
case 7: printf("Sieben\n"); break;
case 8: printf("Acht\n"); break;
case 9: printf("Neun\n"); break;
case 10: printf("Zehn\n"); break;
case 11: printf("Elf\n"); break;
case 12: printf("Zwölf\n"); break;
case 13: printf("Dreizehn\n"); break;
case 14: printf("Vierzehn\n"); break;
case 15: printf("Fünfzehn\n"); break;
case 16: printf("Sechszehn\n"); break;
case 17: printf("Siebzehn\n"); break;
case 18: printf("Achtzehn\n"); break;
case 19: printf("Neunzehn\n"); break;

}


switch(betrag/10)
{

case 2: printf("Zwanzig\n"); break;
case 3: printf("Dreissig\n"); break;
case 4: printf("Vierzig\n"); break;
case 5: printf("Fünfzig\n"); break;
case 6: printf("Sechzig\n"); break;
case 7: printf("Siebzig\n"); break;
case 8: printf("Achtzig\n"); break;
case 9: printf("Neunzig\n"); break;



}

if (betrag>100){
printf("%d hundert",);




Ok also der erste Teil passt schon soweit. Aber wie sage ich nun dass wenn die Hunderterstelle 1 ist er den Wortteil von eins nehmen soll nicht als Zahl?!
 
Du könntest auch einen zwei-Dimensionalen String erstellen und indem dann die ganzen Zahlennamen speichern kannst:
Code:
int inputNumber;
	char *number[30] = { "Eins", "Zwei", "Drei", "Vier", "Fuenf", "Sechs", "Sieben", "Acht", };

	printf("Gib eine Zahl zwischen 0 und 1000 ein: ");
	scanf("%d", &inputNumber);


	if(inputNumber <= 0 || inputNumber > 1000) 
		printf("Inkorrekte Eingabe!\n");
	else 
		printf("\n%s", number[inputNumber]);

Du musst die Strings halt noch fertig definieren..
 
Zurück