ALGORITHMEN - Teil XIV: Jetzt noch irrer!

    • Abt. Rot13-Obfuskator
      =================
      ...bzw. Rot-N, wobei N im Prinzip frei wählbar wäre, gäbe es nicht Zeichen wie \n , Anführungszeichen etc. Man sollte das also intensiv ausprobieren, falls man etwas anderes als einfache Texte, Ziffern oder übliche Schreibzeichen übertragen will.
      Gruss

      P.S.: Das nachfolgende Progi prüft auch auf Gleichheit des Dechiffrier-Ergebnisses mit dem Originaltext - aber vielleicht wurde ja bereits dieser von der Stringverwaltung "verballhornt". Also bitte auch inhaltlich prüfen!

      Quellcode

      1. windowstyle 24:Windowtitle "For your eyes only, Rot13":cls
      2. declare a$,b$, d$
      3. a$="For your eyes only! 0123456789+-*:?"
      4. 'a$="":whileloop 0,255:a$=a$+chr$(&Loop):endwhile
      5. Start:
      6. font 2:print "\n Geheime Botschaft: ":font 0:print a$
      7. b$=""
      8. whileloop len(a$)
      9. b$=b$+chr$( (ord(mid$(a$,&Loop,1))+13) mod 256)
      10. endwhile
      11. font 2:print "\n Chiffre: ":font 0:print b$
      12. clearclip:putclip b$
      13. font 2:print " ==> Zwischenablage!"
      14. d$=""
      15. whileloop len(b$)
      16. d$=d$+chr$((ord(mid$(b$,&Loop,1))-13) mod 256)
      17. endwhile
      18. font 2:print "\n Dechiffriert: "
      19. font 0:print d$
      20. print
      21. if a$<>d$:font 2:print "\n *** ERROR ***"
      22. sound 2000,200:waitinput 100
      23. sound 2000,200:waitinput 100
      24. sound 2000,200:waitinput
      25. else
      26. print "\n OK."
      27. endif
      28. waitinput
      29. cls
      30. print "\n Ihre Geheimbotschaft: ";
      31. Input a$:case a$="":END
      32. goto "Start"
      Alles anzeigen
    • Abt. Vigenère-Obfuskator
      ==================
      Vigenère ist im wesentlichen eine Caesar-Verschlüssellung, bei der die Rotationsweite aber vom zugeordneten Schlüsselbuchstaben bestimmt wird. War früher unknackbar, solange der Schlüssel mindestens so lang ist wie der zu verschlüsselnde Text, und auch nie mehr wiederverwendet wird. Dann wird er zum sog. One-pad Schlüssel - aber wie überträgt man dann den Schlüssel abhörsicher? Der müsste lange lange im Voraus bereits verteilt worden sein!
      Gruss

      Quellcode

      1. Windowstyle 24:Windowtitle "For your eyes only, Vigenere!":cls
      2. declare a$,b$,c$,d$
      3. 'Schlüssel:
      4. c$="Der kleine Vigenere!"
      5. 'a$="For your eyes only! 0123456789+-*: ?"
      6. a$="":whileloop 0,255:a$=a$+chr$(&Loop):endwhile
      7. Start:
      8. font 2:print "\n Geheime Botschaft: ":font 0:print a$
      9. b$=""
      10. whileloop len(a$)
      11. b$=b$+chr$( (ord(mid$(a$,&Loop,1)) + ord(mid$(c$,(&Loop mod len(c$))+1,1))) mod 256)
      12. endwhile
      13. font 2:print "\n Chiffre: ":font 0:print b$
      14. clearclip:putclip b$
      15. font 2:print " ==> Zwischenablage!"
      16. d$=""
      17. whileloop len(b$)
      18. d$=d$+chr$( (ord(mid$(b$,&Loop,1)) - ord(mid$(c$,(&Loop mod len(c$))+1,1))) mod 256)
      19. endwhile
      20. font 2:print "\n Dechiffriert: "
      21. font 0:print d$
      22. print
      23. if a$<>d$:font 2:print "\n *** ERROR ***"
      24. sound 2000,200:waitinput 100
      25. sound 2000,200:waitinput 100
      26. sound 2000,200:waitinput
      27. else
      28. print "\n OK."
      29. endif
      30. waitinput
      31. cls
      32. print "\n Ihre Geheimbotschaft: ";
      33. Input a$:case a$="":end
      34. goto "Start"
      Alles anzeigen

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

    • Abt. Ende jeglicher "EDV-Sicherheit" ?
      ============================
      In Artikeln auf Slashdot sowie ZD-Net (beide in Englisch) erfahren wir, dass in moderneren INTEL Chipsätzen seit etwa 2008 bzw. ab den AMT-Befehlen eine versteckt eingebaute Variante des Betriebssystems Linux, nämlich das MINIX, existiert. Der mit deepL bearbeitete Artikel zeigt alarmierende Fakten auf.
      Grus(s)el!
      Spoiler anzeigen

      Ein Linux- und Sicherheitsentwickler bei Google erklärte kürzlich [Zit.]: "Intel-Chipsätze enthalten seit einigen Jahren eine Management Engine[ME], einen kleinen Mikroprozessor, der unabhängig von CPU und Betriebssystem arbeitet. Auf dem ME laufen verschiedene Softwareprogramme, vom Code über das Handling von Medien-DRM bis hin zur Implementierung eines TPM. AMT[Active Management Technology] ist eine weitere Software, die auf der ME." ...Zit.Ende. Bei einer Präsentation auf der Embedded Linux Conference Europe berichtete ein Teilnehmer, dass Systeme mit Intel-Chips, die AMT haben, MINIX nutzen. Also, was bitte macht das in Intel Chips? Eine ganze Menge: Diese Prozessoren arbeiten mit einer Closed-Source-Variante des Open Source MINIX 3. Es ist nicht bekannt, wie sie modifiziert wurde, da kein Quellcode veröffentlicht wurde. Jedenfalls laufen: Ein unabhängiger TCP/IP-Netzwerkstack (4 und 6), Dateisysteme, Treiber (Festplatte, Netz, USB, Maus), Webserver. und das MINIX hat auch Zugriff auf Passwörter.

      Es kann auch die Firmware des Computers wiederherstellen, selbst wenn er ausgeschaltet ist, aber noch angeschlossen. So kann der Code auch über lange Energiezyklen hinweg bestehen bleiben. Originalton: "Wenn du noch keine Angst hast, dann habe ich es vielleicht nicht gut erklärt, denn: Ich habe Angst!"

      P.S.: China hat ja seit längerem den schnellsten Supercomputer der Welt, den TIHANE. Seit kurzem führt es auch in der Liste der TOP 500-Rechner quantitativ, weil es mit 202 Nennungen vor den USA mit 169 Super-Rechenanlagen zu liegen kam. Tipp: Seid freundlich zu Chinesen!

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

    • Abt. "Was kost´die Welt?"
      ===================
      Bereits seit 2008 experimentieren Theoretische Physiker wie Prof. Renate Loll, damals Uni Utrecht, an Computermodellen bestehend aus "Fuzzy-Dreiecken", was die Welt (= Raumzeit nach Einstein, Skala 10^26 m) im Innersten (= Planck-Dimensionen, Skala 10^-38 m) zusammenhält. Ergebnisse damals waren z.B., daß die Schöpfung aus noch unbekannten Gründen keine Wurmlöcher zulässt, weil sonst aus diesen Dreieckselementen keine Raumzeit, sondern ein "Ortsgleichzeitiger Kuddelmuddel" wird... Schade also, liebe SciFi-Freunde!

      Das Erstaunliche an diesen Modellen ist aber, daß daraus eine den Kosmologen wohlbekannte De-Sitter-Raumzeit (inklusive Erklärung des Big-Bang und der anschließenden schnellen Expansion des Universums) erzeugt wird - ein weiteres Indiz, daß man am richtigen Weg zu einer Theory of Everything (TOE) ist. Papier, Bleistift und Hirn allein reichen offenbar nicht mehr aus, um die Welt zu verstehen - es muss auch ein Computer dabei sein! Zumindest macht er die Dinge anschaulich: Link zu interessanten Visualisierungen; Link zur aktuellen Homepage der Forschungsgruppe.
      Gruss
    • Abt. Auf 15 Stellen genaue Integer-Funktion für Floatingpoint-Variablen
      ==================================================
      Wie das Ergebnis von Cls:print int(1e14):waitinput zeigt, ist die INT()-Funktion nur für Integers gedacht. Wer aber denkt, ein einfaches round(a!-0.5, 0) würde reichen, der hat seine Rechnung ohne die Untiefen das Mathe-Paketes von Delphi gemacht - und das spiegelt sich auch in XProfan wider.

      Zum Beispiel ist es gar nicht leicht, dem System die Ausgabe von "Minus-Null" (-0.000000) abzugewöhnen und negative wie postiive Zahlen gleich zu behandeln. Solange der Zahlenwert 15 Stellen nicht überschreitet, dürften die gröbsten Bugs jetzt aber beseitigt sein. Bitte um Verständnis, die Sache bleibt dennoch ohne jede Garantie ...
      Gruss

      Spoiler anzeigen

      Quellcode

      1. WindowTitle "Integer-Funktion für Floats bis 15 Stellen"
      2. Cls:declare a!,sgn!:set("decimals",18)
      3. repeat:print "\n Float-Wert: ";:input a!:print Intf(a!)
      4. until 0
      5. proc Intf :parameters a!
      6. var sgn!=if(abs(a!)<val("1e-16"),0,if(a!<0,-1,1))
      7. return val(format$("%g",sgn!*abs(round(abs(a!)-0.5,0))))
      8. endproc
    • Neu

      Abt. Qualitätssicherungskarten
      ======================
      Die Überwachung von Fertigungsprozessen und Qualitätssicherung von Industrieprodukten wird häufig mit sog. Kontrollkarten (auch Qualitätsregelkarten genannt) durchgeführt. Basis sind dabei Mittelwerte von Produkt-Stichproben sowie deren Toleranz-Spannweiten. Für die Einrichtung einer (einfachen) Kontrollkarte werden im Vorlauf aus der Lieferung oder Produktion n Stichproben des Umfangs k gezogen und Mittelwerte sowie Spannweiten errechnet. Daraus ergeben sich dann Konfidenzbänder (auch Vertrauensintervalle genannt), die wegen des üblicherweise kleinen Stichprobenumfangs einer "Hypergeometrischen Verteilung" folgen.

      In der laufenden Fertigung werden dann gelegentlich Stichproben entnommen. Durch Mittelwertbildung ist das Verfahren "Ausreisser-resistent", und die Werte werden daraufhin überprüft, ob sie innerhalb der zugehörigen Konfidenzbänder liegen. Ist das nicht der Fall, muß eingegriffen werden, da es sich nicht mehr um eine rein zufällige Abweichungen handelt.
      Gruss

      P.S.: Darüber hinaus existieren auch Karten, bei denen zwischen Warn- und Eingriffsgrenzen unterschieden wird.

      Brainfuck-Quellcode

      1. WindowTitle upper$(" (x,R) - Q u a l i t ä t s k o n t r o l l k a r t e")
      2. 'Q:Müller:BASIC-Prog.f.d.angew.Statistik, Oldenbourg 1983, S.270f
      3. 'Demoübersetzung nach XProfan11, 2017-11 by P.Specht/Wien, OHNE JEDE GEWÄHR!
      4. WindowStyle 24:cls:font 2
      5. declare R![10],X![10,20],X1![10]
      6. declare D$,DATA$,E$,K$
      7. declare E&,I&,j&,K&,N&
      8. declare A!,D1!,D2!,K0!,K9!,R0!,R1!,R9!,tmp!,X0!,X2!,X9!
      9. DATA$=\
      10. "1.88, 0.00, 3.27,"+\
      11. "1.02, 0.00, 2.57,"+\
      12. "0.73, 0.00, 2.28,"+\
      13. "0.58, 0.00, 2.11,"+\
      14. "0.48, 0.00, 2.00,"+\
      15. "0.42, 0.08, 1.92,"+\
      16. "0.37, 0.14, 1.86,"+\
      17. "0.34, 0.18, 1.82,"+\
      18. "0.31, 0.22, 1.78,"+\
      19. "0.29, 0.26, 1.74,"+\
      20. "0.27, 0.28, 1.72,"+\
      21. "0.25, 0.31, 1.69,"+\
      22. "0.24, 0.33, 1.67,"+\
      23. "0.22, 0.35, 1.65,"+\
      24. "0.21, 0.36, 1.64,"+\
      25. "0.20, 0.38, 1.62,"+\
      26. "0.19, 0.39, 1.62,"+\
      27. "0.19, 0.40, 1.60,"+\
      28. "0.18, 0.41, 1.59"
      29. K$="XProfan-PC"
      30. Start:
      31. CLS
      32. print "\n Datum ?: ";:INPUT D$
      33. if D$="":D$=date$(0):locate %csrlin-1,14:print d$
      34. print " Kennung: ";k$:print
      35. PRINT " 1 = Einrichten einer Kontrollkarte auf Grund von Gut-Proben"
      36. PRINT " 2 = Stichprobenauswertung und Einträge in die Kontrollkarte"
      37. PRINT
      38. G150:
      39. print " Gewünschte Wahl-Nr.?: ";:input E&
      40. case (E&<1) OR (E&>2):goto "G150"
      41. PRINT
      42. G180:
      43. print " Anzahl der Stichproben [2..10]?: ";:INPUT N&
      44. if (N&<=1) OR (N&>10):beep:Goto "G180":endif
      45. G200:
      46. print " Stichprobenumfang [3..20]?: ";:INPUT K&
      47. PRINT
      48. if (K&<=2) OR (K&>20):beep:goto "G200":endif
      49. Whileloop N&:I&=&Loop
      50. PRINT "\n ";I&;". Stichprobe\n --------------------------"
      51. whileloop k&:j&=&Loop
      52. PRINT " ";J&;". Eingabewert?: ";
      53. input tmp!:X![I&,J&]=tmp!
      54. endwhile
      55. PRINT
      56. endwhile
      57. ' ----------------------------------------------------
      58. weiter:
      59. ' Ausdruck
      60. Cls:PRINT " ";D$;" ";K$:PRINT
      61. GOTO if(E&=1,"G380","G400")
      62. G380:
      63. PRINT " Einrichten der Kontrollkarte"
      64. GOTO "G410"
      65. G400:
      66. PRINT " Eintragen in die Kontrollkarte"
      67. G410:
      68. PRINT
      69. PRINT " Anzahl dsr Stichproben: ";N&
      70. PRINT " Jew. Stichprobenumfang: ";K&
      71. PRINT
      72. whileloop n&:i&=&Loop
      73. PRINT
      74. PRINT " ";I&;". Stichprobe"
      75. PRINT
      76. whileloop k&:j&=&Loop
      77. PRINT " ";J&;". Eingabewert: ";format$("%g",X![I&,J&])
      78. endwhile
      79. PRINT
      80. endwhile
      81. ' ---------------------------
      82. ' Berechnung
      83. whileloop n&:i&=&Loop
      84. X1![I&]=0
      85. endwhile
      86. X2!=0:R1!=0
      87. whileloop n&:i&=&Loop
      88. X0!=X![I&,1]
      89. X9!=X![I&,1]
      90. whileloop k&:j&=&Loop
      91. case X0!>X![I&,J&]:X0!=X![I&,J&]
      92. case X9!<X![I&,J&]:X9!=X![I&,J&]
      93. X1![I&]=X1![I&]+X![I&,J&]
      94. endwhile
      95. X1![I&]=X1![I&]/K&
      96. R![I&]=X9!-X0!
      97. R1!=R1!+R![I&]
      98. X2!=X2!+X1![I&]
      99. endwhile
      100. X2!=X2!/N&
      101. R1!=R1!/N&
      102. Goto if(E&=1,"G790","G1200")
      103. G790:
      104. A! =val(substr$(data$,3*(k&-2)+1,","))
      105. D1!=val(substr$(data$,3*(k&-2)+2,","))
      106. D2!=val(substr$(data$,3*(k&-2)+3,","))
      107. K0!=X2!-A!*R1!
      108. K9!=X2!+A!*R1!
      109. R0!=D1!*R1!
      110. R9!=D2!*R1!
      111. G1200:
      112. ' Ausgabeteil
      113. PRINT:PRINT:PRINT
      114. case E&=1:GOTO "G1230"
      115. case E&=2:goto "G1290"
      116. G1230:
      117. PRINT " TOLERANZBÄNDER FÜR DIE KONTROLLKARTE"
      118. PRINT " ------------------------------------"
      119. PRINT " Untere Kontrollgrenze für Stichproben-Mittelwerte: ";format$("%g",K0!)
      120. PRINT " Obere Kontrollgrenze für Stichproben-Mittelwerte: ";format$("%g",K9!)
      121. PRINT " Ontere Kontrollgrenze für Stichproben-Spannweite: ";format$("%g",R0!)
      122. PRINT " Obere Kontrollgrenze für Stichproben-Spannweite: ";format$("%g",R9!)
      123. G1290:
      124. PRINT
      125. PRINT " ERRECHNUNG DER STICHPROBENMITTELWERTE UND -SPANNWEITEN"
      126. Print " ------------------------------------------------------"
      127. PRINT " Nr.";tab(14);"Mittelwert";tab(32);"Spannweite"
      128. whileloop n&:i&=&Loop
      129. PRINT " ";I&;TAB(14);format$("%g",X1![I&]);TAB(32);format$("%g",R![I&])
      130. endwhile
      131. PRINT
      132. G1350:
      133. print:locate %csrlin-1,1
      134. print " Sind weitere Berechnungen gewünscht (j/n)?: ";:INPUT E$
      135. case left$(lower$(E$),1)="j":goto "Start"
      136. END
      Alles anzeigen

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

    • Neu

      Abt. XProfan-Floats
      ==============
      Wusstet ihr, dass val("1.1107651257114e-16") der kleinste Wert ist, der zu 1 addiert, die Summe zum noch steigen bringt? Alle kleineren Werte werden als 0 angesehen, die Summe steigt also nicht! Für jede Verdopplung der Einerstelle verdoppelt sich auch dieser kleinste Wert.
      Gruss

      P.S. Anbei wieder ein paar Float-Funktionen, einige noch nicht optimal...

      Quellcode

      1. WindowTitle "Funktionen für Floats bis 15 Stellen"
      2. Cls:declare a!,b!:set("decimals",18)
      3. repeat
      4. print "\n a = ";:input a!
      5. print " b = ";:input b!
      6. print
      7. print " intf(a) = ";format$("%g",intf(a!))
      8. print " frac(a) = ";format$("%g",frac(a!))
      9. print " a / b = ";format$("%g",divf(a!,b!))
      10. print " intf(a/b) = ";format$("%g",intf(divf(a!,b!)))
      11. print " modf(a,b) = ";format$("%g",Modf(a!,b!))
      12. print " GGTf(a,b) = ";format$("%g",GGTf(a!,b!))
      13. print " KGVf(a,b) = ";format$("%g",KGVf(a!,b!))
      14. until 0
      15. End
      16. proc Intf :parameters a!
      17. return val(format$("%g",sgn(a!)*abs(round(abs(a!)-0.5,0))))
      18. endproc
      19. proc sgn :parameters a!
      20. return if(abs(a!)<val("1e-16"),0,if(a!<0,-1,1))
      21. endproc
      22. proc Modf :parameters a!,b!
      23. case b!=0:return sgn(a!)*1e300
      24. return a!-b!*Intf(divf(a!,b!))
      25. endproc
      26. proc divf :parameters a!,b!
      27. case abs(b!)<val("1e-306"):return sgn(a!)*1e300
      28. return a!/b!
      29. endproc
      30. proc frac :parameters a!
      31. return a!-intf(a!)
      32. endproc
      33. Proc GGTf :parameters a!,b!
      34. var tmp! = 0;
      35. while abs(b!)<>0
      36. tmp! = modf(a!,b!)
      37. a! = b!
      38. b! = tmp!
      39. endwhile
      40. return a!
      41. EndProc
      42. proc KGVf :parameters a!,b!
      43. case (a!=0) OR (b!=0):return 0
      44. return Abs(a!/GGTf(a!,b!))*b!
      45. endproc
      Alles anzeigen

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von p. specht () aus folgendem Grund: Ergänzt um Euklidischen GGT-Algorithmus für Floats und Kleinstes Gemeinsames Vielfaches KGV für Floats

    • Neu

      Abt. Erweiterter Euklidischer Algorithmus
      =============================
      als Vorbereitung für den "Chinesischen Restsatz". Auf diesem Algorithmus fußt auch das RSA-Verschlüsselungsverfahren - allerdings nicht mit den 8-Byte-Floatvariablen von XProfan, sondern so ab Schlüsselzahlen mit 1024 bit ~ 120 dezimalen Stellen ...
      Gruss

      P.S.: Nach Beschreibungen des Algorithmenpapstes Prof. Donald Knuth zusammengepfriemelt!

      Quellcode

      1. WindowTitle "Erweiterter Euklidischer Algorithmus ErwGGTf(a,b) für Float-Variablen"
      2. WindowStyle 24:Cls:font 2
      3. print "\n Der Algorithmus errechnet möglichst ganzzahlige Werte u1 und u2, die als\n"
      4. print " Faktoren der Eingabe (a und b) den Größten Gemeinsamen Teiler GGT(a,b)\n"
      5. print " ergeben. Damit kann man zB. Diophantische (Ganzzahl-)Gleichungen lösen.\n"
      6. declare a!,b!,erg![2]:set("decimals",18)
      7. repeat
      8. print "\n a = ";:input a!
      9. print " b = ";:input b!
      10. ErwGGTf(a!,b!,erg![]) ' Ergebnis in erg![]
      11. print "\n\n ErwGGTf(a,b) = ";
      12. print format$("%g",erg![0]);" * ";
      13. font 0:print format$("%g",a!);:font 2
      14. print if((erg![1]*b!)<0," - "," + ");
      15. print format$("%g",abs(erg![1]));" * ";
      16. font 0:print format$("%g",abs(b!));:font 2
      17. print " = ";format$("%g",erg![0]*a!+erg![1]*b!);" = GGT\n"
      18. until 0
      19. End
      20. proc ErwGGTf :parameters a!,b!,erg![]
      21. if (a!<=0) or (b!<0):erg![]=0:return erg![]:endif
      22. if b!=0:erg![0]=1:erg![1]=0:erg![2]=a!:return erg![]:endif
      23. declare u1!,u2!,u3!,v1!,v2!,v3!,t1!,t2!,t3!,q!
      24. u1!=1:u2!=0:u3!=a!:v1!=0:v2!=1:v3!=b!
      25. while v3!<>0
      26. q!=intf(divf(u3!,v3!))
      27. t1!=u1!-v1!*q!:t2!=u2!-v2!*q!:t3!=u3!-v3!*q!
      28. u1!=v1!:u2!=v2!:u3!=v3!:v1!=t1!:v2!=t2!:v3!=t3!
      29. endwhile
      30. erg![0]=u1!:erg![1]=u2!:erg![2]=a!:return erg![]
      31. endproc
      32. proc Intf :parameters a!
      33. return val(format$("%g",sgn(a!)*abs(round(abs(a!)-0.5,0))))
      34. endproc
      35. proc divf :parameters a!,b!
      36. case abs(b!)<val("1e-306"):return sgn(a!)*1e300
      37. return a!/b!
      38. endproc
      39. proc sgn :parameters a!
      40. return if(abs(a!)<val("1e-16"),0,if(a!<0,-1,1))
      41. endproc
      Alles anzeigen
    • Neu

      Abt. Quadratische Kubikzahlen
      ===================
      Beitrag zurückgezogen. Klang anfangs kompliziert, läßt sich aber auf die Programmzeile
      cls:Whileloop 1000:print format$("%g",&loop^6):endwhile:waitinput
      zurückführen. (Die Zahlen müssen sich ja aus Quadraten n^2 und Kuben n^3 gleichzeitig ergeben, also (n^2)^3 = n^(2*3) = n^6 )
      Gruss

      P.S.: Indizien anbei...

      Quellcode

      1. WindowTitle "Natürliche Quadratzahlen, die auch Kubikzahlen sind"
      2. WindowStyle 24:cls:font 2:set("decimals",15)
      3. 'a*a = z : b*b*b = z : a*a = b*b*b
      4. 'a=Sqrt(b^3)=b^ 1.5 : a=b^(3/2) : a&=b&^(1.5)
      5. Declare a$,b$,f!
      6. clearclip
      7. Whileloop 2^31-1
      8. a$=format$("%g",sqrt(&Loop))
      9. ifnot instr(".",a$)
      10. b$=format$("%g",&Loop^(1/3))
      11. ifnot instr(".",b$)
      12. f!=sqrt(val(b$))
      13. print " ";format$("%g",f!),b$,a$," ";&Loop,format$("%g",f!^6)
      14. putclip format$("%g",sqrt(val(b$)))+", "+b$+", "+a$+": "+str$(&Loop)+"\n"
      15. endif
      16. endif
      17. endwhile
      18. print "\n OK.":beep
      19. waitinput
      Alles anzeigen

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

    • Neu

      Abt. Rechtwinkelige Dreiecke mit ganzzahligen Seitenlängen
      ==========================================
      Das Volumen von Würfeln ganzzahliger Seitenllänge kann nicht auf 2 (ggf. verschiedene) Würfel aufgeteilt werden, die ebenfalls beide ganzzahlige Seitenlänge haben. Das hat schon Pierre de Fermat vermutet, und Andrew Wiles und sein Schüler Richard Taylor 1995 endgültig bewiesen. Bei Quadratflächen gelingt so eine Aufteilung aber schon, wie das nachstehende Progi zeigt.
      Gruss

      Quellcode

      1. WindowTitle upper$(" Rechtwinkelige Dreiecke mit ganzzahligen Seiten erzeugen")
      2. WindowStyle 24:Cls:font 2
      3. declare x!,y!,a!,b!,c!:set("decimals",17):print
      4. whileloop 2,200:x!=&Loop
      5. whileloop 1,int(x!):y!=&Loop
      6. a!=sqr(x!)-sqr(y!):case a!=0:continue
      7. b!=2*x!*y!
      8. c!=sqr(x!)+sqr(y!)
      9. print tab(3);int(b!);" ²+";tab(11);int(a!);" ² =";tab(21);int(c!);" ²";
      10. print tab(34);"err =",sqr(a!)+sqr(b!)-sqr(c!)
      11. if %csrlin>33:sound 30,50:waitinput 6000:cls:print:endif
      12. endwhile
      13. endwhile
      14. Print "\n Wiedersehen!":waitinput
      15. End
      Alles anzeigen

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

    • Neu

      Abt. Gerade draufgekommen...
      ======================
      ... dass in wxMaxima ein bis 341550071728321 deterministischer, darüber hinaus mit Fehlerwahrscheinlichkeit von 10^-15 behafteter Miller-Rabin-Primzahlentest samt Lucas-Pseudoprim-Gegentest eingebaut ist: Die Funktion heisst PrimeP( N ).

      Zum Beispiel ist 94366396730334173383107353049414959521528815310548187030165936229578960209523421808912459795329035203510284576187160076386643700441216547732914250578934261891510827140267043592007225160798348913639472564715055445201512461359359488795427875530231001298552452230535485049737222714000227878890892901228389026881
      eine Primzahl.

      Wollte ich schon immer wissen!
      Gruss
    • Neu

      Abt. Goldpreis-Geklimper 2017
      ====================
      Aus reiner Nostalgie wieder mal eine Goldpreisvertonung! Das weltweit bestimmende Goldfixing an der LBMA (London Bullion and Metals Exchange) war zwischen Jan. und Nov. 2017 nicht besonders aufregend - und das ist gut so. Um überhauupt Unterschiede hörbar zu machen, mußte die Verstärkung gewaltig raufgedreht werden.
      Gruss

      Quellcode

      1. Var Data$=\
      2. "171117,108862,108819,"+\
      3. "161117,108659,108553,"+\
      4. "151117,108474,108629,"+\
      5. "141117,108456,108659,"+\
      6. "131117,109571,109789,"+\
      7. "101117,110077,110219,"+\
      8. "091117,110467,110629,"+\
      9. "081117,110719,110543,"+\
      10. "071117,110186,110328,"+\
      11. "061117,109704,109561,"+\
      12. "031117,109182,109459,"+\
      13. "021117,109679,109592,"+\
      14. "011117,109762,109952,"+\
      15. "311017,109169,109560,"+\
      16. "301017,109519,109380,"+\
      17. "271017,109358,109018,"+\
      18. "261017,108689,108234,"+\
      19. "251017,108120,108167,"+\
      20. "241017,108562,108732,"+\
      21. "231017,108507,108562,"+\
      22. "201017,108697,108476,"+\
      23. "191017,108598,108742,"+\
      24. "181017,108855,109047,"+\
      25. "171017,109448,109702,"+\
      26. "161017,110416,110703,"+\
      27. "131017,109543,109373,"+\
      28. "121017,109052,109226,"+\
      29. "111017,108761,109190,"+\
      30. "101017,109407,109461,"+\
      31. "091017,109001,109201,"+\
      32. "061017,107859,108393,"+\
      33. "051017,108728,108651,"+\
      34. "041017,108413,108511,"+\
      35. "031017,108133,108187,"+\
      36. "021017,108481,108455,"+\
      37. "290917,108743,109082,"+\
      38. "280917,108802,109140,"+\
      39. "270917,109414,109954,"+\
      40. "260917,110309,110538,"+\
      41. "250917,108857,108926,"+\
      42. "220917,108155,108209,"+\
      43. "210917,108381,108900,"+\
      44. "200917,109271,109479,"+\
      45. "190917,109286,109125,"+\
      46. "180917,109665,110068,"+\
      47. "150917,110537,110916,"+\
      48. "140917,111461,111158,"+\
      49. "130917,111222,111243,"+\
      50. "120917,111055,110941,"+\
      51. "110917,111312,111424,"+\
      52. "080917,111900,112071,"+\
      53. "070917,111887,111954,"+\
      54. "060917,112179,112211,"+\
      55. "050917,112253,112043,"+\
      56. "040917,111967,112053,"+\
      57. "010917,111415,110798,"+\
      58. "310817,110685,109831,"+\
      59. "300817,109783,109671,"+\
      60. "290817,109659,109736,"+\
      61. "250817,108518,109090,"+\
      62. "240817,109204,109044,"+\
      63. "230817,109005,109168,"+\
      64. "220817,109273,109195,"+\
      65. "210817,109560,109652,"+\
      66. "180817,110260,110265,"+\
      67. "170817,109508,109674,"+\
      68. "160817,108756,108229,"+\
      69. "150817,108534,108405,"+\
      70. "140817,108765,108548,"+\
      71. "110817,108971,109647,"+\
      72. "100817,109380,109167,"+\
      73. "090817,108510,107979,"+\
      74. "080817,106824,106820,"+\
      75. "070817,106678,106590,"+\
      76. "040817,106741,106837,"+\
      77. "030817,106990,106496,"+\
      78. "020817,107256,106956,"+\
      79. "010817,107522,107230,"+\
      80. "310717,107856,107906,"+\
      81. "280717,107807,107545,"+\
      82. "270717,107748,107653,"+\
      83. "260717,107287,107129,"+\
      84. "250717,107264,107459,"+\
      85. "240717,107889,107764,"+\
      86. "210717,107188,107139,"+\
      87. "200717,107086,107506,"+\
      88. "190717,107819,107483,"+\
      89. "180717,107126,107182,"+\
      90. "170717,107589,107403,"+\
      91. "140717,107368,106792,"+\
      92. "130717,106934,107105,"+\
      93. "120717,106864,106429,"+\
      94. "110717,106161,106368,"+\
      95. "100717,106368,106011,"+\
      96. "070717,106710,106895,"+\
      97. "060717,107473,107751,"+\
      98. "050717,107716,107845,"+\
      99. "040717,107849,107881,"+\
      100. "030717,108186,108500,"+\
      101. "300617,108722,109083,"+\
      102. "290617,108993,109314,"+\
      103. "280617,109824,110191,"+\
      104. "270617,110698,111136,"+\
      105. "260617,111114,110932,"+\
      106. "230617,112222,112527,"+\
      107. "220617,112084,112013,"+\
      108. "210617,111539,111898,"+\
      109. "200617,111537,111724,"+\
      110. "190617,111684,111773,"+\
      111. "160617,112308,112403,"+\
      112. "150617,112571,112767,"+\
      113. "140617,113099,113141,"+\
      114. "130617,112596,112533,"+\
      115. "120617,113001,113128,"+\
      116. "090617,113306,113918,"+\
      117. "080617,113599,114270,"+\
      118. "070617,114602,114662,"+\
      119. "060617,114798,114477,"+\
      120. "050617,113775,113688,"+\
      121. "020617,113075,112388,"+\
      122. "010617,112622,112801,"+\
      123. "310517,112666,112996,"+\
      124. "300517,112759,113223,"+\
      125. "260517,113285,112787,"+\
      126. "250517,112082,111957,"+\
      127. "240517,111940,111958,"+\
      128. "230517,112271,111917,"+\
      129. "220517,111798,112307,"+\
      130. "190517,111866,112203,"+\
      131. "180517,113031,113395,"+\
      132. "170517,112977,112213,"+\
      133. "160517,111510,111793,"+\
      134. "150517,112317,112461,"+\
      135. "120517,112746,112955,"+\
      136. "110517,112542,112295,"+\
      137. "100517,112499,112499,"+\
      138. "090517,112021,112420,"+\
      139. "080517,112379,112345,"+\
      140. "050517,111789,113033,"+\
      141. "040517,112317,113105,"+\
      142. "030517,114628,114899,"+\
      143. "020517,115100,115019,"+\
      144. "280417,115981,115684,"+\
      145. "270417,116317,116063,"+\
      146. "260417,115914,116021,"+\
      147. "250417,116308,116581,"+\
      148. "240417,116823,116942,"+\
      149. "210417,119866,119731,"+\
      150. "200417,119094,118800,"+\
      151. "190417,119425,119679,"+\
      152. "180417,119697,120546,"+\
      153. "130417,120954,120842,"+\
      154. "120417,120116,119902,"+\
      155. "110417,118061,118375,"+\
      156. "100417,117967,118440,"+\
      157. "070417,119160,118882,"+\
      158. "060417,117522,117527,"+\
      159. "050417,116744,117447,"+\
      160. "040417,118068,118149,"+\
      161. "030417,116967,116848,"+\
      162. "310317,116493,116198,"+\
      163. "300317,116326,116534,"+\
      164. "290317,116327,116119,"+\
      165. "280317,115692,115449,"+\
      166. "270317,115556,115786,"+\
      167. "240317,115531,115082,"+\
      168. "230317,115643,115793,"+\
      169. "220317,115462,115476,"+\
      170. "210317,114836,114137,"+\
      171. "200317,114613,114657,"+\
      172. "170317,114427,114053,"+\
      173. "160317,114465,114324,"+\
      174. "150317,112807,113204,"+\
      175. "140317,113244,113086,"+\
      176. "130317,112906,113207,"+\
      177. "100317,113109,112715,"+\
      178. "090317,113935,114064,"+\
      179. "080317,114584,114900,"+\
      180. "070317,115180,115762,"+\
      181. "060317,116116,116282,"+\
      182. "030317,116162,116805,"+\
      183. "020317,117805,118114,"+\
      184. "010317,117702,118250,"+\
      185. "280217,118416,118079,"+\
      186. "270217,118604,118741,"+\
      187. "240217,118558,118518,"+\
      188. "230217,117939,117313,"+\
      189. "220217,117667,117822,"+\
      190. "210217,117031,116616,"+\
      191. "200217,116492,116321,"+\
      192. "170217,116632,116555,"+\
      193. "160217,116376,116329,"+\
      194. "150217,115926,116181,"+\
      195. "140217,115974,115784,"+\
      196. "130217,115295,115564,"+\
      197. "100217,115608,115135,"+\
      198. "090217,115999,116104,"+\
      199. "080217,116149,116010,"+\
      200. "070217,115345,115443,"+\
      201. "060217,114444,113815,"+\
      202. "030217,112819,112899,"+\
      203. "020217,112957,113188,"+\
      204. "010217,112048,112203,"+\
      205. "310117,112317,111920,"+\
      206. "300117,111873,111263,"+\
      207. "270117,110677,110877,"+\
      208. "260117,111285,111195,"+\
      209. "250117,111386,111962,"+\
      210. "240117,113004,113007,"+\
      211. "230117,113062,113012,"+\
      212. "200117,112624,112703,"+\
      213. "190117,112919,112934,"+\
      214. "180117,113701,113478,"+\
      215. "170117,113506,114165,"+\
      216. "160117,113479,113540,"+\
      217. "130117,112250,112325,"+\
      218. "120117,112937,113582,"+\
      219. "110117,112540,112841,"+\
      220. "100117,112265,111812,"+\
      221. "090117,111922,111859,"+\
      222. "060117,111400,111227,"+\
      223. "050117,111669,111616,"+\
      224. "040117,111314,111740,"+\
      225. "030117,110956,110328"
      226. WindowTitle " GOLDPREIS-KLIMPERN IN EURO AB 2.JAN.2017"
      227. Cls:AppendMenuBar 100,"Date AM-Fixing PM-Fixing Börsenschluß:"
      228. declare v&,l&,d$[]:d$[]=explode(data$,","):sound 90,40:moveto 300,0
      229. whileloop sizeof(d$[])-1,1,-3
      230. print " ";d$[&Loop-2];": ";d$[&Loop-1];" ";d$[&Loop];tab(39);"!"
      231. l&=v&:v&=(val(d$[&Loop])-100000)/100
      232. case %csrlin>31:moveto 200+l&,(%csrlin-1)*12
      233. lineto 200+v&,%csrlin*12
      234. sound (val(d$[&Loop-1])-90000)/25,40
      235. sound (val(d$[&Loop])-90000)/25,40
      236. waitinput 130
      237. endwhile
      238. Print "\n OK."
      239. waitinput
      Alles anzeigen
    • Neu

      Abt. Programmier-Rätsel
      ==================
      Spoiler anzeigen
      A. Wem fallen XProfan-Befehle, eingebaute Funktionen, Systemvariablen, Create("- oder Set(" oder oGL("-Subbefehle mit den Anfangsbuchstaben Q, Y oder Z ein?
      Es gibt einen!

      B. Welcher Anfangsbuchstabe ist der häufigste in all den vorgenannten Fällen zusammen?
      Gruss

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

    • Neu

      Lösung zum "Programmier-Rätsel"

      Spoiler anzeigen

      Ich beziehe mich auf XProfan-11.2a. Einiges ist seither weggefallen, anderes dazugekommen. Grundsätzlich kann man aber sagen:

      ad A) Mit Y oder Z am Anfang ist mir kein Befehl oder Steuerwort / Systemvariable bekannt. Mit Q gibt es genau eines, und zwar den oGL("Quad",...) Befehl. Oder kennt jemand noch weitere?

      ad B) Der häufigste Buchstabe in XProfan-Befehlen oder Steuerworten ist das D mit 111, davon sind in der Hilfe allerdings 33 bereits als veraltet ausgewiesen.Ursache sind die vielen db... Befehle. Netto wären das also 88 Befehle.

      Dicht auf folgt das S mit 67, davon 3 veraltete, netto also 64 Befehle.
      Gruss

      P.S.: Ohne unterschiedliche Kombinatonen und Anwendungsvarianten zu rechnen, kennt XProfan in Version 11.2 ziemlich genau 600 Steuerbefehle.

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

    • Neu

      Naja, allzuviel kann der Prozessor ja auch nicht. AHT hat es mal so beschrieben: Der Rechner kann gerade mal 1 und 1 addieren und kriegt dann auch noch Null raus. Es gibt also wirklich nur wenige Befehle und um die Sache etwas komfortabler zu machen noch ein paar Microcodes. Das Ganze dann strikt auf Bit- und Byteebene. Um es für Programmierer angenehmer zu machen, basteln dann die Hochsprachen-"erfinder" daraus für die häufigsten Fälle fertige Codes, das sind dann die Hochsprachenbefehle.
      Print 1 + 1 ist eben einfacher, als

      Quellcode

      1. push eax
      2. mov eax, 1
      3. add eax, eax
      4. ;und nun den Inhalt von eax auch noch in dezimaler Notation im richtigen Fenster an die richtige Stelle ausgeben / schwitz, schwitz
      5. pop eax

      Gruß Volkmar
    • Neu

      Abt. Neue Rätselecke Nr. 34 "Habt Acht"
      ==============================
      Du hast 8 Stück 8er und kannst sie in Gruppen dicht nebeneinander stellen und die Gruppen durch beliebig viele Pluszeichen trennen. Bei der Addition soll aber genau 1000 herauskommen. Wie geht das? Computer ist erlaubt!
      Gruss

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

    • Neu

      Abt. Chinesischer Restsatz
      ====================
      Ein Kleinlaster fährt versehentlich den Marktstand einer biederen Bauersfrau um. Der Fahrer ist ganz zerknirscht und bietet an, die zerbrochenen Eier finanziell zu ersetzen. Unglücklicher Weise weiß die Bäuerin nicht die genaue Zahl, sie weiß nur noch, dass sie Dreiergruppen gezählt hat, da blieben 2 Eier über, in Fünfergruppen blieben 3 über, darum hat sie dann Siebenerpackungen gewählt, aber es blieben wieder 2 Eier über. "Moment: Die Gruppengrößen haben keinen gemeinsamen Teiler - Dann haben wir das gleich." meint der Fahrer, überlegt kurz und sagt dann: "Ich schuld ihnen Geld für 23 Eier, und den Stand stelle ich auch wieder auf!". Wie kam er darauf? Hatte er vielleicht schon das nachstehende Programm?
      Gruss

      Quellcode

      1. Windowtitle "Modulo-Kongruenzsystem, hier: Chinesischer Restsatz "+\
      2. "mit Probiermethode nach Prof. Weitz" '(D) Demo 2017-11 by P.Specht, Wien
      3. 'Q: https://www.youtube.com/watch?v=0KUDo0Bk : OHNE JEDE GEWÄHR!
      4. Windowstyle 24:cls rgb(200,200,255):font 2:declare k&,i&,j&,flg&,N!,X!,w$
      5. Print "\n Wieviele Kongruenzen?: ";:input k&
      6. declare m&[k&],a&[k&],x![k&],n![k&]:print
      7. if k&=3:m&[1]=3:a&[1]=2:m&[2]=5:a&[2]=3:m&[3]=7:a&[3]=2:endif ' Schnelltest: x = 23
      8. Whileloop k&:i&=&Loop: hoppla:
      9. Print " ";i&;". Kongruenz: Modul?: ";:input w$:case (k&=3) and (w$=""):break
      10. if w$="":locate %csrlin-1,1:sound 80,50:goto "hoppla":endif
      11. m&[i&]=val(w$):locate %csrlin-1,40:Print " Rest?: ";::input w$:a&[i&]=val(w$)
      12. endwhile
      13. n!=1:whileloop k&:i&=&Loop:n!=n!*m&[i&]:endwhile
      14. :whileloop k&:i&=&Loop:x![i&]=n!/m&[i&]:endwhile
      15. whileloop k&:i&=&Loop:flg&=1
      16. whileloop m&[i&]-1:j&=&Loop
      17. ifnot (j&*x![i&]-1) mod m&[i&]:n![i&]=j&:flg&=0:break:endif
      18. endwhile
      19. if flg&:print "\n *** Error: Modul ";m&[i&];" nicht berechenbar! ***"
      20. sound 200,200:waitinput:end:endif
      21. endwhile
      22. X!=0:whileloop k&:i&=&Loop:x!=x!+a&[i&]*x![i&]*n![i&]:endwhile
      23. x!=x! mod n! 'Normierte Lösung ausgeben:
      24. print "\n Ergebnis: X = ";format$("%g",x!);" \n\n Probe: \n"
      25. whileloop k&:i&=&Loop
      26. print " ":locate %csrlin-1,2
      27. print format$("%g",x!);" mod ";m&[i&];" = ";tab(20);format$("%g",x! mod m&[i&]);" "
      28. endwhile:sound 50,50:print "\n OK ?"
      29. waitinput
      30. End
      Alles anzeigen

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