# Display negative results with "i" rather than negative sign

2 views (last 30 days)
Leanne Dozier on 17 Nov 2019
Commented: KALYAN ACHARJYA on 17 Nov 2019
Hello,
I'm fairly new to Matlab and I think the solution to this is something to do with fprintf, but I don't know for sure. My assignment is to write a program to determine the nth root between 2<n<99 and any number between -10,000,000 and 10,000,000. I'm not allowed to use Matlab's SQRT function. For negative numbers they have to be displayed using an i rather than a negative sign (ex. 3i not -3). The instructor never said we couldn't use the nthroot function, but just in case I wrote two sets if code very similar. On the one where I take a number to the fractional power (ex. 81^1/2 =9) all is well until I put in a negative number. Then I get two results. Then on the other program using the nthroot function the answer is displayed as a negative rather than i and I can't figure out how to convert these answers. Here is my code. Can anyone help? Thanks in advance
Program 1:
n=input ('enter a number between -10,000,000 and 10,000,000: ');
if n<-10000000 || n>10000000
disp('error on input number');
pause
exit
end
r=input ('enter the nthroot to be calculated: ');
if r<2 || r>99
disp('error on input number');
pause
exit
end
rr=(1/r);
a=n^rr
Program 2:
n=input ('enter a number between -10,000,000 and 10,000,000: ');
if n<-10000000 || n>10000000
disp('error on input number');
pause
exit
end
r=input ('enter the nth root to be calculated: ');
if r<2 || r>99
disp('error on input number');
pause
exit
end
a=nthroot(n,r)

KALYAN ACHARJYA on 17 Nov 2019
Edited: KALYAN ACHARJYA on 17 Nov 2019
Is this: First one, if OK, do the same for 2nd program
n=input ('enter a number between -10,000,000 and 10,000,000: ');
if n<-10000000 || n>10000000
disp('error on input number');
else
r=input ('enter the nthroot to be calculated: ');
if r<2 || r>99
disp('error on input number nthroot');
else
rr=(1/r);
a=n^rr
end
end

KALYAN ACHARJYA on 17 Nov 2019
Watever you want you can display, is this?
a=double(n<0)*abs(n)^(1/r)*i+double(n>0)*(n)^(1/r)
use
format shortG
at the beginning of the code to avoid extra decimal3.0000i points
Leanne Dozier on 17 Nov 2019
That one is much better! Thank you so much!! It's been driving me crazy for hours! I appreciate it!
KALYAN ACHARJYA on 17 Nov 2019
It's my pleasure @Leanne Dozier