Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
OpublikowałCyryl Michalczyk Został zmieniony 10 lat temu
1
Wykład 3 przykłady operacje na tekstach wyrażenia logiczne
instrukcja sekwencji instrukcja warunkowa i wyboru CheckBox i Radiogroup obsługa błędów
2
Funkcja random – generator liczb losowych
procedure TForm1.Button1Click(Sender: TObject); var x:integer; begin Randomize; //inicjacja generatora x:=random(100);// losuje ze zbioru 100 liczb całkowitych Edit1.Text:=IntToStr(x) end; procedure TForm1.Button2Click(Sender: TObject); var x:real; Randomize; x:=random; //losuje liczbę rzecz. w przedziału (0 ;1) Edit2.Text:=FloatToStr(x)
3
Operator mod - przykład
procedure TForm1.Button1Click(Sender: TObject); var a,b,reszta:integer; begin a:=StrToInt(Edit1.text); b:=StrToInt(Edit2.text); reszta:=a mod b; //UWAGA na spacje Edit3.Text:= IntToStr(reszta); end;
4
Standardowe komponenty graficzne VCL
Formularz (okno) - Form właściwości name: string - nazwa obiektu (formularza) caption: string - tytuł okna menu: - główne - obiekt popUpMenu: - kontekstowe - obiekt Przycisk akcji - Button właściwości name: string - nazwa obiektu (przycisku) caption: string - tytuł przycisku (&z - litera klawisza skrótu) zdarzenia i metody onClick - obsługa kliknięcia 4
5
Pole edycji jednowierszowej – Edit
otrzymywanie lub wprowadzanie danych tekstowych pełna edycja informacji zaznaczanie wycinka tekstu i operacje właściwości (ważniejsze) text: string - treść wiersza zdarzenia i metody właściwość text := wartość_tekstowa ustawienie (wpisanie) zdarzenie onClick - obsługa kliknięcia z. onChange - dowolna zmiana zawartości procedura clear - wyzerowanie pola Edit1.Clear; 5
6
Stałe, zmienne i wyrażenia tekstowe
stałe - znakowe i tekstowe napisy - pojedyncze znaki, ciągi (łańcuchy) znaków postać '.....' Przykłady: 'Nowak' stałe znakowe - typ char , np. 'A' zmienne łańcuchowe (tekstowe) - typ string np. 'Pan Kowalski' - deklaracja zmiennej string[ rozmiar ] istnieje mechanizm selekcji znaku zmienna[ pozycja ] znak wyrażenia tekstowe - podobnie jak arytmetyczne: argumenty: - stała tekstowa - zmienna znakowa lub tekstowa - wywołanie funkcji o wartości znakowej lub tekstowej operator jeden łączenia (konkatenacji) "+" Np.: 'Object' + 'Pascal' ObjectPascal 6
7
Długość tekstu procedure TForm1.Button1Click(Sender: TObject); begin
edit2.Text:=IntToStr(Length(Edit1.Text)); end; procedure TForm1.Button2Click(Sender: TObject); var tekst:string[100]; tekst:=edit1.Text; edit3.text:=tekst[0];//znak w pozycji 0 edit4.text:=IntToStr(ord(tekst[0])); // kod ASCII tego znaku
8
Stałe, zmienne, wyrażenia i operacje logiczne
stałe true prawda "1" tak false fałsz "0 " nie zmienne logiczne - typ boolean np.: var jest_zwolniony: boolean; wyrażenia logiczne - podobnie jak arytmetyczne: argumenty: - stałe logiczne - zmienne logiczne - funkcje o wartościach logicznych - relacje nawiasy - ( ) operatory 8
9
relacja (porównanie) W1 operator W2 wartość true | false W1, W2 obydwa wyrażenia numeryczne (typu Real lub Integer) obydwa znakowe lub tekstowe (porównanie alfabetyczne) operator znaczenie = równy <> nierówny > większy >= większy lub równy < mniejszy <= mniejszy lub równy Np.: k > 2 suma <= 10.0 sin( 2*x + a) >= 0.5 nazwisko >= 'K' ostrożnie z operatorem = dla wyrażeń rzeczywistych 9
10
Operatory logiczne negacja not arg np.: not( k<5 ) k >= 5
koniunkcja (iloczyn logiczny) WB1 and WB2 np.: ( k >= -5 ) and ( k <= 5 ) -5 k +5 alternatywa (suma logiczna) WB1 or WB2 np.: ( k < -5 ) or ( k > 5 ) | k | > 5 Wykorzystanie relacji i wyrażeń logicznych: w instrukcji przypisania (do zmiennej typu Boolean) w instrukcji warunkowej w iteracjach warunkowych 10
11
begin end Instrukcja złożona (sekwencji)
Przy konieczności wykonania więcej niż jednej instrukcji wewnątrz dowolnej instrukcji strukturalnej stosujemy tzw. instrukcję złożoną (sekwencji). Także instrukcje bloku programowego stanowią instrukcję sekwencji. Postać: begin ciąg instrukcji end
12
Instrukcja warunkowa "if. then. else" ("jeśli. to
Instrukcja warunkowa "if.. then..else" ("jeśli..to.. w przeciwnym przypadku„) strukturalna – w jej skład wchodzi inna instrukcja Zastosowanie: sytuacje decyzyjne postać skrócona if wyrażenie_logiczne then instrukcja; Wb postać pełna if wyrażenie_logiczne then instrukcja_1 else instrukcja_2; Instrukcją może być dowolna instrukcja (także inny if lub instrukcja sekwencji, jeśli ma być wykonane kilka działań) 12
13
Przykłady UWAGA: instrukcja przed else nie może się kończyć średnikiem
if x>0 then x:=x-100; if x>0 then x:=x-100 else x:=x+10; if (x>0) or (y-2>=5) then begin x:=x-100; y:= 2.7 end else x:=x+10; y:=-2.1 end; UWAGA: instrukcja przed else nie może się kończyć średnikiem
14
- zmiana a, b lub c chowa pola wyników i napis
przykład: Założenia: - zmiana a, b lub c chowa pola wyników i napis - gdy delta < 0 tylko napis "Wynik - brak pierwiastków" - gdy delta = 0 napis "Wynik - jeden pierwiastek podwójny" widać jedno pole wyniku i wartość pierwiastka - gdy delta > 0 napis "Wynik - dwa pierwiastki" widać dwa pola wyniku i dwie wartości pierwiastków - i inne, np. podwójne kliknięcie w tło okna kasuje pola współczynników, chowa pola wyników 14
15
składowe okna i programu:
- w_a, w_b, w_c - pola współczynników - wynik - etykieta Label - tekst informacyjny o wyniku - x1, x2 - pola Edit wyniku - a, b, c, delta - zmienne wewnętrzne procedury wyznaczania wyniku - wyznacz, koniec - procedury obsługi kliknięcia przycisków 15
16
Schemat blokowy: 16
17
Równanie kwadratowe procedure TForm1.Button1Click(Sender: TObject);
var a, b, c, // współczynniki równania delta: real; begin if (w_a.text='') or (w_b.text='') or (w_c.text='') then ShowMessage ('Wpisz dane współczynniki'); exit; // zakończenie procedury end; a := strToFloat(w_a.text); b := strToFloat(w_b.text); c := strToFloat(w_c.text); delta := b*b - 4*a*c;
18
if delta < 0 then begin
form1.wynik.Caption := 'Wynik - brak pierwiastków'; x1.visible := false; x2.visible := false; end else if delta = 0 then begin //instrukcja sekwencji form1.wynik.Caption := 'Wynik - pierwiastek podwójny'; x1.text := 'x1=x2='+floatToStr( -b/2/a ); x1.visible := true; x2.visible := false; else delta := sqrt( delta ); form1.wynik.Caption := 'Wynik - dwa pierwiastki:'; x1.text := 'x1 = ' + floatToStr( ( -b - delta )/2/a ); x2.text := 'x2 = ' + floatToStr( ( -b + delta )/(2*a) ); x1.visible := true; x2.visible := true; end;
19
Jeszcze jedno zastosowanie operatora mod
if (x mod 2)=0 then Edit1.Text:='Liczba parzysta' else Edit1.Text:='Liczba nieparzysta');
20
Instrukcja wyboru – case..of..
Instrukcja case umożliwia alternatywne wykonanie wielu instrukcji w zależności od wartości wyrażenia typu porządkowego. Postać instrukcji: case w of s1 :Instrukcja_1 ; s2 :Instrukcja_2 ; .... [ else Instrukcja_k ] end ; w - wyrażenie–selektor typu porządkowego (np. całkowitego, znakowego), s - stałe wyboru (etykiety wyboru) w możliwej postaci: s - pojedyncza wartość, s1, s2, sn - lista wartości, s1..s2 - zakres wartości (okrojenie), możliwe połączenie listy i zakresów, np. s1..s2, s3, s4 20
21
Przykład: var miesiac : 1..12 ; dni : 1..31 ; begin
miesiac := StrToInt (Edit1.Text) ; case miesiac of 2 : dni := 28 ; {pojedyncza wartość} 4, 6 , 9, 11 : dni := 30 ; {lista} 1..12 : dni := 31 ; {zakres} {lub else dni := 31} end ; end; 21
22
Wykorzystanie instrukcji warunkowej i wyboru
CheckBox – pole wyboru opcji typu Tak/Nie Właściwości: Checked:Boolean State:(cbUnchecked,cbChecked, cbGrayed ) if Checkbox1.Checked then.... else .. if jakiś warunek then.... Checkbox1.State:=cbChecked
23
RadioGroup Obsługa programowa: zdarzenie onClick
Właściwości Items:TStrings => edytor elementów grupy Itemindex:Integer – numer wybranego elementu liczony od 0 Obsługa programowa: zdarzenie onClick case Radiogroup1.Itemindex of 0: Instrukcja1; 1: Instrukcja2; 2: Instrukcja3; end;
24
DELPHI - PODOKNA KOMUNIKATÓW ShowMessage - komunikat informujący
związane są z osobnymi oknami przekazują informację dla użytkownika, wymagającą podjęcia przez niego decyzji: - komunikat informujący - możliwy też komunikat z dialogiem ShowMessage - komunikat informujący procedura ShowMessage( wyrażenie tekstowe ) - pokazuje tekst w dodatkowym oknie z przyciskiem OK - w pasku tytułowym nazwa aplikacji (programu .exe) Można też zaprojektować Form i.. Form2.Show 24
25
Błędy składniowe – kompilacja się nie uda
wykonania (np. dzielenie przez 0) Obsługa błędów wykonania: przy pomocy instrukcji if, np. if y<>0 then wynik:= x/y else ShowMessage('Dzielnik równy 0'); - przy pomocy instrukcji try – obsługa wyjątków
26
DELPHI - WYJĄTKI try ... except try ... finally
błąd generowany w czasie wykonywania programu, np. gdy dzielimy przez zero inne zdarzenie generowane w czasie wykonywania programu, np. stwierdzamy, że jest jakaś sytuacja niedopuszczalna do obsługi sytuacji wyjątkowych służą konstrukcje try ... except try ... finally instrukcja: try // instrukcje wykonywane na bieżąco z podejrzeniem błędu except // instrukcje wykonywane // w razie wystąpienia błędu end try . . . except on typ_wyjątku do instrukcja .... else instrukcja; ... end
27
Niektóre błędy wykonania – klasa Exception:
201 EDivByZero całkowite 218 EPrivilege 202 ERangeError 219 EInvalidCast 203 EStackOverflow EVariantError 203 EOutOfMemory 215 EIntOverflow 204 EInvalidPointer 216 EAccessViolation 205 EOverflow 217 EControlC 206 EUnderflow 207 EInvalidOp dla konwersji – EConvertError dzielenie rzeczywiste przez 0 - EZeroDivide Obsługa wyjątków standardowo tylko poza Delphi – uruchomienie pliku exe Chyba, że w Tools –Debugger Options - Language Exceptions odznaczymy pole Stop on Delphi exceptions to wówczas wyjątki obsługiwane w środowisku
28
Przykład 1: try ... except on EZeroDivide do showMessage( 'Dzielenie przez zero' ); on EOverflow do showMessage( 'Przekroczenie zakresu' ); on EMathError do showMessage( 'Błąd matematyczny' ); end;
29
Przykład 2: procedure TForm1.Button1Click(Sender: TObject);
var x,y,wynik:integer; begin x:=StrToInt(Edit1.Text); y:=StrToInt(Edit2.Text); try wynik:=x div y; except on EDivByZero do ShowMessage( 'Dzielenie całkowite przez zero' ); end; Edit3.Text:=IntToStr(wynik); procedure TForm1.Button2Click(Sender: TObject); var x,y,wynik:real; x:=StrToFloat(Edit1.Text); y:=StrToFloat(Edit2.Text); wynik:=x/y; on EZeroDivide do ShowMessage( 'Dzielenie rzeczywiste przez zero' ); Edit3.Text:=FloatToStr(wynik);
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.