Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- #include <sstream>
- #include <cmath>
- using namespace std;
- void taskEssence() {
- setlocale(LC_ALL, "Rus");
- cout << "Данная программа находит наибольшую сумму модулей элементов строк матрицы." << endl;
- }
- string pathChoice() {
- string path;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь к файлу." << endl;
- cin >> path;
- ifstream fin(path);
- if (fin.is_open()) {
- cout << "Файл успешно открыт!" << endl;
- }
- else {
- cout << "Ошибка открытия файла" << endl;
- isNotCorrect = true;
- }
- fin.close();
- } while (isNotCorrect);
- return path;
- }
- int sizeRowFile(string path) {
- int sizeI;
- bool isNotCorrect;
- int correct;
- ifstream fin(path);
- do {
- isNotCorrect = false;
- cout << "Ввод количества строк..." << endl;
- fin >> sizeI;
- if (cin.fail() or (sizeI < 1)) {
- isNotCorrect = true;
- cout << "Данные введены неккоректно. Измените входные данные и перезапустите программу." << endl;
- cin.clear();
- while (cin.get() != '\n');
- correct = 1;
- while (correct = 1) {
- cin >> correct;
- }
- }
- } while (isNotCorrect);
- fin.close();
- return sizeI;
- }
- int sizeColumnFile(string path) {
- int sizeJ;
- bool isNotCorrect;
- int correct;
- ifstream fin(path);
- do {
- isNotCorrect = false;
- cout << "Ввод количества столбцов..." << endl;
- fin >> sizeJ;
- if (cin.fail() or (sizeJ < 1)) {
- isNotCorrect = true;
- cout << "Данные введены неккоректно. Измените входные данные и перезапустите программу." << endl;
- cin.clear();
- while (cin.get() != '\n');
- correct = 1;
- while (correct = 1) {
- cin >> correct;
- }
- }
- } while (isNotCorrect);
- fin.close();
- return sizeJ;
- }
- int** matrixReadFile(string path, int sizeI, int sizeJ, int** matrix) {
- ifstream fin(path);
- bool isNotCorrect;
- cout << "Запись матрицы..." << endl;
- for (int i = 0; i < sizeI; i++) {
- for (int j = 0; j < sizeJ; j++) {
- do {
- isNotCorrect = false;
- fin >> matrix[i][j];
- if (cin.fail()) {
- isNotCorrect = true;
- cout << "Данные введены неккоректно. Измените " << (i + 1) << "," << (j + 1) << " пункт матрицы и перезапустите программу." << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- }
- }
- return matrix;
- }
- int matrixCout(int** matrix) {
- int sum;
- int maxsum;
- int sizeI;
- int sizeJ;
- sizeI = sizeof(matrix);
- sizeJ = sizeof(matrix[0]);
- sum = 0;
- maxsum = 0;
- for (int i = 0; i < sizeI; i++) {
- for (int j = 0; j < sizeJ; j++) {
- sum = sum + abs(matrix[i][j]);
- }
- if (sum > maxsum) {
- maxsum = sum;
- }
- sum = 0;
- }
- return maxsum;
- }
- void output(int result) {
- string path;
- cout << "Максимальная сумма модулей элементов строк: " << result << endl;
- bool isNotCorrect;
- do {
- isNotCorrect = false;
- cout << "Введите путь файла для вывода: " << endl;
- cin >> path;
- ofstream fout(path, fstream::app);
- if (fout.is_open()) {
- fout << "Максимальная сумма модулей элементов строк: " << result << endl;
- }
- else {
- cout << "Ошибка открытия файла" << endl;
- isNotCorrect = true;
- }
- fout.close();
- } while (isNotCorrect);
- }
- int** fromFile(int** matrix) {
- string path;
- int sizeI;
- int sizeJ;
- int maxRes = 0;
- cout << "При записи данных из файла, учтите, что на первой строке написано количество строк матрицы, на второй - количество столбцов, а далее с новой строки прописывается сама матрица." << endl;
- path = pathChoice();
- sizeI = sizeRowFile(path);
- sizeJ = sizeColumnFile(path);
- matrix = new int* [sizeI];
- for (int i = 0; i < sizeI; i++) {
- matrix[i] = new int[sizeJ];
- }
- matrix = matrixReadFile(path, sizeI, sizeJ, matrix);
- return matrix;
- }
- /*
- int sizeRowConsole{
- }
- int sizeColumnConsole{
- }
- int matrixReadConsole{
- }
- int fromConsole{
- } */
- int** sourceChoice(int** matrix) {
- int choiceNumber;
- bool isNotCorrect;
- cout << "Выберите, откуда будут выводиться данные: " << endl;
- do {
- isNotCorrect = false;
- cout << "Введите 0, если с консоли; введите 1, если с файла." << endl;
- cin >> choiceNumber;
- if (cin.fail() or ((choiceNumber != 0) and (choiceNumber != 1))) {
- isNotCorrect = true;
- cout << "Данные введены неккоректно" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isNotCorrect);
- if (choiceNumber == 0) {
- matrix = fromFile(matrix);
- }
- else {
- matrix = fromFile(matrix);
- }
- return matrix;
- }
- int main() {
- int** matrix;
- int maxRes;
- matrix = nullptr;
- taskEssence();
- matrix = sourceChoice(matrix);
- maxRes = matrixCout(matrix);
- output(maxRes);
- }
- /*
- void fromfile() {
- bool isIncorrect;
- int** matrix = nullptr;
- int sizeI;
- int sizeJ;
- printf("Input path for input file: \n");
- string path = "..//..//input.txt";
- //cin >> path;
- isIncorrect = false;
- sizeI = 0;
- sizeJ = 0;
- cout << "Открытие файла..." << endl;
- ifstream fin(path);
- if (fin.is_open()) {
- fin >> sizeI;
- fin >> sizeJ;
- if (cin.fail() or (sizeI < 1) or (sizeJ < 1)) {
- isIncorrect = true;
- cout << "Данные введены некорректно" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- matrix = new int* [sizeI];
- for (int i = 0; i < sizeI; i++) {
- matrix[i] = new int[sizeJ];
- for (int j = 0; j < sizeJ; j++) {
- fin >> matrix[i][j];
- }
- }
- fin.close();
- cout << "Вывод матрицы: " << endl;
- for (int i = 0; i < sizeI; i++) {
- ;
- for (int j = 0; j < sizeJ; j++) {
- cout << matrix[i][j] << " ";
- }
- cout << "\n";
- }
- int maxsum = matrixcout(matrix, sizeI, sizeJ);
- cout << "Максимальная сумма модулей элементов строки: " << maxsum;
- ofstream fout(path, fstream::app);
- cout << "\nЗапись ответа в файл.." << endl;
- if (fout.is_open()) {
- fout << "\nМаксимальная сумма модулей элементов строки: " << maxsum;
- }
- fout.close();
- }
- else {
- cout << "Ошибка открытия файла" << endl;
- isIncorrect = true;
- }
- fin.close();
- delete[] matrix;
- }
- void fromconsole() {
- bool isIncorrect;
- int** matrix = nullptr;
- int sizeI;
- sizeI = 0;
- do {
- isIncorrect = false;
- cout << "Введите количество строк в матрице" << endl;
- cin >> sizeI;
- if (cin.fail() or (sizeI < 1)) {
- isIncorrect = true;
- cout << "Данные введены некорректно" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isIncorrect);
- int sizeJ;
- sizeJ = 0;
- do {
- isIncorrect = false;
- cout << "Введите количество столбцов в матрице" << endl;
- cin >> sizeJ;
- if (cin.fail() or (sizeJ < 1)) {
- isIncorrect = true;
- cout << "Данные введены некорректно" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isIncorrect);
- matrix = new int* [sizeI];
- for (int i = 0; i < sizeI; i++) {
- matrix[i] = new int[sizeJ];
- for (int j = 0; j < sizeJ; j++) {
- do {
- isIncorrect = false;
- cout << "Введите элемент матрицы с адресом " << (i + 1) << "," << (j + 1) << endl;
- cin >> matrix[i][j];
- if (cin.fail()) {
- isIncorrect = true;
- cout << "Данные введены некорректно" << endl;
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isIncorrect);
- }
- }
- cout << "Вывод матрицы: " << endl;
- for (int i = 0; i < sizeI; i++) {
- ;
- for (int j = 0; j < sizeJ; j++) {
- cout << matrix[i][j] << " ";
- }
- cout << "\n";
- }
- int maxsum;
- maxsum = matrixcout(matrix, sizeI, sizeJ);
- cout << "Максимальная сумма модулей элементов строки: " << maxsum;
- delete[] matrix;
- }
- int main() {
- setlocale(LC_ALL, "Rus");
- cout << "Данная программа находит наибольшую сумму модулей элементов строк матрицы." << endl;
- bool isIncorrect;
- string choice;
- cout << "Выберите, откуда должны выводиться данные." << endl;
- do {
- isIncorrect = false;
- cout << "Напишите ONE, если с консоли. TWO, если с файла." << endl;
- cin >> choice;
- if ((choice != "ONE") and (choice != "TWO")) {
- isIncorrect = true;
- cout << "Данные введены некорректно" << endl;
- }
- } while (isIncorrect);
- if (choice == "ONE") {
- fromconsole();
- }
- else {
- fromfile();
- }
- return 0;
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement