Biblioteca de operaciones en el campo delos números complejos
La siguiente biblioteca, solo contiene la función suma de números complejos (próximamente mas operadores aritméticos sobre C),
me idee la forma de operar números complejos como arreglos, pero la arquitectura actual de PSEIT solo permite que la variable de salida sea un numero y no un arreglo de números, mi sugerencia es que PSEINT soporte este tipo de datos en la salida de un subproceso.
SubProceso suma_ = sumaNComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension suma_[2]
definir suma_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = numComplejo1[1] + numComplejo2[1]
//imprimir parteReal_
parteImaginaria_ = numComplejo1[2] + numComplejo2[2]
//imprimir parteImaginaria_
Proceso tipodedato_numerocomplejo
Dimension numComplejo1[2];
Definir numComplejo1 Como Real;
Dimension numComplejo2[2];
Definir numComplejo2 Como Real
Dimension numComplejo3[2];
Definir numComplejo3 Como Real
imprimir "ingrese el primer numero complejo, parte real"
leer numComplejo1[1]
imprimir "ingrese el primer numero complejo, parte imaginaria"
leer numComplejo1[2]
imprimir "el numero complejo es ", ConvertirATexto(numComplejo1[1]), "+", ConvertirATexto(numComplejo1[2]), "*i"
imprimir ""
imprimir "ingrese el segundo numero complejo, parte real"
leer numComplejo2[1]
imprimir "ingrese el segundo numero complejo, parte imaginaria"
leer numComplejo2[2]
imprimir "el numero complejo es ", ConvertirATexto(numComplejo1[1]), "+", ConvertirATexto(numComplejo1[2]), "*i"
imprimir ""
imprimir sumaNComplejos(numComplejo1, numComplejo2)
FinProceso
Gracias por el desarrollo de PSEINT
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Agregados resta y multiplicación de números complejos
SubProceso expresion_nc <- imprimir_numComplejo( numComplejo1 por referencia )
Definir expresion_nc Como cadena;
expresion_nc = ConvertirATexto(numComplejo1[1])
Si numComplejo1[2] <> 0 Entonces
Si numComplejo1[2] > 0 Entonces
expresion_nc = expresion_nc+"+"+ConvertirATexto(numComplejo1[2])+"*i"
sino
expresion_nc = expresion_nc+ConvertirATexto(numComplejo1[2])+"*i"
FinSi
Fin Si
Fin SubProceso
SubProceso suma_ = suma_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension suma_[2]
definir suma_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = numComplejo1[1] + numComplejo2[1]
//imprimir parteReal_
parteImaginaria_ = numComplejo1[2] + numComplejo2[2]
//imprimir parteImaginaria_
SubProceso resta_ = resta_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension resta_[2]
definir resta_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = numComplejo1[1] - numComplejo2[1]
//imprimir parteReal_
parteImaginaria_ = numComplejo1[2] - numComplejo2[2]
//imprimir parteImaginaria_
SubProceso multiplicacion_ = multiplicacion_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension multiplicacion_[2]
definir multiplicacion_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = (numComplejo1[1] * numComplejo2[1]) - (numComplejo1[2] * numComplejo2[2])
//imprimir parteReal_
parteImaginaria_ = (numComplejo1[1] * numComplejo2[2]) + (numComplejo1[2] * numComplejo2[1])
//imprimir parteImaginaria_
multiplicacion_[1] = parteReal_
multiplicacion_[2] = parteImaginaria_
// (a+bi) * (c+di) { ( ac ) - ( bd ), ( ( ad ) + ( b*c ) ) }
imprimir "la multiplicacion es ", imprimir_numComplejo( multiplicacion_ )
Fin SubProceso
Proceso tipodedato_numerocomplejo
Dimension numComplejo1[2];
Definir numComplejo1 Como Real;
Dimension numComplejo2[2];
Definir numComplejo2 Como Real
Dimension numComplejo3[2];
Definir numComplejo3 Como Real
imprimir "ingrese el primer numero complejo, parte real"
leer numComplejo1[1]
imprimir "ingrese el primer numero complejo, parte imaginaria"
leer numComplejo1[2]
imprimir "el numero complejo es ", imprimir_numComplejo(numComplejo1)
imprimir ""
imprimir "ingrese el segundo numero complejo, parte real"
leer numComplejo2[1]
imprimir "ingrese el segundo numero complejo, parte imaginaria"
leer numComplejo2[2]
imprimir "el numero complejo es ", imprimir_numComplejo(numComplejo2)
imprimir ""
imprimir suma_NComplejos( numComplejo1, numComplejo2 )
imprimir resta_NComplejos( numComplejo1, numComplejo2 )
imprimir multiplicacion_NComplejos( numComplejo1, numComplejo2 )
FinProceso
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
// Biblioteca de operaciones aritmeticas en el campo de los números complejos
// version 0.0.5 actualizacion Abril 30 2015 Por Compsystems
SubProceso negativo_ <- negativo_NComplejo( numComplejo1 por referencia )
dimension negativo_[2]
definir negativo_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = -numComplejo1[1]
//imprimir parteReal_
parteImaginaria_ = -numComplejo1[2]
negativo_[1] = parteReal_
negativo_[2] = parteImaginaria_
// -(a+bi) = -a + -b*i //
Fin SubProceso
SubProceso expresion_nc <- imprimir_numComplejo( numComplejo1 por referencia )
Definir expresion_nc Como cadena;
definir a,b como real
a = numComplejo1[1]
b = numComplejo1[2]
Si a = 0 Entonces
expresion_nc = "0"
Sino
expresion_nc = ConvertirATexto(a)
Fin Si
Si b <> 0 Entonces
Si b > 0 Entonces
Si b = 1 Entonces
expresion_nc = expresion_nc+"+"+ConvertirATexto(b)+"*i"
Sino
expresion_nc = expresion_nc+"+"+ConvertirATexto(b)+"*i"
Fin Si
sino
expresion_nc = expresion_nc+ConvertirATexto(b)+"*i"
FinSi
Sino
expresion_nc = expresion_nc+"+0*i"
Fin Si
Fin SubProceso
SubProceso suma_ = suma_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension suma_[2]
definir suma_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir a,b,c,d como real
a = numComplejo1[1]
b = numComplejo1[2]
c = numComplejo2[1]
d = numComplejo2[2]
SubProceso resta_ = resta_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension resta_[2]
definir resta_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir a,b,c,d como real
a = numComplejo1[1]
b = numComplejo1[2]
c = numComplejo2[1]
d = numComplejo2[2]
SubProceso multiplicacion_ = multiplicacion_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension multiplicacion_[2]
definir multiplicacion_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir a,b,c,d como real
a = numComplejo1[1]
b = numComplejo1[2]
c = numComplejo2[1]
d = numComplejo2[2]
SubProceso divicion_ = divicion_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension divicion_[2]
definir divicion_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir denominador_ como real
definir a,b,c,d como real
a = numComplejo1[1]
b = numComplejo1[2]
c = numComplejo2[1]
d = numComplejo2[2]
SubProceso potenciacion_ = potenciacion_NComplejos( numComplejo1 por referencia, exponente_ )
dimension potenciacion_[2]
definir potenciacion_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir a,b, mult como real
a = numComplejo1[1]
b = numComplejo1[2]
mult = 1
Si exponente_ > 1 Entonces
Para cont=1 Hasta exponente_ Hacer
mult_ = mult * numComplejo1
Fin Para
Sino
Fin Si
imprimir "la potenciacion es igual a: ", imprimir_numComplejo( potenciacion_ )
Fin SubProceso
Proceso ejemplos_tipodedato_numerocomplejo
Dimension numComplejo1[2];
Definir numComplejo1 Como Real;
Dimension numComplejo2[2];
Definir numComplejo2 Como Real
Dimension numComplejo3[2];
Definir numComplejo3 Como Real
imprimir "ingrese el primer numero complejo, parte real"
leer numComplejo1[1]
imprimir "ingrese el primer numero complejo, parte imaginaria"
leer numComplejo1[2]
imprimir "el numero complejo es ", imprimir_numComplejo(numComplejo1)
imprimir ""
imprimir "ingrese el segundo numero complejo, parte real"
leer numComplejo2[1]
imprimir "ingrese el segundo numero complejo, parte imaginaria"
leer numComplejo2[2]
imprimir "el numero complejo es ", imprimir_numComplejo(numComplejo2)
imprimir ""
imprimir suma_NComplejos( numComplejo1, numComplejo2 )
imprimir resta_NComplejos( numComplejo1, numComplejo2 )
imprimir multiplicacion_NComplejos( numComplejo1, numComplejo2 )
imprimir divicion_NComplejos( numComplejo1, numComplejo2 )
imprimir negativo_NComplejo( numComplejo1 )
FinProceso
//ingrese el primer numero complejo, parte real
//> 3
//ingrese el primer numero complejo, parte imaginaria
//> 4
//el numero complejo es 3+4i
//
//ingrese el segundo numero complejo, parte real
//> 5
//ingrese el segundo numero complejo, parte imaginaria
//> 6
//el numero complejo es 5+6i
//
//la suma es 8+10*i
//la resta es -2-2*i
//la multiplicacion es -9+38*i
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
TYPE CNum
real AS SINGLE
imaginary AS SINGLE
END TYPE
SUB AddC (Result AS CNum, Ex1 AS CNum, Ex2 AS CNum)
Result.real = Ex1.real + Ex2.real
Result.imaginary = Ex1.imaginary + Ex2.imaginary
END SUB
SUB SubC (Result AS CNum, Ex1 AS CNum, Ex2 AS CNum)
Result.real = Ex1.real - Ex2.real
Result.imaginary = Ex1.imaginary - Ex2.imaginary
END SUB
SUB MulC (Result AS CNum, Ex1 AS CNum, Ex2 AS CNum)
Result.real = Ex1.real * Ex2.real - Ex1.imaginary * Ex2.imaginary
Result.imaginary = Ex1.real * Ex2.imaginary + Ex1.imaginary * Ex2.real
END SUB
SUB DivC (Result AS CNum, Ex1 AS CNum, Ex2 AS CNum)
Result.real = (Ex1.real * Ex2.real + Ex1.imaginary * Ex2.imaginary) / (Ex2.real * Ex2.real * Ex2.imaginary * Ex2.imaginary)
Result.imaginary = (Ex1.imaginary * Ex2.real - Ex1.real * Ex2.imaginary) / (Ex2.real ^ 2 + Ex2.imaginary ^ 2)
END SUB
SUB ExpC (Result AS CNum, Ex1 AS CNum, Expn)
xp = INT(Expn)
Result.real = 1
Result.imaginary = 0
IF xp <> Expn THEN
IF xp > Expn THEN xp = xp - 1
dec = Expn - xp
whl = Expn - dec
DIM test(1 TO 2) AS CNum
ExpC test(1), Ex1, whl
NrtC test(2), Ex1, 1 / dec
MulC Result, test(1), test(2)
EXIT SUB
END IF
IF xp > 0 THEN
FOR x = 1 TO xp
MulC Result, Result, Ex1
NEXT x
ELSEIF xp < 0 THEN
FOR x = 1 TO ABS(xp)
DivC Result, Result, Ex1
NEXT x
END IF
END SUB
SUB SqrC (result AS CNum, Ex1 AS CNum)
result.real = SQR((Ex1.real + SQR(Ex1.real ^ 2 + Ex1.imaginary ^ 2)) / 2)
result.imaginary = SGN(Ex1.imaginary) * SQR((-Ex1.real + SQR(Ex1.real ^ 2 + Ex1.imaginary ^ 2)) / 2)
END SUB
SUB NrtC (Result AS CNum, Ex1 AS CNum, root)
DIM test(1 TO 2) AS CNum
test(1).real = AbsC(Ex1) ^ (1 / root)
test(1).imaginary = 0
test(2).real = COS(ArgC(Ex1) / root)
test(2).imaginary = SIN(ArgC(Ex1) / root)
MulC Result, test(1), test(2)
END SUB
SUB ConC (Result AS CNum, Ex1 AS CNum)
Result.real = Ex1.real
Result.imaginary = -Ex1.imaginary
END SUB
FUNCTION AbsC (Ex1 AS CNum)
AbsC = SQR(Ex1.real ^ 2 + Ex1.imaginary ^ 2)
END FUNCTION
FUNCTION ArgC (Ex1 AS CNum)
IF Ex1.real > 0 THEN ArgC = ATN(Ex1.imaginary / Ex1.real)
IF Ex1.real < 0 THEN IF Ex1.imaginary >= 0 THEN ArgC = ATN(Ex1.imaginary / Ex1.real) + _PI ELSE ArgC = ATN(Ex1.imaginary / Ex1.real) - _PI
IF Ex1.real = 0 THEN IF Ex1.imaginary = 0 THEN EXIT SUB ELSE ArgC = SGN(Ex1.real) * _PI / 2
END FUNCTION
SUB LogC (Result AS CNum, Ex1 AS CNum)
Result.real = LOG(AbsC(Ex1))
Result.imaginary = ArgC(Ex1)
END SUB
SUB Str2CNum (Result AS CNum, Numb AS STRING)
num$ = LCASE$(Freechar$(Numb, 32))
x = INSTR(num$, "+")
y = INSTR(num$, "i")
IF x = 0 THEN
IF y = 0 THEN
Result.real = VAL(num$)
Result.imaginary = 0
ELSE
num$ = Freechar$(num$, 105)
Result.real = 0
Result.imaginary = VAL(num$)
END IF
ELSE
num$ = Freechar$(num$, 105)
Result.real = VAL(MID$(num$, 1, x - 1))
Result.imaginary = VAL(MID$(num$, x + 1, LEN(num$) - x))
END IF
END SUB
FUNCTION CNum2Str$ (Ex1 AS CNum)
IF Ex1.real <> 0 THEN real$ = STR$(Ex1.real) ELSE real$ = ""
IF Ex1.imaginary <> 0 THEN IF Ex1.imaginary <> 1 THEN imaginary$ = STR$(Ex1.imaginary) + "i" ELSE imaginary$ = "i" ELSE imaginary$ = ""
IF real$ <> "" AND imaginary$ <> "" THEN op$ = "+" ELSE op$ = ""
CNum2Str$ = real$ + op$ + imaginary$
END FUNCTION
FUNCTION Freechar$ (Sentence$, Char)
x$ = Sentence$
DO UNTIL x = LEN(x$)
x = x + 1
IF MID$(x$, x, 1) = CHR$(Char) THEN
x$ = MID$(x$, 1, x - 1) + MID$(x$, x + 1, LEN(x$) - x)
x = x - 1
END IF
LOOP
Freespace$ = x$
END FUNCTION
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Biblioteca de operaciones en el campo delos números complejos
La siguiente biblioteca, solo contiene la función suma de números complejos (próximamente mas operadores aritméticos sobre C),
me idee la forma de operar números complejos como arreglos, pero la arquitectura actual de PSEIT solo permite que la variable de salida sea un numero y no un arreglo de números, mi sugerencia es que PSEINT soporte este tipo de datos en la salida de un subproceso.
SubProceso suma_ = sumaNComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension suma_[2]
definir suma_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = numComplejo1[1] + numComplejo2[1]
//imprimir parteReal_
parteImaginaria_ = numComplejo1[2] + numComplejo2[2]
//imprimir parteImaginaria_
Fin SubProceso
Proceso tipodedato_numerocomplejo
Dimension numComplejo1[2];
Definir numComplejo1 Como Real;
FinProceso
Gracias por el desarrollo de PSEINT
SubProceso expresion_nc <- imprimir_numComplejo( numComplejo1 por referencia )
Definir expresion_nc Como cadena;
expresion_nc = ConvertirATexto(numComplejo1[1])
Fin SubProceso
SubProceso suma_ = suma_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension suma_[2]
definir suma_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = numComplejo1[1] + numComplejo2[1]
//imprimir parteReal_
parteImaginaria_ = numComplejo1[2] + numComplejo2[2]
//imprimir parteImaginaria_
Fin SubProceso
SubProceso resta_ = resta_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension resta_[2]
definir resta_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = numComplejo1[1] - numComplejo2[1]
//imprimir parteReal_
parteImaginaria_ = numComplejo1[2] - numComplejo2[2]
//imprimir parteImaginaria_
Fin SubProceso
SubProceso multiplicacion_ = multiplicacion_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension multiplicacion_[2]
definir multiplicacion_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = (numComplejo1[1] * numComplejo2[1]) - (numComplejo1[2] * numComplejo2[2])
//imprimir parteReal_
parteImaginaria_ = (numComplejo1[1] * numComplejo2[2]) + (numComplejo1[2] * numComplejo2[1])
//imprimir parteImaginaria_
Fin SubProceso
Proceso tipodedato_numerocomplejo
Dimension numComplejo1[2];
Definir numComplejo1 Como Real;
FinProceso
// Biblioteca de operaciones aritmeticas en el campo de los números complejos
// version 0.0.5 actualizacion Abril 30 2015 Por Compsystems
SubProceso negativo_ <- negativo_NComplejo( numComplejo1 por referencia )
dimension negativo_[2]
definir negativo_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
parteReal_ = -numComplejo1[1]
//imprimir parteReal_
parteImaginaria_ = -numComplejo1[2]
negativo_[1] = parteReal_
negativo_[2] = parteImaginaria_
// -(a+bi) = -a + -b*i //
Fin SubProceso
SubProceso expresion_nc <- imprimir_numComplejo( numComplejo1 por referencia )
Definir expresion_nc Como cadena;
definir a,b como real
a = numComplejo1[1]
b = numComplejo1[2]
Fin SubProceso
SubProceso suma_ = suma_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension suma_[2]
definir suma_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir a,b,c,d como real
a = numComplejo1[1]
b = numComplejo1[2]
c = numComplejo2[1]
d = numComplejo2[2]
Fin SubProceso
SubProceso resta_ = resta_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension resta_[2]
definir resta_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir a,b,c,d como real
a = numComplejo1[1]
b = numComplejo1[2]
c = numComplejo2[1]
d = numComplejo2[2]
Fin SubProceso
SubProceso multiplicacion_ = multiplicacion_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension multiplicacion_[2]
definir multiplicacion_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir a,b,c,d como real
a = numComplejo1[1]
b = numComplejo1[2]
c = numComplejo2[1]
d = numComplejo2[2]
Fin SubProceso
SubProceso divicion_ = divicion_NComplejos( numComplejo1 por referencia, numComplejo2 por referencia )
dimension divicion_[2]
definir divicion_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir denominador_ como real
definir a,b,c,d como real
a = numComplejo1[1]
b = numComplejo1[2]
c = numComplejo2[1]
d = numComplejo2[2]
Fin SubProceso
SubProceso potenciacion_ = potenciacion_NComplejos( numComplejo1 por referencia, exponente_ )
dimension potenciacion_[2]
definir potenciacion_ como real
definir parteReal_ como real
definir parteImaginaria_ como real
definir a,b, mult como real
a = numComplejo1[1]
b = numComplejo1[2]
mult = 1
Fin SubProceso
Proceso ejemplos_tipodedato_numerocomplejo
Dimension numComplejo1[2];
Definir numComplejo1 Como Real;
FinProceso
//ingrese el primer numero complejo, parte real
//> 3
//ingrese el primer numero complejo, parte imaginaria
//> 4
//el numero complejo es 3+4i
//
//ingrese el segundo numero complejo, parte real
//> 5
//ingrese el segundo numero complejo, parte imaginaria
//> 6
//el numero complejo es 5+6i
//
//la suma es 8+10*i
//la resta es -2-2*i
//la multiplicacion es -9+38*i
En el foro de QBASIC64 encontré un biblo de Ns complejos, que fácil seria portarla si PSEINT soportara registros
Fuente
http://www.qb64.net/forum/index.php?topic=12557.0
TYPE CNum
real AS SINGLE
imaginary AS SINGLE
END TYPE
SUB AddC (Result AS CNum, Ex1 AS CNum, Ex2 AS CNum)
Result.real = Ex1.real + Ex2.real
Result.imaginary = Ex1.imaginary + Ex2.imaginary
END SUB
SUB SubC (Result AS CNum, Ex1 AS CNum, Ex2 AS CNum)
Result.real = Ex1.real - Ex2.real
Result.imaginary = Ex1.imaginary - Ex2.imaginary
END SUB
SUB MulC (Result AS CNum, Ex1 AS CNum, Ex2 AS CNum)
Result.real = Ex1.real * Ex2.real - Ex1.imaginary * Ex2.imaginary
Result.imaginary = Ex1.real * Ex2.imaginary + Ex1.imaginary * Ex2.real
END SUB
SUB DivC (Result AS CNum, Ex1 AS CNum, Ex2 AS CNum)
Result.real = (Ex1.real * Ex2.real + Ex1.imaginary * Ex2.imaginary) / (Ex2.real * Ex2.real * Ex2.imaginary * Ex2.imaginary)
Result.imaginary = (Ex1.imaginary * Ex2.real - Ex1.real * Ex2.imaginary) / (Ex2.real ^ 2 + Ex2.imaginary ^ 2)
END SUB
SUB ExpC (Result AS CNum, Ex1 AS CNum, Expn)
xp = INT(Expn)
Result.real = 1
Result.imaginary = 0
IF xp <> Expn THEN
IF xp > Expn THEN xp = xp - 1
dec = Expn - xp
whl = Expn - dec
DIM test(1 TO 2) AS CNum
ExpC test(1), Ex1, whl
NrtC test(2), Ex1, 1 / dec
MulC Result, test(1), test(2)
EXIT SUB
END IF
IF xp > 0 THEN
FOR x = 1 TO xp
MulC Result, Result, Ex1
NEXT x
ELSEIF xp < 0 THEN
FOR x = 1 TO ABS(xp)
DivC Result, Result, Ex1
NEXT x
END IF
END SUB
SUB SqrC (result AS CNum, Ex1 AS CNum)
result.real = SQR((Ex1.real + SQR(Ex1.real ^ 2 + Ex1.imaginary ^ 2)) / 2)
result.imaginary = SGN(Ex1.imaginary) * SQR((-Ex1.real + SQR(Ex1.real ^ 2 + Ex1.imaginary ^ 2)) / 2)
END SUB
SUB NrtC (Result AS CNum, Ex1 AS CNum, root)
DIM test(1 TO 2) AS CNum
test(1).real = AbsC(Ex1) ^ (1 / root)
test(1).imaginary = 0
test(2).real = COS(ArgC(Ex1) / root)
test(2).imaginary = SIN(ArgC(Ex1) / root)
MulC Result, test(1), test(2)
END SUB
SUB ConC (Result AS CNum, Ex1 AS CNum)
Result.real = Ex1.real
Result.imaginary = -Ex1.imaginary
END SUB
FUNCTION AbsC (Ex1 AS CNum)
AbsC = SQR(Ex1.real ^ 2 + Ex1.imaginary ^ 2)
END FUNCTION
FUNCTION ArgC (Ex1 AS CNum)
IF Ex1.real > 0 THEN ArgC = ATN(Ex1.imaginary / Ex1.real)
IF Ex1.real < 0 THEN IF Ex1.imaginary >= 0 THEN ArgC = ATN(Ex1.imaginary / Ex1.real) + _PI ELSE ArgC = ATN(Ex1.imaginary / Ex1.real) - _PI
IF Ex1.real = 0 THEN IF Ex1.imaginary = 0 THEN EXIT SUB ELSE ArgC = SGN(Ex1.real) * _PI / 2
END FUNCTION
SUB LogC (Result AS CNum, Ex1 AS CNum)
Result.real = LOG(AbsC(Ex1))
Result.imaginary = ArgC(Ex1)
END SUB
SUB Str2CNum (Result AS CNum, Numb AS STRING)
num$ = LCASE$(Freechar$(Numb, 32))
x = INSTR(num$, "+")
y = INSTR(num$, "i")
IF x = 0 THEN
IF y = 0 THEN
Result.real = VAL(num$)
Result.imaginary = 0
ELSE
num$ = Freechar$(num$, 105)
Result.real = 0
Result.imaginary = VAL(num$)
END IF
ELSE
num$ = Freechar$(num$, 105)
Result.real = VAL(MID$(num$, 1, x - 1))
Result.imaginary = VAL(MID$(num$, x + 1, LEN(num$) - x))
END IF
END SUB
FUNCTION CNum2Str$ (Ex1 AS CNum)
IF Ex1.real <> 0 THEN real$ = STR$(Ex1.real) ELSE real$ = ""
IF Ex1.imaginary <> 0 THEN IF Ex1.imaginary <> 1 THEN imaginary$ = STR$(Ex1.imaginary) + "i" ELSE imaginary$ = "i" ELSE imaginary$ = ""
IF real$ <> "" AND imaginary$ <> "" THEN op$ = "+" ELSE op$ = ""
CNum2Str$ = real$ + op$ + imaginary$
END FUNCTION
FUNCTION Freechar$ (Sentence$, Char)
x$ = Sentence$
DO UNTIL x = LEN(x$)
x = x + 1
IF MID$(x$, x, 1) = CHR$(Char) THEN
x$ = MID$(x$, 1, x - 1) + MID$(x$, x + 1, LEN(x$) - x)
x = x - 1
END IF
LOOP
Freespace$ = x$
END FUNCTION