inf 2 id 212896 Nieznany

background image

Oprogramowanie narzędziowe to jedna z grup programów użytkowych ogólnego zastosowania. To zbiór programów
które stosowane są do wykonywania określonych zadań, np. do przygotowania innych programów, do diagnostyki systemu
komputerowego, do symulacji działania sprzętu. służy do operowania na zbiorach danych określonego formatu: edytory
tekstu tworzą dokumenty tekstowe; arkusze kalkulacyjne - tabele kalkulacyjne; systemy zarządzania bazą danych - zbiory
baz danych; pakiety graficzne - zbiory grafiki. Oprogramowanie narzędziowe- znajduje zastosowanie w tworzeniu arkuszy
kalkulacyjnych, w redagowaniu tekstów, w tworzeniu grafiki ekonomicznej, w zarządzaniu bazami danych.

Oprogramowanie systemowe (ang.

system software) — zespół programów sterujących działaniem jednostki centralnej i

urządzeń zewnętrznych, organizujących logiczną przestrzeń adresową komputera oraz system plików, a tworzących warunki
do opracowywania i wykonywania innych programów (kompilatory, edytory), nazywany ogólnie systemem operacyjnym.
Każdy komputer ogólnego przeznaczenia musi dysponować takim oprogramowaniem będącym platformą działania
oprogramowania użytkowego. Zalicza się do niego także oprogramowanie narzędziowe i sieciowe.

Etapy tworzenia programu:

1. Sformułowanie problemu w języku naturalnym
2. Sformułowanie problemu w języku źródłowym, np. Delphi,C++
3. Sformułowanie problemu w języku maszynowym(binarnym)

Algorytm to jednoznaczny przepis, dyktujący krok po kroku sposób postępowania w celu rozwiązania pewnego problemu
lub sposobu osiągnięcia jakiegoś celu. Ilość kroków algorytmu zależy od tego, jak złożony jest problem, którego on dotyczy.
Zawsze jednak liczba tych kroków będzie liczbą skończoną. Poprawnie stworzony algorytm zapewnia uzyskanie oczekiwanego
wyniku pod warunkiem, że użyjemy poprawnych danych dla konkretnego zadania. Umożliwia uzyskanie tego samego wyniku
dla tych samych danych. Wykonawcą algorytmu może być człowiek lub komputer. Algorytm jest podstawowym pojęciem
informatyki. Każdy program komputerowy jest zapisem jakiegoś algorytmu. Algorytm jest tworzony na podstawie specyfikacji
problemu, który ma rozwiązywać. Dane i wyniki ze specyfikacji są jednocześnie danymi wejściowymi i danymi
wyjściowymi
(czyli wynikami działania) algorytmu. Od algorytmu wymaga się, aby wszystkie jego elementy (dane,
polecenia, wyniki
) były dobrze określone, a sam algorytm był uniwersalny.
Algorytmy możemy zapisywać różnymi metodami: tekstowo, graficznie, zdefiniowanymi językami.

Program - zespół kodowanych instrukcji, określający dokładnie przebieg operacji arytmetycznych i logicznych do wykonania
przez komputer. Program główny w Obejct Pascalu składa się:

z nagłówka - nagłówek rozpoczyna się słowem kluczowym program <nazwa_programu> i może zawierać komentarz
opisujący rozwiązywany problem oraz sposób użycia programu. Nagłówek jest ignorowany przez kompilator i może
być w całości pominięty.

z bloku, w którym część deklaracyjna zawiera deklaracje i definicje używanych identyfikatorów, a część wykonawcza
zapis algorytmu pomiędzy słowami kluczowymi begin i end,

ze znaku '.' oznaczającego koniec programu.

Struktura programu w języku Object Pascal(Przykład)

program ;

{$APPTYPE CONSOLE}
uses SysUtils;

var
a:integer

begin
writeln ('podaj liczbe');

readln (a);
if a mod 2=0 then writeln ('liczba parzysta')

else writeln ('liczba nieparzysta')
end.

Języki programowania:

usystematyzowane

jednoznaczne

nie uwzględniające semantyki

szablony aplikacji

posiadające zdefiniowane typy zmiennych

posiadające zdefiniowane rozkazy i struktury pętli oraz rozgałęzień

Typy języków:

maszynowy – jest to forma bezpośredniego kodowania przez ciągi zero – jedynkowe; interpretowane przez maszynę
bez kompilacji

asembler – jest językiem bezpośredniego kodowania poprzez wprowadzenie symbolicznego zapisu części operacyjnej
oraz adresowej

wyższego rzędu – opracowany głównie w celu przedstawiania algorytmów

background image

Translator - program tłumaczący program napisany w jakimkolwiek języku programowania na język wewnętrzny maszyny
(maszynowy).
Kompilator - to program służący do automatycznego tłumaczenia kodu napisanego w jednym języku (języku źródłowym)
na równoważny kod w innym języku (języku wynikowym)
Interpretator - Specjalny program, który tłumaczy kod źródłowy na język zrozumiały dla komputera i po przetłumaczeniu
każdej instrukcji natychmiast ją wykonuje. Językiem interpretowanym jest np. Basic.
Typy danych:

1.

Zmienne liczbowe służą do przechowywania liczb w pamięci komputera. Zmienne liczbowe mogą być całkowite lub
rzeczywiste, np. Całkowite – integer, byte, word; Rzeczywiste – single, real;

2.

Zmienne tekstowe - pozwalają przechowywać tekst (ciąg znaków), np. string;

Deklaracja stałych – Stałe deklaruje się jeszcze przed głównym programem słowem kluczowym "Const", w programie
przykładowo wygląda to tak:
const

abc=500;

l3='tu jest tekst';

begin

end.

Deklaracja zmiennych - Zmienne deklaruje się podobnie jak stałe jeszcze przed głównym programem, słowem kluczowym
"Var", w programie przykładowo wygląda to tak:
var abc: integer; l3,linia,t:string;
begin

end.

Deklaracja typów - Typy (TYPE) deklarujemy po deklaracji stałych (CONST). Każdą zmienną w programie należy
zadeklarować tzn. określić jej nazwę oraz wartości, które może ona przyjmować. Zbiór wartości zmiennej nazywa się typem
zmiennej. Typy dzielimy na standardowe (predefiniowane, nie wymagające opisu) i niestandardowe (wprowadzane ręcznie
przez programistę). O typach będzie jeszcze mowa w następnych lekcjach, więc podam tu tylko przykłady, np. :
type Dzien = (pon, wt, sr, czw, pt, sob, nie); Numer = Integer;
begin
end.

Operatory są specjalnymi znakami, elementami języka programowania, służącymi do manipulowania danymi i sterowania
pracą programu. Poniżej przedstawiam rodzaje operatorów, wraz z krótkim opisem.

Operatory przypisania - operator przypisania powoduje przypisanie nowych danych do zmiennej. Budowa jest
bardzo prosta. Po lewej stronie należy wpisać nazwę zmiennej, do której zostanie przydzielona dana, a po prawej
musi znaleźć się przypisywana wartość.

Operatory porównania - Nierówności

<> Równości = Większości > Mniejszości <

Większe lub równe

>= Mniejsze lub równe <=

Operatory logiczne - Logicze i

and, Logiczne lub or, Zaprzeczenie not,

Operatory arytmetyczne - Dodawanie + Odejmowanie - Mnożenie * Dzielenie rzeczywiste / Dzielenie całkowite
div Reszta z dzielenia mod

Deklaracja tablic -

tablica składa się z ustalonej liczby elementów tego samego typu, zwanego typem składowym, który

może być zarówno typem prostym lub łańcuchowym, jak i typem strukturalnym. Za pomocą tablic są reprezentowane
regularne układy danych, np. wektory i macierze. Definicja pojedynczego typu tablicowego ma postać, np:
program array;
var

Tablica : array[0..1] of String;
begin

Tablica[0] := 'Pierwszy element tablicy';
Tablica[1] := 'Drugi element tablicy';

end.

Deklaracja rekordu -

rekordem nazywamy złożoną strukturę danych, której składowe mogą mieć rózne charakterystyki

(należeć do różnych typów). Poszczególne pola mogą być same strukturami złożonymi, przy czym liczba pól rekordu jest
ustalona. Definicja typu rekordowego określa typ i identyfikator dla każdego pola. Definicja ta rozpoczyna się słowem
kluczowym record, po którym podaje się deklarację każdego pola, a kończy słowem kluczowym end. Definicja pojedynczego
typu rekordowego ma postać:
TYPE Data = record rok : Integer; miesiac : 1 .. 12; dzien : 1 .. 31;

end;
TYPE Rejestry = record

case Integer of
1: (AX, BX, CX, DX : Word);

2: (AL, AH, BL, BH, CL, CH, DL, DH : Byte);
end;

end;

background image

Systemy Liczbowe

Systemy pozycyjne – to takie, w których wartość danej cyfry zależy od tego jaką pozycję zajmuje ona w liczbie.
Przykładami systemów pozycyjnych są systemy np.: dziesiętny, jedynkowy, dwójkowy, ósemkowy, szestnastkowy

Systemy niepozycyjne – (addytywne) – to takie w których wartość danej liczby jest sumą wartości znaków
cyfrowych z których się ona składa. Najpopularniejszym jest system arabski(1,2,3..), bądź rzymski

System rzymski - W systemie rzymskim posługujemy się znakami: I, V, X, L, C, D, M, gdzie: I = 1, V = 5, X = 10, L =
50, C = 100, D = 500, M = 1000. System rzymski zapisywania liczb jest systemem addytywnym, czyli wartość danej liczby
określa się na podstawie sumy wartości jej znaków cyfrowych. Wyjątki od tej zasady to liczby: 4, 9, 40, 90, 400 i 900, do
opisu których używa się odejmowania.

Dziesiętny system liczbowy - najbardziej rozpowszechniony pozycyjny system zapisu liczb oparty o potęgi liczby 10 i tyleż
znaków graficznych (cyfr: 0,1,2,3,4,5,6,7,8,9) wykorzystywanych do zapisu liczb. Zapis 1995 oznacza liczbę równą
1·103+9·102+9·101+5·100.

Jedynkowy system liczbowy - Jest to najprostszy system zapisu liczb gdyż wykorzystuje tylko jedna cyfrę 1. Podstawą
pozycji tez jest liczba 1. W praktyce wygląda to tak : Jak w każdym systemie pozycyjnym o wartości cyfry stanowi pozycja na
której ona stoi więc cyfrę stojącą na pierwszej pozycji mnożymy razy 10 . Cyfrę na 2 pozycji mnożymy razy 11, cyfrę na 3
pozycji razy 12 itd. Jednakże jak wiadomo liczba 1 podniesiona do dowolnej potęgi daje jeden. Wynika z tego że w tym
systemie na każdej pozycji cyfra 1 ma wartość 1. Przykład: 111 = 1*10 + 1*11+ 1*12 = 1 + 1 + 1 = 3

System dwójkowy (binarny) - Do zapisu liczb w tym systemie wykorzystuje się zaledwie 2 cyfr: 0 i 1. Podstawą pozycji
zaś są kolejne potęgi liczby 2. W praktyce wygląda to tak : Jak w każdym systemie pozycyjnym o wartości cyfry stanowi
pozycja na której ona stoi więc cyfrę stojącą na pierwszej pozycji mnożymy razy 20 , a cyfrę na 2 pozycji mnożymy razy 21.
Przykład: 1100101=1*20 + 0*21 + 1*22 + 0*23 + 0*24 + 1*25 + 1*26 = 1+ 0+ 4+ 0+ 0+ 32+ 64 = 101
Tak wiec liczba 1100101 w systemie dwójkowym jest równa liczbie 101 w systemie dziesiętnym.

dziesiętnie 0 1 2

3

4

5

6

7

8

9

10

11

12

13

14

15

dwójkowo 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111

System ósemkowy - Do zapisu liczb w tym systemie wykorzystuje się 8 cyfr: 0, 1, 2, 3, 4, 5, 6, 7 Podstawą pozycji zaś są
kolejne potęgi liczby 8. W praktyce wygląda to tak : Jak w każdym systemie pozycyjnym o wartości cyfry stanowi pozycja na
której ona stoi więc cyfrę stojącą na pierwszej pozycji mnożymy razy 80, cyfrę na 2 pozycji mnożymy razy 81, cyfrę na 3
pozycji mnożymy razy 82 itd.
Przykład: 174 = 4*80 + 7*81 + 1*82 = 4+ 56+ 64 = 124
Tak wiec liczba 174 w systemie ósemkowym jest równa

a

liczbie 124 w systemie dziesiętnym.

System szesnastkowy - Do zapisu liczb w tym systemie wykorzystuje się 16 znaków ( 10 cyfr i 6 liter ):
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Podstawą pozycji zaś są kolejne potęgi liczby 16. W praktyce wygląda to tak: Jak w
każdym systemie pozycyjnym o wartości cyfry stanowi pozycja na której ona stoi więc znak stojący na pierwszej pozycji
mnożymy razy 160, znak na 2 pozycji mnożymy razy 161, znak na 3 pozycji mnożymy razy 162 itd. UWAGA ! Litery w tym
systemie traktowane są jako następujące liczby: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15
Przykład: D3A = 10*160 + 3*161 + 13*162= 10 + 48 + 3328 = 3386
Tak wiec liczba D3A w systemie dwójkowym jest równa liczbie 3386 w systemie dziesiętnym.

Arytmetyka binarna dotyczy wykonywania 4 podstawowych działań arytmetycznych na liczbach binarnych.

Dodawania liczb binarnych - Zasady dodawania: 1+0=1; 0+1=1; 0+0=0; 1+1=10 (jeden, zero)

Zasady odejmowania: 1–0=1;1–1=0;0–0=0;0–1->brak wyniku;10–1=1(jeden, zero – jeden)

Mnożenie liczb bin. Przy mnożeniu liczb bin. obowiązują te same zasady co przy liczbach dziesiętnych.

Dzielenie liczb bin. Przy dzieleniu liczb bin. obowiązują te same zasady co przy liczbach dziesiętnych.

Zapis zmiennoprzecinkowy - zapis składa się z trzech liczb: m - mantysy, p - podstawy systemu, c – cechy. Wartość liczby
zmiennoprzecinkowej obliczamy zgodnie ze wzorem:
L = m*p

c

Wzór pozwala obliczyć wartość liczby zmiennoprzecinkowej zapisanej w dowolnym systemie pozycyjnym, a nie tylko
dziesiętnym.

Zapis stałoprzecinkowy albo stałopozycyjny – jeden ze sposobów zapisu liczb ułamkowych stosowanych w
informatyce. Do zapisu liczby stałoprzecinkowej przeznaczona jest z góry określona ilość cyfr dwójkowych (bitów), a pozycję
przecinka ustala się arbitralnie, w zależności od wymaganej dokładności.
Na przykład: mając do dyspozycji słowo 32-bitowe, można wydzielić 24 bity na część całkowitą, 8 bitów na część ułamkową,
albo po 16 bitów na część całkowitą i ułamkową, albo 30 bitów na część całkowitą i zostawić tylko 2 bity do zapisu części
ułamkowej.

background image

Instrukcje języka Object Pascala:

Instrukcja przypisania - Instrukcja powoduje zastąpienie dotychczasowej wartości podanej zmiennej wartością
otrzymaną w wyniku wartościowania wyrażenia. Po lewej stronie operatora przypisania znajduje się zmienna, do
której zostanie nałożona wartość wyrażenia zapisanego po prawej stronie. Wyrażeniem tym może być inna zmienna
lub stała. Nie wolno używać po lewej stronie przypisania wartości stałej lub wyrażenia. Przy instrukcji przypisania
obowiązuje: Zgodność typów w sensie przypisania. np. a:=2;

Instrukcje strukturalne - łączą jedną lub więcej instrukcji, tzw. wewnętrznych wg pewnego schematu
strukturalizacji.

Instrukcja złożona -polega na sekwencyjnym wykonaniu instrukcji wewnętrznych zawartych w tej instrukcji.

begin
instrukcja1;instrukcja2;

{...}
instrukcja n;
end

.

Instrukcje warunkowe:

Instrukcja złożona 'if' - w języku Object Pascal służy do zapisania rozgałęzienia obliczeń.

if wyrażenie then instrukcja1 else instrukcja2;

gdzie: wartością wyrażenia jest jedna z dwóch wartości logicznych TRUE lub FALSE: Jeżeli TRUE to wykonywana jest

instrukcja występująca po then. Jeżeli FALSE to wykonywana jest instrukcja po else.

Instrukcja wyboru 'case'

-

w języku Object Pascal służy do zapisania rozgałęzienia obliczeń.

case selektor of sekwencja_instrukcji_wyboru
else instrukcja

end.

gdzie: selektor - dowolne wyrażenie typu porządkowego (od tego wyrażenia zależy wybór dalszej operacji w

instrukcji. sekwencja_instrukcji_wyboru - lista instrukcji, których każda poprzedzona jest stałą. else - stanowi w tej instrukcji
zabezpieczenie na wypadek, gdyby wartość selektora nie odpowiadała żadnej instrukcji z sekwencji_instrukcji_wyboru.

Instrukcja iteracjna – pętla - 'for' - w języku Object Pascal służy do wielokrotnego wykonywania czynności
w niej zapisanych.

for z:=w1 to w2 do
begin

ciąg instrukcji do wykonania w każdym przebiegu pętli
end.

g

dzie: z to zmienna typu porządkowego; w1,w2 to wyrażenia typu porządkowego informacje: minimum wykonań

instrukcji w pętli to 0 razy; maksimum wykonań instrukcji w pętli jest ustalona w momencie rozpoczęcia pętli.

Instrukcja iteracjna – pętla - 'while' w języku Object Pascal służy do wielokrotnego wykonywania grupy
instrukcji w niej zapisanych.

while wyrażenie do instrukcja;

Wartością

wyrażenia jest wartość logiczna TRUE lub FALSE. Instrukcji używamy wtedy, gdy w wyniku iteracji chcemy

doprowadzić do tego aby warunek w

wyrażeniu był fałszywy.

Instrukcja iteracjna – pętla - 'repeat' w języku Object Pascal służy do wielokrotnego wykonywania grupy
instrukcji w niej zapisanych.

repeat ciąg_instrukcji
until wyrażenie;

Wartością

wyrażenia jest wartość logiczna TRUE lub FALSE. Instrukcji używamy wtedy, gdy w wyniku iteracji chcemy

doprowadzić do tego aby warunek w

wyrażeniu był prawdziwy.

Instrukcja wiążąca:

Instrukcja 'with'

with lista_zmiennych do instrukcja;

Instrukcja 'try except' w języku Object Pascal służy do wykonywania stanów wyjątkowych i obsługi
warunków.

try sekwencja-instrukcji;

except [on identyfikator-warunku do]
instrukcja [else sekwencja-instrukcji]

end;

Instrukcja 'try finally'

try

sekwencja_instrukcji;
finally

sekwencja_instrukcji
end;

Przykłady wykorzystania instrukcji iteracyjnych. np.: Wypełnianie tablicy liczbami; Zmiana położenia elementów
tablic; Wyszukiwanie elementów w tablicy

background image

Algorytm sortowania. Problem sortowania można zdefiniować następująco: Danymi wejściowymi jest ciąg n liczb oraz
wynikiem jest taka ich permutacja (czyli zmiana kolejności), że tworzą one ciąg rosnący (niemalejący). Zadaniem algorytmu
sortowania jest takie przestawienie elementów danego ciągu, aby były one uporządkowane rosnąco (niemalejąco).

Sortowanie bąbelkowe - Jest to jeden z prostszych algorytmów sortowania. Sprawdzamy całą tablicę od końca,
jeżeli trafimy na parę elementów, w której większy poprzedza mniejszy to zamieniamy je miejscami i znów
zaczynamy przeszukiwać tą tablicę od końca. Czynność powtarzamy tak długo aż podczas sprawdzania całej tablicy,
nie zajdzie ani jedna zamiana elementów. Realizuje się to najczęściej za pomocą zmiennej logicznej.
Algorytm nosi nazwę bąbelkowego, gdyż najmniejsze liczby "wypływają" z dołu tablicy na jej szczyt.
Oto przykład zastosowania dla nieuporządkowanego ciągu liczb <2, 4, 1, 3>.

Przy następnym przebiegu nie zajdzie ani jedna zmiana, to znak, że ciąg jest już posortowany.

Sortowanie przez wstawianie - Algorytm polega na pobieraniu kolejnych liczb z tablicy, porównaniu ich ze
wszystkimi poprzedzającymi i zamianie z tym, który jest mniejszy (przy sortowaniu rosnącym).

Sortowanie przez wymianę/wybór - Algorytm polega na wyszukiwaniu najmniejszej liczby w całej tablicy i
zamianie jej najpierw z pierwszym elementem tablicy. W kolejnych krokach najmniejsza liczba jest wyszukiwana nie
w całej tablicy, ale poczawszy od kolejnego elementu, drugiego, trzeciego itd. do końca tablicy.

Algorytm sortowania szybkiego jest uważany za najszybszy algorytm dla danych losowych.
Zasada jego działania opiera się o metodę dziel i zwyciężaj. Zbiór danych zostaje podzielony na dwa podzbiory i
każdy z nich jest sortowany niezależnie od drugiego.
Dla zadanej tablicy a[l..p] wybieramy element v=a[l] i przeszukujemy resztę tablicy (tzn. a[l+1..p]) tak długo, aż nie
znajdziemy elementu większego niż a[l]. Następnie przeszukujemy tą tablicę od strony prawej póki nie znajdziemy
elementu nie większego niż a[l]. Gdy to osiągniemy, zamieniamy miejscami te dwa elementy i zaczynamy cały proces
od początku. Algorytm działa tak długo, aż wskaźnik poruszający się w lewo i wskaźnik poruszający się w prawo
spotkają się. Należy wówczas zamienić element v=a[l] z ostatnim elementem lewej części tablicy.
Mimo, że w najgorszym przypadku algorytm ma złożoność kwadratową, jest on bardzo często stosowany. Powodem
tego jest niska- liniowologarytmiczna, złożoność w średnim przypadku.

background image

Sortowanie stogowe - Jest to metoda bardziej skomplikowana niż sortowanie bąbelkowe czy przez wstawianie, ale
za to działa w krótszym czasie. Zrozumienie algorytmu HeapSort wymaga zaznajomienia się z pojęciem Kopca/Stogu.
Budowa drzewa binarnego z elementów tablicy, którą mamy posortować wygląda następująco: Zaczynamy od
pierwszego elementu tablicy, który będzie korzeniem. Każdy następny i-ty element tablicy będzie miał co najwyżej
dwa następniki o wyrazach odpowiednio: 2*i oraz 2*i+1. Łatwo stwierdzić, że dla każdego i-tego elementu (oprócz
korzenia) numer elementu w tablicy, będącego jego poprzednikiem określa się wzorem: i div 2. Po zbudowaniu
drzewa należy wykonać odpowiednie instrukcje, które zapewnią mu warunek kopca. Należy więc sprawdzać
(poczynając od poprzednika ostatniego liścia schodząc w górę do korzenia) czy poprzednik jest mniejszy od
następnika i jeżeli tak jest to zamienić je miejscami. Po wykonaniu tych czynności drzewo binarne zamieniło się w
stóg. Z jego własności wynika, że w korzeniu znajduje się największy element. Korzystając z tego faktu możemy go
pobrać na koniec tablicy wynikowej a na jego miejsce wstawić ostatni liść. Po pobraniu korzenia tablica źródłowa
zmniejszyła się o 1 element a porządek kopca został zaburzony (nie wiadomo, czy ostatni liść będący teraz
korzeniem jest rzeczywiście największym elementem). By przywrócić warunek stogu należy ponownie uporządkować
jego elementy, tym razem jednak zaczynając od korzenia (ponieważ to on jest nowym elementem). Po przywróceniu
porządku w kopcu możemy znów pobrać korzeń i wstawić go do tablicy wynikowej (tym razem na drugie miejsce od
końca), wstawić na jego miejsce liść i zmniejszyć rozmiar tablicy źródłowej o 1. Tu pętla się zamyka. Wykonujemy te
czynności aż do ostatniego korzenia. Po całkowitym wyczyszczeniu kopca w tablicy wynikowej będziemy mieli
posortowane elementy z tablicy wejściowej. Aby zlikwidować drugą tablicę (co zwiększa złożoność pamięciową
algorytmy) wystarczy w kolejnych krokach odkładać korzenie w tej samej tablicy, od końca zmniejszając
jednocześnie zmienną, która odpowiada za liczbę elementów kopca. Po zmniejszeniu tej liczby algorytm nie będzie
"widział" tylnej, posortowanej już części tablicy. Złożoność tego algorytmu to O(nlogn).

Sortowanie przez zliczanie ma jedną potężną zaletę i jedną równie potężną wadę może sortować wyłącznie liczby
całkowite. Jednak jego zaletą jest działanie w czasie liniowym (jest szybki). Obydwie te cechy wynikają ze sposobu
sortowania. Polega ono na liczeniu, ile razy dana liczba występuje w ciągu, który mamy posortować. Następnie
wystarczy utworzyć nowy ciąg, korzystając z danych zebranych wcześniej. Np. mamy posortować ciąg:
3,6,3,2,7,1,7,1. Po zliczeniu (w jednym korku) operujemy danymi na temat liczności poszczególnych liczb:
Liczba 1 występuje 2 razy

Liczba 2 występuje 1 raz
Liczba 3 występuje 2 razy
Liczba 4 występuje 0 razy
Liczba 5 występuje 0 razy
Liczba 6 występuje 1 raz
Liczba 7 występuje 2 razy

Na podstawie tych danych tworzymy ciąg: 1,1,2,3,3,6,7,7. Jest to ciąg wejściowy, ale posortowany. Należy zauważyć trzy
ważne rzeczy: Proces zliczania odbył się w jednym kroku; Nie doszło do ani jednej zamiany elementów; Proces tworzenia
tablicy wynikowej odbył się w jednym kroku.

Generator liczb pseudolosowych – pozwala na generowanie ciągu liczb, który jest deterministyczny(zainicjowany tą
samą wartością daje zawsze taki sam ciąg liczb pseudolosowych oraz pod pewnymi względami jest niodróżnialny od ciągu
uzyskanegoo z prawdziwie losowego źródła. Generatory liczb pseudolosowych znajdują zastosowanie w wielu dziedzinach
algorytmiki, są to m. in: algorytmy genetyczne(selekcja i mutacja), algorytmy heurystyczne(symulowane wyrzażanie),
sztuczna inteligencja(początkowe wartości połączeń pomiędzy neuronami), algorytmy probabilistyczne(metody Monte-Carlo);
Najbardziej znanym sposobem generowania liczb pseudolosowych jest metoda opracowana przez Lehmar'a zwana liniowym
generatorem kongruentynym. Polega ona na obliczaniu kolejnych liczb pesudolosowych: x

1

,...,x

n

o zakresie wartości 0..m-1

na podstawie wzoru: x

i

=(a*x

i'-1

+1)mod m. x

1

-to wartość inicjująca – tzw. ziarno. W praktyce jeśli chcemy uzyskać nieznany

ciąg to inicjujemy taki generator wartością, która nie będzie znana w momencie wykonywania programu, np. wartością
zegara systemowego.
Dobór parametrów generatora. m powinno być duże(potęga 10 albo 2); a o jeden rząd mniejsze niż m; dobra wartością
a jest liczba postaci t21, gdzie t jest liczbą parzystą.

Złożoność obliczeniowa algorytmów. Przez złożoność obliczeniowa algorytmów rozumiemy ilość zasobów niezbędnych
do wykonania algorytmu. Przez zasoby rozumie się zwykle czas (złożoność czasowa) i zajętość pamięci operacyjnej
(złożoność pamięciowa):

Złożoność czasowa - Czas działania algorytmu zależy od samego algorytmu oraz od szybkości działania
komputera, rodzaju i wielkości danych. W celu uniezależnienia się od konkretnego komputera przyjmuje się, ze
zamiast czasu określa się ilość wykonywanych operacji elementarnych zakładając jednakowy czas ich wykonania. Za
operacje elementarne dla algorytmu napisanego w PASCALU przyjmuje się: operacje arytmetyczne, logiczne,
relacyjne; podstawienie pod zmienną prostą lub wskaźnikową; indeksowanie, odwołanie do pola rekordu; inicjalizacja
wywołania procedury; przekazanie wartości parametru aktualnego instrukcja skoku wejścia / wyjścia

Najczęściej stosuje się złożoność asymptotyczną, która mówi o tym jak złożoność kształtuje się dla bardzo
dużych, granicznych rozmiarów danych wejściowych Trzy rodzaje złożoności asymptotycznej: notacja(omikron);
notacja(omega); notacja(theta)

background image

Złożoność obliczeniowa stała – O(1) - Algorytm wykonuje stałą ilość operacji dominujących bez względu na
rozmiar danych wejściowych.

Złożoność obliczeniowa liniowa – O(n) - Dla każdej danej algorytm wykonuje stałą ilość operacji dominujących.
Czas wykonania jest proporcjonalny do liczby n danych wejściowych.

Złożoność obliczeniowa kwadratowa – O(n2) - Algorytm dla każdej danej wykonuje ilość operacji
dominujących proporcjonalną do liczby wszystkich przetwarzanych danych. Czas wykonania jest proporcjonalny do
kwadratu liczby Inne złożoności tego typu O(n3), O(n4)... noszą nazwę wielomianowych złożoności obliczeniowych.

Złożoność obliczeniowa logarytmiczna – O(log2n) - W algorytmie zadanie rozmiaru n da się sprowadzić do
zadania rozmiaru n/2. Typowym przykładem jest wyszukiwanie binarne w zbiorze uporządkowanym. Sprawdzenie
środkowego elementu pozwala określić, w której z dwóch połówek zbioru może znajdować się poszukiwany element

Złożoność obliczeniowa liniowo logarytmiczna - O(n log2n) - Zadanie rozmiaru n daje się sprowadzić do
dwóch podzadań rozmiaru n/2 plus pewna ilość operacji, których liczba jest proporcjonalna do ilości danych n. Tego
typu złożoność obliczeniową posiadają dobre algorytmy sortujące

Złożoność obliczeniowa wykładnicza - O(2n), O(n!) - Złożoność obliczeniową O(2n) posiada algorytm, w
którym wykonywana jest stała liczba operacji dla każdego podzbioru n danych wejściowych.

Złożoność obliczeniową O(n!) posiada algorytm, w którym wykonywana jest stała liczba operacji dla każdej
permutacji n danych wejściowych.

Poprawność algorytmu - Dowód poprawności algorytmu jest rozumowaniem matematycznym prowadzącym do
formalnego wykazania, że dany algorytm przy poprawnych danych wejściowych da nam wynik spełniający wymagania, np.
że algorytm quicksort po podaniu mu niepustej tablicy elementów porównywalnych na wyjściu da nam tablicę zawierającą te
same elementy, ale uporządkowane w kolejności od najmniejszego do największego.
Dowód poprawności algorytmu zawsze składa się z dwóch części:

dowód, że jeśli algorytm się zakończy, to da poprawny wynik,

dowód, że przy poprawnych danych wejściowych algorytm zawsze się zakończy.

Poprawność algorytmu Euklidesa można dowieść, pokazując, że zdanie:

jest niezmiennikiem pętli algorytmu NWD.
Ponieważ

wartość drugiego argumentu spada po każdej iteracji, więc algorytm zawsze zakończy

działanie.
Z niezmiennika pętli wynika:

A więc, po ostatnim przebiegu pętli algorytm NWD zwróci wartość NWD(a

,b).

Programowanie obiektowe polega na operowaniu w programie obiektami. W języku Object Pascalzdefiniowana została
hierarchiczna struktura klas, które stanowią wzorce dla obiektów.
Klasa – jest złożonym typem danych. Może zawierać pola danych oraz procedury i funkcje służące do manipulowania nimi
zwane metodami. Klasa jest wzorcem dla obiektów.
Obiekt – jest egzemplarzem (zmienną) typu określonego przez daną klasę. Jest konkretną realizacją tej klasy zawierającą
rzeczywiste dane.

Programowanie oparte o klasy - Definiowane są klasy, czyli typy zmiennych, a następnie tworzone są obiekty, czyli
zmienne (w uproszczeniu) tych typów.

Programowanie oparte na obiektach - W tym podejściu nie istnieje pojęcie klasy. Nowe obiekty tworzy się w oparciu o
istniejący już obiekt - prototyp, po którym dziedziczone są pola i metody i można go rozszerzać o nowe. Spotykany raczej w
językach interpretowanych.

Cechy programowania obiektowego. Istnieje pewna różnica zdań co do tego, jakie cechy języków programowania
czynią je obiektowymi. Powszechnie uważa się, że najważniejsze są następujące cechy:

Abstrakcja. Każdy obiekt w systemie służy jako model abstrakcyjnego "wykonawcy", który może
wykonywać pracę, opisywać i zmieniać swój stan oraz komunikować się z innymi obiektami w systemie, bez
ujawniania, w jaki sposób zaimplementowano dane cechy. Procesy, funkcje lub metody mogą być również
abstrahowane, a kiedy tak się dzieje, konieczne są rozmaite techniki rozszerzania abstrakcji.

background image

Hermetyzacja. Połączenie w jedną całość pól i metod obiektu oraz odseparowanie obiektu od otoczenia;
Dostęp do pól obiektu następuje za pomocą odpowiednich metod tego obiektu; Hermetyzacja ma na celu
zwiększenie niezawodności działania programu. Zasadą programowania obiektowego jest hermetyzacja
dostępu do pól obiektu. Oznacza to, że dostęp do pól obiektu powinien się odbywać wyłącznie przy pomocy
metod. Każdy obiekt powinien być wyposażony w odpowiednią liczbę metod zapewniających inicjowanie pól
wartościami oraz metod zwracających wyznaczone wartości pól.

Polimorfizm (polymorphism – z grec. wiele form) Oznacza, że ta sama metoda może być powiązana z
różnymi procedurami w zależności od obiektu, w którym występuje. Wiąże się ściśle z dziedziczeniem klas i
ich metod. Metoda danej klasy może być dziedziczona statycznie (tzw. static method) lub wirtualnie (tzw.
virtual method) – określa się to w momencie definiowania nowej klasy. Metody statyczne (monomorficzne)
– działają tak samo w obiektach „potomkach” jak u „przodków”. Metody wirtualne (polimorficzne) – chociaż
nazywają się podobnie jak u „przodka” to jednak działają całkiem odmiennie.

Dziedziczenie (inheritance) Polega na tym, że nowe klasy można definiować w oparciu o klasy już
istniejące, dziedzicząc ich wszystkie właściwości. Niektóre odziedziczone właściwości można zmodyfikować
w razie potrzeby. Można tez dodać nowe właściwości i nowe metody.

Typ obiektowy. Podstawowe trzy elementy, z których składa się klasa (typ obiektowy) w Object Pascalu to: Pola (Fields) –
tak jak pola rekordu mogą być typu prostego np.integer, byte lub typu złożonego (rekordowego lub obiektowego) Metody
(Methods) – procedury i funkcje służące do wykonywania operacji na polach klasy Właściwości – są reprezentacją pola ze
zdefiniowanym dostępem przy odczycie i zapisie.

Zintegrowane środowisko programistyczne (ang. Integrated Development Environment, IDE) jest to aplikacja
lub zespół aplikacji (środowisko) służących do tworzenia, modyfikowania, testowania i konserwacji oprogramowania.
Aplikacje będące zintegrowanymi środowiskami programistycznymi charakteryzują się tym, że udostępniają złożoną,
wieloraką funkcjonalność obejmującą edycję kodu źródłowego, kompilowanie kodu źródłowego, tworzenie zasobów
programu (tzn. formatek / ekranów / okien dialogowych, menu, raportów, elementów graficznych takich jak ikony, obrazy
itp.), tworzenie baz danych, komponentów i innych. Rozwinięciem koncepcji IDE jest RAD.

RAD (ang. Rapid Application Development) oznacza "szybkie tworzenie aplikacji". Jest to ideologia i technologia
polegająca na udostępnieniu programiście dużych możliwości prototypowania oraz dużego zestawu gotowych komponentów
(np. zapewniających dostęp do bazy danych). Umożliwia to uzyskanie pewnego efektu już w pierwszych krokach
programistycznych, jednocześnie stanowi poważne zagrożenie dla projektów o większych rozmiarach ze względu na łatwość
nieprzemyślanego modyfikowania. Narzędzia RAD są rozwinięciem pomysłu IDE (zintegrowanego środowiska
programistycznego) i doskonale nadają się do tworzenia prototypów. Wygląd aplikacji projektuje się ustawiając kontrolki w
obszarze okna projektowanego programu (na przykład przy użyciu myszy - przeciągnij i upuść).

Podstawowe właściwości komponentów w Delphi.

Align służy do wyœ

środkowania komponentu, dostępnych jest sześć możliwości

Caption i Text jeżeli kontrolka posiada możliwość wyœ

świetlenia tekstu to tu deklarujemy jego treść

Color tutaj definiujemy kolor komponentu; w liœ

cie dostępnej w Object Inspectorze znajdują się podstawowe barwy,

większość ich ilość uzyskamy poprzez dwukrotne kliknięcie w polu wyboru

Cursor każdy komponent może mieć inny kursor; w liœ

cie Object Inspectora znajdują się standardowe kursory

Windowsa; istnieje możliwość załadowania własnego kursora z zasobów, o których możesz przeczytać w rozdziale 12

Enabled podajemy informację o tym, czy komponent jest dostępny (TRUE- tak, FALSE- nie); jeżeli mamy np. Button
na formie to gdy ustawimy właściwości na FALSE to nie będzie reagować na kliknięcie

Font jeżeli komponent posiada możliwość wyświetlania tekstu to tu możemy ustalić jego czcionkę; więcej możliwości
uzyskuje się poprzez dwukrotne kliknięcie w polu wyboru

Height definiujemy wysokość komponentu

Name nazwa komponentu, każdy komponent musi mieć inną nazwę, jeżeli położysz na formie dwa Labele to
zauważysz, że nazywają się Label1 i Label2; nazw używamy, gdy odwołujemy się do komponentu z innego miejsca
(np. Label1.Caption:='OK')

Visible deklarujemy czy komponent ma być widoczny, czy też nie

Width szerokość komponent

Podstawowe zdarzenia w Delphi. Służą one do wykonywania czynności, gdy zajdzie określony warunek.

Click(Sender: Tobject); zwykłe kliknięcie na komponencie; (np. wstawiamy na formę Button i w zdarzeniu OnClick
piszemy Form1.Caption:='Click';)

DblClick(Sender: Tobject);

KeyDown(Sender: TObject; var Key: Word; Shift: TshiftState);jeżeli klawisz został wciœ

wciśnięty

KeyPress(Sender: TObject; var Key: Char);to co wyżej

background image

KeyUp(Sender: TObject; var Key: Word; Shift: TshiftState); jeżeli klawisz został zwolniony

MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); jeżeli trzymamy
wciśnięty klawisz myszy

MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); jeżeli poruszamy myszką

MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); jeżeli klawisz myszki
został zwolniony

Procedura - zadaniem procedury jest wykonanie sekwencji instrukcji i ewentualnie obliczenie jednej lub kilku wartośći,
które przypisywane są odpowiednim parametrom procedury

procedure nazwa_procedury(lista_parametrów); dyrektywa;

{deklaracje stałych, typów lub zmiennych lokalnych}
{definicje procedur lub funkcji lokalnych}

begin

{treść procedury}

end;

Funkcja - zadaniem funkcji jest obliczenie jednej wartości, która przy wywołaniu podstawiana jest pod nazwę funkcji, np.
y:=sin(x), gdzie sin to nazwa funkcji.
function nazwa_funkcji(lista_parametrów):typ_funkcji;dyrektywa;
{deklaracje stałych, typów lub zmiennych lokalnych}

{definicje procedur lub funkcji lokalnych}
begin

{treść funkcji} {w tej części funkcji powinno nastąpić przypisanie}
{nazwie_funkcji wartości lub wyrażenia o typie zgodnym

z typem_funkcji:}
nazwa_funkcji:=wartość; {lub Result:=wartość;}

end;

Zmienną lokalną jest zmienna zadeklarowana w procedurze, funkcji lub w części implementation modułu. Jej zakresem
jest procedura, funkcja lub moduł, w którym została zadeklarowana. Zmienne zadeklarowane w części interface modułu są
dostępne w innym module lub programie głównym, jeśli zadeklarowano w nich ten moduł po słowie kluczowym uses.
Przykład:
function GetValue : String;

var S: String;
begin

S := 'a...';
Result := S;

end;

Zmienną globalną nazywamy zmienną, która jest zadeklarowana bezpośrednio po nagłówku w części opisowej programu
głównego. Jej zakresem jest cały program z wyjątkiem tych jego części, w których jej identyfikator został użyty do
oznaczenia innej zmiennej.
program;

{$APPTYPE CONSOLE}
begin

a:='a';
end;

var a:=string;
begin

S := 'b...';
end.
Procedury rekurencyjne – Z procedurą rekurencją mamy do czynienia wtedy, gdy podprogram(funkcja lub procedura)
wywołuje sam siebie. W Pascalu taka konstrukcja językowa jest dozwolona. Podprogramy rekurencyjne pozwalają na zgrabny
i przejrzysty zapis algorytmów takich problemów, w których wynik końcowy jest złożeniem wielu wyników cząstkowych. Ciąg
odwołań rekurencyjnych musi być skończony co oznacza, że któreś z kolei wywołanie tego procesu nie może kontynuować
tego procesu. Przykładem funkcji rekurencyjnej jest silnia– iloczyn n kolejnych liczb naturalnych – która w Object Pascalu
wyglądać będzie następująco:
function silnia(n:integer): longint;
var s:longint;

begin
if n>=1 then silnia:=n*silnia(n-1) else

silnia:=1
end;

background image

Współpraca programu w języku Object Pascal z plikami dyskowymi. Język Object Pascal, podobnie jak Turbo Pascal
umożliwia wykonanie następujących operacji na plikach dyskowych: tworzenie, czytanie, modyfikowanie, kasowanie plików
dyskowych.
Plik dyskowy jest zbiorem o dostępie sekwencyjnym, tzn. dostęp do danego elementu wymaga przejrzenia wszystkich
elementów poprzedzających go w pliku (w odróżnieniu od plików dyskowych tablica jest zbiorem elementów o dostępie
swobodnym - tzn. dostęp do danego elementu nie zależy od innych elementów).
Dostęp do pliku dyskowego z programu pascalowego uzyskamy wykonując następujące czynności:

deklaracja zmiennej plikowej,

skojarzenie zmiennej plikowej z nazwą pliku dyskowego,

otwarcie pliku ( trzy tryby otwarcia),

wykonanie operacji na pliku (przetworzenie pliku),

zamknięcie pliku.

Tworzenie plików tekstowych. Przykład:
program tworzenie_pliku_txt;

{$APPTYPE CONSOLE}
var

plik: textfile; {(1)deklaracja zmiennej plikowej,w Turbo Pascalu text}
linia:string;

begin
AssignFile(plik,'Nowy.txt'); {(2) skojarzenie zmiennej plikowej plik}

{ z plikiem 'Nowy.txt',}
{ w Turbo Pascalu Assign}

Rewrite(plik); {(3) otwarcie w celu utworzenia nowego pliku}
Writeln(plik,'Laboratorium podstaw informatyki');{(4) zapisanie do}

Writeln(plik,'WSEiA'); {pliku dwóch linii}
CloseFile(plik); {(5) zamknięcie pliku Nowy.txt,w Turbo Pascalu Close}

Writeln('Plik zapisany');
Readln

end.

Czytanie plików. Przykład:
program czytanie_pliku_txt;
{$APPTYPE CONSOLE}

var
plik: textfile;

linia:string;
begin

AssignFile(plik, 'Nowy.txt');
Reset(plik);

while not Eof(plik) do
begin

Readln(plik,linia); //odczyt linii pliku Nowy.txt
Writeln(linia);

end;
CloseFile(plik);

Writeln('Plik odczytany');
Readln

end.

Modyfikacja plików tekstowych. Przykład:
program mod_pliku_txt;
var

plik: text;
linia:string;

{procedura wyswietlania zawartosci pliku}
procedure Wys_plik;

begin
Writeln('Zawartość pliku:');

Reset(plik); {ustawienie wskaźnika pliku na pierwszej linii pliku}
while not Eof(plik) do

begin
Readln(plik,linia);

Writeln(linia);
end

;

end

;

begin

Assign(plik,'Nowy.txt');
Append(plik); {otwarcie pliku w celu dodania linii na końcu}

background image

Writeln(plik,'Dowolny tekst');

{lub dodanie linii z klawiatury}
{Writeln('Wprowadz linie ');

Readln(linia);
Writeln(plik,linia);}

{aby dodac wiecej linii z klawiatury można zast. pętlę repeat z P2}
Close(plik);

Writeln('Linia dopisana');
Wys_plik;

Readln
end.

Operacje związane z folderami plików. Przykład:
uses SysUtils;

var s:string;
...

Writeln('Wprowadz nazwe foldera:');
Readln(s);

if CreateDir(s) then Writeln('Folder utworzony')
else

Writeln('Nie można utworzyć foldera');

Bazy danych w Delphi. Wykorzystując tak wspaniałe środowisko, jakim jest Delphi, masz możliwość skorzystania z kilku
rodzajów baz danych, między innymi BDE - dość skomplikowany mechanizm Borlanda, pozwalający na łączenie się z bazami
danych typu dBase czy Pardox. BDE, czyli Borland Database Engine, to zbiór bibliotek DLL i funkcji API, umożliwiających w
dość prosty sposób komunikowanie się z systemami baz danych. Co prawda BDE jest dołączany do Delphi, lecz stanowi zbiór
osobnych bibliotek, umieszczonych w katalogu Borland Shared/BDE.

Dane – to wszystkie informacje jakie przechowujemy, aby w każdej chwili mieć do nich dostęp.
Baza danych (data base) – to uporządkowany zbiór danych z pewnej dziedziny tematycznej, zorganizowany w sposób
umożliwiający ich wyszukiwanie według zadanych kryteriów.

Pojęcie „baza danych” rozumiemy potocznie jako system złożony z trzech elementów:

P

właściwej bazy danych – zbioru danych, np. pliki na dysku,

systemu (oprogramowania) zarządzającego bazą danych,

interfejsu użytkownika, umożliwiającego dostęp do danych

Najczęściej spotykane typy baz danych

Proste bazy danych o pojedynczej tabeli (np. Excel, własne programy)

Jednostanowiskowa baza biurowa (np. MS Access)

Baza typu „klient-serwer” – dostęp z wielu stanowisk (np. Oracle)

Internetowa baza danych – dostęp z dowolnego komputera podłączonego do Internetu (np. MySQL)

Baza typu „płaskiego” (flat file) – wszystkie dane umieszczone są w pojedynczej tabeli. Dane są umieszczane w
rekordach o określonej strukturze, z polami o z góry określonej długości i typie. Każdy rekord ma tą samą długość Rekordy
nie muszą być posortowane Trudne wyszukiwanie (aby odszukać rekord trzeba przeszukać cały plik) oraz redundancja.

Relacyjna baza danych - zbiór danych zawartych w wielu tabelach połączonych ze sobą relacjami (związkami) – jedna
tabela dla każdego typu informacji optymalizacja dla dużej ilości danych szybsze wyszukiwanie.

Obiektowa baza danych (angielskie object database), baza danych złożona z obiektów tworzonych zgodnie z
paradygmatem programowania obiektowego. Przykładem obiektowej bazy danych może być system O2

Rozproszona baza danych (angielskie distributed database), system bazy danych obejmujący komputery znajdujące się w
różnych miejscach. Rozmieszczenie elementów rozproszonej bazy danych może dotyczyć jednego biura, budynku, lecz także
obszarów rozległych geograficznie, np. krajowy system oddziałów banku.

Komponenty bazodanowe. Większość operacji na bazach danych odbywa się dzięki komponentom niewizualnym,
aczkolwiek przedstawienie wyniku tej operacji (dodanie nowego rekordu, odczytanie zawartości tabeli) musi być
przedstawione w postaci wizualnej kontrolki. Owe kontrolki służące do przedstawienia zawartości baz danych są
zamieszczone na palecie

Data Controls, a wyróżniają się tym, że ich nazwa poprzedzona jest literami DB. właściwość

DataSource określa zbiór danych, który ma zostać przedstawiony w komponencie. Innymi przykładami są komponenty
TDBImage oraz TDBNavigator.

background image

Przykłady komponentów:

TDataSource - Nie pełni on żadnej znaczącej funkcji poza tym, że jest pośrednikiem pomiędzy komponentami typu
TTable czy TQuery a kontrolkami wizualnymi typu TDBGrid.

TTable - Komponent TTable jest najprostszym środkiem umożliwiającym dostęp do konkretnej bazy danych oraz
tabeli.
Główne właściwości komponentu Ttable:

Właściwość

Opis

TableType

Typ tabeli (Paradox, dBase, ASCII, FoxPro lub wartość domyślna)

TableName

Z lity rozwijalnej możesz wybrać tabelę należącą do określonej bazy danych

ReadOnly

Określa, czy tabela ma być tylko do odczytu

DatabaseName

Z listy rozwijalnej możesz wybrać bazę danych, z której będziemy korzystać

Exclusive

Umożliwia zablokowanie danej tabeli wyłącznie dla naszej aplikacji

Główne metody komponentu Ttable:

Właściwość

Opis

CreateTable

Tworzy tabele na podstawie wcześniej podanych informacji

EmptyTable

Usuwa wszystkie rekordy z tabeli

DeleteTable

Usuwa tabelę całkowicie

RenameTable

Zmienia nazwę tabeli

LockTable

Blokuje tabelę, tak aby inne aplikacje nie miały do niej dostępu

UnlockTable

Odblokowuje tabelę

GotoKey

Przechodzi do wybranego rekordu

TDataSet - Klasa TDataSet jest klasą bazową dla komponentów typu TQuery czy TTable, stąd posiada ona
większość metod i właściwości klasy TTable.
Główne właściwości klasy TdataSet:

Metoda

Opis

Active

Ustawienie wartości na True powoduje połączenie z bazą danych i odczytanie zbioru danych

Bof

Właściwość zwraca True, jeśli kursor znajduje się na pierwszym rekordzie

Eof

Wartość zwraca True, jeżeli kursor znajduje się na ostatnim rekordzie

Fields

Wskazanie typu TFields, zwracającego informację na temat pól

FieldValue

Zwraca w postaci typu Variant wartość określonego pola

Filter

Określa kryterium filtrowania rekordów

Filtered

Określa, czy zastosować filtrowanie

Modified

Określa, czy bieżący rekord został zmodyfikowany

RecNo

Bieżący numer rekordu

RecordCount

Ogólna ilość rekordów

Główne metody klasy TdataSet:

Metoda

Opis

Append

Po wywołaniu tej metody stworzony zostaje nowy rekord

Cancel

Anuluje zmiany dokonane w bieżącym rekordzie

ClearFields

Czyści zawartość wszystkich pól rekordu

Delete

Usuwa bieżący rekord

Edit

Daje możliwość edycji rekordu

FetchAll

Pobiera wszystkie rekordy, począwszy od zaznaczonego

FindFirst

Rozpoczyna wyszukiwanie

FindNext

Znajduje kolejny rekord

FindLast

Znajduje ostatni rekord

Refersh

Odświeża zbiór informacji o bazie danych

Tworzenie bazy danych. Utworzenie nowej bazy danych może odbyć się zarówno poprzez aplikację BDE Administrator, jak
i poprzez odpowiednie funkcje w kodzie programu.

Serializacja – w programowaniu komputerów proces przekształcania obiektów, tj. instancji określonych klas, do postaci
szeregowej, czyli w strumień bajtów, z zachowaniem aktualnego stanu obiektu. Serializowany obiekt może zostać utrwalony
w pliku dyskowym, przesłany do innego procesu lub innego komputera poprzez sieć. Procesem odwrotnym do serializacji jest
deserializacja. Proces ten polega na odczytaniu wcześniej zapisanego strumienia danych i odtworzeniu na tej podstawie
obiektu klasy wraz z jego stanem bezpośrednio sprzed serializacji.
Typy serializacji:

Binnary - bardzo prosty sposób zapisu obiektu w strumień. Zaletą jest prostota użycia (wymaga atrybutu
[Serrializable] + strumień + formatter). Wady - oprócz standardowych informacji, zapisywane są też metadane
dotyczące aktualnej wersji platformy .NET oraz specyfikacja typów (zgodna z aktualną wersją platformy).

SOAP - bardzo prosty sposób zapisu obiektu w strumień. Plik wynikowy przypomina swoją strukturą plik XML,
jednak jest on wstępnie formatowany przez platformę .NET, dzięki czemu uzyskujemy prostotę użycia identyczną jak
w przypadku BinnaryFormatera. Dodatkowym atutem jest brak niepotrzebnych metadanych, dzięki czemu zapis typu
SOAP jest w pełni niezależny platformowo. Wada - tak jak w przypadku języka XML serializowany obiekt powinien

background image

posiadać "pusty" konstruktor i składać się z publicznie dostępnych pól (pole albo samo powinno być publiczne
[public] albo posiadać publiczną [public] właściwość).

XML - serializacja w pełni zgodna ze standardami języka XML. Każde serializowane pole powinno być public (lub
mieć publiczną właściwość), wymagany jest "pusty" konstruktor, dodatkowo zarówno podczas serializacji jak i
deserializacji należy podać pełną strukturę pliku XML.

Serializacja danych – Mechanizm:

Budowa obiektu implementującego interface serializable

Zdefiniowanie strumienia

Serializacja właściwa – zmiana obiektu w strumień danych – najczęściej binarnych

Zapis na dysku lub przesłanie przez medium transmisyjne

Odczyt strumienia danych

Deserializacja – zamiana ciągu danych na obiekt danej klasy

Wykonanie serializacji. stworzenie obiektu, Serializacja poprzez strumień, Deserializacja poprzez strumień danych
var
SO1, SO2: SerializableObject;

begin
SO1 := SerializableObject.Create;

SO1.Field := 1;
SerializeObject(SO1);

SO2 := DeserializeObject;
Console.WriteLine(System.Int32(SO2.Field));

end.

Wyjątek jest to informacja o wystąpieniu błędu w trakcie wykonywania programu lub innej sytuacji wymagającej
opuszczenia normalnego trybu wykonywania programu. Przykłady zdarzeń generujących wyjątki:Dzielenie przez zero;
Przekroczenie zakresu tablicy; Przepełnienie stosu Błąd rezerwacji pamięci; Błąd danych; Brak dostępu do danych.
Elementy mechanizmu obsługi wyjątków:

Procedura podniesienia wyjątku: wystąpienie błędu programu lub innego zdarzenia zaburzającego normalny proces
wykonywania programu

Wyjątki są obiektami, mogą zostać pogrupowane w hierarchie a nowe wyjątki mogą być dodane bez zmiany kodu
programu

Wyjątek może przesłać informacje z miejsca wystąpienia tego wyjątku do jego funkcji obsługi (event handler)

Wyjątki użytkownika. Użytkownik może zdefiniować własne wyjątki:
Type EInOutError = class (Exception)

ErrorCode: Integer;
end;

Podnoszenie i obsługa wyjątków. Aby wywołać wyjątek należy wywołać konstruktor danego wyjątku: Raise
EMathError.Create; Polecenie raise przesyła kontrole nad programem do funkcji obsługi wyjątków Funkcja obsługi wyjątku
jest poleceniem w dwóch postaciach: Try lista rozkazów except blok obsługi wyjątku end; Try lista
rozkazów finally lista rozkazow2 end

Polecenie try … except. Składnia: Try blok kodu except blok wyjątku end. Jeżeli wyjątek nie nastąpi blok
wyjątku jest ignorowany Jeżeli wyjątek jest podniesiony w bloku kodu, wykonana jest próba obsługi wyjątku

Powtórne podniesienie wyjątku. Jeżeli słowo raise wystąpi bez określenia referencji do obiektu, uruchamiana jest
funkcja obsługi bieżącego wyjątku Taki mechanizm pozwala na ograniczoną reakcje, przed powtórnym podniesieniem
wyjątku Powtórne podniesienie wyjątku jest przydatne dla usunięcia błędów, w przypadku kiedy użytkownik nie może go w
pełni obsłużyć – domyślna funkcja obsługi wyjątku

Polecenie Try … finally. W pewnych przypadkach wymagane jest wykonanie ciągu operacji pomimo wystąpienia wyjątku
Np. Jeżeli dzielimy zasoby i dostęp do nich, w przypadku wyjątku byłby zablokowany
Składnia: Try blok kodu1 finally blok kodu2 end. Jeżeli wyjątek nie wystąpi blok kodu2 jest wykonywany. Jeżeli
wystąpił wyjątek, wykonywany jest blok kodu 2, przed ponownym podjęciem wyjątku.


Document Outline


Wyszukiwarka

Podobne podstrony:
M INST inf s id 274726 Nieznany
Inf 2 2 id 212904 Nieznany
inf 1 4 id 212899 Nieznany
inf kw bis id 212922 Nieznany
el inf 11 part05 fale02 id 1572 Nieznany
Inf kp wyd V id 212921 Nieznany
Inf Lab02 id 212934 Nieznany
Inf testy1112 id 212971 Nieznany
el inf 11 part06 faleEM id 1572 Nieznany
inf kw bis id 212922 Nieznany
Abolicja podatkowa id 50334 Nieznany (2)
4 LIDER MENEDZER id 37733 Nieznany (2)
katechezy MB id 233498 Nieznany
metro sciaga id 296943 Nieznany
perf id 354744 Nieznany
interbase id 92028 Nieznany
Mbaku id 289860 Nieznany
Probiotyki antybiotyki id 66316 Nieznany

więcej podobnych podstron