home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
kermit.columbia.edu
/
kermit.columbia.edu.tar
/
kermit.columbia.edu
/
scripts
/
ckermit
/
complex
< prev
next >
Wrap
Text File
|
1999-07-15
|
4KB
|
140 lines
; From: Dat Thuc Nguyen
; Date: 27 May 1999
; Subject: Incoming script: Complex Number in C-Kermit
; URL: http://www.smalltickle.com
;
; COMPLEX NUMBER IS USUALLY NOT A BUILT-IN TYPE OF MANY PROGRAMMING
; LANGUAGES, HERE OOP COMES TO RESCUE WITH THE USER-DEFINED TYPE.
; THE FOLLOWING SCRIPT DEFINES A COMPLEX NUMBER CLASS IN C-KERMIT.
; THE COMPLEX NUMBER CLASS OFFERS THE FAMILIAR USAGE INTERFACE THAT
; C++ IMPLEMENTATION ALSO PROVIDES:
;
; C-Kermit 7.0 Beta.07 required
;
; complex instance_name re_val im_val
; Create a new instance of complex
; with re_val as the real value
; and im_val as the imagine value.
;
; instance_name show
; Display the re_val and im_value in usual math notation, ex: 3 + 7i
;
; instance_name add other_instance_name
; Add the complex number other_instance_name
; to the complex number instance_name.
;
; instance_name sub other_instance_name
; Substract the complex number other_instance_name
; from the complex number instance_name.
;
; instance_name mult other_instance_name
; Mulitply the complex number other_instance_name
; with the complex number instance_name
; and store the result into the complex number instance_name.
;
; instance_name copy other_instance_name
; Copy the complex number other_instance_name
; into the complex number instance_name
;
; instance_name real
; Return the real value of the complex number instance_name.
;
; instance_name imagine
; Return the imagine value of the complex number instance_name.
;
; instance_name destroy
; Erase the complex number instance_name and its components from
; the memory.
set eval new ; Use new EVALUATE command format (C-Kermit 7.0 Beta.07)
define complex {
; \%1 instance_name
; \%2 real value
; \%3 imagine value
if not define \%1 END 1 ... missing instance_name
if not define \%2 assign \%2 0 ; default real value
if not define \%3 assign \%3 0 ; default imagine value
_assign complex::\%1.re \%2
_assign complex::\%1.im \%3
_define \%1 {
if define \m(complex::\%1) {
complex::\%1 \v(macro) \%2 \%3 \%4
} else {
END -9999 doesNotUnderstand
}
}
}
define complex::show {
echo \m(complex::\%1.re) + \m(complex::\%1.im)i
}
define complex::add {
_eval complex::\%1.re \m(complex::\%1.re) + \m(complex::\%2.re)
_eval complex::\%1.im \m(complex::\%1.im) + \m(complex::\%2.im)
}
define complex::sub {
_eval complex::\%1.re \m(complex::\%1.re) - \m(complex::\%2.re)
_eval complex::\%1.im \m(complex::\%1.im) - \m(complex::\%2.im)
}
define complex::mult {
local \%r \%i
.\%r ::= \m(complex::\%1.re) * \m(complex::\%2.re)-
- \m(complex::\%1.im) * \m(complex::\%2.im)
.\%i ::= \m(complex::\%1.re) * \m(complex::\%2.im)-
+ \m(complex::\%1.im) * \m(complex::\%2.re)
_assign complex::\%1.re \%r
_assign complex::\%1.im \%i
}
define complex::real {
if define \%2 _assign complex::\%1.re \%2
return \m(complex::\%1.re)
}
define complex::imagine {
if define \%2 _assign complex::\%1.im \%2
return \m(complex::\%1.im)
}
define complex::copy {
_assign complex::\%1.re \m(complex::\%2.re)
_assign complex::\%1.im \m(complex::\%2.im)
}
define complex::destroy {
_define complex::\%1.re
_define complex::\%1.im
_define \%1
}
;
; USAGE SAMPLES
;
complex c1 1 3 ; create the complex number c1: 1 + 3i
complex c2 2 5 ; create the complex number c2: 2 + 5i
c1 show ; => 1 + 3i
c2 show ; => 2 + 5i
c1 add c2
c1 show ; => 3 + 8i
c1 sub c2 ;
c1 show ; => 1 + 3i
complex c3 ; create the complex number c3: 0 + 0i
c3 copy c2
c3 show ; => 2 + 5i
complex c4 1 3 ; create the complex number c4: 1 + 3i
complex c5 2 4 ; create the complex number c5: 2 + 4i
c4 mult c5
c4 show ; => -10 + 11i
c1 destroy
c2 destroy
c3 destroy
c4 destroy
c5 destroy
exit