![]() |
Oktalzahl zu Dezimalzahl
Hallo erst mal... Ich wollte mal fragen, wie ich Oktalzahlen in Dezimalzahlen umwandeln kann.
Das prinzip ist mir schon klar dezimal -->12344 4 · 1 = 4 4 · 8 = 32 3 · 64 = 192 2 · 512 = 1024 1 · 4096 = 4096 ————— 5348 oktal --> 5348 aber wie ist dies programmiertechnisch zu meistern? Bitte nicht auf den anderen Forumeintrag "Oct zu Integer" verweisen, dass hilf mir nicht weiter thx schon mal der FRosch |
Re: Oktalzahl zu Dezimalzahl
Zitat:
|
Re: Oktalzahl zu Dezimalzahl
thx, dass ist ja sehr gut... doch jez erblicke ich meinen fehler nicht...
Delphi-Quellcode:
bei der rot markierten stelle, gibt er n fehler aus mit inkom. typen, aba warum?
procedure TForm1.btnoctalClick(Sender: TObject);
function xToDec(octal: string; sys: byte): integer; var i: integer; const ch = '0123456789ABCDEF'; begin octal:=(edtoctal.Text); sys:=8; result := 0; if sys in [2..16] then begin for i := 1 to length(octal) do result := result*sys + pos(upCase(octal),ch) - 1; end; end; end; |
Re: Oktalzahl zu Dezimalzahl
probiers mal so:
Delphi-Quellcode:
procedure TForm1.btnoctalClick(Sender: TObject);
var i: integer; octal: string; sys: byte; dec: integer; const ch = '0123456789ABCDEF'; begin octal:=(edtoctal.Text); sys:=8; dev := 0; if sys in [2..16] then begin for i := 1 to length(octal) do dec := dec*sys + pos(upCase(octal),ch) - 1; end; edtdecimal.Text := IntToStr(dec); //oder wie halt das edit heißt end; |
Re: Oktalzahl zu Dezimalzahl
hmm, er sagt mir immer noch bei
dec := dec*sys + pos(upCase(octal),ch) - 1; [Fehler] Unit1.pas(316): Inkompatible Typen: 'Char' und 'String' [Fataler Fehler] Project1.dpr(6): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden |
Re: Oktalzahl zu Dezimalzahl
Hai Frosch,
upCase erwartet als Parameter ein CHAR deine Variable octal ist aber vom Typ String. Für einen String musst du UpperCase verwenden. |
Re: Oktalzahl zu Dezimalzahl
Hey, ja jez funzt es... aba die richtige zahl kommt nich raus... gibt man zb als octalzahl
173 an, sollte bei dezimal 123 stehen... tut es aba nicht. da steht jez: -73 |
Re: Oktalzahl zu Dezimalzahl
probiers mit
Delphi-Quellcode:
octal[i]
|
Re: Oktalzahl zu Dezimalzahl
JAAA :hello: das iss es!!! Thx, endlich... :-D :-D :-D
|
Re: Oktalzahl zu Dezimalzahl
kann mir jemand sagen, was dieses uppercase bedeutet? Und wie die zeichen abgerufen werden, also wie die schleife sie verwändet? also ch
|
Re: Oktalzahl zu Dezimalzahl
Hi!
UpperCase macht alles zu Großbuchstaben. LowerCase macht alles zu Kleinbuchstaben.
Delphi-Quellcode:
showmessage(Uppercase('teSt')); // = TEST
showmessage(Lowercase('teSt')); // = test Ciao fkerber |
Re: Oktalzahl zu Dezimalzahl
begin
for i := 1 to length(octal) do dec := dec*sys + pos(upCase(octal),ch) - 1; thx, aber wie wird dieses ch verwendet. Woher weiß das prog, wann es verwändet wird |
Re: Oktalzahl zu Dezimalzahl
Hi!
Wie meinst du das? ch ist ein String, aus dem mit Pos die benötigte Stelle gesucht wird, wenn ich das richtig interpretiere. Ciao fkerber |
Re: Oktalzahl zu Dezimalzahl
woher weiß er denn die richtige posi?
|
Re: Oktalzahl zu Dezimalzahl
Hi!
Du rufts die Funktion Pos doch so auf, dass du ihr ein Zeichen übergibst, dass sie in dem konstanten String suchen soll. Der String sieht ja so aus: 0123456789ABCDEF Übergibst du jetzt das Zeichen A, dann gibt Pos 10 zurück (ich hoff mal, dass 10 stimmt, bin mir nicht sicher, ob der ab 0 zählt oder wie auch immer, aber fürs Prinzip wird es hoffentlich klar :oops: ) Ciao fkerber |
Re: Oktalzahl zu Dezimalzahl
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Das erste Indiz ist, dass in der vermeintlichen Lösung die Basis als Ziffer vorkommt. Kann nicht sein. Das zweite Indiz ist, dass die vermeintliche Lösung weniger Ziffer hat als die Dezimalzahl. Kann nicht sein. Es können nur gleiche viele oder mehr Ziffern sein. Weil die Basis des Octalensystems kleiner ist als die des Dezimalensystems. Die richtige Lösung lautet: 12344(dezimal) ist 30070(octal) Der Algorithmus für die Umrechnung einer Dezimalzahl in ein beliebiges Zahlensystem kann aus der Anlage abgeleitet werden. |
Re: Oktalzahl zu Dezimalzahl
ja, ok, dieses beispiel von mir war falsch... aber die schleife rechnet es richtig...
doch weiß ich immer noch nichts mit der besagten Zeile anzufangen |
Re: Oktalzahl zu Dezimalzahl
hallo erstmal,
habe diese diskussion brennend verfolgt, nur hänge ich einwenig ... würde gerne mal den kompletten quellcode sehen. denn er gibt mir zwar die ersten oktalzahlen richtig aus aber danach erhalte ich immer nur eine '-9' :wall: hatte das mit dem octal[i] nit ganz geschnitten ... danke schon mal im vorraus für die hilfe! |
Re: Oktalzahl zu Dezimalzahl
Ich hab ne function die jedes Zahlensystem ins andere Rechnen kann (warum sollte man auch für jede umrechnung eine function schreiben?):
Delphi-Quellcode:
Beispiele:
function BaseToBase(Value: string; StartBase, EndBase: byte): string;
const Digits = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; var i: Integer; dez, j: Int64; begin Result:=''; if (StartBase<2) or (StartBase>36) or (EndBase<2) or (EndBase>36) then Exit; for i:=1 to Length(Value) do begin j:=Pos(Value[i], Digits); if (j>StartBase) or (j=0) then Exit; end; j:=1; dez:=0; for i:=Length(Value) downto 1 do begin dez:=dez + (Pos(Value[i], Digits)-1) * j; j:=j*StartBase; end; repeat Result:=Digits[dez mod EndBase+1] + Result; dez:=dez div EndBase; until dez=0; end;
Delphi-Quellcode:
mfg
ShowMessage(BaseToBase('101010', 2, 16)); // umrechnung von Binär in Hex
ShowMessage(BaseToBase('12345', 10, 8)); // umrechnung von Dezimal in Oct |
Re: Oktalzahl zu Dezimalzahl
will dann mal meine Version auch mal in den Ring werfen.
Delphi-Quellcode:
edit: uups falsch herum function dec2oct(zahl:Integer):String; begin if zahl DIV 8 > 0 then begin result:=IntToStr(zahl MOD 8)+result; zahl := zahl DIV 8; result:=dec2oct(zahl)+result; end else result:=IntToStr(zahl)+result; end; Grüße Klaus |
Re: Oktalzahl zu Dezimalzahl
Zitat:
|
Re: Oktalzahl zu Dezimalzahl
danke leutz für die anderen tollen vorschläge, nur mich würde gerne die zuerst diskutierte procedure interessieren! das macht mich ganz kirre ... :spin:
|
Re: Oktalzahl zu Dezimalzahl
Delphi-Quellcode:
wenn es das ist was Du meinst.
procedure TForm1.btnoctalClick(Sender: TObject);
function xToDec(octal: string; sys: byte): integer; var i: integer; const ch = '0123456789ABCDEF'; begin octal:=(edtoctal.Text); sys:=8; result := 0; if sys in [2..16] then begin for i := 1 to length(octal) do result := result*sys + pos(upCase(octal[i]),ch) - 1; end; end; Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 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