How can i do let Matlab returns variable name when i check its value?

8 Ansichten (letzte 30 Tage)
Assumed that, i have a code as below:
x=input('x = ');
y=input('y= ');
z=input(z= ');
...and so on.
And my condition is value of any x , y or z... (that user will give into accrossding to keyboard) is must be positive. And i mean is after user give into value of variables above. How can i do to know what variable is negative. For example, I want to my program warning that: " Variable x is negative", My code that i tried. I create a vecto that called "Ktra" and use a for loop.
x=input('x= ');
y=input('y= ');
z=input('z= ');
Ktra=[x y z];
iam = 1;
for i=1:length(Ktra)
if Ktra(i)<0
disp('Gia tri nhap can lon hon 0');
tprintf('So thu tu cua so bi am la: %d \n', iam);
end
end
Thank you so much!

Akzeptierte Antwort

Stephen23
Stephen23 am 4 Feb. 2017
Bearbeitet: Stephen23 am 4 Feb. 2017
This works for any number of variables, just add them to the cell array V:
V = {'x','y','z'};
S = struct();
for k = 1:numel(V)
str = sprintf('Please enter %s value: ',V{k});
tmp = str2double(input(str,'s'));
if tmp<0
disp('Gia tri nhap can lon hon 0');
fprintf('So thu tu cua so bi am la: %s \n',V{k})
end
S.(V{k}) = tmp;
end
When run it gives this:
>>
Please enter x value: 23
Please enter y value: 5
Please enter z value: -9
Gia tri nhap can lon hon 0
So thu tu cua so bi am la: z
>>
and of course the values can be simply accessed using the structure fields:
>> S.x
ans =
23
>> S.z
ans =
-9
Note also that I used the faster and more secure option of getting input to return a string: str2double(input(...,'s')), as opposed to the buggy and unpredictable input(...).
  2 Kommentare
Le Dung
Le Dung am 9 Feb. 2017
Bearbeitet: Walter Roberson am 9 Feb. 2017

Thank you so much. it's usefull to me.

But, now. because, here, we have a loop. Assumed that, (for example: x and y).If we have two or more values are negative. So, When program runs, it gives this:

Gia tri nhap can lon hon 0
So thu tu cua so bi am la: x
Gia tri nhap can lon hon 0
So thu tu cua so bi am la: y

I mean, program provides for us two warnings: "Gia tri nhap can lon hon 0".

Of cause, it isn't favourable. So if i only want to one waring for any case. How can i do?

Best Regard!

Walter Roberson
Walter Roberson am 9 Feb. 2017
V = {'x','y','z'};
S = struct();
gave_warning = false;
for k = 1:numel(V)
str = sprintf('Please enter %s value: ',V{k});
tmp = str2double(input(str,'s'));
if ~gave_warning && any(tmp<0)
disp('Gia tri nhap can lon hon 0');
fprintf('So thu tu cua so bi am la: %s \n',V{k});
gave_warning = true;
end
S.(V{k}) = tmp;
end

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Walter Roberson
Walter Roberson am 4 Feb. 2017
Varnames = {'x', 'y', 'z'}
Now you can display Varnames{i}
  1 Kommentar
Le Dung
Le Dung am 4 Feb. 2017
First thank you so much. But, Could you explain more detail? because i'm begineer. thank you so much.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Numerical Integration and Differential Equations finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by