Algorithmen Teil VIII: Ein Bug kommt selten allein...

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. Runge-Kutta RK4 für Nichtlineare Differentalgleichungssysteme
    ============================================
    Wie schon erwähnt, läßt sich das Verfahren von Runge und Kutta auch auf DGS höherer Ordnung anwenden. Allerdings nimmt die Präzision (trotz des im linearen Bereich exzellenten Verhaltens, immerhin Fehlerordnung 5!) mit der Anzahl R der Dimensionen rapide ab - genauer gesagt mit der R-ten Wurzel :!: aus 'Schrittweite^5'. Man sollte diesfalls also nicht allzu hohe Erwartungen hegen :wacko: .
    Gruss

    P.S.: Zur Erhaltung maßvoller technisch Genauigkeitsanforderungen wäre bereits erheblicher :such03: Zusatzaufwand erforderlich. Besser rückt man solchen Problemen dann mit sog. 'Monte Carlo-Methoden' zu Leibe. Literatur dazu: P. Zinterhof: Integrale und mehrdimensionale Funktionen, Aufsatz in OCG-Schriftenreihe Band 12 'Zahlentheoretische Methoden in der Numerischen Mathematik', S.132ff

    Quellcode

    1. WindowTitle "Runge-Kutta RK4 für Systeme von Differentialgleichungen höherer Ordnung"
    2. ' BASIC-Original: B.Brand: Algorithmen zur praktischen Mathematik, S.240, Oldenbourg Vlg.
    3. ' Migriert nach XProfan-11 in 2014-09 by P.Specht, Wien.
    4. ' Keine wie auch immer geartete Gewähr!
    5. WindowStyle 24:Window 0,0-%maxx,%maxy
    6. declare k1!,k2!,k3!,k4!,l1!,l2!,l3!,l4!
    7. ':: Beispiel: 'Nichtlinares Differentialgleichungssystem'
    8. ':: Zwei Testfunktionen, die eine gekrümmte Fläche bilden (X: Abszisse, Y: Ordinate, Z: Höhe)
    9. declare x!,y!,z!,f!,g!
    10. declare i&,h!,x![],y![],z![],xend!
    11. proc F :parameters x!,y!,z!
    12. return (y!-z!)/x!
    13. endproc
    14. proc G :parameters x!,y!,z!
    15. return (y!+z!)/x!
    16. endproc
    17. ' Hinweis: Zeilen, die mit :: beginnen, stammen vom Übersetzter nach XProfan-11
    18. print "\n Im Beispiel wird ein System aus '2 nichtlinearen Differentialgleichungen "
    19. print " in 3 Variablen' gelöst. Die Gleichungen lauten F=(y+z)/x und G=(y-z)/x. "
    20. print " Die Anfangswerte für x, y und z sowie die Schrittweite h sind vorzugeben. "
    21. print " Ferner wird ein Abbruchkriterium, z.B. der Maximale x-Endwert eingegeben. \n"
    22. print " Aus Gründen meiner Bequemlichkeit werden bei Eingabe 'x=0' die Beispiels- "
    23. print " werte der Originalvorlage genommen (Ergebnisse einsehbar im Programmtext).\n"
    24. ' Die Input-Werte des Original-Beispiels:
    25. ' x!=1 : y!=1 : z!=0 : h!=0.2 : xend!=3
    26. ' führen zu folgender Ausgabe:
    27. 'Schritt X Y Z
    28. ' 0 1 1 0
    29. ' 1 1.2 1.18011937557392 0.217584940312213
    30. ' 2 1.4 1.32150759540037 0.462240502741668
    31. ' 3 1.6 1.42651937035306 0.724648391007437
    32. ' 4 1.8 1.49791768072086 0.998168848790414
    33. ' 5 2 1.53848713605723 1.27796059664382
    34. ' 6 2.2 1.55087497139788 1.56043022121442
    35. ' 7 2.4 1.5375315540692 1.84287395296026
    36. ' 8 2.6 1.50069575905948 2.12323677414932
    37. ' 9 2.8 1.44240050556552 2.39994581694282
    38. ' 10 3 1.36448684585809 2.67179234356735
    39. ' ---
    40. ':: ACHTUNG! Auch das Endkriterium ist jeweils an die Gleichungsstruktur anzupassen,
    41. ':: sonst rechnet das Ding, bis der Speicher voll ist!!!
    42. print " X = ";:input x! : if x!=0:x!=1:y!=1:z!=0:h!=0.2:xend!=3.0:goto "skip":endif
    43. print " Y = ";:input y!
    44. print " Z = ";:input z!
    45. print " Schrittweite h = ";:input h!
    46. print " Endwert (hier: X_end) = ";:input xend!
    47. skip:
    48. set("decimals",17)
    49. clear x![],y![],z![]:clearclip
    50. x![0]=x!:y![0]=y!:z![0]=z!
    51. ausgabe:
    52. print "\n Schritt";Tab(25);" X";Tab(50);" Y";Tab(75);" Z":print mkstr$("-",90)
    53. Repeat
    54. print " ";i&,Tab(25);format$("%g",X![i&]);Tab(50);format$("%g",Y![i&]);Tab(75);format$("%g",Z![i&])
    55. ::putclip str$(i&)+" "+format$("%g",X![i&])+" "+format$("%g",Y![i&])+" "+format$("%g",Z![i&])+"\n"
    56. k1!=h!*F(x![i&],y![i&],z![i&])
    57. l1!=h!*G(x![i&],y![i&],z![i&])
    58. k2!=h!*F(x![i&]+h!/2,y![i&]+k1!/2,z![i&]+l1!/2)
    59. l2!=h!*G(x![i&]+h!/2,y![i&]+k1!/2,z![i&]+l1!/2)
    60. k3!=h!*F(x![i&]+h!/2,y![i&]+k2!/2,z![i&]+l2!/2)
    61. l3!=h!*G(x![i&]+h!/2,y![i&]+k2!/2,z![i&]+l2!/2)
    62. k4!=h!*F(x![i&]+h!, y![i&]+k3!,z![i&]+l3!)
    63. l4!=h!*G(x![i&]+h!, y![i&]+k3!,z![i&]+l3!)
    64. y![i&+1]=y![i&]+1/6*(k1!+2*k2!+2*k3!+k4!)
    65. z![i&+1]=z![i&]+1/6*(l1!+2*l2!+2*l3!+l4!)
    66. x![i&+1]=x![i&]+h!
    67. inc i&
    68. ::if %csrlin>55:waitinput ' 55 und 85 an aktuelle Schirmdimensionen anpassen!
    69. ::cls:print:print " Schritt";Tab(25);" X";Tab(50);" Y";Tab(75);" Z":print mkstr$("-",90)
    70. ::endif
    71. until x![i&]>(xend!*1.000000000000001) '(wegen höherer Genauigkeit von Intel-FPUs)
    72. ::print "OK.":beep:print " Ausgabe steht auch in Zwischenablage!":waitinput
    73. End
    Alles anzeigen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. Dynamische Arrays abzwicken
    ======================
    Vermutet hatte ich es ja, aber jetzt glaube ich's auch: Dynamische Arrays lassen sich (Xprofan 11.2a) unter Wahrung des Dateninhaltes der unteren Elemente :!: oben abzwicken, und zwar mit Resize Dynarray![], neuermaxindex&+1 . Will man die unteren Elemente zu Null setzen, so hilft ein vorheriger CLEAR-Befehl.

    Quellcode

    1. cls : declare z![] : setsize z![],100 : z![]= -&index
    2. setsize z![],41 : print format$("%g",z![sizeof(z![])-1])
    3. waitinput

    Bei statischen Arrays (Declare mit Angabe der Elementzahl in den eckigen Klammern) klappt der Resize-Befehl dagegen nicht (selbst nach einem CLEAR nicht), sondern führt augenblicklich zum Absturz mit 'Exception Error'! Falls das passiert, also immer hübsch prüfen, ob dynamisch oder statisch vereinbart wurde!
    Gruss
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. Nicht schon wieder Fakultät!
    =====================
    Das weiter oben veröffentlichte, in XProfan transformierte Programm betreffend Fakultäten-Berechnung hat die Eigenschaft, daß die einzelnen Arrayvariablen nicht nur die Ziffern 0 bis 9 beinhalten können, sondern bei Nutzung höherer Basen das Ergebnis z.B. auch in Hexadezimalzahlen ausgeben kann: Man wähle Base&=16 und erweitere die Ziffernleiste um die Buchstaben A bis F.

    Das brachte mich auf die Idee, die Sache auf Basis 100 auszutesten, und nach einiger Spielerei (Ausgabe von 00, 01, ...99 statt 0,1,2 ...) klappte das ganz gut.

    Eine weitere Vergrößerung der Basis hätte die Bereitstellung von Strings "000","001",....,"999" notwendig gemacht, aber die entstehende Rechenzeit nimmt den Beschleunigungserfolg. Da man den Ergebnistext aber auch durch die einzelnen Array-Zahlen direkt mittels Stringwandlung zusammenlöten kann, war diese Hürde genommen.

    Dreist erweiterte ich dann die Basis auf 1000, 10000, ... bis 1000000000 (1 Mrd passt noch in Profans Integer&Variablen. Auf 2^31 = 2.147.483.648 zu gehen, hat wenig Sinn, weil dann die Rückwandlung des Arrays in eine große Zahl im Dezimalsystem viel länger dauert als der Geschwindigkeitsgewinn. So war dieser zwar im unteren Zahlenbereich enorm, aber so ab 800! wird die Sache dennoch eher fade.

    Was kann man in XProfan also tun, um die Sache weiter zu beschleunigen: Man geht auf Float-Variablen über und verwendet als Basis 1_000_000_000_000_000. Das gefühlt halbe Menschenleben, daß die Berechnung der Fakultät 4000! mit der weiter oben veröffentlichten Version braucht, schrumpft nun auf rund 320 Sekunden = 5 1/3 min. Trotzdem möchte ich nicht wissen, was bei 5000! und 6000! passiert...
    Gruss

    P.S.: Mit Assembler klappt 6000! aber schon, siehe Factorial Online-Calculator.

    Quellcode

    1. WindowTitle upper$("Beschleunigte Fakultätsberechnung in XProfan durch"+\
    2. " Nutzung dezimalbasierter Integerzahlen in Float-Arrays (V0.4.alpha)")
    3. ' Grundgerüst: http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic
    4. ' Realisierung des XProfan-Speedups 2014-09 by P.Specht@gmx.at, Wien (AT)
    5. ' Early alpha-Version! O H N E J E D E G E W Ä H R ! !
    6. Window %maxx/10,%maxy/10-%maxx*8/10,%maxy*8/10:font 2
    7. Music "C8 C8 D16 E8 G2 E8 E8 D16 C8 E4 E2 "
    8. var FactorialLimit& = 365 ' Target number to solve, Originalbeispiel: 365!
    9. declare n&,text$,tm& ' Loopvariable, Scratchpad for the output, Timer
    10. var Limit& =1000 ' Sufficient digit buckets.
    11. var dsiz& = 15 ' Exponent to form maximum decimal value per variable
    12. var Base! = 10^dsiz& ' = 1 000 000 000 000 000 = Base of the simulated 10^x arithmetic
    13. declare digit![Limit&] ' BigNumber array elements
    14. declare carry!,d! ' Assistants during multiplication
    15. declare last&,i&,z$ ' Indices to the big_number variables containing the digits
    16. START:
    17. Print "\n Von welcher Zahl soll die Fakultät berechnet werden ?: ";
    18. input z$
    19. if z$>"":factoriallimit&=val(z$)
    20. else :factoriallimit&=n&+1
    21. endif
    22. if factoriallimit&=0:text$="1":n&=0:goto "OUTPUT"
    23. endif
    24. print "\n Berechnung läuft ..."
    25. ::tm&=&GetTickCount
    26. clear digit![] ' Clear the whole array
    27. digit![1]=1 ' The big number starts with 1,
    28. last&=1 ' Its highest-order digit-variable is number 1.
    29. WHILELOOP FactorialLimit&
    30. n&=&Loop ' Step through producing 1!, 2!, 3!, 4!, etc.
    31. locate 1,1:print " ";n&
    32. carry!=0 ' Start a Multiply by n
    33. whileloop last&:i&=&Loop ' Step along every ArrayElement.
    34. d!=digit![i&]*n&+carry! ' The Classic multiply.
    35. digit![i&]=modf(d!,Base!) ' The low-order digit of the result, needs modf().
    36. carry!=intf(d!/Base!) ' The carry to the next digit, needs inf().
    37. endwhile
    38. while carry! > 0 ' Store the carry in the big number.
    39. if last& >= Limit&
    40. print "\n *** Storage Array Overflow Error *** ";
    41. sound 2000,500:waitinput :end ' Diesfalls müsste man Limit& deutlich erhöhen!
    42. endif
    43. inc last& ' One more digit.
    44. digit![last&]=modf(carry!,Base!)
    45. carry!=round(carry!/Base!,0) ' The carry reduced.
    46. endwhile ' With n > Base, maybe > 1 digit extra.
    47. ENDWHILE ' Compute the next-up factorial product
    48. OUTPUT:
    49. set("decimals",0):cls:text$=" " ' Prepare for Output.
    50. whileloop last&,1,-1:i&=&Loop ' Translate to text (e.g. for Clipboard!)
    51. text$=text$+right$(mkstr$("0",dsiz&-1)+str$(digit![i&]),dsiz&)
    52. endwhile '...now strip leading Zeros:
    53. text$=text$+"#":text$=translate$(text$,"0"," "):text$=trim$(text$)
    54. text$=translate$(text$," ","0"):text$=translate$(text$,"#","")
    55. ::tm&=&GetTickCount-tm& ' Zeitnahme (Ausgabe selbst nicht berücksichtigt)
    56. Print "\n";text$;"\n\n Diese Fakultät von ";n&;" hat ";\
    57. len(text$);" Stellen (gespeichert in ";last&;\
    58. " Float-Variablen, Rechenzeit: ";format$("#####0.00";tm&/1000);" s )"
    59. clearclip:putclip text$+"\n = "+str$(n&)+"! ("+str$(len(text$))+" Stellen in "+\
    60. str$(last&)+" Float-Variablen, Rechenzeit "+format$("#####0.00";tm&/1000)+" s )"
    61. print "\n Resultat auch in der Zwischenablage! "
    62. Music "C8 C8 D16 E8 A2 G8 G8 F16 E8 G4 D2 ":beep
    63. GOTO "START"
    64. END
    65. ' Auzug aus einem Include...
    66. proc modf :parameters x!,y!
    67. return ((y!>0)-(y!<0))*abs(x!-y!*floor(x!/y!))
    68. endproc
    69. proc floor :parameters x!
    70. case abs(x!)<(10^-35):return 0:case x!>0:return intf(x!)
    71. return (abs(x!-intf(x!)) < 10^-35)-intf(abs(x!-1))
    72. endproc
    73. proc frac :parameters x!
    74. var s!=(x!>0)-(x!<0):x!=abs(x!):x!=x!-round(x!,0):case x!<0:x!=1+x!:return s!*x!
    75. endproc
    76. proc intf :parameters x!
    77. var s!=(x!>0)-(x!<0):x!=abs(x!):x!=x!-frac(x!):return s!*x!
    78. endproc
    79. ProgEnd
    Alles anzeigen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

  • Abt. Physik A.D.1926: Erklärungsversuche zum Ferro-Magnetismus
    ==========================================
    Bis heute sind gewisse Phänomene in der Physik nur behelfsmäßig erklärbar: Warum z.B. summieren sich Elektronen- und Kernspins von Atomen nicht blitzartig (mit Lichtgeschwindigkeit über so winzige Distanzen), sondern lassen sich mit Radiowellen-Frequenzen im NMR-Tomografen so unterschiedlich anregen, daß sogar einzelne Elemente getrennt sichtbar werden? Ist ja super, daß das so ist, aber was ich bisher so im Netz sehe bleibt es bisher nur ein technisch genutztes Phänomen ohne befriedigende Erklärung. In jedem Physikbuch wird man lesen, daß Materialien entweder durchsichtig oder leitfähig sein können, aber nicht beides. Warum gibt es dann stromflussbeheiztes, leitfähiges Glas (Sitec)?

    Ein ähnliches Schicksal teilen so partielle Erklärungsversuche des Elektomagnetismus wie z.B. die Maxwell-Gleichungen, die alle Nahfeldeffekte durch Nullsetzen einfach ausblenden. Ja selbst die (Un-)Polarisierbarkeit bestimmter Metalle (Anti-Ferromagnetismus) bleibt nach wie vor ein Rätsel. Umso verdienstvoller sind die frühen Versuche, ursächliche Erklärungen für diese Phänomene zu finden. Die Theoretiker werden den Praktikern aber wohl noch oft hinterherhinken...
    Gruss

    Quellcode

    1. var wt$="Simples Onsager-Ising-Modell des Magnetismus, bei *** "
    2. WindowStyle 24:randomize:font 2:CLS 'rgb(0,0,255)
    3. declare xx&,yy&,i&,k&,J!,P!,u&,v&,dd&,T!,ef!
    4. xx&=width(%hwnd):yy&=height(%hwnd)
    5. dd&=11 'dot diameter
    6. declare A&[2+xx&\dd&,2+yy&\dd&]
    7. MCls xx&,yy&,$FFFFFF
    8. WHILELOOP 273,0,-1:T!=&Loop
    9. Windowtitle upper$(wt$)+str$(int(T!-273.15))+" °C ***"
    10. StartPaint -1
    11. WhileLoop 1,1+xx&\dd&:i&=&Loop
    12. whileloop 1,1+yy&\dd&:k&=&Loop
    13. if T!=0:P!=0
    14. else
    15. ef! = exp(-T!/273.15*(1-2*A&[i&-1,k&])*(1-2*A&[i&+1,k&])*(1-2*A&[i&,k&-1])*(1-2*A&[i&,k&+1]))
    16. P!=(ef!<0.5)
    17. endif
    18. A&[i&,k&]=P!
    19. usepen 0,dd&,rgb(255,255*A&[i&,k&],255*A&[i&,k&])
    20. line (i&-1)*dd&,(k&-1)*dd& - (i&-1)*dd&+1,(k&-1)*dd&
    21. endwhile
    22. EndWhile
    23. EndPaint
    24. MCopyBMP 0,0 - xx&,yy& > 0,0;0
    25. ENDWHILE
    26. beep
    27. Waitinput
    28. End
    Alles anzeigen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. CMD-Programme
    ==============
    Das Feld Programmsuche im Explorer mag jungen AnwenderInnen, die bisher nichts besseres kennengelernt haben ja ausreichend erscheinen. Allein die Frage, wie man alle Verzeichnnispfade geordnet in ein Textfile reinkriegt stellt sie aber schon vor Probleme. >Dir *. | CLIP , und die Sache steht in der Zwischenablage! Gerne wird vom Durchschnittsuser eben vergessen, wie einfach manche Dinge mit althergebrachter BATCH-Programmierung erledigt werden können. In .bat-Dateien können inzwischen aber nicht nur die altbekannten Filter wie SORT, FIND etc., sondern erheblich verbesserte Hilfsbefehle und -Programme verwendet werden, wie sie bisher nur in Linux verfügbar waren, z.B. Suchen mittels regulärer Ausdrücke: FINDSTR, etc.

    Zum (Wieder-)Einlesen in die Welt der Batchprogrammierung, ohne die Virus-gefährdete Windows Management Instrumentation WMI erlernen zu müssen, sei folgendes Link empfohlen: ss64.com/nt/. Ein Wort zur WARNUNG: Manche der Befehle sind SEHR MÄCHTIG, man sollte also schon wissen, was man da tut. Schliesslich will man sich nicht versehentlich die Platte formatieren und dergleichen!!

    An der genannten Link-Adresse finden sich Erläuterungen zu folgenden CMD-Line- und Batch-Befehlen:
    An A-Z Index of the Windows CMD command line

    ADDUSERS Add or list users to/from a CSV file
    ADmodcmd Active Directory Bulk Modify
    ARP Address Resolution Protocol
    ASSOC Change file extension associations•
    ASSOCIAT One step file association
    AT Schedule a command to run at a specific time
    ATTRIB Change file attributes

    BCDBOOT Create or repair a system partition
    BCDEDIT Manage Boot Configuration Data
    BITSADMIN Background Intelligent Transfer Service
    BOOTCFG Edit Windows boot settings
    BROWSTAT Get domain, browser and PDC info

    CACLS Change file permissions
    CALL Call one batch program from another•
    CERTREQ Request certificate from a certification authority
    CERTUTIL Utility for certification authority (CA) files and services
    CD Change Directory - move to a specific Folder•
    CHANGE Change Terminal Server Session properties
    CHKDSK Check Disk - check and repair disk problems
    CHKNTFS Check the NTFS file system
    CHOICE Accept keyboard input to a batch file
    CIPHER Encrypt or Decrypt files/folders
    CleanMgr Automated cleanup of Temp files, recycle bin
    CLIP Copy STDIN to the Windows clipboard
    CLS Clear the screen•
    CMD Start a new CMD shell
    CMDKEY Manage stored usernames/passwords
    COLOR Change colors of the CMD window•
    COMP Compare the contents of two files or sets of files
    COMPACT Compress files or folders on an NTFS partition
    COMPRESS Compress one or more files
    CONVERT Convert a FAT drive to NTFS
    COPY Copy one or more files to another location•
    CSCcmd Client-side caching (Offline Files)
    CSVDE Import or Export Active Directory data

    DATE Display or set the date•
    DEFRAG Defragment hard drive
    DEL Delete one or more files•
    DELPROF Delete user profiles
    DELTREE Delete a folder and all subfolders
    DevCon Device Manager Command Line Utility
    DIR Display a list of files and folders•
    DIRQUOTA File Server Resource Manager Disk quotas
    DIRUSE Display disk usage
    DISKPART Disk Administration
    DISKSHADOW Volume Shadow Copy Service
    DISKUSE Show the space used in folders
    DOSKEY Edit command line, recall commands, and create macros
    DriverQuery Display installed device drivers
    DSACLs Active Directory ACLs
    DSAdd Add items to active directory (user group computer)
    DSGet View items in active directory (user group computer)
    DSQuery Search for items in active directory (user group computer)
    DSMod Modify items in active directory (user group computer)
    DSMove Move an Active directory Object
    DSRM Remove items from Active Directory

    ECHO Display message on screen•
    ENDLOCAL End localisation of environment changes in a batch file•
    ERASE Delete one or more files•
    EVENTCREATE Add a message to the Windows event log
    EXIT Quit the current script/routine and set an errorlevel•
    EXPAND Uncompress CAB files
    EXTRACT Uncompress CAB files

    FC Compare two files
    FIND Search for a text string in a file
    FINDSTR Search for strings in files
    FOR /F Loop command: against a set of files•
    FOR /F Loop command: against the results of another command•
    FOR Loop command: all options Files, Directory, List•
    FORFILES Batch process multiple files
    FORMAT Format a disk
    FREEDISK Check free disk space
    FSUTIL File and Volume utilities
    FTP File Transfer Protocol
    FTYPE File extension file type associations•

    GETMAC Display the Media Access Control (MAC) address
    GOTO Direct a batch program to jump to a labelled line•
    GPRESULT Display Resultant Set of Policy information
    GPUPDATE Update Group Policy settings

    HELP Online Help
    HOSTNAME Display the host name of the computer

    iCACLS Change file and folder permissions
    IF Conditionally perform a command•
    IFMEMBER Is the current user a member of a group
    IPCONFIG Configure IP
    INUSE Replace files that are in use by the OS

    LABEL Edit a disk label
    LOGMAN Manage Performance Monitor logs
    LOGOFF Log a user off
    LOGTIME Log the date and time in a file
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

  • Fortsetzung:

    MAKECAB Create .CAB files
    MAPISEND Send email from the command line
    MBSAcli Baseline Security Analyzer
    MEM Display memory usage
    MD Create new folders•
    MKLINK Create a symbolic link (linkd) •
    MODE Configure a system device COM/LPT/CON
    MORE Display output, one screen at a time
    MOUNTVOL Manage a volume mount point
    MOVE Move files from one folder to another•
    MOVEUSER Move a user from one domain to another
    MSG Send a message
    MSIEXEC Microsoft Windows Installer
    MSINFO32 System Information
    MSTSC Terminal Server Connection (Remote Desktop Protocol)

    NET Manage network resources
    NETDOM Domain Manager
    NETSH Configure Network Interfaces, Windows Firewall & Remote access
    NBTSTAT Display networking statistics (NetBIOS over TCP/IP)
    NETSTAT Display networking statistics (TCP/IP)
    NLSINFO Display locale information (reskit).
    NLTEST Network Location Test (AD)
    NOW Display the current Date and Time
    NSLOOKUP Name server lookup
    NTBACKUP Backup folders to tape
    NTDSUtil Active Directory Domain Services management
    NTRIGHTS Edit user account rights

    OPENFILES Query or display open files

    PATH Display or set a search path for executable files•
    PATHPING Trace route plus network latency and packet loss
    PAUSE Suspend processing of a batch file and display a message•
    PERMS Show permissions for a user
    PERFMON Performance Monitor
    PING Test a network connection
    POPD Return to a previous directory saved by PUSHD•
    PORTQRY Display the status of ports and services
    POWERCFG Configure power settings
    PRINT Print a text file
    PRINTBRM Print queue Backup/Recovery
    PRNCNFG Configure or rename a printer
    PRNMNGR Add, delete, list printers and printer connections
    PROMPT Change the command prompt•
    PsExec Execute process remotely
    PsFile Show files opened remotely
    PsGetSid Display the SID of a computer or a user
    PsInfo List information about a system
    PsKill Kill processes by name or process ID
    PsList List detailed information about processes
    PsLoggedOn Who's logged on (locally or via resource sharing)
    PsLogList Event log records
    PsPasswd Change account password
    PsPing Measure network performance
    PsService View and control services
    PsShutdown Shutdown or reboot a computer
    PsSuspend Suspend processes
    PUSHD Save and then change the current directory•

    QGREP Search file(s) for lines that match a given pattern
    Query Process / QPROCESS Display processes
    Query Session / QWinsta Display all sessions (TS/Remote Desktop)
    Query TermServer /QAppSrv List all servers (TS/Remote Desktop)
    Query User / QUSER Display user sessions (TS/Remote Desktop)

    RASDIAL Manage RAS connections
    RASPHONE Manage RAS connections
    RECOVER Recover a damaged file from a defective disk
    REG Registry: Read, Set, Export, Delete keys and values
    REGEDIT Import or export registry settings
    REGSVR32 Register or unregister a DLL
    REGINI Change Registry Permissions
    REM Record comments (remarks) in a batch file•
    REN Rename a file or files•
    REPLACE Replace or update one file with another
    Reset Session Delete a Remote Desktop Session
    RD Delete folder(s)•
    RMTSHARE Share a folder or a printer
    ROBOCOPY Robust File and Folder Copy
    ROUTE Manipulate network routing tables
    RUN Start | RUN commands
    RUNAS Execute a program under a different user account
    RUNDLL32 Run a DLL command (add/remove print connections)

    SC Service Control
    SCHTASKS Schedule a command to run at a specific time
    SET Display, set, or remove session environment variables•
    SETLOCAL Control the visibility of environment variables•
    SETX Set environment variables
    SFC System File Checker
    SHARE List or edit a file share or print share
    ShellRunAs Run a command under a different user account
    SHIFT Shift the position of batch file parameters•
    SHORTCUT Create a windows shortcut (.LNK file)
    SHUTDOWN Shutdown the computer
    SLEEP Wait for x seconds
    SLMGR Software Licensing Management (Vista/2008)
    SORT Sort input
    START Start a program, command or batch file•
    STRINGS Search for ANSI and UNICODE strings in binary files
    SUBINACL Edit file and folder Permissions, Ownership and Domain
    SUBST Associate a path with a drive letter
    SYSMON Monitor and log system activity to the Windows event log
    SYSTEMINFO List system configuration

    TAKEOWN Take ownership of a file
    TASKLIST List running applications and services
    TASKKILL End a running process
    TELNET Communicate with another host using the TELNET protocol
    TIME Display or set the system time•
    TIMEOUT Delay processing of a batch file
    TITLE Set the window title for a CMD.EXE session•
    TLIST Task list with full path
    TOUCH Change file timestamps
    TRACERT Trace route to a remote host
    TREE Graphical display of folder structure
    TSDISCON Disconnect a Remote Desktop Session
    TSKILL End a running process
    TSSHUTDN Remotely shut down or reboot a terminal server
    TYPE Display the contents of a text file•
    TypePerf Write performance data to a log file

    VER Display version information•
    VERIFY Verify that files have been saved•
    VOL Display a disk label•

    WAITFOR Wait for or send a signal
    WEVTUTIL Clear event logs, enable/disable/query logs
    WHERE Locate and display files in a directory tree
    WHOAMI Output the current UserName and domain
    WINDIFF Compare the contents of two files or sets of files
    WINRM Windows Remote Management
    WINRS Windows Remote Shell
    WMIC WMI Commands
    WUAUCLT Windows Update

    XCACLS Change file and folder permissions
    XCOPY Copy files and folders
    :: Comment / Remark •

    Commands marked • are Internal commands only available within the CMD shell.
    All other commands (not marked with •) are external commands.
    External commands may be used under the CMD shell, PowerShell, or directly from START-RUN.

    See also: a categorized list of Windows CMD commands
    Microsoft Help pages: XP , 2003 Server, 2008 Server, Windows 7/Server 2012 / Technology
    Discussion forum, Links to other sites, books etc...


    P.S.: Wer die Erläuterungen in Deutsch haben will, ist hier gut bedient:
    pcwelt.de/ratgeber/Die-wichtig…-fuer-Windows-206699.html
    de.scribd.com/doc/36883561/Windows-Cmd-Befehle-in-german
    Videoanleitung zum CMD-Line Help-Befehl
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • PPS: Für Admins und Poweruser gibt es eine auf Dot.NET basierende Administrationsebene namens Powershell (mittlerweile Version 4.0), die in Windows-7 und folgende bereits eingebaut ist (sonst kann man sie von den MSDL-Microsoftseiten laden). Hier das Online-Tutorial dazu.
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. Gauss'sche Fehlerfunktion Erf() und Komplementärfehlerfunktion ErfC(x)
    ================================================
    Im Bereich Statistik hat sich wegen ihrer Verwandtschaft zur Gauss'schen Glockenkurve ("Normalverteilungsfunktion") in manchen speziellente Teilgebieten (etwa in der Risiko- und Ausfallsanalyse) die etwas leichter zu berechnende Fehlerfunktion Erf(x) etabliert. Auch die Komplementärfunktion ErfC(x) = 1-Erf(x) hat hier Eingang gefunden (Hinweis: An Stelle x=0 ist der Wert der Komplementärfunktion 1-0 = 1, die Funktion ist also DOCH NICHT zentralsymmetrisch zur Erf(x)-Funktion! Nach diesem "Fehler" hatte ich mich zuerst noch krumm und bucklig gesucht, es war aber gar keiner !)
    Gruss

    P.S.: In FORTRAN stehen diese Funktionen übrigens von Anfang an als Bibliotheksfunktionen zur Verfügung. Da soll doch XProfan keinesfalls nachstehen, oder?

    Brainfuck-Quellcode

    1. WindowTitle upper$("Gauss'sche Fehlerfunktionen Erf(x) und Erfc(x)")
    2. ' Q: http://de.wikipedia.org/wiki/Fehlerfunktion#Numerische_Berechnung
    3. ' Umsetzung in XPRofan (CL) CopyLeft 2014-10 by P.Specht, Wien
    4. ' Keine wie auch immer geartetet Gewähr!
    5. Proc Erf :parameters x!
    6. ' Approximation von Erf() für den kompletten Wertebereich, maximaler Fehler 1.2E-7
    7. declare t!,t2!,t3!,t4!,t5!,t6!,t7!,t8!,t9!,tau!
    8. t!=1/(1+0.5*abs(x!)):t2!=sqr(t!):t3!=t!*t2!:t4!=t2!*t2!
    9. t5!=t3!*t2!:t6!=t3!*t3!:t7!=t4!*t3!:t8!=t4!*t4!:t9!=t5!*t4!
    10. tau!=t!*exp(-sqr(x!)-1.26551223+1.00002368*t!+0.37409196*t2!+0.09678418*t3!-0.18628806*t4!+\
    11. 0.27886807*t5!-1.13520398*t6!+1.48851587*t7!-0.82215223*t8!+0.17087277*t9!)
    12. case x!>=0:return 1-tau!
    13. return tau!-1
    14. endproc
    15. proc Erfc:parameters x! ' Complementäre Fehlerfunktion 1-Erf(x), nicht zentralsymmetrisch!
    16. return 1-Erf(x!)
    17. endproc
    18. WindowStyle 24:Window 0,0-%maxx,%maxy-40
    19. var xh&=width(%hwnd)\2:var yh&=height(%hwnd)\2:var x!=0
    20. var zoomx!=%maxx/1366:var zoomy!=%maxy/768
    21. noamoi:
    22. Cls
    23. 'Achsen
    24. usepen 2,1,rgb(0,0,0):line 0,yh&-2*xh&,yh&:line xh&,0-xh&,2*yh&
    25. 'Beschriftung
    26. usefont "ARIAL",60*zoomy!,30*zoomx!,0,0,0:textcolor rgb(200,0,200),-1
    27. drawtext 250*zoomx!,30*zoomy!,"Erfc(x)"
    28. textcolor rgb(200,0,0),-1:drawtext 250*zoomx!,430*zoomy!,"Erf(x)":textcolor 0,-1
    29. drawtext 650*zoomx!,1*zoomy!,"2":drawtext 650*zoomx!,120*zoomy!,"1"
    30. drawtext 650*zoomx!,290*zoomy!,"0"
    31. drawtext 650*zoomx!,450*zoomy!,"-1":drawtext 250*zoomx!,320*zoomy!,"-3.5"
    32. drawtext 950*zoomx!,320*zoomy!,"3.5"
    33. 'Asymptotenlinien
    34. usepen 0,2,rgb(0,180,0)
    35. line 0,(yh&-yh&*0.5*erf(-5)) - 2*xh&,yh&-yh&*0.5*erf(-5)
    36. line 0,(yh&-yh&*0.5*erf( 5)) - 2*xh&,yh&-yh&*0.5*erf( 5)
    37. 'Darstellung von ERF()
    38. usepen 0,4,rgb(200,0,0):Moveto 0,yh&-yh&*0.5*erf(-3.7)
    39. whileloop -xh&,xh&,1 : x!=&Loop*3.7/xh&
    40. Lineto xh&+x!*xh&/3.7,yh&-yh&*0.5*erf(x!)
    41. endwhile
    42. 'Darstellung der Komplementärfunktion ErfC(x). Sie ist NICHT zentralsymmetrisch!!!
    43. usepen 0,4,rgb(200,0,200):Moveto 0,yh&-yh&*0.5*erfc(-3.7)
    44. whileloop -xh&,xh&,1 : x!=&Loop*3.7/xh&
    45. Lineto xh&+x!*xh&/3.7 , yh&-yh&*0.5*erfc(x!)
    46. endwhile
    47. 'Ausgabe der Berechnungswerte zum Vergleich mit nachstender Verifizierungstabelle
    48. waitinput 10000:font 2
    49. locate 1,1:Set("decimals",7)
    50. whileloop 0,3500,50:x!=&Loop/1000
    51. print x!,erf(x!),erfc(x!)
    52. case %csrlin>50:waitinput 20000
    53. endwhile
    54. beep
    55. waitinput 20000
    56. GOTO "noamoi"
    57. END
    58. ' Tabelle zur Verifizierung der Formel:
    59. '-----------------------------------------------------------------
    60. ' x erf(x) erfc(x) ! x erf(x) erfc(x)
    61. '---------------------------------!-------------------------------
    62. ' 0.00 0.0000000 1.0000000 1.30 0.9340079 0.0659921
    63. ' 0.05 0.0563720 0.9436280 1.40 0.9522851 0.0477149
    64. ' 0.10 0.1124629 0.8875371 1.50 0.9661051 0.0338949
    65. ' 0.15 0.1679960 0.8320040 1.60 0.9763484 0.0236516
    66. ' 0.20 0.2227026 0.7772974 1.70 0.9837905 0.0162095
    67. ' 0.25 0.2763264 0.7236736 1.80 0.9890905 0.0109095
    68. ' 0.30 0.3286268 0.6713732 1.90 0.9927904 0.0072096
    69. ' 0.35 0.3793821 0.6206179 2.00 0.9953223 0.0046777
    70. ' 0.40 0.4283924 0.5716076 2.10 0.9970205 0.0029795
    71. ' 0.45 0.4754817 0.5245183 2.20 0.9981372 0.0018628
    72. ' 0.50 0.5204999 0.4795001 2.30 0.9988568 0.0011432
    73. ' 0.55 0.5633234 0.4366766 2.40 0.9993115 0.0006885
    74. ' 0.60 0.6038561 0.3961439 2.50 0.9995930 0.0004070
    75. ' 0.65 0.6420293 0.3579707 2.60 0.9997640 0.0002360
    76. ' 0.70 0.6778012 0.3221988 2.70 0.9998657 0.0001343
    77. ' 0.75 0.7111556 0.2888444 2.80 0.9999250 0.0000750
    78. ' 0.80 0.7421010 0.2578990 2.90 0.9999589 0.0000411
    79. ' 0.85 0.7706681 0.2293319 3.00 0.9999779 0.0000221
    80. ' 0.90 0.7969082 0.2030918 3.10 0.9999884 0.0000116
    81. ' 0.95 0.8208908 0.1791092 3.20 0.9999940 0.0000060
    82. ' 1.00 0.8427008 0.1572992 3.30 0.9999969 0.0000031
    83. ' 1.10 0.8802051 0.1197949 3.40 0.9999985 0.0000015
    84. ' 1.20 0.9103140 0.0896860 3.50 0.9999993 0.0000007
    Alles anzeigen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. Inverse Normalverteilung noch genauer
    ============================
    In Teil VI, Beitrag 144 unserer Algorithmenserie hatten wir eine Umkehrfunktion für die einseitige Summenverteilung der Gauss'schen Glockenfunktion gefunden, Genauigkeit 6-7 Stellen. Nun: Es geht noch genauer, solange die jeweilige Maschinenpräzision mitspielt: Die nachstehende Variante ist durch Aufteilung auf zwei unterschiedliche Reihenentwicklungen für die Bereiche um die Mitte und an den Flügeln der Glockenkurve garantiert auf 9 Stellen genau, also im ppm-(parts per million)-Bereich. Und trotzdem halbwegs flott! Naja, wer's braucht ;-) ...
    Gruss

    Quellcode

    1. WindowTitle "Inverse Normalverteilung"
    2. ' Fortran Source: ren-raw chen, rutgers business school: Normal Distribution Inversed
    3. ' Transposed to XProfan-11.2a (CL) 2014-10 by P. Specht, Wien
    4. ' No Warranty whatsoever! Keine wie auch immer geartete Gewähr!
    5. WindowStyle 24:set("decimals",17):declare p$:CLS
    6. doitagain:
    7. Print " Gewünschte Eintrittswahrscheinlichkeit [%]?: ";:input p$:case p$="":end
    8. print InvNormDist(val(p$)/100);" * Sigma":if %csrlin>40:waitinput:cls:endif
    9. goto "doitagain"
    10. proc InvNormDist :parameters p!
    11. if p!<0:Print "*** Error: Negative Wahrscheinlichkeiten?***":return -999999:beep:endif
    12. if p!>0.99999999999999994:Print "*** Abs.Sicherheit nur bei Abdeckung bis +Inf!***":return 10^53:endif
    13. if p!<val("1E-53"):Print "*** Sicher kein Eintritt? Nur bei -Inf!***":return val("-1E53"):endif
    14. ' Source: ren-raw chen, rutgers business school: ' normal distribution inversed
    15. ' (translated from http://home.online.no/~pjacklam/notes/invnorm by john herrero)
    16. declare p_low!,p_high!, z!,q!,r!
    17. declare a1!,a2!,a3!,a4!,a5!,a6!, b1!,b2!,b3!,b4!,b5!
    18. declare c1!,c2!,c3!,c4!,c5!,c6!, d1!,d2!,d3!,d4!
    19. a1!=-39.6968302866538:a2!=220.946098424521:a3!=-275.928510446969:a4!=138.357751867269
    20. a5!=-30.6647980661472:a6!=2.50662827745924:b1!=-54.4760987982241:b2!=161.585836858041
    21. b3!=-155.698979859887:b4!=66.8013118877197:b5!=-13.2806815528857:c1!=-0.00778489400243029
    22. c2!=-0.322396458041136:c3!=-2.40075827716184:c4!=-2.54973253934373
    23. c5!=4.37466414146497:c6!=2.93816398269878:d1!=0.00778469570904146
    24. d2!=0.32246712907004:d3!=2.445134137143:d4!=3.75440866190742:p_low!=0.02425:p_high!=1-p_low!
    25. case p! <p_low!: goto "g201"
    26. case p!>=p_low!: goto "g301"
    27. g201:
    28. q!=sqrt(-2*ln(p!))
    29. z!=(((((c1!*q!+c2!)*q!+c3!)*q!+c4!)*q!+c5!)*q!+c6!)/ \
    30. ((((d1!*q!+d2!)*q!+d3!)*q!+d4!)*q!+1)
    31. goto "g204"
    32. g301:
    33. case (p!>=p_low!) and (p!<p_high!): goto "g202"
    34. case p!>p_high!: goto "g302"
    35. g202:
    36. q!=p!-0.5
    37. r!=q!*q!
    38. z!=(((((a1!*r!+a2!)*r!+a3!)*r!+a4!)*r!+a5!)*r!+a6!)*q! / \
    39. (((((b1!*r!+b2!)*r!+b3!)*r!+b4!)*r!+b5!)*r!+1)
    40. goto "g204"
    41. g302:
    42. case (p!>p_high!) and (p!<1): goto "g203"
    43. g203:
    44. q!=sqrt(-2*ln(1-p!))
    45. z!=-(((((c1!*q!+c2!)*q!+c3!)*q!+c4!)*q!+c5!)*q!+c6!) / \
    46. ((((d1!*q!+d2!)*q!+d3!)*q!+d4!)*q!+1)
    47. g204:
    48. return z!
    49. endproc
    Alles anzeigen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. Normalverteilung via Erf-Funktion
    ========================
    Auf Basis der Gauss'schen Fehlerfunktion Erf( ) kann man eine recht genaue Approximation der Normalverteilung angeben, die sonst üblicherweise aus Tabellen abgelesen wird. Alternativ könnte man zwar numerisch über die Dichtefunktion (Glockenkurve) integrieren, aber bei ähnlicher Genauigkeit dauert das bereits deutlich länger.
    Gruss

    P.S.: Scheint zu klappen, aber natürlich ohne Gewähr!

    Quellcode

    1. WindowTitle "Näherung des Normalverteilungsintegrals (Fläche unter der Gauss'schen Glockenkurve)"
    2. set("decimals",7):font 2:declare z!,x!,mu!,sigma!,a!,b!
    3. CLS
    4. ' Bsp.: Zweiseitige Berechnung für: (mu-sigma) < x < (mu+sigma)
    5. mu!=0:sigma!=1 ' von x=-1 bis x=1
    6. x!=-1 : a!=ZNorm(x!,mu!,sigma!)
    7. x!= 1 : b!=ZNorm(x!,mu!,sigma!)
    8. print "\n Erf-basiert: "; Phi(b!)-Phi(a!)
    9. waitinput
    10. END
    11. proc Phi :parameters z!
    12. return Erf(z!/sqrt(2))/2
    13. endproc
    14. Proc Erf :parameters x!
    15. ' Approximation von Erf() für den kompletten Wertebereich, maximaler Fehler 1.2E-7
    16. declare t!,t2!,t3!,t4!,t5!,t6!,t7!,t8!,t9!,tau!
    17. t!=1/(1+0.5*abs(x!)):t2!=sqr(t!):t3!=t!*t2!:t4!=t2!*t2!
    18. t5!=t3!*t2!:t6!=t3!*t3!:t7!=t4!*t3!:t8!=t4!*t4!:t9!=t5!*t4!
    19. tau!=t!*exp(-sqr(x!)-1.26551223+1.00002368*t!+0.37409196*t2!+0.09678418*t3!-0.18628806*t4!+\
    20. 0.27886807*t5!-1.13520398*t6!+1.48851587*t7!-0.82215223*t8!+0.17087277*t9!)
    21. case x!>=0:return 1-tau!
    22. return tau!-1
    23. endproc
    24. proc ZNorm :parameters x!,mu!,sigma!
    25. var z!=(x!-mu!)/sigma!
    26. return z!
    27. endproc
    Alles anzeigen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. Eulersche Gamma-Funktion
    ====================
    Wir kennen bereits die Funktion "Fakultät" (auch "Faktorielle" genannt). Dummerweise ist sie nur für positive GANZE Zahlen definiert: 5 ! = 1 * 2 * 3 * 4 * 5 = 120. Was aber ist z.B. 5.2 ! Wie soll man das rechnen?
    Naja, auch darüber hat sich Herr Leonard Euler schon A.D. 1729 Gedanken gemacht und fand eine Funktion, die ähnlich wie die Fakultät funktioniert, aber im gesamten (hier: positiven) Zahlenbereich Ergebnisse liefert: Gamma( x+1 ) ergibt dann genau x !. Will man also die Fakultät von 5.2 wissen, berechne man die Gamma-Funktion für 6.2: Die Antwort: 5.2! = Gamma(6.2) = 169.406099462... Klar, sie mußte ja größer als 120 und kleiner als 6!=720 sein...
    Verwendet wird das heute z.B. in der Versicherungsmathematik zur Bestimmung kleiner und mittlerer Schadenswahrscheinlichkeiten oder in der Nachrichtentechnik, wo sie die Grundlage der sog. Gammaverteilung darstellt, die in Verkehrsauslastungsgleichungen (Netzwerkkapazitäts-Dimensionierung) zur Anwendung kommt. Na bitte, das braucht man doch täglich, oder? ;-)
    Gruss

    P.S.: Wer die Ausgaben des Progrämmchens kontrollieren will, kann im Google-Eingabefeld einfach ' 5.2 ! ' eingeben!

    Brainfuck-Quellcode

    1. WindowTitle "Gamma-Funktion für Reelle Werte > 0 "
    2. ' Fortran90-Source: http://jean-pierre.moreau.pagesperso-orange.fr/Fortran/gamma_f90.txt
    3. ' Migriert nach XProfan11.2a 2014-10 by P.Specht, Wien; Ohne jedwede Gewähr!
    4. ' Details: http://de.wikipedia.org/wiki/Gammafunktion bzw.
    5. ' http://en.wikipedia.org/wiki/Stirling%27s_approximation#Versions_suitable_for_calculators
    6. WindowStyle 24:font 2:randomize
    7. Window %maxx/4,%maxy/4-%maxx/2,%maxy/2
    8. Main:
    9. Test_Gamma
    10. Waitinput
    11. End
    12. '*********************************************
    13. '* Program to demonstrate the Gamma Function *
    14. '* ----------------------------------------- *
    15. '* Reference: *
    16. '* "Numerical Recipes, by W.H. Press, B.P. *
    17. '* Flannery, S.A. Teukolsky and T. Vetter- *
    18. '* ling, Cambridge University Press, 1986" *
    19. '* [BIBLI 08]. *
    20. '* ----------------------------------------- *
    21. '* SAMPLE RUN: *
    22. '* *
    23. '* X Gamma(X) *
    24. '* ------------------------- *
    25. '* 0.5000 1.772453851 *
    26. '* 1.0000 1.000000000 *
    27. '* 1.5000 0.886226925 *
    28. '* 2.0000 1.000000000 *
    29. '* 2.5000 1.329340388 *
    30. '* 3.0000 2.000000000 *
    31. '* 3.5000 3.323350970 *
    32. '* 4.0000 5.999999999 *
    33. '* 4.5000 11.631728395 *
    34. '* 5.0000 23.999999996 *
    35. '* *
    36. '*********************************************
    37. PROC Test_Gamma
    38. declare x!,y!
    39. declare i&
    40. print
    41. print " X Gamma(X) "
    42. print " __________________________________ "
    43. x!=0
    44. whileloop 100
    45. x!=x!+0.1
    46. y! = Gamma(x!)
    47. Print "\n";format$(" ##0.0####",x!),tab(14);format$("%g",round(y!,15))
    48. case %csrlin>20:waitinput
    49. endwhile
    50. print
    51. waitinput
    52. endproc
    53. proc Gamma :parameters xx!
    54. '*******************************************
    55. '* FUNCTION GAMMA(X) *
    56. '* --------------------------------------- *
    57. '* Returns the value of Gamma(x) in double *
    58. '* precision as EXP(LN(GAMMA(X))) for X>0. *
    59. '*******************************************
    60. case xx!<=0:return 0
    61. declare cof![6],x!,tmp!,ser!,stp!,half!,one!,fpf!,j&,gamma!
    62. cof![1]=76.18009173:cof![2]=-86.50532033:cof![3]=24.01409822
    63. cof![4]=-1.231739516:cof![5]=0.00120858003:cof![6]=-0.00000536382
    64. stp!=2.50662827465:half!=0.5:one!=1.0:fpf!=5.5
    65. x!=xx!-one!
    66. tmp!=x!+fpf!
    67. tmp!=(x!+half!)*LN(tmp!)-tmp!
    68. ser!=one!
    69. whileloop 6:j&=&Loop
    70. x!=x!+one!
    71. ser!=ser!+cof![j&]/x!
    72. endwhile
    73. Gamma! = EXP(tmp!+LN(stp!*ser!))
    74. return Gamma!
    75. endproc
    Alles anzeigen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. Rätsel
    =======
    Das nachstehende berühmte Rätsel stammt angeblich von Albert Einstein, und es sollen nur 2% aller Menschen im Stande sein es zu lösen. Hier die Urversion von http://de.wikipedia.org in Übersetzung des Originals aus den Jahr 1962.

    DAS ZEBRARÄTSEL

    _0. Es gibt fünf Häuser.
    _1. Der Engländer wohnt im roten Haus.
    _2. Der Spanier hat einen Hund.
    _3. Kaffee wird im grünen Haus getrunken.
    _4. Der Ukrainer trinkt Tee.
    _5. Das grüne Haus ist direkt rechts vom weißen Haus.
    _6. Der Raucher von Altem-Gold-Zigaretten hält Schnecken als Haustiere.
    _7. Die Zigaretten der Marke Kools werden im gelben Haus geraucht.
    _8. Milch wird im mittleren Haus getrunken.
    _9. Der Norweger wohnt im ersten Haus.
    10. Der Mann, der Chesterfields raucht, wohnt neben dem Mann mit dem Fuchs.
    11. Die Marke Kools wird geraucht im Haus neben dem Haus mit dem Pferd.
    12. Der Lucky-Strike-Raucher trinkt am liebsten Orangensaft.
    13. Der Japaner raucht Zigaretten der Marke Parliaments.
    14. Der Norweger wohnt neben dem blauen Haus.

    Folgene Fragen sind zu beantworten: A) Wer trinkt Wasser? B) Wem gehört das Zebra?
    _____
    Zum Zweck der genaueren Klärung muss hinzugefügt werden, dass jedes der Häuser in einer anderen Farbe gestrichen ist und jeder Bewohner eine andere Nationalität hat, ein anderes Haustier besitzt, ein unterschiedliches Getränk trinkt und eine andere Sorte amerikanischer Zigaretten raucht. Noch etwas: In Hinweis 5 bedeutet rechts, dass das Haus vom Betrachter aus gesehen rechts ist.


    P.S.: Frage: Wie könnte ein XProfan-Programm aussehen, daß das Rätsel in vernünftiger Zeit löst?
    Hinweis: Algorithmensammlung zum Problem in diversen Programmiersprachen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

  • Abt. Missglückte Rätsel-Lösungshilfe
    =======================
    Spontanvariante für ein elektronisches Formular, daß bei der Lösung des obigen Rätsels helfen soll. Daß ich leider nicht zu den 2% der Leute gehöre, die sowas spontan richtig anpacken, ist damit öffentlich dokumentiert. Die Lösungsraster in diversen Logelei-Rätselheften sehen jedenfalls anders aus, dort werden + und - Zeichen in Kästchen gesetzt. Aber naja, im Bildformat 1366 x 768 sieht das folgende Mistding bei geeigneter Systemschrift (in Win7-64 anders als in anderen Windows-Versionen!) halbwegs manierlich aus, auch wenn es sonst nicht viel kann.
    Verlegener Gruss :oops:

    P.S. Tipp: In die Felder klicken!

    Quellcode

    1. WindowTitle "ZEBRARÄTSEL-FORMULAR"
    2. Windowstyle 24:Window 0,0-%maxx*0.8,%maxy-40:font 2
    3. 'Q: http://de.wikibooks.org/wiki/Algorithmensammlung:_Spezielle_Probleme:_Das_Zebrar%C3%A4tsel
    4. ' Es gibt fünf Häuser mit je einer anderen Farbe.
    5. declare HausFarbe$[],h&:HausFarbe$[]=explode("rot grün weiß gelb blau"," ")
    6. ' In jedem Haus wohnt eine Person anderer Nationalität.
    7. declare PersonNationalität$[],p&:PersonNationalität$[]=Explode("Brite Schwede Däne Norweger Deutscher"," ")
    8. ' Jeder Hausbewohner bevorzugt ein bestimmtes Getränk,
    9. declare Getränk$[],g&:Getränk$[]=Explode("Tee Kaffee Milch Bier Wasser"," ")
    10. ' raucht eine bestimmte Zigarettenmarke ...
    11. declare Zigarettenmarke$[],z&:Zigarettenmarke$[]=Explode("Pall_Mall Dunhill Marlboro Winfield Rothmans"," ")
    12. 'und hält ein bestimmtes Haustier.
    13. 'Zielfrage des ZEBRA-Rätsels: Welcher Person (Nationalität) gehört der FISCH?
    14. declare Haustier$[],t&:Haustier$[]=explode("Hund Vogel Katze Pferd ZEBRA FISCH"," ")
    15. 'Keine der fünf Personen trinkt das gleiche Getränk, raucht die gleichen Zigaretten
    16. 'oder hält das gleiche Tier wie seine Nachbarn.>> 1:1 relations!
    17. declare AbsoluteStandortbeziehungen$[],a&
    18. AbsoluteStandortbeziehungen$[]=explode("erstes zweites mittleres viertes fünftes"," ")
    19. declare RelativeStandortbeziehungen$[],r&
    20. RelativeStandortbeziehungen$[]=explode("links rechts neben Nachbar definitiv"," ")
    21. declare Kategorien$[],c&:Kategorien$[]=explode("PersonNationalität HausFarbe Getränk "+\
    22. "Zigarettenmarke Haustier AbsoluteStandortbeziehung RelativeStandortbeziehung"," ")
    23. var n&=sizeof(Kategorien$[])
    24. declare RELATIONEN$[n&,5],i&,j&,k&
    25. declare mx&,my&,ix!,iy!,ix&,iy&
    26. WhileLoop 0,n&-1:Relationen$[&Loop,0]=kategorien$[&Loop]:endwhile
    27. WhileLoop 0,4:Relationen$[0,&Loop+1]=PersonNationalität$[&Loop]:endwhile
    28. ' Tableau darstellen
    29. whileLoop 0,n&-1:i&=&Loop
    30. whileLoop 0,5:j&=&Loop
    31. whileloop 0,5:k&=&Loop
    32. locate 3+3*i&,35+14*k&:print "|";
    33. locate 4+3*i&,35+14*k&:print "|";
    34. locate 5+3*i&,35+14*k&:print "|";
    35. endwhile
    36. locate 4+3*i&, 4+14*j&+20*((i&=0)*(j&>0)):print Relationen$[i&,j&]
    37. endwhile
    38. print " "+mkstr$("-",102):print
    39. endwhile
    40. print
    41. print tab(52);"HINWEISE"
    42. print
    43. print tab(30);"Es gibt 5 Häuser."
    44. print tab(30);"Der Brite lebt im roten Haus."
    45. print tab(30);"Der Schwede hält einen Hund."
    46. print tab(30);"Der Däne trinkt gern Tee.":print
    47. print tab(30);"Das grüne Haus steht direkt links neben dem weißen Haus."
    48. print tab(30);"Der Besitzer des grünen Hauses trinkt Kaffee."
    49. print tab(30);"Die Person, die Pall Mall raucht, hält einen Vogel."
    50. print tab(30);"Der Mann, der im mittleren Haus wohnt, trinkt Milch.":print
    51. print tab(30);"Der Besitzer des gelben Hauses raucht Dunhill."
    52. print tab(30);"Der Norweger wohnt im ersten Haus."
    53. print tab(30);"Der Marlboro-Raucher wohnt neben dem, der eine Katze hält."
    54. print tab(30);"Der Mann, der ein Pferd hält, wohnt neben dem, der Dunhill raucht.":print
    55. print tab(30);"Der Winfield-Raucher trinkt gern Bier."
    56. print tab(30);"Der Norweger wohnt neben dem blauen Haus."
    57. print tab(30);"Der Deutsche raucht Rothmans."
    58. print tab(30);"Der Marlboro-Raucher hat einen Nachbarn, der Wasser trinkt."
    59. Repeat
    60. ix&=-1:iy&=-1 : waitinput :mx&=%mousex:my&=%mousey
    61. locate 1,1:print mx&,my&;" "
    62. ix!=((mx&-276)/((838-276)/5)) : iy!=((my&- 62)/((295- 60)/6))
    63. if (ix!>=0) and (ix!<5) and (iy!>=0) and (iy!<6)
    64. ix&=int((mx&-276)/((838-276)/5)) : iy&=int((my&- 62)/((295- 60)/6))
    65. print ix&,iy&," "
    66. Advance ix&,iy&
    67. else :print " "
    68. endif
    69. UNTIL %Key=27
    70. END
    71. Proc Advance :parameters ix&,iy&
    72. select iy&
    73. caseof 0 :inc h&:h&=h& mod 6:locate 7+3*iy&, 40+14*ix&
    74. if h&=5:print " ":else :print HausFarbe$[h&];" ":endif
    75. caseof 1 :inc g&:g&=g& mod 6:locate 7+3*iy&, 40+14*ix&
    76. if g&=5:print " ":else :print Getränk$[g&];" ":endif
    77. caseof 2 :inc z&:z&=z& mod 6:locate 7+3*iy&, 38+14*ix&
    78. if z&=5:print " ":else :print Zigarettenmarke$[z&];" ":endif
    79. caseof 3 :inc t&:t&=t& mod 6:locate 7+3*iy&, 39+14*ix&
    80. if t&=5:print " ":else :print Haustier$[t&];" ":endif
    81. caseof 4 :inc a&:a&=a& mod 6:locate 7+3*iy&, 38+14*ix&
    82. if a&=5:print " ":else :print AbsoluteStandortbeziehungen$[a&];" ":endif
    83. caseof 5 :inc r&:r&=r& mod 6:locate 7+3*iy&, 37+14*ix&
    84. if r&=5:print " ":else :print RelativeStandortbeziehungen$[r&];" ":endif
    85. otherwise :print " *** Unspecified Error! *** "
    86. endselect
    87. endproc
    88. END
    Alles anzeigen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Schnipsel aus - Abt. Inverse Normalverteilung noch genauer

    Quellcode

    1. g202:
    2. q!=p!-0.5
    3. r!=q!*q!
    4. z!=(((((a1!*r!+a2!)*r!+a3!)*r!+a4!)*r!+a5!)*r!+a6!)*q! / \
    5. (((((b1!*r!+b2!)*r!+b3!)*r!+b4!)*r!+b5!)*r!+1)
    6. goto "g204"
    7. g302:
    8. case (p!>p_high!) and (p!<1): goto "g203"
    9. g203:
    10. q!=sqrt(-2*ln(1-p!))
    11. z!=-(((((c1!*q!+c2!)*q!+c3!)*q!+c4!)*q!+c5!)*q!+c6!) / \
    12. ((((d1!*q!+d2!)*q!+d3!)*q!+d4!)*q!+1)
    Alles anzeigen


    Bei g302 wird nur bei Bedingung nach g203 verzweigt - und danach landet man trotzdem genau dort. Ist das wirklich so gewollt? - Ist mir beim Überfliegen des Source aufgefallen.
    Programmieren, das spannendste Detektivspiel der Welt.
  • Danke für den Hinweis! Laut Fortran-Vorlage home.online.no/~pjacklam/notes/invnorm/impl/chen/dinvnorm.f wurde das von mir 1:1 in XProfan übersetzt. Das hier sinnlose Konstrukt dürfte bei der Übersetzung des Autors aus der VBasic-Vorlage von John Herrero, home.online.no/~pjacklam/notes…pl/herrero/inversecdf.txt nach Fortran-90 passiert sein. Die VisualBasic Source enthält eine Menge ELSEIF-Statements, die in Fortran nicht ganz einfach umsetzbar scheinen. Da VBasic aber oft Elemente wie CDEC-definierte 10-Byte-Variablen etc. enthält, die keine Entsprechung in XProfan haben, nehme ich lieber Fortran-Varianten als Übersetzungsbasis. Da wollten wohl gleich zwei Übersetzer auf Nummer Super-sicher gehen :oops:
    Gruss

    P.S.: Schwacher Trost, aber: Es scheint zumindest das richtige Ergebnis rauszukommen. Die Fortran-Übersetzung war generell nicht sehr gut, das hier könnte man ja sicher auch eleganter machen:

    case p! <p_low!: goto "g201"
    case p!>=p_low!: goto "g301"
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. Hinweis
    ========
    Die Freeware-Seiten "Source-Of-Profan (SOP)" von Fa. L-Prog stellen derzeit noch immer das Code-Verwaltungsprogramm SOP zur Verfügung, ein Vermerk weist aber darauf hin, daß die Betreuung der Seite am 4. Oktober 2011 :!: eingestellt wurde! Die Datenbasis mit allen Sourccodes und Programmstücken gibts derzeit aber noch, und zwar als Download am Stück - man muss also nicht alle 211 Zip-Dateien gesondert laden!
    Gruss
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3
  • Abt. Vergleich 8-byte Float-based-Integers (sFLINT) mit echten 8-byte INT
    ==============================================
    sFLINT können in Profanversionen unter X2 als (schwacher) Ersatz für echte 8-byte Quadword unsigned Integers dienen. Statt 19 Dezimalzahl-Vollstellen (0-9) können sie nur 15 Vollstellen abdecken. Sie nutzen von den verfügbaren 64 bit nur 53 + Vorzeichen, also 6 3/4 byte, der Rest wird für den hier sinnlosen Exponenten "verbraten". Vergleicht man den Zahlenbereich, werden die Unterschiede besonders deutlich:

    Brainfuck-Quellcode

    1. 32-bit sInt: _____________ -2,147,483,648 ............... +2,147,483,648
    2. 53 bit sFlInt: ___ -9,007,199,254,740,992 ....... +9,007,199,254,740,991
    3. _ 8-byte sINT: -9,223,372,036,854,775,808 ... +9,223,372,036,854,775,807
    4. _ 8-byte uInt: ________________________ 0 ... 18,446,744,073,709,551,615

    Gruss

    P.S.: Diese 64bit-uInt beziehen sich in X2 nach meinem Verständnis aber nur auf System-Handles, Identifier und Definitionen für 64-bit Strukturen etc. Arithmetik damit scheint derzeit nur in sehr engen Grenzen möglich.
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3

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

  • Abt. Selbst entfernte Clones fallen unter Urheberrecht!
    ==================================
    Wie diesem Artikel zu entnehmen ist, ist die Beurteilung der Rechtslage zu Programmen oft von der Ähnlichkeit der Anmutung oder Spielidee abhängig. Jedenfalls unzulässig ist eine blosse Farb-, Form- oder Symboländerung ohne eigene wesentliche Beiträge. Bei der Suche nach Lösungsalgorithmen für bestehende Spiele wie z.B. Sudoku oder diverse Apps, die gerade in Mode sind, ist es allerdings aus sozusagen wissenschaftlichen Gründen notwendig, den Mechanismus nachzubilden, um den Erfolg einer eingeschlagenen Computer-Strategie überprüfen zu können. Mit diesem Hintergrund - und nur mit diesem-, darüber hinaus ohne jegliche Gewähr, habe ich für diesen Zweck ein im Net gefundenes Codestück in XProfan übersetzt. Erste Überprüfungsergebnisse zeigen, daß rein zyklisches Tastendrücken nicht zum Erfolg führt. Da werden also schon gefinkeltere Strategien erforderlich sein!
    Gruss
    P.S.: Die Compiler-Spoiler sind Absicht!

    Brainfuck-Quellcode

    1. Windowtitle "ERZEUGE 2^11!":Windowstyle 24:Window 190,170:font 2:print
    2. Print ,"REINE PROFAN - DEMO!\n An 'ZO4B' besteht\n fremdes URHEBERRECHT"
    3. Print " Keinen Unsinn machen\n - ein Prozess läuft!\n ===================="
    4. print " Cursortaste HALTEN!":beep:waitinput :randomize:declare f&[3,3],i&,j&,end&
    5. REPEAT :end&=0:nochma:
    6. i&=rnd(4):j&=rnd(4):if f&[i&,j&]=0:f&[i&,j&]=2
    7. else :inc end&:if end&=500:locate 5,5:print " *** ENDE *** ":waitinput: :endif:goto "nochma"
    8. endif:locate 1,1:print "+----+----+----+----+"
    9. WhileLoop 0,3:i&=&Loop:print ":";:whileloop 0,3:j&=&Loop
    10. if f&[i&,j&]>0:print right$(" "+str$(f&[i&,j&]),4);":";:else :print " :";:endif
    11. endwhile :print:print "+----+----+----+----+":EndWhile
    12. waitinput
    13. If %key=27:END:ElseIf @IsKey(39):whileloop 3,0,-1:i&=&Loop:whileloop 2,0,-1:j&=&Loop
    14. whileloop 2,0,-1:if f&[i&,&loop+1]=0:f&[i&,&loop+1]=f&[i&,&loop]:f&[i&,&loop]=0:endif
    15. if f&[i&,j&]=f&[i&,j&+1]:f&[i&,j&+1]=f&[i&,j&+1]+f&[i&,j&]:f&[i&,j&]=0:endif
    16. endwhile:endwhile :endwhile
    17. ElseIf @IsKey(37):whileloop 0,3:i&=&Loop:whileloop 1,3:j&=&Loop
    18. whileloop 1,3:if f&[i&,&loop-1]=0:f&[i&,&loop-1]=f&[i&,&loop]:f&[i&,&loop]=0:endif
    19. if f&[i&,j&]=f&[i&,j&-1]:f&[i&,j&-1]=f&[i&,j&-1]+f&[i&,j&]:f&[i&,j&]=0:endif
    20. endwhile:endwhile:endwhile
    21. ElseIf @IsKey(38):whileloop 0,3:j&=&Loop:whileloop 1,3:i&=&Loop
    22. whileloop 1,3:if f&[&loop-1,j&]=0:f&[&loop-1,j&]=f&[&loop,j&]:f&[&loop,j&]=0:endif
    23. if f&[i&,j&]=f&[i&-1,j&]:f&[i&-1,j&]=f&[i&-1,j&]+f&[i&,j&]:f&[i&,j&]=0:endif
    24. endwhile:endwhile:endwhile
    25. ElseIf @IsKey(40):whileloop 3,0,-1:j&=&Loop:whileloop 2,0,-1:i&=&Loop
    26. whileloop 2,0,-1:if f&[&loop+1,j&]=0:f&[&loop+1,j&]=f&[&loop,j&]:f&[&loop,j&]=0:endif
    27. if f&[i&,j&]=f&[i&+1,j&]:f&[i&+1,j&]=f&[i&+1,j&]+f&[i&,j&]:f&[i&,j&]=0:endif
    28. endwhile:endwhile:endwhile
    29. EndIf:
    30. Sendkey(%hwnd,39)
    31. UNTIL 0
    Alles anzeigen
    Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,xpse,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB3