Hier kann jeder machen was er will - ob er will oder nicht!
ALGORITHMEN - Teil XXV: Das Fleisch ist willig, aber der Geist ist schwach...
-
p. specht -
21. Februar 2020 um 03:02 -
Geschlossen
-
-
-
Abt. ´ISAAC´- ein Crypto-geeigneter Pseudo-Zufallsgenerator
=======================================
Auf den Seiten von ´Rosetta Code´ werden Standardaufgaben der Informatik in den unterschiedlichsten Programmiersprachen gelöst. Anbei eine Umsetzung der sog. ISAAC-Cypher in XProfan 11.2a-free, in Anlehnung an eine PASCAL-Musterlösung in Public Domain. Dazu musste allerdings der mod-Operator von XProfan durch eine Floating-Point-Funktion ersetzt werden.
GrussCode
Alles anzeigenWindowTitle "PROGRAM RosettaISAAC V2.2-beta" '(PD) Public Domain, transposed to XProfan-11.2a in 'Feb. 2020 by P.Specht(AT)gmx.at, Vienna/Austria/EU '----------------------------------------------------------------------------- '[The Improved] Random Number Generator ISAAC (C) by Bob Jenkins, ' March 1996, Public Domain, C-Source Intro: "You may use this code in any way ' you wish, and it is free. No warrantee." '----------------------------------------------------------------------------- '[Rosetta Text:] ISAAC stands for "Indirection, Shift, Accumulate, Add, and Count" 'which are the principal bitwise operations employed. To date - after 24 years of 'existence ISAAC has not been broken (unless GCHQ or NSA did it, but dont tell us). 'ISAAC thus deserves a lot more attention than it has received, and it would be 'salutary to see it more universally implemented. '----------------------------------------------------------------------------- GOTO "FloatMaths" // uses MODf() on uInt instead of XProfan's MOD Operator START: CLS Var iMode&=0 Def &iEncrypt 0 Def &iDecrypt 1 Def &true 1 Def &false 0 // TASK globals Var msg$ = "a Top Secret secret" // Recommended max 4095 Byte var key$ = "this is my secret key" // Max. 256 Byte are used // Main Globals var xctx$ = "" // XOR ciphertext var mctx$ = "" // MOD ciphertext var xptx$ = "" // XOR decryption (plaintext) var mptx$ = "" // MOD decryption (plaintext) // ISAAC vars have to be globals in XProfan: // external results declare randrsl&[255] declare randcnt& // internal state declare mm&[255] declare aa&,bb&,cc& // inter proc declare a&,b&,c&,d&,e&,f&,g&,h& PROC ISAAC // PSEUDO RANDOM GENERATOR 'If the initial internal state is all zero, after ten calls the values of 'aa, bb, and cc in hexadecimal will be d4d3f473, 902c0691, and 0000000a. declare i&,x&,y& inc cc& // cc just gets incremented once per 256 results inc bb&,cc& // then combined with bb Whileloop 0,255:i&=&Loop x&=mm&[i&] SELECT (i& MOD 4) caseof 0:aa&=XOR(aa&,(aa&<<13)) caseof 1:aa&=XOR(aa&,(aa&>>6)) caseof 2:aa&=XOR(aa&,(aa&<<2)) caseof 3:aa&=XOR(aa&,(aa&>>16)) ENDSELECT aa&= mm&[(i&+128) MOD 256]+aa& y&= mm&[(x&>>2) MOD 256]+aa&+bb& mm&[i&]=y& bb&=mm&[(y&>>10) MOD 256]+x& randrsl&[i&]=bb& EndWhile // Additional: prepare to use the first set of results randcnt&=0 EndProc Proc Mix a&=XOR(a&,(b&<<11)):inc d&,a&:inc b&,c& b&=XOR(b&,(c&>>2)):inc e&,b&:inc c&,d& c&=XOR(c&,(d&<<8)):inc f&,c&:inc d&,e& d&=XOR(d&,(e&>>16)):inc g&,d&:inc e&,f& e&=XOR(e&,(f&<<10)):inc h&,e&:inc f&,g& f&=XOR(f&,(g&>>4)):inc a&,f&:inc g&,h& g&=XOR(g&,(h&<<8)):inc b&,g&:inc h&,a& h&=XOR(h&,(a&>>9)):inc c&,h&:inc a&,b& Endproc Proc iRandInit :parameters flag& declare i& ':init a,b,c,d,e,f,g,h 'In XProfan globaly! clear aa&,bb&,cc& a&=$9e3779b9 // the golden ratio b&=a&:c&=a&:d&=a&:e&=a&:f&=a&:g&=a&:h&=a& Whileloop 0,3 // scramble it Mix Endwhile i&=0 REPEAT // fill in mm[] IF flag& // use all the information in the seed a&=a&+randrsl&[i&] b&=b&+randrsl&[i&+1] c&=c&+randrsl&[i&+2] d&=d&+randrsl&[i&+3] e&=e&+randrsl&[i&+4] f&=f&+randrsl&[i&+5] g&=g&+randrsl&[i&+6] h&=h&+randrsl&[i&+7] ENDIF Mix 'mm[] using a-h mm&[i&]=a& mm&[i&+1]=b& mm&[i&+2]=c& mm&[i&+3]=d& mm&[i&+4]=e& mm&[i&+5]=f& mm&[i&+6]=g& mm&[i&+7]=h& inc i&,8 UNTIL i& > 255 IF flag& // do a second pass to make all of the seed affect all of mm i&=0 REPEAT a&=a&+mm&[i&] b&=b&+mm&[i&+1] c&=c&+mm&[i&+2] d&=d&+mm&[i&+3] e&=e&+mm&[i&+4] f&=f&+mm&[i&+5] g&=g&+mm&[i&+6] h&=h&+mm&[i&+7] Mix() 'mm[] mm&[i&]=a& mm&[i&+1]=b& mm&[i&+2]=c& mm&[i&+3]=d& mm&[i&+4]=e& mm&[i&+5]=f& mm&[i&+6]=g& mm&[i&+7]=h& inc i&,8 UNTIL i& > 255 ENDif ISAAC // fill in the first set of results randcnt&=0 // prepare to use the first set of results Endproc Proc iSeed :parameters seed$,flag& // Seed ISAAC with a given string. // The string can be any size. The first 256 values will be used. declare i&,m& mm&[]=0 m&=Len(seed$)-1 Whileloop 0,255:i&=&Loop // in case seed has less than 256 elements If i&>m& randrsl&[i&]=0 // Pascal strings are 1-based, like in XProfan Else randrsl&[i&]=Ord(mid$(seed$,i&+1,1)) Endif Endwhile // initialize ISAAC with seed iRandInit(flag&) EndProc Proc iRandom // Get a random 32-bit value 0..MAXINT declare iRandom& iRandom& = randrsl&[randcnt&] inc randcnt& IF randcnt&>255 ISAAC randcnt&=0 ENDif return if(iRandom&<0,iRandom&+2^32,iRandom&*1)'=float Endproc Proc iRandA // Get a random character in printable ASCII range return intf(modf(iRandom(),95)+32) ENDproc // Convert an ASCII string to a hexadecimal string Proc Ascii2Hex :parameters s$ Declare i&,Ascii2Hex$ Ascii2Hex$="" Whileloop len(s$):i&=&Loop Ascii2Hex$=Ascii2Hex$+Right$("0"+hex$(Ord(mid$(s$,i&,1))),2) Endwhile return Ascii2Hex$ EndProc // Ascii2Hex Proc Vernam :parameters msg$ // XOR encrypt on random stream. Output: ASCII string Declare i&,vernam$ Vernam$="" whileloop len(msg$):i&=&Loop Vernam$=Vernam$+Chr$(xor(iRandA(),Ord(mid$(msg$,i&,1)))) endwhile return vernam$ Endproc // Vernam Proc LetterNum :parameters letter$,start$ // Get position of the letter in chosen alphabet return Ord(letter$) - Ord(start$) Endproc // LetterNum // Caesar-shift a character <shift> places: Generalized Vigenere Proc Caesar :parameters m&,ch$,shift&,modulo&,start$ Declare n& Case m& = &iDecrypt: shift& = -shift& n& = LetterNum(ch$, start$) + shift& n& = n& MOD modulo& Case n&<0:n& = n&+modulo& return Chr$(Ord(start$) + n&) Endproc // Caesar // Vigenere MOD 95 encryption & decryption. Output: ASCII string Proc Vigenere :parameters msg$,m& Declare i&,Vigenere$ Vigenere$ = "" whileloop len(msg$):i&=&Loop Vigenere$ = Vigenere$ + Caesar(m&, mid$(msg$,i&,1), iRandA(), 95, " ") endwhile return Vigenere$ Endproc // Vigenere BEGIN: 'Main Program // 1) seed ISAAC with the key iSeed(key$, &true) // 2) Encryption // a) XOR (Vernam) xctx$ = Vernam(msg$) // b) MOD (Vigenere) mctx$ = Vigenere(msg$, &iEncrypt) // 3) Decryption iSeed(key$, &true) // key sentence, 0=totally new 1=useAllpreviouseRandoms // a) XOR (Vernam) xptx$ = Vernam(xctx$) // b) MOD (Vigenere) mptx$ = Vigenere(mctx$, &iDecrypt) // program output Print print "Message: ", msg$ print "Key : ", key$ Print "XOR : ", Ascii2Hex(xctx$) Print "MOD : ", Ascii2Hex(mctx$) Print "XOR dcr: ", xptx$ Print "MOD dcr: ", mptx$ 'Check Output: 'Message: a Top Secret secret 'Key : this is my secret key 'XOR : 1C0636190B1260233B35125F1E1D0E2F4C5422 'MOD : 734270227D36772A783B4F2A5F206266236978 'XOR dcr: a Top Secret secret 'MOD dcr: a Top Secret secret waitinput END FloatMaths: proc sgn :parameters x! ' Signum-Funktion: -1,0,+1 return (x!>0)-(x!<0) endproc proc floor :parameters x! ' Gaussklammer-Funktion case abs(x!)<(10^-35):return 0 case x!>0:return intf(x!) return (abs(x!-intf(x!)) < 10^-35)-intf(abs(x!-1)) endproc proc ceil :parameters x! ' Ceiling-Funktion return -1*floor(-1*x!) endproc proc modf :parameters x!,y! ' Q: https://de.wikipedia.org/wiki/Modulo case abs(x!)<10^-35:return 0 case abs(y!)<10^-35:return x! return sgn(y!)*abs(x!-y!*floor(x!/y!)) endproc proc remn :parameters x!,y! ' Q: https://de.wikipedia.org/wiki/Modulo = Remnant() case abs(x!)<(10^-35):return 0 case abs(y!)<(10^-35):return x! return sgn(x!)*abs(x!-y!*floor(x!/y!)) endproc proc IsNeg :parameters x! return byte(Addr(x!),7)&%10000000>>7 endproc proc frac :parameters x! var s!=sgn(x!) x!=abs(x!) x!=x!-round(x!,0) case x!<0:x!=1+x! return s!*x! endproc proc intf :parameters x! var s!=sgn(x!) x!=abs(x!) x!=x!-frac(x!) return s!*x! endproc GOTO "START" ProgEnd
-
Code
Alles anzeigenWindowTitle "Experimentelle Float-Integer- und Fraction-Funktion" CLS:font 1:set("DECIMALS",15):declare x! Repeat print "\n x = ";:input x! print " ";format$("%g",INTf(x!)) print " ";format$("%g",FRAC(x!)) :if %csrlin>20:waitinput:cls:endif Until 0 Proc INTf :parameters x! var dmls&=get("DECIMALS"):set("DECIMALS",17) var x$=str$(x!):set("DECIMALS",dmls&) return val(substr$(x$,1,".")) Endproc Proc FRAC :parameters x! var dmls&=get("DECIMALS"):set("DECIMALS",17) var x$=str$(x!):set("DECIMALS",dmls&) return x!-val(substr$(x$,1,".")) endproc
-
Abt. FGS-Rätsel 01
============
Die Ziffern p, q, r, s sind alle voneinander verschieden, die Ziffer Null spielt dabei nicht mit.
Gesucht ist der kleinstmögliche Wert x der Formel x = p / q + r / s . -
FGS-Rätsel 01
=========
Beim bloßen Drüber schauen würde ich sagen : 4Spoiler anzeigen
x = 2/1 + 6/3
x = 4 -
H.Brill: Für den Fall, daß Ganzzahligkeit gefordert ist, stimmt die Antwort. Und wie ist das, wenn x auch reell (bzw. Float) sein darf?
-
1/8 + 2/9 = 0,342222
Gruß Volkmar
-
H.Brill: Für den Fall, daß Ganzzahligkeit gefordert ist, stimmt die Antwort. Und wie ist das, wenn x auch reell (bzw. Float) sein darf?
Kommt auf die Anzahl der Nachkommastellen an.
Meinst du 2stellig ? -
Zur Genauigkeit von Float-Variablen: In den meisten Programmiersprachen werden bei Double precision floating point = 11+53 bit Darstellung in den 8 Byte einer Float-Variablen, umgerechnet auf Dezimalstellen ungefähr 15-16, selten 17 Stellen genau dargestellt. Leider gehen neben Kommensurabilitätsfehlern (prinzipiellen Unverträglichkeiten zwischen Zahlensysstemen) auch verstärkt Rundungsfehler (insb. bei Divisionen) und Fehlerkummulation (bei Subtraktionen) in die Ungenauigkeit ein. Im Allgemeinen darf man in der Technik aber ohnehin auf 4 oder 5 genaue Stellen kürzen, da Messfehler physikalisch ohnehin schon größer sind, z.B. durch Wärme-bedingte Ausdehnung etc.
-
Abt. INHALTSVERZEICHNIS der bisherigen ALGORITHMEN-Kapitel
================================================
gibt´s upgedated HIER wieder zum DOWNLOAD. In der ZIP enthalten ist die Datenbank als XProfan-EXE und der BEAMER als prf-Profandatei, den man an eigene Browserpfade anpassen kann, um rasch in die Nähe des gewünschten Beitrags geführt zu werden. Eingabebeispiel: Aufruf des Beitrags 121 in ALGORITHMEN-Kapitel 24: "24_121" eingeben - Internetseite geht auf, Beamer beendet sich. AVIRA Cloud sagt derzeit, alles sei sicher. -
Abt. Test, ob Ascii2Hex wirklich die Inversion von Hex2Ascii liefert
===========================================
Chr$(7) wurde ausgeblendet, um das ständige irritierende "Klingel"-Geräusch zu verhindern. Beide Programme verarbeiten und erzeugen Strings.
GrussCode
Alles anzeigenCls Proc Ascii2Hex :parameters s$ Declare i&,Ascii2Hex$ Ascii2Hex$="" Whileloop len(s$):i&=&Loop Ascii2Hex$=Ascii2Hex$+Right$("0"+hex$(Ord(mid$(s$,i&,1))),2) Endwhile return Ascii2Hex$ EndProc Proc Hex2Ascii :parameters h$ Declare i&,Hex2Ascii$ Hex2Ascii$="" Whileloop 0,len(h$)-1,2:i&=&Loop Hex2Ascii$=Hex2Ascii$+chr$(val("$"+mid$(h$,i&+1,2))) Endwhile return Hex2Ascii$ EndProc TEST: font 1 declare x&,y&,z$,h$ Whileloop 0,255:x&=&Loop:case x&=7:x&=6 whileloop 0,255:y&=&Loop:case y&=7:y&=6 z$=ascii2hex(chr$(x&)+chr$(y&)+chr$(x&)+chr$(y&)) h$=Hex2Ascii(z$) print x&,y&,z$;" ";tab(19);len(h$),">";h$;"<",ord(left$(h$,1)),ord(right$(h$,1)) ifnot (chr$(x&)+chr$(y&)+chr$(x&)+chr$(y&)) = h$ sound 2000,20 waitinput endif endwhile endwhile waitinput
-
Abt. Rosetta Code: Best Shuffle
====================
von BBC-BASIC nach XProfan-11.2a portiert, mittels zusätzlicher FNSwap()-Funktion.
GrussCode
Alles anzeigenWindowTitle "Rosetta Code: BEST SHUFFLE" 'Q: http://rosettacode.org/wiki/Best_shuffle WindowStyle 24:CLS:Font 1:print 'NO RANDOMIZE COMMAND!!! Declare a$,b$ a$="abracadabra":Shuffleprint a$="seesaw" :Shuffleprint a$="elk" :Shuffleprint a$="grrrrrr" :Shuffleprint a$="up" :Shuffleprint a$="a" :Shuffleprint Waitinput End Proc FNshuffle: parameters s$ Declare i%,j%,l%,t$ t$=s$:l%=LEN(t$) Whileloop l%:i%=&Loop FNSwap(t$,i%,RND(l%)+1) Endwhile Whileloop l%:i%=&Loop Whileloop l%:j%=&Loop:case j%=i%:continue IF substr$(t$,i%)<>substr$(s$,j%) IF substr$(s$,i%)<>substr$(t$,j%) t$=FNSwap(t$,i%,j%) BREAK 'exit inner loop Endif ENDIF endwhile EndWhile return t$ Endproc Proc FNsame :parameters s$,t$ declare n% Whileloop LEN(s$) case MID$(s$,&Loop,1)=MID$(t$,&Loop,1):inc n% EndWhile return " ("+STR$(n%)+")" EndProc Proc FNSwap :parameters s$,i%,j% declare x$,y$ x$=substr$(s$,i%):y$=substr$(s$,j%) s$=del$(s$,i%,1):s$=ins$(y$,s$,i%) s$=del$(s$,j%,1):s$=ins$(x$,s$,j%) return s$ EndProc Proc ShufflePrint b$=FNshuffle(a$):PRINT " ",a$,tab(15);"->",b$,tab(30);FNsame(a$,b$) Endproc
-
Abt. FGS-02 ´Jacke´
==============
Der Inhaber einer Innenstadt-Boutique will den optimalen Verkaufspreis für eine Sportjacke bestimmen. Die Erwartung des Herstellers manifestiert sich im UVP (Unverbindlich empfohlener Verkaufspreis) bei erwarteten 100 Verkäufen zu 75 Euro, und erfahrungsgemäß sind bei diesem Kundenkreis pro 5 Euro mehr 20 Verkäufe weniger sind zu erwarten, umgekehrt bei einer Preissenkung pro 5 Euro weniger 20 Verkäufe mehr. Im Einkauf kostet die Jacke 30 Euro. Welchen Preis sollte der Inhaber in der Hochsaison verlangen, um seinen Gewinn zu optimieren? -
Abt. Nerd-Geometrie
==============
<klugscheiß on>Ein Kreis wird von einer beliebigen Geraden geschnitten. Meist ist der Kreis nun in einen größeren Teil und einen kleineren Teil getrennt. Die enstandenen Schnittpunkte werden wir gleich brauchen.Wir wählen irgend einen Punkt auf dem größeren Kreisumfangsstück, und ziehen von dort zu den vor-erwähnten Schnittpunkten zwei Geraden. Interessanter Weise ist es egal, welchen Punkt am größeren Kreisumfangsstück man wählt: Der Winkel zwischen den zugehörigen Geraden zu den beiden Schnittpunkten bleibt immer gleich! Man kann ihn z.B. aus dem Abstand a des Kreismittelpunktes von der einleitend erwähnten schneidenden Geraden relativ einfach ermitteln: Er beträgt w = 2 * arctan( (R-a)/Sqrt(R^2 - a^2). R ist der Kreisradius, eh klar.
Noch etwas ist interessant: Wählt man einen beliebigen Punkt auf dem kleineren Kreisumfangstück, dann entsteht bei der gleichen Konstruktion ein Winkel, der w2 = 180° - w beträgt. Man kann ihn aber auch per Formel errechnen zu w2 = 2 * arctan( (R + a)/Sqrt(R^2 - a^2). Das Plus oben ist der einzige Unterschied bei den Formeln.<klugscheiß off>
-
Abt. Interessante Links
==============
Sehenswert: Abiogenesis, ein Computer-generierter SF-Kurzfilm -
Zu FGS-02 ´Jacke´
Ist zwar nicht die Lösung, aber die Praxis:
Der Inhaber einer Innenstadt-Boutique schaut sich die Preise der Konkurrenz an und unterbietet den Preis.
Wenn die Konkurrenz 75€ verlangt, ist der Preis nur 74,99€.
Oder man streicht den UVP (UVP*1,1) durch und schreibt 10% Rabatt hin.
- Bei Teppichen sind Rabatte > 50% normal.Tschau
-
Abt. FGS-03
==========
Wieviele zweistellige Nummern haben die Eigenschaft, dass ihre Quadratzahlen und ihre Kubikzahlen rechts auf die selbe Ziffer enden? -
Hinweis zu FGS-02:
--------------------
Gewinn = Verkaufsumsatz - Einkaufskosten =
Gewinn = Preis * Menge - Einzelstückkosten * Menge =
= (Preis - Einzelstückkosten) * Menge =
= (75-5*Faktor - 30) * (100 + 20*Faktor) =
= (45 - 5 * Faktor ) * (100 + 20*Faktor) =
= 4500 - 500 * F + 20*45 * F - 5*20*F^2 =
Gewinnfunktion = 4500 + 400 * F - 100 * F^2Im Optimalpunkt ist keine Gewinnsteigerung mehr möglich. Diese Aussage
ist gleichbedeutend damit, dass der Anstieg (= die 1. Ableitung) der
obigen Gewinnfunktion gleich Null ist. M.a.W., wir setzen
4500 + 400 * F - 100*F^2
ins Verhältnis zu einer kleinen Änderung von F und sehen:4500 und dF ?: Da tut sich garnix, also vergiss 4500,
400 * F zu dF gibt 400, sowie
-100*F^2 zu dF gibt -100*2*F = -200*F
---------------------------------------
Im Optimalpunkt gilt also
400-200*F = 0, und das bedeutet
400 = 200*F, bzw. der Faktor
F = 2.
Den kann man nun in die Preisformel
75 - 5*F einsetzen, und erhält den optimalen Verkaufspreis.Zusatzfrage: Mit wieviel Gewinn ist dann zu rechnen?
Hinweis zu FGS-03:
Da es stets um die Einerstelle geht, wo man nicht auf Übertrag
achten muss, kommt man mit dem Kleinen 1 x 1 aus! -
Hallo p.specht,
zu FGS-02 schreibst Du Schwachsinn.
Ist nicht böse gemeint, und hat nichts mit dem Rätsel zu tun.
Deine Berechnung gilt für einen Laden ohne Miete/Pacht und ohne Personal.
-> Also der Besitzer des Ladens verkauft alleine die Ware.
Tschau
-
Der Laden gehört dem Verkäufer selber und er hat kein Personal sondern betreibt den alleine!
Meine Lösung:
Abt. FGS-02 ´Jacke´
==============
Der Inhaber einer Innenstadt-Boutique will den optimalen Verkaufspreis für eine Sportjacke bestimmen. Die Erwartung des Herstellers manifestiert sich im UVP (Unverbindlich empfohlener Verkaufspreis) bei erwarteten 100 Verkäufen zu 75 Euro, und erfahrungsgemäß sind bei diesem Kundenkreis pro 5 Euro mehr 20 Verkäufe weniger sind zu erwarten, umgekehrt bei einer Preissenkung pro 5 Euro weniger 20 Verkäufe mehr. Im Einkauf kostet die Jacke 30 Euro. Welchen Preis sollte der Inhaber in der Hochsaison verlangen, um seinen Gewinn zu optimieren?Gewinn G = VK-Preis (Pvk) * VK-Zahl (Zvk) - Einkaufskosten (=30 * Zvk)
"20 VK weniger je 5 € mehr" grenzt den Suchraum ein, den bei +25 wäre der VK 0.
Für Schrittweite 5 [€] ergibt sich für den Raum Pvk 75 bis 100Plus€ > Zvk
(25 > 0)
20 > 20
15 > 40
10 > 60
5 > 80
0 > 100
5 Schritte, daher gehe ich auch mal 5 in die andere Richtung:
minus€ > Zvk
-5 > 120
-10 > 140
-15 > 160
-20 > 180
-25 > 200
oder in Formeln:Pvk = 100 + x*(+/-)5 |für x = (+/-)0 bis 5
Zvk = 100 + x*(+/-)20 |für x = (+/-)0 bis 5
Der Gesamt-Einkaufspreis Pek folgt daraus mit:
Pek = Zvk * 30Der Gewinn G ergibt sich damit nach der Formel
G = Pvk*Zvk - Pek = (100 + x*(+/-)5)*(100 + x*(+/-)20) - (100 + x*(+/-)20)*30
(für x = (+/-)0 bis 5)x Pvk Zvk Pek G
5 125 .0 ..0 ...0
4 120 20 600 1800
3 115 40 1200 3400
2 110 60 1800 4800
1 105 80 2400 6000
0 100 100 3000 7000
-1 95 120 3600 7800
-2 90 140 4200 8400
-3 85 160 4800 8800
-4 80 180 5400 9000
-5 75 200 6000 9000Interessant: Bei Pvk 80 und 75 bleibt der G gleich.
Also habe ich x noch mal bis -10 erweitert, um zu sehen, wie es weiter geht... Ergebnis wie erwartet:x Pvk Zvk .Pek ...G
-6 70 220 6600 8800
-7 65 240 7200 8400
-8 60 260 7800 7800
-9 55 280 8400 7000
-10 50 300 9000 6000Unter Pvk 75,- sinkt der Gewinn wieder.
Und damit kommen wir zur Antwort:
Frage: Welchen Preis sollte der Inhaber in der Hochsaison verlangen, um seinen Gewinn zu optimieren?Antwort: Maximalen Gewinn würde er mit einem Verkaufspreis von 80 oder auch 75 € machen. Er sollte also 75 € verlangen (weil ein niedriger Preis besser aussieht und mehr Kunden anzieht!)
Zusatzfrage: Mit wieviel Gewinn ist dann zu rechnen?
Antwort: Er kann mit 9000 € Gewinn rechnen.Rabe
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!