![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 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: ![]() 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: ![]() 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); } } |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Составить программу, которая вычисляет сумму, произведение двух переменных | Михаил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 |