Makra - funkce

První díl - účel a nahrání makra Druhý díl - vlastní panel nástrojů Třetí díl - vytváření funkcí a podmínka Čtvrtý a pátý díl - podmínky, cykly, vkládání dat a výstupy

Algoritmy a řešení problémů

Použití základních programovacích struktur je nemožné bez dostatečného procvičení, resp. rovná se pouhému přepisování programů z příruček či jiných zdrojů. Následuje několik základních příkladů, které nejsou složité, všechny už někdo (a bylo jich hodně) řešil a vyřešil, ale představují právě onen základ nutný k pochopení, zaučení a procvičení.

U každého problému by měl následovat prakticky stejný postup:

  1. přečtení zadání a jeho pochopení, resp. dotazy na upřesnění zadání
  2. případné konkrétní řešení na konkrétních číslech k lepšímu seznámení s problémem
  3. zobecnění konkrétních řešení a obecný algoritmus
  4. kontrola algoritmu na extrémní vstupní data, resp. ujasnění, která vstupní data zvládne řešit
  5. rozepsání algoritmu na dílčí úlohy
  6. přepis algoritmu do programovacího jazyka

Součin čísel pomocí sčítání

Zadání: počítač "zapomněl" násobit čísla, s pomocí sčítání a cyklu ho to naučte.

Specifikace: nebudeme řešit omezení množiny čísel, která lze násobit, při zkoušce se omezíme na čísla z malého rozsahu (-50 až 50)

Algoritmus: Po zadání čísel a, b si je uspořádáme tak, aby a bylo číslo menší. Pak budeme v cyklu s pevným opakováním b krát přičítat číslo a k celkovému součinu čísel a a b. Ten musí být před započetím cyklu nulový.

Sub SoucinCisel()
a = InputBox ("Zadej první číslo")
b = InputBox ("Zadej druhé číslo")
If a > b Then
c = a
a = b
b = c
End If
soucin = 0
For i = 1 to a
soucin = soucin + b
Next i
Vystup = "Součin zadaných čísel je " & soucin
MsgBox Vystup
End Sub

Přirozená mocnina čísla

Zadání: počítač "zapomněl" přirozenou mocninu čísla, s pomocí násobení a cyklu ho to naučte.

Specifikace: nebudeme řešit omezení množiny čísel, která lze umocňovat, při zkoušce se omezíme na základ přirozený (0..30) a mocninu malou (0..10)

Algoritmus: Po zadání základu mocniny a mocnitele (exponentu) budeme v cyklu s pevným opakováním určeným mocnitelem násobit mocninu základem mocniny, přičemž mocnina musí být před započetím cyklu rovna 1.

Sub MocninaCisla()
a = InputBox ("Zadej základ")
b = InputBox ("Zadej exponent")
mocnina = 1
For i = 1 to b
mocnina = mocnina * a
Next i
Vystup = "Mocnina zadaného čísla je " & mocnina
MsgBox Vystup
End Sub

Hledání největší/nejmenší položky z N čísel

Zadání: V množině předem daného počtu čísel najděte číslo největší, resp. nejmenší.

Specifikace: nebudeme řešit omezení množiny čísel, mezi kterými budeme hledat, tato čísla není nutné si pamatovat déle, než je nezbytně nutné z hlediska zadání.

Algoritmus: Po zadání počtu čísel budeme v cyklu s pevným opakováním daným počtem čísel porovnávat pořadové číslo (tedy číslo, které je v tu chvíli na řadě) s dosavadním maximem či minimem. Vyplatí se před započetím cyklu si do maxima a minima vložit první zadávané číslo, v tom případě se počet opakování cyklu zmenší o 1.

Sub VyjimecnaHodnota()
N = InputBox ("Zadej počet čísel")
a = InputBox ("Zadej číslo")
Maximum = a
Minimum = a
For i = 1 to N-1
if a > Maximum then Maximum = a
if a < Minimum then Minimum = a
Next i
Vystup = "Mezi zadanými čísly je největší číslo " & Maximum
MsgBox Vystup
Vystup = "Mezi zadanými čísly je nejmenší číslo " & Minimum
MsgBox Vystup
End Sub

Celočíselný podíl čísel a zbytek po celočíselném dělení čísel

Zadání: počítač nezná způsob, jak určit pro dvě přirozená čísla jejich celočíselný podíl a zbytek po tomto dělení.

Specifikace: nebudeme řešit omezení množiny čísel, se kterými lze pracovat, při zkoušce se omezíme na čísla z malého rozsahu (0..100).

Algoritmus: Po zadání dělence (čísla, které dělíme) a dělitele (čísla, kterým budeme dělit) budeme v cyklu s podmínkou na začátku (podmínkou je, že dělenec je větší než dělitel) odečítat od dělence dělitele a do proměnné podíl si zapisovat počet těchto odčítání. Proměnná podíl musí být před započetím cyklu nulová. Po skončení cyklu je v proměnné dělenec zbytek, tj. číslo, které už se dělitelem nedá celočíselně dělit.

Poznámka: V průběhu řešení se ukazuje, že tady je nutné definovat v programu dělence a dělitele jako proměnné typu Integer.

Sub CelociselnyPodil()
a = InputBox ("Zadej číslo, které se bude dělit")
b = InputBox ("Zadej číslo, kterým se bude dělit")
podil = 0
While a > b
a = a - b
podil = podil + 1
Wend
Vystup = "Podíl zadaných čísel je " & podil
MsgBox Vystup
Vystup = "Zbytek po celočíselném dělení zadaných čísel je " & a
MsgBox Vystup
End Sub

Eukleidův algoritmus na hledání největšího společného dělitele

Zadání: S pomocí Eukleidova algoritmu najděte největší společný dělitel dvou zadaných čísel.

Specifikace: Eukleidův algoritmus byl vysvětlen, nebudeme řešit omezení množiny čísel, která lze násobit, při zkoušce se omezíme na čísla z malého rozsahu (0..200)

Eukleidův algoritmus: Dvě zadaná různá čísla mají stejného největšího společného dělitele jako čísla, kde je větší z obou čísel nahrazeno jejich rozdílem.

Po zadání čísel a, b budeme v cyklu s podmínkou na začátku (podmínkou je, že čísla jsou různá) nahrazovat větší číslo rozdílem obou čísel.

Poznámka: V průběhu řešení se ukazuje, že tady je nutné definovat v programu zadaná čísla jako proměnné typu Integer.

Sub Eukleides()
a = InputBox ("Zadej první číslo")
b = InputBox ("Zadej druhé číslo")
While a < > b
If a > b Then
a = a - b
Else
b = b - a
End If
Wend
Vystup = "Největší společný dělitel zadaných čísel je " & a
MsgBox Vystup
End Sub