Var Nilai_awal_temp, Nilai_awal_temp1, Nilai_awal_temp2, Simpanan : Integer;
Nilai_awal_str1, Nilai_awal_str2 : String;
Tambahan : String;
Hasil, Simpanan_STR : String;
FunCtion Strkeint(Str:String):integer;
begin
if str='' Then
result:=0 else
begin
try
result:=strtoint(str);
Except
Result:=0;
end;
end;
end;
function MakeNDigit(myVal:String; myLen:byte):String;
var
vlTempVal: String;
vlCount, vlNewDigit: Byte;
begin
vlNewDigit := 0;
vlTempVal := myVal;
if length(vlTempVal) >= myLen then
result := vlTempVal
else
vlNewDigit := myLen-Length(vlTempVal);
for vlCount := 1 to vlNewDigit do
vlTempVal := '0'+vlTempVal;
result := vlTempVal;
end;
Function Ceil_Gaji(Nilai_awal, Nilai_bulat : Integer) : Integer;
Begin
Result := 0;
Nilai_awal_str1 :=''; Nilai_awal_str2 := '';
Nilai_awal_temp := Trunc(Nilai_awal);
Nilai_awal_str1 := LeftStr(inttostr(Nilai_awal_temp),
length(inttostr(Nilai_awal_temp)) - length(inttostr(Nilai_bulat)));
Nilai_awal_str2 := RightStr(inttostr(Nilai_awal_temp),
length(inttostr(Nilai_bulat)));
Nilai_awal_temp1 := Strkeint(Nilai_awal_str1);
Nilai_awal_temp2 := Strkeint(Nilai_awal_str2);
Tambahan := MakeNDigit('', length(inttostr(Nilai_bulat)));
if Nilai_awal_temp2 = 0 Then
Begin
hasil := Nilai_awal_str1 + (Tambahan);
Result := Strkeint(hasil);
End else
if Nilai_awal_temp2 < Nilai_bulat Then
Begin
hasil := Nilai_awal_str1 + inttostr(Nilai_bulat);
Result := Strkeint(hasil);
End else
if Nilai_awal_temp2 > Nilai_bulat Then
Begin
Simpanan_STR := Nilai_awal_str1 + (Tambahan);
Simpanan := Strkeint(Simpanan_STR);
Result := Simpanan + (Nilai_bulat + Nilai_bulat)
End;
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text := inttostr(Ceil_Gaji(Strkeint(Edit1.text), Strkeint(Edit2.text)));
end;
FunCtion Strkeint(Str:String):integer;
begin
if str='' Then
result:=0 else
begin
try
result:=strtoint(str);
Except
Result:=0;
end;
end;
end;
function MakeNDigit(myVal:String; myLen:byte):String;
var
vlTempVal: String;
vlCount, vlNewDigit: Byte;
begin
vlNewDigit := 0;
vlTempVal := myVal;
if length(vlTempVal) >= myLen then
result := vlTempVal
else
vlNewDigit := myLen-Length(vlTempVal);
for vlCount := 1 to vlNewDigit do
vlTempVal := '0'+vlTempVal;
result := vlTempVal;
end;
Function Floor_Gaji(Nilai_awal, Nilai_bulat : Integer) : Integer;
Var Nilai_awal_temp, Nilai_awal_temp1, Nilai_awal_temp2 : Integer;
Nilai_awal_str1, Nilai_awal_str2 : String;
Tambahan : String;
Hasil : String;
Begin
Result := 0;
Nilai_awal_str1 :=''; Nilai_awal_str2 := '';
Nilai_awal_temp := Trunc(Nilai_awal);
Nilai_awal_str1 := LeftStr(inttostr(Nilai_awal_temp),
length(inttostr(Nilai_awal_temp)) - length(inttostr(Nilai_bulat)));
Nilai_awal_str2 := RightStr(inttostr(Nilai_awal_temp),
length(inttostr(Nilai_bulat)));
Nilai_awal_temp1 := Strkeint(Nilai_awal_str1);
Nilai_awal_temp2 := Strkeint(Nilai_awal_str2);
Tambahan := MakeNDigit('', length(inttostr(Nilai_bulat)));
if Nilai_awal_temp2 < Nilai_bulat Then
Begin
hasil := Nilai_awal_str1 + tambahan;
Result := Strkeint(hasil);
End;
if Nilai_awal_temp2 >= Nilai_bulat Then
Begin
hasil := Nilai_awal_str1 + inttostr(Nilai_bulat);
Result := Strkeint(hasil);
End;
End;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit3.Text := inttostr(Floor_Rp(Strkeint(Edit1.text), Strkeint(Edit2.text)));
end;
function Calculate(SMyExpression: string; digits: Byte): string;
// Calculate a simple expression
// Supported are: Real Numbers, parenthesis
var
z: Char;
ipos: Integer;
function StrToReal(chaine: string): Real;
var
r: Real;
Pos: Integer;
begin
Val(chaine, r, Pos);
if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos);
Result := r;
end;
function RealToStr(inreal: Extended; digits: Byte): string;
var
S: string;
begin
Str(inreal: 0: digits, S);
realToStr := S;
end;
procedure NextChar;
var
s: string;
begin
if ipos > Length(SMyExpression) then
begin
z := #9;
Exit;
end
else
begin
s := Copy(SMyExpression, ipos, 1);
z := s[1];
Inc(ipos);
end;
if z = ' ' then nextchar;
end;
function Expression: Real;
var
w: Real;
function Factor: Real;
var
ws: string;
begin
Nextchar;
if z in ['0'..'9'] then
begin
ws := '';
repeat
ws := ws + z;
nextchar
until not (z in ['0'..'9', '.']);
Factor := StrToReal(ws);
end
else if z = '(' then
begin
Factor := Expression;
nextchar
end
else if z = '+' then Factor := +Factor
else if Z = '-' then Factor := -Factor;
end;
function Term: Real;
var
W: Real;
begin
W := Factor;
while Z in ['*', '/'] do
if z = '*' then w := w * Factor
else
w := w / Factor;
Term := w;
end;
begin
w := term;
while z in ['+', '-'] do
if z = '+' then w := w + term
else
w := w - term;
Expression := w;
end;
begin
ipos := 1;
Result := RealToStr(Expression, digits);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sMyExpression: string;
begin
sMyExpression := '12.5*6+18/3.2+2*(5-6.23)';
ShowMessage(sMyExpression + ' = ' + Calculate(sMyExpression, 3));
end;
function DecToRoman(Decimal: Longint): string;
const
Numbers: array[1..13] of Integer =
(1, 4, 5, 9, 10, 40, 50, 90, 100,
400, 500, 900, 1000);
Romans: array[1..13] of string =
('I', 'IV', 'V', 'IX', 'X', 'XL',
'L', 'XC', 'C', 'CD', 'D', 'CM', 'M');
var
i: Integer;
begin
Result := '';
for i := 13 downto 1 do
while (Decimal >= Numbers[i]) do
begin
Decimal := Decimal - Numbers[i];
Result := Result + Romans[i];
end;
end;
function OctToInt(Value: string): Longint;
var
i: Integer;
int: Integer;
begin
int := 0;
for i := 1 to Length(Value) do
begin
int := int * 8 + StrToInt(Copy(Value, i, 1));
end;
Result := int;
end;
function IntToOct(Value: Longint; digits: Integer): string;
var
rest: Longint;
oct: string;
i: Integer;
begin
oct := '';
while Value <> 0 do
begin
rest := Value mod 8;
Value := Value div 8;
oct := IntToStr(rest) + oct;
end;
for i := Length(oct) + 1 to digits do
oct := '0' + oct;
Result := oct;
end;
function ToBin(Value: Byte; Splitter: Char): string;
var
val, bit, intX: Byte;
begin
val := Value;
for intX := 0 to 7 do
begin //Alle 8 Bits durchlaufen
bit := 48; //48 (='0') zu bit
val := val shr 1; //Value um 1 Bit nach rechts verschieben
asm
adc bit,0 //CarryFlag zu bit addieren
end;
if intX = 4 then Result := Splitter + Result;
Result := Chr(bit) + Result; //zu Result hinzufügen
end;
end;
{------------------------------------------------------------------------------}
function ToBin(Value: Word; Splitter: Char): string;
begin
Result := ToBin(Byte(Hi(Value)), Splitter) + Splitter + ToBin(Byte(Lo(Value)), Splitter);
end;
{------------------------------------------------------------------------------}
function BinTo(Value: string): Cardinal;
var
intX, PosCnt: Byte;
begin
Result := 0;
PosCnt := 0;
for intX := Length(Value) - 1 downto 0 do //zeichen von rechts durchlaufen
case Value[intX + 1] of //prüfen, ob 0 oder 1
'0': Inc(PosCnt); //bei 0 nur Pos-Zähler erhöhen
'1':
begin //bei 1 Bit an Position einfügen
Result := Result or (1 shl PosCnt);
Inc(PosCnt); //und Zähler erhöhen
end;
end;
end;
function IntToBin1(Value: Longint; Digits: Integer): string;
var
i: Integer;
begin
Result := '';
for i := Digits downto 0 do
if Value and (1 shl i) <> 0 then
Result := Result + '1'
else
Result := Result + '0';
end;
function IntToBin2(d: Longint): string;
var
x, p: Integer;
bin: string;
begin
bin := '';
for x := 1 to 8 * SizeOf(d) do
begin
if Odd(d) then bin := '1' + bin
else
bin := '0' + bin;
d := d shr 1;
end;
Delete(bin, 1, 8 * ((Pos('1', bin) - 1) div 8));
Result := bin;
end;
function BinToInt(Value: string): Integer;
var
i, iValueSize: Integer;
begin
Result := 0;
iValueSize := Length(Value);
for i := iValueSize downto 1 do
if Value[i] = '1' then Result := Result + (1 shl (iValueSize - i));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption := IntToStr(StrToInt('$AFFE')); //45054
end;