Számítógépes problámamegoldás 2014 ősz

Számítógépes problámamegoldás 2014 ősz

7. óra

2014. október 22. - Soltész József

7. óra anyaga xlsb

Egy kis kiegészítés, ha esetleg kell a vizsgán:

Az Application.Calculate paranccsal lehet újraszámoltatni a munkafüzet képleteit. Ha csak egy adott tartományt akarunk újraszámoltatni, akkor így lehet használni a parancsot:
Worksheets("Sheet1").UsedRange.Columns("A:C").Calculate

Eredmények

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:

süti beállítások módosítása