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

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

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

Podobné prezentace


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

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

2 Příkazy cyklu for while repeat … until

3 Cyklus for předem je znám počet opakování cyklu je řízený řídící proměnnou (počitadlem) řídící proměnná musí být ordinálního typu počáteční hodnota a koncová hodnota počitadla je předem dána počáteční hodnota se zvyšuje (snižuje) o 1 do koncové hodnoty jedná se vlastně o cyklus s podmínkou na začátku, takže nemusí proběhnout ani jednou – je-li např. počáteční hodnota větší než koncová a má se zvyšovat proměnnáfor to do downto := kon. hodnota poč. hodnota příkaz

4 Příklad cyklu for – součet posloupnosti n čísel var n, i : integer; cislo, suma : real; begin Write('Zadej počet hodnot: '); ReadLn(n); suma := 0; for i := 1 to n do begin Write(i +'. cislo: '); ReadLn(cislo); suma := suma + cislo; end; WriteLn('Soucet je ', suma); ReadLn end.

5 Příklad for – tabulka druhých odmocnin celých čísel v daném rozsahu const dolni_mez : integer = 1; horni_mez : integer = 100; var n : integer; begin for n := dolni_mez to horni_mez do WriteLn(n : 3, sqrt(n) : 8 : 4); ReadLn end.

6 Příklad for – výpis násobků 5 od 1 do N var N, i : integer; begin Write('Zadej N: '); ReadLn(N); for i := 1 to N div 5 do Write (5*i,' '); WriteLn; ReadLn end.

7 Cyklus while cyklus s podmínkou na začátku podmínka (logický výraz) se vyhodnotí je-li true (podmínka platí), vykonají se příkazy těla cyklu a jde se znovu na další testování podmínky je-li false (podmínka neplatí), provádění cyklu je ukončeno nemusí být předem znám počet opakování cyklu cyklus nemusí proběhnout ani jednou whiledolog. výrazpříkaz

8 Největší společný dělitel dvou čísel {Eukleiduv algoritmus} var x, y : word; begin Write('Zadej dvě přirozená čísla: '); readLn(x, y); while x <> y do begin if x > y then x := x – y else y := y – x; end; WriteLn('NSD je: ', x); ReadLn end.

9 Přirozená mocnina čísla - x n var x, mocnina : real; n : byte; begin Write('Zadej číslo: '); ReadLn(x); Write('Zadej přirozený exponent: ');ReadLn(n); mocnina := 1; while n > 0 do begin if Odd(n) then mocnina := mocnina * x; {n je liché} n := n div 2; x := x * x; end; WriteLn('Mocnina je ', mocnina : 16:4); ReadLn end.

10 Průměr posloupnosti čísel zakončené pomocí CTRL-Z (eof stand. vstupu) var pocet : integer; cislo, suma : real; begin pocet := 0; suma := 0; Write('Zadej první číslo: '); while not eof do begin readLn(cislo); Inc(pocet); suma := suma + cislo; Write('Další číslo: '); end; if pocet > 0 then WriteLn('Průměr: ', suma/pocet : 12:4) else WriteLn('Prázdná posloupnost'); ReadLn end.

11 Nekonečný cyklus while true do WriteLn('Ahoj'); Ukončení nekonečného provádění programu: CTRL - Break

12 Tabelace funkce sin, cos const PI : real = ; var x, prirustek, dolni_mez, horni_mez : real; begin dolni_mez := 0; horni_mez:= 2*PI; prirustek := PI/20; x := dolni_mez; while x <> horni_mez do begin WriteLn(x:10:8, sin(x) :12:8, cos(x) : 12 : 8); x := x + prirustek; end; ReadLn end. Nekonečný cyklus  Proč asi?

13 Cyklus repeat cyklus s podmínkou na konci podmínka (logický výraz) se vyhodnotí je-li false (podmínka neplatí), vykonají se příkazy těla cyklu a jde se znovu na další testování podmínky je-li true (podmínka platí), provádění cyklu je ukončeno předem není znám počet opakování cyklus proběhne vždy aspoň jednou repeatuntilpříkaz log. výraz

14 Kontrola zadávání známky v rozsahu 1 – 5 var znamka : byte; begin repeat Write('Zadej známku: '); ReadLn(znamka); until (znamka > 0) and (znamka < 6); …. end.

15 Největší společný dělitel podruhé var x, y, zbytek : word; begin Write('Zadej dvě přirozená čísla'); ReadLn(x, y); repeat zbytek := x mod y; x := y; y := zbytek; until zbytek = 0; WriteLn('NSD je ', x); ReadLn end.

16 Blok představuje jistou ucelenou část programu programové jednotky procedury funkce metody je složen z deklarací (mohou být v libovolném pořadí) návěští konstant typů proměnných procedur a funkcí příkazů

17 Rozsah platnosti identifikátorů veškeré identifikátory a návěští deklarované v deklarační části bloku mají omezenou platnost pro tento blok – jsou lokální použijeme-li tedy v různých blocích stejné identifikátory, mohou se překrývat, jsou-li bloky do sebe vnořeny

18 Test platnosti program TestPlatnosti; var a, b : integer; procedure Pokus; var a : integer; begin a:=77; WriteLn(a:3, b:3, a*b:5); end; {hlavní program} begin a:=5; b:= 10; WriteLn(a:3, b:3, a*b:5) ; {vypíše } Pokus; {vypíše } end.

19 Podprogramy ucelené části kódu, které se mají opakované využití umožňují strukturovat (zpřehlednit) kód Dělí se na procedury – nevracejí hodnotu funkce – vracejí hodnotu

20 Deklarace procedury hlavička procedury blok procedury identifikátor seznam formálních parametrů kvalifikovaný identifikátor procedure

21 Tělo procedury blok asm blok direktiva inline near interrupt far forward external ;

22 Parametry seznam formálních parametrů () deklarace parametru ; seznam parametrů var const : typ

23 Druhy formálních parametrů hodnotové nepředchází jim var je uveden jejich typ konstantní předchází jim const je uveden jejich typ proměnné předchází jim var je uveden jejich typ netypové předchází jim var nebo const není uveden jejich typ

24 Hodnotové parametry formální parametr představuje lokální proměnnou v dané proceduře (funkci) jako skutečný parametr může figurovat výraz, který se vyhodnotí a dosadí do příslušné lokální proměnné náhrada formálního parametru skutečným je tzv. náhrada hodnotou typ skutečného parametru nesmí být file nebo strukturovaný typ zahrnující typ file skutečný a formální parametr musí být kompatibilní vůči přiřazení je-li skutečný parametr podtyp typu string, musí být formální parametr typu string

25 Konstantní parametry formální parametr se chová jako read-only lokální proměnná procedury (funkce) této proměnné není možné přiřadit nějakou hodnotu hodnota této proměnné je získána z odpovídajícího skutečného parametru při použití konstantních parametrů se generuje efektivnější kód, než kdyby se použily hodnotové parametry, které by byly neměnné

26 Proměnné parametry používají se, pokud je nutné voláním procedury (funkce) zajistit výstup hodnoty – výstupní parametry (vlastně vstupně-výstupní) formální parametr představuje skutečnou proměnnou existující ještě před voláním procedury (funkce) jakýkoliv odkaz na formální parametr je vlastně odkazem na skutečný parametr náhrada formálního parametru skutečným je tzv. náhrada odkazem (referencí) skutečný parametr musí být proměnná stejného typu jako formální parametr direktiva $P reguluje použití parametrů typu string {$P+} typ string představuje parametr open-string {$P-} typ string odpovídá string[255]

27 Netypové parametry skutečným parametrem může být odkaz na libovolnou proměnnou nebo konstantu netypový parametr uvedený klíčovým slovem var se dá modifikovat netypový parametr uvedený klíčovým slovem const je read-only

28 Příklad – podtržený text procedure PodtrzenyText (txt : string); var delka, i : byte; begin delka := Length(txt); Writeln(txt); for i := 1 to delka do Write('_'); WriteLn; end; Poznámka: mohl by být použit konstantní parametr tj. procedure PodtrzenyText (const txt : string);

29 Převod čísla na řetězec procedure IntToStr (n : integer; var S : string); var cifra : char; A : integer; begin S := ''; A := Abs(n); repeat cifra := Chr((A mod 10) + Ord('0')); S := cifra + S; A := A div 10; until A = 0; if n < 0 then S := '-' + S ; end;

30 Procedura vyměňující hodnoty dvou proměnných procedure Vymena(var a : real; var b : real) var tmp : real; begin tmp := a; a := b; b := tmp; end;

31 Near a far TP podporuje dva modely volání procedur a funkcí near – efektivnější kód, ale tyto procedury a fce se dají použít jen z modulu, v němž jsou deklarovány far – méně efektivní kód, ale procedury a fce se dají použít z libovolného modulu, tj. nejen z toho, v němž jsou deklarovány Překladač automaticky korektně volí vhodný model procedury a fce deklarované v implementation části programové jednotky (unit) – model near procedury a fce deklarované v interface části programové jednotky (unit) – model far direktiva {$F+} vynucuje far model direktiva {$F-} ponechává volbu na překladači

32 Forward zveřejňuje pouze uvádí hlavičku procedury či funkce umožňuje použít proceduru (fci) v kódu dříve, než je definována definice této procedury či funkce musí následovat někde dále, není pak již nutné uvádět seznam formálních parametrů (ani návratový typ fce)

33 External umožňuje použít (připojit, přilinkovat) procedury a fce původně napsané v assembleru, které byly již přeloženy do souborů OBJ příslušný kód se musí připojit direktivou {$L jmeno_souboru} procedure MoveWord(var Source, Destination; Count : word); external; procedure FillWord(var Destination; Data:integer; Count : word); external; {$L d:\ASM\PROC.OBJ}

34 Assembler umožňuje psát celé procedury (fce) v assembleru assembler deklarační část asm příkaz;

35 Inline umožňuje psát místo bloku příkazů pascalského kódu rovnou psát strojový kód

36 Deklarace funkce hlavička funkceblok funkce hlavička funkce identifikátor seznam form. parametrů kvalif. identifikátor function návratový typ :

37 Funkce signum function Signum (cislo : real) : shortint ; begin if cislo > 0 then Signum := 1 else if cislo = 0 then Signum := 0 else Signum := -1; end;

38 Ciferný součet function CifernySoucet(cislo : word) : byte; var suma, cifra : byte; begin suma := 0; while cislo > 0 do begin cifra := cislo mod 10; cislo := cislo div 10 suma := suma + cifra; end;


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

Podobné prezentace


Reklamy Google