2017-11-03 4 views
0

最初の質問: ランダムな数字を配列にランダムに生成しようとしています。しかし、整数の境界値は 'int8'、 'int16'、 'int32'、 'int64'、およびそれらの符号なしバージョンとして変化するので、以下のように単純な配列を生成するためにどの型を使うべきかを決定することはできません。参照:https://www.mathworks.com/help/matlab/ref/intmax.htmlMATLABは配列内のランダムな数字を持つランダムな整数を生成します

randi(n、row、column)を使用すると、nは上限の整数値、rowは行番号、columnは列番号です。しかし、これは私の問題解決の私の目的を満足させるものではありません。だから、私はどのような形式の "rand"関数を使うべきですか?

A= [2 7 43 556 32 35 3 4566] 

2番目の質問 : 私は最初の質問で私の目的を達成することができた場合、どのように私は、アレイ内の各番号を反復処理するのですか?それぞれの数字を数字で確認したいと思います。サンプル配列の場合と同様に、最初に2と7と4と3と5とをチェックする必要があります。

ご協力いただければ幸いです。

+0

「ランダム桁の」「ランダム整数」とは私には同義ですが、私はあなたの特定のアプリケーションのための記号を処理したいかわからないので、私は単純に絶対値を使用して、それを無視します彼らはあなたのアプリケーションでは何か違うことを意味します。あなたがしようとしていることを正確に説明できますか?あなたは整数値の限界のために整数型を決定するのが難しいですか?あなたの場合の限界は何ですか?上限、行、および列の指定が目的を満たさないのはなぜですか?あなたの目的とあなたの望む結果はまったく何ですか? – beaker

+0

@beaker実際にこの例で示したように、配列を生成したいと思います。数字の桁数は2,3,4以上になります。したがって、私は配列の長さを決定するユーザー入力を受け取ります。この入力を使用することで、配列の列番号と行番号が常に1になることが決まります。 – Ozge

+0

これで、それぞれがランダム*数字*の数字を持つランダムな整数が欲しいですか?あなたが望む桁数の範囲は?整数は負の値になりますか? – beaker

答えて

0

所与のデータタイプの全範囲で乱数を発生させるためには、次のように使用することができます。

n = int32(0); 
type = class(n); % or you can specify it explicitly e.g. 'uint8' directly 
randSize = [10 1]; 
randomArray = randi([intmin(type) intmax(type)],randSize,type); 

桁を反復するには、分割およびモジュロの組み合わせで各桁を単離することができます。おそらく最も洗練されたソリューションではないかもしれませんが、それは仕事です。おそらく

for i = abs(randomArray(:))' 
    numberOfDigits = ceil(log(double(abs(i)+1))/log(10)); % use log 10 to count digits 
    fprintf('\nisolating every digit for number %i: ',i); 
    for digitId = numberOfDigits:-1:1 
     digitFactor = 10^(digitId-1); 
     digitBeforeDivision = (i - mod(i,digitFactor)); 
     digit = digitBeforeDivision/digitFactor; 
     fprintf('%d ',digit); 
     i = i - digitBeforeDivision; 
    end 
end 
+0

これは私にとって非常に高度なアプローチでしたが、うまくいきました。どのようにこのソリューションを考え出したのですか?このコードを実装することであなたのアイデアを説明できますか? – Ozge

+0

数字が225であるとしましょう。この数字は 'log_10(225)= 2.35'(切り上げ= 3)のため3桁です。最初の桁は '(225 - 25)/ 100 = 2'を実行することで得られます。 '225モジュロ100 = 25'で25を取得し、100は' 10^2 = 100'の位置のパワーで10になります。また、私は10000のような数字が失敗する原因となる小さなバグを修正しました。 –

関連する問題