【问题标题】:Writing a function to allocate an upper triangular matrix编写一个函数来分配一个上三角矩阵
【发布时间】:2012-04-03 20:11:53
【问题描述】:

我正在尝试编写一个函数来分配一个上三角矩阵。它应该返回一个指向分配数组的第一个元素的指针。我还需要使用动态分配来确保分配所需的确切内存量,但我不太确定如何做到这一点......任何提示或建议将不胜感激!我是 C++ 的菜鸟。无论如何,如果有帮助,这是我的代码!

#include <iostream>

using namespace std;

int main ()
{
int a[3][3],i,j;  //creating two dimensional array
int d; 
int * p;  
cout<<"Please Enter the 9 elements of matrix (with spaces): ";  
for(i=0;i<3;i++)  
   for(j=0;j<3;j++)  
        cin>>d,&a[i][j];  

cout<<"\nThe matrix is\n ";  
for(i=0;i<3;i++)
{  
   cout<<"\n";  
   for(j=0;j<3;j++)  
        cout<<d,a[i][j];  
}  

cout<<"\nSetting zero in upper triangular matrix\n";  
for(i=0;i<3;i++){  
   cout<<"\n";  
   for(j=0;j<3;j++)  
        if(j>=i)  
          cout<<d,a[i][j];  
        else  
          cout<<0;   
}   


  return 0;  
 }  

【问题讨论】:

  • 我不确定您希望像 cin&gt;&gt;d,&amp;a[i][j] 这样的事情会做什么......
  • 程序正在编译,但它只打印出输入的数组的最后一个元素和突出显示上部矩阵的零...
  • 我认为你需要解释一下你认为cin&gt;&gt;d,&amp;a[i][j] 做了什么。它肯定不会像你想象的那样做。
  • cin&gt;&gt;d,&amp;a[i][j]; 是一个有趣的结构 - 你读入 d 然后得到a[i][j] 的地址立即丢弃它。

标签: c++ multidimensional-array matrix


【解决方案1】:

根据 oli 的评论,我认为您希望这样做

cin >> d; a[i][j] = d;

cin>>d,&a[i][j];

我建议阅读类似 .... http://www.cplusplus.com/doc/tutorial/basic_io/

这是你的第一个问题

动态分配是通过 new 和 malloc 之类的代码尝试读取...

http://www.cplusplus.com/doc/tutorial/dynamic/

至于如何存储你的上矩阵...我建议只使用普通的 2d 矩阵,它可能会更好地与大多数矩阵库一起使用。

祝你作业顺利。

【讨论】:

    【解决方案2】:

    通常在分配大小为 N 的上三角矩阵时,您会分配 N + N-1 ... + 1(查找整数之和)元素,然后您需要创建访问机制(可能是这里的意图)这样当你想要元素 M(i,j) 时,你会得到第 i 行第 j 列中的元素,尽管(几乎)一半的元素丢失了;或者在使用矩阵的任何矩阵操作代码中使用矩阵时手动执行此操作。

    您将一维数组视为前 N 个元素是第一行,接下来的 N-1 个元素是第二行的(右 N-1 个元素),依此类推。

    因为这个问题看起来和闻起来都像家庭作业,我认为这是适当的暗示。

    【讨论】:

    • 我不应该说“通常”。主要的线性代数包在这种打包表示中支持三角矩阵,也支持仅使用一半条目的浪费平方矩阵,这通常在性能方面可能同样好或更好。跨度>
    • 您想要紧凑表示的唯一原因是矩阵很大。但同时,问题指定了“所需内存的确切数量”。从中我推断出其目的是教导正确地做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2014-05-26
    • 1970-01-01
    • 2019-09-20
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多