Po uruchomieniu Lazarusa należy wybrać z paska górnego opcję Projekt i następnie Nowy Projekt. Pokaże się okno:

Podobne dokumenty
Nazwa implementacji: Kółko i krzyżyk w Lazarusie. Autor: Piotr Fiorek Andrzej Stefaniuk

PROGRAM: WYSZUKANIE LICZBY MAKSYMALNEJ

Wprowadzenie do systemu Delphi

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Wykład 7: Lazarus GUI

Delphi. Lazarus. Kompilatory Delphi. Linki do stron o Delphi

Niniejszy ebook jest własnością prywatną.

1. Opis okna podstawowego programu TPrezenter.

Obsługa grafiki w Delphi, rysowanie na płótnie, obsługa myszki, zapisywanie obrazków do plików, bitmapy pozaekranowe.

Ćwiczenie z wykorzystaniem zmiennych i komponentu TGauge. TTimer co pewien czas. Gra. A jednak odlicza. Stoper. Aktualny czas, czyli zegar

Widok po uruchomieniu. Widok w trakcie gry

Zaprojektuj grę logiczną NIM. Program losuje w każdym rzędzie od 1 do 10 grzybów. Gracz

Delphi podstawy programowania. Środowisko Delphi

Edytor tekstu MS Word podstawy

I Tworzenie prezentacji za pomocą szablonu w programie Power-Point. 1. Wybieramy z górnego menu polecenie Nowy a następnie Utwórz z szablonu

Spis treści Szybki start... 4 Podstawowe informacje opis okien... 6 Tworzenie, zapisywanie oraz otwieranie pliku... 23

1. Dostosowanie paska narzędzi.

INSTRUKCJA DO ĆWICZENIA NR 4

Kultywator rolniczy - dobór parametrów sprężyny do zadanych warunków pracy

Niniejszy ebook jest własnością prywatną. Został zakupiony legalnie w serwisie Netpress.pl, będącym oficjalnym Partnerem Wydawcy.

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Utworzenie interfejsu graficznego za pomocą formularza użytkownika w VBA

Delphi 7 + Indy 10 Przykłady prostych aplikacji sieciowych

Instrukcja importu dokumentów z programu Fakt do programu Płatnik

etrader Pekao Podręcznik użytkownika Strumieniowanie Excel

Prezentacja multimedialna MS PowerPoint 2010 (podstawy)

Rejestracja faktury VAT. Instrukcja stanowiskowa

Makropolecenia w PowerPoint Spis treści

KROK 17 i 18. Cel: Tworzymy oddzielne okno - O autorze. 1. Otwórz swój program. 2. Skompiluj i sprawdź, czy działa prawidłowo.

Rys.1. Technika zestawiania części za pomocą polecenia WSTAWIAJĄCE (insert)

BAZY DANYCH Panel sterujący

Arkusz kalkulacyjny EXCEL

W otwartym oknie w zakładce Ogólne znajdujemy opcje Podpis. Po zaznaczeniu pola wyboru, w edytorze możemy zredagować dołączaną treść.

Ćwiczenia nr 4. Arkusz kalkulacyjny i programy do obliczeń statystycznych

W tym ćwiczeniu zostanie wykonany prosty profil cienkościenny, jak na powyŝszym rysunku.

UMOWY INSTRUKCJA STANOWISKOWA

Tworzenie prezentacji w MS PowerPoint

1. Wybierz polecenie rysowania linii, np. poprzez kliknięcie ikony W wierszu poleceń pojawi się pytanie o punkt początkowy rysowanej linii:

Badanie diody półprzewodnikowej

Szkolenie dla nauczycieli SP10 w DG Operacje na plikach i folderach, obsługa edytora tekstu ABC. komputera dla nauczyciela. Materiały pomocnicze

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

Instalacja i obsługa aplikacji MAC Diagnoza EW

Przykład rozwiązania tarczy w zakresie sprężysto-plastycznym

5.2. Pierwsze kroki z bazami danych

Ćw. I Projektowanie opakowań transportowych cz. 1 Ćwiczenia z Corel DRAW

5.4. Tworzymy formularze

INSTRUKCJA UŻYTKOWNIKA PORTALU SIDGG

W dowolnej przeglądarce internetowej należy wpisać poniższy adres:

1. Otwórz pozycję Piston.iam

Obliczenie azymutu ze współrzędnych wersja C++ Builder

1. Wprowadzenie. 1.1 Uruchamianie AutoCAD-a Ustawienia wprowadzające. Auto CAD Aby uruchomić AutoCada 14 kliknij ikonę

Ćwiczenie 6 Proste aplikacje - podstawowe komponenty.

Amortyzacja obliczenia ekonomiczne w informatyce.

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Lazarus dla początkujących, część III

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe

Edytor tekstu OpenOffice Writer Podstawy

TWORZENIE OBIEKTÓW GRAFICZNYCH

Przykład rozwiązania tarczy w zakresie sprężysto-plastycznym

Przypisy i przypisy końcowe

PRACA Z PLIKAMI I FOLDERAMI

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa

Tworzenie i modyfikowanie wykresów

Wstęp. Skąd pobrać program do obsługi FTP? Logowanie

Lazarus dla początkujących, część II

Instrukcja użytkownika systemu medycznego w wersji mobilnej. meopieka

Dodawanie grafiki i obiektów

Jeżeli w komputerze była już zainstalowana inna wersja Javy może pojawić się komunikat

Jak przygotować pokaz album w Logomocji

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Galileo v10 pierwszy program

Instrukcja instalacji programu serwisowego NTSN krok po kroku

Darmowa publikacja dostarczona przez Złote Myśli

Instalacja i obsługa generatora świadectw i arkuszy ocen

BRELOK DO KLUCZY. ZADANIE Stwórz breloczek z nazwą twojej szkoły 1. Szkic breloczka z napisem MAKER

Instrukcja Arkusz ZSZ

Niestandardowa tabela częstości

Instrukcja uŝytkowania programu

netster instrukcja obsługi

Trik 1 Edycja wykresu bezpośrednio w dokumencie Worda

INSTRUKCJA UŻYTKOWNIKA. Spis treści. I. Wprowadzenie II. Tworzenie nowej karty pracy a. Obiekty b. Nauka pisania...

Praktyczne wykorzystanie arkusza kalkulacyjnego w pracy nauczyciela część 1

Kancelaria zmiany w programie czerwiec 2011

14. TWORZENIE MAKROPOLECEŃ

Rysunek 1: Okno timeline wykorzystywane do tworzenia animacji.

1. Dockbar, CMS + wyszukiwarka aplikacji Dodawanie portletów Widok zawartości stron... 3

Edytor tekstu MS Word 2010 PL. Edytor tekstu to program komputerowy umożliwiający wprowadzenie lub edycję tekstu.

Symulacje inwertera CMOS

OPERACJE NA PLIKACH I FOLDERACH

Podstawowe informacje potrzebne do szybkiego uruchomienia e-sklepu

Co to jest arkusz kalkulacyjny?

learningpanel - materiały pomocnicze - JAK ZROBIĆ... Jak zrobić...

Informatyka II. Laboratorium Aplikacja okienkowa

Instrukcja korzystania z Systemu Telnom - Nominacje

INSTRUKCJA DO PROGRAMU EPANET 2.0 PL

Jak szybko wystawić fakturę w LeftHand? Instalacja programu

Transkrypt:

Po uruchomieniu Lazarusa należy wybrać z paska górnego opcję Projekt i następnie Nowy Projekt. Pokaże się okno: Należy wybrać Aplikacja, pojawi się puste okno Form1: Z zakładki standard należy wprowadzić obiekty: label i Edit poprzez kliknięcie na ikonę a następnie kliknięcie na formularzu Form1 w miejsce, gdzie chcemy wprowadzić element. Podobnie robimy wprowadzając obiekt Button Operując myszką należy ustawić względem siebie oba obiekty jak na rysunku poniżej: 1

Podwójne kliknięcie w klawisz Button1 powoduje przejście do okienka edytora źródeł w miejsce procedury procedure TForm1.Button1Click(Sen der: TObject); Wpisując pomiędzy i polecenie Halt; Uzyskujemy procedurę, która po wciśnięciu klawisza Button1 zatrzyma wykonywanie programu. Możemy sprawdzić działanie klawisza wciskając klawisz F9 lub przycisk Play na panelu górnym. W trybie edycji formularza, po zaznaczeniu przycisku Button1 możemy zmienić napis wyświetlany na przycisku korzystając z panelu Inspektora obiektów, znajdującego się po lewej stronie ekranu, zmieniając w polu caption napis z Button1 na np. STOP:

Podwójne kliknięcie w obszar formularza Form1 powoduje przejście do okienka edytora źródeł w miejsce procedury: procedure TForm1.FormCreate(Sender: TObject); 3

która to procedura odpowiada za to, co pojawia się na formularzu po uruchomieniu programu. Jeżeli chcemy zdefiniować zmienną T1 o wartości początkowej np. 1, która po uruchomieniu programu będzie się wyświetlać na formularzu (label1) i w okienku edit1. Należy na początek wprowadzić definicję zmiennej z wartością początkową w obszarze var programu, znajdującym się w górnej części programu w edytorze źródeł. Zapis : T1:real=1; Oznacza, że zdefiniowaliśmy zmienną typu rzeczywistego T1 o wartości początkowej 1. Po powrocie do procedury TForm1.FormCreate (Sender: TObject); Pomiędzy Begin i wpisujemy: label1.caption:= 'T1='+floattostr(T1); Edit1.Text:=floattostr(T1); label1.caption:= oznacza, że napis na etykiecie będzie taki jak po znaku równa się, przy czym T1 oznacza wprowadzenie tekstu takiego jak między, a floattostr(t1) oznacza zamianę zmiennej rzeczywistej na tekst. Edit1.Text:= oznacza, że w okienku Edit1 pojawi się wartość zmiennej T1. 4

Podczas wpisywania można korzystać z okienka asystenta, pojawiającego się automatycznie w czasie pisania: Wprowadzimy teraz kolejny przycisk, który tym razem będzie uruchamiał procedurę obliczeniową. Postępujemy tak samo jak w przypadku pierwszego przycisku. Okno Form1 będzie wyglądało jak poniżej: A w edytorze powstanie procedura procedure TForm1.ButtonClick(Sen der: TObject); Wpisanie w tej procedurze : T1:=strtofloat(edit1.text); label1.caption:= 'T1='+floattostr(T1); daje możliwość zmiany parametru T1 i zatwierdzenia tej zmiany przy wciśnięciu przycisku OBLICZ. Ponieważ stworzono kilka obiektów w programie, dobrze byłoby to zapisać. Dobrze jest pamiętać, aby zapisywać każdy projekt w oddzielnym katalogu, wykorzystując polecenie zapisz wszystko. Następnie wprowadzamy kolejne obiekty label i edit jak na rysunku poniżej 5

Należy zdefiniować trzy zmienne z wartością początkową: dt=0,001, Umax=1, i tp=1. I połączyć je z obiektami Label i Edit od nr do 4. Obszar var będzie wyglądał następująco: var Form1: TForm1; T1:real=1; dt:real=0.001; tp:real=1; Umax:real=1; Procedury TForm1.ButtonClick oraz TForm1.FormCreate przyjmą następujące postacie: procedure TForm1.ButtonClick(Sender: TObject); T1:=strtofloat(edit1.text); dt:=strtofloat(edit.text); tp:=strtofloat(edit3.text); Umax:=strtofloat(edit4.text); label1.caption:= 'T1='+floattostr(T1); label.caption:= 'dt='+floattostr(dt); label3.caption:= 'tp='+floattostr(tp); label4.caption:= 'Umax='+floattostr(Umax); procedure TForm1.FormCreate(Sender: TObject); label1.caption:= 'T1='+floattostr(T1); Edit1.Text:=floattostr(T1); label.caption:= 'dt='+floattostr(dt); Edit.Text:=floattostr(dt); label3.caption:= 'tp='+floattostr(tp); Edit3.Text:=floattostr(tp); label4.caption:= 'Umax='+floattostr(Umax); Edit4.Text:=floattostr(Umax); 6

Po tych zabiegach uruchomienie projektu spowoduje pojawienie się następującego okienka: Następnie należy zdefiniować zmienne typu rzeczywistego: czas, Us, x1 oraz stałe (poprzedzone poleceniem const) tmax=10; tu=5; tr=1; Powiązanie etykiet label od 5 do 7 ze stałymi spowoduje wyświetlenie ich wartości w odpowiednich miejscach jak na rys. poniżej. Tych wartości w czasie pracy programu nie będziemy zmieniać. 7

Kolejnym etapem będzie wprowadzenie obiektu Tshape, w którym będziemy rysować przebiegi funkcji. Obiekt wprowadzamy z zakładki Additional i po wprowadzeniu, klikamy na nim prawym klawiszem myszy i wybieramy polecenie rozmiar. Następnie zaznaczamy i wpisujemy jak na rysunku poniżej i potwierdzamy: Przy użyciu myszy dopasowujemy położenie prostokąta i przycisku STOP, ew. zmieniamy wielkość formularza. Wprowadzenie na początku procedury TForm1.ButtonClick poleceń: 8

Shape1.canvas.moveto(0,40); Shape1.canvas.lineto(640,40); Spowoduje narysowanie poziomej linii na środku prostokąta shape1, ale dopiero po wciśnięciu przycisku OBLICZ.. W tej samej procedurze wprowadzimy polecenie pętli repeat: Procedura przyjmie wówczas następującą postać: procedure TForm1.ButtonClick(Sender: TObject); shape1.canvas.moveto(0,40); Shape1.canvas.lineto(640,40); T1:=strtofloat(edit1.text); dt:=strtofloat(edit.text); tp:=strtofloat(edit3.text); Umax:=strtofloat(edit4.text); label1.caption:= 'T1='+floattostr(T1); label.caption:= 'dt='+floattostr(dt); label3.caption:= 'tp='+floattostr(tp); label4.caption:= 'Umax='+floattostr(Umax); czas:=0; repeat czas:=czas+dt; until czas>tmax; gdzie czas:=czas+dt; oznacza przyrost argumentu (w każdym kroku o dt), a czas>tmax to warunek wyjścia z pętli. Obliczenie nowej wartości czasu musi być w ostatniej linijce pętli. Wprowadzenie wzoru na x1 (obliczanie dowolnej funkcji) i polecenia Shape1.Canvas.Pixels spowoduje obliczanie w pętli wartości funkcji i rysowanie tych wartości na ekranie w określonej skali. czas:=0; x1:=0; repeat if czas>=tp then x1:=cos(*pi/t1*(czas-tp))+sin(*pi/t1*(czas-tp))*cos(*pi/t1*(czas-tp)); Shape1.Canvas.Pixels[round(640/tmax*czas),40-round(x1*100)]:=clred; czas:=czas+dt; until czas>tmax; Spróbuj rozszyfrować składnię polecenia shape1.canvas.pixels. Do czego służy polecenie round? Ostateczny efekt po uruchomieniu programu i wciśnięciu przycisku OBLICZ będzie jak poniżej: 9

Pełny listing programu poniżej: unit Unit1; {$mode objfpc}{$h+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls; type { TForm1 } TForm1 = class(tform) Button1: TButton; Button: TButton; Edit1: TEdit; Edit: TEdit; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Shape1: TShape; procedure Button1Click(Sender: TObject); procedure ButtonClick(Sender: TObject); procedure FormCreate(Sender: TObject); 10

private { private declarations } public { public declarations } var Form1: TForm1; T1:real=1; dt:real=0.001; tp:real=1; Umax:real=1; czas, Us, x1:real; const tmax=10; tu=5; tr=1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); halt; procedure TForm1.ButtonClick(Sender: TObject); shape1.canvas.moveto(0,40); Shape1.canvas.lineto(640,40); T1:=strtofloat(edit1.text); dt:=strtofloat(edit.text); tp:=strtofloat(edit3.text); Umax:=strtofloat(edit4.text); label1.caption:= 'T1='+floattostr(T1); label.caption:= 'dt='+floattostr(dt); label3.caption:= 'tp='+floattostr(tp); label4.caption:= 'Umax='+floattostr(Umax); czas:=0; x1:=0; repeat if czas>=tp then x1:=cos(*pi/t1*(czas-tp))+sin(*pi/t1*(czas-tp))*cos(*pi/t1*(czas-tp)); Shape1.Canvas.Pixels[round(640/tmax*czas),40-round(x1*100)]:=clred; czas:=czas+dt; until czas>tmax; 11

procedure TForm1.FormCreate(Sender: TObject); label1.caption:= 'T1='+floattostr(T1); Edit1.Text:=floattostr(T1); label.caption:= 'dt='+floattostr(dt); Edit.Text:=floattostr(dt); label3.caption:= 'tp='+floattostr(tp); Edit3.Text:=floattostr(tp); label4.caption:= 'Umax='+floattostr(Umax); Edit4.Text:=floattostr(Umax); label5.caption:= 'tmax='+floattostr(tmax); label6.caption:= 'tu='+floattostr(tu); label7.caption:= 'tr='+floattostr(tr); end. 1

Zmiana parametru np. T1 i ponowne przeliczenie powoduje, że w oknie Shape1 pojawia się nowy wykres, ale nie kasuje się stary. Można temu zaradzić pisząc np. polecenie rysowania prostokąta w tym kształcie na początku procedury TForm1.ButtonClick Polecenie posiada następującą składnię: shape1.canvas.rectangle (0,0,640,480); Kolejnym etapem będzie określenie funkcji wymuszającej trapezowej. Na początek określimy narastanie i wartość ustaloną. Aby tego dokonać należy w pętli repeat wprowadzić następujący zapis: if czas>0 then Us:=0; if czas>tp then Us:= Umax*(czas-tp)/tr; if czas>(tp+tr) then Us:=Umax; określa on wartości funkcji Us w każdym z rozpatrywanych rozdziałów, tzn 0-tp, tp-tr, tr-tmax. W celu narysowania tego przebiegu należy dodatkowo wprowadzić polecenie: Shape1.Canvas.Pixels[round(640/tmax*czas),40-round(us*100)]:=clblue; Zapis w edytorze źródeł wygląda następująco: a program po przeliczeniu: 13

Jeżeli chcemy mieć wpływ na czas narastania funkcji Us, należy zamienić stałą tr na zmienną z wartością początkową. Dokonujemy tego usuwając definicję tr z obszaru const i przenosimy do obszaru var, uzupełniając ją do następującej formy. tr:real=0.001; następnie do formularza dodajemy obiekt Edit5 i umożliwiamy zmiany parametru tr podobnie jak w przypadku obiektów Edit od 1 do 4. Ze względu na zależności matematyczne tr nie może przyjmować wartości zero, zatem minimalna wartość dla tr może wynosić tyle co dt i taką wartość przyjmiemy za początkową. Program pokaże wówczas następujące wykresy: Układy inercyjne II rzędu i oscylacyjne Zapis tego typu układów może być dwojaki: 14

T i1 d y + T dt i dy + y= ki Us dt d y dy + ω ξ +ω dt dt y= k ω i U Użyte oznaczenia to odpowiednio: Ti1 i Ti stałe czasowe współczynnik wzmocnienia k i ω ξ T i1 częstość drgań własnych nietłumionych współczynnik tłumienia względnego 1 = Ti = Ti 1 ξ ω s Ponieważ będziemy korzystać z drugiego wzoru, zatem należy wprowadzić odpowiednie elementy na Form1 zgodnie z rys. poniżej Oraz skojarzyć z nimi (znanym już sposobem) wszystkie parametry (zgodnie z rys. poniżej 15

Ponieważ w zapisie jest druga pochodna, należy rozbić układ na dwa równania, wprowadzając dodatkową zmienną y1 dy = y1 dt dy1+ ω ξ y1+ω dt y= k ω i U Uporządkowujemy zapis do przestrzeni zmiennych stanu: dy = y1 dt dy1 = ω ξ y dt 1 ω y+ k i s ω U s Wyznaczamy warunki początkowe (zerowe dla y, y1 i pochodnych) oraz przyjmujemy Us jako wymuszenie skokowe. Rozwiązanie równań polega na całkowaniu numerycznym metodą Eulera (teoretycznie znaną z modelowania). Wprowadzenie tego modelu do programu spowoduje pojawienie się następujących przebiegów: 16

Do uzyskania takiego ekranu niezbędne są zapisy wytłuszczone w listingu procedur przedstawionych poniżej: var Form1: TForm1; T1:real=1; dt:real=0.001; tp:real=1; Umax:real=1; czas, Us, x1, Ti1,Ti:real; dy1,dy,y1,y:real; tr:real=0.001; dzeta:real=1; omega:real=10; ki:real=1; const tmax=10; tu=5; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); halt; procedure TForm1.ButtonClick(Sender: TObject); shape1.canvas.rectangle (0,0,640,480); shape1.canvas.moveto(0,40); 17

Shape1.canvas.lineto(640,40); T1:=strtofloat(edit1.text); dt:=strtofloat(edit.text); tp:=strtofloat(edit3.text); Umax:=strtofloat(edit4.text); label1.caption:= 'T1='+floattostr(T1); label.caption:= 'dt='+floattostr(dt); label3.caption:= 'tp='+floattostr(tp); label4.caption:= 'Umax='+floattostr(Umax); tr:=strtofloat(edit5.text); label7.caption:= 'tr='+floattostr(tr); omega:=strtofloat(edit6.text); label8.caption:= 'w='+floattostr(omega); dzeta:=strtofloat(edit7.text); label9.caption:= 'dzeta='+floattostr(dzeta); ki:=strtofloat(edit8.text); label10.caption:= 'ki='+floattostr(ki); Ti1:=1/omega; Ti:=*Ti1*dzeta; label11.caption:= 'Ti1='+floattostr(Ti1); label1.caption:= 'Ti='+floattostr(Ti); czas:=0; x1:=0; y:=0;dy:=0;y1:=0;dy1:=0; repeat if czas>0 then Us:=0; if czas>tp then Us:= Umax*(czas-tp)/tr; if czas>(tp+tr) then Us:=Umax; dy:=y1; dy1:=-*omega*dzeta*y1-omega*omega*y+ki*omega*omega*us; y1:=y1+dy1*dt; y:=y+dy*dt; //if czas>=tp then x1:=cos(*pi/t1*(czas-tp))+sin(*pi/t1*(czas-tp))*cos(*pi/t1*(czas-tp)); //Shape1.Canvas.Pixels[round(640/tmax*czas),40-round(x1*100)]:=clred; Shape1.Canvas.Pixels[round(640/tmax*czas),40-round(us*100)]:=clblue; Shape1.Canvas.Pixels[round(640/tmax*czas),40-round(y*100)]:=clgreen; czas:=czas+dt; until czas>tmax; procedure TForm1.FormCreate(Sender: TObject); label1.caption:= 'T1='+floattostr(T1); Edit1.Text:=floattostr(T1); label.caption:= 'dt='+floattostr(dt); Edit.Text:=floattostr(dt); label3.caption:= 'tp='+floattostr(tp); 18

Edit3.Text:=floattostr(tp); label4.caption:= 'Umax='+floattostr(Umax); Edit4.Text:=floattostr(Umax); label5.caption:= 'tmax='+floattostr(tmax); label6.caption:= 'tu='+floattostr(tu); Edit5.Text:=floattostr(tr); label7.caption:= 'tr='+floattostr(tr); Edit6.Text:=floattostr(omega); label8.caption:= 'w='+floattostr(omega); Edit7.Text:=floattostr(dzeta); label9.caption:= 'dzeta='+floattostr(dzeta); Edit8.Text:=floattostr(ki); label10.caption:= 'ki='+floattostr(ki); Ti1:=1/omega; Ti:=*Ti1*dzeta; label11.caption:= 'Ti1='+floattostr(Ti1); label1.caption:= 'Ti='+floattostr(Ti); Po zmianie pewnych parametrów otrzymamy: 19