Die Rückwärtszählung war in der Aufgabe enthalten.
Na dann mal die Basisfunktion mit korrekter Implementation Deiner Methode. Ich habe Position in Potenz umbenannt, weil das die adäquate Bezeichnung ist und nicht so irreführend wie Positiion.
Delphi-Quellcode:
{-----------------------------------------------------------}
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;
Dies kannst Du in Dein Programm einbauen und rufst die Funktion zB mit
dez := oct2dec(EOct.Text)
auf.
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.)