352 - Katedra automatizační         techniky a řízeníTechnické výpočty   Ing. David Fojtík, Ph.D.        A922, kl. 4193
Cykly - opakování činností
Typy cyklů• Pod pojmem cyklus v souvislosti s algoritmizací  rozumíme řídící strukturu (direktivu)  programovacího jazyka,...
Inkrementační cyklus For - Next• SyntaxeFor počítadlo = počátek To konec [Step přírůstek]       [příkazy]       [If podmín...
Příklad cyklus For-NextSub Main()    Dim Cislo As Integer    Číselná hodnota pro výpočet faktoriálu    Dim i As Integer   ...
Logický cyklus Do-Loop           s podmínkou na začátku• Syntaxe[příkazy inicializující podmínku]Do While Podmínka       [...
Logický cyklus Do-Loop            s podmínkou na konci• SyntaxeDo       [příkazy]       [If StopPodmínka Then Exit Do]    ...
Logický cyklus Do-Loop           s podmínkou uprostřed• SyntaxeDo       [příkazy před podmínkou]If Podmínka Then Exit Do  ...
Příklady logických cyklůSub Main()Sub Main()Dim Cislo As LongDim Cislo As Long    Aktuálně zadané číslo                   ...
Další varianty cyklu Do-Loop• Zkrácená varianta s podmínkou na začátku   [příkazy inicializující podmínku]   While Podmínk...
Kolekce
Kolekce• Pod pojmem kolekce v programovacím  jazyce rozumíme skupinu shodných  nebo příbuzných objektů tvořící celek.• Prv...
Procházení kolekcí: cyklus For Each• Syntaxe                                            Jak na to?                        ...
Práce s buňkami   MS Excelu
Výběr buňky• Aktuální buňka  ActiveCell• Aktuální oblast  Selection• Podle adresy buňky  Range("C4")• Relativně vůči aktuá...
Hodnota buňky• Hodnota buňky – výsledek vzorce  ActiveCell.Value• Vzorec buňky v absolutních adresách  ActiveCell.Formula•...
Procházení oblasti buněk• Procházení neprázdných buněk ve sloupci přímým výběrem   Do While ActiveCell.Value <> Empty     ...
Příklady procházení oblasti buněkSub ProchazejNeprazdneA()    Procházení neprázdných buněk ve sloupci přímým výběrem    Do...
??? kontrolní otázky ???• Kolikrát se provede cyklus For i = 1 To 10 Step -1 ?• K čemu slouží příkaz Exit For?• Jakou hodn...
352 - Katedra automatizační techniky a řízeníIng. David Fojtík, Ph.D.     A922, kl. 4193  david.fojtik@vsb.cz
Upcoming SlideShare
Loading in …5
×

Tv 08

2,693 views
2,732 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,693
On SlideShare
0
From Embeds
0
Number of Embeds
1,829
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tv 08

  1. 1. 352 - Katedra automatizační techniky a řízeníTechnické výpočty Ing. David Fojtík, Ph.D. A922, kl. 4193
  2. 2. Cykly - opakování činností
  3. 3. Typy cyklů• Pod pojmem cyklus v souvislosti s algoritmizací rozumíme řídící strukturu (direktivu) programovacího jazyka, která zajišťuje opakování zvolené sekvence příkazů.• Cykly patří mezi základní stavební prvky algoritmů• Základní typy cyklů… • Inkrementační (přírůstkový) cyklus (For - Next) • Logické cykly (Do - Loop): • s podmínkou na začátku • s podmínkou na konci • s podmínkou uprostřed Levý Pravý krok krok • Cyklus procházení kolekcí (For Each - Next)
  4. 4. Inkrementační cyklus For - Next• SyntaxeFor počítadlo = počátek To konec [Step přírůstek] [příkazy] [If podmínka Then Exit For] tělo cyklu [příkazy]Next [počítadlo] i = počátek – Cyklus opakuje příkazy tolikrát, kolikrát se vejde přírůstek do intervalu <počátek;konec>. - Nepravda i ≤ konec – Přírůstek může být kladný i záporný, implicitně je roven jedné. + Pravda Není vhodné používat reálný typ. – Počítadlo se často v těle cyklu využívá Příkazy pozor však na modifikaci počítadla. – počátek, konec, přírůstek může být proměnná. i = i + přírůstek – Exit For ihned ukončí cyklus
  5. 5. Příklad cyklus For-NextSub Main() Dim Cislo As Integer Číselná hodnota pro výpočet faktoriálu Dim i As Integer Iterační pomocná proměnná Dim Faktorial As Double Výsledek výpočtu faktoriáluNacteni hodnoty pro výpočet faktoriálu Cislo = InputBox("Zadej číslo:", "Výpočet Faktoriálu")Vlastní výpočet Faktorial = 1 0! = 1 For i = CisloCislo Step -1 2 To To 2 Faktorial = i * Faktorial NextVýpis výsledku MsgBox Cislo & "! = " & Faktorial, , "Výpočet Faktoriálu"End Sub Při uživatelském vstupu For stene = 1 To 3 (datový typ variant) Nakrmit(stene) Next
  6. 6. Logický cyklus Do-Loop s podmínkou na začátku• Syntaxe[příkazy inicializující podmínku]Do While Podmínka [příkazy] [If StopPodmínka Then Exit Do] tělo cyklu [příkazy]Loop – Cyklus opakuje příkazy tak dlouho, inicializace dokud je Podmínka pravdivá. podmínky – Podmínka je tvořena logickým výrazem. – Je-li Podmínka na počátku nepravdivá - Nepravda podmínka cyklus se nevykoná ani jednou. – Před cyklem se musí inicializovat + Pravda Podmínka a v těle cyklu se musí Příkazy podmínka ovlivňovat, v opačném (ovlivnění případě hrozí nekonečný cyklus. podmínky) – Exit Do ihned ukončí cyklus
  7. 7. Logický cyklus Do-Loop s podmínkou na konci• SyntaxeDo [příkazy] [If StopPodmínka Then Exit Do] tělo cyklu [příkazy]Loop While Podmínka – Cyklus opakuje příkazy tak dlouho, dokud je Podmínka pravdivá. Příkazy (ovlivnění – Oproti cyklu s podmínkou na začátku podmínky) je obvykle kratší – ovlivnění podmínky je pouze v těle cyklu. + Pravda - Nepravda – Cyklus se vždy vykoná aspoň jednou. podmínka Tělo cyklu se na počátku vykoná aniž by byla podmínka splněna (omezené použití). – Exit Do ihned ukončí cyklus
  8. 8. Logický cyklus Do-Loop s podmínkou uprostřed• SyntaxeDo [příkazy před podmínkou]If Podmínka Then Exit Do tělo cyklu [příkazy za podmínkou]Loop – Cyklus opakuje příkazy tak dlouho, Příkazy dokud je Podmínka nepravdivá. před podmínkou – Podmínka je tvořena logickým výrazem. – Příkazy před podmínkou se vždy + Pravda vykonají aspoň jednou. podmínka – V těle cyklu se musí podmínka - Nepravda ovlivňovat, v opačném případě hrozí nekonečný cyklus. Příkazy za podmínkou
  9. 9. Příklady logických cyklůSub Main()Sub Main()Dim Cislo As LongDim Cislo As Long Aktuálně zadané číslo Aktuálně zadané číslo Dim Soucet As Long Celkový součet Dim Soucet As Long Celkový součet Do Cislo = InputBox("Zadej číslo:", "Sčítání...", 0) Do While Cislo <> 0 Podmínka na začátku Do Cislo = InputBox("Zadej číslo:", "Sčítání...", 0) If Cislo ==0InputBox("Zadej číslo:", "Sčítání...", 0) Soucet = SoucetExit Do Cislo Then + Cislo Podmínka uprostřed Cislo = = Soucet + Cislo číslo:", "Sčítání...", 0) Soucet InputBox("Zadej Loop While Cislo <> 0 Podmínka na konci Loop MsgBox "Součet všech zadaných čísel je: " & Soucet, , "Sčítání..." MsgBox "Součet všech zadaných čísel je: " & Soucet, , "Sčítání..."End SubEnd Sub Jak na to? Do Zmrzlina > 0 Lízat Loop
  10. 10. Další varianty cyklu Do-Loop• Zkrácená varianta s podmínkou na začátku [příkazy inicializující podmínku] While Podmínka [příkazy] Wend• Varianta s podmínkou na začátku s direktivou Until [příkazy inicializující podmínku] Do Until Podmínka [příkazy] Loop – Cyklus Until opakuje příkazy, dokud je Podmínka nepravdivá.• Varianta s podmínkou na konci s direktivou Until Do [příkazy] Loop Until Podmínka
  11. 11. Kolekce
  12. 12. Kolekce• Pod pojmem kolekce v programovacím jazyce rozumíme skupinu shodných nebo příbuzných objektů tvořící celek.• Prvek (element, člen) kolekce je právě jeden dílčí objekt kolekce.• Samo osobě je kolekce objektem• Příklady kolekcí: – Přepravka (elementy: Láhve). – Vlak (elementy: Vagóny) – Čtvrť (elementy: Domy) – Knihovna (elementy: Knihy) – Studijní skupina (elementy: Studenti)• Kolekce v MS Excelu: – Workbooks (Workbook - Otevřené soubory) – WorkSheets (WorkSheet – Listy souboru) – Cells (Range – buňky listu) – Selection (Range – vybrané buňky)
  13. 13. Procházení kolekcí: cyklus For Each• Syntaxe Jak na to? Dim Láhev As LáhvovéPivo Dim Element As TypElementuKolekce For Each Láhev In Přepravka Pít(Láhev) For Each Element in Kolekce Next [příkazy] [Zpracování elementu] [If podmínka Then Exit For] Next– Cyklus postupně projde všechny prvky kolekce a dočasně je přiřadí do proměnné Element.– Element musí být předem deklarován datovým typem shodným s prvky elementu.Sub Main() Dim Bunka As Range Deklarace pomocné proměnné For Each Bunka In Selection Bunka.Interior.Color = vbRed NextEnd Sub
  14. 14. Práce s buňkami MS Excelu
  15. 15. Výběr buňky• Aktuální buňka ActiveCell• Aktuální oblast Selection• Podle adresy buňky Range("C4")• Relativně vůči aktuální buňce/oblasti ActiveCell.Offset(r,s) Selection.Offset(r,s) r :posun na řádku, + dolů, - nahoru, 0 na místě s : posun na řádku, + do prava, - do leva, 0 na místě• Podle názvu (buňka/oblast musí být pojmenována) Range("Nazev")• Souvislá oblast buněk podle adresy oblasti Range("C4:E7")• Nesouvislá oblast buněk podle adresy oblasti Range("A1,C4:E7,F2:G5")
  16. 16. Hodnota buňky• Hodnota buňky – výsledek vzorce ActiveCell.Value• Vzorec buňky v absolutních adresách ActiveCell.Formula• Vzorec buňky v relativní adresách ActiveCell.FormulaR1C1• Adresa buňky/oblasti ActiveCell.Address Selection.Address• Název buňky/oblasti (je-li pojmenovaná) ActiveCell.Name Selection.NameSub Main() MsgBox "Value: " & ActiveCell.Value & vbCrLf & _ "Formula: " & ActiveCell.Formula & vbCrLf & _ "FormulaR1C1: " & ActiveCell.FormulaR1C1 & vbCrLf & _ "Address: " & ActiveCell.Address, , "ActiveCell"End Sub
  17. 17. Procházení oblasti buněk• Procházení neprázdných buněk ve sloupci přímým výběrem Do While ActiveCell.Value <> Empty [příkazy] ActiveCell.Offset(1,0).Select Loop• Procházení neprázdných buněk v řádku bez změny aktivní buňky Dim Bunka As Range Deklarace pomocné proměnné Set Bunka = ActiveCell Přiřazení aktivní buňky Do While Bunka.Value <> Empty [příkazy] Set Bunka = Bunka.Offset(0,1) Loop• Procházení vybrané oblasti buněk Dim Bunka As Range Deklarace pomocné proměnné For Each Bunka In Selection [příkazy] Next
  18. 18. Příklady procházení oblasti buněkSub ProchazejNeprazdneA() Procházení neprázdných buněk ve sloupci přímým výběrem Do While ActiveCell.Value <> Empty ActiveCell.Formula = ">" & ActiveCell.Formula Požadovaná operace ActiveCell.Offset(1, 0).Select Přesun na další buňku LoopEnd SubSub ProchazejNeprazdneB() Procházení neprázdných buněk v řádku bez změny aktivní buňky Dim Bunka As Range Deklarace pomocné proměnné Set Bunka = ActiveCell Přiřazení aktivní buňky Do While Bunka.Value <> Empty Bunka.Formula = ">" & Bunka.Formula Požadovaná operace Set Bunka = Bunka.Offset(0, 1) Přesun na další buňku LoopEnd SubSub ProchazejZvolenouOblast() Procházení vybrané oblasti buněk Dim Bunka As Range Deklarace pomocné proměnné For Each Bunka In Selection Bunka.Formula = ">" & Bunka.Formula Požadovaná operace NextEnd Sub
  19. 19. ??? kontrolní otázky ???• Kolikrát se provede cyklus For i = 1 To 10 Step -1 ?• K čemu slouží příkaz Exit For?• Jakou hodnotu musí mít výraz za While pro ukončení cyklu?• Kdy nelze aplikovat cyklus s podmínkou na konci?• Jaká je nevýhoda cyklu s podmínkou na začátku?• Kdy nelze aplikovat cyklus s podmínkou uprostřed?• Kdy se používá cyklus For Each ?• Jakou buňku vybere příkaz Range("C4").Offset(-1,1) a ActiveCell.Offset(0,0)• Je-li v aktivní buňce vzorec =10^2, jakou hodnotu vrátí ActiveCell.Value a ActiveCell.FormulaR1C1
  20. 20. 352 - Katedra automatizační techniky a řízeníIng. David Fojtík, Ph.D. A922, kl. 4193 david.fojtik@vsb.cz

×