Autor |
Beitrag |
pigfacejoe
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: 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 Christian S.: Topic aus Sonstiges (Delphi) verschoben am Do 30.11.2006 um 18:36
|
|
Gausi
      
Beiträge: 8549
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Do 30.11.06 18:16
_________________ We are, we were and will not be.
|
|
pigfacejoe 
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: 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
      
Beiträge: 8549
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: 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.
      
Beiträge: 296
Windows XP, WIN 2000
Delphi 2005 PE
|
Verfasst: 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.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Do 30.11.06 19:07
Mantis1987 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
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Do 30.11.06 19:18
Christian S. hat folgendes geschrieben: | Mantis1987 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
      
Beiträge: 510
Win XP Prof
Delphi 7 E
|
Verfasst: Do 30.11.06 21:03
Ich hoffe das mit dem pchar klappt:
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; @@ungueltigesZeichen: @@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
|
|