これが私の最初の投稿です。私はこのc++の質問にしばらく取り組んできましたが、どこにも行き着きませんでした。たぶんあなたたちは私が始めるためのいくつかのヒントを私に与えることができます。
私のプログラムは、それぞれが1つのマトリックスを含む2つの.txtファイルを読み取る必要があります。次に、それらを乗算して、別の.txtファイルに出力する必要があります。ここでの私の混乱は、.txtファイルの設定方法とディメンションの取得方法です。マトリックス1.txtの例を次に示します。
#ivalue #jvalue value
1 1 1.0
2 2 1
行列の次元は2x2です。
1.0 0
0 1
これらの行列の乗算を開始する前に、テキストファイルからiとjの値を取得する必要があります。これを行うために私が見つけた唯一の方法は
int main()
{
ifstream file("a.txt");
int numcol;
float col;
for(int x=0; x<3;x++)
{
file>>col;
cout<<col;
if(x==1) //grabs the number of columns
numcol=col;
}
cout<<numcol;
}
問題は、行数を読み取るために2行目に到達する方法がわからないことです。それに加えて、これで他のマトリックスファイルの正確な結果が得られるとは思いません。
不明な点がありましたらお知らせください。
更新 ありがとう!getlineが正しく機能するようになりました。しかし今、私は別の問題に直面しています。マトリックスBでは、次のように設定されています。
#ivalue #jvalue Value
1 1 0.1
1 2 0.2
2 1 0.3
2 2 0.4
プログラムに4行、おそらくそれ以上下げる必要があることを通知する必要があります(行列の次元は不明です。私の行列Bの例は2x2ですが、20x20になる可能性があります)。while(!file.eof())をループさせて、ファイルの終わりまでループさせます。乗算には動的配列が必要ですが、ここでも必要ですか?
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream file("a.txt"); //reads matrix A
while(!file.eof())
{
int temp;
int numcol;
string numrow;
float row;
float col;
for(int x=0; x<3;x++)
{
file>>col;
if(x==1)
{
numcol=col; //number of columns
}
}
string test;
getline(file, test); //next line to get rows
for(int x=0; x<3; x++)
{
file>>test;
if(x==1)
{
numrow=test; //sets number of rows
}
}
cout<<numrow;
cout<<numcol<<endl;
}
ifstream file1("b.txt"); //reads matrix 2
while(!file1.eof())
{
int temp1;
int numcol1;
string numrow1;
float row1;
float col1;
for(int x=0; x<2;x++)
{
file1>>col1;
if(x==1)
numcol1=col1; //sets number of columns
}
string test1;
getline(file1, test1); //In matrix B there are four rows.
getline(file1, test1); //These getlines go down a row.
getline(file1, test1); //Need help here.
for(int x=0; x<2; x++)
{
file1>>test1;
if(x==1)
numrow1=test1;
}
cout<<numrow1;
cout<<numcol1<<endl;
}
}