Sitzung: Jeden Freitag in der Vorlesungszeit ab 16 Uhr c. t. im MAR 0.005. In der vorlesungsfreien Zeit unregelmäßig (Jemensch da?). Macht mit!

C-Kurs/Zahlen sagen: Unterschied zwischen den Versionen

(Aufgabenstellung)
K (verschob „Ckurs/Zahlen sagen“ nach „C-Kurs/Zahlen sagen“)
 
(10 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=== Aufgabenstellung ===
+
== Aufgabenstellung ==
  
 
Schreibe ein Programm, das eine als Kommandozeilenparameter in numerischer Form übergebene Zahl in Worten (also als Zahlwort) ausgibt.
 
Schreibe ein Programm, das eine als Kommandozeilenparameter in numerischer Form übergebene Zahl in Worten (also als Zahlwort) ausgibt.
Zeile 8: Zeile 8:
 
einhundertvierundsiebzigtausend dreihundertsiebenundsechzig
 
einhundertvierundsiebzigtausend dreihundertsiebenundsechzig
 
</pre>
 
</pre>
 +
 +
 +
=== Hinweise ===
 +
 +
* Alloziere zunächst einen Speicherblock, der groß genug ist, um das komplette Zahlwort zu enthalten (z.B. via <code>[http://www.cplusplus.com/reference/clibrary/cstdlib/malloc malloc]</code>).
 +
* Schreibe eine Funktion <code>say_short_number(int number, char* buffer)</code>, die eine übergebene Zahl zwischen 1 und 999 als Zahlwort in den ebenfalls übergebenen Puffer kopiert.
 +
* Schreibe dann eine Funktion <code>say_number(long int number, char* buffer)</code>, 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), ...) jeweils <code>say_short_number()</code> 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 <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].
 +
* Wenn du Funktionen aus der math.h benutzt musst du beim Kompilieren mit der GCC das Kommando '-lm' angeben damit die entsprechende Libary einzubinden. (also z.B. 'gcc -lm zahlwort.c -o zahlwort')
 +
* Beachte die Ausnahmen der Zahlwörter elf, zwölf, sechzehn und siebzehn im Gegensatz zu den übrigen Zahlen unter 20.
 +
 +
== 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 ;)
 +
 +
<!--
 +
Als kleine Starthilfe folgt ein Beispiel, wie so ein Kommentar formatiert sein könnte. Mit "Vorschau zeigen" kannst du dir ansehen, was deine Änderung bewirken würde, ohne wirklich etwas zu ändern.
 +
Du musst übrigens außerhalb dieses auskommentieren Bereichs schreiben ;)
 +
 +
==== Robert ====
 +
Na mal schauen, ob irgendjemand diese Funktion wirklich benutzt. Ich fände es jedenfalls toll.
 +
-->
 +
 +
 +
 +
[[Kategorie: CKurs Aufgaben]]

Aktuelle Version vom 5. März 2013, 17:37 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), ...) jeweils say_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/oder log10() aus dem Standardheader math.h.
  • Wenn du Funktionen aus der math.h benutzt musst du beim Kompilieren mit der GCC das Kommando '-lm' angeben damit die entsprechende Libary einzubinden. (also z.B. 'gcc -lm zahlwort.c -o zahlwort')
  • Beachte die Ausnahmen der Zahlwörter elf, zwölf, sechzehn und siebzehn im Gegensatz zu den übrigen Zahlen unter 20.

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 ;)