Advertisement
Guest User

Dron loh <3

a guest
Apr 22nd, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.89 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. const int NMAX = 100; // Максимальный размер строк
  7. const int MMAX = 100; // Максимальный размер столбцов
  8. //const char *F1 = "Text.txt"; // Матрица 7х7
  9. //const char *F1 = "Text1.txt"; // Матрица 9х9
  10. //const char *F1 = "Text2.txt"; // Пустой файл
  11. //const char *F1 = "Text3.txt"; // Файл не найден
  12. //const char *F1 = "Text4.txt"; // Файл с n (m) < 0
  13. const char *F1 = "Text5.txt"; // Файл, в котором кол-во заданных строк(столбцов) не соответвует действительности
  14. const char *FR = "Result.txt";
  15.  
  16. // Чтение данных
  17. int ReadFile(int(&Matr)[MMAX][NMAX] // Исходная матрица
  18. , int &n // Кол-во строк
  19. , int &m // Кол-во столбцов
  20. , ifstream &fin); // Файл для вывода
  21.  
  22. // Проверки файла
  23. void Error(int ErrorNum, const char *FNAME);// Код ошибки
  24.  
  25. // Печать матрицы
  26. void PrintF(int Matr[MMAX][NMAX] // Исходная матрица
  27. , int n // Кол-во строк
  28. , int m // Кол-во столбцов
  29. , ofstream &fout); // Файл вывода
  30.  
  31. int Multiply(int Matr[NMAX][NMAX]
  32. , int n
  33. , int m
  34. , ofstream &fout);
  35.  
  36. int Minimum(int Matr[NMAX][NMAX]
  37. , int n
  38. , int m
  39. , ofstream &fout);
  40.  
  41. int main()
  42. {
  43. setlocale(LC_ALL, "rus");
  44. ofstream fout(FR);// Файл вывода
  45. ifstream fin1(F1);// Файл с исходной матрицей
  46. int ErrorNum;// Код ошибки
  47. int m; // Кол-во столбцов
  48. int n;// Кол-во строк
  49. int Matr[MMAX][NMAX];// Исходная матрица
  50.  
  51. ErrorNum = ReadFile(Matr, n, m, fin1); // Проверка кода ошибки
  52.  
  53. if (ErrorNum != 0)
  54. {
  55. Error(ErrorNum, F1);
  56. }
  57. else
  58. {
  59. // Печать исходной матрицы
  60. cout << "\nИсходная матрица:" << endl;
  61. fout << "\nИсходная матрица:" << endl;
  62. PrintF(Matr, n, m, fout);
  63.  
  64. // Произведение отр-ых эл-ов ВЫШЕ главной диагонали
  65. cout << "Произведение отрицательных элементов матрицы ВЫШЕ главной диагонали = ";
  66. fout << "Произведение отрицательных элементов матрицы ВЫШЕ главной диагонали = ";
  67. Multiply(Matr, n, m, fout);
  68.  
  69. // Поиск наименьшего нечётного эл-та
  70. cout << "\nНаименьший нечётный элемент матрицы = ";
  71. fout << "\nНаименьший нечётный элемент матрицы = ";
  72. Minimum(Matr, n, m, fout);
  73.  
  74. cout << endl;
  75. }
  76. system("pause");
  77. return 0;
  78. }
  79.  
  80. // Описание представленных функций
  81.  
  82. int ReadFile(int(&Matr)[MMAX][NMAX] // Исходная матрица
  83. , int &n // Кол-во строк
  84. , int &m // Кол-во столбцов
  85. , ifstream &fin)
  86.  
  87. {
  88. cout << "\nЧтение файла с матрицей:\n";
  89.  
  90. if (!fin) // Файл не найден
  91. {
  92. fin.close(); // Закрытие файла
  93. return 1; // Выход по ошибке
  94. }
  95.  
  96. if (fin.eof())// Файл пуст
  97. {
  98. fin.close(); // Закрытие файла
  99. return 2; // Выход по ошибке
  100. }
  101.  
  102. fin >> n >> m;
  103. if (n < 0)
  104. {
  105. fin.close();
  106. return 3;
  107. }
  108. if (m < 0)
  109. {
  110. fin.close();
  111. return 3;
  112. }
  113. if (fin.fail())
  114. {
  115. fin.close(); // Закрытие файла
  116. return 4; // Выход по ошибке
  117. }
  118.  
  119. // Проверка соответсвия столбцов и строк
  120. if (fin.is_open())
  121.  
  122. {
  123. // Посчитаем сколько чисел в файле
  124. int count = 0;// Число чисел в файле
  125. int temp;// Временная переменная
  126. char symbol;
  127. int count_space = 0;
  128.  
  129. while (!fin.eof())
  130. {
  131. fin >> temp;
  132. count++;
  133. }
  134.  
  135. fin.seekg(0, ios::beg);
  136. fin.clear();
  137.  
  138. while (!fin.eof())
  139. {
  140. fin.get(symbol);// Текущий символ
  141. if (symbol == ' ') count_space++;
  142. if (symbol == '\n')
  143. break;
  144. }
  145.  
  146. fin.seekg(0, ios::beg);
  147. fin.clear();
  148.  
  149. // Вывод матрицы
  150.  
  151. int newn = count / (count_space + 1);// Число строк
  152. int newm = count_space + 1;// Число столбцов
  153.  
  154. if (newn != n)
  155. {
  156. fin.close(); // Закрытие файла
  157. return 5; // Выход по ошибке
  158. }
  159.  
  160. if (newm != m)
  161. {
  162. fin.close(); // Закрытие файла
  163. return 5; // Выход по ошибке
  164. }
  165. }
  166. // Считывание матрицы
  167. for (int j = 0; j < n; j++)
  168. {
  169. for (int i = 0; i < m; i++)
  170. {
  171. fin >> Matr[i][j];
  172. if (fin.fail())// Не число
  173. {
  174. fin.close(); // Закрытие файла
  175. return 3; // Выход по ошибке
  176. }
  177. }
  178. }
  179. return 0;
  180. }
  181.  
  182. //Ошибки
  183. void Error(int ErrorNum, const char *FNAME)//полученный код ошибки
  184. {
  185. cout << "Ошибка: \n";
  186. switch (ErrorNum)
  187. {
  188. case 1:cout << "Файл " << FNAME << " не найден !" << endl;
  189. break;
  190. case 2:cout << "Файл " << FNAME << "пуст !" << endl;
  191. break;
  192. case 3:cout << "Кол-во строк и столбцов в матрице не может быть < 0 !" << endl;
  193. break;
  194. case 4:cout << "Ошибка при чтении файла ! " << FNAME << endl;
  195. break;
  196. case 5:cout << "Число строк или столбцов не соответствует заданному числу ! " << endl;
  197. break;
  198. default:cout << "Неизвестная ошибка !\n";
  199. break;
  200. }
  201. }
  202.  
  203. // Произведение отрицательных элементов матрицы ВЫШЕ главной диагонали
  204.  
  205. int Multiply(int Matr[NMAX][NMAX]
  206. , int n
  207. , int m
  208. , ofstream &fout)
  209. {
  210. int i = 0;
  211. int j = 0;
  212. int p = 1;
  213. for (j = 0; j < n; j++)
  214. {
  215. for (i = 0; i < m; i++)
  216. {
  217. if (j < i)
  218. {
  219. if (Matr[i][j] < 0)
  220. p = p * Matr[i][j];
  221. }
  222. }
  223. }
  224. cout << p;
  225. fout << p;
  226. return p;
  227. }
  228.  
  229. // Поиск минимального нечётного эл-та матрицы
  230. int Minimum(int Matr[NMAX][NMAX]
  231. , int n
  232. , int m
  233. , ofstream &fout)
  234. {
  235. int i;
  236. int j;
  237. int min = INT_MAX;
  238. for (j = 0; j < n; j++)
  239. {
  240. for (i = 0; i < m; i++)
  241. {
  242. if ((Matr[i][j] < min) && ((Matr[i][j]) % 2))
  243. {
  244. min = Matr[i][j];
  245. }
  246. }
  247. }
  248. cout << min;
  249. fout << min;
  250. return min;
  251. }
  252.  
  253. // Печать матрицы
  254. void PrintF(int Matr[MMAX][NMAX] // Исходная матрица
  255. , int n // Кол-во строк
  256. , int m // Кол-во столбцов
  257. , ofstream &fout)
  258. {
  259. for (int j = 0; j < n; j++)
  260. {
  261. for (int i = 0; i < m; i++)
  262. {
  263. cout << Matr[i][j] << " ";
  264. fout << Matr[i][j] << " ";
  265. }
  266. cout << endl;
  267. fout << endl;
  268. }
  269. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement