回 帖 发 新 帖 刷新版面

主题:[讨论]二维数组里面暗藏的相对二维数组的计算

我用C++编写了如下的一段程序:
#include<iostream.h>
void main()
{
    //声明变量
    int m4,i;
    double k;
    double a[12][10]={
        {2,2,2,2,2,2,2,2,2,2},
        {2,2,2,2,2,2,2,2,2,2},
        {3,3,3,3,3,3,3,3,3,3},
        {4,4,4,4,4,4,4,4,4,4},
        {1,1,1,1,1,1,1,1,1,1},
        {1,1,1,1,1,1,1,1,1,1},
        {2,2,2,2,2,2,2,2,2,2},
        {5,5,5,5,5,5,5,5,5,5},
        {1,1,1,1,1,1,1,1,1,1},
        {0,0,0,0,0,0,0,0,0,0},
        {2,2,2,2,2,2,2,2,2,2},
        {1,1,1,1,1,1,1,1,1,1}
    };
    for (i=1;i<=11;i++)
    {k=a[0][0]*a[i+0][0];
          if (k==4)
          {
             cout<<"   a["<<i<<"][0]";
             cout<<"  i="<<i<<endl;
     }
}
}
程序运行一切正常,运行结果如下:
   a[1][0]  i=1
   a[6][0]  i=6
   a[10[0]   i=10
其中 a[1][0]表示 a[1][0]所在位置的元素的值与a[0][0]所在位置的元素的乘积为我预先给定的值k==4  i=1表示 a[1][0]所在位置的元素的行数。
同理 a[6][0]表示 a[6][0]所在位置的元素的值与a[0][0]所在位置的元素的乘积为我预先给定的值k==4  i=6 表示 a[6][0]所在位置的元素的行数。
现在我想请教大家一个问题:运行结果里面有一句话:a[6][0]  i=6。
如何将行数i=6变为i=0,相应的该元素的列的值就增加6,也就是行减少多少行,列数就增加多少列。相当于a[6][0]变为了a[0][6],但是a[10][0]
不是变为了a[0][10] ,而是变为了a[4][6],(也就是说,原先a[6][0]的行减少多少行,a[10][0]的行也减少多少行 ,a[6][0]的列 增加多少列  ,
a[10][0]的列 也增加多少列,他们的相对位置没有发生改变)再来计算变换后的两个位置a[0][6]和a[4][6]的乘积。请问,在原程序的基础上该怎
么修改?最好把修改后的原程序发上来,因为我学得不好,要好好学学,谢谢!!

回复列表 (共22个回复)

11 楼

要说到数学原理,其实就是两种坐标之间的转换,这就好比,将直角坐标下某点的位置放在极坐标下,求它的新坐标位置,就这么回事.只不过在程序里面是有条件的,那就是
k=a[0][0]*a[i][0];当K为某一常数.
我想,这说得够清楚的了吧.

12 楼

那你说的处理又是怎么回事呢……

13 楼

处理.在这里指的是.假如我们就以9楼我编写的这段代码为例,满足k=a[0][0]*a[i+0][0]的第一个坐标(当然是老坐标了)[1][0]的值是5,它在新坐标的位置是[0][1],新坐标的值是2,第二个坐标(当然是老坐标了)就是[7][0]的值是5,
它在新坐标的位置是[6][0],新坐标的值是5,这一步,我已经办到了,但是在新坐标下的这两个值可以对它们进行相加,也就是2+5,也可以进行相乘2*5,把他们的的结果计算出来,并且保存到某个变量里面,也就是假设变量是R,那么R=2+5,计算出R等于7.就是这个意思.

14 楼

既然你明确了输入和输出就好办了,如果你需要得到某个变量加以处理,只需要把相应的变量保留下来并且加以处理即可
举例来说
如果对第0列进行处理,那么可以开设数组temp[12]用来保存每个变幻后的新下标对应的取值,这样就可以进行后面的处理了……
对于数学问题来说,只要你确定了你的输入和输出,并且找到数据在连续的输入输出之间的关系,就ok了

15 楼

可是,我刚学编程不久,这里的内容我实在是不会了,你能把修改后的代码发上来吗??朋友,谢谢

16 楼

大  功  告  成
    我终于成功 地编写完了这段程序了,所有新坐标的值都存入变量里面了,新坐标的变量我设置的是x1,x2,x3,x4,x5。只是我还没有给与它们之间新的运算(比如X2+X5),不过这没关系,我很快就会做的。最新代码如下:

17 楼

#include<iostream.h>
void main()
{
    //声明变量
    int i,mix;
    double k,x1,x2,x3,x4,x5;
    double a[12][24]={
        {5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0},
        {4,4,4,4,4,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
        {5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0},
        {4,4,4,4,4,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
        {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
        {5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0},
        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
        {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},
        {5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0},
        {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3},
        {4,4,4,4,4,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4},
        {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
    };
    mix=11;
    x1=9;
    x2=9;
    x3=9;
    x4=9;
    x5=9;
      for (i=1;i<=11;i++)
      {k=a[0][0]*a[i+0][0];
          if (k==25)
          {
             cout<<"   a["<<i<<"][0]";
             cout<<"  i="<<i<<endl;
             if (i<mix)
                mix=i;
          }
      }
     cout<<"mix= "<<mix<<endl;
     for (i=1;i<=11;i++)
     {k=a[0][0]*a[i+0][0];
            if (k==25)
            {
             cout<<"   a["<<i<<"][0]";
             cout<<"  i="<<i;
             cout<<"  a["<<i<<"][0]"<<"转换后的为:"<<"a["<<i-mix<<"]["<<mix<<"]";
             cout<<"   转换后的值 ="<<a[i-mix][mix];
                    if (x1==9)
                    {
                     x1=a[i-mix][mix];
                     cout<<" x1="<<x1;
                     cout<<" a["<<i-mix<<"]["<<mix<<"]="<<x1<<endl;
                    }
                      else 
                      {if (x2==9)
                      {
                        x2=a[i-mix][mix];
                        cout<<" x2="<<x2;
                        cout<<" a["<<i-mix<<"]["<<mix<<"]="<<x2<<endl;
                      }
                          else
                          {if (x3==9)
                          {
                            x3=a[i-mix][mix];
                            cout<<" x3="<<x3;
                            cout<<" a["<<i-mix<<"]["<<mix<<"]="<<x3<<endl;
                          }
                               else 
                               {
                                 if (x4==9)
                                 {
                                   x4=a[i-mix][mix];
                                   cout<<" x4="<<x4;
                                   cout<<" a["<<i-mix<<"]["<<mix<<"]="<<x4<<endl;
                                 }
                                 else
                                     {
                                        if(x5==9)
                                        {
                                               x5=a[i-mix][mix];
                                               cout<<" x5="<<x5;
                                                cout<<" a["<<i-mix<<"]["<<mix<<"]="<<x5<<endl;
                                        }
                                     }
                          }
                      }
            }
     }
}
}

18 楼


上面这段代码虽然写好了,但是我觉得不是很好,特别是将5个变量存入X1到X5的这一部分,写得很不理想,不知有没有更好的,请大家都来写写这一段代码.好吗??

19 楼

既然能写出x1到x5了,那么写成x[5]就不会了?

20 楼


不会.

我来回复

您尚未登录,请登录后再回复。点此登录或注册