BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!

DANKE >><< DANKE

> 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

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
MarceIIDavis
Beiträge: 1
Registriert: Fr 19. Mai 2017, 08:45

Calc programmieren

Beitrag von MarceIIDavis » Fr 19. Mai 2017, 09:04

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

kodela
Beiträge: 107
Registriert: Di 22. Jul 2014, 20:08

Re: Calc programmieren

Beitrag von kodela » Mi 21. Jun 2017, 13:10

MarceIIDavis hat geschrieben:
Fr 19. Mai 2017, 09:04
. . . die einzige Kombination, die mir Exel dann in der Tabelle anziegen soll wäre dann . . .
dann frage doch einmal bei "Exel" oder besser bei "Excel".

Helmut_S
Beiträge: 23
Registriert: Fr 7. Jul 2017, 18:01

Re: Calc programmieren

Beitrag von Helmut_S » Fr 7. Jul 2017, 20:38

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
OO_Forum_Kombinationen.ods
(63.56 KiB) 207-mal heruntergeladen
MX-Linux 23, Linux Mint 21.2-64

mikele
Beiträge: 771
Registriert: Sa 23. Jul 2011, 22:09

Re: Calc programmieren

Beitrag von mikele » Sa 8. Jul 2017, 16:53

Hallo,
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))
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.
Gruß,
mikele

Antworten