Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1300to1304
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Programmzeilen

Programmzeilen
14.03.2013 10:04:40
Alifa
Hallo,
wenn die Rechenoperationen "+4","*7","-6","/8", nicht unbedingt in dieser Reihenfolge, auf eine Zahl(18 bis 100) je einmal angewendet werden sollen, wie kann man das in wenigen Programmzeilen erfassen? Beispiel: E=(((59+4)/8)-6)*7. Das Ergebnis (E) soll positiv, ganzzahlig sein und sich zwischen 10 und 100 befinden. Alle möglichen Permutationen der Rechenoperationen(24) sollen berücksichtigt werden. Danke im Voraus!
Gruß Alifa

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Programmzeilen
14.03.2013 10:52:59
Klaus
Hallo Alifa,
Punkt vor Strich, richtig? Deshalb die Klammern.
Leider habe ich keine Musterdatei von dir, darum auch keine Ahung wie die Ausgabe aussehen soll.
Ich habe mir jetzt mal die Permutationen der Rechenoperationen in einer Hilfstabelle hingeschrieben und für alle Möglichkeiten die Ergebnisse in eine Matrix geschrieben:
https://www.herber.de/bbs/user/84353.xlsm
(drücke "clear" zum leeren, "Formeln" um die Mathe-Formeln zu sehen oder "Ergebniss" um das Ergebniss zu sehen)
Das Ergebnis (E) soll positiv, ganzzahlig sein und sich zwischen 10 und 100 befinden.
Ehm ... Nö? eine gültige Permutation deiner Befehle ist -6 /8 +4 *7, durch ausklammerung von der Punkt-vor-Strich Regel befreit ergibt das für den Input 97 (das ist eine Zahl zwischen 18 und 100):
((((97-6)/8)+4)*7)=107,625
Das ist nunmal so. Du kannst nicht verlangen, dass die Ergebnisse ganzzahlig und zw. 10 und 100 sind, wenn Adam Riese damals etwas anderes herausbekommen hätte!
wie kann man das in wenigen Programmzeilen erfassen?
Mangels Kentniss deiner Ausgabewünsche der Ergebnisse habe ich das ignoriert und relativ viele Programmzeilen und Hilfstabellen verwendet.
Um das zu reduzieren, dürfen die Permutationen FEST im Code stehen oder verändern die sich noch?
Grüße,
Klaus M.vdT.

Anzeige
AW: Programmzeilen
14.03.2013 11:51:26
Alifa
Hallo Klaus,
nein, nicht Punkt vor Strich, sondern nacheinander. Beispiel:52+4=56; 56/8=7; 7*7=49 und 49-6=43.
Natürlich erfüllen nicht alle 24 Permutationen von ("+4","-6","*7","/8")die gestellten Bedingungen. Das erwartet auch Adam Riese nicht! Ich möchte alle plausiblen Ergebnisse.
Gruß Alifa

Meine Datei?
14.03.2013 12:03:42
Klaus
Hallo Alifa,
in meine Datei hast du aber geschaut?
Ich schreibe 5 Absätze mit Musterdatei, du liest nur den ersten Satz und drückst dann "Beitrag absenden"?
Egal jetzt. Erichs Lösung ist eh besser als meine.
Grüße,
Klaus M.vdT.

noch ein Vorschlag
14.03.2013 11:41:23
Erich
Hi Erhard,
dieser Code

Option Explicit
Dim arE
Sub RechenopPerm()
Dim strT As String, ww0 As Long, zz As Long, ww As Double
Dim cc As Long, ze As Long, strE As String
strT = "1234"
ReDim arE(1 To Application.Fact(Len(strT))) As String
Permu strT, "", 0
ze = 1
For ww0 = 18 To 100
For zz = 1 To UBound(arE)
ww = ww0: strE = "((((" & ww0
For cc = 1 To 4
Select Case --Mid(arE(zz), cc, 1)
Case 1: ww = ww - 6: strE = strE & "-6)"
Case 2: ww = ww / 8: strE = strE & "/8)"
Case 3: ww = ww + 4: strE = strE & "+4)"
Case 4: ww = ww * 7: strE = strE & "*7)"
End Select
Next cc
If Int(ww) = ww Then
If ww > 9 And ww  1 Then
For ii = 1 To jj
Permu Left(aa, ii - 1) + Right(aa, jj - ii), bb + Mid(aa, ii, 1), ze
Next ii
Else
ze = ze + 1
arE(ze) = bb & aa
End If
End Sub
produziert das hier:
 ABCD
1ZahlPermFormelErgebnis
2181324((((18-6)+4)/8)*7)14
3181342((((18-6)+4)*7)/8)14
4181432((((18-6)*7)+4)/8)11
5183124((((18+4)-6)/8)*7)14
6183142((((18+4)-6)*7)/8)14
7184123((((18*7)-6)/8)+4)19
8203241((((20+4)/8)*7)-6)15
233983142((((98+4)-6)*7)/8)84
234984123((((98*7)-6)/8)+4)89
2351003214((((100+4)/8)-6)*7)49
2361003241((((100+4)/8)*7)-6)85
2371003421((((100+4)*7)/8)-6)85
2381004321((((100*7)+4)/8)-6)82

Es werden also 237 Lösungen gefunden.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
wunderschön!
14.03.2013 12:06:47
Klaus
Hallo Erich,
dein Code ist wunderschön! Ich muss noch sowas von aufholen mit VBA ...
Grüße,
Klaus M.vdT.

Wenn es bei diesem Thema vordergründig ...
14.03.2013 12:44:24
Luc:-?
…um eine einheitliche Darstellung unterschiedlicher Notationsweisen (also trotzdem gleiche Ergebnisse liefernd) einer Berechnungsfml ginge, wäre es auch für mich interessant gewesen, Erich… ;-)
Aber das ist ein anderes Thema, dessen positive Behandlung ich dir allerdings auch zutraue… ;-)
(Es ginge dabei um automatisierte Feststellung der Gleichartigkeit von Berechnungskennziffern.)
Gruß Luc :-?

AW: noch ein Vorschlag
14.03.2013 14:28:34
Alifa
Hallo Erich,
danke für deinen Beitrag!!! Ich habe es so versucht:

Sub EinfachSo()
Dim a, b, p, f1, t!, z As Byte
Dim d1%, d2%, d3%, d4%, e
Cells.ClearContents
t = Timer
p = Array("-6", "+4", "/8", "*7")
For a = 18 To 100
For d1 = 0 To 3
For d2 = 0 To 3
For d3 = 0 To 3
For d4 = 0 To 3
If p(d1)  p(d2) And p(d1)  p(d3) And p(d1)  p(d4) And p(d2)  p(d3) _
And p(d2)  p(d4) And p(d3)  p(d4) Then
f1 = "(" & "(" & "(" & a & p(d1) & ")" & p(d2) & ")" & p(d3) & ")" & p(d4)
e = Evaluate(f1)
If e > 10 And e 




Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige