Messwerterfassung & -auswertung mit Visual Basic

Hallo, ich brauche dringend eure hilfe!

Es soll ein VB – Programm erstellt werden, mit dem Messwerte erfasst und ausgewertet werden können. Zunächst wird die Anzahl der Messwerte über eine Inputbox eingegeben, anschließend sollen die einzelnen Messwerte über eine Inputbox eingegeben, in einer Reihung abgespeichert und in einer Listbox ausgegeben werden.
Es sollen der kleinste und größte Messwert ermittelt werden und damit auch der Bereich, in dem sich die Messwerte befinden (zwischen kleinstem und größtem Messwert). Anschließend soll neben der Gesamtanzahl der Messwerte die Anzahlen der Messwerte im ersten, zweiten und dritten Drittel des Bereiches ausgegeben werden

Außer der „Val“ –Funktion dürfen keine VB – Standardfunktionen verwendet werden!

Im Beispiel wurden 10 Messwerte eingegeben. Der kleinste Messwert ist 1, der größte 100. Der Bereich, in dem sich die Messwerte bewegen, geht also von 1 bis 100. Im 1. Drittel des Bereichs
(1 – 34) liegen 4 Messwerte (1, 10, 20, 30), im 2. Drittel des Bereichs (34 – 67) liegen 3 Messwerte (40, 55, 65) und im 3. Drittel des Bereichs (67 - 100) liegen auch 3 Messwerte (80, 90, 100).

Die Messwerte werden in der Listbox List1 ausgegeben. Die Ausgabe der Anzahl der Messwerte erfolgt im Textfeld Text1, der kleinste Messwert im Textfeld Text2, der größte Messwert im Textfeld Text3, die Anzahl der Messwerte im 1. Drittel im Textfeld Text4, die Anzahl im 2. Drittel im Textfeld Text5 und die Anzahl im 3. Drittel im Textfeld Text6.

Ich habe schon versucht das Programm zu schreiben aber kam nicht weiter.

Option Explicit
Option Base 1
Dim i As Integer, a() As Integer, Eingabe As String, Anzahl As Integer, y As Integer
Dim j As Integer, h As Integer, x As Integer

Private Sub Command1_Click()
Do
Eingabe = InputBox(„Bitte Messwert eingeben!“)

If Eingabe „“ Then
i = i + 1
ReDim a(i)
a(i) = Val(Eingabe) 'Festlegen der Anzahl
Anzahl = i
List1.AddItem (a(i))
End If
Loop Until Eingabe = „“

Call bubble(a(), Anzahl) ’ Tauschen

Text2.Text = a(i) 'Ausgabe der größeren Zahl
Text3.Text = a(1) 'Ausgabe der kleinste Zahl funktioniert aber nicht
Text1.Text = Anzahl 'Ausgabe Anzahl

'Berechnung der Drittel
x = a(i) - a(1) 'Bereich

x = x / 3

???

End Sub

Sub bubble(ByRef a() As Integer, ByVal m As Integer)
Dim i As Integer, j As Integer ', h As Integer

For j = m - 1 To 1 Step -1
For i = 1 To j
If a(i) > a(i + 1) Then
Call tausche(a(i), a(i + 1))
End If
Next i
Next j

End Sub

Sub tausche(ByRef x As Integer, ByRef y As Integer)
Dim h As Integer

h = x 'h: Hilfsvariable, damit der Wert von x nicht verloren geht
x = y
y = h

Vielen Dank schon mal im Voraus für eure Hilfe.

Moin, wiing,

derartige Probleme löst man sinnvollerweise im Einzelschritt: Jeweils einen Schritt abarbeiten und dann die Variablen anschauen - da stehen oft wundersame Dinge drin :wink:

x = x / 3

x ist Integer, erinnerst Du Dich?

Gruß Ralf

Hallo,

Ich habe schon versucht das Programm zu schreiben aber kam
nicht weiter.

wie kommt es zu den ‚komischen‘ Einschränkungen, daß Du nicht alles verwenden darfst? Hausaufgabe?

Mir sind ein paar Kleinigkeiten aufgefallen, die zu größeren Problemen führen werden.

1.) Deine Sortirroutine funktioniert nicht.
Du übergibst Elemente von Arrays und tauschst die in Variablen aus. Dann übergibst Du das Ergebnis aber nicht wieder an die Arrays. Das Array bleibt, wie es war. Lass die Prozedur ‚tausche‘ weg, die drei Zeilen passen auch noch mit in ‚bubble‘. Statt Bubblesort verwende ich lieber Quicksort, das geht schneller. :smile:

http://www.activevb.de/tipps/vb6tipps/tipp0188.html

2.) Die Variable x hast Du für den gesamten Code deklariert und in der Prozedur ‚tausche‘ noch einmal. Dann verwendest Du sie für verschiedene Zwecke.

3.) Wegen Option Base 1 kannst Du die Anzahl der Felder im Array ‚a‘ einfach mit UBound(a) lesen.

Gruß Rainer