Makro: Schleife, laufende Variablen ausgeben

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

RoyMamarc
Beiträge: 4
Registriert: Mo, 13.08.2012 12:56

Makro: Schleife, laufende Variablen ausgeben

Beitrag von RoyMamarc »

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
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Makro: Schleife, laufende Variablen ausgeben

Beitrag von Stephan »

ungefähr so:

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
RoyMamarc
Beiträge: 4
Registriert: Mo, 13.08.2012 12:56

Re: Makro: Schleife, laufende Variablen ausgeben

Beitrag von RoyMamarc »

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?
Thomas Mc Kie
******
Beiträge: 921
Registriert: Mo, 12.04.2010 00:37

Re: Makro: Schleife, laufende Variablen ausgeben

Beitrag von Thomas Mc Kie »

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
RoyMamarc
Beiträge: 4
Registriert: Mo, 13.08.2012 12:56

Re: Makro: Schleife, laufende Variablen ausgeben

Beitrag von RoyMamarc »

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?
Thomas Mc Kie
******
Beiträge: 921
Registriert: Mo, 12.04.2010 00:37

Re: Makro: Schleife, laufende Variablen ausgeben

Beitrag von Thomas Mc Kie »

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
RoyMamarc
Beiträge: 4
Registriert: Mo, 13.08.2012 12:56

Re: Makro: Schleife, laufende Variablen ausgeben

Beitrag von RoyMamarc »

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
Antworten