Ergebniss soll neuer Ausgangswert werden

  • Hallo an alle,

    habe gerade mit Autoit begonnen und stehe gerade Mal an.

    Ich habe folgendes Skript geschrieben:

    Das Schlussendliche Ziel ist die Zahl $total=0 zu bekommen.
    Im Moment wäre ich einfach froh, wenn das Skript die gefundenen Ganzzahlen in einen Array schreibt und diesen Wert zur Weiterverarbeitung wieder ausliesst.
    Die MsgBox gibt momentan die Werte "0" und "-1" aus.
    Wenn ich "$Zahl= ($v1-$v2)/17" durch "$Zahl= ($total-$v2)/17" kommen die Werte "14612376337918" und "146123763379187" heraus.
    Diese Werte sind die richtigen, aber wie kann sie sie wieder ins Skript einfügen, als wären sie das $total?

    Gruss

  • Du wirst nie genau auf 0 kommen bei der Rechnung außer du Rundest immer. Hier mal das was du willst mit der Ausgabe aller Werte in der Console:

    AutoIt
    $total = 248410397744610
    
    
    For $v2 = 0 To 26
    	$total = Round(($total-$v2)/17)
    	ConsoleWrite($total & @CRLF)
    	If $total == 0 Then
    		ExitLoop
    	EndIf
    Next

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Es muss möglich sein genau auf 0 zu kommen. Es soll nämlich die "Rückertsrechnung" zu diesem Problem sein:
    youtube
    Da der eigentliche Start von 0 beginnt und immer eine Ganzzahl mit einer Ganzzahl multipliziert (Schlusswert =$total), muss die Umkehrung auch möglich sein...
    Dewegen vrauche ich die Zahlen $v2 aufgeschrieben und die Zahlen $v1 weiterverarbeitet...

  • If IsInt($Zahl) [...]

    Damit fragst du den internen Datentyp ab und nicht ob eine eventuelle Gleitkommazahl als Wert eine Ganzzahl hat.
    Ergebnisse von Divisionen sind in AutoIt per se Floats.
    Deine Abfrage kann also nie zutreffend sein.

    Mal vom möglichen Effekt des binären Rundungsfehlers abgesehen sollte deine Abfrage eher so lauten:

    AutoIt
    If Mod($Zahl,1) = 0 And $v2<= 26 Then
  • @chip
    mit deinem Skript bekomme ich die gesuchten Zahlen, danke. Ich benötige aber auch noch den "Teiler", also die $v2...

    Ich tüftle noch etwas herum und würde mich ev. wieder melden...

    @'AspirinJunkie
    Ich dachte IsInt($Zahl) heisst soviel wie "finde die Ganzzahl in dieser Rechnung"... habe ich das falsch verstanden?
    Die Zahlen, die als Ergebnis herauskommen, sind die gleichen wie mit IsInt($Zahl), aber auch dir: Danke für den Input.

  • Ich dachte IsInt($Zahl) heisst soviel wie "finde die Ganzzahl in dieser Rechnung"

    Nein heißt es nicht.
    Es gibt in jeder Programmiersprache für Variablen verschiedene Datentypen. Z.B. Integertypen für Ganzzahlen, Floatzahlen für Gleitkommazahlen, manchmal auch Festkommazahlen usw.
    AutoIt arbeitet intern auch mit diesen Typen, nur sieht man sie nicht so sehr, da AutoIt für den User den Typen Variant anbietet. Dieser Typ kann alle diese Datentypen annehmen und problemlos hin und her switchen.
    Die Funktion IsInt() die du verwendest sagt dir dabei lediglich ob deine Variable gerade den Datentyp Integer inne hat und das sagt dabei nichts über ihren Wert aus.
    Zwar kann ein Integerwert keine Nachkommastellen besitzen, eine Gleitkommazahl kann hingegen sehr wohl den Wert 1,0 annehmen - sie bleibt dabei natürlich dennoch eine Floatzahl und wird nicht auf einmal ein Integer.
    Und genau das ist das Problem bei dir.

  • Fühl mich jetzt gerade völlig blöd, aber:

    (248410397744610-4)/17=14612376337918

    das sind doch alles Ganzzahlen? Sind denn das nicht Integer-Werte?

    Kann aber muss nicht, oder wie?

    Einmal editiert, zuletzt von Kinemod (13. Februar 2016 um 21:44) aus folgendem Grund: Vor allem verwirrt mich in diesem Fall gerade die deutschsprachige Hilfe. Da heisst es nämlich: IsInt Überprüft ob die Variable eine ganze Zahl ist (Integer).

  • Du verwechselst Datenwert mit Datentyp.
    Na klar ist 14612376337918 eine Ganzzahl.
    Aber intern als Gleitkommazahl verwaltet.
    Sprich: 14612376337918.0

    Vielleicht wird es so etwas klarer:

    AutoIt
    $A = 248410397744610
    ConsoleWrite($A & @TAB & "Datentyp:" & VarGetType($A) & @CRLF)
    
    
    $X = (248410397744610-4)/17
    ConsoleWrite($X & @TAB & "Datentyp:" & VarGetType($X) & @CRLF)
  • Ich glaub ich habs....

    Liefert mir die Zahlen, die ich brauche (glaube ich)...
    Weiter Prüfungen erst Morgen.