Seite 1 von 2
Bitte um Hilfe für Berechnung
Verfasst: Fr, 08.05.2015 07:24
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.....
Re: Bitte um Hilfe für Berechnung
Verfasst: Fr, 08.05.2015 08:53
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
Re: Bitte um Hilfe für Berechnung
Verfasst: Fr, 08.05.2015 09:08
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.
Re: Bitte um Hilfe für Berechnung
Verfasst: Fr, 08.05.2015 23:41
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...
Re: Bitte um Hilfe für Berechnung
Verfasst: Sa, 09.05.2015 00:11
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
Re: Bitte um Hilfe für Berechnung
Verfasst: Sa, 09.05.2015 10:14
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ß
Re: Bitte um Hilfe für Berechnung
Verfasst: Sa, 09.05.2015 12:45
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!
Re: Bitte um Hilfe für Berechnung
Verfasst: Sa, 09.05.2015 13:11
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 ...
Re: Bitte um Hilfe für Berechnung
Verfasst: Sa, 09.05.2015 13:39
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
Der SOLVER spuckt aber das aus
Und wenn ich für 38 ein Ergebnis haben will, dann sagt SOLVER
Ich persönlich würde das nehmen
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?
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
Re: Bitte um Hilfe für Berechnung
Verfasst: So, 10.05.2015 01:00
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
Re: Bitte um Hilfe für Berechnung
Verfasst: So, 10.05.2015 05:44
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
Re: Bitte um Hilfe für Berechnung
Verfasst: So, 10.05.2015 09:35
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 ?
Re: Bitte um Hilfe für Berechnung
Verfasst: So, 10.05.2015 10:02
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.
Re: Bitte um Hilfe für Berechnung
Verfasst: So, 10.05.2015 10:08
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
Re: Bitte um Hilfe für Berechnung
Verfasst: So, 10.05.2015 10:59
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