Cykly Intermezzo. FOR cyklus



Podobné dokumenty
Datový typ POLE. Jednorozmrné pole - vektor

Pedání smny. Popis systémového protokolování. Autor: Ing. Jaroslav Halva V Plzni Strana 1/6

PÍRUKA A NÁVODY PRO ÚELY: - RUTINNÍ PRÁCE S DATY

OCR (optical character recognition) - rozpoznávání textu v obraze

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

VYTVÁENÍ VÝBROVÝCH DOTAZ

Zbytky zákaznického materiálu

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

4. Lineární diferenciální rovnice rovnice 1. ádu

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

R O V N O B Ž N Í K (2 HODINY)

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

1 KOMBINATORIKA, KLASICKÁ PRAVDPODOBNOST

Programovací jazyk Python. Objektov orientovaný. [citováno z

Promnné. [citováno z

NPRG030 Programování I, 2015/16 1 / :25:32

Pídavný modul rozvaha lze vyvolat z hlavní nabídky po stisku tlaítka Výkazy / pídavné moduly.

Postup efektování jednotlivých part

Programovací jazyk Pascal

GYMNÁZIUM CHEB SEMINÁRNÍ PRÁCE

Rzné algoritmy mají rznou složitost

Ing. Jaroslav Halva. UDS Fakturace

1. Exponenciální rst Spojitý pípad. Rstový zákon je vyjáden diferenciální rovnicí

Správa obsahu ízené dokumentace v aplikaci SPM Vema

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Sada 1 - Základy programování

Přijímací zkouška z informatiky Dz

L I C H O B Ž N Í K (2 HODINY) ? Co to vlastn lichobžník je? Podívej se napíklad na následující obrázky:

Informace pro autory píspvk na konferenci ICTM 2007

Univerzální ovlada LP20 DÁLKOVÝ OVLADA S MOŽNOSTÍ UENÍ SE OD PVODNÍCH OVLADA

dovolují dělení velkých úloh na menší = dekompozice

Konzistentnost. Pro a proti replikaci. Vztah ke škálovatelnosti (1)

Každý datový objekt Pythonu má minimáln ti vlastnosti. Identitu, datový typ a hodnotu.

Lepení plexi v bonici pružnými lepidly

Podpora výroby energie v zaízeních na energetické využití odpad

1. Signatura datového typu

Maturitní otázky z předmětu PROGRAMOVÁNÍ

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

V každém kroku se a + b zmenší o min(a, b), tedy vždy alespoň o 1. Jestliže jsme na začátku dostali 2

IMPORT DAT Z TABULEK MICROSOFT EXCEL

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Dlitel, násobek Znak dlitelnosti Prvoíslo, íslo složené, rozklad na prvoinitele Nejvtší spolený dlitel, nejmenší spolený násobek

Kapitoly z EKONOMICKÉ DEMOGRAFIE

Replikace. Pro a proti replikaci. Vztah ke škálovatelnosti (1)

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

Anotace. Pointery. Martin Pergel,

Základní pojmy klasického sudoku hlavolamu. Techniky odkrývání bunk. Technika Naked Single. Technika Hidden Single

NPRG030 Programování I, 2016/17 1 / :58:13

MATEMATIKA MATEMATIKA

Úvod do programování

IV. CVIENÍ ZE STATISTIKY

Digitální pekreslení leteckého snímku

Vysoká škola báská Technická univerzita Ostrava Institut geoinformatiky. Analýza dojíždní z dotazníkového šetení v MSK. Semestrální projekt

Bezpenost dtí v okolí škol z pohledu bezpenostního auditora

Prezentaní program PowerPoint

9. Kombinatorika, pravd podobnost a statistika

GYMNÁZIUM CHEB. SEMINÁRNÍ PRÁCE Grafy funkcí sbírka ešených úloh. Radek HÁJEK, 8.A Radka JIROUŠKOVÁ, 8.A Cheb, 2006 Petr NEJTEK, 8.

Příklady: (y + (sin(2*x) + 1)*2)/ /2 * 5 = 8.5 (1+3)/2 * 5 = /(2 * 5) = 1.3. Pavel Töpfer, 2017 Programování 1-3 1

Sada 1 - Základy programování

2. M ení t ecích ztrát na vodní trati

Související ustanovení ObZ: 66, 290, 1116 až 1157, 1158 a násl., 1223 až 1235, 1694, 1868 odst. 1, 2719, 2721, 2746, 2994, 3055, 3062, 3063,

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

VYUŽITÍ PROGRAMOVÝCH PROSTEDK MATLAB PRO ROZODOVÁNÍ ZA PRÁVNÍ NEJISTOTY

Prbh funkce Jaroslav Reichl, 2006

= = 25

Rozvrhování na více procesorech

NPRG030 Programování I, 2018/19 1 / :03:07

KUSOVNÍK Zásady vyplování

PODPROGRAMY PROCEDURY A FUNKCE

Diagnostika u voz s 2-místnými diagnostickými kódy

WWW poštovní klient s úložištm v MySQL databázi

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Objektov orientovaný pístup

Řízení toku programu Programátor musí být schopen nějak ovlivňovat běh programu a k tomu má několik možností:

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

1 Řešení soustav lineárních rovnic

Autocad ( zdroj )

POTRUBNÍ SYSTÉMY PROGRAMU INVENTOR PROFESSIONAL V REALIZACI ISTÍRNY ODPADNÍCH VOD

RADY A TIPY K PEDCHÁZENÍ VZNIKU KONDENZÁTU

Pedpisy upravující oblast hospodaení

6 Příkazy řízení toku

1 Píklady popisu typických konstrukcí

Počítačová simulace logistických procesů I. 11. přednáška Programování v SimTalk. ŠAVŠ, Fábry

Splajny a metoda nejmenších tverc

Lineární algebra Petriho sítí

Obsah Úvod...2 Slovníek pojm Popis instalace...3 Nároky na hardware a software...3 Instalace a spouštní...3 Vstupní soubory

Základy MIDI komunikace

MEG jako dvoj inný blokující m ni

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

CZ.1.07/1.5.00/

NPRG030 Programování I, 2010/11

Vývojové diagramy - zápis algoritmu

Algoritmizace. 1. Úvod. Algoritmus

DRUHY ROVNOBŽNÍK A JEJICH VLASTNOSTI 1 HODINA

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Typové a netypové soubory

Pracovní listy - programování (algoritmy v jazyce Visual Basic) Algoritmus

Tabulkový procesor Excel

íslo ryze periodické íslice /skupina íslic ), která se opakuje nazýváme perioda. V našem p ípad je perioda íslice 6.

Algoritmizace a programování

APLIKACE ZÁKONA O DPH VE STAVEBNICTVÍ VAT APPLICATION IN BUILDING INDUSTRIES

Transkript:

Cykly Intermezzo Rozhodl jsem se zaadit do série nkolika lánk o základech programování v Delphi/Pascalu malou vsuvku, která nám pomže pochopit principy a zásady pi používání tzv. cykl. Mnoho ástí i jednoduchých algoritm používá práv této opakující se struktury. Pokud zstaneme v teoretické rovin, mžeme hovoit o dvou základních druzích cykl, které mžeme využít. Pokud budeme obecn hovoit o cyklických strukturách, mohli bychom najít i celou adu dalších struktur, které využívají možnosti opakování. (Tady bych zaadil použití tzv. návstí - LABEL, nebo také využití tzv. rekurzivního volání procedury nebo funkce. Tato témata ovšem rozhodn nepatí do základního kurzu programování.) Cykly, o kterých si budeme povídat, najdeme v defininí struktue Delphi celkem ti: While - do Repeat - until For do Obecn lze tyto cykly také rozdlit podle toho, zda pi použití pedem známe poet opakování, totiž že ho také sami volíme (cyklus FOR), nebo pedem poet opakování neznáme a závisí na urité podmínce (WHILE a REPEAT). Cyklus se tedy opakuje tak dlouho, dokud platí uritá podmínka zadaná ze strany programátora. Oba zpsoby nalézají uplatnní v programování, lze ovšem íct, že první skupinu vždy mohu nahradit druhou a ne naopak, jinými slovy, vždy mohu cyklus FOR nahradit cyklem napíklad WHILE, obrácen to ovšem nejde vždycky. FOR cyklus Tento cyklus je asi nejjednodušší a použijeme ho všude tam, kde máme jasn daný poet opakování. Typickým píkladem pro použití tohoto cyklu je napíklad práce s tzv. polem, (S tímto datovým typem se seznámíme v další lekci.) což by se do praxe dalo pevést jako práce s njakou maticí nebo vektorem. Abychom se v tuto chvíli mohli s použitím cyklu seznámit, volím úpln jiný píklad a zkusím vypsat na obrazovku posloupnost ísel 1 10. Bez použití cyklu bych mohl napsat takovouto ást programu: writeln(1); writeln(2); writeln(3); writeln(4); writeln(5); writeln(6); writeln(7); writeln(8); writeln(9); writeln(10); Kdybych dostal za úkol vypsat adu ísel 1 1000, bylo by to pro m urit dost nepohodlné Proto zvolím ješt jiný zpsob a použiji cyklus. V tomto pípad pedkládám celý program, aby bylo patrné, že jsem pro tuto potebu musel ješt navíc deklarovat promnou i: 1

program CyklusApp; {$APPTYPE CONSOLE} uses SysUtils; Var i: integer; BEGIN for i:= 1 to 10 do END. Cyklus FOR piazuje po jednice do promnné i postupn hodnoty 1-10. Za píkazem DO následuje píkaz, který se má vykonat. Jestliže by bylo zapotebí provést v cyklu více píkaz, uzavou se do bloku end: for i:= 1 to 10 do write('vypisuji cislo: '); Obr. 0-1 Výsledek použití cyklu FOR. Abych tuto strukturu popsal kompletn, je teba piznat, že cyklus nemusí opakovat provedení uritých píkaz programu vždy od menšího ísla k vtšímu, ale také naopak, napíklad od 10 do 1, což by se dalo v programu zapsat napíklad takto: for i:= 10 downto 1 do write('vypisuji cislo: '); 2

Obr. 0-2 Obrácený cyklus FOR WHILE cyklus Všude tam, kde pedem není jasný poet opakování, mžeme použít tento cyklus. Za píkazem WHILE vždy následuje podmínka, která uruje, kolikrát nebo jak dlouho se bude cyklus opakovat, pestože pedem nejsme schopni íci, kolik takových opakování bude. V tomto smru mžeme snadno sklouznout do ošemetné situace, kdy se program tzv. zacyklí, což znamená, že nikdy nebude dosažena podmínka, která by cyklus ukonila, jinak bych mohl íct, že podmínka, za které se provádjí píkazy v cyklu, bude platit vždy a nikdy se nezmní. Je tedy dležité podmínce vnovat pozornost obzvlášt v pípad, že s programováním zaínáme. Následovat by ml píkaz DO a za ním jeden, nebo skupina píkaz, které se v cyklu mají provádt. Hned na úvod si mžeme ukázat, když jsem o tom už v pedcházejících odstavcích mluvil, jakým zpsobem tedy nahradíme FOR cyklus cyklem WHILE jen proto, abychom si ukázali správnou syntaxi, tedy zápis, v programovém jazyce: i:= 1; while i<=10 do write('vypis pomoci WHILE cyklu, cislo: '); 3

Obr. 0-3 Výpis ady ísel pomocí WHILE cyklu Oproti cyklu FOR musím sám zvyšovat hodnotu promnné i, takže za výpisem ísla následuje ješt ádek s píkazem, se kterým se jako programátor setkáte asto, kdy do promnné piazuji její stávající hodnotu a navíc zvyšuji o jinou hodnotu, v tomto pípad o jedniku. Což bych mohl také nahradit procedurou inc(i): Dokud bude splnna podmínka cyklu, že hodnota promnné i bude menší nebo rovna 10, bude se provádt blok píkaz v cyklu. Navíc se v cyklu hodnota promnné zvyšuje, což je pro tento píklad dost podstatné. Kdybych tento píkaz vynechal, hodnota promnné by se nemnila a podmínka by platila vždy a nikdy by nedošlo k ukonení cyklu! Program by tzv. zamrzl. Tento píklad píliš neprezentuje výhodu tohoto cyklu. Zatím jsme si jen ukázali, jak bychom jej mohli použít z hlediska zápisu. Podívejme se nyní na jiný píklad, kdy budeme chtít vždy sítat dvojici stejných ísel a to tak dlouho, než bude souet vtší než 10. eknme, že použijeme promnnou i, kterou budeme od 1 zvyšovat, dokud souet i+i nebo souin 2 * i nebude vtší než deset. Samozejm si mžeme pedem spoítat, kolik opakování program provede, ale berme úlohu také z pohledu uživatele, který by si mohl limitní výsledek soutu (u nás 10) libovoln zvolit. Tuto úlohu bychom mohli zapsat teba takto: program CyklusApp; {$APPTYPE CONSOLE} uses SysUtils; Var i: integer; Function MySUM(x: integer ): integer; MySUM:= x+x; 4

BEGIN i:= 1; while MySUM(i) <= 10 do write('cislo: '); write('soucet je: '); writeln(mysum(i)); END. Pestože uplatnní tohoto píkladu je tém nulové, názornost použití jednak cyklu, jednak funkce je zejmá: Použil jsem funkci, která k uvedenému íslu pite totéž íslo, tak jak bylo požadováno v zadání. Funkci jsem použil v podmínce, která udává, za jakých okolností se blok cyklu má provádt, totiž do té doby, dokud bude výsledný souet menší nebo práv roven deseti. Pro názornost v bloku cyklu vypisuji, jaké íslo je vstupním parametrem funkce a jaký je výsledek soutu. Samozejm nesmím zapomenout promnnou i vždy v bloku cyklu zvýšit, abych zajistil konené ešení, tedy výsledek, který již podmínce nebude vyhovovat: Obr. 0-4 Výsledek použití WHILE cyklu Když si pedstavíme hodnotu i = 6, potom je zejmé, že dvojnásobek této hodnoty už bude vtší než deset, cyklus se dále provádt nebude a program bude pokraovat dál na ádku: REPEAT cyklus Podobn jako v pedchozím pípad mžeme tento cyklus použít i všude tam, kde pedem neznáme poet opakování, ale víme, že díky urité podmínce má algoritmus konené ešení, tedy poet cykl, které se provedou, je konený. Na rozdíl od cyklu WHILE, kdy jsme psali 5

podmínku hned na zaátku, tedy ješt pedtím, než jsme programu definovali blok píkaz, které se budou cyklicky opakovat, je tomu v tomto pípad naopak: Cyklus nejprve provede první ást bloku, než dojde k vyhodnocení podmínky. Tato vlastnost se v programování mže hodit a je to také zpsob, pro máme obecn možnost rozhodnout mezi WHILE a REPEAT cyklem. Abych rozdíl ješt více ozejmil, navrhnu podmínku v tomto cyklu tak, abych dosáhl stejného výsledku. Porovnáním obou podmínek je také zejmé využití jednoho nebo druhého cyklu a také možnost jejich zámny. (Alespo v nkterých pípadech ) program CyklusApp; {$APPTYPE CONSOLE} uses SysUtils; Var i: integer; Function MySUM(x: integer ): integer; MySUM:= x+x; BEGIN i:= 1; repeat write('cislo: '); write('soucet je: '); writeln(mysum(i)); until MySUM(i) > 10; END. Opt ponechávám definovanou funkci, kterou využívám jednak ve výpisu, jednak v podmínce. Ta musí být ovšem zapsána jako negace pedešlé podmínky, aby výsledek byl stejný. Cyklus se opakuje až do (until) podmínky, kdy výsledek už je vtší než deset. Pak se cyklus ukoní. Závrem bych ekl jen jedno: Záleží na okolnostech, pro který z popisovaných cykl se rozhodnete. Obecn platí, že cyklus FOR je zastupitelný obma z dále uvedených a navíc i tyto se mezi sebou dají zamnit. Existují ovšem pípady, kdy je vhodné rozhodnout se konkrétn pro ten i onen cyklus. Ale na to už musíte pijít sami. Chce to jenom programovat, programovat a zase programovat 6