does an "if does not contain operator" exist
34 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
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
Risposta accettata
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
Jan
il 18 Mar 2013
@Steve: Yes, of course. You can call input() within a function also. But I'd prefer inputdlg.
Più risposte (3)
Matt Kindig
il 16 Mar 2013
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
0 Commenti
Azzi Abdelmalek
il 16 Mar 2013
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)
0 Commenti
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
Greg Heath
il 18 Mar 2013
Why not change the input to a normalized angle in [ 0 1) translated as radianangle/2/pi?
Vedere anche
Categorie
Scopri di più su Characters and Strings in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!