Dezimalzahlen in Dualzahlen umrechnen

utos

Rare-Mob
Registriert
06.06.2007
Beiträge
123
Reaktionspunkte
0
Kommentare
13
Buffs erhalten
71
Ich bräuchte mal eure Hilfe, also ich habe als Hausaufgabe aufbekommen, dass ich in Delphi einen Rechner erstellen soll, der Dezimalzahlen in Dualzahlen umrechnet.

Also ich hab angefangen und Arbeitsfeld fertig gemacht, allerdings komme ich nicht so recht weiter, weil ich nicht weiß wo ich anfangen soll.

procedure TForm1.DezimalzahlClick(Sender: TObject);
var n, dez, dual: Integer;
begin
dez:=strtoint(edit1.Text);
Repeat
n:=dez mod 2;
edit2.Text:=intToStr(n);
n:=n mod 2;
edit2.Text:=intToStr(n);


Das sieht jetzt viellecicht ein bisschen stümperhaft aus, aber mir ist nichts besseres eingefallen.

Also meine Überlegung war halt, dass man den Rest von der Division einfach mit Hilfe von mod in ein Editfeld überträgt, aber leider funtktioniert das nicht.

Ich brauch ne Procedure, weil wir Functionen noch nich hatten ;(

Ich hoffe jemand kann mir helfen.
 
http://www.delphi-forum.de/viewtopic.php?p=367899#367899
 
Mit Modulo ist doch gut. Und danach kannst du, wenn du mit Integer machen willst einfach Variable = Variable / 2 rechnen. Das geteilt durch 2 ergibt dann wiederum die ganze Zahl, mit der du im nächsten Schleifendurchlauf weiterrechnest. Und zum Schluss invertierst du das ganze mit Schleife.



Code:
int dZahl = 58;
 	string dual = "";
 	while (dZahl > 0)
 	{
 	dual += Convert.ToString(dZahl % 2);
 	dZahl = dZahl / 2;
 	}
 	string reverseDual = "";
 	for (int i = dual.Length - 1; i >= 0; i--)
 	{
 	reverseDual += dual[i];
 	}
 	Console.Write(reverseDual);
 	Console.ReadLine();
 
Zuletzt bearbeitet von einem Moderator:
Code:
 	public static string DezimalInDual(int iDezimal)
 	{
 	string sErgebnis = "";
 	if (iDezimal > 0)
 	{
 	int iBasis = 2;
 	// 3 Varaiblen vom Typ string werden deklariert und initialisiert
 	string sZwischen1 = "";
 	string sZwischen2 = "";
 	string sZwischen3 = "";
 	// Solange iDezimal > 0 ist
 	while (iDezimal > 0)
 	{
 	// Addiert zu sZwischen1 das Eregbnis von iDezimal % iBasis
 	sZwischen1 += (iDezimal % iBasis).ToString();
 	// Addiert zu sZwischen3 sZwischen1 und sZwischen2, damit die Anordnung richtig ist
 	sZwischen3 += sZwischen1 + sZwischen2;
 	// sZwischen2 wird der Wert von sZwischen3 zugewiesen, um den Wert von sZwischen3 zu speichern
 	sZwischen2 = sZwischen3;
 	// sErgebnis wird der Wert von sZwischen3 zuewiesen um ein Ergebnis auszugeben wenn die Schleife nicht mehr durchgeführt wird
 	sErgebnis = sZwischen3;
 	// sZwischen1 wird geleert
 	sZwischen1 = "";
 	// sZwischen3 wird geleert
 	sZwischen3 = "";

 	// Das Ergebnis von iDezimal / iBasis und der es davon werden von iDezimal abgezogen
 	iDezimal -= (iDezimal / iBasis) + (iDezimal % iBasis);
 	}
 	}

 	return sErgebnis;
 	}
So hab ich das in C# gelöst ob dir das weiter hilft weiß ich nicht.
 
Das denk ich mir auch meistens, deswegen möchte Ich damit nicht all zuviel am Hut haben
smile.gif
 
Dann spammt nicht rum.
wink.gif
 
Und hier nochmal das ganze in JAVA
Code:
public static String binary1(int n){

        int check;
        String result="";

        if (n==0){
            result = "0";
            return result;
        }
        
        else {
        

            while (n>0){
            check = n%2;
            result = check + result;
            n = n/2;}
        
        return result;
        

        }


    }
 
Gut, jetzt haben wir zwei C#-Versionen und einmal Java. Niranda wird uns in Kürze die php-Version liefern. Fühlt sich jemand dazu berufen, daß ganze noch in C abzubilden? Ein bisschen Old School muss schon sein.
Dazu vielleicht noch ne Version in Cobol oder so.
smile.gif
 
So ich melde mich noch mal zurück mit meiner Lösung nur der Vollständigkeit halber
wink.gif





procedure TForm1.Button1Click(Sender: TObject);
var dezi, dezirechner, dezimal, dezirest, x : Integer;
ergebnis, a, z: string;

begin
dezi:=StrToInt(DezimalEdit.text);
dezirechner:=dezi;
dezimal:=dezi;
ergebnis:='';
z:='1';
REPEAT

Begin

dezirechner:=dezirechner Div 2;
x:=dezirechner;
If x>0 Then
Begin
dezirest:=dezimal Mod 2;
a:=IntToStr(dezirest);
Insert (a,ergebnis,1);
dezimal:=dezirechner;
END
Else
Insert (z,ergebnis,1);

END;

Until
dezirechner=0;

dualEdit.text:=ergebnis;



end;
end.


Ist quasi ein Zähler eingebaut, der den Rest zählt und ihn dann in das Ergebnisfeld einsetzt.

Danke an alle
smile.gif
 
Zuletzt bearbeitet von einem Moderator:
Informatik wählen, dann passt das
biggrin.gif

Da lernste auch die Grundlagen von allen (vielen) wichtigen Sachen.
 
Erinnert mich an "Hello World"
jester.gif


http://veit-it.de/fun/informatiker_witze/hello_world.php
 
Zurück