Megjegyzések a 2. röpdolgozathoz
1. feladat:
Írjon függvényt, ami faktoriálist számol!
Értelmezési tartomány: [0,∞)
Itt általános probléma volt, hogy a negatív számok esetén MsgBox-szal írattatok ki a hibaüzenetet. Ezért nem vontam le pontot, de a jövőben ezt kerüljétek el, mert a sokszor meghívódik a munkafüzetből a függvény, akkor sokszor is kiírhatja ezt a hibaüzenetet, ami rendkívül zavaró lehet. Természetesen a program írása és tesztelése során ezt hasznos visszajelzés tud lenni, de a végleges kódból ezt vegyétek ki.
Function Faktorialis(a As Long) As Variant Dim i As Long Dim f As Variant If a >= 1 Then f = 1 For i = 2 To a f = f * i Next i ElseIf a = 0 Then f = 1 Else f = "Hiba!" 'Vagy ezt ugyan nem tanultuk, de jóval elegánsabb: f = CVErr(xlErrValue) 'Viszont itt az MsgBox ne használjuk visszajelzésre, szoritsuk le az összes kommunikációt a _ visszatérési értékre! Rendkívül zavaró tud lenni, ha a munkafüzet szerkesztése közben _ állandóan felugranak ezek a kis ablakok. End If Faktorialis = f End Function
2. feladat
Írjon eljárást, ami addig kér be számot, amíg a felhasználó négyzetszámot nem ad meg! Írja ki, hogy ez mely szám négyzete!
Sub Negyzetszam() Dim N As Double Do N = Application.InputBox("Adj meg egy négyzetszámot: ", , , , , , , 1) Loop Until N >= 0 And Int(Sqr(Abs(N))) = Sqr(Abs(N)) 'Itt Sqr(N)-nél egy kicsit trükközni kell, mert negatív számnál ez hibát ad alapesetben. Több _ megoldás is van, és azt választottam, hogy a szám abszolútértékének nézem meg a gyökét: _ Sqr(Abs(N)) _ Mivel az első feltétel úgyis ellenőrzi, hogy pozitív számról van-e szó, így az egész feltétel _ pontosan akkor lesz igaz, ha az N négyzetszám 'Természetesen ezen kívül még bőven vannak alternatív megoldások is. MsgBox "A(z) " & N & " a(z) " & Sqr(N) & " négyzete!" End Sub