Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Informatika I 4. přednáška
RNDr. Jiří Dvořák, CSc.
2
Informatika I: přednáška 4
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 Informatika I: přednáška 4
3
Informatika I: přednáška 4
Datové typy Datový 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) 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 Informatika I: přednáška 4
5
Informatika I: přednáška 4
Typ integer Množ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é Informatika I: přednáška 4
6
Příklady k typu integer
Příklady konstant: 123, -12, +17 Příklady výsledků některých operací: 7 div 2 = 3 7 mod 2 = 1 Příklady hodnot některých funkcí (I je typu integer): ord(I) = I pred(I)= I-1 succ(I)= I+1 odd(17)= true odd(24)= false Informatika I: přednáška 4
7
Celočíselné typy v Delphi 6
Typ rozsah počet bytů Integer – Cardinal Shortint – Smallint – Longint – Int64 – –1 8 Byte Word Longword Informatika I: přednáška 4
8
Informatika I: přednáška 4
Typ real Množ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í Informatika I: přednáška 4
9
Informatika I: přednáška 4
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)= 48 round(25.31)= 25 round(48.95)= 49 Informatika I: přednáška 4
10
Informatika I: přednáška 4
Reálné typy v Delphi 6 Typ Real Real48 Single Double Extended Comp Currency rozsah 5.0 × 10– × 10308 2.9 × 10– × 1038 1.5 × 10– × 1038 3.6 × 10– × – –1 – počet bytů 8 6 4 10 Informatika I: přednáška 4
11
Informatika I: přednáška 4
Typ boolean Množ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) Informatika I: přednáška 4
12
Příklady k typu boolean
Příklady výsledků logických operací: not false = true true and false = false true or false = true Příklady hodnot některých funkcí: ord(false) = 0 pred(true) = false succ(false)= true Informatika I: přednáška 4
13
Informatika I: přednáška 4
Typ char Množ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_znaku Relační operátory: Výsledek srovnání znaků je stejný, jako kdybychom srovnávali jejich ordinální čísla. Příklady funkcí: ord, pred, succ chr … inverzní funkce k funkci ord Informatika I: přednáška 4
14
Informatika I: přednáška 4
Příklady k typu char Příklady konstant: 'A', '5', '+', #65 Vý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' 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')) 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; Informatika I: přednáška 4
17
Informatika I: přednáška 4
Výčtový typ Definice: (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 Informatika I: přednáška 4
18
Příklady pro výčtový typ
Definice 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 = true cervena > modra = false Hodnoty některých funkcí: ord(Po)=0, ord(zluta)=1, pred(Ne)=So, succ(modra)=fialova Informatika I: přednáška 4
19
Informatika I: přednáška 4
Typ interval Definice: 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 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 = ; var PD: TPracDen; VP1,VP2: TVelkaPismena; i,j: TRozsahIndexu; Cfr: '0'..'9'; Informatika I: přednáška 4
21
Informatika I: přednáška 4
Typ řetězec Definice: 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. Informatika I: přednáška 4
22
Operace nad typem řetězec
Pří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) Informatika I: přednáška 4
23
Příklady pro typ řetězec
Definice 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} Informatika I: přednáška 4
24
Příklady pro typ řetězec
var 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} if S[i]=Zn1 then S[i]:=Zn2; Informatika I: přednáška 4
25
Příklady pro typ řetězec
Otoč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} OStr[i]:=Str[N-i+1]; Informatika I: přednáška 4
26
Informatika I: přednáška 4
Přiřazovací příkaz a) 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. Informatika I: přednáška 4
27
Informatika I: přednáška 4
Příkazy vstupu Vstup 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. Informatika I: přednáška 4
28
Informatika I: přednáška 4
Příkazy výstupu Výstup na obrazovku (v Turbo Pascalu nebo v konzolové aplikaci Delphi): write(parametr) writeln(parametr) příkazy procedur writeln 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. 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) Informatika I: přednáška 4
30
Datové struktury v Pascalu
množina pole záznam soubor homogenní statické heterogenní dynamická Informatika I: přednáška 4
31
Informatika I: přednáška 4
Typ pole Definice: array[TypIndexu] of TypSložky array[TypIndexu1,TypIndexu2, … ] of TypSložky Vlastnosti: Typ indexu je ordinální typ. Informatika I: přednáška 4
32
Informatika I: přednáška 4
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. Informatika I: přednáška 4
33
Informatika I: přednáška 4
Příklady pro typ pole Definice 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] Informatika I: přednáška 4
34
Informatika I: přednáška 4
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]; Informatika I: přednáška 4
35
Informatika I: přednáška 4
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; Informatika I: přednáška 4
36
Informatika I: přednáška 4
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]; Informatika I: přednáška 4
37
Informatika I: přednáška 4
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); Informatika I: přednáška 4
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.