Advertisement
dxvmxnd

Untitled

Nov 21st, 2023
41
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.94 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. void outputTask() {
  7. setlocale(LC_ALL, "Rus");
  8. cout << "Данная программа считает и выводит треугольник Паскаля." << endl;
  9. }
  10.  
  11. void outputAnswer(int** arr, int rows) {
  12. bool isNotCorrect;
  13. string path;
  14.  
  15. cout << "Треугольник Паскаля: " << endl;
  16. for (int i = 0; i < rows; i++) {
  17. for (int k = (rows - i); k >= 0; --k) {
  18. cout << " ";
  19. }
  20. for (int j = 0; j < (i + 1); j++) {
  21. cout << arr[i][j] << " ";
  22. }
  23. cout << "\n";
  24. }
  25.  
  26. do {
  27. isNotCorrect = false;
  28. cout << "\nВведите путь файла для вывода: " << endl;
  29. cin >> path;
  30. ofstream fout(path, fstream::app);
  31. if ((fout.is_open()) and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
  32. cout << "Файл успешно открыт!" << endl;
  33. fout.close();
  34. }
  35. else {
  36. cout << "Ошибка открытия файла" << endl;
  37. isNotCorrect = true;
  38. }
  39. } while (isNotCorrect);
  40.  
  41. ofstream fout(path, fstream::app);
  42.  
  43. fout << "Треугольник Паскаля: " << endl;
  44. for (int i = 0; i < rows; i++) {
  45. for (int k = (rows - i); k >= 0; --k) {
  46. fout << " ";
  47. }
  48. for (int j = 0; j < (i + 1); j++) {
  49. fout << arr[i][j] << " ";
  50. }
  51. fout << "\n";
  52. }
  53.  
  54. fout.close();
  55.  
  56.  
  57. cout << "Ответ записан в файл." << endl;
  58. }
  59.  
  60. int** arrayCount(int size) {
  61. int** arr = new int* [size];
  62.  
  63. for (int i = 0; i < size; i++) {
  64. arr[i] = new int[i + 1];
  65. arr[i][0] = 1;
  66. arr[i][i] = 1;
  67. }
  68.  
  69. for (int i = 2; i < size; i++) {
  70. for (int j = 1; j < i; j++) {
  71. arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
  72. }
  73. }
  74.  
  75.  
  76. return arr;
  77. }
  78.  
  79. string choicePath() {
  80. string path;
  81. bool isNotCorrect;
  82.  
  83. do {
  84. isNotCorrect = false;
  85. cout << "Введите путь файла: " << endl;
  86. cin >> path;
  87. ifstream fin(path);
  88. if (fin.is_open() and ((path[size(path) - 1] == 't') and (path[size(path) - 2] == 'x') and (path[size(path) - 3] == 't') and (path[size(path) - 4] == '.'))) {
  89. cout << "Файл успешно открыт!" << endl;
  90. }
  91. else {
  92. cout << "Ошибка открытия файла!" << endl;
  93. isNotCorrect = true;
  94. }
  95. fin.close();
  96. } while (isNotCorrect);
  97.  
  98. return path;
  99. }
  100.  
  101. int inputSizeFromConsole() {
  102. bool isNotCorrect;
  103. int size;
  104.  
  105. do {
  106. isNotCorrect = false;
  107. cout << "Введите количество строк треугольника Паскаля, необходимых для вывода: " << endl;
  108. cin >> size;
  109. if (cin.fail() or (size < 1)) {
  110. isNotCorrect = true;
  111. cout << "Неверный ввод данных!" << endl;
  112. cin.clear();
  113. while (cin.get() != '\n');
  114. }
  115. } while (isNotCorrect);
  116.  
  117. return size;
  118. }
  119.  
  120. int inputSizeFromFile(string path) {
  121. int size;
  122.  
  123. ifstream fin(path);
  124. fin >> size;
  125. if (fin.fail() or (size < 1)) {
  126. cout << "Ошибка! Введите корректный размер с консоли." << endl;
  127. size = inputSizeFromConsole();
  128. }
  129.  
  130. fin.close();
  131.  
  132. return size;
  133. }
  134.  
  135. int inputFromFIle() {
  136. string path;
  137. int size;
  138.  
  139. cout << "При вводе с файла учтите, что на ПЕРВОЙ строке должно быть записано количество строк, необходимых для вывода." << endl;
  140.  
  141. path = choicePath();
  142. size = inputSizeFromFile(path);
  143.  
  144. return size;
  145. }
  146.  
  147. int sourceChoice() {
  148. int choiceNumber, size;
  149. bool isNotCorrect;
  150.  
  151. cout << "Выберите, откуда будут выводиться данные: " << endl;
  152. do {
  153. isNotCorrect = false;
  154. cout << "Введите 0, если с консоли; введите 1, если с файла." << endl;
  155. cin >> choiceNumber;
  156. if (cin.fail() or ((choiceNumber != 0) and (choiceNumber != 1))) {
  157. isNotCorrect = true;
  158. cout << "Данные введены неккоректно" << endl;
  159. cin.clear();
  160. while (cin.get() != '\n');
  161. }
  162. } while (isNotCorrect);
  163.  
  164. if (choiceNumber == 0) {
  165. size = inputSizeFromConsole();
  166. }
  167. else {
  168. size = inputFromFIle();
  169. }
  170.  
  171. return size;
  172. }
  173.  
  174. int main() {
  175. int size;
  176. int** arr;
  177.  
  178. outputTask();
  179. size = sourceChoice();
  180. arr = arrayCount(size);
  181. outputAnswer(arr, size);
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement