Entwickler-Ecke
Basistechnologien - Dezimal in Dualsytem
force_ - Mi 27.01.10 12:04
Titel: Dezimal in Dualsytem
Hallo! Ich muss ein kleines Programm entwickeln, dass eine beliebige Dezimalzahl im Zehnersystem in eine Binärzahl umrechnet. Mithilfe einer Methode "string DezimalInDual(int iDezimal)".
Wäre für eure Hilfe dankbar! Bin noch Anfänger.
Lg force_
jaenicke - Mi 27.01.10 12:09
Hallo :welcome:
Ist dir denn die Theorie klar? Was du mathematisch machen musst?
Wenn nein schau dir einmal die entsprechende Wikipediaseite an:
http://de.wikipedia.org/wiki/Dualsystem#Vom_Dezimalsystem_ins_Dualsystem
Wenn ja sollte dir klar sein, dass dir eine for-Schleife nichts bringt, da du die Anzahl der Stellen nicht vorher kennst. Aber schau erst einmal bei Wikipedia hinein, das macht es vielleicht schon klar...
force_ - Mi 27.01.10 12:19
Die Theorie ist mir eh klar. Es wird solange dividiert (mit dem Modulo) bis 0 übrig bleibt.
Ich muss mit
Console.WriteLine("Geben Sie bitte eine Dezimalzahl ein")
int Dezimal= Console.ReadLine();
Die eingabe einlesen und speichern in eine Variable.
Später wäre mein Problem - wie stelle ich die Zahlen rückwärts dar!? :S
Dabei muss ich string DezimalInDual(int iDezimal) als Methode verwenden. Nur kenn ich mich da auch uar schlecht aus.
Ralf Jansen - Mi 27.01.10 12:26
| Zitat: |
| Später wäre mein Problem - wie stelle ich die Zahlen rückwärts dar!? :S |
Für die gestellte Aufgabe und mit dem gezeigten Verfahren bei Wikipedia ist das eigentlich unnötig. Oder ist das irgendeine nicht erwähnte Zusatzaufgabe?
jaenicke - Mi 27.01.10 12:29
force_ hat folgendes geschrieben : |
| Die Theorie ist mir eh klar. Es wird solange dividiert (mit dem Modulo) bis 0 übrig bleibt. |
Siehst du, da hast du doch schonmal die Schleife. Solange die Zahl größer als Null ist läuft die Schleife.
force_ hat folgendes geschrieben : |
| Später wäre mein Problem - wie stelle ich die Zahlen rückwärts dar!? :S |
Du musst die einzelnen Stellen nur an die richtige Seite anhängen. Wenn du das natürlich falsch herum machst, dann musst du es rückwärts betrachten. Dann liegt der Fehler aber beim Anhängen der einzelnen Stellen. ;-)
force_ - Mi 27.01.10 12:31
@Ralf Jansen
Nein eh nicht! Aber wenn ich Modulo anwenden z.B bei 37:
37 / 2 = 18 (Rest 1)
18 / 2 = 9 (Rest 0)
9 / 2 = 4 (Rest 1)
usw... und ausgegeben werden sollte WIE in Wikipedia beschrieben von Unten nach oben. Nur kann ich mir gut vorsttellen, dass das Programm doch von oben Nach unten alles ausgeben wird!?
Ich habe von einer Handelsschule in eine HTL gewechselt und dass noch vor kurzem, musste aber leider viele Kapitel überspringen, daher tu ich mir auch schwer! Ich muss nun alles nachlernen.
Lg
force_ - Mi 27.01.10 12:43
Eine Frage jetzt:
Kann man mit Csharp nur mit String Rechnungen durchführen?
jaenicke - Mi 27.01.10 12:51
Du bekommst jeweils eine Stelle. Laut Wikipedia Beispiel also 100101. So, du brauchst es umgekehrt. Also hängst du die zweite Stelle, die 0, nicht an die 1 an zu 10, sondern stellst die davor. So dass du direkt 01 hast. Und wenn du das bei jeder Stelle machst, hast du am Ende direkt den korrekten String. ;-)
Also nicht DeinString = DeinString + NeueStelle, sondern DeinString = NeueStelle + DeinString. Das ist alles.
JüTho - Mi 27.01.10 13:03
force_ hat folgendes geschrieben : |
Eine Frage jetzt:
Kann man mit Csharp nur mit String Rechnungen durchführen? |
Nein, C# achtet streng auf die verwendeten
Datentypen. Du musst also nach ReadLine den Wert erst in eine Zahl konvertieren, vorzugsweise mit
decimal.TryParse, damit rechnen und dabei die Teilergebnisse als Zeichen zu einer Zeichenkette zusammenfügen.
Gruß Jürgen
force_ - Di 02.02.10 05:57
Peinlich. :S
Ich komme leider nicht voran.
Hier ist mein bisheriges Programm.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| static void Main(string[] args) { Console.WriteLine("Geben Sie bitte die Dezimalzahl ein"); int Zahl = Convert.ToInt32(Console.ReadLine()); string Ausgabe = DezimalInDual(Zahl); } static string DezimalInDual(int iDezimal) { while (iDezimal >= 0) { int Rechnung = iDezimal % 2; int Ergebnis = Console.ReadLine(); int Rest = Rechnung; Console.WriteLine("Rest beträgt " +Rest); Console.ReadLine(); string Ausgabe= "" +Rest; Console.WriteLine(Ausgabe); } return Ergebnis;
} } } |
jaenicke - Di 02.02.10 09:12
Da du iDezimal nie änderst, wird die Schleife endlos laufen. ;-)
Dieser muss ja immer durch 2 ohne Nachkommastellen geteilt werden bei jedem Durchlauf.
Und dann noch eine Frage: Wie lange muss die Schleife laufen? Was passiert, wenn der Wert 0 wird, bzw. was muss passieren?
force_ - Do 04.02.10 02:44
Die Schleife soll so lange laufen, bis iDezimal bei Null angelangt ist. Jedesmall soll dabei der Rest in der Konsole ausgegeben werden.
Aber ejj -.- ich komme einfach nicht voran. Ich schaffe es nicht einmal ganz normal den Rest auszugeben <_<
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| static void Main(string[] args) { Console.WriteLine("Geben Sie bitte die zu umrechnende Zahl ein"); int iDezimal = Convert.ToInt32(Console.ReadLine()); int Ausgabe = Convert.ToInt32(DezimalInDual(iDezimal)); Console.WriteLine("Rest beträgt: " + Ausgabe); Console.ReadLine(); } static string DezimalInDual(int iDezimal) { int Modulo = 0; int Ergebnis = 0; while (iDezimal >= 1) { int Restwert = iDezimal % 2;
} return Convert.ToString(iDezimal /2); } } |
danielf - Do 04.02.10 08:17
Versuch doch in Worten aufzuschreiben, was dein Algorithmus tun soll.
Zum Beispiel:
1) Den Rest des Betrages einer Division durch 2 ermitteln (dafür gibt es den Operator Modulo % )
2) Den Rest des Betrages einer der Modulo Division ausgeben.
3) Den Betrag durch zwei dividieren
4) Ist der Betrag größer 2 wieder bei 1) Anfang
Dies in Code umsetzen... fertig :o
force_ - Do 04.02.10 13:52
Mache ich doch die ganze Zeit! Habs jetzt hinbekommen, dass der Restwert mithilfe von Modulo ausgegeben wird. Aber die Schleife durchläuft nur einmal. Und gibt mir nur ein Restwert aus. -.-
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| static void Main(string[] args) { Console.WriteLine("Geben Sie bitte die zu umrechnende Zahl ein"); int iDezimal = Convert.ToInt32(Console.ReadLine()); int Ausgabe = Convert.ToInt32(DezimalInDual(iDezimal)); Console.WriteLine("Rest beträgt: " + Ausgabe); Console.ReadLine(); } static string DezimalInDual(int iDezimal) { int Restwert = 0; while (iDezimal >= 1) { int Ergebnis = iDezimal / 2; Restwert = iDezimal % 2;
} return Convert.ToString(Restwert); } } } |
danielf - Do 04.02.10 14:24
Schau dir halt mal dein Code an! Ziele für Zeile. Da kommst du selber drauf... ansonsten verstehst du wohl 0 vom Code.
jaenicke - Do 04.02.10 21:21
force_ hat folgendes geschrieben : |
| Aber die Schleife durchläuft nur einmal. |
Was bewirkt
return? Das hast du offenbar nicht verstanden...
danielf - Do 04.02.10 22:13
Sooo einfach wollte ich es ihm nicht machen ;)
force_ - Do 04.02.10 23:49
Mit return übergebe ich den Wert an eine Variable. Sobald ich aber mit return die Methode verlasse wird wie in meinem Bsp. das Ergebnis der Variable ERGEBNIS gelöscht, davor aber in die Variable ausgabe gespeichert...und ich komme imma noch nicht weiter. T_T
Edit: Eine Bitte nur - könnte mir jemand das ganze so schreiben dass es funktioniert? :S
Ich werde mir dann denn Code Zeile für Zeile ansehen um daraus zu lernen. Weil so komm ich niemals weiter. -.-
jaenicke - Fr 05.02.10 07:03
force_ hat folgendes geschrieben : |
| Mit return übergebe ich den Wert an eine Variable. Sobald ich aber mit return die Methode verlasse wird wie in meinem Bsp. das Ergebnis der Variable ERGEBNIS gelöscht, davor aber in die Variable ausgabe gespeichert... |
Das ist falsch. return gibt den Wert, den du dahinter schreibst als Rückgabewert zurück
und beendet die Methode. Immer.
Wenn du eine Variable zuerst benutzen willst, dann musst du auch eine explizit nehmen und am Ende einmal deren Wert mit return zurückgeben!
danielf - Fr 05.02.10 09:00
Klar könnten wir dir in einer Minute den Code runter schreiben, aber damit wäre dir wohl kaum geholfen. Ist ja nicht der Sinn, dass du dieses Programm schreibst (das gibt es im Internet schon tausende mal), sondern das du lernst dir Gedanken hinsichtlich einer Problemstellung machst und diese dann in einem Programm umsetzt. Wenn es dir egal ist etwas zu lernen, dann findest du den Code auch im Internet.
Gruß Daniel
force_ - Fr 05.02.10 16:42
Doch klar will ich lernen! Aber nachdem C# nicht wirklich so mein Ding ist, fällts mir auch schwer - weil es mir nicht wirklich spaß macht. Muss ich aber leider lernen wegen der Schule. Im Internet gibt es immer nur welche mit Arrays und anderen Zeug. Diese darf ich aber nicht anwenden! Haben erst Klassen und Methoden durchgemacht.
Für mich ist es aber lieber, dass jemand mir den Code schreibt und ich lerne daraus. Fällt mir auch leichter als wie ohne viel Wissen über die Sprache zu versuchen und zu versuchen. Ich sitze schon tage dran. -.- und jeweils pro tag 2 Stunden! Einfach nur krass. Habe mir eh ein Buch bestellt, finde auch nicht wirklich eine gute Quelle wo ich Csharp lernen kann. Die meisten sind so unverständlich und auf englisch... Und bevor jetzt einer kommt mit: Hättest aufpassen sollen!
Ging gar nicht, weil ich in der Zeit gar nicht da war. ;]
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!