Römische Zahlen in Dezimalzahlen (Unterprogramme)
Ihr Programm soll eine Funktion enthalten, die EINZELNE römische Ziffern in die entsprechende Dezimalzahl umwandelt. Lesen Sie dafür einen einzelnen Buchstaben von der Tastatur mit scnaf() ein.
Folgende Umrechnungstabelle: I=1;V=5;X=10;L=50;C=100;D=500;M=1000
Eine gültige Eingabe soll zum Abbruch des Programms führen.
Mögliche Ausgabe:
Geben Sie eine roemische Ziffer ein: M
Der Dezimalwert der Eingabe ist: 1000
Geben Sie eine römische Ziffer ein: 4
Diese Zahl ist kein vorgeschriebener Wert! Abbruch Danke!
2 Kommentare
12 Lösung(en)
romZiff = ['I', 'V', 'X', 'L', 'C', 'D', 'M' ]
romWert = [ 1, 5, 10, 50, 100, 500, 1000 ]
def rom_in_zahl(i):
for j in range(0, len(romZiff)):
if i == romZiff[j]:
return romWert[j]
a = 1
while a: # Endlosschleife
i = input('Geben Sie eine roemische Ziffer ein: ')
if i not in romZiff:
print('Das ist keine roemische Ziffer!')
print()
else:
print('Der Dezimalwert der Eingabe ist: ', rom_in_zahl(i))
print()
Lösung von: Alex Groeg (Freies Lernen)
// Kotlin
fun main() {
val romMap = mapOf(
'I' to 1,
'V' to 5,
'X' to 10,
'L' to 50,
'C' to 100,
'D' to 500,
'M' to 1000
)
var line: String
do {
print("Geben Sie eine roemische Ziffer ein: ")
line = readLine()!!
if(line.length != 1)
break
val char = line[0]
if(!romMap.containsKey(char))
break
println("Der Dezimalwert der Eingabe ist: ${romMap[char]}")
} while(true)
}
Lösung von: Name nicht veröffentlicht
package romnumtodec;
import java.util.HashMap;
public class calculate {
HashMap<String, Integer> num = new HashMap<>();
String str = "";
public calculate(String str){
num.put("I", 1);
num.put("V", 5);
num.put("X", 10);
num.put("L", 50);
num.put("C", 100);
num.put("D", 500);
num.put("M", 1000);
if(str.equals("I") == true ||
str.equals("V") == true ||
str.equals("X") == true ||
str.equals("L") == true ||
str.equals("C") == true ||
str.equals("D") == true ||
str.equals("M") == true){
this.str = str;
}else{
System.out.println("Enter a valid character [ I | V | X | L | C | D | M ]");
}
}
public int getDecimal(){
int valReturn = num.get(str);
return valReturn;
}
}
Lösung von: Zeno Rauch (Berufsbildung Baden & kantonsschule Baden)
using System;
using System.Collections.Generic;
namespace Römer
{
class Program
{
static Dictionary<char, int> RömischeZahlen;
//Statischer Konstruktor zum füllen eines Dictionaries mit Wertigkeiten zu den Ziffern
static Program()
{
RömischeZahlen = new Dictionary<char, int>();
RömischeZahlen.Add('I', 1);
RömischeZahlen.Add('V', 5);
RömischeZahlen.Add('X', 10);
RömischeZahlen.Add('L', 50);
RömischeZahlen.Add('C', 100);
RömischeZahlen.Add('D', 500);
RömischeZahlen.Add('M', 1000);
}
static void Main(string[] args)
{
bool res;
//Führe die Schleife solange aus, bis eine falsche Eingabe getätigt wird
do
{
Console.Write("Gebe eine römische Ziffer ein: ");
res = decodeSingle(Console.ReadKey().KeyChar);
} while (res);
Console.ReadLine();
}
static bool decodeSingle(char ziffer)
{
//Prüfe ob das Zeichen existiert und gebe dieses aus.
if (RömischeZahlen.ContainsKey(ziffer))
{
Console.WriteLine($"\nEingegebenes Zeichen: {ziffer}\nDezimalzahl des Zeichens: {RömischeZahlen[ziffer]}\n");
return true;
}
//Sollte das Zeichen nicht existieren, so gebe false zurück.
else
{
Console.WriteLine("\nDiese Zahl existiert nicht! Abbruch...");
return false;
}
}
}
}
Lösung von: Tobias Golz (Wilhelm Büchner Hochschule)
// display
document.write(`
<div id="display">Geben Sie eine römische Ziffer ein: </div>
`);
document.addEventListener('keydown', readKey)
function readKey(ev) {
let display = document.getElementById('display'),
rom = 'I V X L C D M'.split(' '),
dec = '1 5 10 50 100 500 1000'.split(' '),
index = rom.indexOf(ev.key);
// shifttasten ignorieren
if (ev.key != 'Shift') {
display.innerHTML += `${ev.key}<br>`;
// gültige römische ziffer
if (index > -1) {
display.innerHTML +=
`Der Dezimalwert der Eingabe ist: ${dec[index]}`;
// programmabbruch
document.removeEventListener('keydown', readKey);
// ungültige römische ziffer
} else display.innerHTML += `Diese Zahl ist kein vorgeschriebener
Wert! Abbruch Danke!<br><br>Geben Sie eine römische Ziffer ein: `;
}
} // lissalanda@gmx.at
Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)
// NET Core 3.x
using System;
namespace CS_Aufgabe_Roemische_Zahlen
{
class Program
{
enum RoemischeZiffern
{
I = 1, V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000
}
static void Main(string[] args)
{
while (true)
{
Console.Write("Bitte 'Römische Ziffer' eingeben: ");
var i = Console.ReadLine().ToUpper()[..1];
if (!Enum.IsDefined(typeof(RoemischeZiffern), i))
{
Console.WriteLine("Keine gültige 'Römische Ziffer'!");
return;
}
Console.WriteLine($"Römisch {i} entspricht Dezimal {(int)Enum.Parse(typeof(RoemischeZiffern), i)}");
}
}
}
}
Lösung von: Jens Kelm (@JKooP)
extern int printf(const char *format, ...);
extern int getchar(void);
int main(void)
{
printf("Geben Sie eine roemische Ziffer ein: ");
char c = getchar();
int dec;
switch(c){
case 'i':case 'I':dec = 1;break;
case 'v':case 'V':dec = 5;break;
case 'x':case 'X':dec = 10;break;
case 'l':case 'L':dec = 50;break;
case 'c':case 'C':dec = 100;break;
case 'd':case 'D':dec = 500;break;
case 'm':case 'M':dec = 1000;break;
default:printf("\nDiese Zahl ist kein vorgeschriebener Wert! Abbruch Danke!");return 0;
}
printf("\nDer Dezimalwert der Eingabe ist: %d", dec);
return 0;
}
Lösung von: Name nicht veröffentlicht
eingabe = input("Bitte geben sie die Römische zahl ein: ")
summe = 0
for i in eingabe:
if i == "I":
summe = summe + 1
elif i == "V":
summe = summe +5
elif i == "X":
summe = summe +10
elif i == "L":
summe = summe +50
elif i == "C":
summe = summe +100
elif i == "D":
summe = summe +500
elif i == "M":
summe = summe +1000
else:
print("Diese Zahl ist kein vorgeschriebener Wert! Abbruch Danke!")
exit()
print("Der Dezimalwert der Eingabe ist: "+str(summe))
Lösung von: Bastian Mundt (hoerl i m)
rom={"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
while True:
dec = rom.get(input("Geben Sie eine roemische Ziffer ein: "))
if dec is None:
print("Diese Zahl ist kein vorgeschriebener Wert! Abbruch Danke!")
break
print(f"Der Dezimalwert der Eingabe ist: {dec}")
# Die Aufgabe hätte man auch interessanter gestalten können.
# Beispiel: Umwandeln einer beliebigen röm. Zahl wie MLCXIV
Lösung von: Name nicht veröffentlicht
#include <iostream>
using namespace std;
int main(){
int zahl, ProgramEnde = 0;
cout << "Geben Sie eine roemische Ziffer ein: ";
while(!ProgramEnde){
int i = getchar();
getchar();
switch(i){
case 'i': case 'I': zahl = 1; break;
case 'v': case 'V': zahl = 5; break;
case 'x': case 'X': zahl = 10; break;
case 'l': case 'L': zahl = 50; break;
case 'c': case 'C': zahl = 100; break;
case 'd': case 'D': zahl = 500; break;
case 'm': case 'M': zahl = 1000; break;
default : cout << "\nDiese Zahl ist kein vorgeschriebener Wert! Abbruch Danke!"; return 0;
}
cout << "\nDer Dezimalwert der Eingabe ist: " << zahl << endl;
zahl = 0; fflush(stdin);
}
}
Lösung von: Name nicht veröffentlicht
// C++ 14 | VS-2022
#include <iostream>
#include <map>
int main() {
const std::map<char, int> rn{ {'I', 1}, {'V', 5}, {'X', 10}, {'L', 50}, {'C', 100}, {'D', 500}, {'M', 1000} };
while (1) {
std::cout << "\nBitte roemische Ziffer eingeben: ";
char i; std::cin >> i;
const auto f{ rn.find(std::toupper(i)) };
if (f != rn.end()) { std::cout << "Dezimalwert von '" << i << "' ist: " << f->second << "\n"; break; }
std::cout << "'" << i << "' ist keine roemische Ziffer!\n";
}
}
Lösung von: Jens Kelm (@JKooP)
' Lösung für VBA
Sub Main()
num = Application.InputBox("Bitte römische Ziffer eingeben:", "Eingabe")
If num <> vbCancel And num <> "" And GetPos(num) > 0 Then
MsgBox "Dezimalwert von " & UCase(num) & " ist " & Rom2Dec(num)
Else
MsgBox "Keine römische Ziffer!"
End If
End Sub
Function Rom2Dec(ByVal str As String)
pos% = GetPos(str)
Rom2Dec = IIf(pos = 0, 0, Array(1, 5, 10, 50, 100, 500, 1000)(pos - 1))
End Function
Function GetPos(ByVal str As String)
GetPos = InStr("IVXLCDM", UCase(str))
End Function
Lösung von: Jens Kelm (@JKooP)
Aktionen
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Kommentare (2)
Nein, dort steht es sollen nur die römischen Zahlen in Dezimalzahlen umgewandelt werden. Du kannst ja sie auch mit Konstanten definieren also die Dezimalzahlen und so einfügen dann brauchst du auch keine Kommazahlen mehr:).
Ich habe scanf() geschrieben weil meiner Meinung nach in C das am leichtesten programmiert werden kann aber es gibt keineswegs ein begrenztes Spektrum wie du das programmieren sollst.
War aber auch mein Fehler leider, mit scanf() meine ich ja C im gegeben falls, stimmt auch wiederum. Ich war zu nachlässig.
scanf() ist ein C/C++ spezifischer Befehl.
Hier sollte auf eine Allgemeinere Aufgabenstellung zurückgegriffen werden, um eine breitere Zielgruppe anzusprechen.
Abgesehen davon, dass die Aufgabenstellung Dezimalzahlen, also Kommazahlen, verlangt, aber einzelne Römische Zahlen keine Dezimalzahlen beinhalten und somit in der "Möglichen Ausgabe" auch keine Dezimalzahl ausgegeben wurde.
Wenn man denn unbedingt eine Dezimalzahl haben möchte, müsste man .0 ausgeben, was wiederum keinen wirklichen Sinn ergibt.