ALGORITHMEN - Teil XVI: Liberté - Fraternité - Pfefferminztee

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Abt. Bitterfeld
      =========
      Ein Bitfeld in 2D, da benötigt man die richtigen Zeilen/Spalten/Byte/Bit-Ansprechroutinen. Zeilen und Spalten beginnen bei 0, Überhang tritt allenfalls beim letzten Byte auf. Die bits, die jeweils gleichen Stellenwert im Byte haben, sind hier gleichfärbig eingefärbt.
      Gruss

      P.S.: Hat gedauert, bis das geklappt hat. Daher "Bitterfeld" ;-)

      Quellcode

      1. Windowtitle "Kompaktes 2D-Bitfeld schreiben und lesen"
      2. '(CL) Copyleft 2018-04 by P.Specht, Wien - OHNE JEDE GEWÄHR!
      3. var Zeilen&=66
      4. var Spalten&=123
      5. var Dot&=11 'Größe
      6. var Farbe&=rgb(255,255,255)
      7. var Hintergrd&=rgb(0,255,255)
      8. var ob_rand&=dot&\2
      9. var li_rand&=dot&\2
      10. Windowstyle 24:Window 0,0-%maxx,%maxy
      11. Declare Bereich#:Dim Bereich#,(Zeilen&*Spalten&+7)\8
      12. Declare z&,s&, by&,mo&,w&
      13. Proc Setbitf :parameters b#,Zeilen&,Spalten&,z&,s&,v&
      14. case (z&<0) or (z&>=Zeilen&) or (s&<0) or (s&>=Spalten&):return
      15. var by&=(z&*Spalten&+s&)\8:var mo&=(z&*Spalten&+s&) mod 8
      16. var w&=byte(b#,by&):w&=setbit(w&,mo&,v&):byte b#,by& = w&
      17. Endproc
      18. Proc Show
      19. Whileloop 0,Zeilen&-1:z&=&Loop
      20. Whileloop 0,Spalten&-1:s&=&Loop
      21. by&=(z&*Spalten&+s&)\8
      22. mo&=(z&*Spalten&+s&) mod 8
      23. if testbit(byte(Bereich#,by&),mo&)
      24. usepen 0,dot&,Farbe&
      25. else
      26. usepen 0,dot&,rgb(0,mo&*30,mo&*30)
      27. endif
      28. Line li_rand&+dot&*s&,ob_rand&+dot&*z&\
      29. - li_rand&+dot&*s&,ob_rand&+dot&*z&+1
      30. '... schneller als Rectangle
      31. endwhile
      32. endwhile
      33. endproc
      34. '********************* Hauptteil *******************
      35. Selbsttest:
      36. declare iz&,is&
      37. Whileloop Zeilen&-2,Zeilen&-1:iz&=&Loop
      38. Whileloop Spalten&-10,Spalten&-1:is&=&Loop
      39. setbitf(Bereich#,Zeilen&,Spalten&,iz&,is&,1)
      40. show
      41. sound 4000,22
      42. setbitf(Bereich#,Zeilen&,Spalten&,iz&,is&,0)
      43. endwhile
      44. endwhile
      45. SMILEY:show
      46. dispose Bereich#
      47. Print "\n Selbsttest OK! "
      48. waitinput
      49. END
      50. ' Bonus:
      51. Proc SMILEY :whileloop 0,359,1
      52. z&=32.5+30*sin(&Loop/180*Pi()):s&=60.5+30*cos(&Loop/180*Pi())
      53. SetBitf(Bereich#,Zeilen&,Spalten&, z&,s&,1):z&=32.5+31*sin(&Loop/180*Pi())
      54. s&=60.5+31*cos(&Loop/180*Pi()):SetBitf(Bereich#,Zeilen&,Spalten&, z&,s&,1)
      55. z&=24.5+4*sin(&Loop/180*Pi()):s&=50.5+4*cos(&Loop/180*Pi())
      56. SetBitf(Bereich#,Zeilen&,Spalten&, z&,s&,1):z&=24.5+2*sin(&Loop/180*Pi())
      57. s&=70.5+6*cos(&Loop/180*Pi()):SetBitf(Bereich#,Zeilen&,Spalten&, z&,s&,1)
      58. if (&Loop>20) and (&Loop<160):z&=25.5+30*sin(&Loop/180*Pi())
      59. s&=60.5+20*cos(&Loop/180*Pi()):SetBitf(Bereich#,Zeilen&,Spalten&, z&,s&,1)
      60. endif:endwhile : farbe&=rgb(255,255,0)
      61. EndProc
      Alles anzeigen
    • Abt. Fakultätsfunktion bis Fac(100000)
      ========================
      XProfan kann das eigentlich nur bis 170. Der Overflow-Error wird hier aber abgefangen, das Ergebnis per Minuszeichen gekennzeichnet und via Zehnerlogarithmus errechnet. Bei der Ausgabe wird das Minus dann entsprechend interpretiert, die Stellenzahl der Mantisse ist dann aber nur auf etwa 12 signifikante Kommastellen gültig.
      Gruss

      Quellcode

      1. CLS
      2. Proc Fac :parameters N&:casenot N&:return 1.0
      3. if N&>100000:print " *** FAC() TOO BIG! *** ";:beep:return -100000:endif
      4. if N&<171:var p!=1:whileloop N&:p!=p!*&Loop:endwhile:return p!
      5. else :var s!=0:whileloop N&:s!=s!-lg(&Loop):endwhile:return s!:endif
      6. EndProc
      7. Declare N!,F!
      8. Repeat
      9. print " N = ";:input N!:F!=Fac(N!)
      10. print " Fac(";int(N!);") = ";
      11. if F!>=0:print format$(" %g",F!)
      12. else :set("decimals",17)
      13. print str$( round(10^(int(F!)-F!),13))+"e+"+str$(int(-F!) )
      14. endif
      15. Until 0
      Alles anzeigen
    • Abt. Binomialverteilung
      ===============
      Die BinVtlg() ist eine "diskrete" Verteilung - eine die sich auf Einzelereignisse bezieht. Sie beantwortet die Frage, wie wahrscheinlich es ist, daß bei N Münzwürfen (Einzelwahrscheinlichkeit p = 50% für Kopf) oder bei Würfel-Würfen (´6´ ist 1 von 6 Möglichkeiten, Einzelwahrscheinlichkeit daher p = 1/6 = 16.6667 %) - oder bei einer beliebigen anderen bekannten Grundsituation - bei N x werfen (= bei N Versuchen) >>> genau k mal Erfolg ("günstige Situation") eintritt.
      Gruss

      P.S.: Durch Aufsummieren kann man natürlich auch herausbekommen, wie wahrscheinlich es ist, daß k oder mehr Erfolge eintreten. Summiert man alle diese k Wahrscheinlichkeiten, muss natürlich 100% herauskommen.

      Quellcode

      1. WindowTitle upper$("Binomialverteilungsdichte: P(n Versuche, k mal Erfolg,"+\
      2. " bei Einzelerfolgs-Wahrscheinlichkeit p)")
      3. '(CL) CopyLeft 2018-04 by P.Specht, Wien. OHNE GEWÄHR!
      4. WindowStyle 24:Window %maxx/4,10 - %maxx/2,%maxy-60
      5. Proc Binom_nCr :parameters N&,k&
      6. case k&=0:return 1.0:case N&<=0:return 0.0:case (2*k&)>N&:k&=N&-k&
      7. var P!=1:whileloop k&:P!=P!*(N&-k&+&Loop)/&Loop:endwhile:return P!
      8. endproc
      9. Proc Fac :parameters N&:casenot N&:return 1.0
      10. if N&>100000:Print " *** FAC() TOO BIG! *** ";:beep:return 0.0:endif
      11. if N&<171:var p!=1:whileloop N&:p!=p!*&Loop:endwhile:return p!
      12. else :var s!=0:whileloop N&:s!=s!-lg(&Loop):endwhile:set("decimals",17)
      13. return str$( round(10^(int(s!)-s!),13))+"e+"+str$(int(-s!) ):endif
      14. EndProc
      15. Proc BinVtlg :parameters N&,k&,p!
      16. case (n&<=0) or (k&>n&) or (p!<=0) (p!>=1):return (k&=0)
      17. case (p!>=1):return (k&>0)
      18. return Binom_nCr(N&,k&)*p!^k&*(1-p!)^(n&-k&)
      19. endproc
      20. Declare p!,n&,k&,su!
      21. Nochmal:
      22. CLS:font 2
      23. print "\n Nötige Vorinformation:"
      24. print "\n Erfolgswahrscheinlickeit eines Einzelversuchs:":font 0
      25. print "\n (z.B. Münze p = 50 %; ´6´= 1 Würfelseite von 6 Möglichen: p = 16.6667 %)"
      26. font 2:print "\n p_Einzel [%] ?: ";
      27. input p!:case (p!<0) or (p!>100):goto "Nochmal"
      28. REPEAT
      29. Print "\n Gesamtzahl Versuche [0=Restart]?: ";:input n&:case n&=0:BREAK
      30. print " Zufällige Anzahl an Erfolgen ?: ";:input k&
      31. print " Wahrscheinlichkeit für genau diese Anzahl: "; 100*BinVtlg(N&,k&,p!/100);" [%]"
      32. if (N&>1) and (N&<1000):print " ... für diese Anzahl und mehr: ";:su!=0
      33. Whileloop k&,N&:su!=su!+100*BinVtlg(N&,&Loop,p!/100):endwhile:case su!>100:su!=100
      34. print su!,"[%]"
      35. endif
      36. UNTIL 0
      37. goto "Nochmal"
      Alles anzeigen
    • Tja, laut Hilfe: "Def <Name> <Literal>"

      Aber so geht's:

      Quellcode

      1. Cls:set("decimals",17)
      2. '************************
      3. def f(0) 180/Pi()
      4. print f()
      5. '************************
      6. print " ... ???":sound 50,250:sound 47,350:waitinput:end
      Hier ist f() eine Funktion ohne Parameter. (Deshalb auch das "def f(0) ...)

      Gruß
      Roland
      (Intel Duo E8400 3,0 GHz / 4 GB RAM / 250 GB HDD / ATI Radeon HD4770 512 MB / Windows Vista - ausgemustert zum Verkauf)
      AMD Athlon II X2 2,9 GHz / 8 GB RAM / 500 + 1000 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X4


      http://www.xprofan.de
    • ... m.a.W.: Besser gleich die Konstanten selbst!
      Gruss

      Quellcode

      1. WindowTitle "Grad°, rad und Normalisierung"
      2. WindowStyle 24:cls:set("decimals",17):font 2
      3. def !r2d 57.2957795130823208'76798154814105
      4. def !d2r .0174532925199432957'6923690768489
      5. def !Pi 3.141592653589793238'4626433832795
      6. def !2Pi 6.283185307179586476'925286766559
      7. def !PiH 1.570796326794896619'2313216916398
      8. def !PiD 1.047197551196597746'1542144610932
      9. def !PiV .7853981633974483096'1566084581988
      10. def nmldeg(1) if(@!(1)<360, if(@!(1)<0,nmldeg(@!(1)+360),@!(1)),nmldeg(@!(1)-360))
      11. def nmlmap(1) if(@!(1)<=180,if(@!(1)<=-180,nmlmap(@!(1)+360),@!(1)),nmlmap(@!(1)-360))
      12. def nmlrad(1) if(@!(1)<!2Pi,if(@!(1)<0,nmlrad(@!(1)+!2Pi),@!(1)),nmlrad(@!(1)-!2Pi))
      13. print "\n Testwerte:\n"
      14. print " ";nmldeg(!r2d*!Pi* -1/3)," in [0,360]°"
      15. print " ";nmlmap(!r2d*!Pi* -1/3)," in ]-180,0,180]°"
      16. print " ";nmlrad(!d2r*180* -5 ), " in [rad] (mit 360°=2*!Pi)"
      17. waitinput
      Alles anzeigen
      P.S.: Begrüßenswert, daß !2Pi als Konstantenbezeichnung akzeptiert wird!
    • Abt. PROC vs. DEF - Benchmark
      ====================
      War nur so eine Idee. Ergebnis: Bei kleinen Formeln nur wenig Unterschied ...
      Gruss

      Quellcode

      1. WindowTitle "DMS2DEG: PROC vs. DEF - BENCH (XProfan Compiler ca. 40 Sekunden)"
      2. '****************************************
      3. DEF dms2deg1(3) @&(1)+@&(2)/60+@!(3)/3600
      4. '****************************************
      5. proc dms2deg :parameters d&,m&,s!
      6. return d&+m&/60+s!/3600
      7. endproc
      8. '****************************************
      9. TEST1:
      10. WindowStyle 24:cls:font 2:randomize:set("decimals",17)
      11. declare d&,m&,s&,ks&,chk!,lChk!,tm&
      12. chk!=-1:tm&=&gettickcount
      13. Whileloop 359,360:d&=&Loop:print "\nd"+str$(d&),
      14. Whileloop 58,59:m&=&Loop:print "\nm"+str$(m&),
      15. whileloop 50,59:s&=&Loop:print ".";
      16. whileloop 0,99999,9:ks&=&Loop
      17. lChk!=chk!:chk!=dms2deg(d&,m&,s&+ks&/100000)
      18. if lchk!>=chk!:print "****ERROR: ";:beep
      19. print d&,m&,s&;".";right$("000"+str$(ks&),4)," ",chk!,lchk!:waitinput
      20. endif:endwhile:endwhile:endwhile:endwhile:tm&=&gettickcount-tm&
      21. WindowTitle "Erste Variante (PROC): "+str$(tm&/1000)+" Sekunden":beep
      22. TEST2:
      23. cls:font 2:randomize:set("decimals",17)
      24. 'declare d&,m&,s&,ks&,chk!,lChk!
      25. chk!=-1:tm&=&gettickcount
      26. Whileloop 359,360:d&=&Loop:print "\nd"+str$(d&),
      27. Whileloop 58,59:m&=&Loop:print "\nm"+str$(m&),
      28. whileloop 50,59:s&=&Loop:print ".";
      29. whileloop 0,99999,9:ks&=&Loop
      30. lChk!=chk!:chk!=dms2deg1(d&,m&,s&+ks&/100000)
      31. if lchk!>=chk!:print "****ERROR: ";:beep
      32. print d&,m&,s&;".";right$("000"+str$(ks&),4)," ",chk!,lchk!:waitinput
      33. endif:endwhile:endwhile:endwhile:endwhile:tm&=&gettickcount-tm&
      34. cls:print "\n Zweite Variante (DEF): ";str$(tm&/1000);" Sekunden":beep
      35. waitinput
      36. END
      Alles anzeigen
    • Abt. Versuch: Dezimalgrad nach +/-Deg°Min'Sec<n Nachkommastellen>
      =============================================
      Püh, war gar nicht so einfach! Hoffentlich sind nicht noch weitere bugs drin ...
      Gruss

      Quellcode

      1. Windowtitle "Dezimalgrad nach +/-DDD°MM'SS.SSSS"
      2. 'EARLY ALPHA, VORSICHT! (D) Demo 2018-04 P.Specht, Wien
      3. Windowstyle 24:cls:set("decimals",15):font 2
      4. Proc DMSc2Deg :parameters d&,m&,s!
      5. var sgn&=1-2*(d&<0):d&=abs(d&)
      6. return sgn&*(d&+m&/60+s!/3600)
      7. Endproc
      8. DEF Sgn(1) (@!(1)>0)-(@!(1)<0)
      9. DEF Sg$(1) if(Sgn(@!(1))<0,"-","+")
      10. def Dg°(1) int(int(abs(@!(1))) mod 360)
      11. def Mn°(1) int(abs(int((@!(1)-Dg°(@!(1)))*60)) mod 60)
      12. def Sc°(1) abs(((@!(1)-int(@!(1)))*60)-int((@!(1)-int(@!(1)))*60))*60
      13. DEF Dg$(1) right$(" "+Sg$(@!(1))+str$( Dg°(@!(1)) ),4)+"°"
      14. DEF Mn$(1) right$("00"+str$(Mn°(@!(1))),2)+"'"
      15. DEF Sc$(2) format$("00."+mkstr$("0",@&(2)),Sc°(x!)) 'str$(Sc°(@!(1)))
      16. proc Test°
      17. print if(x!>=0," ","");x!,tab(29);
      18. print Dg$(x!)+Mn$(x!)+Sc$(x!,4)'<<< 2.Param.: Nachkommastellen,
      19. endproc '... 4 Kommastellen bei Sc° = Erdumfang auf 3.1 mm genau
      20. var \
      21. x!= 1.234567890 : Test°
      22. x!=-1.234567890 : Test°
      23. x!= 1.57 : Test°
      24. x!=-1.57 : Test°
      25. x!= 0.571 : Test°
      26. x!=-0.571 : Test°
      27. x!= 362.57 : Test°
      28. x!=-362.57 : Test°
      29. waitinput 5000:Print "\n\n Danke fürs Testen!":sound 30,50:waitinput 2500
      30. print
      31. print
      32. 'Experiment: String mit Deg°Min'Sec zerlegen und nach Dezimalgrad zurückkonvertieren
      33. declare y!,DMSc$,v1&,v2&,v3&, w$
      34. lup:
      35. Font 2:print " Dezimalgrad: ";:input w$
      36. if w$>"":x!=val(w$): else : x!=y!:endif
      37. locate %csrlin-1,40
      38. DMSc$ = Dg$(x!)+Mn$(x!)+Sc$(x!,4)
      39. print DMSc$
      40. v1&=InStr("°",DMSc$)
      41. v2&=InStr("'",DMSc$)
      42. v3&=InStr(chr$(34),DMSc$):case v3&=0:v3&=len(DMSc$)
      43. print " ";left$(DMSc$,v1&-1);"°";mid$(DMSc$,v1&+1,v2&-v1&-1);"'";mid$(DMSc$,v2&+1,v3&-v2&)
      44. font 0
      45. 'Print val(left$(DMSc$,v1&-1)),\
      46. ' val(mid$(DMSc$,v1&+1,v2&-v1&-1)),\
      47. ' val(mid$(DMSc$,v2&+1,v3&-v2&))
      48. Y! = DMSc2Deg(val(left$(DMSc$,v1&-1)),\
      49. val(mid$(DMSc$,v1&+1,v2&-v1&-1)),\
      50. val(mid$(DMSc$,v2&+1,v3&-v2&)))
      51. Print tab(25);y!," Err:",format$("%g",x!-y!)
      52. goto "lup"
      Alles anzeigen

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von p. specht ()

    • Link: Videomanipulation
      ===============
      Erstaunlich, was alles geht: Hier wird aus einigen Punkten in einer kurzen (2D-)Bildkader-Sequenz eine 3D-Videoszene errechnet, um diese Szene dann mit künstlichem Hintergrund auszustatten und virtuellle Gegenstände bewegungsrelativ hineinzurechnen.

      Leider entsteht im 3D-Bereich gerade ein gewaltiges Oligopol aus ganz wenigen Welt-Unternehmen. Die Autodesk Aktiengesellschaft z.B. hat nahezu alle Konkurrenten aus 3D-Konstruktion, Videomanipulation und 3D-Gaming aufgekauft. Die Produktliste lässt nichts aus ausser vielleicht grosse Hollywood-Produktionen, wo der Disney-Konzern aber eine ähnliche Strategie verfolgt.

      Wo immer viel Geld ist, ist das Militär nicht weit: Neueste 3D-Anwendung ist Farb-3D-Druck aus Papiermaché und Kunststoff, um Häuserkampf-Geländemodelle quasi währen des Einsatzes zu drucken. Was früher in Form von mittelalterlichen Zinnsoldaten-Sandkastengefechten nur in der Generalstabsausbildung lief, geht heute zeitnah im Felde aus Satellitendaten, Drohnenbildern und Aufklärungsflügen. Zit.: ´Damit entfällt das Tragen von teuren, lästigen 3D-Brillen.´.

      Und das tot umfallen kann man auch gleich darstellen?

      Gruss
    • Abt. Binäre Permutation von N ´1´-Zuständen
      =============================
      ...funktioniert für den vorzeichenlosen Teil der DWORD-Breite. Wird das Vorzeichen-bit tangiert, ist der Returnwert "Alle bits auf 1". Daran kann man ev. das Ende des "Testzyklus" erkennen.
      Gruss

      Quellcode

      1. Windowtitle upper$("Binär nächste Permutation von z.B. 5 ´1´-Werten erzeugen")
      2. 'Q: https://graphics.stanford.edu/~seander/bithacks.html#NextBitPermutation
      3. Windowstyle 24:Window 300,100-600,100
      4. 'Beispiel:
      5. var v&=%00000000000000000000010000001111
      6. '_______FEDCBA9876543210FEDCBA9876543210
      7. proc nextbitperm :parameters v&
      8. var t&=(v& | (v&-1))+1
      9. return t& | ((((t& & -t&)\(v& & -v&))>>1)-1)
      10. endproc
      11. var s$=mkstr$("0",32)
      12. font 0:print "\n FEDCBA9876543210FEDCBA9876543210":font 2
      13. repeat
      14. locate 4,6:print right$(s$+bin$(v&),32)
      15. v& = nextbitperm(v&)
      16. waitinput 500
      17. until %key>26
      18. End
      Alles anzeigen

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von p. specht ()

    • Abt. Ressourcenfresser INPUT ?
      ====================
      Der Input-Befehl, ein Relikt aus Pascal/Basic-Zeiten, ist offenbar ein CPU-Ressourcenfresser, zumindest während er auf eine Eingabe wartet: Die CPU-Belastung schnalzt bei mir auf 50% (Win7-64, 2 Kerne), während ein Waitinput dagegen in der Wartezeit keine CPU-Last auslöst. Auch aus diesem Grund sollte man den alten Input-Befehl daher nur in Ausnahmsfällen nutzen.

      In diesem Zusammenhang fällt auf, daß WaitInput mit Input eigentlich nichts zu tun hat, und daher besser auf WAIT verkürzt werden sollte. WaitKey und WaitMouse sind dagegen klar. Ein in anderen Sprachen verfügbares WaitMouseMove kann man ja relativ leicht nachbauen.
      Gruss

      P.S.: INPUT-ERSATZ (Alpha-Version):

      Quellcode

      1. cls:Font 2
      2. var g$=PutIn$("Eingabe?: ")
      3. print "\nGelesen: ";g$
      4. waitinput:end
      5. proc PutIn$ :parameters txt$
      6. print txt$;"_";:locate %csrlin,%pos-1
      7. declare data$,ky$
      8. waitinput
      9. ky$=chr$(%key):print ky$;
      10. case ky$=chr$(13):return ""
      11. input data$
      12. data$=ky$+data$
      13. return data$
      14. endproc
      Alles anzeigen

      Quellcode

      1. cls:Font 2
      2. : proc Wait :waitinput :endproc
      3. Proc WaitAnyMouseMove :Declare Point#,mx%,my%
      4. Struct TPoint=x&,y&:Dim Point#,TPoint
      5. Waitinput 1000 'Beruhigung nach Buttonclick
      6. External("user32.dll","GetCursorPos",Point#)
      7. mx%=Point#.X&:my%=Point#.Y&
      8. :REPEAT:External("user32.dll","GetCursorPos",Point#)
      9. case mx%<>Point#.X&:break:case my%<>Point#.Y&:break
      10. Waitinput 500:UNTIL 0:Dispose Point#
      11. Endproc
      12. Proc WaitMouseMoveInWindow
      13. var mx%=%mouseX:var my%=%mouseY
      14. REPEAT:case mx%<>%mouseX:break
      15. case my%<>%mouseY:break
      16. waitinput 333
      17. UNTIL 0
      18. endproc
      19. ' Hauptteil
      20. WaitAnyMouseMove
      21. Print "WaitAnyMouseMove Gespürt!"
      22. WaitMouseMoveInWindow
      23. Print "WaitMouseMoveInWindow auch gespürt!"
      24. Beep
      25. Wait
      26. End
      Alles anzeigen

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von p. specht ()

    • Abt. "Wussten Sie eigentlich, dass ..."
      ========================
      ... in einem herkömmlichen PC mit 4 GByte RAM-Ausstattung 34.359.738.368 Speicher-bit werken, aber eine 1-Terabyte Festplatte 8.796.093.022.208 bit speichern kann, also 256 mal diesen Hauptspeicher? Abzüglich Verwaltungsbits bleibt da immer noch eine schöne Anzahl!

      Wie gut, dass das menschliche Hirn rund 86.000.000.000 Neuronen hat, die wiederum per Synapsenverbindungen kommunizieren. Ein Neuron kann mit 100.000 bis 200.000 Fasern (Axonen) anderer Nervenzellen in Austausch treten, und das "analog", geschätzt in mindestens 64 Stufen (6 bit): Das entspricht dann also rund 103.200.000.000.000.000 bit ...

      ... die allerdings nur mit ca. halber Schallgeschwindigkeit (ca. 120 m/s) funktionieren statt mit fast Lichtgeschwindigkeit 299.792.458 m/s. Somit relativiert sich die Überlegenheit von "Feuchtware" wieder um den Faktor 2.5 Mio auf 41.280.000.000 Leistungsbit, also knapp über der Größenordnung des Hauptspeichers.

      Der Unterschied liegt daher in der Raffinesse der Organisation, weniger der Quantität.

      Gruss

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von p. specht ()

    • p. specht schrieb:

      proc PutIn$ :parameters txt$
      print txt$;"_";:locate %csrlin,%pos-1
      declare data$,ky$
      waitinput
      ky$=chr$(%key):print ky$;
      case ky$=chr$(13):return ""
      input data$
      data$=ky$+data$
      return data$
      endproc
      Verstehe ich beim Drüberschauen nicht so ganz :
      Du schreibst INPUT - ERSATZ, verwendest aber Input trotzdem : Input data$
      Aber vielleicht fällt bei mir da noch der Groschen.
      PS: Ich würde das in einer Schleife machen, solange wie %Key <> Chr$(13) ist.
    • @H.Brill: Stimmt, aber auf das erste Zeichen wartet das Proc mittels Waitinput.
      Waitinput verbraucht keine Ressourcen, die weitere Eingabe wird sich dann nur kurz gestalten, weil ich ja offenbar schon mit der Eingabe begonnen habe. Ich wollte die Vorteile von Input ohne die Nachteile nutzen.
      Selbstverständlich kann man die gesamte Eingabe auch zeichenweise einlesen, da gebe ich dir recht. Auch den blinkenden Eingabecursor könnte man simulieren.
      Gruss
    • Jetzt hab ich es verstanden.
      Naja, das Input nutzt man ja auch nur im Textmodus.
      Man müßte mal das Input über mehrere Stunden/Tage
      laufen lassen und die CPU-Belastung ermitteln.

      Bleibt die auf 50% oder geht das noch höher ?
      Es gibt ja durchaus Programme, die vielleicht
      ein oder zweimal am Tag eine Eingabe entgegen
      nehmen, bzw. wo was eingetippt wird.

      Da wäre es ja schon wichtig, ob man dann doch
      lieber auf eine GUI mit Eingabefeld setzt, um
      ressourcenschonender zu sein.

      Es ist ja auch durchaus üblich, so ein Programm
      in die Taskleiste zu minimieren und bei Bedarf
      wieder aufzuklappen. Wenn dann in der Zwischenzeit
      was anderes gemacht wird, ist eine 50%ige CPU-Auslastung
      schon heftig.

      Das sollte man dann schon im Vorfeld wissen.
    • Ob 50% hängt ja vom Prozessor ab. Bei einem Vierkerner sind es 25% und auf meiner alten Vistakiste mit nur einem Kern satte 100%. INPUT benötigt zum Nichtstun eben einen Kern. Wird dieser Kern auch noch durch andere Prozesse gefordert, kriegt INPUT dann dementsprechend weniger ab. Aber egal wie, ich mag grundsätzlich keine Programme, die INPUT verwenden, das bringt regelmäßig den Lüfter zum Brüllen.

      Gruß Volkmar
    • Abt. Hex-Spielereien
      =============
      Manchmal erblickt man in Hexadezimal geschriebenen Zahlen versehentlich ganze Worte. Und manchmal ist das gar kein Versehen, sondern Absicht des Programmierers. Wer nun fürchet, ich leide an zu viel Phantasie, der kann das ja am folgenden Programm, das ausschließlich Hex-Zahlen ausgibt, gerne überprüfen.
      Gruss

      Quellcode

      1. Windowtitle "Hex-Worte aus 0O1I2Z345S6G7T89ABCEDF"
      2. WindowStyle 24:Window 0,0-%maxx,%maxy:showmax:font 1
      3. var Englisch$="_a _ACAD _ace _Acos _add _age _aid _babe _bad _bag _be _beast _beat"+\
      4. " _bed _bee _beeb _beef _BEG _begG _best _boobs _BS _cab _Caos _casa _cat _coat _coffee"+\
      5. " _dad _dead _deaf _debt _deed _Dei _Diet _do _doc _DODGE _does _dog _dot _east _eat"+\
      6. " _eggs _Fab _face _fact _facts _fade _FCC _feed _feet _fit _foot _Gag _Gags _Geese _go"+\
      7. " _goat _good _Goof _Goose _goto _I _ICE _idea _octos _odd _Odie _off _off1ce _sad"+\
      8. " _sat _scate _SEA _seed _set _Sets _sic _sit _SOB _soft _STABO _stiff _Tabs _Tail"+\
      9. " _TESA _tilt _tit _to _toast _ToDO _too _zoo"
      10. var Deutsch$="AAAAAAAAA Aas Ab ABBA Abbas Abbiege Abbog Abc Abgab Abgabe"+\
      11. " Abgebe Abgott Abi Abigail Abiss Abo Abos Abszess Abt abtat Abtei Acad. Acba Acbso"+\
      12. " Acdc Acetat ACos Act Acte Ada ADAC Adagio AddisAbeba Ade Adi Adios Adobe Aegaeis"+\
      13. " Aeiou AfA AFB Affe affig AG Age Agfa Agio AIBO Aida Aidid Aids Asbest Ascii Asi"+\
      14. " Aso Ass Assi Ast Astat baba Babe BACC Bad BadAss bade badet Badge baff BAG Bagage"+\
      15. " Bagdad BASF Bass Bast Basta Basti Bat BC BCD Bea BEAB Beate bebt bebte bee BEEGEES"+\
      16. " beeidet Beet BEF begab begabt begibt bei Beide Beo Beos beste Beta Bete Bett bidde"+\
      17. " Bidet Biege biegt Biest biete Biff Biggi bigott Bio bis Biss bist bit Bitte Boa Bob"+\
      18. " Bobbi Bobo Bobs Bode Bodo Boes bog Bola Boogie Boot Boote Boss Bosse Bot BSSST Ca Cab"+\
      19. " Caba Cad Cadi Cafe Caff CAFFEE Cascade CASIO Cat CB CCC CD CEBIT CEDES CEO Ciao"+\
      20. " CIBAGEIGI Cica Cicade Cico CISCO Co Coat Coca CODA CODE CODEC Codo Coffee Cogge"+\
      21. " COS COT Cote Csi CSS DA Dad Dada Daddi Das Data DC DE dead Deaf Debt Dec DECCA deco"+\
      22. " DEF Defoe DEG Deg. Dei Deo Des Det Detto Dia Diaet Dice Diddi Die Dieb Diego dies"+\
      23. " diese Digit Diode Disco Do Doc Docs DODGE Dog Doge Dogge doof Dose DOSIS Dott Ebbe"+\
      24. " Ed Edda Ede Edi Effet EFTA Ego Ei Eibe Eid Eis Elf Esse Essig Esso Eta Etat etc"+\
      25. " Faabe Face Facts fad fade Fase Fass Fast feat Feb feces Fee Fest Fett FIAT Fido Fies"+\
      26. " Fifa Fit gab Gabe Gabi gabt GADAFFI gaffe Gage Gas Gase Gasse Gassi Gast Gebet Gebot"+\
      27. " GebTag gedissed GEDISST Geode GES Gesaess gesagt Gesoeff Gestade GFRETT Gib giesse"+\
      28. " gisse Gitta Gitte Go Gobi Godot Googie Gott Iacob IC Ida Idee Idiot IFA IFABO Igo"+\
      29. " Iosef Iota Isaac ISS ist Lied Oase Ob Oboe Obst Occidedt Odessa Odo OECD OECO Oed"+\
      30. " OEST_ Offensife_ oft OOE_ Ost Otto Roibos SAAB Sabbat Sacco Sadat Sadist Safe Saft"+\
      31. " Sag Saga Sago Sagst Sagt Sagte Saif SAT satt Satz SBG Sc9iff Sec SEE SEEFEST"+\
      32. " Seid Seide Seife Seifig Seist Seit Sibille SIDO Sie Sieb Siebt Siebte"+\
      33. " Sieg Sisal Sitte so Soda Sofa Sofas soff Sog SOSO SS Staat Stab stad STASI Steg"+\
      34. " Steif Steig stetig Stiefel Stiege Tab Tabac Taff Taft Tag Tage Tags Tagt Tai Taiga"+\
      35. " Tao Tasse Tasso TAT Tatoo TEAC Ted Tee Teig TESA Tess Test Tests Tia Tiago TICTAC"+\
      36. " Tide Titte To Toast Tobi tobte Tod Todt Toga Togo tot Tote Toto zeige Zeit Ziege Zoo"
      37. proc WriteHex$ :parameters t$ '0O1I2Z345S6G7T89ABCEDF
      38. t$=upper$(t$):t$=translate$(t$,"O","0"):t$=translate$(t$,"I","1")
      39. t$=translate$(t$,"Z","2"):t$=translate$(t$,"S","5"):t$=translate$(t$,"G","6")
      40. t$=translate$(t$,"T","7"):t$=translate$(t$,"H","9"):return t$
      41. endproc
      42. proc Zeig
      43. cls:print "\n ";
      44. whileloop 0,sizeof(d$[])-1
      45. print WriteHex$(d$[&Loop])," ",
      46. case %pos>158:print "\n\n ";
      47. endwhile
      48. waitinput
      49. endproc
      50. Declare d$[]:d$[]=explode(Deutsch$," "):Zeig
      51. clear d$[]:d$[]=explode(Englisch$," "):Zeig
      Alles anzeigen
      P.S.: Es fehlen noch viele "Hexzahlen" mit ´Z´ (dargestellt als ´2´)

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von p. specht ()