Delphi:Stellenwertsystem

  • Hallo,


    ich bin im ersten Jahr Informatik und wir sollen versuchen ein einfaches Programm zu erstellen,dass eine Dezimalzahl in eine Dualzahl umwandeln kann.


    Habe mir gedacht,dass man das per Substitutionsmethode(oder wie das heißt) machen kann.Also z.B:


    238:2= Rest 0
    119:2=Rest 1
    usw.


    Nur wie kann ich das umsetzen?
    Hoffe das mir jemand weiterhilt.


    Vielen Dank im Voraus.

  • hi
    das ist die Divisionsmethode


    am besten macht man das in eienr Schleife (While oder Repeat) und den Funktionen DIV (ganzzahliges Ergebnis einer Division) und MOD (ganzahliger Rest einer Division)


    das dann einfach nacheinander in der Schleife abarbeiten

  • schreib doch gleich das jemand anders das schreiben soll :P


    nagut weil du es bist


    [PRE]procedure TForm1.Button1Click(Sender: TObject);
    var tempi: integer;
    temps: string;
    begin
    tempi := strtoint(Edit1.text);
    temps:='';
    while (tempi>0) do
    begin
    temps:= InttoStr(tempi mod 2)+temps;
    tempi:= tempi div 2;
    end;
    Edit2.Text:=temps;
    end;[/PRE]


    Das ist natürlich nur eine Variante. es gibt noch diverse andere realisierungsmöglichkeiten bzw optimierungen

  • Ok,danke schon mal für die Übersicht :)


    Dafür brauche ich doch nur ein Eingabefeld,Button und Ausgabefeld oder?


    Was bedetuten die Varbiabeln tempi und temps?Ich kann doch auch andere Variabeln nehmen,oder?

  • Habe es jetzt mal erstellt und auch die Erklärungen dahinter geschrieben.


    procedure TForm1.LOSClick(Sender: TObject);
    var a: integer; // Variable a als ganze Zahlen
    b: string; // Variable b als Zeichenkette


    begin


    a := strtoint(Edit1.text); // String in ganze Zahlen umwandeln


    b:=''; (?)


    while (a>0) do // Solange a>0 erfüllt ist,wiederhole es


    begin


    b:= InttoStr(a mod 2)+b; // Integer in Zeichenkette und (?)


    a:= a div 2; (?)


    end;


    Edit2.Text:=b; (?)


    end;


    Was könnte man als Erklärung schreiben wo ich ein ? stehen habe?

  • Nun ja ist ja mein Quelltext mit anderen Variablennamen :D:P


    b:=''; (?)
    --> Das ne blöde Angewohnheit aus C Pascal und jetzt auch aus VHDL und Verilog. Die Anweisung stellt nur sicher das der string leer ist. Das macht aber Delphi in dem Zusammenhang eh alleine. kann allso weg





    while (a>0) do // Solange a>0 erfüllt ist,wiederhole es
    begin
    b:= InttoStr(a mod 2)+b; // Integer in Zeichenkette und (?)
    a:= a div 2; (?)
    end;
    Edit2.Text:=b; (?)



    Bist du sicher das du verstanden hast wie das arbeitet? Wenn nein frag lieber oder versuch es selbst rauszufinden mit hilfe einer Wertetabelle zum beispiel


    achso wüsst ihr echt alles kommentieren?

  • Die variablen sind nur das ich damit vernünftig arbeiten kann.
    Die Dezimalzahl liegt in tempi als Integervariable vor


    temps ist wie man sieht ein string und nimmt die Binärzahl auf. denn Delphi hat ja keinen expliziten Dateintyp dafür. Also nimmt man einfach einen String aus Nullen und Einsen


    Ich hoffe das ist klar.


    Zitat

    Original von Cepheiden
    am besten macht man das in eienr Schleife (While oder Repeat) und den Funktionen DIV (ganzzahliges Ergebnis einer Division) und MOD (ganzahliger Rest einer Division)


    Soll ich den Algorithmus jetzt auch noch erklären? Mir kam das so vor als wenn du wüstest was der macht

  • Hi,


    hast Du auch eine Idee wie man in demselben Programm genau das umgekehrte machen kann?Also von Dual in Dezimal?


    Also das man dann zwei Buttons hat und es in jede Richtung umrechnen kann.


    Kannst du mir da helfen(evt. Programmcode)?


    Vielen Dank im Vorraus.


    MfG

  • Informatikstudium und ihr macht Delphi? Sicher nicht an der Uni oder? Wenn doch wäre das etwas ungewöhnlich.


    Der grundsätzliche algorithmus ist dir hoffentlich klar


    Angenommen wir haben eine allgemeine 4 Bit-Zahl mit X2 dem LSB recht, also b3 b2 b1 b0. (Das Indize entspricht des Stelle)


    X10 = b3·(2^3) + b2·(2^2) + b1·(2^1) + b0·(2^0)
    = b3·(8 ) + b2·(4 ) + b1·(2 ) + b0·(1 )


    So das bastelst du als Schleife und schon hast du deine Umwandlung.



    Quelltext mach ich jetzt nicht extra, das solltest du schon selbst schaffen



    P.S Gibt sicher wie immer noch andere Wege

  • Schön aber wo liegt dann dein Problem?


    Wie ich sagte macht man das am besten als (Zähl)schleife.


    Überleg dir doch einfach mal wie du es per hand rechnest und übertrag das auf die sequentielle abarbeitung des Rechners.


    Evtl. sollte man sich ein Signalflußgraphen oder ein Struktogramm aufzeichenen.


    Ich könnt dir jetzt auch schnell die 4-5 Zeilen delphi Code posten, aber ich denke nicht das sowas dir jetzt helfen würde. Denn du willst ja sicher beim nächsten Problem wieder Fragen.
    Wie gesagt so schwer ist das nciht und dir ist mehr geholfen wenn du es selbst machst.


    P.S. wenn du wirklich es nicht hinbekommst geb ich dir den code, aber ob du dann was lernst weiß ich nciht.

  • wäre nett wenn du mir den Code geben könntest.


    Da ich Informatik noch nicht lange habe und ich erst am Lernen bin ,kann ich es besser lernen, wenn ich den Programmcode sehe und dann alles nachvollziehe.

  • Na wenn du meinst es hilft dir ist hier mal das Grundgerüst.


    Es führt allerdings keinerlei überprüfungen der Variablen durch.
    Also es wird nciht geprüft ob die Dualzahl größer als der Wertebereich von Integer ist oder ob im Dualstring andere zeichen als 1 und 0 vorkommen und und und ..