Języki programowania
Wykład 1
Język programowania – sztuczny język składający się ze skończonego zbioru reguł zwanych składnią. Służy do przygotowywania poleceń dla komputera
Programowanie – umiejętność pisania programów i umiejętność rozwiązywania problemów
Program komputerowy – zbiór ułożonych w odpowiedniej kolejności rozkazów, z których każdy reprezentuje elementarną operację.
Większość programów powstaje w formie kodu źródłowego utworzonego za pomocą edytora plików tekstowych. Kod źródłowy jest następnie interpretowany lub kompilowany na język maszynowy faktycznie wykonywane przez komputer.
Definiując dowolny język programowania należy podać:
Zbiór dopuszczalnych znaków
Reguły tworzenia poprawnych zdań
Reguły interpretujące znaczenie poszczególnych słów
Przykłady języków programowania:
Język maszynowy, asembler, Fortran, C, C++, C#, Pascal, Java, PHP
Poziom języka:
Języki wysokiego poziomu (BASIC, C, Pascal, C#)
Języki niskiego poziomu (asembler, język maszynowy)
Języki niskiego poziomu:
Najbardziej efektywne
Trzeba znać architekturę systemu komputerowego oraz działanie mikroprocesora
Bardzo czasochłonne
Język maszynowy:
Ciąg zer i jedynek
Można heksadecymalnie upraszczać (76 z 0111 0110)
Asembler:
Każdy procesor ma swój własny język asembler
Jeden rozkaz w asemblerze odpowiada jeden rozkaz w języku maszynowym
Mnemonik – rozkaz w asemblerze (zastąpienie binarnego)
Tłumacz (translator) to też asembler
Trudne
Pełne wykorzystanie możliwości komputera
Wykonywane bardzo szybko i zajmują mało miejsca w pamięci
Języki wysokiego poziomu:
Przypominają język naturalny (słowa i składnia)
Każdemu poleceniu w j. wysokiego poziomu odpowiada ciąg poleceń w j. maszynowym
Tłumaczenie dokonuje się podczas procesu kompilacji
Kompilacja – tłumaczenie na j. maszynowy za pomocą programu tłumaczącego (kompilatora)
Zajmują więcej miejsca i wykonuje się wolniej
Przykładowy rozkaz w asemblerze:
EB03 JHP SHORT NEXT
EB – z heksadecymalnego kod operacji
03 – przesunięcie o 3 kroki
JHP – mnemonik
SHORT NEXT – argument
Rodzaje języków programowania:
Proceduralne (C, Pascal, Fortran) – zapisuje się procedury, które wykonuje komputer
Deklaratywne (COBOL, PROLOG, LISP, SQL) – wyszukuje danych w oparciu o pytania
Obiektowe – tworzysz interfejs bardzo łatwo, gotowe obiekty
Procedura – moduł programu wykonujący określone zadanie (program mogący działać samodzielnie)
Podstawy Turbo-Pascala
TP i BP umożliwia:
- edycję programów
- kompilację programów
- uruchamianie programów
- śledzenie programów
Zbiór znaków:
- rozróżnia A…Z, a…z
- kreska _
- cyfry
- znaki specjalne np. spacja
- {komentarz}
- @ adresy obiektów
- $ stałe
- # numer znaku w tabeli ASCII
- znaki sterujące z kodu ASCII od 0 do 31
- := przypisanie
- <> <= >= operatory relacji
- słowa kluczowe
- dyrektywy np. index
Identyfikatory – ciąg liter i cyfr zaczynający się od litery (do 63 znaków). Służą do oznaczania w programach stałych, zmiennych itd.
Liczby (całkowite, rzeczywiste)
$A – 16-stkowo
#127 – znak ASCII 127
# $ 75 – znak ASCII 16-stkowo
Łańcuchy – ciąg znaków
Literały logiczne (true, false – wartości logiczne)
Komentarze i separatory {….} // spacja, ENTER
Struktura programu;
PROGRAM Nazwa_Programu; {Nagłówek programu}
USES {Deklaracja modułów}
{Początek części opisowej}
LABEL - etykiety, definiowanie ich
CONST - definiowanie stałych
TYPE - definiowane typy (zbiór wartości, które mogą przyjmować zmienna danego typu)
VAR - definiujemy zmienne
PROCEDURE - definiowanie procedur
FUNCTION - definiowanie funkcji
{Koniec części opisowej}
BEGIN
{Część wykonawcza programu}
END. {Musi być kropka}
Wykład 2
Console Application Struktura
PROGRAM Nazwa
{$APPTYPE CONSOLE}
USES {deklaracja modułów}
SysUtils
LABEL {…… część opisowa}
BEGIN
{treść programu}
END.
Deklaracja modułów
USES – umożliwia zdefiniowanie dowolnej liczby modułów np. crt, dos, graph
Moduły służą do grupowania funkcji i procedur w biblioteki oraz umożliwiają niezależne pisanie poszczególnych
Deklaracje etykiet:
LABEL – deklarujemy zaraz po deklaracji modułów. Powodują one skok do określonej części programu
(GOTO) np.
LABEL skok_1,2;
BEGIN
GOTO skok_1;
……
END.
Definicja stałych:
Stałe (CONST) – po label, przypisanie stałej wartości. NIE może być zmienna w programie. Gdy złożona to definiujemy.
CONST MaxWysokość=100;
CONST MaxWysokość:integer=1000;
CONST MaxWysokość:real-50;
x:byte=12
Deklaracje typu (TYPE)
Typ – zbiór wartości jakie może przyjmować zmienna (standardowe – predefiniowane, niestandardowe – wprowadzane rędznie do złożonych)
BYTE = {0,1,2,…..,255}
TYPE Dzien=(pon,wt,sr,czw,pt,sob,nie);
x=real;
Numer=Integer
Wacek=array [1..10] of real
Array tablica
Deklaracje zmiennych VAR
Deklarujemy zmienne, które muszą być zdefiniowane
W C++ rozróżniamy duże litery
VAR
Wynik,y,z: Byte;
I:integer;
Definicje procedur i funkcji
PROCEDURE a FUNCTION – różnica składni
Jednoznaczna nazwa
Ustalony sposób wymiany informacji
Służą do tego (wyizolowane) i można je wielokrotnie używać i można uczynić program bardziej przejrzystym
FUNCTION – ma zwrócić wartość (zazwyczaj 1)
PROCEDURE – zwracana wartość ma złożoną strukturę
Definicja procedury:
PROCEDURE Nazwa (lista parametrów); ale można pominąć
{Część opisowa}
BEGIN
{ciągi instrukcji}
END.
Deklaracja funkcji:
FUNCTION Nazwa (lista parametrów);
{część opisowa}
BEGIN
{ciąg instrukcji}
Nazwa:=a; //lub Result:=a;
END.
Typy danych i ich opis
Każda zmienna w programie ma swoją nazwę (identyfikator) i przyjmuje wartość z określonego zbioru: Typu
Typy proste
Porządkowe – każdy element ma swój następnik
Wyliczeniowy
Całkowity
Logiczny
Znakowy
Okrojony
Typy rzeczywiste – między 2 dowolne liczby można wstawić kolejną
Łańcuchowe – reprezentacja zbiorów znaków (łańcuchów)
Strukturalne – łączy w całość typy proste
Tablicowe – jednakowe typy
Rekordowe – różne typy
Zbiorowe – obliczenia wyniki
Plikowe - jego elementy przyjmują ograniczone wartości. Zmienna przyjmuje wartość 1 lub (..?)
Wskaźnikowe – przypisanie adresu, dwojaka informacja o elemencie (jaki typ)+(adres elementu)
Proceduralne – posługiwanie się procedurami jak zmiennymi
Obiektowy – mamy powiązane ze sobą struktury danych i funkcje, które na nich operują (różnica „f” i „a”-„e”)
Typy proste
Bardziej złożone struktury (tablice, rekordy)
Skończony, uporządkowany zbiór wartości
Wykonujemy operacje porównywania
Porządkowe – następnik i poprzednik
Rzeczywiste
Typ wyliczeniowy – max 256 elementów
TYPE identyfikator=(lista);
Elementy uporządkowane (ponumerowane 0,1…….n-1) n – liczba elementów
Typy całkowite – predefiniowane
ShortInt od -128 do 127
Byte od 0 do 255
Integer od-32768 do 32767
Word od 0 do 65535
LongInt duuuużo
Type
XX=integer
VAR
i,j:XX;
k:Integer
Typy logiczne (Boolean, ByteBool, WordBool, LongBool
True = 1
False = 0
Typ znakowy char – znaki ASCII, ramki, okienka
Typ okrojony
TYPE nazwa = stała 1 … stała 2;
Np.
TYPE
Litery = „A”.. „Z”
Zakres = 0 .. 100
Typ rzeczywisty
Real
Single – 4 bajty
Double – 8 bajtów
Extended – 12 bajtów
Comp od -263+1 do 263-1
Typy łańcuchowe
Reprezentowane ciągiem znaków
TYPE nazwa = string [rozmiar]; np. 20
Typy strukturalne
Opis obiektów złożonych
Podajemy typy składowe i metodę strukturyzacji + określony sposób dostępu
Tablicowy – elementy są identyczne pod względem typu
(łańcuchowe, proste, strukturalne)
Dostęp do elementów poprzez podanie indeksu
Indeks typu porządkowego
Określony zakres
TYPE nazwa = array [typy_indeksowe] of typ_składowy;
Np.
TYPE
V=array [1..5] of integer;
Macierze = array [1..20, 1..30] of real;
VV=array [1..10] of V typ uprzednio zdefiniowany typeception (5 wersów i 10 kolumn)
Typ rekordowy
Elementy = pola
Różne elementy
Poszczególne pola mogą być elementami złożonymi
Typ i identyfikator
TYPE nazwa = record
{lista deklaracji pól składowych}
End.
Np.
TYPE Data = record
Rok:Integer;
Miesiąc: 1..12; (typ okrojony)
Dzień: 1..31;
End.
Typ zbiorowy
1 el. <= 256
Zbiór potęgowy danego typu porządkowego
Zbiór potęgowy – zbiór wszystkich podzbiorów + zbiór pusty
TYPE nazwa = set of typ_porządkowy
Np.
TYPE Klasy = set of (1a,1b,1c,1d,1e)
Typ plikowy
Ściśle powiązane z plikami
Liczba elementów uzależniona od przebiegu wykonywania i skojarzenia pliku z fizycznymi zbiorami danych
Tablica – metoda dostępu do elementu – Indeksy
Plik – metoda dostępu do elementu – funkcje np. seek
TYPE nazwa = file of opis_typu (np. byte, integer)
Np.
Text – plik tekstowy predefiniowany
Przykład typów plikowych
TYPE
Dane = file of Integer;
Zbiór = file;
Wynik = Text; //lub TextFile (Delphi)
F = file of record
Rok: integer
Miesiąc: 1..12;
Dzień: 1..31;
End.
Typ wskaźnikowy – istnieje przez cały czas wykorzystywania części programu
Są to tzw. ZMIENNE STATYCZNE
ZMIENNE DYNAMICZNE – dzięki wskaźnikom
TYPE a=real;
TYPE WWW=6666;
6666=record
Tekst: string [50];
Liczba: Integer;
End.
VAR aaa:WWW;
Definiuje na wzór wskazań, które są typu.
Wykład 3
Procedury i funkcje mogą być traktowane jako:
Część programu wykonywana na skutek wywołania
Elementy, które mają być przypisywane do zmiennych i przekazywane do innych funkcji lub procedur jako parametry
TYPE nazwa = procedure (lista_parametrów);
TYPE nazwa = function (lista_parametrów);
Przykład:
TYPE
YY=procedure (x,y:Byte,var z)
FF=function (x,y:Byte):Boolean
Typ obiektowy
Obiekt – złożona struktura o ustalonej liczbie elementów składowych
Każdy element – pole (dana) i metodę (procedura lub funkcja)
Elementem opisującym operację wykonywaną na danych obiektach
POLE – (specyfikacja): typ i identyfikator
Opis metody składa się z: nagłówka procedury (funkcji). Konstruktora lub destruktora.
OBJECT ….. END
TYPE nazwa_typu object (opcjonalny element) dziedzictwo
Listy
End.
Dziedzictwo – identyfikator innego, zdefiniowanego wcześniej typu obiektowego. Jeśli element ten wystąpi, to definiowany typ dziedziczy wszystkie elementy podane w definicji typu obiektowego.
TYPE identyfikator_typu=object (dziedzictwo)
Lista_deklaracji_pól
Lista_deklaracji_metod
Sekcje_list
End.
Przykład:
TYPE punkt=object
x,y:integer
end;
TYPE piksel=object(punkt) zawiera punkt
End.
Zmienne
VAR
Zdefiniowane na zewnątrz procedur (funkcji) = GLOBALNE
Zdefiniowane wewnątrz procedur (funkcji) = LOKALNE
TYPE
P=real typ wskaźnikowy
Punkt=record typ rekordowy
X:real
Y:real
End;
W=array[1..10;1..20] of real
VAR
X,Y,Z:real;
A,B:W
aa:string[10]
Q:P; przypisanie do P
ss:Punkt; przypisanie do Punkt
Wyrażenia
Argumenty
Operatory: (wg priorytetu)
+, -(zmiany znaku), @ (adres zmiennej), NOT
*, /, DIV (dzielenie całkowite), MOD (reszta z dzielenia), AND, SHL, SHR(przesunięcie o n bitów left, right)
+ (suma), - (różnica), OR, XOR
=, <>, <, >, <=, IN (zawiera się – logiczny)
Instrukcje – czynności wykonywane na danych
Proste – bez instrukcji – składowych
Przypisania, skoku, puste, inline, wywołania procedury
Przypisania A:=1
Skoku GOTO
PROGRAM AAA
LABEL e1;
BEGIN
GOTO e1;
e1:x:=a+2
END.
Pusta ;
Wywołania procedury
Nazwa_procedury (lista_parametrów);
Np.
Oblicz;
Strukturalne
Złożone
BEGIN
….. } n instrukcji
END.
Warunkowe
If …… then
Case …. Of
Iteracyjne
For ….. do
While …. Do
Repeat …. Until
Wiążące
Asemblerowe
Instrukcja wyboru
CASE znak OF
„+”:BEGIN x:=x+1; z:=z-1; END;
„-„ :BEGIN x:=x-1; z:=z+1; END;
Gdy znak ≠ + 1 znak ≠ - end
Lub else
Może być też przedział np. 710
FOR TO
FOR DOWNTO
Np.
FOR i=1 TO i=10 DO Begin …. End;
FOR i=10 DOWNTO i=11 DO ….;
Przykład:
Oblicz iloczyn A4x4, B4x4, C=AxB
Cik=$\sum_{j = 1}^{4}{a_{\text{ij}} \circ b_{\text{jk}}}$
(Tu mnożenie macierzowe wiersz pierwszego razy kolumna drugiego daje pierwszy wyraz wyniku)
For i:=1 to 4 do
For k:=1 to 4 do
For j:=1 to 4 do
C[i,k]=C[i,k]+a[i,j]*b[j,k]
Instrukcja wiążąca:
WITH lista_zmiennych DO instrukcja
Np.
Liczba zespolona: Record
Re,im:REAL;
END;
WITH liczba_zespolona DO
BEGIN
Liczba_zespolona.re:=5
Liczba_zespolona.im:=2
END;
Ułatwienie operowania na złożonych strukturach danych np. rekord
Dla asemblera
ASM
Instrukcje_asemblera
END Funkcje i procedury
Wykład 4
Lista parametrów formalnych określa sposób w jaki lista ma być zastąpiona listą parametrów aktualnych przy wywołaniu funkcji lub procedury
Przez wartość (można na niech określać)
Procedure obl parametry formalne
//Wywoła
Obl (a, y+k, sqrt(w), j+5); parametry aktualne
Przez stałe (określonego typu)
Function Silnia (const n:byte) longint
Var i:byte;
Begin
Silnia:=1;
For i:=1 to n do Silnia=Silnia*i;
End;
Przez zmienne (z nich uzyskuje się informacje)
Var: a:longint; (deklaracja globalna)
Procedure obl_silnie (n:byte; var s:longint)
Var i:longint (deklaracja lokalna)
Begin
S:=1
If n<=12 then for i=1 to n do S:=S*1 else S:=-1
End;
Dane (wprowadzanie) Pamięć operacyjna(przetwarzanie) Procesor(Wyprowadzanie) Port wyjściowy elementu
Do obsługi fizycznych danych = pliki
Pliki:
Zdefiniowane
Niezdefiniowane
Tekstowe
Np.
TYPE
R=File of real;
Z=File of record
Re,im:Real
End.
TYPE
ZZ=File;
File of text
Dostęp do pliku – zmienna plikowa
TYPE
R=File of real
Z=File of record
Re,im:Real
END;
Var
F:tekst
Zbiór:R; {Zbiór: File of real}
AA: File of integer;
Zbiorek: Z;
ZZ: file;
Zmienna plikowa skojarzona z fizycznym zbiorem danych
F:tekst; Assign np. Assign(F,’Dane’)
Tworzenie, otwieranie I zamykanie pliku
Tworzenie
Rewrite (F) – fizyczne utworzenie na dysku
Rewrite (FFF, rozmiar)
Otwieranie
Reset (F) lub Append (T) tylko tekstowe
Zamykanie
Close (T) – zamykanie
Write, read – wpis/odczyt – zdefiniowane
BlockWrite, BlockRead (T, bufer, licznik, rezultat) – niezdefiniowane
Pliki tekstowe
Eof End of file
Eoln End of line
Zdef:
Eof; FileSize (w bajtach)
File Pos(pozycja w pliku)
Seek (ustawienie położenie zbioru na elemencie określonym przez pozycja = longint)
Erase (F) – usuwanie
Podstawa programowej modyfikacji
Grupowanie procedur i funkcji bibliotek
Dzielenie dużych programów na powiązane logicznie części
Unit „nazwa”
Interface def+dek } cz. Opisowa
Implementation } cz. Implementacyjna
End }cz. Inicjująca
Wykład 5
Object Pascal
Hermetyczność
Dziedziczność
Polimorfizm
Hermetyczność – zamknięcie w jednej całości dwóch kategorii; struktur danych i funkcji, procedur (kodów) dotyczących działań na strukturach danych
Deklaracje „private” i „public” ukryte
Struktury danych = własność
Kody programów = metody
Obiekt może korzystać z metod i własności innego obiektu, ale metody 1 obiektu
Dziedziczność obiektowa umożliwia przyspieszenie definiowania potomstw istniejących obiektów
Potomek dziedziczy własności i metody, więc musimy tylko określić różnice w stosunku do poprzednika
Oprogramowanie własności i metod (?)
Zmiana w całej klasie
W obiekcie nadrzędnym z którego reszta dziedziczy
Polimorfizm umożliwia tworzenie w obiektach potomnych metod o takich samych nazwach, jak w obiektach nadrzędnych, ale wykonywujących różne czynności:
Środowisko zintegrowane
Edytor
Debuggera
Projektor formularzy
Cały kod w modułach
Klasy – deklaracja klasy odbywa się przez deklarację naszego typu danych
Unit
Interface
TYPE moja_klasa=class
Procedury
End;
Zaimplementować
Procedure moja_klasa.p1
Begin
End;
Showmessage(‘tekst’)
Wyszukiwanie CTRL+SPACJA
Potomek=class(protoplasta)
Kod:
Procedure TForm1.ButtonClick(Sender:ToObject)
X:=MK1.Create; przyporządkowanie pamięci operacyjnej
Y:=MK2.Create;
Wywołanie //x.p1
Wybór kolorowych paneli
Var c:integer
Begin
If Form1.ColorDialog1.Execute then
Begin
C:= Form1.ColorDialog1 Color;
Case Form1.RadioGroup1.ItemIndex of
0: Form1.Panel1.Color:=c;
1: Form1.Panel2.Color:=c;
2: Form1.Panel3.Color:=c;
End;
End;
End;
End.
Wykład 6
FloatToStr(x,ffFixed,9,2) 9 l. liczb + przecinek 2 druga po przecinku
Wykresy Chart
TChart – formularz edycja opcji
Zerowanie serii:
Form1.series1.clear;
Form1.series2.clear;
Form1.Visible:=False
Form2.Visible:=True Boole’a
Menu nawigacja
For i:=1 to 1000
Begin
Form1.Series1.AddXY(i, sin(i*pr/180); XY odcięte X I rzędne Y
Form1.Series2.AddXY(i, cos(i*pr/180);
End;