#include <import.h>
#include "complex.h"
#include "natfunc.h"

#include <export.h>

#pragma -W-stv

char *sprcx( Tcomplex *);

main()
{
	Tcomplex c1 = { 1, 2},   /* 1 + 2i */
	         c2 = { 0, 0},   /* 0      */
	         c3;
	double x1, x2, x3;

	printf( "\nc1 = %s\n", sprcx( &c1));
	printf( "c2 = %s\n", sprcx( &c2));
	CX_CPY( c2, c1);
	printf( "c2 <-- c1\nc2= %s\n\n", sprcx( &c1));
	CX_DEF( c2, 2.5, 0.3)
	printf( "Jetzt hat c2 den Wert %s\n", sprcx( &c2));
	c1 = cx_konj( c2);
	printf( "Die komplex-konjungierte von c2 ist %s\n\n", sprcx( &c1));
	CX_NEG( c2);
	printf( "-c2 = %s\n\n", sprcx( &c2));
	CX_NEG( c2);
	printf( "Signum( %s) = ", sprcx( &c2));
	c2 = cx_sgn( c2);
	printf( "%s\n\n", sprcx( &c2));
	printf( "Argument( %s) = %lg\n\n", sprcx( &c2), cx_arg( c2));
	printf( "Betrag( %s) = %lg\n\n", sprcx( &c2), CX_BTRG( c2));
	c3 = cx_poltocart( 5, 3.1);
	printf( "Betrag( z)=5, Argument( z)=3.1  <=>  z = %s\n\n", sprcx( &c3));
	CX_DEF( c1, 2, -3);
	cx_riemann( &x1, &x2, &x3, c1);
	printf( "%s hat die Riemannschen Koordinaten : \n", sprcx( &c1));
	printf( "     %lg, %lg, %lg\n\n", x1, x2, x3);
	c2 = cx_criem( x1, x2, x3);
	printf( "... und zurck mit cx-criem:%s\n\n", sprcx( &c2));
	CX_DEF( c2, 2.5, 0.3);
	CX_DEF( c3, 0, 1);
	printf( "c2 = %s, ", sprcx( &c2));
	printf( "c3 = %s\n", sprcx( &c3));
	c1 = cx_add( c2, c3);
	printf( "c2 + c3 = %s\n", sprcx( &c1));
	c1 = cx_sub( c2, c3);
	printf( "c2 - c3 = %s\n", sprcx( &c1));
	c1 = cx_mult( c2, c3);
	printf( "c2 * c3 = %s\n", sprcx( &c1));
	c1 = cx_div( c2, c3);
	printf( "c2 / c3 = %s\n", sprcx( &c1));
	c1 = cx_inv( c2);
	printf( "1 / c2 = %s\n", sprcx( &c1));
	c1 = cx_sqr( c2);
	printf( "c2^2 = %s\n", sprcx( &c1));
	c1 = cx_sqrt( c2);
	printf( "Wurzel c2 = %s\n", sprcx( &c1));
	CX_DEF( c3, 0, 3.14159265358979323846);
	c1 = cx_exp( c3);
	printf( "exp( 0.0 + pi*i) = %s\n", sprcx( &c1));
	CX_DEF( c3, -1, 0);
	c1 = cx_ln( c3);
	printf( "ln( -1) = %s\n\n", sprcx( &c1));
	CX_DEF( c3, 0.5, 1);
	c1 = cx_arcsin( c3);
	printf( "arcsin( 0.5 + i) = %s\n", sprcx( &c1));
	c1 = cx_sin( c1);
	printf( "sin( arcsin( 0.5 + i)) = %s\n", sprcx( &c1));
	c1 = cx_arccos( c3);
	printf( "arccos( 0.5 + i) = %s\n", sprcx( &c1));
	c1 = cx_cos( c1);
	printf( "cos( arccos( 0.5 + i)) = %s\n", sprcx( &c1));
	c1 = cx_arctan( c3);
	printf( "arctan( 0.5 + i) = %s\n", sprcx( &c1));
	c1 = cx_tan( c1);
	printf( "tan( arctan( 0.5 + i)) = %s\n\n", sprcx( &c1));
	c1 = cx_arsinh( c3);
	printf( "arsinh( 0.5 + i) = %s\n", sprcx( &c1));
	c1 = cx_sinh( c1);
	printf( "sinh( arsinh( 0.5 + i)) = %s\n", sprcx( &c1));
	c1 = cx_arcosh( c3);
	printf( "arcosh( 0.5 + i) = %s\n", sprcx( &c1));
	c1 = cx_cosh( c1);
	printf( "cosh( arcosh( 0.5 + i)) = %s\n", sprcx( &c1));
	c1 = cx_artanh( c3);
	printf( "artanh( 0.5 + i) = %s\n", sprcx( &c1));
	c1 = cx_tanh( c1);
	printf( "tanh( artanh( 0.5 + i)) = %s\n", sprcx( &c1));
	
	return( SUCCESS);
}


char *sprcx( c)
 Tcomplex *c;
{
	static char str[ 128];
	char ch = '+';
	double cim;

	if( c->im < 0)
	{
		ch = '-';
		cim = - c->im;
	}
	else
		cim = c->im;
	sprintf( str, "%.5lf %c %.5lf*i", c->re, ch, cim);
	return( str);
}

