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
És végül az eredmények, az óralátogatási adatokkal együtt: