Français
Source/ Codesnippets

Komplexe Zahlenarithmetik comme CLASS

 

p.specht

ici un Versuch einer objektorientierten Version zum le calcul avec Komplexen payons comme Class CPLX. Es manquer encore Wurzelfunktion et quelques Hilfsfunktionen, z.B. Koordinatensystem-Transformationen.
Titre de la fenêtre "Eine Class pour Komplexe Zahlenarithmetik"
' (CL) CopyLeft 2013-04 ff by P.Specht(at)GMX.at
' Jegliche la responsabilité ist ausdrücklich ausgeschlossen! Betaversion pour Kurztest.
' qui Verwendung erfolgt sur eigene péril des Anwenders/qui Anwenderin!
Cls : Font 2
'{ Class cplx, Beta-Version 14.04.2013-06:00
Class cplx=re!,im!,inp@,prt@,prtln@, add@,sub@,mul@,konj@,div@, polar@,vect@,pprt@,pprtln@
' .re!: Realteil, .im!: Imaginärteil qui jeweilgen Komplexen_Zahl#
' .inp(): Manuelle Einzelwerteingabe avec Contribution
' <var#>.prt(PromptText$): Ausgabe de var#, .prtln("Test:"): Ausgabe + newline
' <var#>.add(a#,b#), .sub(a#,b#), .mul(a#,b#), .konj(a#), .div(a#,b#): Zeigerarithmetik
'
' p#.polar(a#): Wandelt Komplexe Koordinaten dans Versor(=Polar-)représentation [Longueur+Winkelgrade],
' a#.vect(p#):  Wandelt Polardarstellung [Longueur+Winkelgrade] trop Komplexen Koordinaten .re+j*.im
' p#.pprt(text$): polarprint, p#.pprtln(text$): polarprint + newline
'

proc cplx.inp

    declare re!,im!
    imprimer "Re=";:input re!
    locate %csrlin-1,%pos+20
    imprimer "Im=";:input im!
    .re!=re! : .im!=im!

endproc

proc cplx.cplx' pour declare x#:x#=new(cplx)

    declare re!,im!
    imprimer "re=";:input re!
    locate %csrlin-1,%pos+20
    imprimer "im=";:input im!
    .re!=re! : .im!=im!

endproc

proc cplx.prt

    si %pcount=1:parameters t$:imprimer t$,:endif

        imprimer format$("%g",.re!);@IF(.im!<0,"-j*"+\
        format$("%g",-1*.im!),"+j*"+format$("%g",.im!)),

    endproc

    proc cplx.prtln

        si %pcount=1:parameters t$:imprimer t$,:endif

            imprimer format$("%g",.re!);@Si(.im!<0,"-j*"+\
            format$("%g",-1*.im!),"+j*"+format$("%g",.im!))

        endproc

        proc cplx.add :parameters a#,b#

            .re! = a#.re! + b#.re!
            .im! = a#.im! + b#.im!

        endproc

        proc cplx.sub :parameters a#,b#

            .re! = a#.re! - b#.re!
            .im! = a#.im! - b#.im!

        endproc

        proc cplx.mul :parameters a#,b#

            .re! = a#.re! * b#.re! - a#.im! * b#.im!
            .im! = a#.re! * b#.im! + a#.im! * b#.re!

        endproc

        proc cplx.konj :parameters a#

            .re! = a#.re!
            .im! = -1*a#.im!

        endproc

        proc cplx.div :parameters a#,b#

            var nenn!=sqr(b#.re!)+sqr(b#.im!)
            .re! = a#.re!*b#.re! + a#.im!*b#.im!
            .im! = a#.im!*b#.re! - a#.re!*b#.im!

            si nenn!<>0

                .re! = .re!/nenn!
                .im! = .im!/nenn!

            d'autre

                si .re!<>0

                    .re! = 10^200
                    .im! = 180/pi()*arctan(.im!/.re!)

                d'autre

                    .re!=10^200
                    .im!=90

                endif

            endif

        endproc

        proc cplx.pprt

            si %pcount=1:parameters t$:imprimer t$,:endif

                imprimer format$("%g",.re!);"_in_";format$("%g",.im!);"_rad",

            endproc

            proc cplx.pprtln

                si %pcount=1:parameters t$:imprimer t$,:endif

                    imprimer format$("%g",.re!);"_in_";format$("%g",.im!);"_rad"

                endproc

                proc cplx.polar:parameters a#

                    set("decimals",12)
                    .re!=sqrt(sqr(a#.re!)+sqr(a#.im!))
                    var pi!=3.1415926535897932384626433832795028842
                    var prec&=lg(.re!)
                    var Winkel!=0

                    si Nearly(a#.re!,0,15-prec&) and Nearly(0,a#.im!,15-prec&):winkel!=0

                    elseif (a#.re!>0) and Nearly(0,a#.im!,15-prec&):winkel!=0' 10^-38

                    elseif (a#.re!>0) and (a#.im!>0) and Nearly(a#.re!,a#.im!,14-prec&):winkel!=pi!*0.25

                    elseif Nearly(a#.re!,0,15-prec&) and (a#.im!>0):winkel!=pi!*0.5

                    elseif (a#.re!<0) and (a#.im!>0) and Nearly(-a#.re!,a#.im!,14-prec&):winkel!=pi!*0.75

                    elseif (a#.re!<0) and Nearly(0,a#.im!,15-prec&):winkel!=pi!

                    elseif (a#.re!<0) and (a#.im!<0) and Nearly(-a#.re!,-a#.im!,14-prec&):winkel!=pi!*1.25

                    elseif Nearly(a#.re!,0,15-prec&) and (a#.im!<0):winkel!=pi!*1.5

                    elseif (a#.re!>0) and (a#.im!<0) and Nearly(a#.re!,-a#.im!,14-prec&):winkel!=pi!*1.75

                    elseif (a#.re!>0) and (a#.im!>0) and (a#.re!>a#.im!):winkel!=arctan(a#.im!/a#.re!)

                    elseif (a#.re!>0) and (a#.im!>0) and (a#.re!<a#.im!):winkel!=pi!/2-arctan(a#.re!/a#.im!)

                    elseif (a#.re!<0) and (a#.im!>0) and (-a#.re!<a#.im!):winkel!=pi!/2+arctan(-a#.re!/a#.im!)

                    elseif (a#.re!<0) and (a#.im!>0) and (-a#.re!>a#.im!):winkel!=pi!-arctan(a#.im!/-a#.re!)

                    elseif (a#.re!<0) and (a#.im!<0) and (a#.re!<a#.im!):winkel!=pi!+arctan(-a#.im!/-a#.re!)

                    elseif (a#.re!<0) and (a#.im!<0) and (a#.re!>a#.im!):winkel!=pi!*1.5-arctan(-a#.re!/-a#.im!)

                    elseif (a#.re!>0) and (a#.im!<0) and (a#.re!< -a#.im!):winkel!=pi!*1.5+arctan(a#.re!/-a#.im!)

                    elseif (a#.re!>0) and (a#.im!<0) and (a#.re!> -a#.im!):winkel!=2*pi!-arctan(-a#.im!/a#.re!)

                    endif

                    .im!=Winkel!

                endproc

                proc cplx.vect :parameters c#

                    .re!=c#.re!*cos(c#.im!)
                    .im!=c#.re!*sin(c#.im!)

                endproc

                ' }
                ' HAUPTTEIL:
                declare u#:dim u#,cplx
                declare v#:dim v#,cplx
                declare w#:dim w#,cplx
                u#.inp()     :u#.prtln("u:")
                v#.inp()     :v#.prtln("v:")
                w#.add(u#,v#):w#.prt("add:")
                w#.sub(u#,v#):w#.prtln("sub:")
                w#.mul(u#,v#):w#.prt("mul:")
                w#.konj(u#)  :w#.prtln("konj:")
                w#.div(u#,v#)
                imprimer w#.re!
                imprimer w#.im!
                w#.prtln("div:")
                w#.polar(u#) :w#.pprtln("polar:")
                u#.vect(w#)  :u#.prtln("vect:")
                waitinput
                dispose u#,v#,w#
 
XProfan 11
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
09.05.2021  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

496 Views

Untitledvor 0 min.
RudiB.17.04.2022
Ernst21.07.2021
Uwe ''Pascal'' Niemeier13.06.2021
R.Schneider28.05.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

p.specht (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie