Kiegészítő anyag egyetemistáknak

logo

1. Feladat:

Töltsünk fel egy 10 elemű tömböt véletlenszámokkal, és keressük meg a tömb legkisebb, és legnagyobb elemét, számítsuk ki a tömb elemeinek átlagát, majd irassuk ki a tömb elemeit!

Szükséges ismeretek : Összegzés algoritmusa, Lineáris keresés algoritmusa

Megoldás:

A Formon el kell tehát helyeznünk három szövegdobozt, ahol a legnagyobb, illetve a legkisebb elemet írathatjuk ki, valamint a számok átlagát adhatjuk meg. Szükséges még egy Számolás, egy Megjelenítés, valamint a megszokott Kilépés parancsgomb. A tömb elemei a Formon jelennek meg.

Használjuk fel a következő deklarációt:

Option Explicit

Dim T(1 to 10) As Integer ’T a tömb

’A Form_Load eseménykezelő eljárásban For ciklusutasítással töltsük fel a 10 elem egész típusú tömböt 1-50 közötti véletlen számokkal.

Private Sub Form_Load()

Dim i As Integer

Randomize

For i = 1 To 10

T(i) = Int(50 * Rnd) + 1

Next i

End Sub

’A Megjelenít parancsgomb megnyomásakor a Megjelenit_Click eseménykezelő eljárásban jelenítjük meg a 10 elemű T tömb tartalmát. Az első tömbelemet a (10,10) koordinátájú pontba írjuk a Print utasítással.

Private Sub Megjelenit_Click()

Dim i As Integer

CurrentX = 10

CurrentY = 10

For i = 1 To 10

Print T(i)

Next i

End Sub

’Keressük ki a tömb legkisebb és legnagyobb elemét, valamint számítsuk ki az elemek átlagát a Szamol_Click eseménykezelő eljárásban.

Private Sub Szamol_Click()

Dim i As Integer

Dim min As Integer, max As Integer, s As Double

min = T(1)

max = T(1)

s = 0

For i = 1 To 10 egy ciklusban összegzünk, keressük a legkisebb és a legnagyobb elemet

s = s + T(i)

If T(i) < min Then min = T(i)

If T(i) > max Then max = T(i)

Next i

s = s / 10 átlagot számolunk

LegK.Text = CStr(min) kiíratjuk az eredményeket

LegN.Text = CStr(max)

Atlag.Text = CStr(s)

End Sub

2. Feladat:

Keressük meg a csoport minimális kreditpontú diákját és a legjobb tanuló átlagát! Az eredményeket jelenítsük meg!

Szükséges ismeretek : Összegzés algoritmusa, Lineáris keresés algoritmusa

Megoldás:

Formunkon el kell helyeznünk egy keretben a minimális kreditpontot elért hallgató nevét, illetve pontszámát kiíró címkét, illetve ugyanezeket a legjobb átlaggal rendelkező tanulónak. Parancsgombjaink magától értetődően a Minimális kredit, a Legjobb átlag, illetve a szokásos Kilépés feliratokat kapják.

Használjuk fel az alábbi deklarációt:

Option Explicit

Private Type hallgato

Neve As String

Kredit As Integer

Atlag As Double

End Type

Dim csoport(1 To 5) As hallgato

A Form eseménykezelő eljárásai:

’A Form_Load eseménykezelő eljárásban feltöltjük az csoport tömböt, mezőinek kezdőértéket adunk.

Private Sub Form_Load()

csoport(1).Neve = "Tóth Anna"

csoport(1).Kredit = 120

csoport(1).Atlag = 5

csoport(2).Neve = "Vályi Mónika"

csoport(2).Kredit = 100

csoport(2).Atlag = 3.8

csoport(3).Neve = "Kajtár Andrea"

csoport(3).Kredit = 140

csoport(3).Atlag = 4.8

csoport(4).Neve = "Benke László"

csoport(4).Kredit = 80

csoport(4).Atlag = 3.2

csoport(5).Neve = "Kanta Anita"

csoport(5).Kredit = 110

csoport(5).Atlag = 4

End Sub

’A Minimális kredit parancsgomb megnyomásakor meghívódó eseménykezelő eljárásban megkeressük a minimális kreditpontú diákot, megjelenítjük a nevét és a kreditpontját.

Private Sub Kredit_Click()

Dim i As Integer, index As Integer

Dim MinKredit As Integer

MinKredit = csoport(1).Kredit

index = 1

For i = 2 To 5

If csoport(i).Kredit < MinKredit Then

MinKredit = csoport(i).Kredit

index = i

End If

Next i

Nev1.Text = csoport(index).Neve

Kpont.Text = MinKredit

End Sub

’A Legjobb átlag parancsgomb megnyomásakor az Atlag_Click eseménykezelő eljárásban megkeressük a legjobb átlagú diákot, megjelenítjük a nevét és átlagát.

Private Sub Atlag_Click()

Dim i As Integer, index As Integer

Dim CsoportAtlag As Double

CsoportAtlag = 0

For i = 1 To 5

If csoport(i).Atlag > CsoportAtlag Then

CsoportAtlag = csoport(i).Atlag

index = i

End If

Next i

Nev2.Text = csoport(index).Neve

Tatlag.Text = CsoportAtlag

End Sub

3. Feladat:

Töltsünk fel egy 6 elemű, egész típusú tömböt! Számítsuk ki a tömb átlagát, összegét, és számláljuk meg a pozitív, negatív és zérus elemek, valamint a páros és páratlan elemek számát!

Szükséges ismeretek : Összegzés algoritmusa, Kiválogatás algoritmusa

Megoldás:

A modul tartalmazza a program globális deklarációit és az alprogramokat:

Option Explicit

' Globális deklaráció

Public a(1 To 6) As Integer

Public n As Integer

Public Atlag As Double, Ossz As Integer

Public neg As Integer, poz As Integer, zero As Integer

Public paros As Integer, paratlan As Integer

' A tömb összegének számítása

Function Osszeg(ByRef a() As Integer) As Integer

Dim i As Integer, s As Integer

s = 0

For i = 1 To 6

s = s + a(i)

Next i

Osszeg = s

End Function

' A tömb átlagának számítása

Function FAtlag(ByRef a() As Integer) As Double

Dim s As Double

s = Osszeg(a)

s = s / 6

FAtlag = s

End Function

' A tömb pozitiv, negativ és zérus elemeinek számlálása

Sub Keres(ByRef a() As Integer, ByRef p As Integer, ByRef n As Integer, ByRef zero As Integer)

Dim i As Integer

p = 0

n = 0

zero = 0

For i = 1 To 6

If a(i) < 0 Then n = n + 1

If a(i) > 0 Then p = p + 1

If a(i) = 0 Then zero = zero + 1

Next i

End Sub

' A tömb páros és páratlan elemeinek számlálása

Sub ParosParatlan(ByRef a() As Integer, ByRef pa As Integer, ByRef pt As Integer)

Dim i As Integer

pa = 0

pt = 0

For i = 1 To 6

If a(i) Mod 2 = 0 Then pa = pa + 1

Else pt = pt + 1

Next i

End Sub

A Form1 eseménykezelő eljárásai:

’A Form_Load eseménykezelő eljárásban feltöltjük az a tömböt egész számokkal:

Private Sub Form_Load()

Left = 1440

Top = 1005

a(1) = 5

a(2) = 6

a(3) = -2

a(4) = 3

a(5) = 4

a(6) = 14

n = 8

End Sub

' A Számol parancsgomb eseménykezelő eljárása

' A függvények aktiválása és az eredmények kiíratása

Private Sub Szamol_Click()

Dim p1 As Integer, n1 As Integer, z1 As Integer

EOsszeg.Text = CStr(Osszeg(a))

EAtlag.Text = CStr(FAtlag(a))

Call Keres(x, p1, n1, z1)

EPoz.Text = CStr(p1)

ENeg.Text = CStr(n1)

EZero.Text = CStr(z1)

' fejezzük be a programot a ParosParatlan eljárás hívásával

. . .

End Sub

4. Feladat:

Olvassunk be két pozitív, egész számot, határozzuk meg legnagyobb közös osztójukat, legkisebb közös többszörösüket!

Szükséges ismeretek : Euklideszi algoritmus

Megoldás:

Helyezzünk el formunkon két szövegdobozt, amelyekből beolvashatjuk a két számot, további kettőt, amelyekben kijelezhetjük a kért adatokat. Három parancsgombra lesz szükség a számolásokhoz (Végigszámolással, Euklideszi algoritmussal, Törzstényezőkkel ), valamint egy negyedikre, amellyel törölhetjük az eredményeket.

’A Végigszámolással parancsgomb megnyomásakor megkeressük azt legnagyobb osztót, amely mindkét számban maradék nélkül van meg, majd a két szám szorzatát osztva a legnagyobb közös osztóval megkapjuk a legkisebb közös többszöröst.

Private Sub Vegigprobal_Click()

Dim eddig As Integer, szam1 As Long, szam2 As Long

Dim oszto As Integer, kozos As Long, v As Long

On Error GoTo Ki

If Text1.Text <> "" And Text2.Text <> "" Then kozos = 1

szam1 = CLng(Text1.Text)

szam2 = CLng(Text2.Text)

If szam1 > 0 And szam2 > 0 Then

eddig = szam1

If szam2 < eddig Then eddig = szam2

For oszto = 2 To eddig

If szam1 Mod oszto = 0 And szam2 Mod oszto = 0 Then kozos = oszto

Next oszto

Text3.Text = CStr(kozos)

v = szam1 * szam2 \ kozos

Text4.Text = CStr(v)

End If

End If

Exit Sub

Ki:

MsgBox "Hibás adat!", vbExclamation, "Hibajelzés!"

End Sub

’Az Euklideszi algoritmussal parancsgomb megnyomásakor az Euklideszi_Click eseménykezelő hívódik meg. Ez az eljárás a 12+1. fejezetben ismertetett algoritmus szerint működik.

Private Sub Euklideszi_Click()

Dim a As Integer, b As Integer, maradek As Integer

Dim temp As Integer, s1 As Long, s2 As Long, v As Long

On Error GoTo Ki

If Text1.Text <> "" And Text2.Text <> "" Then

a = CInt(Text1.Text)

b = CInt(Text2.Text)

If a > 0 And b > 0 Then

s1 = a

s2 = b

If a < b Then

temp = a

a = b

b = temp

End If

maradek = b

Do While maradek <> 0

maradek = a Mod b

a = b

b = maradek

Loop

Text3.Text = CStr(a)

v = s1 * s2 \ a

Text4.Text = CStr(v)

End If

End If

Exit Sub

Ki:

MsgBox "Hibás adat!", vbExclamation, "Hibajelzés!"

End Sub

’ A Törzstényezőkkel parancsgomb megnyomásakor a Torzstenyezok_Click() eseménykezelő hívódik meg. A legkisebb közös többszörös meghatározásakor törzstényezőikre bontjuk a számokat. Előbb a szam1-nek keressük a törzstényezőit, a megtalált törzstényezőivel elosztjuk a szam1-et. A szam2-őt csak akkor osztjuk el a törzstényezőkkel, ha osztója a szam2-nek. A kezdetben 1 értékre állított legkisebb többszöröst beszorozzuk a megtalált törzstényezővel, ezt addig végezzük, míg szam1 értéke 1 nem lesz. Ezután a szam2-vel is addig folytatjuk a törzstényezőkre bontást, míg a szam2 értéke 1 nem lesz.

Private Sub Torzstenyezok_Click()

Dim szam1 As Integer, szam2 As Integer

Dim s1 As Long, s2 As Long, lktobb As Long

Dim oszto1 As Integer, oszto2 As Integer, v As Long

On Error GoTo Ki

If Text1.Text <> "" And Text2.Text <> "" Then

szam1 = CInt(Text1.Text)

szam2 = CInt(Text2.Text)

If szam1 > 0 And szam2 > 0 Then

s1 = szam1

s2 = szam2

lktobb = 1

Do While szam2 <> 1 Or szam1 <> 1

oszto1 = 2

oszto2 = 2

Do While szam1 <> 1

Do While szam1 Mod oszto1 <> 0

oszto1 = oszto1 + 1

Loop

If szam2 Mod oszto1 = 0 Then

szam2 = szam2 \ oszto1

End If

lktobb = lktobb * oszto1

szam1 = szam1 \ oszto1

Loop

Do While szam2 <> 1

Do While szam2 Mod oszto2 <> 0

oszto2 = oszto2 + 1

Loop

szam2 = szam2 \ oszto2

lktobb = lktobb * oszto2

Loop

Loop

Text4.Text = CStr(lktobb)

v = s1 * s2 \ lktobb

Text3.Text = CStr(v)

End If

End If

Exit Sub

Ki:

MsgBox "Hibás adat!", vbExclamation, "Hibajelzés!"

End Sub

’A Form betöltődésekor megadhatjuk annak helyét a képernyőn, illetve az eredményeknek fenntartott szövegdobozokat írásvédetté kell tennünk.

Private Sub Form_Load()

Left = 1440

Top = 1005

Text3.Enabled = False

Text4.Enabled = False

End Sub

’Ha a Az első szám adatmezőjének tartalma változik, akkor az eredmény ablakokat töröljük.

Private Sub Text1_Change()

Text3.Text = ""

Text4.Text = ""

End Sub

’Ha a A második szám adatmezőjének tartalma változik, akkor az eredmény ablakokat töröljük.

Private Sub Text2_Change()

Text3.Text = ""

Text4.Text = ""

End Sub

’Az Eredmények törlése parancsgomb megnyomásakor az eredményket tartalmazó adatmezőket töröljük.

Private Sub Torles_Click()

Text3.Text = ""

Text4.Text = ""

End Sub