Autor Beitrag
pigfacejoe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Do 30.11.06 18:08 
Hi ,
wir sollen für die Schule eine eigene Strtoint-Funktion schreiben (d.h sie sollte von string in integer umwandeln)
Falls jm ne idee hat bitte hier posten.


Moderiert von user profile iconChristian S.: Topic aus Sonstiges (Delphi) verschoben am Do 30.11.2006 um 18:36
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 30.11.06 18:16 
Ich würde das einfach in einer Schleife ziffernweise machen.
ausblenden Quelltext
1:
2:
3:
  Ergebnis := einString[1];
  von i = 2 bis Länge(einString) do
      Ergebnis := Ergebnis * 10 + Wertvon(einString[i])
wobei

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
Funktion Wertvon(einBuchstabe): Integer;
  falls einBuchstabe ist
     '0': Ergebnis := 0;
     '1': Ergebnis := 1;
     usw.

  ansonsten: Ergebnis := Fehler;


Und das muss man jetzt nur nach Delphi übersetzen ;-)

_________________
We are, we were and will not be.
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Do 30.11.06 18:19 
für deine Lösungen brauch ich aber die strtoint funktion wenn ich das richtig verstehe und ich kann ja nicht (bei deiner 2. Lösung) alle zahlen in einer Schleife durchgehen dann dauert das doch wewig bei grossen zahlen.
Ich denke eher an ord() und Chr() mit ASCI Code,weiss aber nicht wie ich das umsetzen soll
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8549
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Do 30.11.06 18:24 
Die zweite Funktion berechnet nur den Wert einer Ziffer. Das "usw." geht also nur bis 9 ;-)

Aber du hast recht, dass kann man mit Ord eleganter machen. Die Funktion StrToInt brauche ich aber nicht!

_________________
We are, we were and will not be.
Danny W.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 296

Windows XP, WIN 2000
Delphi 2005 PE
BeitragVerfasst: Do 30.11.06 18:27 
warum guckst du dir nicht einfach mal die richtige strtoint funktion an (oder ist es eine prozedur?^^) und baust die mehr oder weniger nach...dein Lehrer kann ja schließlich nicht von dir verlangen das du das Rad neu erfindest :)

_________________
"Ich find den Fehler nicht. Der Artist wird immer als "Syntax Error" gezeigt :("
"Ach verdammt, der Artist heißt wirklich "Syntax Error" xD"
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Do 30.11.06 19:07 
user profile iconMantis1987 hat folgendes geschrieben:
warum guckst du dir nicht einfach mal die richtige strtoint funktion an (oder ist es eine prozedur?^^) und baust die mehr oder weniger nach...dein Lehrer kann ja schließlich nicht von dir verlangen das du das Rad neu erfindest :)
StrToInt arbeitet über Val und das ist IIRC Compiler-Magic ;-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 30.11.06 19:18 
user profile iconChristian S. hat folgendes geschrieben:
user profile iconMantis1987 hat folgendes geschrieben:
warum guckst du dir nicht einfach mal die richtige strtoint funktion an (oder ist es eine prozedur?^^) und baust die mehr oder weniger nach...dein Lehrer kann ja schließlich nicht von dir verlangen das du das Rad neu erfindest :)
StrToInt arbeitet über Val und das ist IIRC Compiler-Magic ;-)


Compiler-Magic hält einen nicht davon ab, zu schauen, was der Compiler übersetzt. Ein Aufruf von Trunc wird auch nur mit einem CALL von System.@Trunc übersetzt. und diese steht in System.pas als private Prozedur _Trunc im Source drin ;-) Ähnliches gilt auch für Val. Was ihn schon mehr davon abhalten könnte, ist die Tatsache, dass Val vollständig in ASM gecoded ist (selbst wenn dass immer noch kein Indiz für ihre Geschwindigkeit ist ...

Die geposteten Ansätze sind in der Form aber bereits korrekt. Fehlt nur noch die Fehlerprüfung für Überläufe ;-)

@CS: Wäre das nicht was für Algo&Opti?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Do 30.11.06 21:03 
Ich hoffe das mit dem pchar klappt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
function strtoint2(str:pchar):integer;
asm
 push ebx;
 mov ebx,eax;
 xor ecx,ecx;
 xor eax,eax;
 xor edx,edx;
@@loop1:
 mov al,byte ptr [ebx+ecx];
 cmp eax,$00;
 jz @@ende;
 inc ecx;
 sub eax,48;
 cmp eax,$09;
 jg @@ungueltigesZeichen;
 imul edx,$0A;
 add edx,eax;
 jno @@loop1;
 //Zahl zu groß
@@ungueltigesZeichen:
 //ungültiges Zeichen Fehler
@@ende:
 pop ebx;
 mov eax,edx;
end;

Das Ding tut seinen Dienst musst nur noch das Vorzeichen selber machen und die Fehlermeldungen einbauen

Edit: WAs ist denn da mit dem Syntaxhighlighter los???

Hab das mal getestet: Das liegt an dem Ende da erkennt er wohl das end der function: TS-TS