does an "if does not contain operator" exist

I am trying to write a function where the input must be entered in radians. My idea was to make the function return if the input does not contain "pi". Is there a way to do this?
ex. if you wanted to enter 90 you have to enter pi/2
Thanks

2 Commenti

It's not clear for me
I edited it. hope it is more clear now

Accedi per commentare.

 Risposta accettata

Jan
Jan il 16 Mar 2013
Modificato: Jan il 17 Mar 2013
Trust the users of your program:
d = input('Input angle in radians [0 <= x <= 2*pi]: ')
Then even "pi/2" is a valid answer.
Testing the input to contain the string 'pi' would be not sufficient: E.g. the string '32 pineappletrees' should not be accepted, but '3.14159265358979 / 2' should.

3 Commenti

I have done this kind of thing with a script but can the prompt for a user-input be used within a matlab function?
Of course. Why wouldn't it be allowed?
@Steve: Yes, of course. You can call input() within a function also. But I'd prefer inputdlg.

Accedi per commentare.

Più risposte (3)

The "if does not contain" operation can be done with ismember, using something like:
notPi = ~ismember( user_input, pi)
However, due to numerical precision, you probably want to use a tolerance to determine how close the user is to pi, e.g.
notPi = abs(user_input-pi) > 1e-7
If the input does not contain pi does not mean that the input is not in radian.
Now if you want the input to contain pi
s=[]
while isempty(s)
u=input('Enter value (like 2*pi)','s')
s=strfind(u,'pi')
end
u=str2num(u)
Image Analyst
Image Analyst il 16 Mar 2013
Modificato: Image Analyst il 16 Mar 2013
Every number contains pi - some factor times it. So what you want is to have the user enter a string and see if "pi" is in the string and alert them if it's not in the string. Try this:
% Ask user to enter some string containing pi.
% Keep asking until they do.
defaultValue = 42;
titleBar = 'Enter a value';
userPrompt = 'Enter the value containing pi:';
while true
% Ask user for a number containing pi.
caUserInput = inputdlg(userPrompt, titleBar, 1, {num2str(defaultValue)});
if isempty(caUserInput),break,end; % Bail out if they clicked Cancel.
% Convert to lower case, then see if "pi" is in there.
userString = char(lower(caUserInput{1}));
piLocation = strfind(userString, 'pi');
if piLocation >= 1
% String contains pi so we can exit the loop now.
break;
end
end

1 Commento

Why not change the input to a normalized angle in [ 0 1) translated as radianangle/2/pi?

Accedi per commentare.

Categorie

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by