Hallo,
ich bin sehr unerfahren in Sachen Programmierung,etc.
Dennoch wollte ich einfach mal fragen:
Theoretisch geht es darum, dass Calc mir alle möglichen Kombination eines m-großen Zahlenschlosses geben soll.
Dabei soll berücksichtigt werden, dass die Quersumme aller Zahlen (einer möglichen Kombination) gleich n ist.
Zusätzlich soll in der Kombination keine 0 vorkommen, jedoch können eben auch Ziffern < n in der Kombination auftauchen.
Ich frage mich nun, ob einer von euch weiß, wie ich sowas erstellen/programmieren kann.
Eine Tabelle, die von 2 gegebenen Variablen abhängt und außerdem nur die Ergebnisse/Kobinationen auflistet, die auf die weiteren Bedingungen (es darf keine 0 darin vorkommen & Quersumme aller Ziffern der Kombination = n) zutreffen.
Beispiel: m= 3; n=3
die einzige Kombination, die mir Exel dann in der Tabelle anziegen soll wäre dann
(Anzahl der Spalten =m)
Kombination 1: 1 1 1 (<=Quersumme =n)
keine weiteren Kobinationen
Ich hoffe, ich habe mein Thema richtig abgefasst, mache sowas hier gerade zum ersten Mal, weil ich mich einfach damit nicht auskenne.
Viele Grüße
MarcellDavis
BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗
Calc programmieren
Re: Calc programmieren
dann frage doch einmal bei "Exel" oder besser bei "Excel".MarceIIDavis hat geschrieben: ↑Fr 19. Mai 2017, 09:04. . . die einzige Kombination, die mir Exel dann in der Tabelle anziegen soll wäre dann . . .
Re: Calc programmieren
Hallo, es hat etwas gedauert, aber auch ich wusste auf Anhieb hier keine Lösung; da mich die Problemstellung interessierte habe ich etwas gegoogelt. Auf einer Excel-Webseite wurde ich fündig und habe die Formeln für die betreffende Kombination nach Libreoffice-Calc übertragen.
Die angehängte Calc-Tabelle enthält neben den (schwierig zu verstehenden) Formeln auch einen Link zur Webseite
http://www.excel4managers.de/index.php?page=vmz
von der ich alles „abgekupfert“ habe.
Die Tabelle ist vorerst für ein 3-stelliges Zahlenschloss mit 10 Ziffern (0 -9) eingestellt. Sie kann aber beliebig erweitert werden. Dazu musst du dich allerdings ein wenig mit der Arbeitsweise der Formeln vertraut machen.
In einem anderen Excel-Forum findet man auch VBA-Code für Excel. Diesen nach Calc zu übertragen wäre imho aber etwas aufwendiger.
Die von dir gewünschten Bedingungen – keine 0 und Quersumme = n lassen sich bequem mit dem Autofilter einzeln ein- und ausschalten.
Freundliche Grüße, Helmut
Die angehängte Calc-Tabelle enthält neben den (schwierig zu verstehenden) Formeln auch einen Link zur Webseite
http://www.excel4managers.de/index.php?page=vmz
von der ich alles „abgekupfert“ habe.
Die Tabelle ist vorerst für ein 3-stelliges Zahlenschloss mit 10 Ziffern (0 -9) eingestellt. Sie kann aber beliebig erweitert werden. Dazu musst du dich allerdings ein wenig mit der Arbeitsweise der Formeln vertraut machen.
In einem anderen Excel-Forum findet man auch VBA-Code für Excel. Diesen nach Calc zu übertragen wäre imho aber etwas aufwendiger.
Die von dir gewünschten Bedingungen – keine 0 und Quersumme = n lassen sich bequem mit dem Autofilter einzeln ein- und ausschalten.
Freundliche Grüße, Helmut
MX-Linux 23, Linux Mint 21.2-64
Re: Calc programmieren
Hallo,
als python-Script sähe es z. B. so aus:
Dabei wird die Ziffernanzahl aus der Zelle B1 und die Quersumme aus B2 ausgelesen. Die möglichen Kombinationen werden ab Zeile 4 in die Tabelle eingetragen.
als python-Script sähe es z. B. so aus:
Code: Alles auswählen
from itertools import product
def kombinationen():
oDoc = XSCRIPTCONTEXT.getDocument()
oSheet = oDoc.Sheets.getByIndex(0)
ziffern=int(oSheet.getCellByPosition(1,0).Value)
summe=oSheet.getCellByPosition(1,1).Value
pools=product(range(1,10),repeat=ziffern)
result = []
for pool in pools:
if sum(pool)==summe:
result.append(tuple(pool))
oSheet = oDoc.Sheets.getByIndex(0)
oCells = oSheet.getCellRangeByPosition(0,3,ziffern-1,len(result)+2)
oCells.setDataArray(tuple(result))
Gruß,
mikele
mikele