Info2P5/28.4.3_romzahl.c
2025-05-29 09:21:48 +02:00

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
}