Wykład 2 struktura programu elementy języka typy zmienne wyrażenia arytmetyczne funkcje standardowe
Modularna struktura programu składowe struktury: program główny (projekt) – rozszerzenie dpr moduł (jednostka kompilowalna) – plik pas – kod źródłowy opisujący jeden formularz podprogram (procedura, funkcja) Po kompilacji – plik exe przykład – zapis projektu 1.2
przykład okno kodu układ: program, moduł - jednopoziomowy podprogram - hierarchiczny struktura programu, modułu, podprogramu: - nagłówek - opis obiektów /część deklaracyjna, opisowa - zapis akcji /część operacyjna, akcyjna składowe: - deklaracje, definicje - instrukcje (akcje wykonywane) - komentarze (- dyrektywy) przykład okno kodu 1.3
ogólna struktura programu (podprogramu): unit nazwa; interface implementation Tu procedury end. [program, function] procedure nazwa(parametry); // nagłówek { inny dłuższy ................................................ komentarz } uses ... // deklaracja modułów const ... // definicja stałych type ... // definicja typów var ... // deklaracja zmiennych begin instrukcja_1; // operacje instrukcja_2; . . . end. część opisowa – deklaracje i definicje! część akcyjna – instrukcje do wykonania odwołania do składowych obiektów (właściwości, metody) - kwalifikowane Application.Terminate; Nadawca.Dane.Color := clGreen; Odbiorca.Wynik.Text := Nadawca.Dane.Text; Odbiorca.Wynik.Clear; Będziemy używać dla komponentów, ale OBIEKTY dokładniej poznamy później 1.4
Język DELPHI - ObjectPascal - podstawowe elementy Alfabet języka symbole podstawowe (pascalowe) Słowa kluczowe nazwy zastrzeżone – np. begin, string, var, type, array, record, for, if, while, repeat i inne Identyfikatory (nazwy) - także wprowadzone przez programistę ciąg liter (także _ ) lub cyfr, rozpoczynający się od litery, różny od słowa kluczowego - nierozróżnialne duże i małe litery !!! Nie wolno spacji!!! Stałe numeryczne - liczby całkowite - ciąg cyfr, ewentualnie poprzedzonych przez + - rzeczywiste - zapis zwykły m.n (UWAGA: koniecznie KROPKA dziesiętna) - zapis wykładniczy (naukowy) jak Excelu, ale KROPKA DZIESIĘTNA!!! Stałe łańcuchowe – tekstowe - ciąg znaków w apostrofach, np. 'Pan Tadeusz' Stałe logiczne – true false 5
var lista_nazw_zmiennych: integer; lista_nazw_zmiennych: real; Zmienne całkowite i rzeczywiste (proste) Zmienne przechowują dane – muszą być deklarowane ich nazwy (identyfikatory) i przyporządkowanie do typu Postać deklaracji zmiennych typ1, typ2... to typy standardowe lub definiowane var lista nazw zmiennych: typ1; lista nazw zmiennych: typ2; ....; Postać deklaracji zmiennych: var lista_nazw_zmiennych: integer; lista_nazw_zmiennych: real; np.: var i, j, k: integer; a, b, suma: real; integer, real to typy standardowe Utworzonym zmiennym przydzielana jest pamięć – o wielkości zależnej od typu zmiennej ! Deklaracje ułatwiają kontrolę poprawności kodu i kontrolę wartości zmiennych – przynależności do typu
Typy danych - standardowe Typy liczbowe całkowite: Integer i inne (Byte, Word ,Int64 ...) (zobaczyć w Help) – różny zakres i zajętość pamięci: 4 bajty dla typu integer zakres: -2147483648..2147483647 czyli -231 .. 231-1 rzeczywiste podstawowy Real 5.0 x 10^-324 .. 1.7 x 10^308 i ujemne , 15-16 CYFR ZNACZĄCYCH pamięć - 8 bajtów i inne: Single, Double, Extended - różnią się też zakresem Typ znakowy: Char - 1 znak – 1 bajt Typ tekstowy (łańcuchowy): String (jak AnsiString ~2^31 znaków) można deklarować np. String[20] ograniczając długość – tablica (wektor) znaków Typ logiczny: Boolean (wartości true i false)
Przykład var x:real; y:integer; napis: string; litera:char; begin x:= 2.5; y := -100; napis:= 'To jest napis'; litera :='A'; y := y+3; .... end blok deklaracji nadawanie wartości w części wykonawczej
Typy definiowane explicit Typ wyliczeniowy Definicja: ( lista wartości ) np. var dzien : (po, wt, sr, cz, pi, so ,ni); Typ okrojony Typ okrojony wyznacza podzbiór dowolnego typu porządkowego (całkowitoliczbowy, char, wyliczeniowy, boolean) zwanego typem bazowym: w1 .. w2 gdzie w1 <= w2 var dni : 1..100; znaki : 'a' .. 'z'; Inne (strukturalne) poznamy potem – tablicowy, rekordowy, plikowy
Typy można definiować, a potem je wykorzystać używać w definicji zmiennej Postać definicji typu: type dni = (po, wt, sr, cz, pi, so ,ni); UWAGA! znak = .. a teraz deficja zmiennej tego typu var dzien : dni; UWAGA! znak : Wyjaśnienie: dni to nazwa typu, dzien to identyfikator (nazwa) zmiennej, tylko w niej można przechowywać wartości i przypisywać dane, np. dzien := wt; //to jest instrukcja wykonywana (przypisania, nadania wartości) Inne (strukturalne) poznamy potem : tablicowy, rekordowy, plikowy, obiektowy
Wyrażenie arytmetyczne Postać - sensowna kombinacja – podobnie jak w Excelu: argumenty: - stałe - ich wartości - zmienne - ich wartości - wywołania funkcji - ich wartości operatory - jednoargumentowe - dwuargumentowe nawiasy - kolejność operacji wyrażenie stała wyrażenie identyfikator zmiennej wyrażenie funkcja (wyrażenie) wyrażenie wyrażenie operator wyrażenie 12
Operatory: Operator Znaczenie Grupa + powielenie znaku jednoargumentowe - zmiana znaku * mnożenie multiplikatywne / dzielenie rzeczywiste div dzielenie całkowite mod reszta z dzielenia całkowitego dodawanie addytywne odejmowanie Zasady te poznaliśmy w Excel'u ale uwaga: nie ma tu znaku ^ jako operatora potęgowania 13
kolejność wykonywania operacji nawiasy - w pierwszym rzędzie ważność operatorów: jednoargumentowe multiplikatywne addytywne w grupie jednakowo ważnych - od lewej do prawej funkcje standardowe (predefiniowane) - wywołanie nazwa_funkcji( argument ) lub argumenty, oddzielane przecinkami wartość wyrażenie - rekurencja ogólnie: zawsze nawias typ argumentu i wyniku określony 14
zaokrąglenie do całkowitej typ argumentu abs real/integer wartość bezwzględna int real część całkowita frac część ułamkowa round integer zaokrąglenie do całkowitej trunc obcięcie do całkowitej maxint maksymalna wartość całkowita stała exp funkcja wykładnicza earg ln logarytm naturalny ln arg arg 0 sqr real integer kwadrat arg2 sqrt pierwiastek kwadratowy arg 0 sin sin arg arg w radianach cos cos arg arctan arctg arg wynik w radianach pi 15
funkcja power (podstawa, wykładnik) - potęga potrzebna deklaracja biblioteki math w sekcji uses modułu formularza uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Math; ... procedure TForm1.Button1Click(Sender: TObject); var x:real; begin x:=power(2.1,4.563);
Funkcje dla tekstów Znaczenie Typ funkcji Typ argumentu Przykład Nazwa Typ funkcji Typ argumentu Przykład znak następny succ znakowy succ ('g') 'h' znak poprzedni pred pred(' j ') ' i ' znak o podanym kodzie ASCII chr całkowity chr(49) '1' kod znaku ord ord('1') 49 długość tekstu length łańcuchowy length('alfa') 4
Przykłady wyrażeń: 18
Podstawowe instrukcje proste Instrukcja przypisania - nadanie wartości zmiennej w części wykonawczej programu zmienna := wyrażenie; Np.: var N:integer; suma:real; begin N := -234; suma := 5.4* N; suma := suma +1; // zmiana wartości zmiennej .... end oczywiście N i suma muszą być zadeklarowane - przyporządkowane do typu ZGODNOŚĆ TYPÓW – wyrażenie musi mieć typ zgodny z typem zmiennej ZMIENNEJ rzeczywistej można nadać wartość całkowitą ZMIENNEJ łańcuchowej można nadać wartość znakową 20
Funkcje konwersji tekstowo-numerycznej: Np. wprowadzanie i wyprowadzanie danych - z/do pola Edit Edit posiada właściwość text typu łańcuchowego – konieczna konwersja, aby wykonywać obliczenia na wpisanych danych liczbowych i aby wyświetlić wyniki Funkcje konwersji tekstowo-numerycznej: Liczba na łańcuch tekstowy intToStr( v: integer ): string; - integer string floatToStr( v: real ): string; - real string Łańcuch tekstowy na liczbę strToInt( s: string ): integer; - string integer strToFloat( s: string ): real; - string real UWAGA: liczbę da się zawsze zamienić na łańcuch znaków, lecz nie zawsze odwrotnie !!!
Prosty program procedure TForm1.Button1Click(Sender: TObject); var a,b,c:integer; //całkowite begin a:=StrToInt(Edit1.Text);//z Edit do zmiennej b:=StrToInt(Edit2.Text); //z Edit do zmiennej c:=a+b; Edit3.Text:=IntToStr(c);// do Edit end;
Czyli.. podsumowując procedure nazwa (....); type nazwa_typu = definicja; //definicja typu var nazwa_zmiennej : nazwa_typu; //definicja zmiennej begin //wykorzystanie zmiennej w programie nazwa_zmiennej := wartość_zgodna_z_typem; end;