Advertisement
dxvmxnd

Untitled

Oct 30th, 2024
10
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.23 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6.  
  7. void outputTask() {
  8. cout << "Данная программа считает количество строк введеной матрицы, сумма модулей элементов которой больше 1." << endl;
  9. }
  10.  
  11. string inputPath() {
  12. string path;
  13. bool isNotCorrect;
  14.  
  15. do {
  16. isNotCorrect = false;
  17. cin >> path;
  18. ifstream fin(path);
  19. if (fin.is_open() and (size(path) > 4) and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
  20. cout << "Файл успешно открыт!" << endl;
  21. }
  22. else {
  23. cout << "Ошибка открытия файла!" << endl;
  24. isNotCorrect = true;
  25. }
  26. fin.close();
  27. } while (isNotCorrect);
  28.  
  29.  
  30. return path;
  31. }
  32.  
  33. void outputMatrix(double** matrix, int size) {
  34. cout << "Введенная матрица: " << endl;
  35. for (int i = 0; i < size; i++) {
  36. for (int j = 0; j < size; j++) {
  37. cout << matrix[i][j];
  38. cout << " ";
  39. }
  40. cout << endl;
  41. }
  42. }
  43.  
  44. int countRows(double** matrix, int size) {
  45. int countOfRows;
  46. int sumOfRow;
  47.  
  48. countOfRows = 0;
  49. for (int i = 0; i < size; i++) {
  50. sumOfRow = 0;
  51. for (int j = 0; j < size; j++) {
  52. sumOfRow += abs(matrix[i][j]);
  53. }
  54. if(sumOfRow > 1) {
  55. countOfRows++;
  56. }
  57. }
  58.  
  59. return countOfRows;
  60. }
  61.  
  62. void outputAnswer(int answer) {
  63. string path;
  64.  
  65. cout << "Количество строк, сумма модулей элементов которых больше 1: " << answer << endl;
  66.  
  67. cout << "Введите путь файла для вывода: " << endl;
  68. path = inputPath();
  69. ofstream fout(path);
  70. fout << "Количество строк, сумма модулей элементов которых больше 1: " << answer << endl;
  71.  
  72. fout.close();
  73. cout << "Данные успешно записаны в файл." << endl;
  74. }
  75.  
  76. int inputSizeFromConsole() {
  77. int size;
  78. bool isNotCorrect;
  79.  
  80. do {
  81. cout << "Введите порядок матрицы: " << endl;
  82. isNotCorrect = false;
  83. cin >> size;
  84. if (cin.fail() or (size < 2)) {
  85. isNotCorrect = true;
  86. cout << "Ошибка ввода!" << endl;
  87. cin.clear();
  88. while(cin.get() != '\n');
  89. }
  90. } while(isNotCorrect);
  91.  
  92. return size;
  93.  
  94. }
  95.  
  96. void fillMatrixFromConsole(double**& matrix, int size) {
  97. bool isNotCorrect;
  98.  
  99. for (int i = 0; i < size; i++) {
  100. for (int j = 0; j < size; j++) {
  101. do {
  102. isNotCorrect = false;
  103. cout << "Введите [" << i + 1 << " , " << j + 1 << "] элемент матрицы: " << endl;
  104. cin >> matrix[i][j];
  105. if (cin.fail()) {
  106. cout << "Ошибка ввода! Повторите попытку." << endl;
  107. isNotCorrect = true;
  108. cin.clear();
  109. while(cin.get() != '\n');
  110. }
  111. } while(isNotCorrect);
  112. }
  113. }
  114. }
  115.  
  116. double** inputFromConsole(int& size) {
  117. double** matrix;
  118.  
  119. size = inputSizeFromConsole();
  120. matrix = new double*[size];
  121. for (int i = 0; i < size; i++) {
  122. matrix[i] = new double[size];
  123. }
  124. fillMatrixFromConsole(matrix, size);
  125. outputMatrix(matrix, size);
  126.  
  127. }
  128.  
  129. void outputSize(int size) {
  130. cout << "Введенный размер с файла: " << size << endl;
  131. }
  132.  
  133. void inputSizeFromFile(string path, int& size) {
  134.  
  135. cout << "Считывание размера..." << endl;
  136. ifstream fin(path);
  137. fin >> size;
  138. if (fin.fail() or (size < 2)) {
  139. cout << "Ошибка ввода размера! Введите размер с клавиатуры." << endl;
  140. size = inputSizeFromConsole();
  141. }
  142. else {
  143. outputSize(size);
  144. }
  145.  
  146. fin.close();
  147. }
  148.  
  149. double exceptionRead(int i, int j) {
  150. bool isNotCorrect;
  151. double num;
  152.  
  153. do{
  154. isNotCorrect = false;
  155. cout << "Введите [" << i + 1 << " , " << j + 1 << "] элемент матрицы: " << endl;
  156. cin >> num;
  157. if (cin.fail()) {
  158. cout << "Ошибка ввода!" << endl;
  159. isNotCorrect = true;
  160. cin.clear();
  161. while(cin.get() != '\n');
  162. }
  163.  
  164. } while(isNotCorrect);
  165.  
  166. return num;
  167. }
  168.  
  169. void inputMatrixFromFile(string path, int size, double**& matrix) {
  170. string skipLine;
  171.  
  172. cout << "Ввод матрицы.. " << endl;
  173.  
  174. ifstream fin(path);
  175. getline(fin, skipLine);
  176. for (int i = 0; i < size; i++) {
  177. for (int j = 0; j < size; j++) {
  178. fin >> matrix[i][j];
  179. if (fin.fail()) {
  180. cout << "Ошибка ввода элемента с индексами [" << i + 1 << " , " << j + 1 << "]. Введите этот элемент с клавиатуры. " << endl;
  181. fin.clear();
  182. fin.ignore(numeric_limits<streamsize>::max(), ' ');
  183. matrix[i][j] = exceptionRead(i, j);
  184. }
  185. }
  186. }
  187. fin.close();
  188.  
  189. }
  190.  
  191. double** inputFromFile(int& size) {
  192. string path;
  193. double** matrix;
  194.  
  195. cout << "При вводе из файла учтите, что на первой строке написан порядок матрицы, а далее - сама матрица с новой строки." << endl;
  196. cout << "Введите путь файла с данными: " << endl;
  197. path = inputPath();
  198. inputSizeFromFile(path, size);
  199.  
  200. matrix = new double*[size];
  201. for (int i = 0; i < size; i++) {
  202. matrix[i] = new double[size];
  203. }
  204.  
  205. inputMatrixFromFile(path, size, matrix);
  206. outputMatrix(matrix, size);
  207.  
  208. return matrix;
  209.  
  210.  
  211. }
  212.  
  213. bool isFromFile() {
  214. bool isNotCorrect;
  215. int chooseNum;
  216.  
  217. do {
  218. isNotCorrect = false;
  219. cout << "Выберите, откуда вводить данные: 1, если с файла; 0, если с консоли" << endl;
  220. cin >> chooseNum;
  221. if (cin.fail() or ((chooseNum != 1) and (chooseNum != 0))) {
  222. cout << "Ошибка ввода!" << endl;
  223. isNotCorrect = true;
  224. cin.clear();
  225. while(cin.get() != '\n');
  226. }
  227. } while(isNotCorrect);
  228.  
  229. return (chooseNum == 1);
  230.  
  231. }
  232.  
  233. double** chooseInput(int& size) {
  234. double** matrix;
  235.  
  236. if (isFromFile()) {
  237. matrix = inputFromFile(size);
  238. }
  239. else {
  240. matrix = inputFromConsole(size);
  241. }
  242.  
  243. return matrix;
  244. }
  245.  
  246. int main() {
  247. system("chcp 1251");
  248.  
  249. double** matrix;
  250. int size;
  251. int amountOfRows;
  252.  
  253. outputTask();
  254. matrix = chooseInput(size);
  255. amountOfRows = countRows(matrix, size);
  256. outputAnswer(amountOfRows);
  257.  
  258. delete[] matrix;
  259.  
  260. cin;
  261. return 0;
  262. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement