60 lines
1.7 KiB
C
60 lines
1.7 KiB
C
#include <stdio.h>
|
|
|
|
// Struktur zur Abbildung von arabisch → römisch
|
|
typedef struct Roemisch {
|
|
int wert; // Der arabische Zahlenwert (z.B. 1000)
|
|
const char *zeichen; // Das zugehörige römische Zeichen (z.B. "M")
|
|
} Roemisch_t;
|
|
|
|
// Tabelle in absteigender Reihenfolge
|
|
// Jede Zeile enthält einen Wert und das zugehörige römische Zeichen
|
|
Roemisch_t roemischTabelle[] = {
|
|
{1000, "M"},
|
|
{900, "CM"},
|
|
{500, "D"},
|
|
{400, "CD"},
|
|
{100, "C"},
|
|
{90, "XC"},
|
|
{50, "L"},
|
|
{40, "XL"},
|
|
{10, "X"},
|
|
{9, "IX"},
|
|
{5, "V"},
|
|
{4, "IV"},
|
|
{1, "I"}
|
|
};
|
|
|
|
// Hauptfunktion
|
|
int main() {
|
|
int zahl;
|
|
|
|
// Benutzer nach einer Zahl fragen
|
|
printf("Zu wandelnde Zahl: ");
|
|
scanf("%d", &zahl);
|
|
|
|
// Überprüfen, ob die Zahl im erlaubten Bereich liegt (1 bis 3999)
|
|
if (zahl <= 0 || zahl > 3999) {
|
|
printf("Nur Zahlen zwischen 1 und 3999 erlaubt!\n");
|
|
return 1; // Programm mit Fehlercode beenden
|
|
}
|
|
|
|
// Die eingegebene Zahl ausgeben
|
|
printf("... %d = ", zahl);
|
|
|
|
// Über die Tabelle iterieren, um die römische Zahl zu erzeugen
|
|
// sizeof(roemischTabelle) / sizeof(Roemisch) berechnet die Anzahl der Einträge in der Tabelle
|
|
for (int i = 0; i < sizeof(roemischTabelle) / sizeof(Roemisch_t); i++) {
|
|
// Solange der aktuelle Wert in die Zahl "passt"
|
|
while (zahl >= roemischTabelle[i].wert) {
|
|
// Das zugehörige römische Zeichen ausgeben
|
|
printf("%s", roemischTabelle[i].zeichen);
|
|
// Den Wert von der Zahl abziehen
|
|
zahl -= roemischTabelle[i].wert;
|
|
}
|
|
}
|
|
|
|
// Zeilenumbruch am Ende
|
|
printf("\n");
|
|
|
|
return 0; // Erfolgreiches Programmende
|
|
} |