Makro: Schleife, laufende Variablen ausgeben
Moderator: Moderatoren
Makro: Schleife, laufende Variablen ausgeben
Hallo Leute,
wie ihr sehen könnt bin ich neu hier und erfülle womöglich einige Standard-Klischees, dennoch hoffe ich, von euch eien Lösung für mein Problem zu bekommen. Ich bin seit ein paar Tagen dabei ein Rätsel zu lösen, scheitere jedoch an meinen Programmierfähigkeiten und der Tatsache mir entsprechende Informationen zusammenzusuchen. Daher wende ich mich an euch.
Es geht darum folgende Gleichung mit 10 Variablen, welche jeweils ganzzahlig von 0 bis 9 laufen können, zu lösen:
(10000a + 1000b + 100c + 10d + e)*(10000a + 1000b + 100c + 10d + e) = 1000000000f + 100000000g + 10000000*h + 1000000a + 100000e + 10000a + 1000b + 100c + 10i + j
Da ich mich mit Programmiersprachen nicht auskenne, kam mir die Idee ein Makro zu schreiben. Bei meinen bisherigen Versuchen scheiterte ich mit dem Ansatz, während dem Makrodurchlauf die 10 Tabelleneinträge der Variablen mitvariieren zu lassen und anhalten zu lassen wenn passende Werte gefunden wurden (durch die hohe Belastung, die mir bei 10^10 Möglichkeiten durchaus bewusst ist (mit gewissen weiteren Einschränkungen habe ich die Möglichkeiten immerhin auf rund 10^7 verringern können), übersprang es anscheinend die richtigen Werte. In einem zweiten Versuch die Werte in den Tabellen nicht mitzuändern, lief es gefühltermaßen schneller und endete mit einem Teilerfolg. Ich konnte das Makro derart konstruieren, dass ich mir mittels Msgbox anzeigen lassen kann, dass es eine Lösung gibt, allerdings passende Werte nicht angezeigt werden und ich somit weiterhin bei 0 stehe.
Um voran zu kommen zeige ich euch mal das Makro, wie ich es aus meinen bisherigen Versuchen konstruiert habe:
Sub Finde_Kombination()
For a = 0 To 9
For b = 0 To 9
For c = 0 To 9
For d = 0 To 9
For e = 0 To 9
For f = 0 To 9
For g = 0 To 9
For h = 0 To 9
For i = 0 To 9
For j = 0 To 9
Dieser Teil war vorher drin Anfang
With ThisComponent.Sheets().GetByName("Tabelle1")
.getCellByPosition(1, 1).Value = a 'A2
.getCellByPosition(2, 1).Value = b 'B2
.getCellByPosition(3, 1).Value = c 'C2
.getCellByPosition(4, 1).Value = d 'D2
.getCellByPosition(5, 1).Value = e 'E2
.getCellByPosition(6, 1).Value = f 'F2
.getCellByPosition(7, 1).Value = g 'G2
.getCellByPosition(8, 1).Value = h 'H2
.getCellByPosition(9, 1).Value = i 'I2
.getCellByPosition(10, 1).Value = j 'J2
Das war vorher drin Ende
If (10000a + 1000b + 100c + 10d + e)*(10000a + 1000b + 100c + 10d + e) - (1000000000f + 100000000g + 10000000*h + 1000000a + 100000e + 10000a + 1000b + 100c + 10i + j) = 0 Then
Msgbox "Passende Werte gefunden"
Exit Sub
End If
End With
Next j
Next i
Next h
Next g
Next f
Next e
Next d
Next c
Next b
Next a
End Sub
Es ist nicht viel, aber leider bin ich nicht weitergekommen und weiß mir im Moment nicht anders zu helfen als euch zu fragen.
Sofern das Makro richtig geschrieben ist (hier wäre ich über eine Bestätigung oder Verbesserung dankbar), würde ich gerne wissen, wie ich mir die Werte der laufenden Variablen in der Messagebox ausgeben bzw anzeigen lassen kann. Ich hoffe so dann das Problem lösen zu können.
Falls ihr einen schnelleren Weg kennt an die Werte der Variablen zu kommen, wäre ich euch dankbar mir da weiterhelfen zu können (im Optimalfall ein fertiges Script oder die gesuchten Werte).
Ich hoffe ihr könnt mir weiterhelfen,
lg Roy
wie ihr sehen könnt bin ich neu hier und erfülle womöglich einige Standard-Klischees, dennoch hoffe ich, von euch eien Lösung für mein Problem zu bekommen. Ich bin seit ein paar Tagen dabei ein Rätsel zu lösen, scheitere jedoch an meinen Programmierfähigkeiten und der Tatsache mir entsprechende Informationen zusammenzusuchen. Daher wende ich mich an euch.
Es geht darum folgende Gleichung mit 10 Variablen, welche jeweils ganzzahlig von 0 bis 9 laufen können, zu lösen:
(10000a + 1000b + 100c + 10d + e)*(10000a + 1000b + 100c + 10d + e) = 1000000000f + 100000000g + 10000000*h + 1000000a + 100000e + 10000a + 1000b + 100c + 10i + j
Da ich mich mit Programmiersprachen nicht auskenne, kam mir die Idee ein Makro zu schreiben. Bei meinen bisherigen Versuchen scheiterte ich mit dem Ansatz, während dem Makrodurchlauf die 10 Tabelleneinträge der Variablen mitvariieren zu lassen und anhalten zu lassen wenn passende Werte gefunden wurden (durch die hohe Belastung, die mir bei 10^10 Möglichkeiten durchaus bewusst ist (mit gewissen weiteren Einschränkungen habe ich die Möglichkeiten immerhin auf rund 10^7 verringern können), übersprang es anscheinend die richtigen Werte. In einem zweiten Versuch die Werte in den Tabellen nicht mitzuändern, lief es gefühltermaßen schneller und endete mit einem Teilerfolg. Ich konnte das Makro derart konstruieren, dass ich mir mittels Msgbox anzeigen lassen kann, dass es eine Lösung gibt, allerdings passende Werte nicht angezeigt werden und ich somit weiterhin bei 0 stehe.
Um voran zu kommen zeige ich euch mal das Makro, wie ich es aus meinen bisherigen Versuchen konstruiert habe:
Sub Finde_Kombination()
For a = 0 To 9
For b = 0 To 9
For c = 0 To 9
For d = 0 To 9
For e = 0 To 9
For f = 0 To 9
For g = 0 To 9
For h = 0 To 9
For i = 0 To 9
For j = 0 To 9
Dieser Teil war vorher drin Anfang
With ThisComponent.Sheets().GetByName("Tabelle1")
.getCellByPosition(1, 1).Value = a 'A2
.getCellByPosition(2, 1).Value = b 'B2
.getCellByPosition(3, 1).Value = c 'C2
.getCellByPosition(4, 1).Value = d 'D2
.getCellByPosition(5, 1).Value = e 'E2
.getCellByPosition(6, 1).Value = f 'F2
.getCellByPosition(7, 1).Value = g 'G2
.getCellByPosition(8, 1).Value = h 'H2
.getCellByPosition(9, 1).Value = i 'I2
.getCellByPosition(10, 1).Value = j 'J2
Das war vorher drin Ende
If (10000a + 1000b + 100c + 10d + e)*(10000a + 1000b + 100c + 10d + e) - (1000000000f + 100000000g + 10000000*h + 1000000a + 100000e + 10000a + 1000b + 100c + 10i + j) = 0 Then
Msgbox "Passende Werte gefunden"
Exit Sub
End If
End With
Next j
Next i
Next h
Next g
Next f
Next e
Next d
Next c
Next b
Next a
End Sub
Es ist nicht viel, aber leider bin ich nicht weitergekommen und weiß mir im Moment nicht anders zu helfen als euch zu fragen.
Sofern das Makro richtig geschrieben ist (hier wäre ich über eine Bestätigung oder Verbesserung dankbar), würde ich gerne wissen, wie ich mir die Werte der laufenden Variablen in der Messagebox ausgeben bzw anzeigen lassen kann. Ich hoffe so dann das Problem lösen zu können.
Falls ihr einen schnelleren Weg kennt an die Werte der Variablen zu kommen, wäre ich euch dankbar mir da weiterhelfen zu können (im Optimalfall ein fertiges Script oder die gesuchten Werte).
Ich hoffe ihr könnt mir weiterhelfen,
lg Roy
Re: Makro: Schleife, laufende Variablen ausgeben
ungefähr so:
Gruß
Stephan
Code: Alles auswählen
Sub Main
For a = 0 To 9
For b = 0 To 9
For c = 0 To 9
For d = 0 To 9
For e = 0 To 9
For f = 0 To 9
For g = 0 To 9
For h = 0 To 9
For i = 0 To 9
For j = 0 To 9
If (10000*a + 1000*b + 100*c + 10*d + e)*(10000*a + 1000*b + 100*c + 10*d + e) - (1000000000*f + 100000000*g + 10000000*h + 1000000*a + 100000*e + 10000*a + 1000*b + 100*c + 10*i + j) = 0 AND a+b+c+d+e+f+g+h+i+j > 0 Then
tmp = "a = " & a & CHR(13) & _
"b = " & b & CHR(13) & _
"c = " & c & CHR(13) & _
"d = " & d & CHR(13) & _
"e = " & e & CHR(13) & _
"f = " & f & CHR(13) & _
"g = " & g & CHR(13) & _
"h = " & h & CHR(13) & _
"i = " & i & CHR(13) & _
"j = " & j & CHR(13)
Msgbox (tmp, 0, "Passende Werte gefunden")
Exit Sub
End If
Next j
Next i
Next h
Next g
Next f
Next e
Next d
Next c
Next b
Next a
Msgbox "Keine passenden Werte gefunden"
End Sub
Gruß
Stephan
Re: Makro: Schleife, laufende Variablen ausgeben
Vielen Dank für die schnelle Antwort! Hab dann mal das Makro gestartet ^^ , bei 820 mio Möglichkeiten werd ich aber evtl lange warten müssen, oder? Geht das Finden einer Lösung mit anderen Scripten schneller?
-
- ******
- Beiträge: 921
- Registriert: Mo, 12.04.2010 00:37
Re: Makro: Schleife, laufende Variablen ausgeben
Jetzt ist mir dazu doch noch was eingefallen.
Eventuell lässt sich sowas mit Matlab (teuer, allenfalls asl Studentenversion günstig zu beziehen) bzw. Scilab besser (schneller) berechnen.
Dort kannst du auch mit Matrizen rechnen (und dazu z.B. deine Variablen als Vektoren einfügen) und dir dann eine Ergebnismatrix berechnen lassen.
Grüße
Thomas
Eventuell lässt sich sowas mit Matlab (teuer, allenfalls asl Studentenversion günstig zu beziehen) bzw. Scilab besser (schneller) berechnen.
Dort kannst du auch mit Matrizen rechnen (und dazu z.B. deine Variablen als Vektoren einfügen) und dir dann eine Ergebnismatrix berechnen lassen.
Grüße
Thomas
Re: Makro: Schleife, laufende Variablen ausgeben
Ich habe zwar Zugriff auf Mathlab, allerdings kenne ich mich dort überhaupt nicht aus und weiß nicht wie die Befehle abzuändern sind. Die Vektorschreibweise klingt nach ner guten Idee, aber das wird wohl noch komplizierter in der Ausführung sein. Oder kennst du dich da evtl so weit aus, dass du den Code anpassen könntest Thomas?
-
- ******
- Beiträge: 921
- Registriert: Mo, 12.04.2010 00:37
Re: Makro: Schleife, laufende Variablen ausgeben
Nicht mehr, hab auch keine Matlab-Lizenz mehr (da nicht mehr Student). Von der Aufgabenstellung her könntest du dir aber leicht in einem Matlab-Forum helfen lassen, jedoch solltest du dir vorher sicher einige Grundkenntnisse zulegen (Vektor und Matrizenrechnung sollte man auch verstehen).
Grüße
Thomas
Grüße
Thomas
Re: Makro: Schleife, laufende Variablen ausgeben
So, es ist doch nicht nötig. Das Makro war dann doch noch erfolgreich! Ich möchte mich nochmals herzlich bei euch bedanken!
lg Roy
lg Roy