IntToStr

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Nils
Beiträge: 130
Registriert: Mo 28. Mai 2007, 12:36
Kontaktdaten:

IntToStr

Beitrag von Nils »

Hi,

wie kann man die Funktion IntToStr selbst programmieren bzw. einbinden, um das Programm kleiner zu halten ?

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Beitrag von Euklid »

Hallo!

Ich bin mir nicht sicher, ob das Programm soviel kleiner wird, wenn du die unit strutils außen vorlässt.

Prinzipiell kannst du durchaus deine Int-Zahl in zehnerpotenzen zerlegen, indem du sie sukzessive durch kleiner werdende Zehnerpotenzen mittels div dividierst.

Das ist aber auf jeden fall aufwendiger zu programmieren, als die IntToStr zu benutzen ;)

Du kannst die Programmgröße sehr stark mit dem Tool "strip", das Lazarus beiliegt, verkleinern (Faktor 6). Hier werden die Debugger-Informationen im Programm entfernt, die außerhalb des Programmierens nicht benötigt werden. Die Suche in diesem Forum nach "strip" wird detailiertere Informationen liefern.

Gruß, Euklid

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Wenn du dir was davon versprichst, kopier's doch einfach raus

function IntToStr(Value: integer): string;
begin
System.Str(Value, result);
end ;

Developer CPS
Beiträge: 15
Registriert: Fr 28. Aug 2015, 18:44
OS, Lazarus, FPC: Windows 10 (L 1.4.4, FPC 2.6.4)
CPU-Target: 64-Bit
Wohnort: Baden-Württemberg, Deutschland
Kontaktdaten:

Re:

Beitrag von Developer CPS »

Hi
ich möchte hier noch etwas hinzufügen:
Euklid hat geschrieben: Du kannst die Programmgröße sehr stark mit dem Tool "strip", das Lazarus beiliegt, verkleinern (Faktor 6). Hier werden die Debugger-Informationen im Programm entfernt, die außerhalb des Programmierens nicht benötigt werden. Die Suche in diesem Forum nach "strip" wird detailiertere Informationen liefern.
Diese Möglichkeit findest du unter Projekt -> Projekteinstellung -> Compilereinstellungen -> Debuggen
Projekteinstellungen
Projekteinstellungen
Die Deaktivierung dieses Knopfes bewirkt die Reduzierung der Größe der .exe-Anwendung (zumindest in Windows) in um oft 90%.

mfg DeveloperCPS

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: IntToStr

Beitrag von marcov »

Am einfachsten ist einfach weg sysutils und objfpc/delphi modi nicht nutzen.

sysutils bring exception handling mit, ist ein paar kb. objpas hat auch etwas overhead. Man muss meistens Turbo Pascal aehnlich programmieren für minimaler Große.

Classes importiert sysutils, also classes nutzen ist sysutils nutzen.

Man soll auch einmal den 16-bits 8086 dos Target anschauen wenn man programmieren will wie 1990.

Warf
Beiträge: 2118
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: IntToStr

Beitrag von Warf »

Ungefähr so könntest du es machen

Code: Alles auswählen

uses Math;
...
function MyIntToStr(x: Integer);
var i, len: Integer;
begin
  len := trunc(log10(x));
  SetLength(Result, len);
  for i := len-1 downto 0 do
  begin
    Result[i]:=x mod 10;
    x := x div 10;
  end;
end;
ob das zu empfehlen ist kann ich nicht sagen

Wenn du die Unit Math nicht verwenden willst ist das eine Hinreichende Approximation für trunc(log10(x));

Code: Alles auswählen

function MyLog10(x: Integer): Integer;
var i: Integer;
begin
  i:=x;
  Result := 0;
  while i >= 10 do
  begin
    i := i div 10;
    inc(Result);
  end;
end;
Edit: habe grade erst gesehen dass dieser Thread uralt ist

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: IntToStr

Beitrag von theo »

Warf hat geschrieben: Edit: habe grade erst gesehen dass dieser Thread uralt ist
Ja, Developer CPS scheint es Spaß zu machen, Forenleichen wieder zu beleben.
Bin auch schon fast darauf reingefallen. :wink:

Mathias
Beiträge: 6899
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: IntToStr

Beitrag von Mathias »

Code: Alles auswählen

function IntToStr(Value: integer): string;
begin
 System.Str(Value, result);
end ;  
Wo ist der Quelltext von System.Str zu finden ?
Wen ich mit der rechten "M-Taste/Finde Deklaration von Str" klicken, wird der Quelltext nicht gefunden.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: IntToStr

Beitrag von theo »

Mathias hat geschrieben:

Code: Alles auswählen

function IntToStr(Value: integer): string;
begin
 System.Str(Value, result);
end ;  
Wo ist der Quelltext von System.Str zu finden ?
Wen ich mit der rechten "M-Taste/Finde Deklaration von Str" klicken, wird der Quelltext nicht gefunden.
Afaik im Compiler drin. Wie Val kann der FPC das von sich aus, ohne extra Unit.

Der Quelltext wäre dann irgendwo hier zu finden:
http://svn.freepascal.org/cgi-bin/viewv ... te#dirlist

Developer CPS
Beiträge: 15
Registriert: Fr 28. Aug 2015, 18:44
OS, Lazarus, FPC: Windows 10 (L 1.4.4, FPC 2.6.4)
CPU-Target: 64-Bit
Wohnort: Baden-Württemberg, Deutschland
Kontaktdaten:

Re: IntToStr

Beitrag von Developer CPS »

theo hat geschrieben:
Warf hat geschrieben: Edit: habe grade erst gesehen dass dieser Thread uralt ist
Ja, Developer CPS scheint es Spaß zu machen, Forenleichen wieder zu beleben.
Bin auch schon fast darauf reingefallen. :wink:
Ja das habe ich auch gemerkt :D , allerdings ist das Forum ja für alle da, auch die, die das gleiche "Problem" oder eine ähnliche Fragestelung haben.

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: IntToStr

Beitrag von marcov »

theo hat geschrieben:
Afaik im Compiler drin. Wie Val kann der FPC das von sich aus, ohne extra Unit.
(der Compiler ruft ein RTL Routine an, zb fpc_shortstr_sint in rtl/inc/*strings.inc mit *=s,a,w,u nagelang String Typ)

Antworten