# [Dringend] Array per Schleife auslesen lassen



## Jojo-dFG (4. Februar 2004)

Hi Leute

Ich habe ein Array, indem ich einen X- und einen Y-Wert für jeden Array-Eintrag habe. Habe insgesamt 7 Einträge.

Hab das so gemacht:

```
Private Type Werte
    YWert As Double
    XWert As Double
End Type

Private Sub XundXWerte()
    Dim personen(1 To 5) As Person
    
    Wert(1).XWert = "1"
    Wert(1).YWert = "7"
    Wert(2).XWert = "3"
    Wert(2).YWert = "9"
   etc...
End Sub
```

So jetzt mein eigendlichen Problem:
In meinem Programm gibt man einen X-Wert ein (Dim InputXWert). Zu diesem Wert brauche ich zwei "Nachbarn". Alle der X-Werte sollen im Array verglichen werden, welcher X-Wert niedriger ist und welcher X-Wert höher (aber die nähesten zu ihm).
Diese beiden Nachbarn sollen dann als Variablen XBefore und XAfter definiert werden. Der eingegebene X-Wert soll zwischen zwei X-Werten aus dem Array liegen.

Ich würde das Problem mit einer Schleife lösen...weiß aber nicht genau wie.

Bitte helft mir, ist echt dringend!
Vielen Dank im Voraus
mfg Jojo-dFG


----------



## Retlaw (5. Februar 2004)

Solltest erstmal die Grundlagen von VB lernen, dein zusammenkopierter Code kann so ja nicht gehen.



> _Original geschrieben von Jojo-dFG _
> Hi Leute
> 
> Ich habe ein Array, indem ich einen X- und einen Y-Wert für jeden Array-Eintrag habe. Habe insgesamt 7 Einträge.
> ...


Dein Type heißt Werte, du deklarierst aber ein Array vom Typ Person.
Wiso 1 To 5 wenn du 7 werte hast ?
Weiterhin sind XWert und YWert als Double deklariert, du versuchst aber einen String ("1", usw.) zuzuweisen.



> So jetzt mein eigendlichen Problem:
> In meinem Programm gibt man einen X-Wert ein (Dim InputXWert). Zu diesem Wert brauche ich zwei "Nachbarn". Alle der X-Werte sollen im Array verglichen werden, welcher X-Wert niedriger ist und welcher X-Wert höher (aber die nähesten zu ihm).


Mit Dim kann man keine Eingaben abfragen, sondern nur Variablen deklarieren.


> Diese beiden Nachbarn sollen dann als Variablen XBefore und XAfter definiert werden. Der eingegebene X-Wert soll zwischen zwei X-Werten aus dem Array liegen.
> 
> Ich würde das Problem mit einer Schleife lösen...weiß aber nicht genau wie.
> 
> ...




Versuchs mal damit:

```
Option Explicit

Private Type Wert
    X As Integer
    Y As Integer
End Type

Private Sub XundXWerte()
    Dim Werte(1 To 7) As Wert
    Dim Eingabe As Integer
    Dim XBefore As Integer
    Dim XAfter  As Integer
    Dim i       As Integer
    Dim findB   As Boolean
    Dim findA   As Boolean

    'Werte ans Array zuweisen
    Werte(1).X = 1
    Werte(1).Y = 7
    Werte(2).X = 4
    Werte(2).Y = 9
    Werte(3).X = 2
    Werte(3).Y = 5
    Werte(4).X = 6
    Werte(4).Y = 1
    Werte(5).X = 3
    Werte(5).Y = 0
    Werte(6).X = 22
    Werte(6).Y = 4
    Werte(7).X = 8
    Werte(7).Y = 9

    findB = False
    findA = False

    'Eingabe abfragen
    Eingabe = InputBox("Bitte Ganzzahl für X eingeben:")
    'Hier sollte noch Prüfung auf korrekte Eingabe erfolgen

    'Startwerte für Suche setzen
    XBefore = Werte(1).X
    XAfter = Werte(1).X

    'Größte bzw. kleinste Zahl im Array ermitteln
    For i = 1 To 7 Step 1
        If Werte(i).X < XBefore Then
            XBefore = Werte(i).X
        End If
        If Werte(i).X > XAfter Then
            XAfter = Werte(i).X
        End If
    Next

    'Benachbarten Wert der Eingabe ermitteln
    For i = 1 To 7 Step 1
        If Werte(i).X >= XBefore And Werte(i).X < Eingabe Then
            XBefore = Werte(i).X
            findB = True
        End If
        If Werte(i).X <= XAfter And Werte(i).X > Eingabe Then
            XAfter = Werte(i).X
            findA = True
        End If
    Next

    'Wenn es Nachbarn gibt Meldung ausgeben
    If findA = True And findB = True Then
        MsgBox "Benachbarte X-Werte:" & vbCrLf & XBefore & " " & XAfter
    Else
        MsgBox "Es gibt entweder keinen größeren oder kleineren Wert!"
    End If
End Sub
```


----------



## Zorck (5. Februar 2004)

*hab mein Post mal wegeditiert, da ich mit Retlaw gleichzeitig geschrieben habe und seine Antwort ausführlicher war/ist*


----------



## Jojo-dFG (5. Februar 2004)

Danke für eure Hilfe!

Habs aber gestern Abend schon alleine gelöst. Deswegen hatte ich schnell nen paar Sachen zusammen kopiert *g*. Musste eben schnell gehen.
 So gehts auch noch:


```
'Array mit dem Werten
Dim Value(0 To 8) As Values
    Value(0).XValue = 5
    Value(0).YValue = 10000
    Value(1).XValue = 10
    Value(1).YValue = 1751.1
    Value(2).XValue = 20
    Value(2).YValue = 210.8
    Value(3).XValue = 30
    Value(3).YValue = 585
    Value(4).XValue = 40
    Value(4).YValue = 22.3
    Value(5).XValue = 50
    Value(5).YValue = 9.9
    Value(6).XValue = 60
    Value(6).YValue = 4.6
    Value(7).XValue = 70
    Value(7).YValue = 2.1
    Value(8).XValue = 77
    Value(8).YValue = 0
'etc.

'Schleife
For b = UBound(Value) To 0 Step -1
            m_dYAfter = Value(b).YValue
            m_dXAfter = Value(b).XValue
            If b <= 7 Then
            m_dYBefore = Value(b + 1).YValue
            m_dXBefore = Value(b + 1).XValue
        ElseIf m_dInputValue = Value(a).YValue Then
            MsgBox "X-Wert: " & Value(a).XValue
        ElseIf m_dInputValue < Value(b).YValue Then
            Exit For
        End If
Next b

'Funktion und Ausgabe
m_sResult = m_dXBefore + (m_dInputValue - mdYBefore) * ((m_dXBefore - m_dXAfter) / (m_dYBefore - m_dYAfter))
lbl_result.Caption = "X-Wert: " & m_sResult

End Function
```


----------

