[VB6] Jak zapętlić? oraz przetłumaczyć z C+...

2010-12-05 15:43
CZrep
0

Witam!
Zacznę od tego, że to moje pierwsze kroki z VB także proszę nie wieszać od razu na mnie psów jak coś napiszę źle itd...

Piszę program który będzie odczytywał plik tekstowy który sam wskażę, gdzie dane będą zapisane w nowych linijkach np.

1
2
3
i tak do konca ostatniej zapisanej linijki

a następnie program wyliczy średnią arytmetyczną z tych linijek i wyświetli wynik w tekstboxie..

Na chwile obecną mam już wybór pliku i odczytuje te wartości tylko nie wiem jak zrobić pętlę by te wartości zapisywał do jakichś kolejnych zmiennych a później dodał je wszystkie i podzeilił przez ich ilość ( wyliczył średnią arytmetyczną )

Kod:
Private Sub Command1_Click()

Dim oDlg As New Class1
Dim WindowHandle As Long
Dim strPath As String
Dim strExtension As String
Dim w As Double

WindowHandle = oDlg.GetWindowHandle("ThunderDFrame", Me.Caption)
strExtension = "Plik tekstowy(.txt)" & Chr(0) & ".txt"

strPath = Trim(oDlg.OpenDialog(WindowHandle, strExtension, 1, "Otwórz"))
If strPath = "" Then Exit Sub

Set oDlg = Nothing

Dim vTab() As String

OdczytPliku strPath, vTab

End Sub

Kod:

Sub OdczytPliku(strPlik As String, ByRef vTab() As String)

Dim i As Long
i = 0
'Otwieramy plik
Open strPlik For Input As #1

'odczytujemy w pętli dane z pliku
Do While Not EOF(1)
ReDim Preserve vTab(0 To i)
Input #1, vTab(i)
i = i + 1
Loop

Close #1

End Sub

Dalej potrzebuję przetłumaczyć te linijki z C+ do VB i włożyć do programu..

 double srednia(double tab[],int wielkosc)
{
       double suma=0;
       for(int i=0;i<wielkosc;i++)
          suma+=tab[i];
       suma=suma/wielkosc;
       return suma;
}

double sigma2(double tab[], int wielkosc, double srendia)
{
       double wynik=0;
       double roznica=0;
       for(int i=0;i<wielkosc;i++)
       {
          roznica=(int)srednia-tab[i];
          wynik+=pow(roznica,2);
       }
       wynik=wynik/wielkosc;
       return wynik;
}

Czy dobrze to robię? Ktoś może mi pomóc?

Pozostało 580 znaków

2010-12-05 15:56
0

długość tablicy - ilość elementów w niej zawartych
niestety o VB6 pojęcia nie mam ale podejrzewam, że jak już tyle dałeś radę napisać to znajdziesz...

Pozostało 580 znaków

2010-12-05 16:03
CZrep
0

Szczerze niemam pojęcia jak to dalej ruszyć zeby mi te elementy zsumowalo i podzielilo przez ich ilosc.. Jest tu ktos kto ogarnia VB?

Pozostało 580 znaków

2010-12-05 16:27
0

a może tak zacząłbyś od dokumentacji VB6?
tablice to jedna z podstaw "każdego" języka programowania...
np. tutaj

Pozostało 580 znaków

2010-12-05 16:29
0

Liczby masz w tablicy: vTab

Teraz robisz:

For i = LBound(vTab) to UBound(vTab)
    suma = suma + vTab(i)
next i

podzielić przez ilość:

srednia = suma / UBound(vTab)
edytowany 2x, ostatnio: aurel, 2010-12-05 16:31

Pozostało 580 znaków

2010-12-05 17:21
CZrep
0

Dzięki - faktycznie to działa - tylko co z liczbami np 5,2 czy 5.5 - jak to zrobić by poprawnie zostawały odczytywane i obliczane?

Pozostało 580 znaków

2010-12-05 17:34
0

A, nie zauważyłam, że masz tablicę stringów. W takim wypadku:

  1. deklarujesz sumę jako double
  2. deklarujesz srednia jako double
  3. dodawanie robisz tak:
    suma = suma + CDbl(vTab(i))

Liczby muszą być zapisane z przecinkami (nie kropkami!) bo inaczej nie zostaną prawidłowo odczytane.

Pozostało 580 znaków

2010-12-05 17:38
Cz
0
 Dim x As Integer, Srednia As Double, Suma As Double
Suma = 0: Srednia = 0

For i = LBound(vTab) To UBound(vTab)
     Suma = Suma + CDbl(vTab(i))
List1.AddItem vTab(i)
Next i

Srednia = Suma / i

List1.AddItem "Suma elementów = " & str(Suma)
List1.AddItem "Średnia arytmetyczna = " & Srednia
End Sub

Jak dam kropkę to się wykrzacza jak mówiłeś, ale jak dam przecinek to odczytuje to jakby to byla nastepna liczba czyli 5,5 a enter nizej 5 robi mi jako 5+5+5..

mówiłAŚ, aurel jest kobietą... - Fanael 2010-12-05 17:44
przepraszam serdecznie, nie miałem zielonego pojęcia bowiem nick nie wskazuje, a w profilu nie pisze... - skubi23t 2010-12-05 18:05

Pozostało 580 znaków

2010-12-05 17:54
0

Być nie może. Zobacz taki kod:

Sub test()
    Dim Srednia As Double, Suma As Double
    Dim vTab(0 To 10) As String

    For i = LBound(vTab) To UBound(vTab)
         vTab(i) = "5,5"
    Next i

    For i = LBound(vTab) To UBound(vTab)
         Suma = Suma + CDbl(vTab(i))
    Next i

    Srednia = Suma / i

    MsgBox CStr(Suma)
    MsgBox CStr(Srednia)
End Sub

Jako suma daje 60,5, jako średnia 5,5 czyli ewidentnie dobrze. Zobacz pod debuggerem co masz w tablicy przed sumowaniem, może źle odczytujesz z pliku?

Pozostało 580 znaków

2010-12-05 18:06
0

Właśnie najprawdopodobniej źle odczytuje, a odczytywanie mam zrobione w ten sposób:

 Sub OdczytPliku(strPlik As String, ByRef vTab() As String)
Dim NrPliku As Integer

Dim i As Long
i = 0

'Otwieramy plik
NrPliku = FreeFile
Open strPlik For Input As #NrPliku

'odczytujemy w pętli dane z pliku
Do While Not EOF(1)
    ReDim Preserve vTab(0 To i)
    Input #1, vTab(i)
    i = i + 1
Loop

Close #NrPliku

End Sub

Pozostało 580 znaków

2010-12-05 18:11
0

Line Input #1, vTab(i)
i gitara ;)

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0