Abt. UnvmR 13 ´Mei Huat, der hat drei Ecken!´
===================================
Die Seiten eines Dreiecks haben die Längen 6, 10 und 11. Ein gleichseitiges Dreieck hat denselben Umfang wie dieses Dreieck. Wie lang ist eine Seite des gleichseitigen Dreiecks?
ALGORITHMEN - Teil XVIII: Neueste Fortschritte in Künstlicher Dummheit
-
-
-
Lösung zu UnvmR 13
--------------------Spoiler anzeigen
Umfang = 6+10+11
Umfang_gleichseitig = 3 * Seite
-------------------------------
Umfang = Umfang_gleichseitig
6+10+11 = 3 * Seite
27 / 3 = Seite = 9
Antwort: Die Seitenlänge beträgt 9 Einheiten. -
Abt. Noch´n Rosetta Code: ´Verheiratete Folgen´
=====================================
Auch in XProfan kann man Algorithmen realisieren, in denen sich mehrere REKURSIVE Prozeduren gegenseitig aufrufen, solange man an die Geschwindigkeit nur moderate Anforderungen stellt. Beweis anbei.
GrussCode
Alles anzeigenWindowTitle "Douglas R. Hofstadter´s VERHEIRATETE FOLGEN erzeugen" 'Q: http://rosettacode.org/wiki/Mutual_recursion 'p.specht 2018-09 AppendMenubar 100,"...mittels gegenseitig-rekursiver Aufrufe!" 'https://en.wikipedia.org/wiki/Hofstadter_sequence#Hofstadter_Female_and_Male_sequences 'Write two mutually recursive functions that compute members of the '*Hofstadter Female and Male sequences* defined as: ' F(0)=1:M(0)=0 ' F(n)=n-M(F(n-1)),n>0 ' M(n)=n-F(M(n-1)),n>0 'F sequence: ' 1 1 2 2 3 3 4 5 5 6 6 7 8 8 9 9 10 11 11 12 13 'M sequence: ' 0 0 1 2 2 3 4 4 5 6 6 7 7 8 9 9 10 11 11 12 12 Set("numwidth",3):var to&=20'56 PRINT "\n F sequence:\n" Whileloop 0,to& PRINT FNf(&Loop); EndWhile PRINT "\n\n M sequence:\n" Whileloop 0,to& PRINT FNm(&Loop); Endwhile beep:Waitinput END Proc FNf :parameters n% IF n%=0:n%=1:ELSE: n%=n%-FNm(FNf(n%-1)):ENDIF return n% Endproc Proc FNm :parameters n% IF n%=0:ELSE:n%=n%-FNf(FNm(n%-1)):ENDIF return n% EndProc
-
Abt. UnvmR 14´Wie man Leser verscheucht´
=================================
Wusstet Ihr schon, daß das Integral(x=-Inf..+Inf: x/Sqrt(x^4+10*x^2-96*x-71) ; dx) =
-1/8*ln((x^6+15*x^4-80*x^3+27*x^2-528*x+781)*Sqrt(x^4+10*x^2-96*x-71)-(x^8+20*x^6-128*x^5+54*x^4-1408*x^3+3124*x^2+10001))+C ist?
Eine alte Verleger-Weisheit besagt: Jede mathematische Formel in einem Blog oder Druckwerk vergrault die Hälfte der Leser. Frage: Wieviele Formeln muss der Autor abdrucken, damit von 19.683 Lesern nur noch 3 übrig bleiben? -
Lösung zu UnvmR 14
--------------------
Ansatz:
19683 * (1/2)^x = 3
19683 = 3 * 2^x
19683 / 3 = 2^x
6561 = 2^x
ln(6561) = ln(2^x) = x * ln(2)
ln(6561) / ln(2) = Lg(6561) / Lg(2) = 3.8163 / 0.301 = 12.68Von 19683 auf 3 kommt man also in 12.68 Halbierungsschritten, es sind somit:
Antwort: 12 Formeln und eine fast fertige = 13 Formeln erforderlich. -
Abt. Sophomore-Gleichung mit verbessertem Algorithmus
==========================================
Gibt man in der Gleichung y = x^x ein y vor, dann erweist sich die Frage, welches x diese Gleichung erfüllt als erstaunlich kompliziert und nicht mit elementaren mathematischen Funktionen lösbar. Dank Computer, Herrn Isaac Newton und einigen von mir beigesteuerten Tricks kann die Frage im Bereich 1.13 <= y <= 10^99 nun auch mit XProfan in kurzer Zeit gelöst werden.
GrussCode
Alles anzeigenWindowtitle " Sophomore-Gleichung: Approximation mittels Newton-Specht ;-)" AppendMenuBar 100," y = f(x) = x^x ; Bereich 1.13 <= y <= 10^99 , Ges: x = ? " CLS set("decimals",17) declare W$,x!,y!,eps! eps!=val("5E-16") WHILE 1 locate 1,1:print "\n\n Y = "; locate 3,7:w$="1":input w$:y!=val(w$) if y!=1 : x!=0 print "\n Für y=1 gilt x = 0 wegen 0^0 = 1 (´Lokale Definition´)" CONTINUE endif case (y!<1.13) or (y!>1e99) CONTINUE x!=1000 REPEAT 'x!=x! - ( y!-x!^x! ) / (-1*(x!^x!)*(ln(x!)+1)) 'x!=x! - 1/(ln(x!)+1) + y!/(x!^x!*(ln(x!)+1)) 'x!=x! - 1/(ln(x!)+1) + y!*x!^(-x!)/(ln(x!)+1) 'x!=x! - 1/(lg(x!)+1) + y!*x!^(-x!)/(lg(x!)+1) 'Specht´s Beschleunigung: x!=x! - 1/(lg(x!)+1) + y!*x!^(-x!)/(lg(x!)+1) case (x!-ln(y!))>10000:x!=x!-1000 'Abbruchkriterium neu: case (abs(x!*ln(x!)-ln(y!))/ln(y!))<eps!:BREAK UNTIL 0 font 2:print "\n X = ",x! font 0:sound 3000,30 print "\n Probe: ";format$("%g",x!^x!), print " Abs.Fehler: ";format$("%g",abs(x!^x!-y!)) waitinput CLS ENDWHILE END
-
Abt. Rosetta Code "Längste ansteigende Unterfolge"
=======================================
Klappt, nach längerer Fehlersuche: Die Rück-Übergabe von Dynamischen Arrays aus einer Proc heraus, aber ohne dass diese in der Parameters-Liste vorkommt - erfordert dennoch vorab eine globale Deklaration dieses Arrays. Mit Declare imn der Proc selbst ging es nicht - zumindest nicht beim untenstehenden ´Proc ToList´.
GrussP.S.: Wie heißt es doch gleich bei Michael W.: Programmieren, das spannenste Detektivspiel der Welt - wie wahr!
Code
Alles anzeigenWindowTitle "Längste ansteigende Unterfolge suchen" 'Q:http://rosettacode.org/wiki/Longest_increasing_subsequence#VBScript 'Calculate and show here a longest increasing subsequence of the list: ' {3,2,6,4,5,1} 'and of the list: ' {0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15} 'Note that a list may have more than one subsequence that is of the maximum length. 'Output: '2,4,5, '0,2,6,9,11,15, PROC SUBLIST :parameters arr&[] Declare n&,p&[],m&[],s&[],l&,lo&,hi&,middle&,newl&,i&,k& n&=sizeof(arr&[]) SetSize p&[],n& SetSize m&[],n& l& = 0 WHILELOOP 0,n&-1:i&=&Loop lo& = 1 hi& = l& While lo&<=hi& middle&=(lo&+hi&)\2 If Arr&[m&[middle&]] < Arr&[i&] lo& = middle& + 1 Else hi& = middle& - 1 EndIf Endwhile newl& = lo& p&[i&] = m&[newl&-1] m&[newl&] = i& Case newL&>l&:l&=newl& ENDWHILE setsize s&[],l& k&=m&[l&] Whileloop l&-1,0,-1:i&=&Loop s&[i&] = arr&[k&] k& = p&[k&] Endwhile clear arr&[] return s&[] EndProc proc toList :parameters L$ declare tmp$[]:tmp$[]=explode(L$,",") clear List1&[]:setSize List1&[],sizeof(tmp$[]) List1&[]=val(tmp$[&index]):clear tmp$[] return List1&[] Endproc proc prtlst :parameters out&[] print "\n ";:var v&=sizeof(out&[]) whileloop v&:print out&[&Loop-1];if(&Loop<v&,","," "); endwhile:print:clear out&[] endproc 'MAIN: var L1$="3,2,6,4,5,1" var L2$="0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15" CLS:Font 2 declare List1&[] 'prtlst(toList(L1$)) prtlst(SUBLIST(toList(L1$))) 'prtlst(toList(L2$)) prtlst(SUBLIST(toList(L2$))) print "\n OK.":Sound 4000,20:Waitinput END
-
Abt. UnvmR 15 ´Rotationen´
=====================
Ein Radfahrer legt in einer Sekunde 5 m zurück. Die Räder seines Fahrrades haben einen Umfang von je 125 cm. Wie viele komplette Umdrehungen macht jedes Rad in 5 Sekunden?Abt. UnvmR 16 ´Drei Seiten´
=====================
Evi addiert die Längen von drei der vier Seiten eines Rechtecks und erhält 44 cm. Ulla addierte auch die Längen
von drei Seiten desselben Rechtecks, erhielt aber 40 cm. Frage: Wie groß ist der Umfang des Rechtecks? -
Lösung zu UnvmR 15
--------------------Spoiler anzeigen
5 [m/s] * 5 s = 25 m Strecke
Umdrehungen = Strecke / Radumfang
= 25 m / 1.25 m = 20 UmdrehungenLösung zu UnvmR 16
-------------------Spoiler anzeigen
Ein Rechteck hat 2 lange und zwei kurze Seiten. Zählt man jeweils drei Seiten davon zusammen, so kann die Ursache für Unterschiede nur in der Zusammensetzung durch ´lange´ und ´kurze´ Seiten liegen:Evi: (1) 44 = 2 Lang + 1 Kurz
Ulla (2) 40 = 1 Lang + 2 Kurz
(2 * 2) 80 = 2 Lang + 4 Kurz
-------------------------------------
(2*2)-(1): 36 = 3 Kurz >>> Kurz = 12 cm
Eingesetzt in (2): 40 = 1 Lang + 2 * 12 >>> 40 - 24 = Lang = 16 cmUmfang = 2 Lang + 2 Kurz = 2*16 + 2*12 = 32 + 24 = 56 cm
-------------------------------------------------------------
Probe:
2*16+12 = 32 + 12 = 44
16 + 2*12 = 16+24= 40
q.e.d. -
Abt. Und noch viel mehr Rätsel - UnvmR 17
================================
Die Fahrt von Armdorf nach Reichstadt über Mittelhausen dauert 130 Minuten. Die Fahrt von Armdorf nach Mittelhausen dauert 35 Minuten. Wie viele Minuten dauert die Fahrt von Mittelhausen nach Reichstadt?Abt. UnvmR 18
===========
Der Tierarzt des Zoos hat festgestellt: In der Gruppe der Kängurus wiegen die beiden Leichtesten 25 % des Gesamtgewichts der ganzen Gruppe. Die drei Schwersten wiegen 60 % des Gesamtgewichts. Wie viele Kängurus sind in der Gruppe? -
Lösung zu UnvmR 17
---------------------------Spoiler anzeigen
A--M--R
| 130 |
|35| ?|
130 - 35 = 95 min
Lösung zu UnvmR 18
-------------------------
[spoiler]Gruppengewicht * 25/100 = K1 + K2 >>> ein Leichtes wiegt durchschnittlich 12.5
Gruppengewicht * 60/100 = S1 + S2 + S3 >>> ein Schweres wiegt durchschn. 20
Alle zusammen müssen 100 / 100 ergeben, also fehlen noch 15:Gruppengewicht * 15/100 = Restliche(s) >>> ein Mittleres wiegt ca. 15,
Es ist gibt nur ein Mittelschweres, weil die Bedingung ja lautet 12.5 < 15 < 20.
Wären es nämlich 2 Mittlere, dann wöge jedes nur ca. 7.5 = leichter als die Leichten (Widerspruch!).Folglich: Es sind 2 + 3 + 1 = 6 Kängurus in der Gruppe.
[/spoilsr] -
Abt. UnvmR 19 ´Ziffer überhört´
======================
Von Paules siebenstelliger Telefonnummer habe ich 6 Ziffern in der richtigen Reihenfolge notiert. Ich weiß nicht, welche Ziffer ich vergessen habe und wo sie fehlt. Wie viele Rufnummern muss ich höchstens ausprobieren, um sicher zu sein, dass die richtige auch dabei ist? Die vorderste Ziffer könnte übrigens auch 0 gewesen sein... -
Lösung zu UnvmR 19
===============Spoiler anzeigen
Im ersten Augenblick scheint die Aufgabe einfach: Es gibt 7 Stellen, an denen man eine Zahl vergessen haben könnte:
Vorne, zwischen den 6 bekannten Ziffern (=5 Stellen), und hinten. Da wir es mit 10 möglichen Ziffern 0 - 9 zu tun haben, sind an sich prinzipiell einmal 7 * 10 = 70 Möglichkeiten des Einfügens gegeben.
Jedoch: 123 3 456 ist die selbe Nummer wie 12 3 3456 ! - und dabei ist egal, ob man die selbe Ziffer vor einer gleichen oder nach einer gleichen Telefonziffer einfügt. Daher muss man zu Beginn alle 10 Ziffern ausprobieren, danach aber nurmehr die 9 anderen an den sechs restlichen Stellen! Das gibt dann in Wirkllichkeit nur 10 + 6*9 = 10 + 54 = 64 Möglichkeiten. -
Abt. Skepsis für Anfänger: Wie man Behauptungen beurteilt
==========================================
1. Ist der Überbringer der Info verlässlich?
2. Ist die Quelle existent und verlässlich?
3. Was spricht alles dafür?
4. Welches Gewicht hat die Aussage?
5. Hat jemand versucht, die Behauptung zu widerlegen?
6. Kann ich selbst die Behauptung falsifizieren? (Experiment, Erfahrung)
7. Kann man die Behauptung prinzipiell falsifizieren?
8. Was denken die Gegner, was dagegen spricht?
9. Ist es bloss singuläre / persönliche Erfahrung / Werthaltung?
10. Steckt eine Ideologie / ein Glaubenssystem / Sendungsbewusstsein dahinter?
11. Hat der Informant Vorteile daraus? Fließt etwa Geld?
12. Eröffnet die Behauptung neue Möglichkeiten, ohne alten Erfahrungen zu widersprechen?
13. Erklärt die Behauptung reelle Phänomene?
14. Wird mein Beitrag zu etwas "Grossem" eingefordert?
15. Sprechen Logik und/oder erhärtete Naturgesetze gegen die Behauptung?
16. Gibt es Fachleute, die den inneren Gehalt der Behauptung beurteilen können?
17. Haben diese Fachleute Eigeninteressen?
18. Wer hat diese Fachleute als solche bestätigt?
19. Wer verlieh diesen Bestätigern die Kompetenz dazu?
20. Geht es um Triebe, um Macht und Einfluss?
------------------------------------------------------------
Bleibe skeptisch! -
Abt. UnvmR 20 ´Halbkreis´
====================
Fritz hat sich mühsam einen Kreis aus Goldfolie ausgeschnitten, doch sein böses Schwesterchen hat, kaum dass er mal kurz weg war, die Hälfte abgeschnitten und beide Häflten versteckt. "Gib das sofort zurück!" befiehlt Fritz. Schwesterchen meint dazu aber: "Nur wenn du mir sagen kannst, wie lang der Schnitt ist, denn ich gemacht habe - zumindest ungefähr! Die Fläche des einen Stücks ist jedenfalls 628 mm²". Wer hilft Fritz? -
Lösung zu UnvmR 20 ´Halbkreis´
-----------------------------------Spoiler anzeigen
Praxisgerechte Lösung: Fritz misst auf dem Reststück der Folie den Durchmesser des Kreislochs, und bekommt so sein Eigentum zurück.
Mathematische Lösung:
Kreisfläche F = r^2 * Pi ; Halbkreis-Fläche daher: Fh = r^2 * Pi / 2 wobei r = d/2
Überlegungen: "... der Schnitt" = ein (1) Schnitt >>> Halbkreisschnitt-Länge = Durchmesser dAnsatz: Fh = r^2 * Pi / 2 = (d/2)^2*Pi / 2 = d^2/2^2 * Pi / 2 = d^2/4 * Pi/2
Somit: Fh = d^2 * Pi / 8 , umgeformt: 8 * Fh / Pi = d^2 >>> d = Sqrt( 8 * Fh / Pi )
Einsetzen: d = Sqrt ( 8 * 628 / Pi ) ~ sqrt(1600) = 40 mm
Antwort: Der Schnitt ist ~40 mm lang.
---------------------------------------
Probe: d = 40 >>> r = 20; Fh = r^2*Pi / 2 = 20^2/2 * Pi = ~628 mm², passt. -
Abt. UNIFICATION (Doubletten rausschmeissen)
===================================
Am Beispiel eines Arrays der Größe N Elemente, das mit Zufallszahlen aus [0..N] geladen ist, sollen die Doubletten erkannt und in einem zweiten Array nicht mehr aufgenommen werden. Der hier verfolgte Ansatz nutzt keine Sortierung oder lexikallische Clusterung, sodern geht naiv alle schon bekannten Elemente vergleichend durch. In der Praxis wird der erforderliche Vergleich der (erst zu generierenden) Schlüsselelemente noch deutlich mehr Zeit beanspruchen, aber nachstehender Benchmark lieferte zumindest erste Anhaltspunkte.Spoiler anzeigen
XPROFAN-11.2a Interpreter
Anzahl Elemente : Unifizierungszeit für ca. 34% Doubletten
100:0.23 s, 200:0.732 s, 300:1.685 s, 400:2.76 s, 500:4.551 s,
600:6.64 s, 700:9.093 s, 800:11.139 s, 900:14.293 s,
1000:18.706 s, 1100:22.411 s, 1200:25.822 s, 1300:30.358 s,
1400:40.949 s, 1500:82.196 s, 1600:84.034 s, 1700:52.755 s
1800:71.889 s, 1900:134.462 s, 2000:147.544 s (2 min 27 s)XPROFAN 11.2a Compiler
Anzahl Elemente : Unifizierungszeit von ~34% Doubletten s
100:0.035 s
200:0.151 s
300:0.354 s
400:0.58 s
500:0.844 s
600:1.263 s
700:1.679 s
800:2.308 s
900:2.734 s
1000:3.46 s
1100:4.142 s
1200:4.961 s
1300:5.947 s
1400:6.65 s
1500:7.719 s
1600:8.897 s
1700:10.107 s1800:11.139 s
1900:12.608 s
2000:13.529 s
2100:15.044 s
2200:16.745 s
2300:18.111 s
2400:19.64 s
2500:21.372 s
2600:23.389 s
2700:25.548 s
2800:26.963 s
2900:28.367 s
3000:31.429 s
3100:32.901 s
3200:41.381 s
3300:75.392 s
3400:73.355 s
3500:41.126 s
3600:45.809 s
3700:66.683 s
3800:101.487 s
3900:56.766 s
4000:55.03 s
4100:72.728 s
4200:123.089 s
4300:72.772 s
4400:65.596 s
4500:118.605 s
4600:117.41 s
4700:77.254 s
4800:148.009 s
4900:82.278 s
5000:133.784 s (2 min 14 sek)P.S. Hier noch das Programm dazu:
Code
Alles anzeigenWindowTitle "Unification Bench" '(CL) CopyLeft 2018-09 by p.specht, Vienna/EU ' No warranty whatsoever! OHNE JEDE GEWÄHR! CLS:print:font 2:randomize:clearclip var MAX&=5000 $IFDEF COMPILER Putclip "XPROFAN COMPILER:\n" $ENDIF $IFDEF INTERPRETER Max&=1500 Putclip "XPROFAN INTERPRETER:\n" $ENDIF declare w&[],Eintrag&,n& declare u&[],found&,tm& WHILELOOP MAX& n&=&Loop*100 clear w&[],u&[] setsize w&[],n& w&[]=rnd(n&) print " Unifying ";sizeof(w&[]);" random elements:"; tm&=&gettickcount Whileloop 0,sizeof(W&[])-1 eintrag&=W&[&Loop] found&=0 Whileloop 0,sizeof(u&[])-1 if u&[&Loop]=Eintrag& found&=1 BREAK endif endwhile if found&=0 u&[sizeof(u&[])]=Eintrag& ' print "(";sizeof(u&[]);")"; ' else ' casenot rnd(100):print "."; endif endwhile 'print tm&=&gettickcount-tm& 'waitinput 'print 'whileloop 0,sizeof(u&[])-1 ' print u&[&loop], 'endwhile:print sound 1100,40 'Print "\n Unified array size = ";sizeof(u&[]) print " ";int(sizeof(w&[])-sizeof(u&[])),\ "Doublettes filtered in",format$("%g",tm&/1000),"sec" putclip str$(sizeof(w&[]))+":"+format$("%g",tm&/1000)+" s\n" 'print " OK." 'waitinput WEND sound 2000,300 print:print "SIEHE ZWISCHENABLAGE !" End
-
Abt. Weitere Experimente zur DynArray-Verwaltung
======================================
Das Programm im vorigen Beitrag verwendet ein statisches und ein dynamisches Array. Auf statische, numerische Arrays kann mittels Assembler zugegriffen werden, weil die Adresse des 0.ten Elementes per addr(x![0]) korrekt ermittelbar ist und weitere Elemente im Adressbereich gleich dahinter liegen, in jeweils 4 oder (float) 8 Byte-Schritten.Anders bei Dynamischen numerischen Arrays: Hier liefert addr(a%[]) die Information, als wievieltes Element dieses Typs es declared wurde,und zwar in 4 Byte-Schritten ab -12. Werte sind also -12,-8.-4,0,4,8,12, etc. Es ist anzunehmen, dass an einer bestimmten Stammadresse plus diesem Versatz der Adressvektor auf das Nullte Element dieses Arraytyps steht. Diese Addresse liegt aber vermutlich in einem Bereich, der bei meinen Zugriffsversuchen stets Schutzverletzungen erzeugt. Schade für Assemblerprogrammierer - das Programm im vorigen Beitrag schreit geradezu nach Assembler!
GrussCode
Alles anzeigenWindowTitle "Als wievieltes Dyn-Array declared?" :proc ao$ :parameters x$:return ansitooem$(x$):endproc cls:font 1:declare v& Declare a%[],b%[],c%[],d%[],e%[] print chr$(34);a%[];chr$(34);" <<< print a%[] liefert Leerstring." print print " DynArray Typ %[]\n" print addr(a%[]), a%[0]=$FFFFFFFF print ",nach Init immer noch",addr(a%[]);" Wert: ";a%[0] print " Der abgespeicherter Wert liegt aber nicht an addr(a%[0]) = ";addr(a%[0]) a%[1]=1234567890 print " Der soeben dynamische zugewiesene Wert an a%[1] lautet ";a%[1] print " addr(a%[1]) auszulesen führt zur Falschmeldung 'Element gibt es nicht'" print addr(b%[]) print addr(c%[]) print addr(d%[]) print addr(e%[])," ist somit das als ";int(addr(e%[])/4+4);". declarte Array dieses Typs." print Declare f&[],g&[],h&[],i&[],j&[],k&[] print " DynArray Typ &[]\n" print addr(f&[]), f&[0]=1 print ",nach Init immer noch",addr(f&[]) print addr(g&[]) print addr(h&[]) print addr(i&[]) print addr(j&[]) print addr(k&[])," ist somit das als ";int(addr(K&[])/4+4);". declarte Array dieses Typs." print Declare L$[],M$[] print ao$(" DynArray Typ $ : addr(L$[]) führt zu Absturz!") print Declare R# 'Dynamische Bereichsarrays sind in XProfan-11 nicht erlaubt print ao$(" DynArray Typ # : Dynamische Bereichsarrays sind nicht erlaubt!") print print " Ein einzelner undimensionierter Bereich hat die Addr:",addr(R#) print ao$(" Könnte als Prüfung ob DIMed verwendet werden!?") print print " Die nun DIMensionierte Bereichsvariable liegt im RAM bei:", dim R#,10 print hex$(addr(R#)),ao$("Länge"),sizeof(R#) dispose R# waitinput End ProgEnd
-
Abt. Benchmark Statische vs. Dynamische Arrays
=====================================
Nachstehend werden 200,000 Elemente eines Statischen Arrays und ebensoviele Elemente eines Dynamischen Arrays declared, jeweils Werte zugewiesen, diese ausgelesen, um 1 erhöht und wieder in die Variable eingelesen. Ergebnis: Vom Timing her gibt es weder bei Interpreter noch Compiler signifikante Unterschiede zwischen diesen beiden Array-Arten - In einigen Fälen ist Dynamisch sogar etwas schneller als Statisch! Hätt´ ich nicht gedacht.
GrussCode
Alles anzeigenCLS:font 2 var n&=200000 declare static&[n&-1],dynamic&[],tm& tm&=&gettickcount whileloop 0,n&-1 static&[&Loop]=1 static&[&Loop]=static&[&Loop]+1 endwhile tm&=&gettickcount-tm& print "\n Static Array: ";tm&;" ms" setsize dynamic&[],n& tm&=&gettickcount whileloop 0,n&-1 dynamic&[&Loop]=1 dynamic&[&Loop]=dynamic&[&Loop]+1 endwhile tm&=&gettickcount-tm& print "\n Dynamic Array: ";tm&;" ms" Sound 500,50 waitinput
-
Abt. Man lernt nie aus
=================
Folgendes funktioniert bestens, während z.B. if( 1 , print x$, input x$) nicht klappt:CodeCLS:font 2:print proc pr :parameters x&:print x&;:endproc if(0,tab(10),tab(55)) if(0,pr(1),pr(0)) waitinput end
Beim Inline-IF() scheint es nur darauf anzukommen, daß zmindest ein Zahlenwert in den alternativen Funktionen zurückgegeben wird. Und: Eine Proc ohne Return gibt offenbar einen Nullwert zurück. Oder so ähnlich ...
GrussP.S.: if(1 bedeutet if(%true,<dann das hier>,<wenn nicht %true ddann as hier>)
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!