Разработать программу для обработки матриц. Программа должна выполнять следующие действия: суммы, вычитания, умножения двух матриц. Матрицы должны храниться в двух разных файлах. То есть, при запуске программы, необходимо считать из файлов две матрицы и уже после этого производить вычисления. Результат вывести на экран.
К сожалению, решения данной задачи пока нет. Если Вы решили эту задачу, сообщите нам, и мы выложим её на сайте.
E-mail : admin@cppstudio.com
Комментарии
RaldenProg
Дима Дорошенко
Дима Дорошенко
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void Dim(string str, int &a, int &b)
{
a = 1;
b = 1;
int i = 0;
while(str[i] != ‘\n’)
{
if(str[i] == ‘ ‘)
b++;
i++;
}
while(str[i] != »)
{
i++;
if(str[i] == ‘\n’ || str[i] == »)
a++;
}
}
void Convert_to_int(string str, int *matr, int A, int B)
{
int znak = 0;
int c = 0;
int a = 0;
int i = 0;
int j = -1;
do
{
j++;
if(str[j] == ‘-‘)
znak = 1;
if(str[j] >= ‘0’ && str[j] <= ‘9’)
{
c = 1;
i = i * 10 + (str[j] — ‘0’);
}
else
if(c == 1)
{
c = 0;
if(znak == 1)
i *= -1;
matr[a] = i;
a++;
i = 0;
}
}while(str[j] != »);
}
void Sum(int *m1, int *m2, int m, int n, int c, int d)
{
if(m != c)
{
cout << «Error!!!» << endl;
return;
}
if(n != d)
{
cout << «Error!!!» << endl;
return;
}
int *result = new int[100];
for(int i = 0; i < (m * n); i++)
result[i] = m1[i] + m2[i];
int j = 0;
cout << «Result:» << endl;
for(int i = 0; i < (m * n); i++)
{
if(j >= n)
{
cout << endl;
j = 0;
}
cout << result[i] << » «;
j++;
}
}
void Dif(int *m1, int *m2, int m, int n, int c, int d)
{
if(m != c)
{
cout << «Error!!!» << endl;
return;
}
if(n != d)
{
cout << «Error!!!» << endl;
return;
}
int *result = new int[100];
for(int i = 0; i < (m * n); i++)
result[i] = m1[i] — m2[i];
int j = 0;
cout << «Result:» << endl;
for(int i = 0; i < (m * n); i++)
{
if(j >= n)
{
cout << endl;
j = 0;
}
cout << result[i] << » «;
j++;
}
}
void Multi(int *m1, int *m2, int m, int n, int c, int d)
{
if(n != c)
{
cout << «Error!!!» << endl;
return;
}
int e = m, f = d; // разрешение новой матрицы
int a = 0;
int **mas1 = new int*[m];
for(int i = 0; i < m; i++)
mas1[i] = new int[n];
for(int i = 0; i < m; i++)
for(int j = 0; j < n; j++)
mas1[i][j] = m1[a++];
a = 0;
int **mas2 = new int*[c];
for(int i = 0; i < c; i++)
mas2[i] = new int[d];
for(int i = 0; i < c; i++)
for(int j = 0; j < d; j++)
mas2[i][j] = m2[a++];
int **result = new int*[e];
for(int i = 0; i < e; i++)
result[i] = new int[f];
for(int i = 0; i < e; i++)
{
for(int j = 0; j < f; j++)
{
result[i][j] = 0;
for(int k = 0; k < n; k++)
{
int temp = mas1[i][k] * mas2[k][j];
result[i][j] += temp;
}
}
}
//int j = 0;
cout << «Result:» << endl;
for(int i = 0; i < e; i++)
{
for(int j = 0; j < f; j++)
cout << result[i][j] << » «;
cout << endl;
}
}
void Parser(string str)
{
string name1;
string name2;
int i = 0;
while(str[i] == ‘ ‘)
i++;
while(str[i] != ‘ ‘ && str[i] != ‘+’ && str[i] != ‘-‘ && str[i] != ‘*’)
{
name1 += str[i];
i++;
}
cout << name1 << endl;
while(str[i] == ‘ ‘ || str[i] == ‘+’ || str[i] == ‘-‘ || str[i] == ‘*’)
i++;
while(str[i] != ‘ ‘ && str[i] != ‘+’ && str[i] != ‘-‘ && str[i] != ‘*’ && str[i] != »)
{
name2 += str[i];
i++;
}
cout << name2 << endl << endl;
ifstream matrix(name1);
if(!matrix.is_open())
{
cout << «Error!!! File » << name1 << » not exist!!!» << endl;
while(!matrix.is_open())
{
matrix.close();
name1.clear();
cout << «Please repeat: «;
getline(cin, name1);
matrix.open(name1);
}
}
name1.clear();
char k;
while(!matrix.eof())
{
if(matrix.get(k))
name1 += k;
}
cout << «Matrix 1:» << endl << name1 << endl << endl;
matrix.close();
matrix.open(name2);
if(!matrix.is_open())
{
cout << «Error!!! File » << name2 << » not exist!!!» << endl;
while(!matrix.is_open())
{
matrix.close();
name2.clear();
cout << «Please repeat: «;
getline(cin, name2);
matrix.open(name2);
}
}
name2.clear();
while(!matrix.eof())
{
if(matrix.get(k))
name2 += k;
}
cout << «Matrix 2:» << endl << name2 << endl << endl;
matrix.close();
int m = 1, n = 1; // размерность первой матрицы
int c = 1, d = 1; // размерность второй матрицы
Dim(name1, m, n); // подсчет размерности
Dim(name2, c, d);
cout << m << ‘~’ << n << » » << c << ‘~’ << d << endl;
int *m1 = new int[100];
int *m2 = new int[100];
Convert_to_int(name1, m1, m, n);
Convert_to_int(name2, m2, c, d);
// теперь в массивах записаны матрицы
int f = str.find(‘+’);
if(f > 0)
{
Sum(m1,m2,m,n,c,d);
return;
}
f = str.find(‘-‘);
if(f > 0)
{
Dif(m1,m2,m,n,c,d);
return;
}
f = str.find(‘*’);
if(f > 0)
{
Multi(m1,m2,m,n,c,d);
return;
}
}
int main()
{
while(1)
{
system(«cls»);
string Str;
//char Operation;
cout << «Enter the matrix (Example: name1.txt + name2.txt): «;
getline(cin, Str);
Parser(Str);
system(«pause»);
}
}
Иван Незамутдинов
gornyyvladimir
Arthur