Advertisement
anticlown

laba.3.3.(Java)

Nov 24th, 2022 (edited)
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.53 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.io.*;
  3.  
  4. public class Main {
  5.   private static final int MIN_SIZE = 2;
  6.   private static final int MAX_SIZE = 10;
  7.   private static final int MIN_VALUE = -1000;
  8.   private static final int MAX_VALUE = 1000;
  9.   private static final Scanner scan = new Scanner(System.in);
  10.  
  11.   public static void outputTaskInfo() {
  12.     System.out.println("Данная программа сортирует введенную последовательность методом бинарных вставок." + "\n" +
  13.             "Диапазон ввода значений размера последовательности: " + MIN_SIZE + "..." + MAX_SIZE + ". \n" +
  14.             "Диапазон для ввода чисел: " + MIN_VALUE + "..." +  MAX_VALUE + ".");
  15.   }
  16.  
  17.   public static int getVerificationOfChoice() {
  18.     int choice = 0;
  19.     boolean isIncorrect;
  20.  
  21.     do {
  22.       isIncorrect = false;
  23.       try {
  24.         choice = Integer.parseInt(scan.nextLine());
  25.       } catch (NumberFormatException e) {
  26.         System.out.println("Проверьте корректность ввода данных!");
  27.         isIncorrect = true;
  28.       }
  29.       if (!isIncorrect && (choice != 0 && choice != 1)) {
  30.         System.out.println("Для выбора введите 0 или 1!");
  31.         isIncorrect = true;
  32.       }
  33.     } while (isIncorrect);
  34.  
  35.     return choice;
  36.   }
  37.  
  38.   public static String inputPathToFile() {
  39.     boolean isIncorrect;
  40.     String path;
  41.  
  42.     System.out.println("Укажите путь к файлу: ");
  43.  
  44.     do {
  45.       isIncorrect = false;
  46.       path = scan.nextLine();
  47.       File file = new File(path);
  48.  
  49.       if (!file.exists()) {
  50.         System.out.println("По указанному пути файл не найден! Укажите правильный путь: ");
  51.         isIncorrect = true;
  52.       }
  53.     } while (isIncorrect);
  54.  
  55.     return path;
  56.   }
  57.  
  58.   public static int readSizeFromConsole(){
  59.     int size = 0;
  60.     boolean isIncorrect;
  61.  
  62.     System.out.println("Введите количество элементов последовательности: ");
  63.  
  64.     do {
  65.       isIncorrect = false;
  66.       try {
  67.         size = Integer.parseInt(scan.nextLine());
  68.       } catch (NumberFormatException e) {
  69.         System.out.println("Проверьте корректность ввода данных!");
  70.         isIncorrect = true;
  71.       }
  72.       if (!isIncorrect && (size < MIN_SIZE || size > MAX_SIZE)) {
  73.         System.out.println("Введите число от " + MIN_SIZE + " до " + MAX_SIZE + "! \n");
  74.         isIncorrect = true;
  75.       }
  76.     } while (isIncorrect);
  77.  
  78.     return size;
  79.   }
  80.  
  81.   public static int readSizeFromFile(final String path) {
  82.     int size;
  83.     boolean isIncorrect = true;
  84.  
  85.     System.out.println("Происходит чтение количества членов последовательности... ");
  86.  
  87.     try (BufferedReader br = new BufferedReader(new FileReader(path))) {
  88.       size = Integer.parseInt(br.readLine());
  89.     } catch (Exception e) {
  90.       isIncorrect = false;
  91.       System.out.println("Ошибка при чтении данных! Введите количество с консоли!");
  92.       size = readSizeFromConsole();
  93.     }
  94.  
  95.     return size;
  96.   }
  97.  
  98.   public static void outputSizeInConsole(int size) {
  99.       System.out.println("Количество членов последовательности равно: " + size + ".");
  100.   }
  101.  
  102.   public static void outputSizeInFile(int size, String path) {
  103.     boolean isIncorrect;
  104.     System.out.println("Вывод количества членов последовательности в файл...");
  105.  
  106.     do {
  107.       isIncorrect = false;
  108.       try {
  109.         FileWriter writer = new FileWriter(path);
  110.         writer.write(size + "\n");
  111.         writer.close();
  112.       } catch (IOException e) {
  113.         isIncorrect = true;
  114.         System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  115.         path = inputPathToFile();
  116.       }
  117.     } while (isIncorrect);
  118.  
  119.     System.out.println("Данные успешно записаны в файл!");
  120.   }
  121.  
  122.   public static int[] fillSequenceFromConsole(final int size) {
  123.     int[] sequence = new int[size];
  124.     boolean isIncorrect;
  125.  
  126.     for (int i = 0; i < size; i++) {
  127.         System.out.print("Введите значение " + (i + 1) + "-го элемента последовательности: ");
  128.  
  129.         do {
  130.           isIncorrect = false;
  131.           try {
  132.             sequence[i] = Integer.parseInt(scan.nextLine());
  133.           } catch (NumberFormatException e) {
  134.             System.out.println("Проверьте корректность ввода данных!");
  135.             isIncorrect = true;
  136.           }
  137.  
  138.           if (!isIncorrect && (sequence[i] < MIN_VALUE || sequence[i] > MAX_VALUE)) {
  139.             isIncorrect = true;
  140.             System.out.println("Введите число от " + MIN_VALUE + " до " + MAX_VALUE + "!");
  141.           }
  142.         } while (isIncorrect);
  143.     }
  144.  
  145.     return sequence;
  146.   }
  147.  
  148.   public static int[] fillSequenceFromFile(final int size, final String path) {
  149.     int[] sequence = new int[size];
  150.     int i;
  151.     System.out.println("Происходит чтение последовательности...");
  152.  
  153.     try (BufferedReader fReader = new BufferedReader(new FileReader(path))){
  154.       fReader.readLine();
  155.       String[] integerInString = fReader.readLine().split(" ");
  156.  
  157.       for (int j = 0; j < size; j++)
  158.         sequence[j] = Integer.parseInt(integerInString[j]);
  159.     } catch (Exception e) {
  160.       System.out.println("Ошибка при чтении системы! Введите систему с консоли!");
  161.       sequence = fillSequenceFromConsole(size);
  162.     }
  163.     for (int j = 0; j < size; j++) {
  164.       if (sequence[j] < MIN_VALUE || sequence[j] > MAX_VALUE) {
  165.         System.out.println("Ошибка при считывании матрицы из файла!Введите матрицу с консоли!");
  166.         sequence = fillSequenceFromConsole(size);
  167.       }
  168.     }
  169.  
  170.     return sequence;
  171.   }
  172.  
  173.   public static void outputSequenceInConsole(final int[] sequence, final int size) {
  174.     System.out.println("Вывод начальной последовательности: ");
  175.     for (int i = 0; i < size; i++)
  176.         System.out.print(sequence[i] + " ");
  177.     System.out.print("\n");
  178.   }
  179.  
  180.   public static void outputSequenceInFile(String path, final int[] sequence, final int size){
  181.       boolean isIncorrect;
  182.       System.out.println("Вывод начальной последовательности в файл...");
  183.  
  184.       do {
  185.         isIncorrect = false;
  186.         try {
  187.           FileWriter writer = new FileWriter(path, true);
  188.           BufferedWriter bufferWriter = new BufferedWriter(writer);
  189.  
  190.           for (int i = 0; i < size; i++)
  191.             bufferWriter.write(sequence[i] + " ");
  192.           bufferWriter.write("\n");
  193.  
  194.           bufferWriter.close();
  195.           writer.close();
  196.         } catch (IOException e) {
  197.           isIncorrect = true;
  198.           System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  199.           path = inputPathToFile();
  200.         }
  201.       } while (isIncorrect);
  202.  
  203.       System.out.println("Данные успешно записаны в файл!");
  204.     }
  205.  
  206.   public static int[][] BinaryInsertionSort(final int size, int[] sequence) {
  207.   int[] newSequence = new int[size];
  208.   int[][] detailingMatrix = new int[size][size];
  209.  
  210.     for (int i = 0; i < size; i++)
  211.     {
  212.       newSequence[i] = sequence[i];
  213.       detailingMatrix[0][i] = sequence[i];
  214.     }
  215.  
  216.     for (int i = 1; i < size; i++)
  217.     {
  218.       if (newSequence[i - 1] > newSequence[i])
  219.       {
  220.         int temp = newSequence[i];
  221.         int left = 0;
  222.         int right = i - 1;
  223.         int j;
  224.  
  225.         do
  226.         {
  227.           int middle = (left + right) / 2;
  228.  
  229.           if (newSequence[middle] < temp)
  230.             left = middle + 1;
  231.           else
  232.             right = middle - 1;
  233.         } while (left < right + 1);
  234.  
  235.         for (j = i - 1; j + 1 > left; j--)
  236.           newSequence[j + 1] = newSequence[j];
  237.         newSequence[left] = temp;
  238.       }
  239.  
  240.       System.arraycopy(newSequence, 0, detailingMatrix[i], 0, size);
  241.     }
  242.  
  243.     return detailingMatrix;
  244.   }
  245.  
  246.   public static void outputDetailingMatrixInConsole(final int[][] detailingMatrix, final int size) {
  247.     System.out.println("Вывод пошаговой детализации: ");
  248.     for (int i = 0; i < size; i++)
  249.     {
  250.       for (int j = 0; j < size; j++)
  251.         System.out.print(detailingMatrix[i][j] + " ");
  252.       System.out.print("\n");
  253.     }
  254.     System.out.print("\n");
  255.   }
  256.   public static void outputDetailingMatrixInFile(String path, final int[][] detailingMatrix, final int size) {
  257.     boolean isIncorrect;
  258.  
  259.     System.out.println("Вывод пошаговой детализации в файл...");
  260.  
  261.     do {
  262.       isIncorrect = false;
  263.       try {
  264.         FileWriter writer = new FileWriter(path, true);
  265.         BufferedWriter bufferWriter = new BufferedWriter(writer);
  266.  
  267.         for (int i = 0; i < size; i++)
  268.         {
  269.           for (int j = 0; j < size; j++)
  270.             bufferWriter.write(detailingMatrix[i][j] + "\t");
  271.           bufferWriter.write("\n");
  272.         }
  273.         bufferWriter.write("\n");
  274.  
  275.         bufferWriter.close();
  276.         writer.close();
  277.       } catch (IOException e) {
  278.         isIncorrect = true;
  279.         System.out.println("Ошибка! Измените параметры файла или укажите новую ссылку!");
  280.         path = inputPathToFile();
  281.       }
  282.     } while (isIncorrect);
  283.  
  284.     System.out.println("Данные успешно записаны в файл!");
  285.   }
  286.  
  287.   public static int[] processUserInput() {
  288.     int size;
  289.     int[] sequence = new int[0];
  290.     int choiceForInput;
  291.     String pathToIn;
  292.  
  293.     System.out.println("Вы желаете ввести данные с консоли(0) или взять данные из файла(1)?");
  294.     choiceForInput = getVerificationOfChoice();
  295.  
  296.     if (choiceForInput == 0) {
  297.       size = readSizeFromConsole();
  298.       sequence = fillSequenceFromConsole(size);
  299.     }
  300.     if (choiceForInput == 1) {
  301.       pathToIn = inputPathToFile();
  302.       size = readSizeFromFile(pathToIn);
  303.       sequence = fillSequenceFromFile(size, pathToIn);
  304.     }
  305.  
  306.     return sequence;
  307.   }
  308.  
  309.   public static void processUserOutput(final int size, final int[] sequence, final int[][] detailingMatrix) {
  310.     int choiceForOutput;
  311.     String pathToOut;
  312.  
  313.     System.out.println("Вы желаете получить результат в консоли(0) или в файле(1)?");
  314.     choiceForOutput = getVerificationOfChoice();
  315.  
  316.     if (choiceForOutput == 0) {
  317.       outputSizeInConsole(size);
  318.       outputSequenceInConsole(sequence, size);
  319.       outputDetailingMatrixInConsole(detailingMatrix, size);
  320.     }
  321.     if (choiceForOutput == 1) {
  322.       pathToOut = inputPathToFile();
  323.       outputSizeInFile(size, pathToOut);
  324.       outputSequenceInFile(pathToOut, sequence, size);
  325.       outputDetailingMatrixInFile(pathToOut, detailingMatrix, size);
  326.     }
  327.   }
  328.  
  329.   public static void main (String[] args) {
  330.     outputTaskInfo();
  331.     int[] sequence = processUserInput();
  332.     int[][] detailingMatrix = BinaryInsertionSort(sequence.length, sequence);
  333.     processUserOutput(sequence.length, sequence, detailingMatrix);
  334.  
  335.     scan.close();
  336.   }
  337. }
  338.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement