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
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
Neue Lösung hinzufügen
Bewertung
Durchschnittliche Bewertung:
Kommentare (2)
Viel Spaß damit ;)
Im Aufruf sind als
1. Beispiel: Umwandlung dezimal nach hexadezimal
2. Beispiel Umwandlung hexadezimal nach binär
verwirklicht.
Viel Spaß beim Anwenden, Verändern ...