Informatika I 4 . přednáška

37
Informatika I 4. přednáška RNDr. Jiří Dvořák, CSc. [email protected]

description

Informatika I 4 . přednáška. RNDr. Jiří Dvořák, CSc. dvorak @uai.fme.vutbr.cz. Obsah přednášky. Datové typy real, integer, boolean, char Výčtový typ a typ interval Typ řetězec Upřesnění k příkazům přiřazení, vstupu a výstupu Datové struktury Typ pole. Datové typy. - PowerPoint PPT Presentation

Transcript of Informatika I 4 . přednáška

Page 1: Informatika I 4 . přednáška

Informatika I4. přednáška

RNDr. Jiří Dvořák, CSc.

[email protected]

Page 2: Informatika I 4 . přednáška

Informatika I: přednáška 4 2

Obsah přednášky

Datové typy real, integer, boolean, char

Výčtový typ a typ interval

Typ řetězec

Upřesnění k příkazům přiřazení, vstupu a výstupu

Datové struktury

Typ pole

Page 3: Informatika I 4 . přednáška

Informatika I: přednáška 4 3

Datové typyDatový typ je určen množinou hodnot a množinou operací.

Datové typy můžeme členit např. podle těchto hledisek:Hledisko strukturovanosti:

jednoduché typy (jejich hodnoty jsou dále nedělitelné) strukturované typy,

Hledisko vztahu k programovacímu jazyku: typy v jazyku předdefinované (jsou pro ně definovány

množiny hodnot i operací) typy definované uživatelem (součástí jazyka jsou některé

operace a dále nástroje pro definici množin hodnot) abstraktní typy (v jazyku pro ně neexistují žádné explicitní

nástroje)

Page 4: Informatika I 4 . přednáška

Informatika I: přednáška 4 4

Datové typy v jazyku Pascal Jednoduché typy:

real, integer, boolean, char, výčet, interval, řetězec (má i některé rysy strukturovaného typu), ukazatel

Strukturované typy:pole, množina záznam, soubor

Předdefinované typy:real, integer, boolean, char

Typy definované uživatelem:výčet, interval, řetězec, pole, množina záznam, soubor, ukazatel

Page 5: Informatika I 4 . přednáška

Informatika I: přednáška 4 5

Typ integerMnožina hodnot:

celá čísla z intervalu [ maxint 1, maxint];maxint = 2n1 1 kde n je počet bitů pro uložení hodnoty

Aritmetické operátory: + , , * , div … celočíselné dělení,mod … získání zbytku po celočíselném dělení

Relační operátory:= , <> , < , <= , > , >=

Příklady funkcí:abs … absolutní hodnota,sqr … druhá mocnina,odd … test, zda číslo je liché

Page 6: Informatika I 4 . přednáška

Informatika I: přednáška 4 6

Příklady k typu integerPříklady konstant:

123, -12, +17

Příklady výsledků některých operací:7 div 2 = 37 mod 2 = 1

Příklady hodnot některých funkcí (I je typu integer):ord(I) = I pred(I)= I-1succ(I)= I+1odd(17)= trueodd(24)= false

Page 7: Informatika I 4 . přednáška

Informatika I: přednáška 4 7

Celočíselné typy v Delphi 6

Typ rozsah počet bytů

Integer –2147483648 .. 2147483647 4

Cardinal 0 .. 4294967295 4

Shortint –128 .. 127 1

Smallint –32768 .. 32767 2

Longint –2147483648..2147483647 4

Int64 –263.. 263–1 8

Byte 0 .. 255 1

Word 0 .. 65535 2

Longword 0 .. 4294967295 4

Page 8: Informatika I 4 . přednáška

Informatika I: přednáška 4 8

Typ realMnožina hodnot:

konečná množina racionálních čísel; její rozsah je dán počtem bytů použitých pro reprezentaci

Aritmetické operátory: + , , * , /

Relační operátory: = , <> , < , <= , > , >=

Příklady funkcí:sqrt … druhá odmocnina sqr, abs, sin, cos, arctan, exp, ln

Funkce pro převod na typ integer:trunc … odseknutí desetinné části,round … zaokrouhlení

Page 9: Informatika I 4 . přednáška

Informatika I: přednáška 4 9

Příklady k typu real

Příklady konstant:

1.23, -0.12, +1.7, 1E6, 0.25E-4

Příklady hodnot konverzních funkcí:

trunc(25.31)= 25 trunc(48.95)= 48round(25.31)= 25 round(48.95)= 49

Page 10: Informatika I 4 . přednáška

Informatika I: přednáška 4 10

Reálné typy v Delphi 6

Typ

Real

Real48

Single

Double

Extended

Comp

Currency

rozsah

5.0 × 10–324 .. 1.7 × 10308

2.9 × 10–39 .. 1.7 × 1038

1.5 × 10–45 .. 3.4 × 1038

5.0 × 10–324 .. 1.7 × 10308

3.6 × 10–4951 .. 1.1 × 104932

–263+1 .. 263 –1

–922337203685477.5808 .. 922337203685477.5807

počet bytů

8

6

4

8

10

8

8

Page 11: Informatika I 4 . přednáška

Informatika I: přednáška 4 11

Typ booleanMnožina hodnot:

true … pravda,false … nepravda

Relační operátory: = , <> , < , <= , > , >=platí vztah false<true

Logické operátory:not … negace, and … konjunkce (logický součin),or … disjunkce (logický součet)

Page 12: Informatika I 4 . přednáška

Informatika I: přednáška 4 12

Příklady k typu boolean

Příklady výsledků logických operací:

not false = truetrue and false = falsetrue or false = true

Příklady hodnot některých funkcí:

ord(false) = 0 pred(true) = falsesucc(false)= true

Page 13: Informatika I 4 . přednáška

Informatika I: přednáška 4 13

Typ charMnožina hodnot:

256 znaků kódu ASCII (American Standard Code for Information Interchange); znaky jsou očíslovány od 0 do 255. Číslice, velká písmena, malá písmena zaujímají souvislé intervaly a mají přirozené uspořádání.

Zápisy konstant:

'znak' , #pořadové_číslo_znakuRelační operátory:

Výsledek srovnání znaků je stejný, jako kdybychom srovnávali jejich ordinální čísla.

Příklady funkcí:ord, pred, succchr … inverzní funkce k funkci ord

Page 14: Informatika I 4 . přednáška

Informatika I: přednáška 4 14

Příklady k typu charPříklady konstant:

'A', '5', '+', #65Výrazy 'A' a #65 reprezentují stejnou hodnotu.

Příklady výsledků relačních operací:'A' > 'B' = false'P' < 'Q' = true

Příklady hodnot některých funkcí:ord('1')= 49, ord('A')= 65, ord('a')= 97,pred('Q')= 'P', succ('A')= 'B',chr(49)= '1', chr(65)= 'A',chr(ord('H')+ord('a')-ord('A'))= 'h'

Page 15: Informatika I 4 . přednáška

Informatika I: přednáška 4 15

Příklady výrazů s typem char

Podmínka pro test, zda hodnotou proměnné Zn je velké písmeno:

('A'<=Zn) and (Zn<='Z')

Převod velkého písmene na malé (předpokládáme, že proměnná Zn obsahuje velké písmeno):

chr(ord(Zn)+ord('a')-ord('A'))

Page 16: Informatika I 4 . přednáška

Informatika I: přednáška 4 16

Možnosti deklarace proměnných pro uživatelsky definované typy

a) Pomocí pojmenovaných typů:

type ident_typu = typ;

var ident_prom : ident_typu;

b) Pomocí nepojmenovaných typů:

var ident_prom : typ;

Page 17: Informatika I 4 . přednáška

Informatika I: přednáška 4 17

Výčtový typDefinice:

(hodnota1, hodnota2, … )

Vlastnosti:Typ výčet je ordinální typ a jeho hodnotami jsou identifikátory. Každá hodnota v seznamu má určené pořadí, počínaje nulou. Jsou definovány relační operace a funkce ord, pred, succ. Hodnoty výčtového typu nemohou být použity při čtení/zápisu z/do textového souboru.

Využití: konstrukce množiny, indexování pole, hodnoty selektoru větvení v příkazu case

Page 18: Informatika I 4 . přednáška

Informatika I: přednáška 4 18

Příklady pro výčtový typDefinice typů a deklarace proměnných:

type TDen = (Po,Ut,St,Ct,Pa,So,Ne); TBarva =(cervena,zluta,modra,fialova);

var Den:TDen; B1,B2:TBarva; Teplota:(nizka,stredni,vysoka);

Výsledky relačních operací:Po < So = truecervena > modra = false

Hodnoty některých funkcí: ord(Po)=0, ord(zluta)=1,pred(Ne)=So, succ(modra)=fialova

Page 19: Informatika I 4 . přednáška

Informatika I: přednáška 4 19

Typ intervalDefinice:

konstanta1 .. konstanta2

Vlastnosti:Typ interval vymezuje interval hodnot v množině hodnot nějakého ordinálního typu a jsou pro něj definovány tytéž operace jako pro hostitelský typ.

Využití: konstrukce množiny indexování pole hodnoty selektoru větvení v příkazu case

Page 20: Informatika I 4 . přednáška

Informatika I: přednáška 4 20

Příklady pro typ interval

Definice typů a deklarace proměnných:

type TDen = (Po,Ut,St,Ct,Pa,So,Ne); TPracDen = Po..Pa; TVelkaPismena = 'A'..'Z'; TRozsahIndexu = 1..100;

var PD: TPracDen; VP1,VP2: TVelkaPismena; i,j: TRozsahIndexu;

Cfr: '0'..'9';

Page 21: Informatika I 4 . přednáška

Informatika I: přednáška 4 21

Typ řetězecDefinice:

string[max_délka]

Vlastnosti:Max_délka je celé číslo z intervalu [1, 255]. Řetězec je vlastně jednorozměrné pole znaků.

Reprezentace:Řetězec je uložen v (max_délka + 1) bytech. Nultý byte obsahuje znak, jehož ordinální číslo určuje skutečnou délku řetězce.

Konstanta: 'posloupnost znaků'Posloupnost znaků může být i prázdná.

Pozn.: Typ string bez uvedení délky je standardní typ, který je v Turbo Pascalu totožný s typem string[255]. Od verze Delphi 2 tento typ umožňuje pracovat s delšími řetězci, které jsou reprezentovány jinak, než je uvedeno výše.

Page 22: Informatika I 4 . přednáška

Informatika I: přednáška 4 22

Operace nad typem řetězecPřístup ke složce:

ProměnnáTypuŘetězec[index]

Index je výraz celočíselného typu.

Relační operace:Řetězce se porovnávají lexikograficky (porovnávají se znaky na 1.pozici, v případě jejich shody znaky na 2.pozici, atd.)

Spojení řetězců: Ke spojování řetězců slouží operátor +.

Přiřazení:Proměnné typu řetězec je možno přiřadit výraz typu znak nebo výraz libovolného typu řetězec.

Určení délky řetězce:length(výraz typu řetězec)

Page 23: Informatika I 4 . přednáška

Informatika I: přednáška 4 23

Příklady pro typ řetězecDefinice typů a deklarace proměnných:

type TRetezec = string[20];var R1,R2:TRetezec; S1,S2:string[50]; S:string;

Výsledky relačních operací:'ABB'<'ABBA'= true, 'ABA'<'ABBA'= true'ABBA'<'BA'= true

Spojování řetězců a hodnoty funkce length: S:=''; {pak length(S)=0}S:=S + 'ALFA'; {pak length(S)=4}S:=S + 'BETA'; {pak length(S)=8}writeln(S);` {vypise se text ALFABETA}

Page 24: Informatika I 4 . přednáška

Informatika I: přednáška 4 24

Příklady pro typ řetězecvar Zn,Zn1,Zn2:char; S:string[100]; i,Pocet:integer;

{Urceni poctu vyskytu znaku Zn v retezci S}

Pocet:=0; for i:=1 to length(S) do if Zn=S[i] then Pocet:=Pocet+1;

{Nahrada znaku Zn1 znakem Zn2 v retezci S}

for i:=1 to length(S) do if S[i]=Zn1 then S[i]:=Zn2;

Page 25: Informatika I 4 . přednáška

Informatika I: přednáška 4 25

Příklady pro typ řetězecOtočení řetězců S a Str:

var S,OS:string[100]; Str,OStr:string; i,N:integer; ... N:=ord(S[0]); {ord(S[0])=length(S)} OS[0]:=S[0]; {nastaveni delky retezce

OS} for i:=1 to N do OS[i]:=S[N-i+1];{Pro typ string se to v Delphi musi udelat takto:} N:=length(Str); SetLength(OStr,N); {nastaveni delky retezce OStr} for i:=1 to N do OStr[i]:=Str[N-i+1];

Page 26: Informatika I 4 . přednáška

Informatika I: přednáška 4 26

Přiřazovací příkaza) proměnná:=výraz

Výraz na pravé straně se vyhodnotí a jeho hodnota se přiřadí proměnné.

b) identifikátor_funkce:=výraz

Tento příkaz se musí objevit v těle funkce definované uživatelem. Zajistí, že funkce vrátí vypočtenou hodnotu do příkazu, z něhož byla volána.

Typy levé a pravé strany přiřazovacího příkazu musejí být kompatibilní vzhledem k přiřazení. Zjednodušeně řečeno to znamená, že oba typy jsou identické (přitom to nesmějí být typy soubor), nebo že množina hodnot typu pravé strany je podmnožinou hodnot typu levé strany.

Page 27: Informatika I 4 . přednáška

Informatika I: přednáška 4 27

Příkazy vstupuVstup z klávesnice (v Turbo Pascalu nebo v konzolové

aplikaci Delphi):

read(proměnná)readln(proměnná) příkazy procedur

readln eoln … funkce testující konec řádku

eof … funkce testující konec souboru

Příkazy vstupu mohou obsahovat několik proměnných, oddělených čárkami. Proměnné mohou být typu integer, real, char a řetězec.

V normální aplikaci Delphi je vstup z klávesnice zajištěn např. pomocí komponenty Edit.

Page 28: Informatika I 4 . přednáška

Informatika I: přednáška 4 28

Příkazy výstupuVýstup na obrazovku (v Turbo Pascalu nebo v konzolové aplikaci

Delphi):

write(parametr)writeln(parametr) příkazy procedurwriteln

Příkazy výstupu mohou obsahovat několik parametrů oddělených čárkami. Možné tvary parametru:

výraz celočíselné výrazy výraz:PočetZnakůvýraz:PočetZnaků:PočDesMíst

Výraz může být typu integer, real, boolean, char a řetězec.

V normální aplikaci Delphi je výstup na obrazovku zajištěn např. pomocí komponenty Edit.

Page 29: Informatika I 4 . přednáška

Informatika I: přednáška 4 29

Příklady klasifikace datových struktur

Hledisko 1 (typ složek): homogenní (složky stejného typu) heterogenní (složky různého typu)

Hledisko 2 (proměnnost struktury): statické (rozsah struktury, tj. rozsah přidělené paměti

se během výpočtu nemění) dynamické (během výpočtu se mění rozsah přidělené

paměti a případně také vztahy mezi složkami struktury a jejich rozmístění v paměti)

Page 30: Informatika I 4 . přednáška

Informatika I: přednáška 4 30

Datové struktury v Pascalu

množina

pole

záznam

soubor

homogenní statické

dynamická

heterogenní

Page 31: Informatika I 4 . přednáška

Informatika I: přednáška 4 31

Typ pole

Definice:

array[TypIndexu] of TypSložky

array[TypIndexu1,TypIndexu2, … ]

of TypSložky

Vlastnosti:Typ indexu je ordinální typ.

Page 32: Informatika I 4 . přednáška

Informatika I: přednáška 4 32

Operace nad typem pole

Přístup ke složce:

ProměnnáTypuPole[index]ProměnnáTypuPole[index1, index2, … ]

Index je výraz ordinálního typu.

Přiřazení:

Proměnná1TypuPole := Proměnná2TypuPole

Musí se jednat o proměnné téhož typu pole.

Page 33: Informatika I 4 . přednáška

Informatika I: přednáška 4 33

Příklady pro typ poleDefinice typů a deklarace proměnných:

type TVektor = array[1..100] of real;

TMatice = array[1..20,1..50] of integer;

var X,Y:TVektor; A,B,C:TMatice; Cetnost:array['a'..'z'] of integer;

Příklady přístupu ke složce pole:

{i a j jsou typu integer, Zn je typu char}

X[i], Y[2i],

A[1,1], B[i,j+1],

Cetnost['q'], Cetnost[Zn]

Page 34: Informatika I 4 . přednáška

Informatika I: přednáška 4 34

Příklady pro typ pole

Výpočet součtu prvků pole:

var X:array[1..200] of real; i,N:integer; {N je skutecny počet prvku} Suma:real;...

Suma:=0;for i:=1 to N do Suma:=Suma+X[i];

Page 35: Informatika I 4 . přednáška

Informatika I: přednáška 4 35

Příklady pro typ pole

Načtení matice typu (M,N):

const MaxM=100; MaxN=100; type TMatice = array[1..MaxM,1..MaxN] of integer; var M,N,i,j:integer; A,B,C:TMatice; ... for i:=1 to M do for j:=1 to N do begin write('Zadej prvek ',i,',',j,': '); readln(A[i,j]); end;

Page 36: Informatika I 4 . přednáška

Informatika I: přednáška 4 36

Příklady pro typ pole

Určení počtu odpracovaných hodin za týden:

type TDen = (Po,Ut,St,Ct,Pa,So,Ne);

var Den:TDen; OdpracZaTyden:real; Odpracovano:array[TDen] of real; ... OdpracZaTyden:=0; for Den:= Po to Ne do

OdpracZaTyden:= OdpracZaTyden+Odpracovano[Den];

Page 37: Informatika I 4 . přednáška

Informatika I: přednáška 4 37

Příklady pro typ pole

Výpis tabulky četností malých písmen:

var mp:'a'..'z'; Cetnost:array['a'..'z'] of integer; ...writeln('Tabulka cetnosti');writeln;writeln('pismeno cetnost');writeln('---------------');for mp:= 'a' to 'z' do writeln(mp:4,Cetnost[mp]:9);