Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2018, 22:47   #1
alexbboy
Новичок
Джуниор
 
Регистрация: 21.11.2018
Сообщений: 1
По умолчанию нужно написать программу, которое находит произведение двух матриц(из файлов) и в новый файл выводит произведение

помогите пожалуйста, написал программу, которая считывает две матрицы из двух файлов in и in2 и выводит результат произведения в файл result и считает сумму элементов диагоналей. Но нужно, чтоб в result выводились и две исходные матрицы, как это сделать?

нужно две исходные матрицы скопировать в тот же файл, где и произведение матриц, подскажите, как это сделать?
вот код

#include "pch.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>

using namespace std;

bool isVaild(char element) {
if ((element >= 48 && element <= 57) || element == 45 || element == 46)
return true;
else
return false;
}

bool isWhitespace(char element) {
if (element == 32)
return true;
else
return false;
}

int getOptArraySize(float *A, int rowCount, int N) {
int optArraySize = 0;
for (rowCount; rowCount >= 1; rowCount--) {
bool found = false;
for (int i = rowCount; i >= 1; i--) {
int j = 0;
while (A[(i - 1) * N + j] != 0) {
j++;
}
if (j >= rowCount && found) {
if (i == 1) {
optArraySize = rowCount;
}
}
else if (j >= rowCount && !found) {
found = true;
}
else if (j != rowCount) {
break;
}
}
if (optArraySize != 0)
break;
}
return optArraySize;
}

int fillArray(float *cat, int N, int M, fstream *file) {
std::string line = "";
int q = 0;
int j;
while (std::getline(*file, line)) {
std::string buffer = "";
int j = 0;
for (int i = 0; i < line.size() && j <= N; i++) {
if (isWhitespace(line[i])) {
if (buffer != "") {
float element = std::stof(buffer);
cat[q * N + j] = element;
buffer = "";
j++;
}
}
else {
if (isVaild(line[i])) {
buffer += line[i];
if (i + 1 == line.size() && buffer != "") {
float element = std::stof(buffer);
cat[q * N + j] = element;
j++;
}
}
else {
if (buffer != "") {
float element = std::stof(buffer);
cat[q * N + j] = element;
j++;
}
break;
}
}
}
if (q < N) q++;

}
return getOptArraySize(cat, q, N);
}
const int e = 6;
const int u = 6;
float rezalt[e][u];
void printResult(float *dog, std::string fileName, int arraySize, int originArraySize) {
fstream result;
result.open("C:\\Users\\Alex\\Deskt op\\result.txt", ios:ut);
for (int i = 0; i < arraySize; i++) {
for (int j = 0; j < arraySize; j++) {
float element = dog[i * originArraySize + j];
result << element;
result << " ";
}
result << endl;

}
result.close();
}

void getDiagonal(float *rezalt, int arraySize) {
float mainDiagonal = 0;
float secondaryDiagonal = 0;
fstream result;
result.open("C:\\Users\\Alex\\Deskt op\\result.txt", ios:ut);
for (int i = 0; i < arraySize; i++) {
for (int j = 0; j < arraySize; j++) {
if (i == j) {
mainDiagonal += rezalt[i * arraySize + j];
}
if (i + j == arraySize - 1) {
secondaryDiagonal += rezalt[i * arraySize + j];
}
}
}
cout << "Summa glavnoi diagonali: " << mainDiagonal << endl;
cout << "Summa pobochnoy diagonali: " << secondaryDiagonal << endl;
cout << "Summa diagonaley: " << mainDiagonal + secondaryDiagonal << endl;
result << "Summa glavnoi diagonali: " << mainDiagonal << endl;
result << "Summa pobochnoy diagonali: " << secondaryDiagonal << endl;
result << "Summa diagonaley: " << mainDiagonal + secondaryDiagonal << endl;
result.close();
}


void multiple(float *A, float *B, int arraySize, int N, int Z, int k = 10, const int c = 10) {

for (int i = 0; i < arraySize; i++) {
k = i;
for (int j = 0; j < arraySize; j++) {
float newValue = 0;
for (int m = 0; m < arraySize; m++) {
newValue = newValue + A[i * N + m] * B[m * N + j];
}
rezalt[i][j] = newValue;
}
}
getDiagonal(&rezalt[0][0], arraySize);
printResult(&rezalt[0][0], "result.txt", arraySize, arraySize);
}

int main() {
int const N = 100, M = 100, Z = 100, X = 100,V=100,W=100;
float A[N][M], B[Z][X];
unsigned t, p = 0, q = 0;
fstream in;
fstream in2;
fstream result;
ifstream infile;
ofstream outfile;
in.open("C:\\Users\\Alex\\Desktop\\ in.txt", ios::in);
in2.open("C:\\Users\\Alex\\Desktop\ \in2.txt", ios::in);
result.open("C:\\Users\\Alex\\Deskt op\\result.txt", ios::in);





int optArraySize1 = fillArray(&A[0][0], N, M, &in);
int optArraySize2 = fillArray(&B[0][0], Z, X, &in2);
if (optArraySize1 == 0) {
cout << "Matrica 1 ne podxodit" << endl;
exit(0);
}
else {
cout << "Optimalniy rezmer massiva: " << optArraySize1 << "x" << optArraySize1 << endl;
}
if (optArraySize2 == 0) {
cout << "Matrica 2 ne podxodit" << endl;
exit(0);
}
else {
cout << "Optimalniy rezmer massiva: " << optArraySize2 << "x" << optArraySize2 << endl;
result << "Optimalniy rezmer massiva: " << optArraySize2 << "x" << optArraySize2 << endl;
}
if (optArraySize1 >= optArraySize2) {
cout << "Razmer dveh masivov bydet: " << optArraySize2 << "x" << optArraySize2 << endl;
result << "Razmer dveh masivov bydet: " << optArraySize2 << "x" << optArraySize2 << endl;
printResult(&A[0][0], "result.txt", optArraySize2, N);
printResult(&B[0][0], "result.txt", optArraySize2, Z);
multiple(&A[0][0], &B[0][0], optArraySize2, N, Z);
}
else {
cout << "Razmer dveh masivov bydet: " << optArraySize1 << "x" << optArraySize1 << endl;
printResult(&A[0][0], "result.txt", optArraySize1, N);
printResult(&B[0][0], "result.txt", optArraySize1, Z);
multiple(&A[0][0], &B[0][0], optArraySize1, N, Z);
}


}
alexbboy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить программу, которая вычисляет сумму, произведение двух переменных Михаил228 Паскаль, Turbo Pascal, PascalABC.NET 1 05.09.2016 20:55
Дан файл, 2 столбца из чисел, вывести ту строку, произведение элементов которое максимальное artikk009 Помощь студентам 5 25.10.2014 14:03
Найти произведение двух симметричных матриц А и В Alexandr- Помощь студентам 7 19.05.2013 15:04
программу, которая вычисляет произведение двух заданных пользователем чисел smile) Помощь студентам 1 15.09.2010 19:19
Произведение двух матриц 010 Паскаль, Turbo Pascal, PascalABC.NET 5 03.06.2008 11:33