| |
|
|
p.specht
| Hier una Intento uno objektorientierten Versión para Rechnen con Komplexen Pagar como Class CPLX. Lo fehlen todavía Wurzelfunktion y algunos Hilfsfunktionen, z.B. Koordinatensystem-Transformationen.
Título de la ventana "Eine Class para Komplexe Zahlenarithmetik"
' (CL) CopyLeft 2013-04 ff by P.Pájaro carpintero(at)GMX.at
' Jegliche Haftung es ausdrücklich ausgeschlossen! Betaversion después de Kurztest.
' El Verwendung es en propio Gefahr des Anwenders/el Anwenderin!
Cls : Font 2
'{ Class cplx, Beta-Versión 14.04.2013-06:00
Class cplx=re!,en el!,inp@,prt@,prtln@, add@,sub@,mul@,konj@,div@, polar@,vect@,pprt@,pprtln@
' .re!: Realteil, .en el!: Imaginärteil el jeweilgen Komplexen_Zahl#
' .inp(): Manuelle Einzelwerteingabe con Entrada
' <var#>.prt(PromptText$): Edición de var#, .prtln("Test:"): Edición + newline
' <var#>.add(a#,b#), .sub(a#,b#), .mul(a#,b#), .konj(a#), .div(a#,b#): Zeigerarithmetik
'
' p#.polar(a#): Wandelt Komplexe Koordinaten en Versor(=Polar-)darstellung [Longitud+Winkelgrade],
' a#.vect(p#): Wandelt Polardarstellung [Longitud+Winkelgrade] a Komplexen Koordinaten .re+j*.en el
' p#.pprt(texto$): polarprint, p#.pprtln(texto$): polarprint + newline
'
proc cplx.inp
declarar re!,en el!
imprimir "Re=";:input re!
locate %csrlin-1,%pos+20
imprimir "Im=";:input en el!
.re!=re! : .en el!=en el!
ENDPROC
proc cplx.cplx' para declarar x#:x#=new(cplx)
declarar re!,en el!
imprimir "re=";:input re!
locate %csrlin-1,%pos+20
imprimir "im=";:input en el!
.re!=re! : .en el!=en el!
ENDPROC
proc cplx.prt
if %pcount=1:parámetros t$:imprimir t$,:endif
imprimir format$("%g",.re!);@IF(.en el!<0,"-j*"+\
format$("%g",-1*.en el!),"+j*"+format$("%g",.en el!)),
ENDPROC
proc cplx.prtln
if %pcount=1:parámetros t$:imprimir t$,:endif
imprimir format$("%g",.re!);@If(.en el!<0,"-j*"+\
format$("%g",-1*.en el!),"+j*"+format$("%g",.en el!))
ENDPROC
proc cplx.add :parámetros a#,b#
.re! = a#.re! + b#.re!
.en el! = a#.en el! + b#.en el!
ENDPROC
proc cplx.sub :parámetros a#,b#
.re! = a#.re! - b#.re!
.en el! = a#.en el! - b#.en el!
ENDPROC
proc cplx.mul :parámetros a#,b#
.re! = a#.re! * b#.re! - a#.en el! * b#.en el!
.en el! = a#.re! * b#.en el! + a#.en el! * b#.re!
ENDPROC
proc cplx.konj :parámetros a#
.re! = a#.re!
.en el! = -1*a#.en el!
ENDPROC
proc cplx.div :parámetros a#,b#
var nenn!=sqr(b#.re!)+sqr(b#.en el!)
.re! = a#.re!*b#.re! + a#.en el!*b#.en el!
.en el! = a#.en el!*b#.re! - a#.re!*b#.en el!
if nenn!<>0
.re! = .re!/nenn!
.en el! = .en el!/nenn!
más
if .re!<>0
.re! = 10^200
.en el! = 180/pi()*arctan(.en el!/.re!)
más
.re!=10^200
.en el!=90
endif
endif
ENDPROC
proc cplx.pprt
if %pcount=1:parámetros t$:imprimir t$,:endif
imprimir format$("%g",.re!);"_in_";format$("%g",.en el!);"_rad",
ENDPROC
proc cplx.pprtln
if %pcount=1:parámetros t$:imprimir t$,:endif
imprimir format$("%g",.re!);"_in_";format$("%g",.en el!);"_rad"
ENDPROC
proc cplx.polar:parámetros a#
set("decimals",12)
.re!=sqrt(sqr(a#.re!)+sqr(a#.en el!))
var pi!=3.1415926535897932384626433832795028842
var prec&=lg(.re!)
var Winkel!=0
if Nearly(a#.re!,0,15-prec&) and Nearly(0,a#.en el!,15-prec&):winkel!=0
elseif (a#.re!>0) and Nearly(0,a#.en el!,15-prec&):winkel!=0' 10^-38
elseif (a#.re!>0) and (a#.en el!>0) and Nearly(a#.re!,a#.en el!,14-prec&):winkel!=pi!*0.25
elseif Nearly(a#.re!,0,15-prec&) and (a#.en el!>0):winkel!=pi!*0.5
elseif (a#.re!<0) and (a#.en el!>0) and Nearly(-a#.re!,a#.en el!,14-prec&):winkel!=pi!*0.75
elseif (a#.re!<0) and Nearly(0,a#.en el!,15-prec&):winkel!=pi!
elseif (a#.re!<0) and (a#.en el!<0) and Nearly(-a#.re!,-a#.en el!,14-prec&):winkel!=pi!*1.25
elseif Nearly(a#.re!,0,15-prec&) and (a#.en el!<0):winkel!=pi!*1.5
elseif (a#.re!>0) and (a#.en el!<0) and Nearly(a#.re!,-a#.en el!,14-prec&):winkel!=pi!*1.75
elseif (a#.re!>0) and (a#.en el!>0) and (a#.re!>a#.en el!):winkel!=arctan(a#.en el!/a#.re!)
elseif (a#.re!>0) and (a#.en el!>0) and (a#.re!<a#.en el!):winkel!=pi!/2-arctan(a#.re!/a#.en el!)
elseif (a#.re!<0) and (a#.en el!>0) and (-a#.re!<a#.en el!):winkel!=pi!/2+arctan(-a#.re!/a#.en el!)
elseif (a#.re!<0) and (a#.en el!>0) and (-a#.re!>a#.en el!):winkel!=pi!-arctan(a#.en el!/-a#.re!)
elseif (a#.re!<0) and (a#.en el!<0) and (a#.re!<a#.en el!):winkel!=pi!+arctan(-a#.en el!/-a#.re!)
elseif (a#.re!<0) and (a#.en el!<0) and (a#.re!>a#.en el!):winkel!=pi!*1.5-arctan(-a#.re!/-a#.en el!)
elseif (a#.re!>0) and (a#.en el!<0) and (a#.re!< -a#.en el!):winkel!=pi!*1.5+arctan(a#.re!/-a#.en el!)
elseif (a#.re!>0) and (a#.en el!<0) and (a#.re!> -a#.en el!):winkel!=2*pi!-arctan(-a#.en el!/a#.re!)
endif
.en el!=Winkel!
ENDPROC
proc cplx.vect :parámetros c#
.re!=c#.re!*cos(c#.en el!)
.en el!=c#.re!*sin(c#.en el!)
ENDPROC
' }
' HAUPTTEIL:
declarar u#:dim u#,cplx
declarar v#:dim v#,cplx
declarar 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#)
imprimir w#.re!
imprimir w#.en el!
w#.prtln("div:")
w#.polar(u#) :w#.pprtln("polar:")
u#.vect(w#) :u#.prtln("vect:")
waitinput
disponer u#,v#,w#
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 09.05.2021 ▲ |
|
|
|