Kiegészítő anyag egyetemistáknak

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