Servus MCore
Als mir n bissl Langweilig war, hab ich meine Belegarbeit für Programmierung wieder gefunden, und mir ist wieder eingefallen, das es noch einen kleinen Fehler gibt.
Die Aufgabe war, römische Zahlen zu addieren bzw. zu subtrahieren. Dazu gab es ein paar Regeln. Unter anderm, wie römische Zahlen gebildet werden, das die Zahlen beim Aufruf den Programms übergeben werden und das Funktionen verwendet werden sollen. Und da kommen wir zu meinem Fehler.
Unser Dozent meinte, das eine Funktion immer genau eine Aufgabe ausführen sollte. Ich hab in der Funktion "deztorom" allerdings etwas berechnen lassen, und die Ausgabe des Wertes vorgenommen.
Alles anzeigen
Hmm, ist schon ein wenig her, seit ich das geschrieben habe, aber ich erinnere mich, dass es nicht so ohne weiteres möglich war, ein Array als Rückgabewert zu übergeben.
Meine Idee war es, das Array als globale Variable anzulegen, und der Dozent meinte, "möglich wäre es, aber ihnen fällt bestimmt eine elegantere Lösung ein".
Blöderweise ist das nicht der Fall ^_^'
Aber hier gibt es bestimmt den ein oder anderen, welchem eine besser Möglichkeit einfällt.
Der vollständigkeit halber nochmal der gesamte Code:
[C] asdf - Pastebin.com
Achja, nicht das ihr denkt, ich wollte mich vor der Arbeit drücken. Die Belegarbeit hab ich schon abgegeben, und bestanden. Mich interessiert nur, wie man diesen letzten Fehler ausbügeln könnte.
Und wenn jemand Langeweile hat, und irgendwo bessere Möglichkeiten oder unschönheiten in meinem Code entdeckt, darf er die ruhig ansprechen :)
mfg
Als mir n bissl Langweilig war, hab ich meine Belegarbeit für Programmierung wieder gefunden, und mir ist wieder eingefallen, das es noch einen kleinen Fehler gibt.
Die Aufgabe war, römische Zahlen zu addieren bzw. zu subtrahieren. Dazu gab es ein paar Regeln. Unter anderm, wie römische Zahlen gebildet werden, das die Zahlen beim Aufruf den Programms übergeben werden und das Funktionen verwendet werden sollen. Und da kommen wir zu meinem Fehler.
Unser Dozent meinte, das eine Funktion immer genau eine Aufgabe ausführen sollte. Ich hab in der Funktion "deztorom" allerdings etwas berechnen lassen, und die Ausgabe des Wertes vorgenommen.
Quellcode
- void deztorom(int dezzahl) /** Funktion um eine Dezimalzahl in eine Römische umzuwandeln. Erwartet einen integer Wert. */
- {
- char ziffern[13][3] = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X",
- "IX", "V", "IV", "I"};
- int zahlen[13] = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
- int i=0, zahl;
- zahl = dezzahl;
- while (zahl > 0) /** Schleife läuft solange, bis "zahl" 0 erreicht */
- {
- if (zahl/zahlen[i] >= 1) /** Wenn sich "zahl" durch den entsprechenden Wert aus dem Array "zahlen" teilen lässt, wird die äquivalente römische Ziffer ausgegeben. */
- {
- [COLOR=red]printf(ziffern[i]); /** Ausgabe der römischen Ziffer. */[/COLOR]
- zahl -= zahlen[i]; /** Der Wert aus dem array "zahlen" wird von Zahl abgezogen, damit im nächsten Durchlauf mit der neuen Zahl gerechnet werden kann. */
- }
- else /** Ansonsten wird der "i" um 1 erhöht, um im nächsten Durchlauf mit der nächsten Zahl zu arbeiten. */
- {
- i++;
- }
- }
- printf("\n");
- }
Meine Idee war es, das Array als globale Variable anzulegen, und der Dozent meinte, "möglich wäre es, aber ihnen fällt bestimmt eine elegantere Lösung ein".
Blöderweise ist das nicht der Fall ^_^'
Aber hier gibt es bestimmt den ein oder anderen, welchem eine besser Möglichkeit einfällt.
Der vollständigkeit halber nochmal der gesamte Code:
[C] asdf - Pastebin.com
Achja, nicht das ihr denkt, ich wollte mich vor der Arbeit drücken. Die Belegarbeit hab ich schon abgegeben, und bestanden. Mich interessiert nur, wie man diesen letzten Fehler ausbügeln könnte.
Und wenn jemand Langeweile hat, und irgendwo bessere Möglichkeiten oder unschönheiten in meinem Code entdeckt, darf er die ruhig ansprechen :)
mfg