| Autor |
Beitrag |
force_
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 27.01.10 12:04
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_
Zuletzt bearbeitet von force_ am Do 04.02.10 03:18, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 27.01.10 12:09
Hallo
Ist dir denn die Theorie klar? Was du mathematisch machen musst?
Wenn nein schau dir einmal die entsprechende Wikipediaseite an:
de.wikipedia.org/wik...ystem_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_ 
Hält's aus hier
Beiträge: 11
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 27.01.10 12:29
|
|
force_ 
Hält's aus hier
Beiträge: 11
|
Verfasst: 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_ 
Hält's aus hier
Beiträge: 11
|
Verfasst: Mi 27.01.10 12:43
Eine Frage jetzt:
Kann man mit Csharp nur mit String Rechnungen durchführen?
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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_ 
Hält's aus hier
Beiträge: 11
|
Verfasst: 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
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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_ 
Hält's aus hier
Beiträge: 11
|
Verfasst: 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); } } |
Zuletzt bearbeitet von force_ am Do 04.02.10 23:52, insgesamt 1-mal bearbeitet
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: 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 
|
|
force_ 
Hält's aus hier
Beiträge: 11
|
Verfasst: 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); } } } |
Zuletzt bearbeitet von force_ am Do 04.02.10 23:54, insgesamt 4-mal bearbeitet
|
|
danielf
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: 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
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: Do 04.02.10 22:13
Sooo einfach wollte ich es ihm nicht machen 
|
|
force_ 
Hält's aus hier
Beiträge: 11
|
Verfasst: 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
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 1012
Erhaltene Danke: 24
Windows XP
C#, Visual Studio
|
Verfasst: 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
|
|