0

毎回可変数の値を出力するループがあります.fprintf関数を使用してこれらの値を出力し、各行に16個の値のみが含まれるようにします. ループは毎回異なる数の値を出力するため、値の数はわかりません。これを行うためのアイデアはありますか?? どうもありがとう

4

3 に答える 3

1

入力変数のデータ型や出力したい型がわからないので、これは単なる例です。

a = ones(1,20); % 20 input values
fprintf('%d',a(1:min(numel(a),16)))

>> 1111111111111111

a = ones(1,10); % 10 input values
fprintf('%d',a(1:min(numel(a),16)))

>> 1111111111

上記は最大 16 個の値を出力し、入力aが空の場合でも機能します。問題は、入力の要素が 16 未満の場合にデフォルト値を出力するかどうかです。その場合、次の方法があります。

a = ones(1,10); % 10 input values
default  = 0; % Default value if numel(a) < 16
fprintf('%d',[a(1:min(numel(a),16)) default(ones(1,max(16-numel(a),0)))])

>> 1111111111000000

列ベクトルがある場合は、これらを調整する必要があります。

編集:

@Schorschによって提起された質問に対処するために、16を超える値を持つ配列内の要素をクリッピングする代わりに、次の行にそれらを出力したい場合、これで行うことができます:

a = ones(1,20); % 20 input values
default = 0; % Default value if numel(a) < 16
fprintf('%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n',[a default(ones(1,16-mod(numel(a),16)))])

>> 1111111111111111
   1111000000000000

もちろん、最初に示した 2 つのソリューションの代わりにフォームのバリアントを使用することもできますが、印刷文字列は読みにくくなる可能性があります。

于 2013-05-28T18:40:34.370 に答える