Obliczenia

Szczawik

Rodzaje obliczeń dokonywanych w Delphi na danych o typach liczbowych można podzielić na kilka kategorii, które są przedstawione poniżej. Skrócony opis wszystkich operatorów języka, nie tylko do operacji liczbowych, można znaleźć w poświęconym im opisie.

Operacje przypisania

Służą do określenia wartości danej. Poza bezpośrednim wpisem wartości do pamięci zajmowanej przez zmienną z wykorzystaniem jej adresu, standardową metodą przypisania jest użycie stosownego operatora, jak pokazano w przykładzie:

X := Y;

Działanie to należy interpretować jako "Y staje się wartością dla X" lub "X przybiera wartość Y", w odróżnieniu od "X jest równe Y". Ten drugi sposób interpretacji jest zarezerwowany dla logicznego operatora porównania, wyrażonego samym znakiem równości (bez dwukropka użytego w przypisaniu).

Operacje logiczne: bitowe

Służą do operowania daną jako zbiorem bitów. Każdy z bitów jest traktowany jako niezależna jednostka, a jego zmiana nie wpływa na inne bity danej.

Symbol operacji Krótki opis Przykład
[[Delphi/not]] Bitowa negacja x:=not $FFFFFF00; {Wynik: x=255}
[[Delphi/and]] Bitowy iloczyn logiczny x:=3 and 6; {Wynik: x=2}
[[Delphi/or]] Bitowa suma logiczna x:=3 or 6; {Wynik: x=7}
[[Delphi/xor]] Bitowa alternatywa wykluczająca x:=3 xor 6; {Wynik: x=5}
[[Delphi/shl]] Bitowe przesunięcie w lewo x:=3 shl 2; {Wynik: x=12}
[[Delphi/shr]] Bitowe przesunięcie w prawo x:=12 shr 2; {Wynik: x=3}

Operacje logiczne: porównania

Służą do sprawdzania, czy dany warunek jest spełniony, czy też nie. Są one specjalnym rodzajem operacji logicznych, gdyż operują na danych, ale zwracają wartości logiczne. Dozwolone działania porównań przedstawia poniższa tabela:

Symbol operacji Symbol klasyczny Krótki opis Przykład
= = Równe B:=(1=1); {TRUE}
? Różne B:=(1<-1); {TRUE}
< < Mniejsze B:=(-1<1); {TRUE}
<= ? Mniejsze lub równe B:=(-1<=1); {TRUE}
> > Większe B:=(1>-1); {TRUE}
>= ? Większe lub równe B:=(1>=-1); {TRUE}

Operacje artymetyczne: proste

Służą do operowania daną jako określoną wartością, za pomocą operatorów języka.

Symbol operacji Krótki opis Przykład
+ Dodawanie x:=1+2.3; {Wynik: x=3.3}
- Odejmowanie x:=1-2.3; {Wynik: x=-1.3}
* Mnożenie x:=2*3.4; {Wynik: x=6.8}
[[Delphi/div]] Dzielenie całkowitoliczbowe x:=5 div 3; {Wynik: x=1}
[[Delphi/mod]] Reszta z dzielenia całkowitoliczbowego x:=5 mod 3; {Wynik: x=2}
/ Dzielenie x:=7 / 2; {Wynik: x=3.5}

Operacje artymetyczne: funkcyjne

Służą do operowania daną jako określoną wartością, za pomocą funkcji zaimplementowanych w bibliotekach. Podstawowe operacje są umieszczone poniżej:

Funkcja Krótki opis Przykład zapisu
[[Delphi/Inc]] Inkrementacja (zwiększenie o 1 albo o N) Inc(X); Inc(X,N);
[[Delphi/Dec]] Dekrementacja (zmniejszenie o 1 albo o N) Dec(X); Dec(X,N);
[[Delphi/Abs]] Wartość bezwzględna Abs(X);
[[Delphi/Int]] Część całkowita liczby rzeczywistej Int(X);
[[Delphi/Frac]] Część ułamkowa liczby rzeczywistej Frac(X);
[[Delphi/Sqr]] Potęga drugiego stopnia Sqr(X);
[[Delphi/Sqrt]] Pierwiastkowanie drugiego stopnia Sqrt(X);
[[Delphi/Power]] Potęga dowolnego stopnia rzeczywistego Power(X, Y);
[[Delphi/Ln]] Logarytm naturalny Ln(X);
[[Delphi/LnXP1]] Logarytm naturalny dla X+1 (szybsza niż dodawanie osobno) LnXP1(X);
[[Delphi/Log2]] Logarytm dwójkowy Log2(X);
[[Delphi/Log10]] Logarytm dziesiętny Log10(X);
[[Delphi/LogN]] Logarytm o wybranej podstawie B LogN(B, X);
[[Delphi/Exp]] Liczba e podniesiona do określonej potęgi Exp(X);
[[Delphi/Ldexp]] Liczba X*2P Ldexp(X,P);
[[Delphi/Hi]] Starszy bajt 16 bitowego słowa Hi(X);
[[Delphi/Lo]] Młodszy bajt 16 bitowego słowa Lo(X);
[[Delphi/Sign]] Wartość zależna od znaku argumentu (-1 dla X<0, 0 dla X=0, 1 dla X>0) Sign(X);
[[Delphi/Round]] Zaokrąglenie matematyczne Round(X);
[[Delphi/Trunc]] Przekształcenie liczby rzeczywistej na całkowitą Trunc(X);
[[Delphi/Floor]] Zaokrąglenie w dół Floor(X);
[[Delphi/Ceil]] Zaokrąglenie w górę Ceil(X);
[[Delphi/Max]] Z pośród dwóch podanych liczb zwraca większą Max(X, Y);
[[Delphi/Min]] Z pośród dwóch podanych liczb zwraca mniejszą Min(X, Y);
[[Delphi/MaxValue]] Z pośród tablicy liczb zwraca największą MaxValue(array);
[[Delphi/MinValue]] Z pośród tablicy liczb zwraca najmniejszą MinValue(array);
[[Delphi/MaxIntValue]] Z pośród tablicy całkowitych liczb zwraca największą MaxIntValue(array);
[[Delphi/MinIntValue]] Z pośród tablicy całkowitych liczb zwraca najmniejszą MinIntValue(array);

Do operacji funkcyjnych zaliczają się również wszystkie dostępne w Delphi operacje działań trygonometrycznych.

Operacje złożone

Służą do wyrażania wartości za pomocą wielu działań dokonywanych na wielu danych. Przykłady poniżej:

var 
  A, B, C : Integer;
  X, Y, Z : Extended;
  S : Boolean;
begin
  A := 10;
  B := -20;
  C := 30;

  X := 1.3;
  Y := -2.4;
  Z := 3.5;

  A := A + B * C;     {A = -590}
  B := Round(X * Y);     {B = -3}
  C := Floor(Sign(X) * Sqrt(Z));     {C = 1}

  X := A / Z - B / Y;     {X ? -169,821}
  Y := Sqr(X) * Sin(X) * C;     {Y ? -5033,237}
  Z := Exp(A + B) * (not B) / X;     {Z ? 6,984}

  S := not ((A and 0) <> (B and 1));     {S = FALSE}
end;

Przy definiowaniu takich obliczeń należy pamiętać o priorytetach działań obowiązujących w Delphi. Przedstawione są one w poniższej tabeli:

Priorytet Operacje
Zerowy (najwyższy) Operacje funkcyjne
Dodatkowy Nawiasy łączące działania: ( )
Pierwszy @, [[Delphi/not]]
Drugi *, /, [[Delphi/div]], [[Delphi/mod]], [[Delphi/and]], [[Delphi/shl]], [[Delphi/shr]], [[Delphi/as]]
Trzeci +, -, [[Delphi/or]], [[Delphi/xor]]
Czwarty (najniższy) =, <, <, >, <=, >=, [[Delphi/in]], [[Delphi/is]]

Delphi posiada specjalną funkcję Power do obliczania potęg. Przy jej wykorzystaniu można też wyliczyć pierwiastki dowolnego stopnia, korzystając z zależności, że pierwiastek z X stopnia Y, to X do potęgi 1/Y. Do takiego wyliczenia można wykorzystać również poniższy kod - proste złożenia funkcji:

function Potega(X, Y:Extended):Extended;
begin
  Result := Exp(ln(X)*Y);
end;

function Pierwiastek(X, Y: Extended): Extended;
begin
  Result := Exp(ln(X)/Y);
end;

W rzeczywistości funkcja Power dokonuje właśnie takiego wyliczenia, uprzednio sprawdzając jeszcze dodatkowe warunki.

Operacje mnogościowe zbiorów

Są szczególnym przypadkiem operacji liczbowych, w których daną może być cały zbiór liczb, a nie tylko pojedyncza wartość. Szczegółowy opis tych operacji można znaleźć przy opisie słowa kluczowego Set, służącego do deklarowania zbioru.

Operacje konwersji

Służą do zamiany jednego systemu miar na inny oraz konwersji typu liczbowego na inny. Podstawowe operacje konwersji miar można znaleźć przy opisie operacji trygonometrycznych.

LogN

  • 2010-10-31 18:27
  • 0 komentarzy
  • 3177 odsłon

Log10

  • 2010-10-31 18:27
  • 0 komentarzy
  • 3370 odsłon

Log2

  • 2010-10-31 18:27
  • 0 komentarzy
  • 3898 odsłon

LnXP1

  • 2010-10-31 18:27
  • 0 komentarzy
  • 3144 odsłony

Exp

  • 2010-10-31 18:27
  • 2 komentarzy
  • 4537 odsłon

Ln

  • 2010-10-31 18:27
  • 1 komentarz
  • 3899 odsłon

Mean

  • 2010-10-31 18:27
  • 0 komentarzy
  • 2779 odsłon

Power

  • 2010-10-31 18:27
  • 0 komentarzy
  • 6532 odsłony

Floor

  • 2010-10-31 18:27
  • 1 komentarz
  • 6195 odsłon

Ceil

  • 2010-10-31 18:27
  • 1 komentarz
  • 6540 odsłon

MinIntValue

  • 2010-10-31 18:27
  • 0 komentarzy
  • 2978 odsłon

MaxIntValue

  • 2010-10-31 18:27
  • 0 komentarzy
  • 2889 odsłon

MaxValue

  • 2010-10-31 18:27
  • 0 komentarzy
  • 2933 odsłony

MinValue

  • 2010-10-31 18:27
  • 0 komentarzy
  • 2970 odsłon

Min

  • 2010-10-31 18:27
  • 0 komentarzy
  • 4824 odsłony

0 komentarzy