Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

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!

3 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (3)

Linus 17. Oktober 2020 20:53   reply report
> Eine gültige Eingabe soll zum Abbruch des Programms führen.
Coool
SuggarDaddy 13. November 2019 13:41   reply report
HowDenKing
Aufgabe richtet sich nach spezifischen Programmiersprachen,
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.

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.
HowDenKing 13. November 2019 12:43   reply report
Aufgabe richtet sich nach spezifischen Programmiersprachen,
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.

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

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Mittel
Webcode: 8c0q-zuje
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen