MIPS のアドレスに保存された 2 次元整数配列 A(長さ m、幅 n) があります。この配列から、配列 A のゼロ以外の値のみを含む別の配列 B を作成したいと思います。疑似コードの観点からそれを実装するにはどうすればよいでしょうか?
私の考えは、配列 A を行ごとに (各行を 1 次元配列として) トラバースすることです。これは、配列 A を n 個の 1 次元配列に分割し、for ループでゼロ以外の要素を除外することを意味します。
このアプローチは信頼できると思いますか?
MIPS のアドレスに保存された 2 次元整数配列 A(長さ m、幅 n) があります。この配列から、配列 A のゼロ以外の値のみを含む別の配列 B を作成したいと思います。疑似コードの観点からそれを実装するにはどうすればよいでしょうか?
私の考えは、配列 A を行ごとに (各行を 1 次元配列として) トラバースすることです。これは、配列 A を n 個の 1 次元配列に分割し、for ループでゼロ以外の要素を除外することを意味します。
このアプローチは信頼できると思いますか?
2 次元配列は実際にはメモリ内の 1 次元配列にすぎないため、特定の順序でループすることを気にしない場合は、メモリ内の配列をループして(m*n)
いくつかの命令を保存できます。それ以外の場合は、あなたが言ったように行ごとにトラバースできます。
私が使用する基本的なアイデアは、配列 B にスタックへのプッシュをシミュレートさせることです。これにより、最後にいくつかのゼロが残り、ゼロ以外の「スタック」のサイズが得られます。配列に要素を追加するたびに、「スタック」サイズが増加します。
疑似コード:
int b[m*n];
int b_size = 0;
for (int i=0; i<m*n; i++)
{
if (a[i] != 0)
{
b[b_size] = a[i];
b_size++;
}
}
ここから、これを MIPS に変換する方法を理解していただければ幸いです。