Bitte um Hilfe für Berechnung

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

2004
Beiträge: 7
Registriert: Fr, 08.05.2015 07:06

Bitte um Hilfe für Berechnung

Beitrag von 2004 »

Hallo Leute,

Ich bin nicht so fit in (für mich) komplizierteren Berechnungen.

Ich möchte folgendes in einer Tabelle ausgeben lassen:

Ich habe einige feste Werte, z.B. 15,6 11,8 7,8 5,6 usw.

Nun will ich das mir OO berechnet wie ich anhand dieser Werte einen neuen Wert vorgebe und mir angezeigt wird welche dieser vorgegebenen festen Werte dafür benutzt wurde um auf die Summe x zu kommen.

Beispiel:

Ich möchte den Wert 39,0 haben. Dieser setzt sich dann aus 2x 15,6 und 1x 7,8 zusammen.
Also soll die Tabelle so aussehen:

39,0 ---> 15,6 15,6 7,8

Auch will ich dass bei mehreren möglichen Kombinationen immer die höchsten Werte Vorrang haben.

Ich hoffe ich habe das einigermaßen verständlich erklärt und hoffe auf eine Lösung von Euch.

Schonmal Danke.....
hylli
*******
Beiträge: 1672
Registriert: Mi, 22.02.2006 19:37

Re: Bitte um Hilfe für Berechnung

Beitrag von hylli »

Ich habe heute erstmalig (!!!) den Solver benutzt, da ich diese Aufgabenstellung bis dato selbst noch nicht hatte!

Mir war jedoch klar, dass der Solver wohl die Lösung dafür sein sollte, also habe ich ein wenig experimentiert, und kann anbei meine Lösung für Dein Problem posten.

Hylli
Anleitung_OpenOffice_Calc_Verwendung_Solver.odt
(143.69 KiB) 81-mal heruntergeladen
Ein Dankeschön für eine Lösung tut nicht weh!
Wer eine Lösung selbst findet, sollte die für die Nachwelt auch posten!

Geschäftlich: LibreOffice 6.0.x ("Still") unter Windows 10 64bit
Privat: LibreOffice 6.0.x ("Still") unter Linux Mint 19.x Cinnamon 64bit
echo
*******
Beiträge: 1034
Registriert: Fr, 14.11.2008 15:27
Wohnort: BRA - Nds

Re: Bitte um Hilfe für Berechnung

Beitrag von echo »

Hallo zusammen,
finde die Version von @hylli auch recht interessant.

Ich hatte verschiedene Geldbeträge auszuzahlen und dafür eine kleine Datei erstellt, die mir berechnet wie viele Scheine und Münzen benötigt werden.
Was du beschreibt, ist im Prinzip ja das gleiche, nur mit anderen Werten, siehe Anhang.

Gruß Holger

EDIT:
39,0 ---> 15,6 15,6 7,8
Ich habe den Anhang noch einmal angepasst und wie gewünscht eine Liste der Werte erzeugt.
Dateianhänge
Unbenannt 1.ods
(12.82 KiB) 47-mal heruntergeladen
2004
Beiträge: 7
Registriert: Fr, 08.05.2015 07:06

Re: Bitte um Hilfe für Berechnung

Beitrag von 2004 »

Danke für die schnellen Antworten und die Mühe, die Ihr Euch gemacht habt.

Ich hab mal Deine Datei noch etwas um einige Werte erweitert @echo.

Aber irgendwie wird mir nicht das ausgerechnet was ich brauche.

Wenn ich nun z.B. in A4 den Wert 5,3 zum errechnen eingebe, sollte eigentlich die Ausgabe kommen:

1x 2,9 und 1x 2,4

was dann 5,3 ergibt.

Aber ausgegeben wird 5 !?

Und das wäre falsch.

Also ich will das immer die genaue! Kombination ausgegeben wird um auf die Summe x zu kommen.

Danke nochmal...
Dateianhänge
Stahlauswerfer.ods
(12.86 KiB) 44-mal heruntergeladen
echo
*******
Beiträge: 1034
Registriert: Fr, 14.11.2008 15:27
Wohnort: BRA - Nds

Re: Bitte um Hilfe für Berechnung

Beitrag von echo »

Auch will ich dass bei mehreren möglichen Kombinationen immer die höchsten Werte Vorrang haben
Also ich will das immer die genaue! Kombination ausgegeben wird um auf die Summe x zu kommen.
Hallo,
die Formeln suchen dem höchsten Wert der kleiner oder gleich deinem Wert ist.
Anschließend wird mit dem Rest der nächste Wert gesucht usw.

Jetzt soll die komplette Reihe nach dem bestmöglichen Kombination durchsucht werden.
In deinem Beispiel gibt es 9 Werte die kleiner 5,30 sind.
Es lässt sich sicherlich ausrechnen wievielte Tausend Möglichkeiten es da gibt.

Per Formel ist das meines Erachtens nicht möglich. Ich weiß wenigstens nicht wie.

In den Formeln ist zwar auch noch ein Fehler:
es steht nicht immer der Bereich der Liste $D$7:$D$10 in den Formeln drin,
ist hier aber vermutlich auch nicht mehr relevant.

Gruß Holger
2004
Beiträge: 7
Registriert: Fr, 08.05.2015 07:06

Re: Bitte um Hilfe für Berechnung

Beitrag von 2004 »

Hallo,


Ja, ich will die genaue Kombination, wobei der höchste Wert immer Vorrang haben soll!!!

Und genau deshalb gibt es für mich keine tausend Möglichkeiten, für OO ja leider grundsätzlich schon.

Und da das so kompliziert ist hab ich ja auch Hilfe gesucht.

Trotzdem tausend Dank.

Vielleicht kann mir ja noch irgendwer helfen da auf ne Lösung zu kommen.

Gruß
Karolus
********
Beiträge: 7524
Registriert: Mo, 02.01.2006 19:48

Re: Bitte um Hilfe für Berechnung

Beitrag von Karolus »

Hallo
...Vielleicht kann mir ja noch irgendwer helfen da auf ne Lösung zu kommen.
Hylli hat dir ja bereits den besten Lösungsanstz genannt, und das zusammen mit einer ausgiebigen Erklärung -- leider möchtest du diese anscheinend ignorieren.

In der angehängten Datei hab ich daraus die (einzig mögliche Kombination für den Wert 5,3 ) entwickeln lassen, nutz den Ansatz oder lass es bleiben!
Stahlauswerfer.ods
(33.67 KiB) 35-mal heruntergeladen
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
mikeleb
*******
Beiträge: 1412
Registriert: Fr, 09.12.2011 16:50

Re: Bitte um Hilfe für Berechnung

Beitrag von mikeleb »

Hallo,
Und genau deshalb gibt es für mich keine tausend Möglichkeiten, für OO ja leider grundsätzlich schon.
Deine Aufgabenstellung kann auch dazu führen, dass es gar keine Lösung gibt. Aufgrund der Einschränkung auf natürliche Zahlen gibt es im Lösungsfall endlich viele Lösungen (das können dann auch ein paar Tausend sein). Wenn dir der Solver nicht die geeignete Lösung ist, bleibt
a) ein aufwändiges Probierverfahren (eine mögliche Programmieraufgabe)
b) die Umsetzung der Lösung diophantischer Gleichungen (siehe die entsprechende Theorie)
Beides wird bei weitem nicht einfacher ...
Gruß,
mikeleb
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: Bitte um Hilfe für Berechnung

Beitrag von balu »

Hallo!

@Karolus
Die Sache mit dem SOLVER ist so ein Ding für sich selber.

Bei 5,3 gibts keine Probleme.
Anders siehts aber bei 39 aus. Da will 2004 dies haben

Code: Alles auswählen

39,0 ---> 15,6 15,6 7,8
Der SOLVER spuckt aber das aus

Code: Alles auswählen

39,0 ---> 11,8 11,8 7,8 4,7 2,9
Und wenn ich für 38 ein Ergebnis haben will, dann sagt SOLVER

Code: Alles auswählen

38,0 ---> 11,8 11,8 7,8 4,2 2,4
Ich persönlich würde das nehmen

Code: Alles auswählen

38,0 ---> 15,6 15,6 3,9 2,9 
Mit anderen Worten; Der SOLVER gibt wohl nicht das aus was man gerne haben möchtwe, bzw sich wünscht. Ich weiß jetzt nur nicht ob das eine Einstellungssache ist, oder ob das generell so ist. Mir fehlt halt das nötige Wissen und die Erfahrung mit dem SOLVER.

Das war jetzt also nix gegen dich, oder gegen den SOLVER:


@2004
Warum muss bei 39 das hier dabei rauskommen?

Code: Alles auswählen

39,0 ---> 15,6 15,6 7,8
Mir ist der Grund für die Vorgabe einfach noch nicht verständlich. Wie Du eben gesehen hast, gibt es laut SOLVER auch noch eine andere möglichkeit. Klär uns mal büdda schön auf.


Erst hatte ich ja noch gedacht das es sich um Legierungsbestandteile für Stahl handelt, weil deine Beispieldatei "Stahlauswerfer" heißt. Jedoch ist mir momentan kein Material bekannt was ein spezifisches Gerwicht von 11,8 oder 15,6 hat. Blei (Pb) hätte 11,3 und Tantal (Ta) 16,6. Kann aber auch sein das mein Tabellenbuch nicht alle Materialien aufgelistet hat.



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
2004
Beiträge: 7
Registriert: Fr, 08.05.2015 07:06

Re: Bitte um Hilfe für Berechnung

Beitrag von 2004 »

Hallo,

die Berechnung soll für Stahlauswerfer sein.
Das sind Ringe aus Stahl, die als Zwischenstücke im Aufbau auf einer Welle eingesetzt werden.
Dies passiert in einem Schneidvorgang bei dem Metallband in einzelne Streifen geschnitten wird.
Die Werte sind die Abmessungen (Breite in mm) der jeweiligen Stahlauswerfer.
Um diese nun für bestimmte Abmessungen zusammenzustellen benötige ich als Hilfe diese Berechnung.

Hier mal ein Link einer Firma die sowas herstellt:

http://www.tkmgroup.com/de/metall-kaltbandbereich.php
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Bitte um Hilfe für Berechnung

Beitrag von F3K Total »

Hi,
mikeleb hat geschrieben:a) ein aufwändiges Probierverfahren (eine mögliche Programmieraufgabe)
So aufwendig ist das gar nicht, anbei eine Datei mit dieser FUNCTION:

Code: Alles auswählen

FUNCTION F_SOLVER(WERTE,ZIELWERT)
    oRangeAnzahl = Thiscomponent.NamedRanges.getByName("ANZAHL").ReferredCells
    Anzahl = oRangeAnzahl.data
    s = 1
    100:
    Rest = Zielwert
    for  i = 0 to uBound(Anzahl)
        Anzahl(i)(0) = 0
    next i
    for i = s to UBOUND(WERTE)
        if Rest/Werte(i,1) > 0 then
            Anzahl(i-1)(0) = INT(Rest/Werte(i,1))
            Rest = Rest - Werte(i,1)*Anzahl(i-1)(0)
        endif
    next i
    if Rest > 0.00000001 then
         s = s + 1
         if s > UBOUND(WERTE) then 
             for  i = 0 to uBound(Anzahl)
                 Anzahl(i)(0) = 0
             next i
             oRangeAnzahl.Data = Anzahl
             F_SOLVER = "keine Lösung"
             exit function
         endif
         goto 100
    endif
    oRangeAnzahl.Data = Anzahl 
    F_SOLVER = "OK"
End FUNCTION
Die FUNCTION habe ich in Zelle E2 eingetragen.
EInfach die Breite in das gelbe Feld (D2) eingeben.
Gruß R
Dateianhänge
Auswerfer_berechnen.ods
(14.39 KiB) 34-mal heruntergeladen
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Bitte um Hilfe für Berechnung

Beitrag von clag »

Hallo F3K Total,

dein Ansatz sieht erstmal chic aus, die Ergebnisse sind wohl noch nicht optimal

zB
66 = keine Lösung
obwohl
66 = 12*4,8+2*4,2 oder auch die doppelte "33" Lösung ?

edit
klemmt scheinbar bei manchen Vielfachem einer kleineren Lösung 9,5 ja 19 nein ?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
2004
Beiträge: 7
Registriert: Fr, 08.05.2015 07:06

Re: Bitte um Hilfe für Berechnung

Beitrag von 2004 »

Gast hat geschrieben:Hallo,

Ich würde mit der Zeit eine Liste erstellen, mit den per Hand berechneten Werten , die dann mit SVERWEIS() abgefragt werden kann.


Gruß Gast

Hallo,

ja so wie es aussieht wäre das wohl die beste Lösung. Ich bräuchte dann eine Liste von 5,3 bis 60,0 in 10tel-Schritten.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: Bitte um Hilfe für Berechnung

Beitrag von clag »

Hallo 2004,

welche Anzahl und Abmessungen an Distanzringen und stehen denn zur Verfügung?
und welche min - max Abstände müssen einstellbar sein Schritweite ist 1/10mm!?

Kannst du das mal konkretisieren
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Bitte um Hilfe für Berechnung

Beitrag von F3K Total »

Moin clag,
clag hat geschrieben:klemmt scheinbar bei manchen Vielfachem einer kleineren Lösung 9,5 ja 19 nein ?
Da hast du absolut Recht. Der Algorithmus suchte immer den größtmöglichen ganzzahligen Wert, der hineinpasst, man müsste, wenn kein Erfolg, hier wieder herunterzählen. Das habe ich in der angehängten Version gemacht, und siehe da, es gibt sogar eine bessere Lösung für 66:
10 x 5,6 & 2 x 5.0

Code: Alles auswählen

FUNCTION F_SOLVER(WERTE,ZIELWERT)
    Dim Q as double
    oRangeAnzahl = Thiscomponent.NamedRanges.getByName("ANZAHL").ReferredCells
    Anzahl = oRangeAnzahl.data
    nCounter = 0
    s = 1
    100:
    Rest = Zielwert
    for  i = 0 to uBound(Anzahl)
        Anzahl(i)(0) = 0
    next i
    for i = s to UBOUND(WERTE)
        if i = s then ndelta = nCounter else nDelta = 0
        Q = INT(Rest/Werte(i,1)) - nDelta
        if Q > 0 then
            Anzahl(i-1)(0) = Q  
            Rest = Rest - (Werte(i,1)*Anzahl(i-1)(0))
        endif
    next i
    if Rest > 0.0000001 then
         s = s + 1
         if s > UBOUND(WERTE) then 
             nCounter = nCounter + 1
             if nCounter < Q Then 
                 s = 1
                 goto 100
             endif
             for  i = 0 to uBound(Anzahl)
                 Anzahl(i)(0) = 0
             next i
             oRangeAnzahl.Data = Anzahl
             F_SOLVER = "keine Lösung"
             exit function
         endif
         goto 100
    endif
    oRangeAnzahl.Data = Anzahl 
    F_SOLVER = "OK"
End FUNCTION
Gruß R
Dateianhänge
Auswerfer_berechnen.ods
(14.27 KiB) 37-mal heruntergeladen
Antworten