Advertisement
dxvmxnd

Untitled

Nov 21st, 2023 (edited)
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.33 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3.  
  4. public class Main {
  5.  
  6. private static final Scanner scanner = new Scanner(System.in);
  7.  
  8. public static void main(String[] args) {
  9. int size;
  10. int[][] arr;
  11.  
  12. outputTask();
  13. size = sourceChoice();
  14. arr = arrayCount(size);
  15. outputAnswer(arr, size);
  16.  
  17.  
  18. scanner.close();
  19.  
  20. }
  21. public static void outputTask() {
  22. System.out.println("Данная программа считает и выводит треугольник Паскаля.");
  23. }
  24. public static int sourceChoice() {
  25. int choiceNumber, size;
  26. boolean isIncorrect;
  27. choiceNumber = -1;
  28.  
  29. System.out.println("Выберите, откуда будут вводиться данные: ");
  30. do {
  31. isIncorrect = false;
  32. System.out.println("Введите 0, если с консоли; 1, если с файла");
  33. try {
  34. choiceNumber = Integer.parseInt(scanner.nextLine());
  35. } catch (NumberFormatException exception) {
  36. isIncorrect = true;
  37. System.err.println("Неверный ввод данных!");
  38. }
  39. if (((choiceNumber != 0) && (choiceNumber != 1)) || (isIncorrect)) {
  40. isIncorrect = true;
  41. System.err.println("Число должно быть или 0, или 1");
  42. }
  43. } while (isIncorrect);
  44. if (choiceNumber == 0) {
  45. size = inputSizeFromConsole();
  46. } else {
  47. size = inputFromFile();
  48. }
  49. return size;
  50. }
  51. public static int inputFromFile() {
  52. String path;
  53. int size;
  54.  
  55. System.out.println("При вводе с файла учтите, что на ПЕРВОЙ строке должно быть записано количество строк, необходимых для вывода.");
  56.  
  57. path = pathChoice();
  58. size = inputSizeFromFile(path);
  59.  
  60. return size;
  61. }
  62. public static String pathChoice() {
  63. String path;
  64. boolean isIncorrect;
  65.  
  66. do {
  67. isIncorrect = false;
  68. System.out.println("Введите путь к файлу: ");
  69. path = scanner.nextLine();
  70.  
  71. File file = new File(path);
  72. if (!file.exists()) {
  73. System.out.println("По указанном пути файл не найден.");
  74. isIncorrect = true;
  75. } else if (!getExtension(path).equals("txt")) {
  76. System.err.println("Ошибка, неправильный тип файла!");
  77. isIncorrect = true;
  78. }
  79. } while (isIncorrect);
  80.  
  81. return path;
  82. }
  83. public static String getExtension(String path) {
  84. int pos = path.lastIndexOf('.');
  85. if (pos <= 0) {
  86. return "";
  87. }
  88. return path.substring(pos + 1);
  89. }
  90. public static int inputSizeFromFile(String path) {
  91. int size;
  92. boolean isIncorrect;
  93.  
  94. System.out.println("Считывание размера...");
  95. size = 0;
  96.  
  97. isIncorrect = false;
  98. try (BufferedReader reader = new BufferedReader(new FileReader(path))) {
  99. try {
  100. size = Integer.parseInt(reader.readLine());
  101. } catch (NumberFormatException exception) {
  102. if ((size < 1) || (isIncorrect == true)) {
  103. isIncorrect = true;
  104. System.err.println("Неверный ввод данных! Введите данные с клавиатуры.");
  105. size = inputSizeFromConsole();
  106. }
  107. else {
  108. System.out.println(size);
  109. }
  110. }
  111. } catch (IOException ioException) {
  112. isIncorrect = true;
  113. }
  114.  
  115. return size;
  116. }
  117. public static int inputSizeFromConsole() {
  118. boolean isIncorrect;
  119. int size;
  120.  
  121. size = 0;
  122. do {
  123. isIncorrect = false;
  124. System.out.print("Введите количество строк треугольника Паскаля: ");
  125. try {
  126. size = Integer.parseInt(scanner.nextLine());
  127. if (!isIncorrect && (size < 1)) {
  128. System.err.println("Неверный ввод данных!");
  129. isIncorrect = true;
  130. }
  131. } catch (NumberFormatException exception) {
  132. System.err.println("Неверный ввод данных!");
  133. isIncorrect = true;
  134. }
  135.  
  136. } while (isIncorrect);
  137.  
  138. return size;
  139. }
  140. public static int[][] arrayCount(int size) {
  141. int[][] arr = new int[size][];
  142.  
  143. for (int i = 0; i < size; i++) {
  144. arr[i] = new int[i + 1];
  145. arr[i][0] = 1;
  146. arr[i][i] = 1;
  147. }
  148.  
  149. for (int i = 2; i < size; i++) {
  150. for (int j = 1; j < i; j++) {
  151. arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
  152. }
  153. }
  154.  
  155.  
  156. return arr;
  157. }
  158. public static void outputAnswer(int[][] arr, int size) {
  159. String path;
  160. boolean isIncorrect;
  161.  
  162. System.out.println("Треугольник Паскаля: ");
  163. for (int i = 0; i < size; i++) {
  164. for (int k = (size - i); k >= 0; --k) {
  165. System.out.print(" ");
  166. }
  167. for (int j = 0; j < (i + 1); j++) {
  168. System.out.print(arr[i][j] + " ");
  169. }
  170. System.out.println();
  171. }
  172.  
  173. path = outputPath();
  174. do {
  175. isIncorrect = false;
  176. try (FileWriter writer = new FileWriter(path, true)) {
  177. writer.write("Треугольник Паскаля: \n");
  178. for (int i = 0; i < size; i++) {
  179. for (int k = (size - i); k >= 0; --k) {
  180. writer.write(" ");
  181. }
  182. for (int j = 0; j < (i + 1); j++) {
  183. writer.write(arr[i][j] + " ");
  184. }
  185. writer.write("\n");
  186. }
  187. } catch (IOException ioException) {
  188. System.err.println("Ошибка при записи в файл");
  189. isIncorrect = true;
  190. }
  191. } while (isIncorrect);
  192. System.out.println("Данные записаны в файл.");
  193. }
  194. public static String outputPath() {
  195. String path;
  196. boolean isIncorrect;
  197.  
  198. do {
  199. isIncorrect = false;
  200. System.out.println("Введите путь к файлу для вывода: ");
  201. System.out.println();
  202. path = scanner.nextLine();
  203.  
  204. File file = new File(path);
  205. if (!file.exists()) {
  206. System.out.println("По указанном пути файл не найден.");
  207. isIncorrect = true;
  208. } else if (!getExtension(path).equals("txt")) {
  209. System.err.println("Ошибка, неправильный тип файла!");
  210. isIncorrect = true;
  211. }
  212. } while (isIncorrect);
  213. return path;
  214. }
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement