1. Artikel
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forum
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Paules-PC-Forum.de
  2. Forum
  3. Programmierung
  4. XProfan
  5. Algorithmen und Lehrreiches

Algorithmen, Teil IX.: Computer und andere Haustiere

  • p. specht
  • 7. Januar 2015 um 23:36
  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 15. Juli 2015 um 18:55
    • #81

    Abt. XPIA-Funktionstest
    ===============
    Läuft's oder nicht? Wenn nicht, sollte man das XPIA-Arbeitsverzeichnis im LemonEd prüfen sowie erfordelrichenfalls Zugriffsrechte auf die Arbeitsverzeichnisse gewähren. Bei mir hat's grad geklappt.
    Gruss

    Code
    WindowTitle "Mit Frank Abbing's XPIA Max() und Min() eines Float-Arrays suchen"
    Window 0,0-%maxx,%maxy
    declare anzahl&
    print "\n Gewünschte Anzahl an Fließkommazahlen im Array ?: ";
    input anzahl&
    case anzahl&=0:anzahl&=25
    Declare Tabelle_1![anzahl&],Tabelle_2![2],x&,y&,z&,text$
    Print " ";anzahl&;" zufällige Fließkommazahlen werden generiert."
    Randomize
    Tabelle_1![]=Rnd(100000)/1.09-50000
    Print " Bereit für die Suche. Drücken Sie eine Taste!"
    
    
    'Assemblerfunktions-Parameters:  
    '  Adresse von Tabelle mit Floats, Adresse der Zieltabelle, Anzahl Floats
    
    
    Waitinput
    
    
    $MAKE CLE
    
    
    AsmStart FindEdge
    Parameters addr(Tabelle_1![0]), addr(Tabelle_2![0]), anzahl&,0
    jmp weiter
        flo1    dq  0
        flo2    dq  0
    weiter:
        ;
        ; Höchste Floatzahl ermitteln
        ;
        mov  edx,para1
        mov  ecx,para3
        lea  ebx,flo1
        mov  eax,[edx]
        mov  [ebx],eax
        mov  eax,[edx+4]
        mov  [ebx+4],eax
    schleifei:
        lea  ebx,flo2
        mov  eax,[edx]
        mov  [ebx],eax
        mov  eax,[edx+4]
        mov  [ebx+4],eax
        push ecx
        push edx
        fld  flo2
        fcomp  flo1
        fnstsw ax
        shr  ah,1
        jc   is_less
    is_more:
        pop  edx
        pop  ecx
        lea  ebx,flo1
        mov  eax,[edx]
        mov  [ebx],eax
        mov  eax,[edx+4]
        mov  [ebx+4],eax
        jmp  is_ready
    is_less:
        pop  edx
        pop  ecx
        is_ready:
        add  edx,8
        sub  ecx,1
        jne  schleifei
        mov  edx,para2
        lea  ebx,flo1
        mov  eax,[ebx]
        mov  [edx],eax
        mov  eax,[ebx+4]
        mov  [edx+4],eax
        ;
        ; niedrigste Zahl ermitteln
        ;
        mov  edx,para1
        mov  ecx,para3
        lea  ebx,flo1
        mov  eax,[edx]
        mov  [ebx],eax
        mov  eax,[edx+4]
        mov  [ebx+4],eax
    xschleifei:
        lea  ebx,flo2
        mov  eax,[edx]
        mov  [ebx],eax
        mov  eax,[edx+4]
        mov  [ebx+4],eax
        push ecx
        push edx
        fld  flo2
        fcomp  flo1
        fnstsw ax
        shr  ah,1
        jc   xis_less
    xis_more:
        pop  edx
        pop  ecx
        jmp  xis_ready
    xis_less:
        pop  edx
        pop  ecx
        lea  ebx,flo1
        mov  eax,[edx]
        mov  [ebx],eax
        mov  eax,[edx+4]
        mov  [ebx+4],eax
    xis_ready:
        add  edx,8
        sub  ecx,1
        jne  xschleifei
        mov  edx,para2
        lea  ebx,flo1
        mov  eax,[ebx]
        mov  [edx+8],eax
        mov  eax,[ebx+4]
        mov  [edx+12],eax
    AsmEnd
    
    
    Print
    Print " Größe des Arrays: ";anzahl&;" Float-Werte"
    Print " Höchster Wert aus dem Array = " + Str$(Tabelle_2![0])
    Print " Niedrigster gefundener Wert = " + Str$(Tabelle_2![1])
    Print " Fertig.":beep
    WaitInput
    End
    Alles anzeigen

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 15. Juli 2015 um 19:19
    • #82

    Abt. Spezielle mathematische Funktionen
    ==========================
    Gleich über 200 davon finden sich bei 'Hypergerd' Gerd Lamprechts Online im Net!
    So kann man z.B. numerische Lösungsalgorithmen verifizieren!

    Hier gibt's einen Online-Ableitungsrechner! Der kann sogar den Rechengang zeigen!

    Und daneben einen Online-Integralrechner, der auch gleich die Funktionsgraphen plottet!

    Weiters ist eine Präzisionsausgabe aller Elliptischen Integrale online verfügbar.

    Wer eine neue Folge oder Reihe (Summenfolge) gefunden hat, kann die hier bekanntgeben.

    Und hier eine Online-Ausgabe der Funktionenbibel aller Mathematiker, herausgegeben von Milton Abramowitz and Irene A. Stegun (Abramowitz ist übrigens kürzlich verstorben).

    Kurvendiskussion Online - auch nicht schlecht!

    Seine Funktionsgraphen kann man bei Walter Zorn online zeichnen lassen.

    Gruss

    P.S.: Wer jetzt auf den Geschmack gekommen ist, kann sich jede Menge
    pdf-Skripten von Mathe online holen!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    10 Mal editiert, zuletzt von p. specht (15. Juli 2015 um 19:48)

  • RGH
    Fortgeschrittener
    Reaktionen
    652
    Beiträge
    1.536
    • 15. Juli 2015 um 19:47
    • #83
    Zitat von p. specht

    Abt. XPIA reloaded
    ============
    1) Frank Abbing's genialen Inline-Assemblercodegenerator gibt es weiterhin inoffiziell (ohne Suport und gänzlich auf eigenes Risiko) auf seiner Homepage zum Download: XPIA.

    Leider funktioniert Dein Link zu XPIA nicht! Bei mir lädt er immer nur eine Datei namens XPIA.EXE.ZIP mit 0 Bytes hinunter!

    Gruß
    Roland

    AMD Ryzen 5 5600U with Radeon Graphics 2,3 GHz / 32 GB RAM / 500 + 2000 GB SSD / Windows 11 - XProfan X4a

    Als Backup: MD Athlon II X2 2,9 GHz / 8 GB RAM / 500 + 1000 GB HDD / ATI Radeon 3000 (onboard) / Windows 10(64) - XProfan X4

    http://www.xprofan.de

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 15. Juli 2015 um 20:38
    • #84

    Autsch! Ich hatte zwar den Download geprüft aber nicht die Bytes...
    Hier die richtige Download-Addresse:

    XPIA.zip downloaden


    Danke für den Hinweis, RGH!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    2 Mal editiert, zuletzt von p. specht (15. Juli 2015 um 20:49)

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 17. Juli 2015 um 19:55
    • #85

    Falschmeldung, Sorry, meine Schuld: Milton Abramowitz starb 1956, Irene Stegun übernahm dann die Herausgabe der berühmten Formelsammlung im NBS (heute NIST). Sie selbst starb 2008.
    War wohl ein anderer, dessen Hinscheiden da gemeldet wurde...

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 17. Juli 2015 um 22:14
    • #86

    Abt. Catch me if you can
    ===============
    In vielen älteren Programmen verwende ich noch den PRINT-Befehl. Er gilt allerdings als Relikt aus DOS-Zeiten. Allmählich ist es also an der Zeit, ihn durch DRAWTEXT zu ersetzen, dieser Textzeichenbefehl folgt allerdings einem anderen, dem Pixel-Koordinatensystem. Nun wollte ich endlich eine Formel finden, womit die bisherigen Positions-Koordinaten halbwegs gut in Pixelkoordinaten umgerechnet werden können, ohne daß der Textbeginn plötzlich ganz wo anders erscheint. Bei meinen eigenen Bildschirmauflösungen und einer Standardschrift wie Arial scheint das zu klappen.

    Wie sieht das bei Euch aus?
    Gruss

    P.S.: Die neuere Proportionalschrift sorgt leider dafür, daß die Textlängen noch nicht stimmen.

    Code
    Windowtitle "Catch me if you can!"
    Windowstyle 24:font 2:randomize
    Window 0,0-%maxx,%maxy
    cls rgb(180+rnd(76),180+rnd(76),180+rnd(76))
    declare x!,y!,h&,b&
    
    
    ' Höhe und Breite des gezeichneten Textfonts:
    h&=15:b&=8  
    
    
    ' x- und y-Position für Print "+" in Positionskoordinaten
    x!=145:y!=58
    
    
    repeat
    
    
      color 0,15:locate 2,1:print "           ";:locate 2,2:print int(x!),int(y!)
    
    
    ' Zielkreuz schreiben mit PRINT:
      locate int(y!+0.49999),int(x!+0.49999):print "+";
      waitinput 100
    
    
    'Fang-Kreis als Font zeichnen:
      UseFont "Arial",h&,b&,1,0,0:textcolor rgb(255,0,0),-1
    
    
    ' Hier Catch-Formel prüfen und ggf.anpassen:
      drawtext (x!-1)*b&-b&/2+1,y!*h&*0.865-h&+2,"O"
    
    
    
    
    waitinput 100 : x!=x!-2:y!=y!-1
    until (%key=27) or (x!<0)
    END
    Alles anzeigen

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    Einmal editiert, zuletzt von p. specht (17. Juli 2015 um 22:21)

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 4. August 2015 um 17:52
    • #87

    Abt. Geburtstagszwillinge
    =================
    Es scheint erstaunllich, aber die Chance daß in einer Schulklasse von 25 Schülern mindestens zwei am gleichen Tag des Jahres Geburtstag feiern beträgt bereits fast 60 %! Das nachstehende Progi zeigt, wie diese Wahrscheinlichkeit mit der Gruppengröße (in Nicht-Schaltjahren) wächst.
    Gruss

    Code
    Windowtitle "Wahrscheinlichkeit, daß in einer Gruppe mindestens "+\
    "zwei Personen am selben Tag Geburtstag feiern:"
    Windowstyle 24:randomize:cls:declare n&,f!,k&
    repeat :Print "\n Wieviele Personen treffen zusammen?: ";:input n&
    case n&<=0:break
    Print "\n Die Wahrscheinlichkeit, daß 2 oder mehr dieser ";n&;" Personen"
    Print " am selben Tag Geburtstag feiern beträgt ";:font 2
    k&=365:f!=1:whileloop n&:f!=f!*(366-&Loop)/365:endwhile
    print format$("#0.000 %",(1-f!)*100):font 0
    until %key=27:font 2:Print "\n Es war sehr schön, es hat mich sehr gefreut!"
    font 0:waitinput 3000:End
    Alles anzeigen

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 4. August 2015 um 21:44
    • #88

    Abt. Aktiv im Radio
    ============
    Falls wieder mal ein Kernkraftwerk hochgeht (oder in ähnlich blöden Fällen) könnten professionelle Geigerzähler schnell vergriffen sein. Diesfalls kann man sich einen solchen aber auch aus einschlägig angebotenen Elektronik-Bausätzen zusammenlöten. Kleiner Nachteil dieser preiswerten Bausätze: Sie weisen keine Kalibrierung auf, sondern lassen in einem kleinen Lautsprecher allenfalls ein lustiges Knacksen hören. In dieser Konfiguration eigenen sie sich daher eher für das Zählen der Geiger in Orchestern als für ernsthafte Anwendungen :)

    Das lässt sich aber ändern: Durch Nachschaltung eines schnellen elektronischen Zählers könnte man zumindest ermitteln, wie lange man sinnvoller Weise keinen Freilandsalat essen sollte. Üblicherweise reichen 5 bis 6 Halbwertszeiten aus, um etwa durch Regenfälle die strahlenden Isotope in zumindest 1/2 m Erdtiefe spülen zu lassen. Sollten unsere transatlantischen Freunde z.B. Ihr Ukraine-Monopoly bis zum Ende durchspielen, dann liefert uns unser Gerät zumindest ein Indiz dafür, wie lange wir die Kinder besser nicht rauslassen sollten. Dabei hilft eventuell das folgende Progrämmchen, vorausgesetzt euer Laptop übersteht den EMP und hat dann noch etwas Akku-Ladung.
    Gruss

    Code
    WindowTitle "Halbwertszeit"
    WindowStyle 24
    cls
    declare n&,m&,x&,y&,T&,hwz!
    Print "\n Die Radioaktivität eines Isotops wird mittels Geigerzähler    "
    print " gemessen: Der Geigerzähler knackst dabei in N Sekunden X mal.  "
    Print " T Stunden später wird das Experiment wiederholt und man misst "
    print " dabei nun in M Minuten Y mal ein Knacksen. "
    print " Welche Halbwertszeit hat das gemessene radioaktive Isotop? \n"
    Repeat
      print
      print " 1. Messung:  Messzeit N [sek]= ";:input n&
      case n&=0:break
      print "             Anzahl Knackse X = ";:input x&
      print " Die nächste Messung erfolgt nach T Stunden. T = ";:input t&
      print " 2. Messung:  Messzeit M [sek]= ";:input m&
      print "             Anzahl Knackse Y = ";:input y&
      print
      if x&<=1:font 2
        print " Es handelt sich um ein stabiles Element. "
        case y&>1:print " Dieses wurde inzwischen mit Neutronen beschossen."
        font 0
        continue
      endif
      if (x&/n&)=(y&/m&):font 2
        print " Es handelt sich um eine technische Quelle. "
        print " (Die Halbwertszeit geht gegen Unendlich!) \n":font 0
       continue
      endif
    
      print " Die Halbwertszeit des Isotops beträgt: "
      hwz!=t&*ln(0.5)/(ln(1-(X&-Y&*N&/M&)/X&))  
      font 2:print "     ";hwz!;" Stunden."
      case hwz!>48:print " bzw. ";format$("%g",hwz!/24);" Tage"
      case hwz!>(24*7):print " bzw. ";format$("%g",hwz!/(24*7));" Wochen"
      case hwz!>(24*365.25):print " bzw. ";format$("%g",hwz!/(24*365.25));" Julianische Jahre"
      case hwz!<0:Print "      Vorsicht, es handelt sich um eine Bombe!\n"
      font 0
    waitinput
    Until %key=27
    End
    Alles anzeigen

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 4. August 2015 um 22:59
    • #89

    Abt. Andere Kalender
    ==============
    Sind die Kalenderregeln des christlich-gregorianischen Kalenders schon nicht einfach (Alle 4 Jahre ein 29. Februar eingefügt - es sei denn das Jahr ist durch 100 teilbar - aber dennoch, falls das Jahr durch 400 teilbar ist), so gelten in anderen Religionen noch deutlich kompliziertere Regeln. Das nachfolgende Progi kann daher nur ungefähre Näherungen beinhalten. Will man es genau wissen sollte man entsprechend ausführliche Internetseiten befragen.
    Gruss

    P.S.: Im Islamischen Kalender ist das erste Jahr (622 n.Chr) z.B. gleich um 2 Monate kürzer, etc. etc. Selbst die Frage, wann ein Tag beginnt, ist nicht einheitlich geregelt, m Jüdischen Kalender z.B. um 18:00 Uhr abends.

    Code
    Windowtitle "Einfache Näherungsformeln für Islamisches und Jüdisches Kalenderjahr"
    ' Q: https://de.wikipedia.org/wiki/Islamische_Zeitrechnung#Umrechnung
    ' Q: https://de.wikipedia.org/wiki/J%C3%BCdischer_Kalender
    ' OHNE JEDWEDE GEWÄHR!
    WindowStyle 24:cls:font 2:declare j&
    repeat :Print "\n   Jahreszahl nach Gregorianischem Kalender:  ";:input j&
    print "\n Jahr nach Islamischer Zeitrechnung in etwa:  ";int(0.5+32/33*(j&-622));
    print "\n Jahr nach Modern-Jüdischer Zeitrechnung ca:  ";int(365.2468/365.2425*(j&+3760+(j&<=0))+.5);"\n"
    until %key=27
    End

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 6. August 2015 um 20:58
    • #90

    Abt. Browserstatistik Mitte 2015
    ====================

    • Firefox 31%
    • Chrome 26.4%
    • Safari 23%
    • IE 10.8% (...nurmehr !)
    • Opera 1.5%

      Quelle: http://www.browser-statistik.de/

    Gruss

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 8. August 2015 um 20:37
    • #91

    Abt. Mittel-Mittelwerte
    ==============
    Es gibt einfache Fragen, zu denen keine einfachen Antworten existieren: Papi, warum ist der Himmel blau? Weil sich das Meer drin spiegelt, Kind! Und warum ist das Meer blau? - Weil sich der Himmel drin spiegelt ... äh... Geh endlich schlafen!!

    Das selbe passiert ziemlich oft auch in der Mathematik: Papi, wie lang ist der Bogen einer Ellipse? Papi: "Moment, habs gleich ... Verflixt, ich finde keine einfache Formel dafür! Geh endlich schlafen!" Da meldet sich Opa Gauß: "Das hatte ich doch wo notiert ... Es kommt natürlich auf die Form der Ellipse an UND auf die Frage, von wo bis wo gemessen wird. Das beliebige Verhältnis der Ellipsenachsen zueinander ruiniert leider jede geschlossene Formel. Aber ich hatte da doch..." Opa Gauß blättert in einem vergilbten kleinen Notizbuch. "Ah, da ist es ja: Man kann die Parameter "Achsenverhältnis" und "Von wo bis wo wird gemessen" nach einer von mir damals gefundenen Beziehung ("AGM") gegeneinander sukzessive abtauschen! Man versucht dann auf diese Weise, das Achsenverhältnis 1 werden zu lassen, dann haben wir es plötzlich mit einem Kreis zu tun, und der andere Parameter liefert dann das Ergebnis via die für Kreise bestens bekannte Umfangsformel." "Genial, Opa! Aber warum ist der Himmel blau?" "Äh... geh schlafen, Kind!"

    Gruss

    Code
    WindowTitle "Den Arithmetisch-geometrischen Mittelwert AGM(a,b) berechnen"
    '(CL) CopyLeft 2015-08 by P.Specht, Wien (Austria); OHNE JEDE GEWÄHR!
    'Quelle u.a. http://www.math.cornell.edu/~hubbard/RationalLandenTrans.pdf
    WindowStyle 24:Cls:declare a!,b!,sgn!,tmp!,c$:set("decimals",18)
    print "\n Für Parameterwerte a und b wird der von  C. F. Gauß  entwickelte"
    print " Arithmetisch-geometrische Mittelwert iterativ errechnet. Der hat"
    print " die Eigenschaft, Invarianztransformationen der Elliptischen Funk-"
    print " tionskurven (sprich Parameter-Abtausch) zu ermöglichen, ohne daß"
    print " der Funktionswert selbst verändert wird. (Das ermöglichte später"
    print " schrittweise Näherungen für Funktionswerte, für die keine Formel"
    print " existiert wie zB die Bogenlänge von Ellipsen, Lemniskaten etc. )"
    print " ----------------------------------------------------------------\n"
    Font 2
    
    
    Lauf:
      print " Wert a = ";:input c$:a!=val(c$)
      print " Wert b = ";:input c$:b!=val(c$)
      print " ----------------------------------------------------------------"
      print "         a                                     b                 "
      print " ";format$("%g",a!),tab(40);format$("%g",b!)
      tmp!=a!*b!:sgn!=(tmp!>0)-(tmp!<0)
      Repeat
        tmp! =(a!+b!)/2
        b!=sgn!*sqrt(abs(a!)*abs(b!))
        a!=tmp!
        print " ";format$("%g",a!),tab(40);format$("%g",b!)
      until format$("%g",a!)=format$("%g",b!)
      print " ----------------------------------------------------------------"
      locate %csrlin-2,30:print "<=AGM=>\n\n";
    waitinput
    CLS
    print " ----------------------------------------------------------------"
    goto "Lauf"
    Alles anzeigen

    P.S.: Zur Sache mit dem Himmel gibt es einige Internetadressen:
    Etwas unbefriedigend: http://www.wissen.de/warum-ist-der-himmel-blau
    Schon besser: http://www.phyx.at/blauerhimmel/
    Bullshit: http://www.spektrum.de/frage/warum-is…el-blau/1223163
    Nicht schlecht: https://de.wikipedia.org/wiki/Himmel_(p…Das_Himmelsblau
    Kann man gelten lassen: http://www.weltderphysik.de/thema/hinter-d…u-und-abendrot/
    Physikalisch richtig, löst aber nur Teilfrage: https://de.wikipedia.org/wiki/Rayleigh-Streuung

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    2 Mal editiert, zuletzt von p. specht (8. August 2015 um 21:04)

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 8. August 2015 um 22:27
    • #92

    Abt. Schaltjahrsregeln nicht genau genug? :D
    ==========================
    Der Gregorianische Kalender sorgte bekanntlich dafür, daß auf das Julianische Datum 4. Okt. 1582 das gregorianische Datum 15. Okt. 1582 folgte. Ziel war dabei, den 21. März jeden Jahres (Frühlingsbeginn) wieder auf den astronommisch-natürlichen Frühlingspunkt (Sonnenaufgang genau im Osten) zu schieben, wie das die hohen katholischen Würdenträger am Konzil von Niccäa einst festgelegt hatten. Die gute Absicht war aus dem Ruder gelaufen, weil das Sonnenjahr (Frühlingspunkt-Durchlauf zu Frühlingspunkt-Durchlauf) eben doch nicht 365,25 Tage dauert, sondern nur 365,2425 plus ein paar zerquetschte Nachkommastellen. Die neue Regel von Papst Gregor, daß alle 400 Jahre DOCH ein Schaltjahr sein sollte, behob das Desaster einstweilen.

    Leider summiert sich der Rest aber im Laufe von 3300 Jahren doch auf einen ganzen Tag. Vorausschauende Astronomen schlugen daher vor, die Sache mit den blöden Schaltsekunden (bis zu 2 pro Jahr, sh. https://de.wikipedia.org/wiki/Schaltsekunde) doch endlich sein zu lassen und dafür die Jahre 4800, 8000 und 11200 doch kein Schaltjahr sein zu lassen. Naja, da tut uns nix mehr weh ...

    Gruss

    P.S.: Der gregorianische Kalender wurde nicht in allen Ländern gleichzeitig eingeführt, sondern dieser Prozeß zog sich über mehrere Jahrhunderte, siehe https://de.wikipedia.org/wiki/Gregorian…schen_Kalenders

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    3 Mal editiert, zuletzt von p. specht (8. August 2015 um 22:42)

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 9. August 2015 um 09:53
    • #93

    Abt. Atommassen-Angaben
    =================
    Seit 1961 erfolgt die Angabe von Atommasse in "U" (U steht für "Unit",
    was in etwa der Masse eines Kernbausteins (Neutron, Proton) entspricht.
    (Nur in UK und USA wird 1 u auch noch als "1 Dalton" bezeichnet).

    1 u = 1.660538921 * 10^-27 kg (Wertbasis für Tabellenwerke ab 1961)

    1 u entspricht 1⁄12 der Masse eines isolierten Atoms des Kohlenstoff-
    Isotops 12C6 im Grundzustand, also

    1 u = 1.660539040(20)*10^-27 kg (NIST CODATA 2010)
    1 u = 931.4940954(57) MeV/c^2

    Spoiler anzeigen

    Umrechnung in die SI-Einheit 'u' :
    1 kg = 6.022140857(74)*10^26 u bzw.
    = 6.022140857(74)*10^23 [1/mol] (Avogadro-Konstante)
    ------------------------------------------------------------------
    Anmerkung:
    Alte Einheiten (1960 und davor) nahmen Bezug auf 1/16 des Luft-Sauerstoffs,
    neue Einheiten auf 1/12 Kohlenstoffatom. Die Physiker unterschieden dabei
    noch zwischen Allein-Masse des Nukleons und Bindungsenergie (Massendefekt):
    1 u(1961-)= 1.0003179 amu(alt, physikalisch)= 1.000043 amu (alt, chemisch)
    --------------------------------------------------------------

    Da der Kern des 12C-Atoms 12 Nukleonen enthält, ist die Einheit 'u'
    annähernd gleich der Masse eines Neutrons oder Protons.

    Spoiler anzeigen

    Anmerkung zur Bedeutung obiger Klammer-Angaben ( ):

    6.022140857(74) bedeutet:
    -------------------
    = 6,022140857
    +/-0,000000047 = +/- 1 Sigma, also:
    -------------------
    - : 6,022140810
    +: 6,022140904 ... die sog. 1-Sigma-Grenzen:
    -------------------
    Sigma ist das Formelzeichen für die statistische Standardabweichung:

    Sigma=SQRT(SUMME[(Meßwerte - Arithm.Mittelwert)^2]/Anzahl_Messwerte)

    Es wird symmetrische Messwertverteilung gemäß Gauss-Glockenkurve
    unterstellt. +/-1 Sigma (sh. oben) bedeutet dann, daß sich
    innerhalb dieser Wertgrenzen 68,27 % aller Messergebnisse bewegen.
    Will man statt dessen ...
    [ 50 % , 90 % , 95% , 99% ]
    aller Messwerte erfassen, so ist der Klammerwert mit
    [ 0.675, 1.645, 1.960, 2.576 ] zu multiplizieren.
    --------------------------------------------------------------


    Beispiel: Absolute Atommasse von Wasserstoff: 1.00794(1) u

    Die relative Atommasse
    ---------------------------
    ist dann ein Mittelwert aller Elemente und Isotope des entsprechenden
    Elements gemäß ihrer natürlichen Zusammensetzung in unserer Umwelt -
    und zwar relativ zu 1/12 des 12C.

    Spoiler anzeigen

    STOFF u_rel:
    ------------------------------
    Wasserstoff H: 1.008
    nat. Chlor Cl: 35.453
    nat. Sauerstoff O: 15.999
    nat. Stickstoff N: 14.007
    nat. Kohlenstoff C:12.011 (Isotope !)
    Erd-Silizium Si: 28.0855
    Gold Au: 196.966569
    Eisen Fe: 55.845

    Gruss

    P.S.: Eine grundlegende Neuauflage der CODATA-Werte des SI-Maßsystems ist für 2018 geplant und wird viele Änderungen bei den Klammerwerten bringen!

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    7 Mal editiert, zuletzt von p. specht (9. August 2015 um 10:20)

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 9. August 2015 um 14:10
    • #94

    Abt. XProfan-Liste mit Relativen Atommassen
    ============================
    für einige wichtige chemische Elemente (Diesmal Reinwerte, getrennt nach häufigen Isotopen). Es handelt sich um Werte, die 2003 mittels hochgenauer Massenspektrometer ermittelt wurden und Grundlage entsprechender Normentabellen (CODATA 2010) sind. Einige aktuellere Messergebnisse, die bis Anfang 2014 bekannt wurden, wurden eingearbeitet. Natürlich ohne jede Gewähr - die Gefahr von Tippfehlern ist relativ groß!
    Gruss

    P.S.: Offiziell zuständig für diese Werte ist die IUPAC (http://www.iupac.org/)

    Code
    WindowTitle "Relative Atommassen - Aktuelle Rechenwerte 2015"
    ' Q: http://arxiv.org/pdf/1203.5425.pdf
    ' OHNE JEDE GEWÄHR (Möglicherweise Tippfehler)!
    CLS
    
    
    declare _N$,m_N!,u_m_N!,u_rel_m_N!
    declare _1H$,m_1H!,u_m_1H!,u_rel_m_1H!
    declare _2H$,m_2H!,u_m_2H!,u_rel_m_2H!
    declare _3H$,m_3H!,u_m_3H!,u_rel_m_3H!
    declare _3He$,m_3He!,u_m_3He!,u_rel_m_3He!
    declare _4He$,m_4He!,u_m_4He!,u_rel_m_4He!
    declare _12C$,m_12C!,u_m_12C!,u_rel_m_12C!
    declare _16O$,m_16O!,u_m_16O!,u_rel_m_16O!
    declare _28Si$,m_28Si!,u_m_28Si!,u_rel_m_28Si!
    declare _29Si$,m_29Si!,u_m_29Si!,u_rel_m_29Si!
    declare _30Si$,m_30Si!,u_m_30Si!,u_rel_m_30Si!
    declare _36Ar$,m_36Ar!,u_m_36Ar!,u_rel_m_36Ar!
    declare _38Ar$,m_38Ar!,u_m_38Ar!,u_rel_m_38Ar!
    declare _40Ar$,m_40Ar!,u_m_40Ar!,u_rel_m_40Ar!
    declare _87Rb$,m_87Rb!,u_m_87Rb!,u_rel_m_87Rb!
    declare _107Ag$,m_107Ag!,u_m_107Ag!,u_rel_m_107Ag!
    declare _109Ag$,m_109Ag!,u_m_109Ag!,u_rel_m_109Ag!
    declare _133Cs$,m_133Cs!,u_m_133Cs!,u_rel_m_133Cs!
    
    
    declare _c0$,c0!,SI_c0$
    declare _mu0$,mu0!,SI_mu0$
    declare _epsilon0$,epsilon0!,SI_epsilon0$
    declare _12C_$,m_12C_!,SI_12C$
    declare _Mu$,Mu!,SI_Mu$
    declare _12C__$,m_12C__!,SI_m12C$
    declare _K_J90$,K_J90!,SI_K_J90$
    declare _R_K90$,R_K90!,SI_R_K90$
    
    
    print "...als erste Idee für eine Chemie-Includedatei\n"
    ' ---------------------------------------------------------------------
    ' Relative Atommassen (Stand 2003 + Verbesserungen bis 2014 eingearbeitet)
    ' Bez.  Variable   Wert   Relative_Unsicherheit u_rel
    ' ---------------------------------------------------------------------
    _N$="Rel. Neutronenmasse":m_N!=1.00866491574:u_m_N!=0.00000000056:u_rel_m_N!=5.6*10^-10
    _1H$="Wasserstoff":m_1H!=1.00782503207:u_m_1H!=0.00000000010:u_rel_m_1H!=10^-10
    _2H$="Deuterium":m_2H!=2.014101778040:u_m_2H!=0.000000000080:u_rel_m_2H!=4*10^-11 
    _3H$="Tritium":m_3H!=3.0160492777:u_m_3H!=0.0000000025:u_rel_m_3H!=8.2*10^-10
    _3He$="Helium":m_3He!=3.0160293191:u_m_3He!=0.0000000026:u_rel_m_3He!=8.6*10^-10
    _4He$="Helium4":m_4He!=4.002603254131:u_m_4He!=0.000000000062:u_rel_m_4He!=1.5*10^-11
    _12C$="Kohlenstoff12":m_12C!=12:u_m_12C!=0.0:u_rel_m_12C!=0.0
    _16O$="Sauerstoff":m_16O!=15.99491461957:u_m_16O!=0.00000000018:u_rel_m_16O!=1.1*10^-11
    _28Si$="Silizium":m_28Si!=27.97692653496:u_m_28Si!=0.00000000062:u_rel_m_28Si!=2.2*10^-11
    _29Si$="Silizium29":m_29Si!=28.9764946625:u_m_29Si!=0.0000000020:u_rel_m_29Si!=6.9*10^-11
    _30Si$="Silizium30":m_30Si!=29.973770171:u_m_30Si!=0.000000032:u_rel_m_30Si!=1.1*10^-9
    _36Ar$="Argon36":m_36Ar!=35.967545105:u_m_36Ar!=0.000000028:u_rel_m_36Ar!=7.8*10^-10
    _38Ar$="Argon38":m_38Ar!=37.96273239:u_m_38Ar!=0.00000036:u_rel_m_38Ar!=9.5*10^-9
    _40Ar$="Argon40":m_40Ar!=39.9623831225:u_m_40Ar!=0.0000000029:u_rel_m_40Ar!=7.2*10^-11
    _87Rb$="Rubidium87":m_87Rb!=86.909180535:u_m_87Rb!=0.000000010:u_rel_m_87Rb!=1.2*10^-10
    _107Ag$="Silber":m_107Ag!=106.9050968:u_m_107Ag!=0.0000046:u_rel_m_107Ag!=4.3*10^-8
    _109Ag$="Silber109":m_109Ag!=108.9047523:u_m_109Ag!=0.0000031:u_rel_m_109Ag!=2.9*10^-8
    _133Cs$="Caesium":m_133Cs!=132.905451963:u_m_133Cs!=0.000000013:u_rel_m_133Cs!=9.8*10^-11
    
    
    
    
    declare _Ag$,m_Ag!
    declare _Al$,m_Al!
    declare _As$,m_As!
    declare _Au$,m_Au!
    declare _B$,m_B!
    declare _Ba$,m_Ba!
    declare _Bi$,m_Bi!
    declare _Br$,m_Br!
    declare _C$,m_C!
    declare _Ca$,m_Ca!
    declare _Cd$,m_Cd!
    declare _Cl$,m_Cl!
    declare _Co$,m_Co!
    declare _Cr$,m_Cr!
    declare _Cu$,m_Cu!
    declare _F$,m_F!
    declare _Fe$,m_Fe!
    declare _H$,m_H!
    declare _Hg$,m_Hg!
    declare _J$,m_J!
    declare _K$,m_K!
    declare _Mg$,m_Mg!
    declare _Mn$,m_Mn!
    declare _N_$,m_N_! '******
    declare _Na$,m_Na!
    declare _Ni$,m_Ni!
    declare _O$,m_O!
    declare _P$,m_P!
    declare _Pb$,m_Pb!
    declare _Pt$,m_Pt!
    declare _S$,m_S!
    declare _Sb$,m_Sb!
    declare _Se$,m_Se!
    declare _Si$,m_Si!
    declare _Sn$,m_Sn!
    declare _Sr$,m_Sr!
    declare _Te$,m_Te!
    declare _Ti$,m_Ti!
    declare _U$,m_U!
    declare _Zn$,m_Zn!
    
    
    _Ag$="Silber":m_Ag!=107.87
    _Al$="Aluminium":m_Al!=26.98
    _As$="Arsen":m_As!=74.92
    _Au$="Gold":m_Au!=196.97
    _B$="Bor":m_B!=10.81
    _Ba$="Barium":m_Ba!=137.34
    _Bi$="Wismut":m_Bi!=208.98
    _Br$="Brom":m_Br!=79.90
    _C$="Kohlenstoff":m_C!=12.01
    _Ca$="Kalzium":m_Ca!=40.08
    _Cd$="Cadmium":m_Cd!=112.40
    _Cl$="Chlor":m_Cl!=35.45
    _Co$="Kobalt":m_Co!=58.93
    _Cr$="Chrom":m_Cr!=52.00
    _Cu$="Kupfer":m_Cu!=63.55
    _F$="Fluor":m_F!=19.00
    _Fe$="Eisen":m_Fe!=55.85
    _H$="Wasserstoff":m_H!=1.01
    _Hg$="Quecksilber":m_Hg!=200.59
    _J$="Jod":m_J!=126.90
    _K$="Kalium":m_K!=39.10
    _Mg$="Magnesium":m_Mg!=24.31
    _Mn$="Mangan":m_Mn!=54.94
    _N_$="Stickstoff":m_N_!=14.01
    _Na$="Natrium":m_Na!=22.99
    _Ni$="Nickel":m_Ni!=58.70
    _O$="Sauerstoff":m_O!=16.00
    _P$="Phosphor":m_P!=30.97
    _Pb$="Blei":m_Pb!=207.2
    _Pt$="Platin":m_Pt!=195.09
    _S$="Schwefel":m_S!=32.06
    _Sb$="Antimon":m_Sb!=121.75
    _Se$="Selen":m_Se!=78.96
    _Si$="Silizium":m_Si!=28.09
    _Sn$="Zinn":m_Sn!=118.69
    _Sr$="Strontium":m_Sr!=87.62
    _Te$="Tellur":m_Te!=127.60
    _Ti$="Titan":m_Ti!=47.90
    _U$="Uran":m_U!=238.03
    _Zn$="Zink":m_Zn!=65.38
    
    
    '----------------------------------------------
    ' Other important quantities (CODATA 2010)
    '----------------------------------------------
    _c0$="speed_of_light_in_vacuum":c0!=299792458:SI_c0$="[m/s]"
    '_mu0$="magnetic_constant":mu0!=4*pi()*10^-7 :SI_mu0$="[N/A^2]"
    _mu0$="Magnetische_Feldkonstante":mu0!=12.566370614*10^-7:SI_mu0$="[N/A^2]"
    _epsilon0$="electric_constant":epsilon0!=8.854187817*10^-12:SI_epsilon0$="[F/m]"'=1/(µ0*c0^2)
    _12C$="molar_mass_of_12C":m_12C!=12*10^-3:SI_12C$="[kg/mol]"
    _Mu$="molar_mass_constant":Mu!=10^-3 :SI_Mu$="[kg/mol]"
    _12C_$="relative_atomic_mass_of_12C":m_12C_!=12:SI_m12C$="[u]"
    _K_J90$="conventional_value_of_Josephson_constant":K_J90!=483597.9:SI_K_J90$="[GHz/V]"
    _R_K90$="conventional_value_of_von_Klitzing_constant":R_K90!=25812.807:SI_R_K90$="[Ohm]"
    '-----------------------------------------------------------------------------------------
    Print " Hurra! Werte wurden ohne Laufzeitfehler eingelesen."
    waitinput
    End
    Alles anzeigen

    PPS: Rechtschreibfehler bemerkt: Richtig heißt es 'Disaster' (Katastrophe), nicht Desaster...

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    6 Mal editiert, zuletzt von p. specht (9. August 2015 um 15:04)

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 23. August 2015 um 20:34
    • #95

    Abt. Fibonacci-Zahlen
    ==============
    Leonardo Fibonacci beschrieb im Jahr 1202 das Wachstum einer Kaninchenpopulation und fand dazu die heute nach ihm benannte Zahlenfolge der Fibonacci-Zahlen. Geschichtswissenschaftler wiesen allerdings auf die frühe Erwähnung dieser Folge in Sanskrit-Texten um ca. 450 vor Chr. hin.

    Dann wurde entdeckt, daß diese Folge in der gesamten Natur vorkommt: Die Anzahl der Vorfahren männlicher Honigbienen (Drohnen), die Zahl der Schuppen in den einzelnen Schuppenringen einer Ananas, die Samenlamellen der Spiralringe von Fichtenzapfen, Samenstände von Sonnenblumen oder die Blütenblatt-Anzahl bestimmter Blumen (etwa Astern) folgt dieser Reihe - wer also z.B. je das Zupfspiel "XY liebt mich - mit Herzen - mit Schmerzen - garnicht!" gespielt hat: Hier bietet sich eine Berechnungsmöglichkeit für erotische Erfolge - im vorhinein! :)

    Später erweiterten Mathematiker die Fibonacci-Reihe auch auf den negativen Zahlenbereich, was u.a. zum Zeckendorf-Theorem führte. Dieses besagt, daß jede beliebige ganze Zahl aus Folgen nicht-benachbarter negativ-indexierter Fibonacci-Zahlen zusammengesetzt werden kann. Ein daraus abgeleiteter Binärstellencode kann z.B. keine nebeneinander auftretenden 1-Werte aufweisen, was bei bestimmten Anwendungen eine zuverlässige Fehlererkennung ermöglicht.
    Gruss

    P.S.: Weitere Anwendungen ergaben sich bei der Organisation von Datenbanken in Form der sog. Fibonacci-Bäume. Diese sind heutzutage allerdings eher von theoretischem Wert (Laufzeitanalyse).

    Code
    WindowTitle upper$(\
    "  Allg. Fibonacci-Zahlen:  Gültigkeitsbereich verschiedener Formeln (ua.: Moivre-Binet) testen")
    '(CL) CopyLeft 2015-08 in XProfan11.2a by P.Specht, Wien (Austria), OHNE JEDWEDE GEWÄHR!  
    'Info-Basis: https://de.wikipedia.org/wiki/Fibonacci-Folge
    Window 0,0-%maxx,%maxy-50:font 2:Set("decimals",0):declare n&,vz&,sg!
    AppendMenubar 100,"N "+"_______ Tab.1 "+"___________________________ Tab.2 "+\
    "__________________________________ Fib(%g) "+"____________________________ Fib(#) "+\
    "_____________________ fibz_MoivreBinet() "+"_____________ Fehler "+\
    "________________________________ N "
    
    
    var f$="00,0,01,1,02,1,03,2,04,3,05,5,06,8,07,13,08,21,09,34,10,55,11,89,12,144,13,233,"+\
    "14,377,15,610,16,987,17,1597,18,2584,19,4181,20,6765,21,10946,22,17711,23,28657,"+\
    "24,46368,25,75025,26,121393,27,196418,28,317811,29,514229,30,832040,31,1346269,"+\
    "32,2178309,33,3524578,34,5702887,35,9227465,36,14930352,37,24157817,38,39088169,"+\
    "39,63245986,40,102334155,41,165580141,42,267914296,43,433494437,44,701408733,"+\
    "45,1134903170,46,1836311903,47,2971215073,48,4807526976,49,7778742049,50,12586269025"
    
    
    var fi$="0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711,"+\
    "28657,46368,75025,121393,196418,317811,514229,832040,1346269,2178309,3524578,5702887,9227465,"+\
    "14930352,24157817,39088169,63245986,102334155,165580141,267914296,433494437,701408733,"+\
    "1134903170,1836311903,2971215073,4807526976,7778742049,12586269025,20365011074,32951280099,"+\
    "53316291173,86267571272,139583862445,225851433717,365435296162,591286729879,956722026041,"+\
    "1548008755920,2504730781961,4052739537881,6557470319842,10610209857723,17167680177565,"+\
    "27777890035288,44945570212853,72723460248141,117669030460994,190392490709135,308061521170129,"+\
    "498454011879264,806515533049393,1304969544928657,2111485077978050,3416454622906707,"+\
    "5527939700884757,8944394323791464"
    
    
    whileloop -80,80
      n&=&Loop:sg!=1:vz&=(n&>0)-(n&<0):case vz&=-1:vz&=if(int(0.5*n&)=(0.5*n&),-1,1)
      print if(n&<0,""," ");if(abs(n&)<1000," ","");if(abs(n&)<100," ","");if(abs(n&)<10," ","");n&,  
      print tab(10);if(vz&<0,""," ");format$("%g",vz&*val(substr$(f$,abs(n&)*2+2,","))),
      print tab(32);format$("%g",fib(n&)),
      print tab(54);format$(" ################0;-################0; 0",vz&*val(substr$(fi$,abs(n&)+1,","))),
      print tab(76);format$(" ################0;-################0; 0",fib(n&)),
      print tab(98);format$(" ################0;-################0; 0",fibz_MoivreBinet(n&)),
      font 0
        print tab(120);format$("+################0;-################0; 0",fibz_MoivreBinet(n&)-vz&*val(substr$(fi$,abs(n&)+1,","))),
      font 2
    
    
    print tab(142);if(n&<0,""," ");if(abs(n&)<1000," ","");if(abs(n&)<100," ","");if(abs(n&)<10," ","");n&
    if %csrlin>49:print "   [Taste]";:waitinput:cls:endif
    endwhile
    waitinput
    END
    
    
    Proc fib :parameters n&:declare i&,vz!,sg!,f0!,f1!,f2!
    sg!=1:vz!=(n&>0)-(n&<0):n&=abs(n&):f0!=1
    case vz&=-1:sg!=if(int(0.5*n&)=(0.5*n&),-1,1)
    while i&<n&:f2!=f1!+f0!:f0!=f1!:f1!=f2!:inc i&:endwhile
    return sg!*f2!
    endproc
    
    
    Proc fibz_MoivreBinet :parameters n&:case n&=0:return 0
    var vz!=(n&>0)-(n&<0):n&=abs(n&)
    var sg!=1:case vz&=-1:sg!=if(int(0.5*n&)=(0.5*n&),-1,1)
    var phi!=(1+sqrt(5))/2:var chi!=phi!-1
    return sg!*(phi!^n& + chi!^n&)/sqrt(5)
    endproc
    Alles anzeigen

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    3 Mal editiert, zuletzt von p. specht (23. August 2015 um 21:11)

  • AxT
    Premium-Mitglied
    Reaktionen
    2.978
    Beiträge
    33.384
    • 28. August 2015 um 23:58
    • #96

    Abt. Alternate Data Streams mit X2 listen: Alternate Data Streams und die AMSI
    ======================================================================================

    Code
    'X2 XProfancode von AHT
    
    
    $H Windows.ph
    $H Messages.ph
    
    
    Declare ADSListe%, Statusbar%, Width&, Height&, KopfZeile$, AMSIScanDLL%
    Declare FolderName$, Test%, FileName$
    
    
    Proc Enable
     Parameters EnableIt&
     EnableMenu 101, not(EnableIt&)
     EnableMenu 103, not(EnableIt&)
     EnableMenu 104, not(EnableIt&)
     EnableMenu 102, EnableIt&
    EndProc
    
    
    Proc HoleErgebnisse
     Parameters Param1%, Param2%, Param3%, Param4&
     External("user32", "KillTimer", %HWND, 123321)
     Declare ScanlistAdd$
     Declare ToRead$, Scan1%, Scan2%, Scan3%, Scan4%, Scan5%, Scan6%, Zeilennummer&
     SetText Statusbar%, "Fertig!"
     External("amsiscan.dll", "SetScanlistToStart")
     ToRead$ = "ProcessName"
     Scan1% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
     ToRead$ = "ProcessID"
     Scan2% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
     ToRead$ = "Scantarget"
     Scan3% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
     ToRead$ = "IsMalware"
     Scan4% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
     ToRead$ = "Scannermessage"
     Scan5% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
     ToRead$ = "ScannerErrornumber"
     Scan6% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
     While (Scan1% > 0) And (Scan2% > 0) And (Scan3% > 0) And (Scan4% > 0) And (Scan5% > 0) And (Scan6% > 0)
      ToRead$ = "ProcessName"
      Scan1% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
      ToRead$ = "ProcessID"
      Scan2% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
      ToRead$ = "Scantarget"
      Scan3% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
      ToRead$ = "IsMalware"
      Scan4% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
      ToRead$ = "Scannermessage"
      Scan5% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
      ToRead$ = "ScannerErrornumber"
      Scan6% = External("amsiscan.dll", "GetScanlistEntry", addr(ToRead$))
      Zeilennummer& = 0
      If (Scan1% > 0) And (Scan2%  > 0) And (Scan3% > 0) And (Scan4% > 0) And (Scan5% > 0) And (Scan6% > 0)
       ScanlistAdd$ = String$(Scan3%, 0) + "|" + String$(Scan4%, 0) + "|" + String$(Scan5%, 0)
       AddString(ADSListe%, ScanlistAdd$)
      EndIf
      Zeilennummer& = Zeilennummer& + 1
     EndWhile
     Enable(1)
    EndProc
    
    
    Windowstyle 31 + 512
    WindowTitle "ADS Suche"
    Window 50, 50 - 640, 440
    PopUp "&Programm"
     AppendMenu 101, "&suche ADS auf allen Laufwerken"
     AppendMenu 103, "suche ADS in enem &Ordner"
     AppendMenu 104, "suche ADS in ener &Datei"
     Separator
     AppendMenu 102, "suche &abbrechen"
     Separator
     AppendMenu 111, "&beenden"
    Enable(1)
    Statusbar% = Create("StatusWindow", %HWND, "Im Menü eine Funktion auswählen...")
    KopfZeile$ = "ADS Name;0;380;Malware gefunden?;0;130;Scannermeldung;0;330"
    ADSListe% = Create("GridBox", %HWND, KopfZeile$, 0, 30, 30, int(abs(Width(%HWND) - 60)), int(abs(Height(%HWND) - 80)))
    AMSIScanDLL% = UseDLL("amsiscan.dll")
    Usermessages ~WM_CLOSE, ~WM_TIMER
    SetTimer 100
    While %Umessage <> ~WM_CLOSE
     Waitinput
     IF %Menuitem = 111
      SetMenuitem 0
      SendMessage(%HWND, ~WM_CLOSE, 0, 0)
     endif
     IF %UMESSAGE = ~WM_TIMER
      If &UwParam = 123321
       HoleErgebnisse(0, 0, 0, 0)
      else
       If String$(External("amsiscan.dll", "GetScanObject"), 0) <> ""
        SetText Statusbar%, "Bitte warten, es wird gesucht...  " + String$(External("amsiscan.dll", "GetScanObject"), 0)
       endif
      endif
     endif
     IF %Menuitem = 101
      SetMenuitem 0
      Enable(0)
      SetText Statusbar%, "Bitte warten, es wird gesucht..."
      ClearList ADSListe%
      FolderName$ = ""
      External("amsiscan.dll", "AmsiScanAdsInFolder", %HWND, ProcAddr("HoleErgebnisse", 4), addr(FolderName$), 0)
     endif
     IF %Menuitem = 103
      SetMenuitem 0
      FolderName$ = ChooseDir$("Bitte einen Ordner zum Scannen nach ADS auswählen:")
      If Foldername$ <> ""
        Enable(0)
        SetText Statusbar%, "Bitte warten, es wird gesucht..."
        ClearList ADSListe%
        External("amsiscan.dll", "AmsiScanAdsInFolder", %HWND, ProcAddr("HoleErgebnisse", 4), addr(FolderName$), 0)
      endif
     endif
     IF %Menuitem = 104
      SetMenuitem 0
      FileName$ = LoadFile$("Bitte eine Datei zum Scannen nach ADS auswählen:", "*")
      If FileName$ <> ""
        Enable(0)
        SetText Statusbar%, "Bitte warten, es wird gesucht..."
        ClearList ADSListe%
        External("amsiscan.dll", "AmsiScanAdsInFile", %HWND, ProcAddr("HoleErgebnisse", 4), addr(FileName$), 0)
      endif
     endif
     IF %Menuitem = 102
      SetMenuitem 0
      External("amsiscan.dll", "CancleScan", ProcAddr(HoleErgebnisse, 4))
      SetText Statusbar%, "Suche wurde abgebrochen!"
      Enable(1)
     endif
     If (Width& <> Width(%HWND)) or (Height& <> Height(%HWND))
      Width& = Width(%HWND)
      Height& = Height(%HWND)
      SetWindowPos Statusbar% = 0, 0 - 0, 0; 0
      SetWindowPos ADSListe% = 30, 30 - int(abs(Width(%HWND) - 60)), int(abs(Height(%HWND) - 80)); 0
     endif
    EndWhile
    KillTimer
    Alles anzeigen
  • AxT
    Premium-Mitglied
    Reaktionen
    2.978
    Beiträge
    33.384
    • 29. August 2015 um 05:44
    • #97

    Als Weiterentwicklung des oben stehenden Codes kann man sich zum Beispiel so etwas bauen - mit Rechtsklick kann man sich da den Inhalt des markierten ADS mit optionalem Programm anzeigen lassen (ich verwende dazu HXD Hex Editor) oder den ADS löschen lassen: Download ShowADS

    Einmal editiert, zuletzt von AxT (29. August 2015 um 13:43)

  • AxT
    Premium-Mitglied
    Reaktionen
    2.978
    Beiträge
    33.384
    • 29. August 2015 um 13:43
    • #98

    Link ist gefixt. Die Messageverarbeitung der Freeware von XProfan ist etwas nervig. ES reagiert zeitweise nicht auf WM_CLOSE und einen Repaint. Mit X2 läuft der Code besser.
    Ich hoffe, es wird klar, was das Proggie soll und tut.

    Fals es nicht klar ist, hier mal ein Screenshot:
    [Blockierte Grafik: http://abload.de/img/testnvk03.jpg]

    Hab übriegens noch ein paar Fehler gefixt.

    2 Mal editiert, zuletzt von AxT (29. August 2015 um 14:46)

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 30. August 2015 um 19:39
    • #99

    Das schaut ja echt gut aus, AHT ! Für Win-10 bestimmt super! Ich hier will allerdings VERHINDERN, daß das blöde Windows-Update mein schönes Win-7 auf Win10 updatet. Bisher habe ich es duch Platte zustopfen geschafft, daß der tägliche Updateversuch scheitert. Für einen Tipp, wie ich das ganze endgültig abstellen kann, wäre ich dankbar. In Win-10 kann man die Update-Funktion angeblich nicht mehr abstellen, und es spioniert nach Installation ohne weitere Maßnahmen den User stark aus...
    Wenn das stimmt, bin ich mit Win-7 bestens bedient und werde Updates künftig generell verbieten.
    Gruss

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

  • p. specht
    Premium-Mitglied
    Reaktionen
    986
    Beiträge
    5.665
    • 30. August 2015 um 19:43
    • #100

    Abt. Windows-Rechner in Programmen nutzen?
    ==============================
    Anbei ein erster Versuch, den Quad-Precision-Windows-Desktoprechner calc.exe für Berechnungen aus einem Programm heraus zu nutzen. Leider gibt es ja keine offizielle Schnittstelle, sodaß wieder mal Xprofans "Sendstring", "Sendkey" und die Zwischenablage zum Einsatz kommen. Das macht die Sache ziemlich langsam, aber zumindest könnte man eigene Algorithmen mit den hochgenauen Windowsrechner-Ergebnissen vergleichen und damit verifizieren.
    Gruss

    P.S.: Verwendung bitte auf Gefahr des jeweiligen Anwenders, jedwede Haftung ist ausgeschlossen!

    Code
    Cls
    ' ANWENDUNG AUF ALLEINIGE GEFAHR DES USERS! KEINE GEWÄHR!
    ' Meine Konfiguration: Profan11.2a, Win7-64 und dessen Calc.exe
    declare pid&,R$
    'run "calc.exe" 
    pid&=@WinExec("calc.exe",1)
    'Fenster-Modus (hier 1)
    ' 0 - verbirgt und deaktiviert das Fenster (~SW_HIDE)
    ' 1 - aktiviert das Fenster und zeigt es in seiner ursprünglichen Größe (~SW_SHOWNORMAL)
    ' 2 - aktiviert das Fenster und verkleinert es zum Symbol (~SW_SHOWMINIMIZED)
    ' 3 - aktiviert das Fenster und zeigt es größtmöglich an (~SW_SHOWMAXIMIZED)
    ' 4 - zeigt das Fenster in seiner normalen Größe, das gegenwärtig aktive Fenster bleibt aktiv (~SW_SHOWNOACTIVE)
    ' 5 - aktiviert das Fenster und zeigt es in aktueller Größe (~SW_SHOW)
    ' 6 - deaktiviert das Fenster und verkleinert es zum Symbol
    ' 7 - verkleinert das Fenster zum Symbol, das gegenwärtig aktive Fenster bleibt aktiv (~SW_SHOWMINNOACTIVE)
    ' 8 - Zeigt das Fenster im aktuellen Zustand, das gegenwärtig aktive Fenster bleibt aktiv (~SW_SHOWNA)
    ' 9 - gleiche Wirkung wie Modus 1 (~SW_RESTORE)  
    if pid&=0
     print "Exec-Fehler"
     beep
     waitinput
    else
      clearclip
      print "Process-ID: ",pid&  
      waitinput 300
      @SendString(pid&,"%2")
      waitinput 300
      @SendString(pid&,"1234{+}1{ENTER}")
      waitinput 300
    'Plus + = UMSCHALTTASTE (SHIFT)
    'Caret ^ = STRG-TASTE
    'Prozent % = ALT-TASTE
    'Tilde ~
    'Klammern ( )
    '+,^,%-Zeichen selbst: In geschweifte Klammern {+}
    'Geschw.Klammern selbst: {{} und {}}
    'Spezielle Tasten, die keine Zeichen darstellen: {Codetext}:
    '@SendString(W%,"Das ist die Eingabe! {ENTER}"
      repeat
    '    waitinput 40
        @SendString(pid&,"^c")
    '    waitinput 40
        R$=GetClip$()
      until R@@@edbc5df4-7053-49e0-b37c-1d8e021c951e@@@
    gt;0
      @SendString(pid&,"%{F4}")
      print R$
    endif
    
    
    waitinput
    end
    
    
    '[]Rechner-Tastenkombinationen (calc.exe von Win7)
    ' -------------------------------------------------
    ' MODUS
    ' ALT+1 Umschalten in den Standardmodus
    ' ALT+2 Umschalten in den wissenschaftlichen Modus
    ' ALT+3 Umschalten in den Programmierermodus
    ' ALT+4 Umschalten in den Statistikmodus
    ' STRG+E Öffnen von Datumsberechnungen
    ' STRG+H Ein- oder Ausschalten des Berechnungsverlaufs
    ' STRG+U Öffnen der Einheitenumrechnung
    ' ALT+C Berechnen oder Lösen von Datumsberechnungen und Arbeitsblättern
    ' F1 Öffnen der Rechner-Hilfe
    ' EINGABEN UND MEMO
    ' STRG+Q Verwenden der Schaltfläche Memo=Memo-Wert: M- 
    ' STRG+P Verwenden der Schaltfläche Memo=Memo+Wert:M+ 
    ' STRG+M Verwenden der Schaltfläche Memo-Store: MS 
    ' STRG+R Verwenden der Schaltfläche Memo-Recall: MR 
    ' STRG+L Verwenden der Schaltfläche Memo-Clear: MC 
    ' % Verwenden der Schaltfläche % 
    ' F9 Verwenden der Schaltfläche Vorzeichenwechsel: +/- 
    ' / Verwenden der Schaltfläche / 
    ' * Verwenden der Schaltfläche * 
    ' + Verwenden der Schaltfläche + 
    ' - Verwenden der Schaltfläche - 
    ' R Verwenden der Schaltfläche 1/x 
    ' @ Verwenden der Wurzelschaltfläche
    ' 0-9 Verwenden der Zahlenschaltflächen (0-9)
    ' = Verwenden der Schaltfläche {Enter}: = 
    ' . Verwenden der Schaltfläche , (Dezimaltrennzeichen, Komma)
    ' RÜCKTASTE Verwenden der Schaltfläche {Lösche letzten Tastendruck}
    ' ESC Verwenden der Schaltfläche CLEAR: C 
    ' ENTF Verwenden der Schaltfläche CANCELERROR: CE 
    ' BERECHNUNGSVERLAUF
    ' STRG+UMSCHALT+D Löschen des Berechnungsverlaufs
    ' F2 Bearbeiten des Berechnungsverlaufs
    ' NACH-OBEN-TASTE Navigation nach oben im Berechungsverlauf
    ' NACH-UNTEN-TASTE Navigation nach unten im Berechungsverlauf
    ' ESC Abbrechen der Bearbeitung des Berechnungsverlaufs
    ' EINGABETASTE Neuberechnen des Berechnungsverlaufs nach der Bearbeitung
    ' WISSENSCHAFTLICH
    ' F3 Auswählen von Deg im wissenschaftlichen Modus
    ' F4 Auswählen von Rad im wissenschaftlichen Modus
    ' F5 Auswählen von Grad im wissenschaftlichen Modus
    ' I Verwenden der Schaltfläche Inv im wissenschaftlichen Modus
    ' D Verwenden der Schaltfläche Mod im wissenschaftlichen Modus
    ' STRG+S Verwenden der Schaltfläche sinh im wissenschaftlichen Modus
    ' STRG+O Verwenden der Schaltfläche cosh im wissenschaftlichen Modus
    ' STRG+T Verwenden der Schaltfläche tanh im wissenschaftlichen Modus
    ' ( Verwenden der Schaltfläche ( im wissenschaftlichen Modus
    ' ) Verwenden der Schaltfläche ) im wissenschaftlichen Modus
    ' N Verwenden der Schaltfläche Log-n: ln im wissenschaftlichen Modus
    ' ; Verwenden der Schaltfläche Ganzteil: Int im wissenschaftlichen Modus
    ' S Verwenden der Schaltfläche sin im wissenschaftlichen Modus
    ' O Verwenden der Schaltfläche cos im wissenschaftlichen Modus
    ' T Verwenden der Schaltfläche tan im wissenschaftlichen Modus
    ' M Verwenden der Schaltfläche dms im wissenschaftlichen Modus
    ' P Verwenden der Pi-Schaltfläche im wissenschaftlichen Modus
    ' V Verwenden der Schaltfläche F-E im wissenschaftlichen Modus
    ' X Verwenden der Schaltfläche Exp im wissenschaftlichen Modus
    ' Q Verwenden der Schaltfläche x^2 im wissenschaftlichen Modus
    ' Y Verwenden der Schaltfläche x^y im wissenschaftlichen Modus
    ' # Verwenden der Schaltfläche x^3 im wissenschaftlichen Modus
    ' L Verwenden der Schaltfläche Log10: log im wissenschaftlichen Modus
    ' ! Verwenden der Schaltfläche Faktorielle: n! im wissenschaftlichen Modus
    ' STRG+Y Verwenden der Schaltfläche y.Wurzel_x im wissenschaftlichen Modus
    ' STRG+B Verwenden der Schaltfläche 3.Wurzel_x im wissenschaftlichen Modus
    ' STRG+G Verwenden der Schaltfläche 10^x im wissenschaftlichen Modus
    ' A-F Verwenden der Schaltflächen A-F im wissenschaftlichen Modus
    ' PROGRAMMIEREN
    ' F5 Auswählen von Hex im Programmierermodus
    ' F6 Auswählen von Dez im Programmierermodus
    ' F7 Auswählen von Okt im Programmierermodus
    ' F8 Auswählen von Bin im Programmierermodus
    ' F12 Auswählen von Qword im Programmierermodus
    ' F2 Auswählen von Dword im Programmierermodus
    ' F3 Auswählen von Word im Programmierermodus
    ' F4 Auswählen von Byte im Programmierermodus
    ' K Verwenden der Schaltfläche RoR im Programmierermodus
    ' J Verwenden der Schaltfläche RoL im Programmierermodus
    ' < Verwenden der Schaltfläche Lsh im Programmierermodus
    ' > Verwenden der Schaltfläche Rsh im Programmierermodus
    ' % Verwenden der Schaltfläche Mod im Programmierermodus
    ' ( Verwenden der Schaltfläche ( im Programmierermodus
    ' ) Verwenden der Schaltfläche ) im Programmierermodus
    ' | Verwenden der Schaltfläche Or im Programmierermodus
    ' ^ Verwenden der Schaltfläche Xor im Programmierermodus
    ' ~ Verwenden der Schaltfläche Not im Programmierermodus
    ' & Verwenden der Schaltfläche And im Programmierermodus
    ' A-F Verwenden der Schaltflächen A-F im wissenschaftlichen Modus
    ' LEERTASTE Umschalten des Bitwerts im Programmierermodus
    ' STATISTIK
    ' A Verwenden der Mittelwertschaltfläche im Statistikmodus
    ' STRG+A Verwenden der Schaltfläche für den Mittelwert der Quadrate im Statistikmodus
    ' S Verwenden der Summenschaltfläche im Statistikmodus
    ' STRG+S Verwenden der Schaltfläche für die Summe der Quadrate im Statistikmodus
    ' T Verwenden der Schaltfläche s n-1 im Statistikmodus
    ' STRG+T Verwenden der Schaltfläche s n im Statistikmodus
    ' D Verwenden der Schaltfläche CAD im Statistikmodus
    Alles anzeigen

    HP255G7:Win10pro2.004,4*AMD Ryzen3200U@2.60GHz,6+2GB-RadeonVega/237GBSSD:intlDVDRW,3xUSB3 ext4TB-HDX,XProfanX3+Xasm/Xpse

    3 Mal editiert, zuletzt von p. specht (30. August 2015 um 20:11)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Windows 11

  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™