PPT - Kustra Piotr

Download Report

Transcript PPT - Kustra Piotr

AiSD_W3
Podstawowe struktury danych.
Typy danych.
dr inż. Kustra Piotr
Opracowali Anna Adrian i Kustra Piotr
Dane w matematyce
i
dane w programach komputerowych
W matematyce
dane mogą być kwalifikowane według różnych kluczy i tak rozróżnia się np dane
 rzeczywiste, zespolone, logiczne.....
 pojedyncze, ciągi wartości, zbiory wartości, zbiory zbiorów.....
 funkcje, funkcjonały, zbiory funkcji..... .itp
W komputerowym przetwarzaniu danych obowiązują następujące zasady
• każda stała, zmienna, wyrażenie, czy funkcja jest określonego typu
• typ podaje się explicite w części deklaracyjnej programu, poprzedzającej
użycie konkretnej danej (stałej, zmiennej) w części wykonawczej
• kompilator dokonuje wyboru reprezentacji obiektów wewnątrz pamięci
maszyny, co skutkuje przydziałem obszaru pamięci odpowiedniej wielkości
(w zależności od typu).
2
Rezerwacja pamięci komputerowej
potrzebnej do realizacji algorytmu
W JĘZYKU PASCAL
CZĘŚĆ OPISOWA/DEKLARACYJNA
Rezerwacja pamięci komputerowej
deklaracje typów danych
CZĘŚĆ WYKONAWCZA
Algorytm
3
Dane
•
Dane wejściowe (w programie komputerowym) – stanowią surowiec, który będzie
przetworzony (według pewnego algorytmu) w produkt czyli w dane wynikowe.
•
Zbiór danych (model), mający reprezentować rzeczywistą sytuację, określa człowiek
na podstawie przekonania, iż pewne cechy (własności) badanych obiektów są istotne
dla
rozwiązania
rozważanego
problemu
i będzie można z nich uzyskać oczekiwane wyniki - wybór danych jest więc
podporządkowany rozwiązywanemu problemowi.
•
Wybór formy reprezentacji danych w systemie powinien uwzględniać możliwości
komputera (narzędzia użytego do rozwiązania problemu).
4
Typy danych
Typ danej dokładnie określa zbiór wartości do którego należy stała,
jakie może przyjmować zmienna czy wyrażenie, bądź jakie mogą być
generowane przez operator lub funkcję.
 Typ wartości oznaczonej przez stałą, zmienną lub wyrażenie można określić na
podstawie ich postaci bądź deklaracji, bez konieczności wykonywania procesu
obliczeniowego.
 Każdy operator lub funkcja ma argumenty określonego typu, jak również daje
wynik ustalonego typu ( typ wyniku określany jest regułami specyficznymi dla
danego języka). function suma(x:integer, y: integer) :integer;
 Kompilator może korzystać z informacji o typach w celu sprawdzenia
poprawności konstrukcji językowych np. przypisanie wartości logicznej zmiennej
rzeczywistej zostanie wykryte bez wykonywania programu
function suma(x:real, y: integer) :??????;
5
Definiowanie typu danych
Programista ma możliwość definiowania typów danych
type sekwencja definicji typów
Identyfikator_typu = opis_typu;
•
•
•
•
•
•
Najczęściej typy danych definiuje się za pomocą typów danych zdefiniowanych wcześniej.
Wartości typu złożonego są zwykle konglomeratami wartości składowych o wcześniej
zdefiniowanych typach składowych (constituent types); - są to tzw. wartości ustrukturowane.
Jeśli wszystkie wartości składowe są tego samego typu, to nazywa się on typem
podstawowym (base type)
Jeśli wartości typu są uporządkowane, to typ nazywa się uporządkowany (ordered) albo
skalarny (scalar)
Liczbę różnych wartości należących do typu T nazywa się mocą typu (cardinality)
Moc typu pozwala określić wielkość pamięci potrzebnej do reprezentowania zmiennej typu T
6
Proste typy danych-typ wyliczeniowy
Moc (T)= n
type T= (c1,c2,....,cn)
Przykłady
type płeć = (mężczyzna, kobieta) – uwaga tak nie można pisać w Pascalu
type dzientygodnia = (poniedzialek, wtorek,... ,niedziela)
type Boolean = ( false, true)
Identyfikatory typów np. kolor, płeć.. Mogą zostać użyte w programie jako stałe
oznaczające zbiory wartości definiowanego typu.
Wprowadźmy zmienne var p: płeć
var d: dzientygodnia
var b: Boolean
Możliwe są wtedy następujące instrukcje przypisania
p:=mężczyzna;
d:=niedziela; b:=true
7
Przykład typów wyliczeniowych w
Turbo Pascal
program TypyDanych;
type
Miesiace = (Styczen , Luty , Marzec);
var
Aktualny_miesiac : Miesiace ;
begin
Aktualny_miesiac := Luty ;
Writeln(Aktualny_miesiac);
Aktualny_miesiac := Kwiecien ; // błąd przypisania !!!
Readln;
end.
8
Standardowe typy proste -STP
Istnieją pewne typy standardowe ( standard types), na ogół zawierają
one liczby i wartości logiczne, które w większości maszyn cyfrowych
występują jako „możliwości wbudowane”.
Należą do nich :
 Zbiór liczb całkowitych
 Zbiór wartości logicznych
 Zbiór znaków drukarki
 Liczby rzeczywiste
integer
Boolenan
char
real
9
STP: liczby całkowite
ShortInt[-128..127]
zajmuje 1 bajt pamięci
Byte
[0..255]
zajmuje 1 bajt pamięci
Integer [-32 768..32768]
zajmuje 2 bajty pamięci
Word [0..65 535]
zajmuje 2 bajty pamięci
LongInt [-2 147 483 648.. 2 147 483 648]
zajmuje 4 bajty pamięci
Zakłada się, że wszystkie operacje wykonywane na danych tego typu
• są dokładne,
• odpowiadają podstawowym prawom arytmetyki,
• wykonanie programu zostanie przerwane, gdy wynik obliczeń znajdzie się poza
reprezentowanym podzbiorem
• standardowe operatory zachowujące typ +, -,*, div (dzielenie całkowite), mod
10
Przykład zmiennych w Turbo Pascal
program project1;
var
sum: word;
size: integer;
i: integer;
begin
size:=10;
sum:=0;
for i:=1 to size do
begin
sum:=sum+1;
end;
end.
11
STP- liczby rzeczywiste
Real
(2.9e-39, 1.7e38)
zajmuje 6 bajtów pamięci
Single
(1,5e-45,3.4e38)
zajmuje 4 bajty pamięci
Double
(5.0e-324,1.7e308)
zajmuje 8 bajtów pamięci
Extended
(3.4e-4932,1.1e4932)
zajmuje10 bajtów pamięci
Comp
(--9.2e18,9.2e18)
zajmuje 8 bajtów pamięci, są to liczby
całkowite zapisane jako rzeczywiste (zmiennoprzecinkowe)
Wymienione tu typy oznaczają podzbiory zbioru liczb rzeczywistych..
Podstawowe operatory arytmetyczne to +,-,*,/
Arytmetyka liczb rzeczywistych dopuszcza wyniki niedokładne, spowodowane
błędami zaokrągleń powstających w rezultacie wykonywania obliczeń na
skończonej liczbie cyfr
12
Typy logiczne
Boolean
ByteBool
WordBool
LongBool
zajmuje 1 bajt pamięci
zajmuje 1 bajt pamięci
zajmuje 2 bajty pamięci
zajmuje 4 bajty pamięci
Podstawowym typem logicznym w programach Pascalowych
jest typ Boolean, pozostałe typy stosuje się dla zapewnienia
zgodności programów pascalowych z programami
(bibliotekami) napisanymi w innych językach oraz ze
środowiskiem Windows.
13
Typ znakowy
Do oznaczenia typu znakowego służy predefiniowany
identyfikator Char
Elementami typu znakowego są znaki ASCII, zawiera 95 znaków
drukowanych (graficznych i 33 znaki sterujące. Zbiór
zawierający 64 znaki drukarki ( bez małych liter jest znany jako
ograniczony zbiór znaków ASCII
Po wczytaniu zmiennej typu Char, wprowadzany jest
deklarowany znak i przypisywany zmiennej.
string
Wprowadzany jest ciąg znaków o długości nie większej od
długości łańcucha i nie większej niż liczba znaków bieżącego
wiersza ( tj do znaku CR ale bez niego) po czym ciąg jest
przypisywany zmiennej.
14
Typ Char
Do oznaczenia typu znakowego służy predefiniowany identyfikator Char
Przy konstruowaniu algorytmów w których korzysta się ze znaków (wartości typu char) należy
pamiętać o tym, że:
• typ char zawiera 26 liter łacińskich, 10 cyfr arabskich i pewną liczbę innych znaków
graficznych w tym np znaków przystankowych;
• Podzbiory liter i cyfr są uporządkowane i spójne, tzn:
( ‘A’<=x) i (x<=‘Z’) oznacza, że x jest literą
( ‘0’<=x) i (x<=‘9’) oznacza, że x jest cyfrą
• Typ char zawiera znak pusty (spację), którego można używać jako separatora
• Istneje możliwość stosowania dwóch funkcji konwersji pomiędzy typami char i integer.
 char (i) oznacza i-ty znak ze zbioru char
char(ord(c))=c
 ord (c) oznacza liczbę porządkową znaku c w zbiorze char
ord(char(i))=i
• Funkcje konwersji mają zastosowanie do przekształceń liczb na ciągi cyfr i odwrotnie: np.
 f(c)-ord(c)- ord (‘0’) tj pozycja c wśród cyfr f(‘3’)=3
 g(i) = char (i) + ord(‘0’) i-ta cyfra, g(5)=‘5’
15
Char w Turbo Pascal
program znaki;
var
imie: array[1..10] of char;
nazwisko: array[1..10] of char;
ImieNazwisko: array[1..15] of char;
begin
imie:=' Jan';
nazwisko:='Kowalski';
ImieNazwisko:=imie + nazwisko;
ImieNazwisko[10]:='X';
writeln(ImieNazwisko);
readln;
end.
16
String w Turbo Pascal
program CiagiZnakow;
var
imie: string;
nazwisko: string;
ImieNazwisko: string;
begin
write('Podaj imie');
readln(imie);
nazwisko:=' Kowalski';
ImieNazwisko:=imie + nazwisko;
writeln(ImieNazwisko);
readln;
end.
17
Typy okrojone
Type T= min..max
Przykłady
type rok= 1900..1999
type litera=‘A’..’Z’
type cyfra=‘0’..’9’
Dla zmiennych
Var y:rok
Var L:litera
Dozwolone są przypisania
y:=1973 i L=‘K’
18
Definiowanie typów złożonych
• Metoda polegająca na wyliczaniu wartości tworzących typ, wymaga by
składowe były „atomowe” np. type kształt= (prostokąt, kwadrat, koło, elipsa)
typ o nazwie kształt ma jedynie składowe: prostokąt, kwadrat, okrąg
elipsa i żadnych innych
• Definiowanie typów złożonych (ustrukturowanych) polega na tworzeniu
konglomeratów wartości składowych o pierwotnie zdefiniowanych typach
składowych
• Typ składowy także może być typem złożonym, o dowolnym stopniu
zagnieżdżenia. np
 type pociąg = ( lokalny, dalekobieżny, międzynarodowy)
 type środeklokomocji= (pociąg, samochód, autobus, statek, samolot)
 type struktura = (plik, tablica, rekord, zbiór)
19
Struktury danych
Typy złożone danych
Podstawowe statyczne struktury danych to:
 Tablica, rekord, zbiór i ciąg (plik)
Dynamiczne struktury informacyjne to:
 Listy, pierścienie, drzewa, grafy skończone
20
Podstawowe struktury danych
Statyczne struktury danych to takie, dla których poprzez zdefiniowanie typu
danych ustalono raz na zawsze:
• Zakres przyjmowanych wartości
• Wzorzec pamięciowy (określono potrzebne zasoby pamięci)
Rozmiar statycznych struktur danych nie ulega zmianie w trakcie działania
programu!!!
Podstawowymi strukturami statycznymi są:
tablica, rekord i zbiór, plik, które:
• najczęściej występują w praktyce
• stanowią elementy do budowy struktur bardziej złożonych,
w tym również struktur dynamicznych.
21
Tablice statyczne
name: array[1..10] of type; -> tab: array[1..10] of integer;
1
2
integer integer
3
4
integer
integer
5
6
integer integer
7
8
integer
integer
9
10
integer integer
Tablica jest strukturą jednorodną, o dostępie swobodnym, złożoną ze
składowych tego samego typu (integer, real, char ), zwanego typem
podstawowym.
tab[5]:=10;
tab[2]:=-6; tab[9]:=tab[5]+tab[2]
1
2
3
4
5
6
7
8
9
10
0
-6
0
0
10
0
0
0
4
0
Indeks, służący do wybierania (identyfikowania) pojedynczej składowej
tablicy jest również wartością pewnego typu indeksującego I(integer).22
Tablice statyczne
Zmienna tablicowa traktowana jako tablica zmiennych składowych,
umożliwia selektywne aktualizowanie poszczególnych składowych.
Indeksy tablicy (nazwy zmiennych składowych) muszą być elementami
zdefiniowanego typu skalarnego.
Indeksy mogą być obliczane tzn. stała indeksowa może być zastąpiona
wyrażeniem indeksowym. Indeksem staje się obliczona wartość i tu
uwzględnić należy, że wartość wynikowa może znaleźć się poza
dopuszczalnym zakresem indeksów tablicy. Co wtedy?
i:=4; tab[i]:=20;
i:=i+8; tab[i]:=-22;
i=12??
tab[12?]:=-22;
1
2
3
4
5
6
7
8
9
10
0
-6
0
20
10
0
0
0
4
0
23
Tablice złożone z tablic - macierze
Składowe typów mogą być również złożone.
Tablica, której składowe są tablicami, nazywana jest macierzą
(matrix), np. tablica M jest macierzą 53,
o 5 składowych W, z których każda jest tablicą o 3 składowych
1
2
3
4
5
typu real
M: array [1..5] of W
Type W = array[1..3] of real
inaczej
M: array [1..5] of array [1..3] of real;
M: array [1..5,1..3] of real;
1
1 1,1
2
3
3 3,3
2
3
0,5
2,1
6
9
3
4
5
3,66 5,56
12
15
18,9 43,9 83,4
24
Wektory statyczne w Turbo Pascal
program wektor;
var
imie: array[1..10] of char;
tab: array [1..10] of integer;
i: integer;
begin
for i:=1 to 10 do
begin
tab[i]:=i*5;
write(tab[i],' ');
end;
writeln;
readln;
end.
25
Macierze statyczne w Turbo Pascal
program macierz;
var
M: array [1..10] of array [1..5] of integer;
M2: array [1..10,1..5] of real;
i: integer;
j: integer;
begin
for i:=1 to 10 do
begin
for j:=1 to 5 do
begin
M[i,j]:=i*j;
write(M[i , j],' ');
end;
end;
writeln;
readln;
end.
tab: array[1..5,1..5,1..5] of integer;
tab[1,4,2]:=33;
26
Program na obliczanie iloczynu macierzy A(m,n) i B(n,p),
której wynikiem jest macierz C(m,p)
cik= aij* bjk
, i=1,2....,m k=1,2......,p
program ilmacierzy;
var i,j,k,m,n,p
: Integer;
suma
: Real;
a, b, c
:array [1..20, 1..20] of Real;
begin
....
for i:=1 to m do
for k:=1 to p do
begin
suma :=0;
for j:=1 to n do
suma:=suma +a[i,j]*b[j,k];
c[i,k]:=suma
end ;
.....
27
Przykład typów w Turbo Pascal
type komputer=record
 nCPU: integer;
 nazwa: string;
 dlugosc: real;
 wysokosc: real;
 RamGB: integer;
end;
var
komp1: komputer;
komp2: komputer;
komp: array [1..10] of komputer;
begin
komp1.nCPU:=4;
komp2.RamGB:=8;
komp[1].nCPU:=5;
end.
28
Przykład rekordu w Turbo Pascal
program ComplexData;
type complex = record
re, im: Real;
end;
var
cmp: complex;
begin
cmp.re:=1;
cmp.im:=1;
writeln(cmp.im);
readln;
end.
29
Konstrukcja typu rekordowego
program person;
type data = record
dzien: 1..31;
miesiac: 1..12;
rok: 1..2100;
end;
var
os1: osoba;
begin
os1.imie:='Jan';
os1.nazwisko:='Kowalski';
os1.plec:=mezczyzna;
os1.dataur.dzien:=4;
os1.dataur.miesiac:=9;
readln;
end.
type Osoba = record
nazwisko, imie: string;
dataur: Data;
case plec: (mezczyzna, kobieta) of
mezczyzna: (waga: real; brodaty: boolean;);
kobieta: (wymiary: array [1..3] of integer)
end;
30
Rekordy z wariantami
type wspolrzędne=
record case rodzaj (kartezjanskie, biegunowe) of
kartezjanskie : (x,y: real);
biegunowe: (r: real; : real)
end
Nazwą pola znacznikowego jest tu rodzaj współrzędnych
Zbiór wartości typu (T) wspolrzedne jest sumą dwóch typów:
T1 = (x,y: real)
T2 = (r: real; : real)
Moc (T) = moc (T1) + moc (T2)
31
Struktura zbioru
type T = set of T
Przykład
type zbiorcalk
=
set of 0..30
type zbiorznakow
=
set of char
type stanwiedzy
=
set of stan
type stan= (niezadawalający, dostateczny, dobry,
bardzodobry)
32
Fizyczne zbiory danych
Do wprowadzania danych i wyprowadzania wyników służą
urządzenia zewnętrzne komputera: klawiatura i ekran
monitora - to standard,
 ale także drukarka,
 dyski elastyczne (dyskietki),
 dyski stałe optyczne-CD itp.
Dane wprowadzane z tych urządzeń lub wyprowadzane
poprzez te urządzenia nazywamy "fizycznymi zbiorami
danych" , a ich logicznymi modelami są "pliki ".
33
Przetwarzanie plików
Opis zmiennej plikowe( w części opisowej)
Skojarzenie pliku z fizycznym zbiorem danych
Assign ( identyfikator pliku, wyrażenie łańcuchowe)
Otwarcie pliku
Rewrite (zmienna -plikowa)
Reset(zmienna -plikowa)
Append( zmienna plikowa)
Wykonanie operacji na pliku
Zamknięcie pliku
Close (zmienna plikowa)
34
Operacje wykonywane na pliku
-zakładanie pliku,
-wprowadzanie elementów do założonego pliku,
-dodawanie elementów do już istniejącego pliku,
-przeszukiwanie i odnajdywanie określonych elementów
w pliku,
-wyprowadzanie elementów z pliku,
-wymiana elementów pliku,
35