matt180
Goto Top

Dezimal Dual Rechner

Guten Abend zusammen, ich versuche mich gerade innerhalb einer Weiterbildung an C ++. Der Anfang war ja noch in Ordnung aber jetzt hänge ich absolut fest. Hoffe einer von euch kann mir hier weiter helfen. Die Fragestellung unten ist mir soweit klar aber wie erweitere ich das Progarmm vernünftig so das ich ein Auswahlmenu habe und die Umrechnung mit den weiteren Basiszahlen auch funktioniert. Geht das über Switch Case , wenn ja kann mir da jemand mal ein Beispiel mit einer weiteren Basiszahl geben.

Wäre super

Gruß
Matthias



Erweitern Sie das Programm zum Umrechnen von Dezimal- in Dualzahlen aus diesem Studienheft so, dass der Anwender wählen kann, in welches Zahlenformat die
Umrechnung erfolgen soll. Damit die Umsetzung nicht zu kompliziert wird, beschränken Sie das Zielsystem für die Umrechnung auf die Basiszahl 2 bis 9 einschließlich



/* #################################################
Umrechnung vom Dezimal- in das Dualsystem
*/
#include <iostream>

using namespace std;

int main()
{
int zahl, position = 0;

das Feld zum Speichern der Reste
int reste[16];
Das Feld wird mit 0 besetzt
for (int index = 0; index < 16; index++)
reste[index] = 0;

den Wert einlesen
do {
cout << "Geben Sie den Wert ein, der umgerechnet werden soll (max. 65 535): ";
cin >> zahl;
} while (zahl > 65535);

die Schleife
do {
den Rest der Division ablegen
reste[position] = zahl % 2;
zur nächsten Position gehen
position++;
durch 2 teilen und wieder zuweisen
zahl = zahl / 2;
} while (zahl != 0);

die "Reste" von hinten nach vorne ausgeben
for (int index = 15; index >= 0; index--) {
cout << reste[index];
//alle vier Stellen fügen wir eine Leerstelle ein
if (index % 4 == 0)
cout << " ";
}

return 0;
}

Content-Key: 349712

Url: https://administrator.de/contentid/349712

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: Volchy
Volchy 21.09.2017 aktualisiert um 16:54:32 Uhr
Goto Top
Hallo,

du kannst das Switch-Case in deine While-Schleife verpacken.
Die Abfrage der Zahlen packst du weiterhin in deine Funktion, die du zur Berechnung verwendest (also dort die Variablen durch den Anwender füttern).
Das könnte bspw. so aussehen:
#include <iostream>
#include <locale>

using namespace std;

void Funktion_zur_Umrechnung_Binär_in_Dezimal()
{
	//Code zur Berechnung
}

void Funktion_zur_Umrechnung_Dezimal_in_Binär()
{
	//Code zur Berechnung
}


int main()
{
	locale::global(locale("German"));  

	int eingabe = 1;
	while (eingabe != 0)
	{
		cout << "Programm zur Umrechnung von Binär in Dezimal und umgekehrt." << endl;  
		cout << "Auswahlmenü:" << endl;  
		cout << "(1) Umrechnung Binär in Dezimal" << endl;  
		cout << "(2) Umrechnung Dezimal in Binär" << endl;  
		cout << "Eingabe:";  
		cin >> eingabe;
		switch (eingabe)
		{
		case 1: Funktion_zur_Umrechnung_Binär_in_Dezimal();
			break;
		case 2: Funktion_zur_Umrechnung_Dezimal_in_Binär();
			break;
		default: cout << "Eingabe nicht erkannt/fehlerhaft!";  

			system("PAUSE");  
			return 0;
		}
	}
}

Liebe Grüße
Mitglied: SlainteMhath
SlainteMhath 21.09.2017 um 16:58:58 Uhr
Goto Top
Moin,


@Volchy
So war das die Aufgabe imo nicht gedacht

@Matt180
Ich verstehe das so, das du
a) noch abfragen musst, in welches Zahlensystem umgewandelt werden soll
b) überall dort wo du im Code die literale "2" verwendet, die aus a) abgefragte Variable verwenden

Deswegen auch nur 2 bis 9 - ab dem 11er System brauchst du dann zus. Buchstaben und dann wird kompliziert .)

lg,
Slainte
Mitglied: em-pie
em-pie 21.09.2017 um 18:18:59 Uhr
Goto Top
Servus,

warum nicht mal googlen und den ersten Treffer verwenden:
https://www.c-plusplus.net/forum/25830-full

ansonsten würde ich das Quellsystem immer erst in ein generelles Format umwandeln ( -> bin)
und über Case/ If Abfragen dann diese neue Bin-Zahl in das Zielsystem umwandeln

Das wäre zumindest eine Variante.

Dann wären deine Funktionen für das Zielsystem zukünftig immer:
Bin -> Dez
Bin -> Hex
Bin -> Okt


und für jedes neue System baust du dann analog
Dez-> Bin
Hex -> Bin
Okt -> Bin

Du könntest natürlich auch direkt 9 Funktionen schreiben:
Dez -> Bin
Dez -> Hex
Dez -> Okt
Bin -> Dez
Bin -> Hex
Bin -> Okt
Hex -> Bin
Hex -> Dez
Hex -> Okt

Aber ist ja mehr arbeit face-wink

Vermutlich gibt es auch weitere Wege, aber das ist ja das tolle beim Entwickeln von Applikationen, es gibt nicht DAS richtig, sondern nur verschiedene Lösungswege face-smile

Gruß
em-pie
Mitglied: Yaimael
Yaimael 22.09.2017 um 14:17:28 Uhr
Goto Top
Hallo zusammen,

@em-pie:
Es soll immer nur von Dezimal umgewandelt werde (so verstehe zumindest ich die Aufgabe).

@Matt180:
Das ist die While Schleife für Case 2
while (zahl > 65535);

die Schleife
do {
den Rest der Division ablegen
reste[position] = zahl % 2;
zur nächsten Position gehen
position++;
durch 2 teilen und wieder zuweisen
zahl = zahl / 2;
}

Und das wäre sie für Case 3
while (zahl > 65535);

die Schleife
do {
den Rest der Division ablegen
reste[position] = zahl % 3;
zur nächsten Position gehen
position++;
durch 3 teilen und wieder zuweisen
zahl = zahl / 3;
}

Und so weiter....
Habe es nicht getestet sollte aber hinkommen.
Das ganze in einer switch case Auswahl mit abfangen von falschen eingaben.

Also Praktisch am Anfang die Frage in welches Zahlensystem umgeformt werden soll.
Eingabe des Zahlensystems == Caseanweisung.
Falsche Angabe zu erneuten Eingabe auffordern.
Vielleicht auch einen Case definieren der das Programm beendet ;).

Grüße
Yai
Mitglied: SlainteMhath
SlainteMhath 22.09.2017 um 14:21:57 Uhr
Goto Top
@Yaimael
Für jeden Case den Code per Copy/Paste einfügen und die 2 in 3,4,5 usw ändern? Nicht so professionell, oder?

naja, ist ja Freitag heute face-smile
Mitglied: Yaimael
Yaimael 25.09.2017 um 09:18:53 Uhr
Goto Top
@SlainteMhath
Ich weiß nicht elegant aber funktioniert ;)
Soweit ich das sehe ist die Aufgabe auch noch nicht auf einen OO Aufruf hin ausgelegt von daher könnte man es schon so machen face-smile
Alternativ natürlich das ganze als Aufruf einer Methode mit Übergabe des Zahlensystems ;)

Grüße
Yai