1 / 37

Informatika I 4 . přednáška

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.

maxine
Download Presentation

Informatika I 4 . přednáška

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Informatika I4. přednáška RNDr. Jiří Dvořák, CSc. dvorak@uai.fme.vutbr.cz

  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 Informatika I: přednáška 4

  3. 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. Typ integer • Množina hodnot: celá čísla z intervalu [ maxint1, maxint]; maxint = 2n1 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 –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 Informatika I: přednáška 4

  8. 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. 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. 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 Informatika I: přednáška 4

  11. 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. 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. 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. 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. 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 = 1..100; var PD: TPracDen; VP1,VP2: TVelkaPismena; i,j: TRozsahIndexu; Cfr: '0'..'9'; Informatika I: přednáška 4

  21. 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} for i:=1 to length(S) do 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} for i:=1 to N do OStr[i]:=Str[N-i+1]; Informatika I: přednáška 4

  26. 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. 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. 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ýrazceločí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. Typ pole • Definice: array[TypIndexu] ofTypSložky array[TypIndexu1,TypIndexu2, … ] ofTypSložky • Vlastnosti: Typ indexu je ordinální typ. 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. Informatika I: přednáška 4

  33. 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[2i], A[1,1], B[i,j+1], Cetnost['q'], Cetnost[Zn] 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]; 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; 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]; 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); Informatika I: přednáška 4

More Related