Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Zahlensystemumrechner --- Dual/Binär, Hexadezimal und Dezimal (Kleinprojekte)

Erstellen Sie ein Programm, welches zwischen den Zahlensystemen Dual/Binär, Hexadezimal und Dezimal beliebig übersetzen beziehungsweise umrechnen kann. Eine Erklärung zum Dual/Binärsystem finden Sie hier: http://de.wikipedia.org/wiki/Dualsystem

Die Erklärung zum Hexadezimalsystem ist hier vorzufinden: http://de.wikipedia.org/wiki/Hexadezimalsystem

Der Benutzer soll im Menu (Konsolenanwendung) zwischen der jeweiligen Übersetzung die er machen möchte zuerst auswählen müssen. Im simpelstem Fall lassen Sie den Benutzer eine 1 für Dual zu Hexadezimal, eine 2 für Dual zu Dezimal, eine 3 für Hexadezimal zu Dual ... angeben.

Extra:

- Setzen Sie die Aufgabenstellung mit einer dazu passenden GUI um.

2 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (2)

Mad_Deer 29. April 2014 11:58   reply report
Die Java-Lösung ist mit simpler GUI, fängt falsch Eingaben vorzeitig ab und macht die Umrechnung mit Auswählen des Zahlensystems automatisch (solange kein Stack-Overflow wegen einer zu großen Zahl produziert wird!).
Viel Spaß damit ;)
fmartin 21. Februar 2014 15:38   reply report
Die zweite python-Lösung ist ohne GUI, aber dafür wandelt die Klasse "ZahlSysUmwandlung" von einem (fast) beliebigen Stellenwertsystem in ein anderes (fast) beliebiges anderes um.

Im Aufruf sind als
1. Beispiel: Umwandlung dezimal nach hexadezimal
2. Beispiel Umwandlung hexadezimal nach binär
verwirklicht.

Viel Spaß beim Anwenden, Verändern ...

6 Lösung(en)

import tkinter as tk

def dezi():
    if len(dez_Entry.get())>0:
        dual_Entry.delete(0,"end")
        hex_Entry.delete(0,"end")
        dual_output = bin(int(dez_Entry.get()))
        hex_output=hex(int(dez_Entry.get()))
        
        dual_Entry.insert(0, dual_output)
        hex_Entry.insert(0, hex_output)
        print("Binärzahl:", dual_output, "Hexadezimalzahl:", hex_output)
def hexa():
    if len(hex_Entry.get())>0:
        dez_Entry.delete(0,"end")
        dual_Entry.delete(0,"end")
        dez_output = int(hex_Entry.get(), 16)
        dual_output = bin(int(hex_Entry.get(), 16))
        
        dez_Entry.insert(0, dez_output)
        dual_Entry.insert(0, dual_output)
        print("Binärzahl:", dual_output, "Dezimalzahl:", dez_output)
def dual():
    if len(dual_Entry.get())>0:
        dez_Entry.delete(0,"end")
        hex_Entry.delete(0,"end")
        dez_output = int(dual_Entry.get(),2)
        hex_output=hex(int(dual_Entry.get(),2))
        
        dez_Entry.insert(0, dez_output)
        hex_Entry.insert(0, hex_output)
        print("Dezimalzahl:", dez_output, "Hexazdezimalzahl:", hex_output)
        
                         

main = tk.Tk()
main.title("Binär-Hexadezimal-Dezimal-Rechner")

dez_label = tk.LabelFrame(main, text = "Dezimalzahl")
dez_label.grid()
dez_Entry = tk.Entry(dez_label)
dez_Entry.grid()

hex_label = tk.LabelFrame(main, text = "Hexadezimalzahl")
hex_label.grid()
hex_Entry = tk.Entry(hex_label)
hex_Entry.grid()

dual_label = tk.LabelFrame(main, text = "Binärzahl")
dual_label.grid()
dual_Entry = tk.Entry(dual_label)
dual_Entry.grid()

button_dezi = tk.Button(main, text = "Von Dezimal nach Dual und Hexadezimal", command = dezi)
button_dezi.grid()

button_hexa = tk.Button(main, text = "Von Hexadzimal nach Dual und Dezimal", command = hexa)
button_hexa.grid()

button_dual = tk.Button(main, text = "Von Dual nach Dezimal und Hexadezimal", command = dual)
button_dual.grid()


main.mainloop()

                

Lösung von: Py Thon ()

#!/usr/bin/python
# -*- coding: utf8 -*-

class ZahlSysUmwandlung():
  def __init__(self, zahl, von=10, nach=2):
    self.mehrAlsHex = '0123456789ABCDEFGHIJKLMNOPQRSTUVW'
    self.zahl = zahl
    self.vonSys = von
    if self.vonSys <> 10:
      self.inDezUmwandeln()
    
    self.nachSys = nach
    try:
      dummy = self.mehrAlsHex[self.nachSys]
    except IndexError:
      print 'zu großes Ziel-Zahlsystem'
            
  def inDezUmwandeln(self):
    zaehler = 0
    zahl = 0
    for stelle in str(self.zahl)[::-1]:
      zahl += self.mehrAlsHex.index(stelle)*self.vonSys**zaehler
      zaehler += 1
    self.zahl = zahl
  
  def umwandeln(self):
    restliste = []
    while(self.zahl > 0):
      (self.zahl,self.rest) = divmod(self.zahl, self.nachSys)
      if self.nachSys > 10:
        restAlpha = self.mehrAlsHex[self.rest]
        restliste.append(restAlpha)
      else:
        restliste.append(self.rest)
    return(restliste[::-1])
    
if __name__ == '__main__':
  eineU = ZahlSysUmwandlung(253, 10, 16)
  print 'dez 253 -> hex', 
  for i in eineU.umwandeln():
    print i, 
  print '\n-------'

  u2 = ZahlSysUmwandlung('FD', 16, 2)
  print 'hex FD -> bin',
  for i in u2.umwandeln():
    print i, 

                

Lösung von: Martin Schimmels (Wilhelm-Schickard-Schule Tübingen)

package programmierenuebungen;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.math.BigInteger;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JToggleButton;

/**
 *
 * @author MadDeer
 */
public class umrechnerHexDezBin extends JFrame{
    
    private JPanel north;
    private JToggleButton hex,dez,bin;
    private JTextField eingabe;
    private zahlensystem currentConversion = zahlensystem.dez;
    public enum zahlensystem{
        dez,
        hex,
        bin
    }
    
    public umrechnerHexDezBin(){
        north = new JPanel();
        hex = new JToggleButton("Hex");
        dez = new JToggleButton("Dez");
        bin = new JToggleButton("Bin");
        eingabe = new JTextField();
        dez.setSelected(true);
        init();
    }
    
    private void init(){
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //GUI aufbauen
        north.setLayout(new GridLayout());
        dez.addActionListener(new ActionListener(){ //ActionListener für den Dez-Button
            @Override
            public void actionPerformed(ActionEvent e) {
                if (!currentConversion.equals(zahlensystem.dez)){
                    if (currentConversion.equals(zahlensystem.hex)){
                        eingabe.setText(""+Long.parseLong(eingabe.getText(),16)); //Conversion
                        hex.setSelected(false);
                    } else if (currentConversion.equals(zahlensystem.bin)){
                        eingabe.setText(""+Integer.parseInt(eingabe.getText(),2)); //Conversion
                        bin.setSelected(false);
                    }
                }
                currentConversion = zahlensystem.dez;
            }
        });
        hex.addActionListener(new ActionListener() { //ActionListener für den Hex-Button
            @Override
            public void actionPerformed(ActionEvent e) {
                if (!currentConversion.equals(zahlensystem.hex)){
                    if (currentConversion.equals(zahlensystem.dez)){
                        eingabe.setText(Integer.toHexString(Integer.parseInt(eingabe.getText()))); //Conversion
                        dez.setSelected(false);
                    } else if (currentConversion.equals(zahlensystem.bin)){
                        eingabe.setText(Integer.toHexString(Integer.parseInt(eingabe.getText(),2))); //Conversion
                        bin.setSelected(false);
                    }
                }
                currentConversion = zahlensystem.hex;
            }
        });
        bin.addActionListener(new ActionListener() { //ActionListener für den Bin-Button
            @Override
            public void actionPerformed(ActionEvent e) {
                if (!currentConversion.equals(zahlensystem.bin)){
                    if (currentConversion.equals(zahlensystem.hex)){
                        eingabe.setText(new BigInteger(eingabe.getText(), 16).toString(2)); //Conversion
                        hex.setSelected(false);
                    } else if (currentConversion.equals(zahlensystem.dez)){
                        eingabe.setText(Integer.toBinaryString(Integer.parseInt(eingabe.getText()))); //Conversion
                        dez.setSelected(false);
                    }
                }
                currentConversion = zahlensystem.bin;
            }
        });
        north.add(dez);
        north.add(hex);
        north.add(bin);
        this.add(north, BorderLayout.NORTH);
        eingabe.addKeyListener(new KeyAdapter(){ //Listener, fuer dir Eingabe
            @Override
            public void keyTyped(KeyEvent e) {
                if ((currentConversion.equals(zahlensystem.dez))){ //Dezimal, alle Zahlen
                    if (!(""+e.getKeyChar()).matches("\\d")){ e.consume(); }
                } else if (currentConversion.equals(zahlensystem.bin)){ //Binary, nur "1" und "0"
                    if (!(""+e.getKeyChar()).equals("1") && !(""+e.getKeyChar()).equals("0")){ e.consume(); }
                } else if (currentConversion.equals(zahlensystem.hex)){ //Hexadezimal, alle Zahlen und a-f
                    if (!(""+e.getKeyChar()).matches("\\d") && !(""+e.getKeyChar()).equals("a") && !(""+e.getKeyChar()).equals("b")
                            && !(""+e.getKeyChar()).equals("c") && !(""+e.getKeyChar()).equals("d") && !(""+e.getKeyChar()).equals("e")
                            && !(""+e.getKeyChar()).equals("f")){ e.consume(); }
                }
            }
        });
        this.add(eingabe, BorderLayout.CENTER);
        this.setSize(200, 100);
        this.setVisible(true);
    } //End of init()
  
    public static void main(String[] args){
        new umrechnerHexDezBin();
    }
}
                

Lösung von: Mad Deer (FH Ulm)

?#!usr/bin/env python
# -*- coding: utf-8 -*-

# 2014 witti 
# http://www.programmieraufgaben.ch/aufgabe/zahlensystemumrechner-dual-binaer-hexadezimal-und-dezimal/wbc93sou

def bin_dez(zahl):	
	out = 0
	length = len(str(zahl)) - 1
	for i in str(zahl):
		if i != "1" and i != "0":
			print("Falsche Eingabe!")
			quit()		
		if i == "1":
			out = out + 2**length
		length = length - 1
	return out			

def bin_hex(zahl):
	return dez_hex(bin_dez(zahl))

def dez_bin(zahl):
	intzahl = int(zahl)
	out = ""
	while intzahl != 0:
		out = str(intzahl%2)+out
		intzahl = round((intzahl/2)-0.49)
	return out

def dez_hex(zahl):
	intzahl = int(zahl)
	out = ""
	while intzahl != 0:
		if intzahl%16 < 10:
			out = str(intzahl%16)+out
		elif intzahl%16 == 10:
			out = "A"+out
		elif intzahl%16 == 11:
			out = "B"+out
		elif intzahl%16 == 12:
			out = "C"+out
		elif intzahl%16 == 13:
			out = "D"+out
		elif intzahl%16 == 14:
			out = "E"+out
		elif intzahl%16 == 15:
			out = "F"+out
		intzahl = round((intzahl/16)-0.49)
	return out

def hex_dez(zahl):	
	out = 0
	length = len(str(zahl)) - 1
	for i in str(zahl):
		if i != "A" and i != "a" and i != "B" and i != "b" and i != "C" and i != "c" and i != "D" and i != "d" and i != "e" and i != "E" and i != "F" and i != "f" and i != "1" and i != "2" and i != "3" and i != "4" and i != "5" and i != "6" and i != "7" and i != "8" and i != "9":
			print("Falsche Eingabe!")
			quit()
		if i == "A" or i == "a":
			out = out + 10*16**length
		elif i == "B" or i == "b":
			out = out + 11*16**length
		elif i == "C" or i == "c":
			out = out + 12*16**length
		elif i == "D" or i == "d":
			out = out + 13*16**length
		elif i == "E" or i == "e":
			out = out + 14*16**length
		elif i == "F" or i == "f":
			out = out + 15*16**length
		elif int(i) < 10:
			out = out + int(i)*16**length
		length = length - 1
	return out

def hex_bin(zahl):
	return dez_bin(hex_dez(zahl))

print("Zahlensystemumrechner")
print("1	Binär		->	Dezimal")
print("2	Binär		->	Hexadezimal")
print("3	Dezimal		->	Binär")
print("4	Dezimal		-> 	Hexadezimal")
print("5	Hexadezimal	->	Dezimal")
print("6	Hexadezimal	->	Binär")
print("Q	Anwendung schließen")

while True:
	menu = str(input("\nBitte wählen sie: "))
	
	if menu == "q" or menu == "Q":
		quit()

	zahl = str(input("Geben sie eine Zahl ein: "))

	if menu == "1":
		out = bin_dez(zahl)
		break
	elif menu == "2":
		out = bin_hex(zahl)
		break
	elif menu == "3":
		out = dez_bin(zahl)
		break
	elif menu == "4":
		out = dez_hex(zahl)
		break
	elif menu == "5":
		out = hex_dez(zahl)
		break
	elif menu == "6":
		out = hex_bin(zahl)
		break

print("\nDas Ergebnis lautet: ", out)
                

Lösung von: witti yoo (qwertz)

// eingabemaske
document.write(
   '<input id="out" value="0"><br>' +
   '<input type="radio" name="system" onchange="convert()" value="2"> ' +
      'Binär' + 
   '<input type="radio" name="system" onchange="convert()" value="10"' +
      ' checked> Dezimal ' +
   '<input type="radio" name="system" onchange="convert()" value="16"> ' +
      'Hexadezimal '
);

var out = document.getElementById("out");
    mode = [10];

function getChecked() {
   var radios = document.getElementsByTagName("input"),
       i = 0;
   for (i; i < radios.length; i++) 
      if (radios[i].checked) return radios[i].value;
}

function convert() {
   var num;
   if (mode.push(getChecked()) == 3) mode.shift();
   num = parseInt(out.value, mode[0]);
   out.value = num.toString(mode[1]);
}                                                           // lissalanda@gmx.at
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// NET 6.x | C# 10.x | VS-2022

var numeralSystem = new List<(string shortNS, string longNS, int valueNS)> { ("b", "binaer", 2), ("o", "oktal", 8), ("d", "dezimal", 10), ("h", "hexadezimal", 16) };

foreach (var (shortNS, longNS, _) in numeralSystem) Console.WriteLine($"({shortNS}) - {longNS}");

Console.WriteLine("\nBeispiele: 1010;b;d | FF; h; d | 15;O;D");
Console.Write("\nBitte Eingabe (Wert; von; zu): ");
var read = Console.ReadLine();
if (string.IsNullOrEmpty(read)) return;
var split = read.Split(';').Select(x => x.Trim().ToLower()).ToList();
if (split.Count != 3) return;

var dec = (string s, int b) => s.ToLower().Aggregate(0, (x, y) => (b * x) + (y - ((y is >= 'a' and <= 'f') ? 87 : 48)));
var baseIO = (int i) => numeralSystem.Where(x => x.shortNS == split[i]).First().valueNS;
Console.WriteLine(Convert.ToString(dec(split[0], baseIO(1)), baseIO(2)));
                

Lösung von: Jens Kelm (@JKooP)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 0.5
Schwierigkeit: Mittel
Webcode: wbc9-3sou
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen