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

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

Programování v Pascalu Přednáška 4

Podobné prezentace


Prezentace na téma: "Programování v Pascalu Přednáška 4"— 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 while do log. výraz pří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 - xn
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
Nekonečný cyklus 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. 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 repeat until pří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; a : integer; begin a:=77; WriteLn(a:3, b:3, a*b:5); end; {hlavní program} 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 near ; forward external far asm blok interrupt
direktiva inline

22 Parametry seznam formálních parametrů deklarace parametru
( ) deklarace parametru ; 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 proměnné předchází jim var 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 funkce hlavička funkce blok funkce function
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"

Podobné prezentace


Reklamy Google