![]() |
Programm für Octalzahlen in Dezimalzahlen
Hallo,
ich habe in der Schule den Auftrag bekommen ein Programm zu entwickeln welches Binär bzw. Octal Zahlen in Dezimalzahlen umwandelt. Das hat auch für Binär ganz gut geklappt, nur eben nicht für Octal. Ich poste mal den Code für Binär, damit man erkennt nach welchem Schema das Programm geschrieben werden soll. Bitte bedenkt das ich noch dabei bin die Sprache zu lernen und möglicherweise einige Befehle noch nicht kenne. LG SirMaurice (PS. Eine Erklärung wäre nett, will es ja nicht nur abschreiben sondern auch verstehen ^^) EDIT: Entwicklungsumgebung ist Delphi 5
Delphi-Quellcode:
procedure TForm1.BBindezClick(Sender: TObject);
var i: integer; Position, Ergebnis: cardinal; begin Position:=1; Ergebnis:=0; for i:=length(Ebin.text) downto 1 do begin if Ebin.text[i] = '1' then Ergebnis:=Ergebnis + Position; Position:= Position * 2; end; Edez.text:=inttostr(Ergebnis); end; |
AW: Programm für Octalzahlen in Dezimalzahlen
Es sind zwei Änderungen nötig: Es wird mit 8 multipliziert statt mit 2 und die Eingabe enthält Ziffern 0,1,2,...,6,7.
Um die Oktalzahl 1357 umzuwandeln, berechnet man ausgehend von der höchsten Ziffer
Code:
oder für 76543
1*8 + 3 = 11
11*8 + 5 = 93 93*8 + 7 = 751
Code:
Du muß also die einzelnen Zeichen der Eingabe testen, ob sie in der Menge ['0', '1', ..., '6', '7'] enthalten sind. Wenn ja werden die Zeichen in die entsprechende Integerzahl umgewandelt, und wie gezeigt gerechnet.
7*8 + 6 = 62
62*8 + 5 = 501 501*8 + 4 = 4012 4012*8 + 3 = 32099 Das ganze wird dann wie bei Basis 2 in eine Schleife gepackt (die hier dann einfach vorwärts durchlaufen wird, aber man kann die Sache so ähnlich wie bei Deiner Binärwandlung auch rückwärts durchlaufen; vorwärts kommt ohne die Variable Position aus). Der Vorwärtsalgorithmus ist analog zum Hornerschema (man rechnet ja Summen a[k]*8^k aus). |
AW: Programm für Octalzahlen in Dezimalzahlen
Zitat:
noch ein Tipp von mir zu deinem Code: wenn du dir angewöhnst zur Einrückung immer 2 stat wie bei dir bisher 1 Zeichen zu benutzen, dann ist es nicht nur Delphi/Pascal STandard, sondern erhöht auch die Lesbarkeit ungemein. Du wirst viel schneller sehen was zu einem if gehört usw... Und wenn du gewisse AUfrufe auch noch in pascalCase schreiben würdest, wäre es auch noch übersichtlicher:
Delphi-Quellcode:
Der nächste Schritt, wenn du das mit der Oktalumrechnung hinbekommen hast,
procedure TForm1.BBindezClick(Sender: TObject);
var i: Integer; Position, Ergebnis: Cardinal; begin Position := 1; Ergebnis := 0; for i := length(Ebin.Text) downto 1 do begin if Ebin.Text[i] = '1' then Ergebnis := Ergebnis + Position; Position := Position * 2; end; Edez.Text := IntToStr(Ergebnis); end; wäre übrigens, die jeweiligen Umrechnungsalgorithmen in eigene Methoden auszulagern, damit die nicht fix an einem Button Klick Event dran hängen, sondern flexibel benutzbar sind. Die Methode würden dann einen String übergeben benkommen, der die eingegebenen daten enthält und einen String mit den umgewandelten Daten zurück geben. dann kann sie an jeder Stelle im Programm eingesetzt werden. Grüße und weiter viel Spaß beim Lernen TurboMagic PS: ist Delphi 5 das, was die Schule besitzt? Weil das ja eigentlich schon recht alt ist und Schullizenzen gar nicht so teuer sind... |
AW: Programm für Octalzahlen in Dezimalzahlen
Zitat:
Edit: Internet Archive ist einfach nur gut: ![]() Der Download-Link auf der Seite funktioniert auch. |
AW: Programm für Octalzahlen in Dezimalzahlen
Danke für die Tipps, wäre auch mal nett sowas von seinem Lehrer zu erfahren.
Ich habe versucht das untenstehende umzusetzen, leider funktioniert absolut gar nichts. Bevor der Quellcode kommt: Von meinem Lehrer ist leider absolut gar keine Hilfe zu erwarten. Weiterhin habe ich noch versucht mit einer case of Struktur zu arbeiten, hat auch nicht funktioniert.
Code:
procedure TForm1.BBerechnen2Click(Sender: TObject);
var i: integer; Position, Ergebnis: cardinal; begin Position:= 1; Ergebnis:= 0; for i:= length(EOct.Text) downto 1 do begin if EOct.Text[i]='0' then Ergebnis:= Ergebnis +Position; Position:= Position * 8; if EOct.Text[i]='1' then Ergebnis:= Ergebnis +Position; Position:= Position * 8; if EOct.Text[i]='2' then Ergebnis:= Ergebnis +Position; Position:= Position * 8; if EOct.Text[i]='3' then Ergebnis:= Ergebnis +Position; Position:= Position * 8; if EOct.Text[i]='4' then Ergebnis:= Ergebnis +Position; Position:= Position * 8; if EOct.Text[i]='5' then Ergebnis:= Ergebnis +Position; Position:= Position * 8; if EOct.Text[i]='6' then Ergebnis:= Ergebnis +Position; Position:= Position * 8; if EOct.Text[i]='7' then Ergebnis:= Ergebnis +Position; Position:= Position * 8; end; EDez.text := inttostr(Ergebnis); end; Zitat:
Danke noch mal an alle Antwortgebenden. :thumb: |
AW: Programm für Octalzahlen in Dezimalzahlen
Zitat:
|
AW: Programm für Octalzahlen in Dezimalzahlen
Ich weiß deinen Vorschlag zu schätzen, jedoch weiß ich nicht so ganz wie ich das umsetzen soll. Wir haben in der Schule einfach gesagt bekommen: Macht das mal. Ende. Die Rückwärtszählung war in der Aufgabe enthalten.
Außerdem möchte ich erwähnen, dass ich in meiner Schullaufbahn noch nie etwas vom Horner-Schema gehört habe. Ich hab mich ein bisschen zu dem Thema informiert, jedoch ist mein Wissen auch nach der Recherche mehr so naja. |
AW: Programm für Octalzahlen in Dezimalzahlen
Zitat:
Delphi-Quellcode:
Dies kannst Du in Dein Programm einbauen und rufst die Funktion zB mit
{-----------------------------------------------------------}
function oct2dec(const os: string): cardinal; {-Umwandlung des Strings os, der eine Oktalzahl enthält, in eine Dezimalzahl} var Ergebnis, Potenz: cardinal; i: integer; d: byte; c: char; begin Potenz := 1; Ergebnis := 0; for i:=length(os) downto 1 do begin {Umwandlung nächste Oktalziffer in Dezimalvariable d} c := os[i]; if c in ['0'..'7'] then d := ord(c)-ord('0') else begin {Fehlerbehandlung: hier} ShowMessage(c+' ist keine gültige Oktalziffer'); end; {Aufsummieren} Ergebnis := Ergebnis + Potenz*d; {nächste Achter-Potenz} Potenz := Potenz*8; end; oct2dec := Ergebnis; end;
Delphi-Quellcode:
auf.
dez := oct2dec(EOct.Text)
Hier noch Tip, der wichtiger ist als schöne Formatierung (die nicht vor Logik-Fehlen schützt): Versuche die Berechungen von der Oberfläche/Eingabe/Ausgabe zu trennen. Dann ist die Routine allgemein einsetzbar und hängt nicht von Deinen Editfeldern ab (in der Funktion oben sollte man deshalb besser einen Fehlercode liefern oder ein Exception werfen.) |
AW: Programm für Octalzahlen in Dezimalzahlen
Danke für die Hilfe. Ich muss noch mal kurz erwähnen, dass mir einige Bezeichnungen unbekannt sind. Ich werde mal nachlesen was diese machen.
Ich wollte tatsächlich eine zweite Unit für die Rechnung erstellen, mein Lehrer meinte jedoch, dass ich dies nicht tun soll. Vielen Dank nochmal. |
AW: Programm für Octalzahlen in Dezimalzahlen
Zitat:
Delphi-Quellcode:
schreiben, was vielleicht bekannter ist.
d := strtoint(c)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz