Promiň, byl jsem tak naštvaný z těch nečitelných kontrolních textů, že jsem zapomněl upravit tvou funkci:
Function VYPOCET&(ByVal Y&, ByVal Opakuj&)
Dim b As Boolean
b = Y And 1
For Opakuj = 1 To Opakuj
VYPOCET = VYPOCET + IIf(b, Y, Opakuj * Y)
Next
End Function
1.Funkce vrací číslo, tak by měla mít deklarovaný typ, nikoli vracet robustní, neohrabaný typ Variant.
2. Nepoužívej typ Integer, protože Windows ho (od verze 7) budou neustále převádět na Long a zase zpátky; užívej rovnou typ Long.
3. Parametry funkce slouží jen pro vstup hodnot do funkce, proto by měly být deklarovány
ByVal.
4. Je zbytečné v každém kroku cyklu znovu a znovu zjišťovat, zda (neměnící se) Y je liché; stačí to udělat jednou před cyklem.
5. Konstrukce
For Opakuj = 1 To Opakuj vypadá zvláštně, ale funguje - Basic přece spočte meze cyklu jen jednou, před jeho započetím, a uloží je do dočasných proměnných. Proč tedy nevyužít parametr
Opakuj jako index cyklu?
6. Konstrukci
If...Then...Else zde nepotřebuješ, stačí funkce
IIf.
citovat