Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování v Pascalu Přednáška 5 RNDr. Hana Havelková.

Podobné prezentace


Prezentace na téma: "Programování v Pascalu Přednáška 5 RNDr. Hana Havelková."— Transkript prezentace:

1 Programování v Pascalu Přednáška 5 RNDr. Hana Havelková

2 Uživatelské datové typy Deklarace Typová shoda Typová kompatibilita Kompatibilita vůči přiřazení Typová konverze, přetypování Typ množina Procedurální typ

3 Deklarace typeidentifikátor typu typ =; procedurální typ strukturovaný typ ukazatelový typ řetězcový typ jednoduchý typ identifikátor typu

4 Příklady type TZnamka = 1.. 5; TTeplota = -20.. 50; TCislo = real; TJmeno = string[25]; TZnaky = array[1..27] of char; TZnamky = array[1..30] of TZnamka; TUkazatelNaReal = ^real; TUkazatelNaInteger = ^integer;

5 Příklady type TZima = (prosinec, leden, unor); TMalaPismena = 'a'.. 'z'; TMala = set of TMalaPismena; TRealnaFunkce = function (x : real):real; TRealnaProc = procedure (var x : real); TDatum = object den : integer; mesic : integer; rok : integer; procedure NastavDatum (d, m, r : integer); function ZjistiDatum : string; end;

6 Typová shoda vyžaduje se u volání procedur a funkcí při náhradě formálních parametrů skutečnými referencí (odkazem) typy T 1 a T 2 jsou shodné, pokud T 1 a T 2 jsou identifikátory stejného typu T 1 je deklarován pomocí pojmenovaného typu ekvivalentního s typem použitým v deklaraci T 2

7 Příklad shodných typů type T1 = integer; T2 = T1; T3 = integer; T4 = T3;

8 Příklad různých typů type T1 = 1.. 10; T2 = 1.. 10; T3 = T1; var a, b : 1.. 10; c : T1; T1 a T2 jsou různé typy, T1 a T3 jsou shodné typy proměnné a, b jsou shodného typu, který ovšem není shodný s T1, T2 ani T3

9 Příklad proměnných různých typů var A, B : set of char; {množina znaků} C : set of char; D : set of char; E : char; F : char; A, B jsou stejného typu C, D jsou různého typu A, C, D jsou navzájem různého typu B, C, D jsou navzájem různého typu E, F jsou shodného typu

10 Typová kompatibilita vyžaduje se u operandů výrazů nebo v relačních operacích je předpokladem pro kompatibilitu vůči přiřazení oba typy jsou stejné oba typy jsou reálné oba typy jsou celočíselné podtypy jeden typ je podintervalem druhého oba typy jsou podintervalem téhož hostitelského typu oba typy jsou množinové se stejným bázovým typem oba typy jsou packed string se stejnou velikostí jeden typ je string a druhý taky string nebo packed string nebo char jeden typ je Pointer a druhý libovolný ukazatelový jeden typ je PChar a druhý typu array[0..n] of Char (direktiva {$T+}) oba typy jsou ukazatelové typy shodného typu oba typy jsou procedurální s identickým návratovým typem a identickým počtem a identickými typy odpovídajících si parametrů

11 Kompatibilita vůči přiřazení (1) Hodnota typu T 2 je kompatibilní vůči přiřazení s typem T 1, platí-li: T 1 a T 2 jsou identické typy nepředstavující ani nezahrnující file T 1 a T 2 jsou kompatibilní ordinální typy a obor hodnot typu T 2 je podmnožinou oboru hodnot T 1 T 1 a T 2 jsou reálné typy, obor hodnot typu T 2 je podmnožinou oboru hodnot T 1 T 1 je reálný typ, T 2 je celočíselný typ T 1 a T 2 jsou řetězcové typy T 1 je typu string a T 2 je typu char T 1 je typu string, T 2 je typu packed string T 1 a T 2 jsou typu packed string T 1 a T 2 jsou kompatibilní množinové typy, hodnoty prvků T 2 leží v rozsahu hodnot prvků T 1 T 1 a T 2 jsou kompatibilní ukazatelové typy

12 Kompatibilita vůči přiřazení (2) Hodnota typu T 2 je kompatibilní vůči přiřazení s typem T 1, platí-li: T 1 je PChar a T 2 je řetězcová konstanta T 1 je typu PChar a T 2 je typu array[0..n] of Char (direktiva {$T+}) T 1 a T 2 jsou kompatibilní procedurální typy T 1 je procedurální typ a T 2 je funkce či procedura s identickým počtem a typy parametrů a identickou návratovou hodnotou T 1 je objektový typ a a T 2 je objektový typ v doméně T 1 Kompatibilita ukazatelů P 1 a P 2 vůči přiřazení P 1 je ukazatel na objektový typ T 1 a P 2 je ukazatel na objektový typ T 2 v doméně T 1

13 Typová konverze, přetypování implicitní – proběhne automaticky při přiřazení (kompatibilita vůči přiřazení) vyhodnocování výrazů (typová kompatibilita) volání procedur a funkcí hodnotou (typová kompatibilita) explicitní – vynucená konverze uvedením konkrétního typu identifikátor typu identifikátor proměnné výraz )(

14 Příklady implicitního přetypování var znak : char; jmeno : string; soucet, x : real; vysledek: real; i : integer; b: byte; begin znak :='A'; i := 4; x := 12.56; b := 64; jmeno := znak + 'Jirasek'; soucet := x + i; vysledek := i * b; i := b; b := i; {chyba} ….

15 Explicitní přetypování var jmeno : string; x : real; vysledek,i: longint; w : word; b: byte; begin x := 12.56; w := 200; b := 150; i := 10; b := byte (i); vysledek := w * b; vysledek := longint(w) * b; b := byte (vysledek); …

16 Typ množina množina hodnot z bázového ordinálního typu obsahujícího nejvýše 256 různých hodnot ordinalita v rozsahu 0 - 255 setordinální typof type TDvoucifernaCisla = 10.. 99; TMalaCisla = set of TDvoucifernaCisla; TPismena = set of char; var Samohlasky : TPismena; Cislicka: TMalaCisla; begin Samohlasky := ['a', 'e', 'i', 'o', 'u', 'y']; Cislicka := [20, 40, 60, 80];

17 Příklad použití množin – kontrola psaní i po tvrdých souhláskách (kontroluje pouze h, k, r) var chyba : boolean; znak : char; begin chyba := false; WriteLn('Zadej vetu ukoncenou tečkou a odradkovanim!'); repeat Read(znak); if znak in ['h','k','r'] then begin Read (znak); if znak in ['i','I','í','Í'] then begin chyba := true; break; end; until znak = '.'; if chyba then WriteLn('Veta obsahuje cizi slovo nebo chybu') else WriteLn('Veta je asi v poradku'); ReadLn; end.

18 Procedurální typ seznam formálních parametrů procedure seznam formálních parametrů function : návratový typ

19 Příklady {$F+} type Funkce1 = function (x : real) : real; Funkce2 = function (x, y : real) : real; var F1 : Funkce1; F2 : Funkce2; function TretiOdmocnina(x : real) : real; begin TretiOdmocnina := exp(ln(x)/3); end; function Max(x,y : real):real; begin if x > y then Max := x else Max := y; end; begin F1 := TretiOdmocnina; F2 := Max; … end.

20 Tabelace funkcí jedné reálné proměnné (1) program TabelaceFunkci; {$F+} uses Crt; type fce = function (x:real): real; var klavesa : char; zacatek, konec, prirustek : real; F : fce;

21 Tabelace funkcí jedné reálné proměnné (2) {deklarace funkci} function sin (x : real) : real; begin sin:=System.sin(x); end; function cos (x : real) : real; begin cos:=System.cos(x); end; function odmocnina2 (x : real) : real; begin odmocnina2 := sqrt(x); end; function mocnina2 (x : real) : real; begin mocnina2 := sqr(x); end;

22 Tabelace funkcí jedné reálné proměnné (3) {Menu - nabídka} function Menu : char; begin WriteLn ('Tabulky funkcnich hodnot'); WriteLn ('________________________'); WriteLn ('Sinus.........S'); WriteLn ('Cosinus.......C'); WriteLn ('2. mocnina....M'); WriteLn ('2. odmocnina..O'); WriteLn ('________________________'); Write ('Stiskni odpovidajici klavesu:'); Menu := UpCase (ReadKey); end;

23 Tabelace funkcí jedné reálné proměnné (4) {výpis funkcnich hodnot v intervalu <odkud, kam) s prirustkem } procedure Tabulka(odkud, kam, prirustek : real; F:fce); var pom : real; begin pom:=odkud; while pom <= kam do begin WriteLn (pom : 6 : 2, F(pom) : 10 : 2); pom:=pom + prirustek; end;

24 begin repeat ClrScr; klavesa := Menu; if klavesa = 'K' then break; if not (klavesa in ['S','C','M','O']) then begin WriteLn(#10#13'Chybna klavesa!!!'); Delay(2000); continue; end; Write(#10#13#10'Zacatek intervalu:'); ReadLn(zacatek); Write('Konec intervalu:'); ReadLn(konec); if zacatek > konec then begin WriteLn('CHYBA');Delay(2000); continue; end; Write('Prirustek:'); ReadLn(prirustek); if prirustek <= 0 then prirustek := (konec – zacatek) / 10; case klavesa of 'S':beginWriteLn('Funkce sinus'); Tabulka(zacatek, konec, prirustek, sin); end; 'C':begin WriteLn('Funkce cosinus'); Tabulka(zacatek, konec, prirustek, cos); end; 'M':begin WriteLn('Funkce druhá mocnina'); Tabulka(zacatek, konec, prirustek, mocnina2); end; 'O':beginWriteLn('Funkce druhá odmocnina'); Tabulka(zacatek, konec, prirustek, odmocnina2); end; Delay(4000); until false; end. Hlavní program

25 Typové konstanty deklarují se v klauzuli const jedná se vlastně o inicializované proměnné ! identifikátortyp : procedurální typ konstanta pole konstanta záznam adres. konstanta konstanta =

26 Jednoduché typové konstanty const MinTeplota : integer = -10; MaxTeplota : integer = 50; Zrychleni : real = 2.5; Tlak : real = 960.5; Odradkovani : char = #10; Odpoved : char = 'A'; Test : boolean = false;

27 Řetězcové typové konstanty const Odradkovani : string[2] = #13#10; Zahlavi : string = 'Programovani v Pascalu'; Zapati : string = 'ZS 2008/2009'; CS_Odpoved : string[3] = 'Ano'; EN_Odpoved : string[3] = 'Yes';

28 Množinové typové konstanty type TTeplota = 0..50; const Samohlasky = set of char = ['a', 'e', 'i', 'o', 'u', 'y']; Cislice : set of char = ['0'.. '9']; Teplota : set of TTeplota = [10..30];


Stáhnout ppt "Programování v Pascalu Přednáška 5 RNDr. Hana Havelková."

Podobné prezentace


Reklamy Google