C-Kurs 2009/Zahlen sagen: Unterschied zwischen den Versionen
(Erstellt (martin)) |
(→Hinweise) |
||
Zeile 18: | Zeile 18: | ||
* Beim Zerlegen von Zahlen helfen ggf. die Funktionen <code>[http://www.cplusplus.com/reference/clibrary/cmath/pow pow()]</code> und/oder <code>[http://www.cplusplus.com/reference/clibrary/cmath/log10 log10()]</code> aus dem Standardheader [http://www.cplusplus.com/reference/clibrary/cmath math.h]. | * Beim Zerlegen von Zahlen helfen ggf. die Funktionen <code>[http://www.cplusplus.com/reference/clibrary/cmath/pow pow()]</code> und/oder <code>[http://www.cplusplus.com/reference/clibrary/cmath/log10 log10()]</code> aus dem Standardheader [http://www.cplusplus.com/reference/clibrary/cmath math.h]. | ||
* Beachte die Ausnahmen der Zahlwörter elf, zwölf, sechzehn und siebzehn im Gegensatz zu den übrigen Zahlen unter 20. | * Beachte die Ausnahmen der Zahlwörter elf, zwölf, sechzehn und siebzehn im Gegensatz zu den übrigen Zahlen unter 20. | ||
+ | * Wie kann man sichergehen, dass unabhängig von der Größe des Speicherblocks und der Länge des Zahlwortes kein Pufferüberlauf (buffer overflow) entstehen kann? | ||
== Kommentare == | == Kommentare == |
Version vom 22. September 2009, 07:02 Uhr
Aufgabenstellung
Schreibe ein Programm, das eine als Kommandozeilenparameter in numerischer Form übergebene Zahl in Worten (also als Zahlwort) ausgibt. Ein Aufruf des fertigen Programms könnte etwa wie folgt aussehen:
(~): ./zahlwort 174367 einhundertvierundsiebzigtausend dreihundertsiebenundsechzig
Hinweise
- Alloziere zunächst einen Speicherblock, der groß genug ist, um das komplette Zahlwort zu enthalten (z.B. via
malloc
). - Schreibe eine Funktion
say_short_number(int number, char* buffer)
, die eine übergebene Zahl zwischen 1 und 999 als Zahlwort in den ebenfalls übergebenen Puffer kopiert. - Schreibe dann eine Funktion
say_number(long int number, char* buffer)
, die eine (nahezu) beliebig große Zahl übergeben bekommt und für alle in der Zahl verfügbaren 10^3er-Gruppen (tausend, million(en), milliarde(n), ...) jeweilssay_short_number()
aufruft. - Zuordnungen von Zahl zu Zahlwort kannst du statt mittels case-Anweisung auch durch ein Array von Zeichenketten definieren.
- Beim Zerlegen von Zahlen helfen ggf. die Funktionen
pow()
und/oderlog10()
aus dem Standardheader math.h. - Beachte die Ausnahmen der Zahlwörter elf, zwölf, sechzehn und siebzehn im Gegensatz zu den übrigen Zahlen unter 20.
- Wie kann man sichergehen, dass unabhängig von der Größe des Speicherblocks und der Länge des Zahlwortes kein Pufferüberlauf (buffer overflow) entstehen kann?
Kommentare
Wenn du Anmerkungen zur Aufgabe hast oder Lob und Kritik loswerden möchtest, ist hier die richtige Stelle dafür. Klicke einfach ganz rechts auf "bearbeiten" und schreibe deinen Kommentar direkt ins Wiki. Keine Scheu, es geht nichts kaputt ;)