Laden...

Umrechnen in Binär Hex und Dezimal

Erstellt von lena404 vor 2 Jahren Letzter Beitrag vor 2 Jahren 1.108 Views
Thema geschlossen
L
lena404 Themenstarter:in
4 Beiträge seit 2021
vor 2 Jahren
Umrechnen in Binär Hex und Dezimal

Hallo Leute 🙂,

Ich soll für die Schule im Informatik Unterricht ein Programm schreiben.

Im Programmieren bin ich ein totaler Anfänger.

Das Programm soll eine Konsol Anwendung sein, wo man ein Zahl eintippt und diese dann umrechnet wird.

Ein Beispiel wäre z.B. das ich eine Dezimal Zahl eingebe Z.b 13 und die Konsole gibt mir davon dan die Binär und Hex Zahl aus.

Das habe ichh auch geschafft.

Allerdings habe ich als weitere Aufgabe bekommen, das wenn man in die Konsole eine Binär Zahl eingibt, das in der Konsole dann die Hex und die Dezimal Zahl ausgibt.
Das gleiche sollte ich auch für die Hex Zahl machen (als ausgabe steht da die Dezimal und die Binär Zahl).

Zudem soll das Programm beendet werden, wenn man den Buchstaben "Q" in die Konsole eintippt.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace Zahlen_umrechnen
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Geben Sie eine dezimale Zahl ein, die in verschiedene Zahlensysteme Konvertiert werden soll: ");
            if (Int32.TryParse(Console.ReadLine(), out int dezimal))
            {
                Console.WriteLine("Dezimal = " + Dezimal(dezimal));
                Console.WriteLine("Binaer = " + Binaer(dezimal));
                Console.WriteLine("Hexadezimal = " + Hexadezimal(dezimal));
            }
            else
            {
                Console.Clear();
                Console.WriteLine("Bitte geben Sie nur ganze Zahlen an.");
            }
            Console.ReadKey();
        }
 
        static string Dezimal (int dezimal)
        {
            string dezimalString = Convert.ToString(dezimal);
            string dezimalAusgabe = dezimalString;
            for (int i = dezimalString.Length -3; i >= 1; i-=3)
            {
                dezimalAusgabe = dezimalAusgabe.Insert(i, ".");
            }
            return dezimalAusgabe;
        }
 
        static string Binaer (int dezimal)
        {
            string binaer = "", binaerAusgabe = "";
            int binaerlaenge = 0;
            while (dezimal > 0)
            {
                binaer += dezimal % 2;
                dezimal = dezimal / 2;
            }
 
            for (int i = binaer.Length - 1; i >= 0; i--)
            {
                binaerAusgabe += binaer[i];
            }
 
            while(binaerAusgabe.Length % 4 != 0)
            {
                binaerAusgabe = binaerAusgabe.Insert(0, "0");
            }
             
            for(int i = 4; i <= binaerAusgabe.Length-5; i += 4)
            {
                binaerAusgabe = binaerAusgabe.Insert(i+binaerlaenge, " ");
                binaerlaenge++;
            }
             
            return binaerAusgabe;
        }
 
        static string Hexadezimal(int dezimal)
        {
            int zuordner, hexadezimallaenge = 0;
            string hexadezimal = "", hexadezimalAusgabe = "";
            while (dezimal > 0)
            {
                zuordner = dezimal % 16;
                switch (zuordner)
                {
                    case 0:
                        hexadezimal += "0";
                        break;
                    case 1:
                        hexadezimal += "1";
                        break;
                    case 2:
                        hexadezimal += "2";
                        break;
                    case 3:
                        hexadezimal += "3";
                        break;
                    case 4:
                        hexadezimal += "4";
                        break;
                    case 5:
                        hexadezimal += "5";
                        break;
                    case 6:
                        hexadezimal += "6";
                        break;
                    case 7:
                        hexadezimal += "7";
                        break;
                    case 8:
                        hexadezimal += "8";
                        break;
                    case 9:
                        hexadezimal += "9";
                        break;
                    case 10:
                        hexadezimal += "A";
                        break;
                    case 11:
                        hexadezimal += "B";
                        break;
                    case 12:
                        hexadezimal += "C";
                        break;
                    case 13:
                        hexadezimal += "D";
                        break;
                    case 14:
                        hexadezimal += "E";
                        break;
                    case 15:
                        hexadezimal += "F";
                        break;
                }
                dezimal = dezimal / 16;
            }
 
            for (int i = hexadezimal.Length - 1; i >= 0; i--)
            {
                hexadezimalAusgabe += hexadezimal[i];
            }
 
            for (int i = hexadezimalAusgabe.Length - 4; i >= 1; i -= 4)
            {
                hexadezimalAusgabe = hexadezimalAusgabe.Insert(i + hexadezimallaenge, " ");
                hexadezimallaenge++;
            }
 
            return hexadezimalAusgabe;
        }
    }
}

Das hier oben ist mein Code denn ich bis jetzt geschrieben habe.

Ich bedanke mich für jede Antwort die ich bekomme.

Lena

4.931 Beiträge seit 2008
vor 2 Jahren

Hallo und willkommen,

wie soll denn unterschieden werden, wie eine Zahl interpretiert wird (als Beispiel: "10" kann sowohl binär, dezimal als auch hexadezimal interpretiert werden)?
Entweder du fragst den Anwender danach oder aber eine gängige Methode ist auch ein Präfix (0b, 0x) zu benutzen.

PS: Dein switch ließe sich auch eliminieren, wenn du einen String "0123456789ABCDEF" benutzt und darauf dann per Index zugreifst.

PPS: gerade erst gesehen - falsches Unterforum (ein Mod. wird es wohl verschieben)...

L
lena404 Themenstarter:in
4 Beiträge seit 2021
vor 2 Jahren

Hallo

Und danke für deine schelle Antwort.

Ich wollte das man bevor man bevor man eine Zahl eingibt ein Buchstabe eingibt der jeweils für ein Zahlensystem steht.

Also wenn man z.B. ein x eingibt soll eine Dezimal Zahl eingeben werden und diese wird dann in Binär und in Hex ausgeben werden.

Bei den anderen beiden wollte ich nach dem selben Prizip vorgehen nur das ich halt einen anderen Buchstaben benutze.

4.931 Beiträge seit 2008
vor 2 Jahren

Ja, das entspricht dann der Präfix-Variante.
Du mußt die Eingabe von Console.ReadLine() entsprechend auswerten, also das erste Zeichen überprüfen, bevor du die Umwandlungen durchführst.

J
61 Beiträge seit 2020
vor 2 Jahren

Ein Beispiel wäre z.B. das ich eine Dezimal Zahl eingebe Z.b 13 und die Konsole gibt mir davon dan die Binär und Hex Zahl aus.

Das habe ichh auch geschafft.

Falls es um Dezimalzahlen geht, funktioniert deine Lösung auch für z.B. 13,2 oder -13?

L
lena404 Themenstarter:in
4 Beiträge seit 2021
vor 2 Jahren

Bei meinem Programm werden nur ganze Zahlen umgerechnet.

Je nach Eingabe in der Konsole sollen sich die Ausgabe ändern.

So soll bei einer Binären Zahl in Hex und Dezimal umgerechnet werden.
Bei einer Eingabe von einer Hex Zahl soll eine Dezimal und eine Binäre Zahl in der Konsole ausgeben werden.
Und bei einer Dezimal Zahl soll die Konsole die Hex und die Binäre Zahl ausgeben.

J
61 Beiträge seit 2020
vor 2 Jahren

Soweit ich es sehe, deckst du die natürlichen Zahlen inklusive der 0 ab. Ganze Zahlen können auch negativ sein. Und z.B. -10^-1 (=-0,1) ist eine legitime Dezimalzahl.

Meine Frage ist daher, was die Aufgabenstellung ist.

(Es ist natürlich auch möglich, dass dem Aufgabensteller das nicht ganz bewusst war 🙂)

L
lena404 Themenstarter:in
4 Beiträge seit 2021
vor 2 Jahren

Also ich habe dir mal den genaue Aufgabenstellung eines Lehrers hier rein gepackt:

  1. Programmiere einen Dezimal Binär Hexadezimalumrechner

a)
Erstelle eine C# Konsolenanwendung.
Es soll eine Zahl (egal ob Binär, Dezimal oder Hexadezimal) eingegeben werden
können. Die Eingaben von Hexadezimal und Binär kannst Du z.B. vorher Kennzeichnen,
um sie von einander unterscheiden zu können.
Bei ungültigen Eingaben muss eine Fehlermeldung ausgegeben werden.
Die beiden anderen Formate sollen berechnet
und ausgegeben werden.

b)
Realisiere das gleiche Projekt mit WinForms

Thema geschlossen