【问题标题】:Storage on arrays with multiple indexes in pseudocode?在伪代码中存储具有多个索引的数组?
【发布时间】:2021-12-11 03:17:55
【问题描述】:

我想以下列方式相乘一些对象(无论它们是什么,在本例中为矩阵)。 给我一个数组,例如如下

array = [# # 0 0 # 0 0 0 # ... #] (#! = 0)

对于这个数组的每个索引,我都关联了一个对象,在我的例子中是一个矩阵

(M[1], M[2], ..., M[length (array)])

我想要做的是,在连续执行乘法之前M[1]xM[2]x .... xM[length (array)] 是在索引为 0 和连续的矩阵之间执行预乘。

有了这个数组

[# # 0 0 # 0 0 0 # ... #] 

我想做的是

M[1]xM[2]x(M[3]xM[4])xM[5]x(M[6]xM[7]xM[8])x ....

特别是,我想将M[1]保存在位置1的数组中,M[2]保存在位置2的数组中,M[3]xM[4]保存在位置3的数组中,M[5]保存在位置4的数组中. 为此,我需要滚动至少 2 个索引。我不知道该怎么做。

【问题讨论】:

  • 不相关:C 中的索引从零开始
  • 对我来说这部分不清楚:“特别是我想将 M[1] 保存在位置 1 的数组中......”你的意思是矩阵数组吗?
  • 那你为什么要multiply whose indices are 0,结果不总是0吗?
  • Stefano,我看到这个问题的标签是maxima。你的意思是你正在使用计算机代数系统Maxima? (maxima.sourceforge.io)

标签: arrays pseudocode


【解决方案1】:

我将使用简单的字符串来说明这一点,而不是矩阵。因此,我将使用字符串连接来表示矩阵乘法,而不是进行乘法运算。

代码可能是这样的:

int main(void) 
{ 
    #define LEN 9
    int input_arr[LEN] = {1, 1, 0, 0, 1, 0, 0, 0, 1};
    char in_mat[LEN][LEN+1] = {"a", "b", "c", "d", "e", "f", "g", "h", "i"};
    char out_mat[LEN][LEN+1] = {"", "", "", "", "", "", "", "", ""};
    int j = 1;
    int prev_was_zero = input_arr[0] == 0;
    strcpy(out_mat[0], in_mat[0]);
    
    for (int i = 1; i < LEN; ++i)
    {
        if (input_arr[i] == 0)
        {
            if (prev_was_zero)
            {
                // Multiply with previous (here I do strcat instead of multiply)
                strcat(out_mat[j-1], in_mat[i]);
            }
            else
            {
                strcpy(out_mat[j], in_mat[i]);
                ++j;
                prev_was_zero = 1;
            }
        }
        else
        {
            strcpy(out_mat[j], in_mat[i]);
            ++j;
            prev_was_zero = 0;
        }
    }
    
    for (int i = 0; i < j; ++i)
    {
        puts(out_mat[i]);
    }
    return 0;
}

输出:

a
b
cd
e
fgh
i

所以原来的 9 个元素减少到 7 个元素,其中“cd”代表 c 和 d 的乘积。同样,“fgh”表示 f、g 和 h 的乘积。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2014-09-13
    相关资源
    最近更新 更多