以下の小テストの問題を解いてください。

問題1

変数xと変数yの値を入れ替えること。

In [1]:
x=10;
y=100;
%xとybの入れ替えるコードを書いてください。

temp=x;
x=y;
y=temp;
x
y
x =  100
y =  10

問題2

変数x,y,zの中で最大値を求めるコードを作成しなさい。

In [ ]:
x=randi(10)
y=randi(10)
z=randi(10)
%コードを書いてください。
[x,y,z]

mymax = x;

if mymax < y; mymax =y;
if mymax < z; mymax =z;

mymax
x =  7
y =  1
z =  3
ans =

   7   1   3

^C

問題3

配列の中で最大値を見つけて、番号を出力すること。 特に、最大値になっている成分が2つ以上になる場合でも、一つの番号のみを求めてください。

注意:MATLABのmax関数を使用しないこと。

In [18]:
x=abs(int32(rand(1,20)*10 - 5))

mymax = x(1);
mymax_k =[1];

n=length(x);
for k=2:n
   if x(k) > mymax
      mymax = x(k);
      mymax_k = [k];
   end
end

mymax_k
x =

  2  2  2  5  4  2  3  1  4  5  1  4  4  2  2  4  3  1  4  4

mymax_k =  4

問題4

問題3の計算アルゴリズムを関数find_maxにしてください。

与えられる配列xの最大値になっている成分の番号を返す。

find_maxの使い例:  idx=find_max(x)

In [9]:
function idx = find_max(x)

    mymax = x(1);
    mymax_k =[1];

    n=length(x);
    for k=2:n
       if x(k) > mymax
          mymax = x(k);
          mymax_k = [k];
       end
    end

    idx= mymax_k;

end
In [19]:
x=abs(int32(rand(1,20)*10 - 5))
find_max(x)
x =

  0  3  3  5  1  0  2  4  3  1  3  2  2  3  3  0  3  1  0  4

ans =  4

問題4

配列$x$の中で値を探すことにつぃて、以下の要求に従って、関数を作ってください。

  • idx=my_find_one(x,y): 配列$x$の中、与えられる$y$の値と一致する成分の一つを見つけて、その成分の番号を返す。
  • idx=my_find_all(x,y): 配列$x$の中、与えられる$y$の値と一致する成分を全部見つけて、その成分の番号を返す。
In [15]:
function idx=my_find_one(x,y)
    n=length(x);
    for k=1:n
      if x(k)==y
         idx=k;
         break
      end
    end

end

function idx=my_find_all(x,y)
    idx=[];
    n=length(x);
    for k=1:n
      if x(k)==y
         idx=[idx,k];
      end
    end
    
end
In [20]:
x=abs(int32(rand(1,20)*10 - 5))

my_find_one(x,1)
my_find_all(x,1)
x =

  1  2  0  4  3  2  1  4  1  4  1  3  4  4  4  5  1  2  2  5

ans =  1
ans =

    1    7    9   11   17

In [ ]: