Das Einfachste: Verwende ein ListView mit Checkbox-Style, dann ist es egal, wieviel Einträge du im Array hast.
Beiträge von BugFix
-
-
Was stört dich an @SW_HIDE ? Speicherplatzsorgen?
Wenn du die GUI im weiteren Programm definitiv nicht mehr benötigst, kannst du sie, wie bereits in den vorigen Posts erwähnt, mit GUIDelete() "entsorgen".
Falls du sie aber nochmals benötigst, wäre das hochgradig schwachsinnig sie jedesmal neu zu erstellen.
-
Hi,
[autoit]
ich bin gerade am Ausprobieren der Versionen von Euch. Bei eukalyptus ist mir aber sofort ein Fehler aufgefallen:
Durch Verwendung des kurzen Strings in der Schleife bei ADD spart er schön Zeit
... aber der Speicherüberlauf geht verloren. Außerdem ist die Länge des Ergebnisstrings nicht passend.
Laßt mal in allen Euren Skripts folgende Aufgabe durchlaufen:$BigInt_1 = _StringRepeat('9', 180)
[/autoit][autoit][/autoit][autoit]
$BigInt_2 = _StringRepeat('9', 90)ConsoleWrite(_BigInt_Add($BigInt_1, $BigInt_2) & @CRLF)
[/autoit]Das Ergebnis muß 181 Stellen haben mit Überlauf bis zur ersten Position.
Code1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000999999999999999999999999999999999999999999999999999999999999999999999999999999999999999998Für die MUL gilt das analog. Das Ergebnis bei eukalyptus ist nur 222 Stellen lang. 180 9en mal 90 9en müssen aber logischerweise 180 +90 ==> also 270 Stellen werden.
Code999999999999999999999999999999999999999999999999999999999999999999999999999999999999999998999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001Ich denke mal, da wird der Benchmarktest nicht allen Erfordernissen im geforderten Zahlenbereich bis 200 Stellen Länge gerecht.
Edit
Ich habe die vorangestellte Aufgabe mit den Versionen von eukalyptus, peethebee, Oscar und mir getestet. Außer bei eukalyptus wird überall das richtige Ergebnis geliefert.
@eukal: Na, wohl doch etwas überoptimiert?
-
Hallo liebe Community,
ich würde mich freuen wenn mir einer ein Skript schreiben könnte,
- Ich könnte dir vielleicht noch ein Mandeltörtchen backen...
Aber wie peethebee schon sagt: Es ist nicht schwer und wenn trotzdem Fragen auftauchen, helfen wir schon. Aber erst mal selber anfangen. -
So, Abgabetermin ist rum.
Auch wenn ich nicht auf dem Podest lande, hier meine SpeedVariante (ca. 0,12 sec).Spoiler anzeigen
[autoit]#include-once
[/autoit] [autoit][/autoit] [autoit]Func _BigInt_Load($S)
[/autoit] [autoit][/autoit] [autoit]
Return $S
EndFunc ;==>_BigInt_LoadFunc _BigInt_Print($S)
[/autoit] [autoit][/autoit] [autoit]
Return $S
EndFunc ;==>_BigInt_PrintFunc _BigInt_Add(ByRef $1, ByRef $2)
[/autoit] [autoit][/autoit] [autoit]
Local $l1 = StringLen($1), $l2 = StringLen($2), $s0 = ''
Select
Case $l1 > $l2
For $j = 1 To $l1 - $l2
$s0 &= '0'
Next
$2 = $s0 & $2
Case Else
For $j = 1 To $l2 - $l1
$s0 &= '0'
Next
$1 = $s0 & $1
EndSelect
Local $ue = '0', $out = '', $tmp, $tlen, $s0
While StringLen($1) > 14
$tmp = StringRight($1, 14) + StringRight($2, 14) + $ue
$tlen = StringLen($tmp)
Switch $tlen
Case 0 To 13
$s0 = ''
For $j = 1 To (14 - $tlen)
$s0 &= '0'
Next
$tmp = $s0 & $tmp
$ue = '0'
Case 14
$ue = '0'
Case Else
$ue = StringLeft($tmp, 1)
EndSwitch
$out = StringRight($tmp, 14) & $out
$1 = StringTrimRight($1, 14)
$2 = StringTrimRight($2, 14)
WEnd
Return ($1 + $2 + $ue) & $out
EndFunc ;==>_BigInt_AddFunc _BigInt_Mul(ByRef $1, ByRef $2)
[/autoit] [autoit][/autoit] [autoit][/autoit]
If $1 = '0' Or $2 = '0' Then Return '0'
$l = StringLen($1)
If $l < 8 Then
Local $a1[1] = [$1]
Else
Local $a1[Floor($l / 7) + 1]
For $i = 0 To UBound($a1) - 2
$sZ = ''
For $j = 1 To ($l - ($i + 1) * 7)
$sZ &= '0'
Next
$a1[$i] = StringLeft($1, 7) & $sZ
$1 = StringTrimLeft($1, 7)
Next
$a1[UBound($a1) - 1] = $1
EndIf
$l = StringLen($2)
If $l < 8 Then
Local $a2[1] = [$2]
Else
Local $a2[Floor($l / 7) + 1]
For $i = 0 To UBound($a2) - 2
$sZ = ''
For $j = 1 To ($l - ($i + 1) * 7)
$sZ &= '0'
Next
$a2[$i] = StringLeft($2, 7) & $sZ
$2 = StringTrimLeft($2, 7)
Next
$a2[UBound($a2) - 1] = $2
EndIf
Local $sum = 0
For $i = 0 To UBound($a1) - 1
For $j = 0 To UBound($a2) - 1
$x = (StringLeft($a1[$i], 7) * StringLeft($a2[$j], 7)) & StringTrimLeft($a1[$i], 7) & StringTrimLeft($a2[$j], 7)
$sum = _BigInt_Add($sum, $x)
Next
Next
Return $sum
EndFunc ;==>_BigInt_Mul -
-
-
Du hast Fans ?!
- Ich habe Schulden :wacko: 
-
Nee, das geht ganz sicher nicht. Drum will ich ja mal schauen, was die DLL's so hergeben. 
-
OK, hier ein Beispiel:
Spoiler anzeigen
[autoit]#Include <String.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <Array.au3>Global $INI = @ScriptDir & '\Test.INI'
[/autoit] [autoit][/autoit] [autoit]; ############## Verschlüsseln ########################
[/autoit] [autoit][/autoit] [autoit]
$section = 'muster_section'
$key1 = 'BlaBla'
$val1 = '1234'
$key2 = 'BlubBlub'
$val2 = '99999'$pass = InputBox('Verschlüsseln', 'Bitte Passwort eingeben.')
[/autoit] [autoit][/autoit] [autoit]
IniWriteSection($INI, _StringEncrypt(1, $section, $pass), _StringEncrypt(1, $key1, $pass) & '=' & _StringEncrypt(1, $val1, $pass) & @CRLF _
& _StringEncrypt(1, $key2, $pass) & '=' & _StringEncrypt(1, $val2, $pass)); ########################################################
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]; ############## Entschlüsseln ########################
[/autoit] [autoit][/autoit] [autoit]
; Sektionsnamen lesen
$aSections = IniReadSectionNames($INI)
Local $aSecKeys[1][2]; Sektionsnamen entschlüsseln und Schlüssel-Wert-Paare auslesen
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To UBound($aSections) -1
If $aSecKeys[UBound($aSecKeys)-1][0] <> '' Then ReDim $aSecKeys[UBound($aSecKeys)+1][2]
$aSecKeys[UBound($aSecKeys)-1][0] = _StringEncrypt(0, $aSections[$i], $pass) ; Sektionsname jetzt im Klartext
$aSecKeys[UBound($aSecKeys)-1][1] = IniReadSection($INI, $aSections[$i]) ; 2D-Array mit noch verschlüsselten ""Key=Value"
Next; im Programm ist ja der entsprechende Sektionsname bekannt
[/autoit] [autoit][/autoit] [autoit]
; zugehörige Schlüssel-Wert-Paare als einzelnes Array selektieren
Dim $zuLesendeSektion = 'muster_section'
Dim $aKeyVal
For $i = 0 To UBound($aSecKeys) -1
If $aSecKeys[$i][0] = $zuLesendeSektion Then
$aKeyVal = $aSecKeys[$i][1]
ExitLoop
EndIf
Next; Schlüssel-Wert-Paare entschlüsseln
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To UBound($aKeyVal) -1
$aKeyVal[$i][0] = _StringEncrypt(0, $aKeyVal[$i][0], $pass)
$aKeyVal[$i][1] = _StringEncrypt(0, $aKeyVal[$i][1], $pass)
Next_ArrayDisplay($aKeyVal, 'Schlüssel-Wert-Paare')
[/autoit] -
Mit StrinEncrypt könnte ich doch aber nur die zugehörigen Werte verschlüsseln und nicht die ganze .INI, oder sehe ich das falsch?
Du könntest auch die gesamte Datei Ver-/Entschlüsseln. Dann mußt du die INI aber temporär speichern um sie dann "normal" zu lesen.
-
Die INI als Datei würde ich nicht verschlüsseln - sondern die eingetragenen Parameter (Sektionsnamen, Schlüssel, Werte).
Du kannst vom User das Passwort zum Entschlüsseln beim Programmstart anfordern und damit die Daten aus der INI entschlüsseln.
Wenn neue Daten in die INI geschrieben werden müssen machst du das wiederum durch Interaktion mit dem User.
Natürlich könntest du auch das Paßwort im Skript hinterlegen - aber was nützt ein Tresor, wenn der Schlüssel daneben hängt?
-
Hi sc4ry,
ich kann dir zumindest schonmal sagen, dass SSL-Verschlüsselung möglich ist. Du benötigst dazu in jedem Fall eine zusätzliche DLL für den Verschlüsselungsdienst. Für mIRC habe ich etwas gefunden - ich werde jetzt mal testen, ob ich das aufbröseln kann und für den eigenen Client nutzen kann. Falls du selber rumprobieren möchtest - hier die Info: IRC mit SSL -
Nur noch die Fensterleiste muss noch ab

Diese Maße kannst du hiermit: _GetSystemMetrics (kpl. in einem Aufruf) ermitteln.
-
Sobald man Sachen wie 4/3 direkt berechnet, muss man einen Genauigkeitsverlust befürchten (bzw. hat ih faktisch). Eigentlich müsste man also Brüche verwalten und auch automatisch kürzen...
peethebee
"Dezimal" betrachtet stimme ich dir zu
- aber wenn Brüche vorhanden sind, würde ich auch mit Brüchen rechnen und nur das Endergebnis dezimal ausgeben. Ich brauche ja bei der Betrachtung von Brüchen nicht nach sinnvollen Erweiterungen (also kgV / ggT) suchen. Schließlich brauch ich nicht von Hand rechnen. Also ist der gemeinsame Nenner einfach das Produkt der Nenner, Zähler entsprechend erweitern und fertig
. Sofern die Brüche nicht in Dimensionen liegen, die den Zahlenrahmen von AutoIt sprengen halte ich diesen Weg für praktikabel. -
Hi,
mal ein wenig Gedankengut von mir dazu :D.
Das Problem bei der Berechnung von Aufgaben, deren Form (Rechenart) und Inhalt ich vorab nicht kenne, ist hauptsächlich die Berücksichtigung der Vorrangsregeln.
Hier ist es sicher sinnvoll mit Taschenrechner-Logik zu arbeiten - d.h. nach jedem neu eingegebenen Element (Ziffer, Operator, Klammer) muß die Vorrangigkeit einzelner Operationen im Gesamtoperationsstring neu überprüft werden. Ob statt einer Ziffer auch eine Variable enthalten ist, ist für die Basis der Operation nebensächlich.
Wenn die Basis steht kann ich auch rechnen und brauch nicht näherungsweise Ergebnisse vergleichen. (Natürlich sollte ich Divisionen durch Null abfangen
)
Aber ist auf jedenfall ein interessantes Projekt. Vielleicht werde ich mich auch mal etwas darin vertiefen.
Wünsche noch viel Erfolg. -
Habt Ihr Ideen zu Punkt 1 und 2?
Ich weiß nicht, warum du für diese Konstruktion ein Listview verwenden möchtest. Das ist doch ganz klassisch ein TreeView. Damit kannst du dann all die gewünschten Einstellungen erzielen. -
Leider ist das nicht möglich. Ich benötige kein Array, sondern die Handles der einzelnen ListViewItems, damit ich sie anschließend auswerten kann.
Und eben dazu verwendest du das Array. Du speicherst die ID's im Array statt in einzelnen Variablen. -
sowas kriegen wir doch auch hin
[autoit]
If $bHunger Then
[/autoit]
$ret = _ModemSetState('Call', 'McDonalds')
If $ret Then Send('Bestell-Liste' & 'Paypalkennung')
$start = TimerInit()
While Not 'Türglocke'
Sleep(60*60*1000)
If TimerDiff($start) > 10*60*60*1000 Then $FeelMe = 'Genervt'
WEnd
Run('auf_Essen_stürz')
EndIf -
Naja, was das unter Skripte zu suchen haben soll...
[autoit]
Es hätte zumindest etwas Reiz, wenn es ein Einzeiler wär:MsgBox(0, 'Ergebnis', InputBox('Eingabe', 'Zahl 1') + InputBox('Eingabe', 'Zahl 2'))
[/autoit]Ich hoffe du hast Verständnis, dass ich das nach OT verschiebe.