Zaawansowane programowanie w (pakiecie) Delphi

Podobne dokumenty
PODSTAWY PROGRAMOWANIA

gdy wielomian p(x) jest podzielny bez reszty przez trójmian kwadratowy x rx q. W takim przypadku (5.10)

Rys Mo liwe postacie funkcji w metodzie regula falsi

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie Delphi obliczenia, schematy blokowe

IV. UK ADY RÓWNAÑ LINIOWYCH

(wymiar macierzy trójk¹tnej jest równy liczbie elementów na g³ównej przek¹tnej). Z twierdzen 1 > 0. Zatem dla zale noœci

Wstęp do programowania. Różne różności

Zaawansowane programowanie w (pakiecie) Delphi

Innym wnioskiem z twierdzenia 3.10 jest

Funkcje matematyczne w C. Programowanie w C Marek Pudełko

API transakcyjne BitMarket.pl

Wprowadzenie do języka Pascal

PODSTAWY PROGRAMOWANIA

Przy Matlabie istnieje duże społeczność wymieniająca się plikami, programami i poradami

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Wyk ad II. Stacjonarne szeregi czasowe.

III. INTERPOLACJA Ogólne zadanie interpolacji. Niech oznacza funkcjê zmiennej x zale n¹ od n + 1 parametrów tj.

Microsoft Small Basic

1 Funkcje elementarne

Język programowania DELPHI / Andrzej Marciniak. Poznań, Spis treści

Funkcje Andrzej Musielak 1. Funkcje

Język programowania PASCAL

STRUKTURA MENU STRUKTURA MENU

Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?

Algorytmy i struktury danych. wykład 1

Matematyka I. BJiOR Semestr zimowy 2018/2019 Wykład 2

Kurs wyrównawczy dla kandydatów i studentów UTP

ASD - ćwiczenia III. Dowodzenie poprawności programów iteracyjnych. Nieformalnie o poprawności programów:

Matematyka na szóstke

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Właściwości i metody obiektu Comment Właściwości

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI

(0) (1) (0) Teoretycznie wystarczy wzi¹æ dowoln¹ macierz M tak¹, by (M) < 1, a nastêpnie obliczyæ wektor (4.17)

Podstawy programowania

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI

Kurs z matematyki - zadania

Stałe. Funkcje standardowe. Niektóre stałe i funkcje z pliku nagłówkowego math.h. M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2

Wartości domyślne, szablony funkcji i klas

ER RATA do ksi¹ ki "Symfonia C++ Stan dard". wydanie 3. (Zawieraj¹ca tak e czysto kosmetyczne poprawki) Sporz¹dzona 4 paÿdziernika 2009.

Podstawowe wyrażenia matematyczne

Klasy: String, Random, Math. Korzystanie z dokumentacji.

EGZAMIN MATURALNY Z MATEMATYKI

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

Cw.12 JAVAScript w dokumentach HTML

Język ludzki kod maszynowy

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Statystyczna analiza danych w programie STATISTICA. Dariusz Gozdowski. Katedra Doświadczalnictwa i Bioinformatyki Wydział Rolnictwa i Biologii SGGW

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Pracownia Komputerowa wyk ad VI

PASCAL Kompendium. Środowisko TURBO PASCAL Skróty klawiaturowe. Edycja kodu Pomoc spis treści. Skopiowanie zaznaczonego bloku do schowka

Stronicowanie na ¹danie

1 Praktyczne metody wyznaczania podstawowych miar bez zastosowania komputerów

ODPOWIEDZI I SCHEMAT PUNKTOWANIA ZESTAW NR 2 POZIOM ROZSZERZONY. S x 3x y. 1.5 Podanie odpowiedzi: Poszukiwane liczby to : 2, 6, 5.

Zagadnienia do egzaminu ustnego z matematyki dla Uzupełniającego Liceum Ogólnokształcącego dla Dorosłych - III semestr

14.Rozwiązywanie zadań tekstowych wykorzystujących równania i nierówności kwadratowe.

ELEMENTY ANALIZY NUMERYCZNEJ

Symulacyjne badanie stabilnoœci numerycznej odcinkami liniowych modeli systemów chaotycznych

Rozdział 6. Pakowanie plecaka. 6.1 Postawienie problemu

JAVAScript w dokumentach HTML - przypomnienie

EGZAMIN MATURALNY Z INFORMATYKI

1. Rozwiązać układ równań { x 2 = 2y 1

Pierwiastki arytmetyczne n a

Informatyka, I stopień. Programowanie (PRO300.1)

Projektowanie bazy danych

Funkcje. Alina Gleska. Instytut Matematyki, Wydział Elektryczny, Politechnika Poznańska

Algorytmy i struktury danych. Wykład 4

Instalacja Pakietu R

Regulamin Krêgów Harcerstwa Starszego ZHR

Opis programu do wizualizacji algorytmów z zakresu arytmetyki komputerowej

1 Rozk ad normalny. Szczególnym przypadkiem jest standardowy rozk ad normalny N (0; 1), wartości

JAVAScript w dokumentach HTML (1)

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

LIMATHERM SENSOR Sp. z o.o.

Zaawansowane programowanie w (pakiecie) Delphi

PRAWA ZACHOWANIA. Podstawowe terminy. Cia a tworz ce uk ad mechaniczny oddzia ywuj mi dzy sob i z cia ami nie nale cymi do uk adu za pomoc

Zaawansowane programowanie w (pakiecie) Delphi

Wyk³ad INTERPOLACJA.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Pracownia komputerowa. Dariusz Wardecki, wyk. VI

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Wstęp do programowania

Programowanie RAD Delphi

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI

INSTRUKCJA U YTKOWNIKA DO KASY SHARP ER-A457P wersja oprogramowania: 27801RAR1C PROGRAMOWANIE FORMATU RAPORTÓW, KROK (PGM2)

MATrix LABoratory. A C21 delta tvx444 omega_zero. hxx J23 aaa g4534 Fx_38

Blokady. Model systemu. Charakterystyka blokady

PRÓBNY EGZAMIN MATURALNY Z MATEMATYKI

ELEMENTY ANALIZY NUMERYCZNEJ

'()(*+,-./01(23/*4*567/8/23/*98:)2(!."/+)012+3$%-4#"4"$5012#-4#"4-6017%*,4.!"#$!"#%&"!!!"#$%&"#'()%*+,-+

ROZKŁAD MATERIAŁU DO II KLASY LICEUM (ZAKRES ROZSZERZONY) A WYMAGANIA PODSTAWY PROGRAMOWEJ.

Wprowadzenie do programowania w VBA

Algorytmika i Programowanie VBA 1 - podstawy

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Czy przedsiêbiorstwo, którym zarz¹dzasz, intensywnie siê rozwija, ma wiele oddzia³ów lub kolejne lokalizacje w planach?

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

Instrukcje pętli przykłady. Odgadywanie hasła. 1) Program pyta o hasło i podaje adres, gdy hasło poprawne lub komunikat o błędnym haśle.

Transkrypt:

DEL420 Zaawansowane programowanie w (pakiecie) Delphi Andrzej Marciniak Prezentacja multimedialna przygotowana za pomoc¹ systemu Corel Presentations 11 i X3 Copyright 2004-2010 by Andrzej Marciniak DEL-9-10(1 z 62)

Na poprzednim wyk³adzie... tworzenie komponentów VCL i ActiveX oraz ich wykorzystanie konstrukcja komponentu VCL testowanie komponentu VCL konstrukcja komponentu ActiveX testowanie komponentu ActiveX DEL-9-10(2 z 62)

Na tym wyk³adzie... wywo³anie innego programu z programu paskalowego przegl¹d funkcji i procedur funkcje i procedury trygonometryczne, hiperboliczne, area funkcje, funkcje logarytmiczne, wyk³adnicze i potêgowe funkcje i procedury do obliczeñ statystycznych inne funkcje sprawdzanie obecnoœci poprzedniego egzemplarza programu DEL-9-10(3 z 62)

Wywo³anie innego programu Do wykonania tej operacji s³u y funkcja ShellExecute zdefiniowana w module ShellAPI. Funkcja ta nie jest opisana w systemie pomocy œrodowiska Delphi. Odwo³ujê siê ona bezpoœrednio do funkcji API œrodowiska Windows o tej samej nazwie: HINSTANCE ShellExecute( HWND hwnd, // handle to parent window LPCTSTR lpoperation, // pointer to string that specifies operation LPCTSTR lpfile, // pointer to filename or folder name string LPCTSTR lpparameters, // pointer to string that specifies executable-file parameters LPCTSTR lpdirectory,// pointer to string that specifies default directory INT nshowcmd // whether file is shown when opened ); DEL-9-10(4 z 62)

Wywo³anie innego programu Nag³ówek funkcji ShellExecute z modu³u ShellAPI ma nastêpuj¹c¹ postaæ: function ShellExecute (hwnd : HWND; Operation, FileName, Parameters, Directory : PChar; ShowCmd : Integer) : HINST; stdcall; Bezpoœrednie u ywanie tej funkcji w praktyce mo e byæ uci¹ liwe. Dlatego proponujemy korzystaæ z nastêpuj¹cej, u ytecznej funkcji: DEL-9-10(5 z 62)

Wywo³anie innego programu function ExecuteFile (const FileName, Params, DefaultDir : string; ShowCmd : Integer) : THandle; var zfilename, zparams, zdir : array [0..79] of Char; begin Result:=ShellExecute(Application.MainForm.Handle, nil, StrPCopy(zFileName, FileName), StrPCopy(zParams, Params), StrPCopy(zDir, DefaultDir), ShowCmd) end; FileName Params DefaultDir ShowCmd nazwa zbioru programowego (lub folderu), parametry wykonania programu, skorowidz (katalog) domyœlny, okreœlenie sposobu wyœwietlania okienka: SW_SHOW (bie ¹cy rozmiar i po³o enie), SW_MAXIMIZE, SW_MINIMIZE (inne sta³e SW_ zob. opis funkcji API o nazwie ShellExecute w Help Windows SDK) DEL-9-10(6 z 62)

Modu³ Math zawiera funkcje i procedury arytmetyczne, trygonometryczne, logarytmiczne i statystyczne, bêd¹ce uzupe³nieniem funkcji zdefiniowanych w module System. Ponadto w module Math znajduj¹ siê definicje funkcji przeznaczonych do obliczeñ finansowych, które przeniesiono z pakietu Quattro Pro firmy Borland. Czêœæ wykonawcza wielu funkcji i procedur zosta³a zaprogramowana bezpoœrednio w asemblerze, z wykorzystaniem instrukcji zmiennopozycyjnych, operuj¹cych bezpoœrednio na jednostce arytmetyki zmiennopozycyjnej procesora. DEL-9-10(7 z 62)

Funkcje i procedury trygonometryczne ArcCos(x) ArcSin(x) ArcTan2(x, y) Cotan(x) SinCos(x, s, c) Tan(x) arcus cosinus x arcus sinus x arcus tangens ilorazu x przez y cotangens x sinus i cosinus x (oddzielne obliczenie sinusa i cosinusa za pomoc¹ funkcji Sin i Cos modu³u System trwa dwa razy d³u ej) tangens x Przypomnienie: W module System s¹ zdefiniowane funkcje ArcTan, Cos i Sin. DEL-9-10(8 z 62)

Funkcje i procedury trygonometryczne DegToRad(stopnie) zamiana stopni na radiany RadToDeg(radiany) zamiana radianów na stopnie Przyk³ady 1)Obliczenie w stopniach przybli onej wartoœci funkcji arcsin 0,5: RadToDeg(ArcSin(0.5)) 2)Obliczenie przybli onych wartoœci sin 20 i cos 20 oraz przypisanie wyników zmiennym odpowiednio s oraz c: SinCos(DegToRad(20), s, c) DEL-9-10(9 z 62)

Funkcje hiperboliczne i area funkcje area funkcje ArcCosh(x) ArcSinh(x) ArcTanh(x) Cosh(x) Sinh(x) Tanh(x) funkcje odwrotne wzglêdem funkcji hiperbolicznych area cosinus x area sinus x area tangens x cosinus hiperboliczny x sinus hiperboliczny x tangens hiperboliczny x DEL-9-10(10 z 62)

Funkcje logarytmiczne LnXP1(x) Log10(x) Log2(x) LogN(p, x) logarytm naturalny z x+1 (funkcja zalecana do stosowania dla wartoœci x bliskich 0) logarytm dziesiêtny z x logarytm o podstawie 2 z x logarytm o podstawie p z x Przypomnienie: W module System jest zdefiniowana funkcja Ln. DEL-9-10(11 z 62)

Funkcje wyk³adnicze i potêgowe Hypot (x, y) obliczenie wartoœci wyra enia czyli normy euklidesowej wektora w R 2 IntPower (podstawa, wyk³adnik) argument podstawa podniesiony do potêgi ca³kowitej okreœlonej przez wyk³adnik Power (podstawa, wyk³adnik) podniesienie liczby rzeczywistej do dowolnej potêgi (nie tylko ca³kowitej) DEL-9-10(12 z 62)

Funkcje wyk³adnicze i potêgowe Ldexp (x, p) obliczenie x 2 p (p ca³kowite) Przypomnienie: W module System s¹ zdefiniowane funkcje Exp, Sqr i Sqrt. DEL-9-10(13 z 62)

Funkcje i procedury do obliczeñ statystycznych funkcja Sum (dane) obliczanie sumy elementów ( dane argument odpowiadaj¹cy tablicowemu parametrowi otwartemu o elementach typu Double) funkcja SumOfSquares (dane) obliczenie sumy kwadratów elementów SumsAndSquares (dane, suma, suma-kwadratów) jednoczesne obliczenie sumy i sumy kwadratów elementów DEL-9-10(14 z 62)

Funkcje i procedury do obliczeñ statystycznych funkcja Norm (dane) obliczenie normy euklidesowej wektora (pierwiastek z sumy kwadratów jego sk³adowych) funkcja Mean (dane) obliczenie œredniej arytmetycznej pewnej liczby elementów funkcja PopnVariance (dane) wyznaczenie wariancji, tj. DEL-9-10(15 z 62)

Funkcje i procedury do obliczeñ statystycznych funkcja TotalVariance (dane) obliczenie wartoœci wyra enia funkcja Variance (dane) obliczenie nieobci¹ onego estymatora wariancji (nazwa mo e byæ myl¹ca, gdy funkcja nie oblicza wariancji), tj. DEL-9-10(16 z 62)

Funkcje i procedury do obliczeñ statystycznych funkcja PopnStdDev (dane) wyznaczenie odchylenia standardowego, tj. pierwiastka kwadratowego z wariancji funkcja StdDev (dane) wyznaczenie pierwiastka kwadratowego z nieobci¹ onego estymatora wariancji MeanAndStdDev (dane, œrednia, odchylenie) jednoczesne wyznaczenie œredniej i pierwiastka kwadratowego z nieobci¹ onego estymatora wariancji DEL-9-10(17 z 62)

Funkcje i procedury do obliczeñ statystycznych MomentSkewKurtosis (dane, m1, m2, m3, m4, skoœnoœæ, eksces) wyznaczenie czterech pierwszych momentów, skoœnoœci i ekscesu (wspó³czynnika wypuk³oœci), tj. wielkoœci DEL-9-10(18 z 62)

Funkcje i procedury do obliczeñ statystycznych funkcja RandG (œrednia, odchylenie) otrzymywanie liczb losowych o rozk³adzie normalnym (Gaussa) funkcja RandomRange (i1, i2) otrzymywanie ca³kowitych liczb losowych z przedzia³u [ i1, i2) Przypomnienie: Funkcja Random z modu³u System generuje rzeczywiste liczby losowe z przedzia³u [0, 1) lub ca³kowite z przedzia³u [0, zakres). DEL-9-10(19 z 62)

Funkcje do wykonywania obliczeñ finansowych do obliczania rat i p³atnoœci ( FutureValue, InterestPayment, InterestRate, NumberOfPeriods, Payment, PeriodPayment, PresentValue), do wykonywania rachunków dyskontowych (InternalRateOfReturn, NetPresentValue), do obliczania amortyzacji (DoubleDecliningBalance, SLNDepreciation, SYDDepreciation) DEL-9-10(20 z 62)

Funkcje dotycz¹ce zaokr¹glania funkcja RoundTo (wartoœæ, rz¹d) zaokr¹glenie wartoœci do miejsca okreœlonego przez rz¹d (potêga dziesi¹tki), który musi byæ liczb¹ ca³kowit¹ z przedzia³u [ 37, 37) (?) Przyk³ady wywo³anie wartoœæ funkcji RoundTo(1234567, 3) 1235000 RoundTo(125, 1) 120 RoundTo(126, 1) 130 RoundTo(135, 1) 140 Uwaga: Wartoœci obliczane przez funkcjê RoundTo zale ¹ od ustaleñ wykonanych za pomoc¹ procedury Set8087CW lub funkcji SetRoundMode. DEL-9-10(21 z 62)

Funkcje dotycz¹ce zaokr¹glania funkcja SimpleRoundTo (wartoœæ, rz¹d) zaokr¹glenie asymetryczne (w górê) wartoœci do miejsca okreœlonego przez rz¹d (potêga dziesi¹tki), który musi byæ liczb¹ ca³kowit¹ z przedzia³u [ 37, 37) (domyœlna wartoœæ parametru rz¹d: 2) Przyk³ady wywo³anie wartoœæ funkcji SimpleRoundTo(1234567, 3) 1235000 SimpleRoundTo(124, 1) 120 SimpleRoundTo(125, 1) 130 SimpleRoundTo(135, 1) 140 DEL-9-10(22 z 62)

Funkcje dotycz¹ce zaokr¹glania Uwaga: Niektóre przyk³ady podane w systemie pomocy œrodowiska Delphi 7 s¹ b³êdne! jest powinno byæ RoundTo(1234567, 3) 1234000 1235000 (*) RoundTo(1.245, 2) 1.24 1.25 (!) SimpleRoundTo(1234567, 3) 1234000 1235000 (*) B³êdy oznaczone przez (*) s¹ oczywiste. Jak móg³ powstaæ b³¹d oznaczony przez (!)? Przypomnienie: W module System jest zdefiniowana funkcja Round zaokr¹glaj¹ca podan¹ wartoœæ do najbli szej liczby ca³kowitej. DEL-9-10(23 z 62)

Funkcje dotycz¹ce s³owa steruj¹cego FPU funkcja GetExceptionMask wartoœæ funkcji jest typu TFPUException i okreœla zbiór z maskami s³owa steruj¹cego FPU type TFPUException = (exinvalidop, exdenormalized, exzerodivide, exoverflow, exunderflow, exprecision); TFPUExceptionMask = set of TFPUException; Jeœli jakiœ element zbioru TFPUExceptionMask nale y do zbioru wartoœci funkcji, oznacza to, e odpowiadaj¹cy mu warunek nie bêdzie generowany. Zamiast tego wartoœci¹ obliczanego wyra enia bêdzie NaN (nie-liczba), Infinity (nieskoñczonoœæ) lub NegInfinity (minus nieskoñczonoœæ). Przyjmowana wartoœæ zale y od wykonywanej operacji i bie ¹cego rodzaju zaokr¹glania. DEL-9-10(24 z 62)

Funkcje dotycz¹ce s³owa steruj¹cego FPU funkcja GetPrecisionMode uzyskanie informacji o precyzji realizowanej przez FPU; wartoœæ funkcji jest typu TFPUPrecisionMode: type TFPUPrecisionMode = (pmsingle, pmreserved, pmdouble, pmextended); Znaczenia elementów: pmsingle pojedyncza precyzja pmreserved nie u ywane pmdouble podwójna precyzja pmextended precyzja rozszerzona DEL-9-10(25 z 62)

Funkcje dotycz¹ce s³owa steruj¹cego FPU funkcja GetRoundMode uzyskanie informacji o bie ¹cym rodzaju zaokr¹glania realizowanym przez FPU; wartoœæ funkcji jest typu TFPURoundingMode: type TFPURoundingMode = (rmnearest, rmdown, rmup, rmtruncate); Znaczenia elementów: rmnearest zaokr¹glenie standardowe, tj. do najbli szej liczby, a w przypadku równych odleg³oœci do liczby parzystej rmdown zakr¹glenie w dó³ rmup zaokr¹glenie w górê rmtruncate obciêcie w kierunku zera DEL-9-10(26 z 62)

Funkcje dotycz¹ce s³owa steruj¹cego FPU funkcja SetExceptionMask (maski) okreœlenie masek FPU (wartoœci¹ funkcji s¹ poprzednie maski); parametr maski i wartoœæ funkcji s¹ typu zbiorowego TFPUExceptionMask (zob. bli ej) funkcja SetPrecisionMode (precyzja) okreœlenie precyzji FPU (wartoœci¹ funkcji jest poprzednia precyzja); parametr precyzja i wartoœæ funkcji s¹ typu TFPUPrecisionMode (zob. bli ej) DEL-9-10(27 z 62)

Funkcje dotycz¹ce s³owa steruj¹cego FPU funkcja SetRoundMode (zaokr¹glenie) okreœlenie rodzaju zaokr¹glenia realizowanego przez FPU (wartoœci¹ funkcji jest poprzedni rodzaj zaokr¹glenia); parametr zaokr¹glenie i wartoœæ funkcji s¹ typu TFPURoundingMode (zob. bli ej) DEL-9-10(28 z 62)

Inne funkcje i procedury Frexp (x, mantysa, cecha) wyodrêbnienie mantysy i cechy wielkoœci zmiennoprzecinkowej (mantysa zmienna typu Extended, cecha zmienna typu Integer) funkcja Ceil (x) wyznaczenie najmniejszej liczby ca³kowitej wiêkszej od lub równej podanej wartoœci x funkcja Floor (x) wyznaczenie najwiêkszej liczby ca³kowitej mniejszej od lub równej podanej wartoœci x DEL-9-10(29 z 62)

Inne funkcje i procedury DivMod (dzielna, dzielnik, wynik, reszta) wynik dzielenia ca³kowitego z reszt¹ funkcja Max (x, y) wartoœci¹ funkcji jest wiêksza z liczb x i y (parametry mog¹ byæ dowolnego typu ca³kowitego lub rzeczywistego) funkcja Min (x, y) wartoœci¹ funkcji jest mniejsza z liczb x i y DEL-9-10(30 z 62)

Inne funkcje i procedury funkcje MaxIntValue (dane) i MaxValue (dane) uzyskanie najwiêkszej wartoœci z tablicy dane o elementach typu ca³kowitego Integer (MaxIntValue) i rzeczywistego Double (MaxValue) funkcje MinIntValue (dane) i MinValue (dane) uzyskanie najmniejszej wartoœci z tablicy dane o elementach typu ca³kowitego Integer (MinIntValue) i rzeczywistego Double (MinValue) DEL-9-10(31 z 62)

Inne funkcje i procedury funkcja CompareValue (x, y) CompareValue (x, y, eps) porównanie wartoœci x i y, przy czym drugi przypadek dotyczy parametrów rzeczywistych, które uwa a siê za równe jeœli ró ni¹ siê nie wiêcej ni o eps (domyœlna wartoœæ: 0); wartoœæ funkcji jest typu TValueRelationship: type TValueRelationship = 1..1; Znaczenia wartoœci: 1 x < y 0 x = y (z dok³adnoœci¹ eps) 1 x > y DEL-9-10(32 z 62)

Inne funkcje i procedury funkcja EnsureRange (wartoœæ, w1, w2) wyznaczenie najbli szej liczby do wartoœæ z przedzia³u [ w1, w2] (argumenty mog¹ byæ albo typu Integer, albo Int64, albo Double) Przyk³ady wywo³anie EnsureRange (1, 3, 5) 3 EnsureRange (6, 3, 5) 5 EnsureRange (4, 3, 5) 4 wartoœæ funkcji DEL-9-10(33 z 62)

Inne funkcje i procedury funkcja InRange (wartoœæ, w1, w2) sprawdzenie, czy wartoœæ nale y do przedzia³u [w1, w2] (argumenty mog¹ byæ typu Integer, Int64 lub Double) funkcja IsInfinite (x) sprawdzenie, czy wartoœci¹ argumentu x (typu Double) jest nieskoñczonoœæ (Inf) funkcja IsNan (x) sprawdzenie, czy wartoœci¹ argumentu x (typu Single, Double lub Extended) jest nie-liczba (wartoœæ nienumeryczna NaN) DEL-9-10(34 z 62)

Inne funkcje i procedury funkcja IsZero (x) sprawdzenie, czy wartoœæ argumentu x (typu Single, Double lub Extended) jest równa 0 (lub bliska 0) funkcja SameValue (x, y, eps) sprawdzenie, czy wartoœci argumentów x i y (typu Single, Double lub Extended) s¹ równe z dok³adnoœci¹ eps (wartoœæ domyœlna: 0) DEL-9-10(35 z 62)

Inne funkcje i procedury funkcja Sign (wartoœæ) okreœlenie, czy argument wartoœæ typu Integer, Int64 lub Double jest dodatni, ujemny czy równy 0; wartoœæ funkcji jest typu TValueSign: type TValueSign = 1..1; Znaczenia wartoœci: 1 wartoœæ < 0 0 wartoœæ = 0 1 wartoœæ > 0 DEL-9-10(36 z 62)

Inne funkcje i procedury funkcja Poly (x, wspó³czynniki) obliczenie wartoœci wielomianu stopnia n zmiennej x algorytmem Hornera: w n := a n, w i := w i+1 x + a i, dla i = n 1, n 2,..., 0. gdzie w 0 oznacza wyznaczan¹ wartoœæ ( x oznacza wartoœæ typu Extended, a argument wspó³czynniki odpowiada tablicowemu parametrowi otwartemu o elementach typu Double liczba elementów tej tablicy jest równa stopniowi wielomianu minus 1) DEL-9-10(37 z 62)

Sta³e predefiniowane w module Math const Infinity = 1.0/0.0; MaxComp = 9.223372036854775807e+18; MaxDouble = 1.7e+308; MaxExtended = 1.1e+4932; MaxSingle = 3.4e+38; MinComp = 9.223372036854775807e+18; MinDouble = 5.0e 324; MinExtended = 3.4e 4932; MinSingle = 1.5e 45; NaN = 0.0/0.0; NegInfinity = 1.0/0.0; do przypisywania zmiennej stanu +Inf (nie nale y u ywaæ w porównaniach) do przypisywania zmiennej stanów NaN (nie-liczba) i Inf (nie nale y u ywaæ w porównaniach) DEL-9-10(38 z 62)

Informacje o modu³ach MathStrUtils i VarCmplx MathStrUtils zawiera dwie funkcje: IfThen (do otrzymywania jednej z dwu wartoœci na podstawie zadanego warunku) i RandomFrom (do otrzymywania losowo wybranego elementu z tablicy) VarCmplx zawiera wiele funkcji do wykonywania obliczeñ na liczbach zespolonych (liczby te s¹ reprezentowane za pomoc¹ wariantów specjalnych ang. custom variants) DEL-9-10(39 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Ka dy program mo e byæ wykonany w wiêcej ni jednym egzemplarzu. Aby zezwoliæ na co najwy ej jeden egzemplarz, program musi mieæ mo liwoœæ sprawdzenia, czy poprzedni egzemplarz nie jest ju uruchomiony. Poznamy trzy sposoby rozwi¹zania tego problemu: zastosowanie funkcji API FindWindow, u ycie muteksu, przeszukanie listy okien. DEL-9-10(40 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Zastosowanie funkcji FindWindow Wartoœci¹ funkcji FindWindow (z modu³u Windows) jest identyfikator okna (ang. handle) nadawany przez œrodowisko Windows lub 0, jeœli okno nie zostanie znalezione. Identyfikator ten jest typu HWND: type HWND = type Longword; Typ ten jest zgodny m. in. z typem THandle (który zaleca siê stosowaæ). DEL-9-10(41 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Zastosowanie funkcji FindWindow Wywo³anie funkcji ma postaæ FindWindow (nazwa-klasy, nazwa-okna) Oba parametry s¹ typu PChar. Wartoœæ nil drugiego parametru oznacza, e nazwa okna mo e byæ dowolna. G³ówny kod (kod programu) powinien byæ napisany tak, by by³ wykonywany tylko wówczas, gdy wartoœci¹ funkcji FindWindow jest 0: DEL-9-10(42 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Zastosowanie funkcji FindWindow... var ident : THandle; begin ident:=findwindow( TForm1, nil); if ident=0 end. wykonanie, gdy okna nie odnaleziono then begin Application.Initialize; Application.CreateForm(TForm1, Form1);... Application.Run end else SetForegroundWindow (ident) uaktywnienie poprzedniego egzemplarza programu DEL-9-10(43 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Zastosowanie funkcji FindWindow Technika ta dzia³a tylko wówczas, gdy g³ówne okno poprzedniego programu nie zosta³o zminimalizowane. Gdy g³ówne okno jest zminimalizowane, to jest ukryte i kod aktywuj¹cy nie dzia³a. Jeœli program z podanym kodem uruchomimy w œrodowisku Delphi, to poniewa okno ju istnieje (na etapie projektowania), wiêc program nie zostanie uruchomiony ani razu. DEL-9-10(44 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... U ycie muteksu muteks obiekt wzajemnie wykluczaj¹cy siê (w œrodowisku Windows mo e istnieæ tylko jeden muteks o danej nazwie) Po utworzeniu przez program obiektu muteksu o danej nazwie lub sprawdzeniu, e taki obiekt ju istnieje (za pomoc¹ funkcji CreateMutex), program mo e sprawdziæ, czy obiekt ten jest ju w posiadaniu innego programu. W tym celu wywo³uje siê funkcjê WaitForSingleObject. DEL-9-10(45 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... U ycie muteksu Wywo³anie funkcji CreateMutex ma postaæ CreateMutex (atrybuty-bezpieczeñstwa, czy-w³aœciciel, nazwa-muteksu) Pierwszy parametr okreœla, czy identyfikator muteksu mo e byæ dziedziczony przez procesy potomne (jeœli jest on równy nil, to identyfikator ten nie mo e byæ dziedziczony tak¹ wartoœæ nale y przyj¹æ w rozwa anym problemie). DEL-9-10(46 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... U ycie muteksu Wywo³anie funkcji CreateMutex ma postaæ CreateMutex (atrybuty-bezpieczeñstwa, czy-w³aœciciel, nazwa-muteksu) W artoœæ True dugiego parametru oznacza, e program (proces) wywo³uj¹cy funkcjê staje siê w³aœcicielem muteksu (w naszym problemie parametr ten powinien mieæ wartoœæ False). Trzeci parametr (typu PChar) okreœla nazwê muteksu. Wartoœæ funkcji (typu THandle) jest identyfikatorem muteksu (nadawanym przez œrodowisko Windows). DEL-9-10(47 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... U ycie muteksu Dzia³anie funkcji WaitForSingleObject* ) jest nastêpuj¹ce: jeœli muteks nie ma w³aœciciela, funkcja powoduje, e jego w³aœcicielem staje siê program wywo³uj¹cy (tê funkcjê). Jeœli muteks ma ju w³aœciciela, program czeka a up³ynie czas podany w wywo³aniu funkcji, a nastêpnie funkcja przekazuje (jako wartoœæ) kod b³êdu. * ) w stosunku do muteksu, bo w ogólnoœci funkcja mo e dzia³aæ na ró nych obiektach DEL-9-10(48 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... U ycie muteksu Wywo³anie funkcji WaitForSingleObject : WaitForSingleObject (identyfikator-obiektu, czas-oczekiwania) Jeœli wartoœci¹ drugiego parametru jest 0, funkcja testuje stan podanego obiektu i natychmiast podaje wynik (co jest po ¹dane w rozwa anym problemie). Wartoœæ funkcji okreœla zdarzenie, które spowodowa³o zakoñczenie testowania. Do zbadania tej wartoœci wykorzystuje siê sta³e o przedrostku wait_ (zob. system pomocy). W naszym problemie nale y zbadaæ, czy wartoœæ funkcji jest ró na od wait_timeout (w przypadku muteksu sta³a ta oznacza, e ma on ju w³aœciciela). DEL-9-10(49 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza...... var muteks : THandle; begin U ycie muteksu utworzenie muteksu i (lub) przypisanie jego identyfikatora zmiennej muteks muteks:=createmutex(nil, False, MojMuteks ); if WaitForSingleObject(muteks, 0)<>wait_TimeOut sprawdzenie, czy muteks jest then begin w posiadaniu innego programu Application.Initialize; Application.CreateForm(TForm1, Form1);... Application.Run end end. DEL-9-10(50 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... U ycie muteksu Je eli dwa razy uruchomimy program z podanym kodem, zobaczymy, e tworzy on now¹ tymczasow¹ kopiê programu (na pasku zadañ pojawi siê piktogram), a nastêpnie po up³ywie czasu podanego w wywo³aniu funkcji WaitForSingleObject usuwa j¹. Nie wiadomo jednak w jaki sposób w³¹czyæ istniej¹cy egzemplarz programu. DEL-9-10(51 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien Aby wyszukaæ okreœlone okno g³ówne w œrodowisku Windows mo na u yæ funkcji API EnumWindows. Funkcja ta, zwana funkcj¹ wyliczeniow¹, wymaga podania jako parametru wskaÿnika do funkcji (zwanej funkcj¹ zwrotn¹ lub funkcj¹ powtórnego wywo³ania ang. callback function): EnumWindows (wskaÿnik-do-funkcji-zwrotnej, parametr ) gdzie parametr oznacza 32-bitowa wartoœæ przekazywana do funkcji zwrotnej (w naszym problemie wartoœæ ta jest nieistotna przyjmujemy 0). DEL-9-10(52 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien Koncepcja polega na tym, eby funkcjê zwrotn¹ wywo³aæ dla ka dego elementu na liœcie g³ównych okien œrodowiska Windows) a do koñca listy lub przyjêcia przez tê funkcjê wartoœci False, co zakoñczy tak e dzia³anie funkcji wyliczeniowej EnumWindows. Dla naszych celów funkcja zwrotna mo e mieæ nastêpuj¹c¹ postaæ (nielokalna zmienna ModuleName zawiera nazwê zbioru wykonywalnego bie ¹cego programu, a FoundWnd identyfikator odszukanego okna): DEL-9-10(53 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien function EnumWndProc (hwnd : THandle; Param : Cardinal) : Bool; stdcall; var ClassName, WinModuleName : string; WinInstance : THandle; begin Result:=True; SetLength (ClassName, 100); GetClassName (hwnd, PChar(ClassName), Length(ClassName)); ClassName:=PChar(ClassName); if ClassName=TForm1.ClassName then begin pobranie nazwy klasy o identyfikatorze hwnd dopasowanie d³ugoœci zak³adamy, e g³ówne okno nazywa siê Form1 SetLength (WinModuleName, 200); DEL-9-10(54 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien WinInstance:=GetWindowLong (hwnd, GWL_HINSTANCE); uzyskaniei dentyfikatora egzemplarza programu GetModuleFileName (WinInstance, PChar(WinModuleName), Length(WinModuleName)); pobranie nazwy zbioru wykonywalnego dotycz¹cego danego egzemplarza programu WinModuleName:=PChar(WinModuleName); ifw inmodulename=modulename then begin FoundWnd:=hwnd; end end {EnumWndProc}; Result:=False end porównanie nazw zbiorów wykonywalnych zakoñczenie wyliczania DEL-9-10(55 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien Jeœli w podanej funkcji nazwa zbioru programowego g³ównego okna (WinModuleName) odpowiada nazwie bie ¹cego programu (ModuleName), mo emy byæ pewni, e odszukaliœmy poprzedni egzemplarz tego samego programu. W takim przypadku nale y spowodowaæ uaktywnienie poprzedniego egzemplarza programu. Odpowiedni kod mo e mieæ postaæ DEL-9-10(56 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien... var hmutex, FoundWnd : THandle; ModuleName : string;... begin hmutex:=createmutex(nil, False, MyMutex2 ); if WaitForSingleObject(hMutex, 0)<>wait_TimeOut then begin Application.Initialize; Application.CreateForm(TForm1, Form1);... Application.Run end DEL-9-10(57 z 62)

end. Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien else begin SetLength (ModuleName, 200); GetModuleFileName (HInstance, PChar(ModuleName), Length(ModuleName)); pobranie nazwy zbioru wykonywalnego bie ¹cego programu ModuleName:=PChar(ModuleName); // dopasuj dlugosc end EnumWindows (@EnumWndProc, 0); odszukanie g³ównego okna poprzedniego egzemplarza programu if FoundWnd<>0 then SetForegroundWindow (FoundWnd) DEL-9-10(58 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien Wywo³anie funkcji SetForegroundWindow nie powoduje uaktywnienia g³ównego okna poprzedniego egzemplarza programu, gdy zosta³o ono zminimalizowane (zob. pierwszy przypadek). Problem ten mo na rozwi¹zaæ przez spowodowanie, by poprzedni egzemplarz przywróci³ swoje g³ówne okno wskutek wys³ania odpowiedniej wiadomoœci z bie ¹cego egzemplarza. DEL-9-10(59 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien Instrukcjê if FoundWnd<>0 then SetForegroundWindow (FoundWnd) wystarczy zast¹piæ przez if FoundWnd<>0 then begin if not IsWindowVisible(FoundWnd) then PostMessage (FoundWnd,wm_User, 0, 0); SetForegroundWindow (FoundWnd) end DEL-9-10(60 z 62)

Sprawdzanie obecnoœci poprzedniego egzemplarza... Przeszukiwanie listy okien i w kodzie okna g³ównego dodaæ metodê obs³ugi tej wiadomoœci: type TForm1 = class(tform)... public procedure WMUser (var msg : TMessage); message wm_user; end;... procedure TForm1.WMUser (var msg : TMessage); begin Application.Restore end; DEL-9-10(61 z 62)

Na zakoñczenie prezentacja... DEL-9-10(62 z 62)