KURZUS: Számítási módszerek

MODUL: Excel programozás

Programozási mintafeladatok

A programozási mintafeladatokhoz az alábbi segédszubrutinokat fogjuk használni (illetve a programozási feladatoknál is ezeket kell majd használni).

'Adott számú (Mennyit), véletlen, a [Tol, Ig] intervallumba eső
'egész szám generálása egy tömbbe (Mibe), adott Seed érték mellett
Sub Szamokat_General(Mibe() As Integer, Mennyit As Integer, _
    Tol As Integer, Ig As Integer, Seed As Integer)
  Dim i As Integer, db As Integer
  Rnd -1
  Randomize Seed
  db = Ig - Tol + 1
  For i = 1 To Mennyit
    Mibe(i) = Int(Rnd * db) + Tol
  Next
End Sub
'Adott hosszú, véletlenszerű szöveges adat (sztring) generálása
'betűkből, számjegyekből és egyéb karakterekből
Function Szoveget_General(Hossz As Integer, Seed As Integer) As String
  Const Kisbetuk = "aábcdeéfghiíjklmnoóöőpqrstuúüűvwxyz"
  Const Szamjegyek = "0123456789"
  Const Egyeb = "'!%$=<>()\/[]#&@{}<,;:.?+-_ "
  Dim i As Integer, db As Integer, Karakterek As String, st As String
  Rnd -1
  Randomize Seed
  Karakterek = Kisbetuk + UCase(Kisbetuk) + Szamjegyek + Egyeb
  db = Len(Karakterek)
  st = ""
  For i = 1 To Hossz
    st = st + Mid(Karakterek, Int(Rnd * db) + 1, 1)
  Next
  Szoveget_General = st
End Function
'Prímszám vizsgálat
Function Prim(a As Long) As Boolean
  Dim o As Long, b As Long, van As Boolean
  If a <= 1 Then
    Prim = False
  Else
    o = 2: van = False: b = Int(Sqr(a))
    While o <= b And Not van
      If a Mod o = 0 Then
        van = True
      Else
        o = o + 1
      End If
    Wend
    Prim = Not van
  End If
End Function
'Relatív prím vizsgálat
Function RelPrim(a As Long, b As Long) As Boolean
  Dim o As Long, c As Long, van As Boolean
  If a <= b Then c = a Else c = b
  o = 2: van = False
  While o <= c And Not van
    If a Mod o = 0 And b Mod o = 0 Then
      van = True
    Else
      o = o + 1
    End If
  Wend
  RelPrim = Not van
End Function
Mintafeladat 1

A Szamokat_General szubrutin segítségével generáljunk 5 darab egész számot az [1, 10] intervallumban 1-es Seed értékkel, majd határozzuk meg a generált adatok minimumát, maximumát, összegét és átlagát!

Sub Mintafeladat1()
  'Az adatok száma
  Const n = 5
  'Az adatokat tároló tömb
  Dim a(1 To n) As Integer
  'Az eredményeket tároló változók
  Dim Min As Integer, Max As Integer, Osszeg As Long, Atlag As Single
  'Segédváltozó
  Dim i As Integer
  'Adatok generálása
  Call Szamokat_General(a, n, 1, 10, 1)
  'Adatok kiírása az Immediate ablakba (egy sorba)
  Debug.Print "Az adatok:";
  For i = 1 To n
    Debug.Print a(i);
  Next
  Debug.Print
  'Az adatok feldolgozása
  'Legkisebb, legnagyobb elem
  'Megjegyezzük az első elemet
  Min = a(1): Max = a(1)
  'Megvizsgáljuk a többit, van-e kisebb, van-e nagyobb?
  For i = 2 To n
    If a(i) < Min Then
    'Van egy kisebb, módosul az eredmény
      Min = a(i)
    End If
    If a(i) > Max Then
    'Van egy nagyobb, módosul az eredmény
      Max = a(i)
    End If
  Next
  'Kiírjuk az eredményt
  Debug.Print "Legkisebb:"; Min
  Debug.Print "Legnagyobb:"; Max
  'Megoldás munkalapfüggvénnyel
  Debug.Print "Legkisebb:"; WorksheetFunction.Min(a)
  Debug.Print "Legkisebb:"; WorksheetFunction.Small(a, 1)
  Debug.Print "Legnagyobb:"; WorksheetFunction.Max(a)
  Debug.Print "Legnagyobb:"; WorksheetFunction.Large(a, 1)
  'Összeg
  'Kezdőérték
  Osszeg = 0
  'Minden elemet hozzáadunk
  For i = 1 To n
    Osszeg = Osszeg + a(i)
  Next
  'Kiírjuk az eredményt
  Debug.Print "Összeg:"; Osszeg
  'Átlag
  Atlag = Osszeg / n
  'Kiírás 1 tizedesjeggyel
  Debug.Print "Átlag:" + Format(Atlag, "0.0")
  'Megoldás munkalapfüggvénnyel
  Debug.Print "Átlag:" + Format(WorksheetFunction.Average(a), "0.0")
  MsgBox "Az adatok és az eredmények az Immediate ablakban láthatók!"
End Sub
Mintafeladat 2

A Szoveget_General szubrutin segítségével generáljunk 10 karakter hosszú szöveges adatot 2-es Seed értékkel, majd határozzuk meg a kapott adatban található angol betűk darabszámát!

Sub Mintafeladat2()
  'A szöveg hossza
  Const n = 10
  'A feldolgozandó szöveg
  Dim st As String
  'Az eredményt tároló változó
  Dim db As Integer
  'Segédváltozók
  Dim i As Integer, kar As String
  'Adatgenerálás
  st = Szoveget_General(n, 2)
  'Adat kiírása az Immediate ablakba
  Debug.Print "Az adat:"; st
  'Az adat feldolgozása
  'Darabszám (a szövegben található angol betűk darabszáma)
  'Kezdőérték
  db = 0
  'A szöveg minden karakterét megvizsgáljuk
  For i = 1 To Len(st)
    'A kar változóba a szöveg i. karakterét
    kar = Mid(st, i, 1)
    'Az adott karakter (kar) vizsgálata (angol betű-e?)
    If kar >= "A" And kar <= "Z" Or kar >= "a" And kar <= "z" Then
      'Angol betű, növeljük a darabszámot
      db = db + 1
    End If
  Next
  'Kiírjuk az eredményt
  Debug.Print "Angol betűk száma:"; db
  MsgBox "Az adat és az eredmény az Immediate ablakban látható!"
End Sub
Mintafeladat 3

A Prim függvény segítségével határozzuk meg az [1, 10] intervallumba eső prímek darabszámát!

Sub Mintafeladat3()
  Const Mettol = 1
  Const Meddig = 10
  Dim i As Long, db As Long, st As String
  'Kezdőérték
  db = 0
  'A prímek kiírásához
  st = ""
  For i = Mettol To Meddig
    If Prim(i) Then
      db = db + 1
      'A prímek kiírásához
      st = st + " " & i
    End If
  Next
  'A prímek kiírása
  Debug.Print "Prímek:"; st
  'Az eredmény kiírása
  Debug.Print "Darabszám:"; db
  MsgBox "Az eredmény az Immediate ablakban látható!"
End Sub