home *** CD-ROM | disk | FTP | other *** search
- unit protmai2;
- {$O-} // Do not remove, Delphi might crash !!!
- {$R-}
- {$Q-}
- {$A+}
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ExtCtrls, StdCtrls;
-
- TYPE
- {$IFDEF VER120 }
- TMyComp = Int64;
- {$ELSE }
- {$IFDEF VER130 }
- TMyComp = Int64;
- {$ELSE }
- TMyComp = Comp;
- {$ENDIF }
- {$ENDIF }
- TMyLargeInteger = RECORD
- CASE Byte OF
- 0 : ( LowPart : DWORD; HighPart : LongInt );
- 1 : ( QuadPart : TMyComp );
- END;
-
- type
- TForm1 = class(TForm)
- Button1: TButton;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- Label4: TLabel;
- Label5: TLabel;
- Label6: TLabel;
- Label7: TLabel;
- f0: TLabel;
- f0d: TLabel;
- f10: TLabel;
- f10d: TLabel;
- f100: TLabel;
- f1000: TLabel;
- f10000: TLabel;
- f100d: TLabel;
- f1000d: TLabel;
- f10000d: TLabel;
- Bevel1: TBevel;
- Label18: TLabel;
- Label19: TLabel;
- Label20: TLabel;
- pmam: TLabel;
- prom: TLabel;
- pmamd: TLabel;
- promd: TLabel;
- Label25: TLabel;
- Label26: TLabel;
- Bevel2: TBevel;
- Bevel3: TBevel;
- Bevel4: TBevel;
- Bevel5: TBevel;
- Bevel6: TBevel;
- Bevel7: TBevel;
- Bevel8: TBevel;
- Bevel9: TBevel;
- Bevel10: TBevel;
- Bevel11: TBevel;
- Label8: TLabel;
- Bevel12: TBevel;
- tmlf: TLabel;
- tmlfd: TLabel;
- Label9: TLabel;
- Label10: TLabel;
- Label11: TLabel;
- Label12: TLabel;
- Label13: TLabel;
- Label14: TLabel;
- Label15: TLabel;
- Label16: TLabel;
- Label17: TLabel;
- ResLabel: TLabel;
- Bevel13: TBevel;
- Label22: TLabel;
- recu: TLabel;
- recud: TLabel;
- Reculab: TLabel;
- Label23: TLabel;
- procedure StartItAll(Sender: TObject);
- private
- { Private-Deklarationen }
- PROCEDURE UserMessage ( VAR Message ); Message WM_USER+5;
- FUNCTION PostIt : TMyLargeInteger;
- public
- { Public-Deklarationen }
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
- PROCEDURE ConvertTime ( VAR wertstr : String; wert : Double; AsCycles : Boolean );
- VAR
- einheit : String;
- BEGIN
- IF AsCycles = TRUE THEN BEGIN
- Str(wert:0:0, einheit);
- wertstr := '';
- WHILE Length(einheit) > 3 DO BEGIN
- wertstr := ',' + Copy(einheit, Length(einheit)-2, 3) + wertstr;
- einheit := Copy(einheit, 1, Length(einheit)-3);
- END;
- wertstr := einheit + wertstr;
- exit;
- END;
- wertstr := '0.000╡S';
- END;
-
- FUNCTION MidFunction : Integer; Forward;
- FUNCTION DeepFunction : Integer; Forward;
-
- VAR
- res : Array[0..10] OF TMyLargeInteger;
- count : Integer;
- resstr : Array[0..10] OF String;
- resstr2 : Array[0..10] OF String;
-
- PROCEDURE TForm1.UserMessage ( VAR Message );
- VAR
- i : Integer;
- BEGIN
- FOR i := 1 TO 1000 DO
- INC(count);
- END;
-
- FUNCTION TForm1.PostIt : TMyLargeInteger;
- BEGIN
- Result.lowpart := 0;
- Result.highpart := 0;
- PostMessage(application.mainform.handle, WM_USER+5, 1, 2);
- Application.ProcessMessages;
- END;
-
-
- FUNCTION Minimum ( a, b : TMyComp ) : TMyComp;
- BEGIN
- IF a > b THEN
- Result := b
- ELSE
- Result := a;
- END;
-
- FUNCTION FunctionWith10( VAR index : Integer ) : TMyLargeInteger;
- VAR
- i : Integer;
- BEGIN
- Result.lowpart := 0;
- Result.highpart := 0;
- FOR i := 1 TO 10 DO
- INC(index);
- END;
-
- FUNCTION FunctionWith100( VAR index : Integer ) : TMyLargeInteger;
- VAR
- i : Integer;
- BEGIN
- Result.lowpart := 0;
- Result.highpart := 0;
- FOR i := 1 TO 100 DO
- INC(index);
- END;
-
- FUNCTION FunctionWith1000( VAR index : Integer ) : TMyLargeInteger;
- VAR
- i : Integer;
- BEGIN
- Result.lowpart := 0;
- Result.highpart := 0;
- FOR i := 1 TO 1000 DO
- INC(index);
- END;
-
- FUNCTION FunctionWith10000( VAR index : Integer ) : TMyLargeInteger;
- VAR
- i : Integer;
- BEGIN
- Result.lowpart := 0;
- Result.highpart := 0;
- FOR i := 1 TO 10000 DO
- INC(index);
- END;
-
- PROCEDURE Empty;
- BEGIN
- END;
-
- FUNCTION TopFunction ( VAR index : Integer ) : TMyLargeInteger;
- VAR
- i : Integer;
- BEGIN
- FOR i := 1 TO 10 DO
- index := MidFunction;
- Result.lowpart := 0;
- Result.highpart := 0;
- END;
-
- FUNCTION MidFunction : Integer;
- VAR
- i : Integer;
- BEGIN
- FOR i := 1 TO 10 DO
- Result := DeepFunction;
- END;
-
- FUNCTION DeepFunction : Integer;
- BEGIN
- Result := 0;
- END;
-
- FUNCTION DoRecursion ( VAR HowOften : Integer ) : DWORD;
- BEGIN
- DEC(HowOften);
- IF HowOften <= 0 THEN BEGIN
- Result := 0;
- exit;
- END;
- Result := DoRecursion(HowOften);
- END;
-
- procedure TForm1.StartItAll(Sender: TObject);
- VAR
- i, x : Integer;
- xd : Real;
- ergebnis : Integer;
- begin
-
- FOR i := 0 TO 10 DO
- res[i].quadpart := 0;
-
- Ergebnis := 0;
- FOR i := 1 TO 200 DO
- res[5].lowpart := res[5].lowpart + TopFunction(Ergebnis).lowpart;
- Ergebnis := 0;
- FOR i := 1 TO 200 DO
- res[4].lowpart := res[4].lowpart + FunctionWith10000(Ergebnis).lowpart;
- Ergebnis := 0;
- FOR i := 1 TO 200 DO
- res[3].lowpart := res[3].lowpart + FunctionWith1000(Ergebnis).lowpart;
- Ergebnis := 0;
- FOR i := 1 TO 200 DO
- res[2].lowpart := res[2].lowpart + FunctionWith100(Ergebnis).lowpart;
- Ergebnis := 0;
- FOR i := 1 TO 200 DO
- res[1].lowpart := res[1].lowpart + FunctionWith10(Ergebnis).lowpart;
- Ergebnis := 0;
- FOR i := 1 TO 200 DO
- Empty;
- Ergebnis := 0;
- FOR i := 1 TO 200 DO BEGIN
- Ergebnis := 10;
- res[8].lowpart := res[8].lowpart + DoRecursion(Ergebnis);
- END;
- Ergebnis := 0;
- FOR i := 1 TO 200 DO BEGIN
- count := 0;
- res[6].lowpart := res[6].lowpart + PostIt.lowpart;
- END;
-
- FOR i := 0 TO 10 DO BEGIN
- x := res[i].lowpart;
- IF i <> 8 THEN
- x := x DIV 200;
- ConvertTime(resstr[i], x, TRUE);
- xd := Round(x);
- ConvertTime(resstr2[i], xd, FALSE);
- END;
-
- f0.caption := resstr[0];
- f10.caption := resstr[1];
- f100.caption := resstr[2];
- f1000.caption := resstr[3];
- f10000.caption := resstr[4];
- tmlf.caption := resstr[5];
- pmam.caption := resstr[6];
- prom.caption := resstr[7];
- recu.caption := resstr[8];
-
- f0d.caption := resstr2[0];
- f10d.caption := resstr2[1];
- f100d.caption := resstr2[2];
- f1000d.caption := resstr2[3];
- f10000d.caption := resstr2[4];
- tmlfd.caption := resstr2[5];
- pmamd.caption := resstr2[6];
- promd.caption := resstr2[7];
- recud.caption := resstr2[8];
- ResLabel.Visible := TRUE;
- end;
-
- end.
-