Pi-Berechnung VBA

  • Option Explicit
    Dim pi As Double
    Dim zahl As Double
    Dim operator As String
    Dim neunenner As Double




    Sub berechnen()


    pi = 0
    operator = "-"
    neunenner = 1


    For zahl = 1 To 1000000000 Step 1
    If zahl = 1 Then
    pi = 1
    operator = "-"
    Else
    If operator = "-" Then
    neunenner = neunenner + 2
    pi = pi - (1 / neunenner)
    operator = "+"
    ElseIf operator = "+" Then
    neunenner = neunenner + 2
    pi = pi + (1 / neunenner)
    operator = "-"
    End If


    End If
    Next


    MsgBox (4 * pi)
    End Sub





    So, ich hab das mal geschrieben, relativ simpel.. Gibts Sachen, was man verbessern könnte?


    Wie könnte ich die Zeit messen, welche es für die Schleife braucht?

  • hm, ich kenne vba überhaupt nicht... aber bei java gibts so eine funktion welche die zeit als eine mehrstellige ganzzahl ausgeben kann (mitternacht ist glaub ich dann 0). wenns das bei vba auch gibt, kannst du ja am anfang der schleife diese zeit starten, am ende wieder messen und voneinander abziehen - die differenz ist dann ja die benötigte zeit ;)

  • das ganze in VBA zu machen finde ich nicht gut, denn mit VBA wartest du eine ewigkeit, da VBA ja eine compilierte sprache ist (oder umgekehrt?) mach es mit C geht viel schneller bei der berechnung...


    beispiel:
    um von 1 auf 2'000'000 zu rechnen also mit einem for while befehl hat:


    VBA: 2 MIN
    C: 2 SEK!!


    aber sonst wenn es funzt.

  • Von C hab ich noch keine Ahnung, das ganze mache ich jedoch auch nur aus Spass.. :-)


    Das ganze funzt schon, geht nur ne ewigkeit.. ;)


  • umgekehrt. VB(A) wird interpretiert, nicht kompiliert.


    |---> it MUST be a spoon! <---|


      


  • lerne besser was anständiges programmieren! c oder c++ und wenn du microsoft magst kannst du auch c# ausprobieren.
    aber um himmels willen kein vb

    Das Problem der Tretminen ist nur schrittweise zu lösen.

  • Zitat

    Original von seng


    Wie könnte ich die Zeit messen, welche es für die Schleife braucht?


    es gibt einen API aufruf namens GetTickCount(), der die eine long value zurückgibt! (musst bissl googeln)


    dann kannst du


    starttime = gettickcount()


    endtime = gettickcount()


    time_needed = starttime-endtime


    zu den optimierungen: statt operator als string, könntest du ein boolean nehmen :)


    Zitat

    lerne besser was anständiges programmieren! c oder c++ und wenn du microsoft magst kannst du auch c# ausprobieren.
    aber um himmels willen kein vb


    stimmt schon, nur ist C/C++ sehr kompliziert imv ergleich zu VB...
    zudem die entwicklungszeit einberechnen!
    in VB hast du höllisch schnell was brauchbares... C/C++ haste höllisch lang, bis mal alles richtig läuft!
    für anfänger ist VB seht gut geeignet! und mit .NET kommts ja nciht mehr drauf an, ob C# oder VB... sind ja alle gleich schnell (oder wurde mit da scheisse erzählt)


    ach und BTW: bei office2000 kommste nicht um VBA herum :)

  • Zitat

    Original von hang
    und mit .NET kommts ja nciht mehr drauf an, ob C# oder VB... sind ja alle gleich schnell (oder wurde mit da scheisse erzählt)


    da wurde dir scheisse erzählt :D.
    mit dem neuen c99 compiler (visual studio .NET) wird zwar alles in eine art pre-asm-language übersetzt und ist deshalb ein bisschen schneller, aber es ist nicht alles gleich schnell.



    das mit der entwicklungszeit stimmt schon, aber VB als anfängersprache ist was sehr gefährliches. nirgendwo gibts hässlicheren und unportableren code als bei VB. es ist 100 mal einfacher von c aus auf vb umzusteigen, aber umgekehrt muss man es praktisch neu erlernen.
    darum ist es sinnvoller, zuerst ein paar kapitel in einem c/c++/c# buch zu lesen und erst nachher vb anzuschauen.


    gettickcount() findest du auch in der msdn.

    Das Problem der Tretminen ist nur schrittweise zu lösen.

  • Zitat

    Original von Finn
    lerne besser was anständiges programmieren! c oder c++ und wenn du microsoft magst kannst du auch c# ausprobieren.
    aber um himmels willen kein vb


    Na, so freiwillig lerne ich das Ganze ja nicht.. ;-)


    Das momentane Modul in der Schule ist halt so Zeuchs machen.. Das andere erscheint mir momentan noch zu kompliziert..

  • Der beste einsteigerweg find ich immer noch VB-VB.NET wenn man VB.net erst mal etwas kann, ist C++ oder JAVA ja kein Problem mehr, der einzige Unterschied ist der Synthax.


    Klar C ist schneller als VB, doch für 99% aller Anwendungen die man in der Schule oder so braucht, reicht VB föllig aus!
    Ich programmiere hier im Geschäft Prüfgeräte mit VB und wir haben keine Probleme damit.