Advertisement
gguuppyy

лаб42

Mar 24th, 2024
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.50 KB | Source Code | 0 0
  1. import java.io.*;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.IOException;
  6. import java.util.Scanner;
  7. class Main {
  8.     public static Scanner scan = new Scanner(System.in);
  9.  
  10.     public static void outputCondition() {
  11.         System.out.println("Программа выполняет рекурсивную процедуру\n" +
  12.                 "сортировки последовательности методом быстрой сортировки (Хоара).");
  13.     }
  14.  
  15.     public static void outputInputChoice() {
  16.         System.out.println("Введите 0, если хотите ввести данные из консоли, и 1, если из файла:");
  17.     }
  18.  
  19.     public static boolean isUserChoice() {
  20.         final int MIN = 0;
  21.         final int MAX = 1;
  22.         int k = 0;
  23.         boolean isIncorrect;
  24.         boolean isChoice;
  25.         do {
  26.             isIncorrect = false;
  27.             try {
  28.                 k = Integer.parseInt(scan.nextLine());
  29.             } catch (Exception e) {
  30.                 System.out.println("Введены некорректные данные. Повторите ввод:");
  31.                 isIncorrect = true;
  32.             }
  33.             if ((!isIncorrect) && ((k < MIN) || (k > MAX))) {
  34.                 System.out.println("Число не входит в допустимый диапазон. Повторите  ввод:");
  35.                 isIncorrect = true;
  36.             }
  37.         } while (isIncorrect);
  38.  
  39.         isChoice = !(k == MIN);
  40.         return isChoice;
  41.     }
  42.  
  43.     public static void outputPathInputCondition() {
  44.         System.out.println("Введите путь к файлу, содержащему последовательность:");
  45.     }
  46.  
  47.     public static boolean isFileCorrect(String path) {
  48.         boolean isIncorrect = false;
  49.         File f = new File(path);
  50.         if (!f.exists()) {
  51.             isIncorrect = true;
  52.             System.out.print("Файл по заданному пути отсутствует. ");
  53.         }
  54.         else if (!path.endsWith(".txt")) {
  55.             isIncorrect = true;
  56.             System.out.print("Недопустимое расширение файла. ");
  57.         }
  58.         return isIncorrect;
  59.     }
  60.     public static void outputSuccessfulInput() {
  61.         System.out.println("Данные из файла считаны успешно.");
  62.     }
  63.  
  64.     public static int inputNumberFromConsole() {
  65.         final int MIN = 1;
  66.         int n = 0;
  67.         boolean isIncorrect;
  68.         do {
  69.             isIncorrect = false;
  70.             try {
  71.                 n = Integer.parseInt(scan.nextLine());
  72.             } catch (Exception e) {
  73.                 System.out.println("Введены некорректные данные. Повторите ввод:");
  74.                 isIncorrect = true;
  75.             }
  76.             if ((!isIncorrect) && (n < MIN)) {
  77.                 System.out.println("Введено недопустимое число элементов. Повторите ввод:");
  78.                 isIncorrect = true;
  79.             }
  80.         } while (isIncorrect);
  81.         return n;
  82.     }
  83.  
  84.     public static int[] inputVectorFromFile() {
  85.         String path, s;
  86.         int n = 0;
  87.         int i, j;
  88.         int[] arr = null;
  89.         boolean isIncorrect;
  90.         final int MIN_VALUE = 1;
  91.  
  92.         do {
  93.             outputPathInputCondition();
  94.             isIncorrect = false;
  95.             path = TakePath();
  96.             Scanner scan = null;
  97.             try {
  98.                 scan = new Scanner(new File(path));
  99.             } catch (FileNotFoundException e) {
  100.                 System.out.println(e.getMessage());
  101.                 isIncorrect = true;
  102.             }
  103.  
  104.             if (!isIncorrect) {
  105.                 try (BufferedReader fReader = new BufferedReader(new FileReader(path))) {
  106.                     s = fReader.readLine();
  107.                     n = Integer.parseInt(s);
  108.  
  109.                     if (n < MIN_VALUE) {
  110.                         isIncorrect = true;
  111.                         System.err.println("Размер последовательности должен быть больше 0. Исправьте файл и нажмите Enter.");
  112.                     } else {
  113.                         arr = new int[n];
  114.  
  115.                         String[] integersInString = fReader.readLine().split(" ");
  116.                         for (i = 0; i < n; i++) {
  117.                             arr[i] = Integer.parseInt(integersInString[i]);
  118.                         }
  119.                     }
  120.                 } catch (IOException e) {
  121.                     isIncorrect = true;
  122.                     System.err.println("Ошибка при чтении файла! Исправьте файл и нажмите Enter.");
  123.                 }
  124.             }
  125.             if (isIncorrect) {
  126.                 scan.nextLine();
  127.             }
  128.         } while (isIncorrect);
  129.         return arr;
  130.     }
  131.     public static int[] inputVectorFromConsole(int n) {
  132.         final int NUM_MIN = 1;
  133.         int i, j;
  134.         int[] a = new int[n];
  135.         boolean isIncorrect;
  136.         System.out.println("Введите элементы последовательности.");
  137.         for (i = 0; i < a.length; i++) {
  138.             do {
  139.                 isIncorrect = false;
  140.                 try {
  141.                     a[i] = Integer.parseInt(scan.nextLine());
  142.                 }
  143.                 catch (Exception e) {
  144.                     System.out.println("Введены некорректные данные. Повторите ввод:");
  145.                     isIncorrect = true;
  146.                 }
  147.             } while (isIncorrect);
  148.         }
  149.         return a;
  150.     }
  151.  
  152.     public static int[] inputVector(boolean isInput) {
  153.         int n;
  154.         int[] a;
  155.         if (isInput) {
  156.             a = inputVectorFromFile();
  157.             outputSuccessfulInput();
  158.         }
  159.         else {
  160.             System.out.println("Введите количество элементов последовательности.");
  161.             n = inputNumberFromConsole();
  162.             a = inputVectorFromConsole(n);
  163.         }
  164.         return a;
  165.     }
  166.  
  167.     public static void quickSort(int[] arr, int low, int high) {
  168.         int i = low;
  169.         int j = high;
  170.         int pivot = arr[(low + high) / 2];
  171.  
  172.         while (i <= j) {
  173.             while (arr[i] < pivot) {
  174.                 i++;
  175.             }
  176.             while (arr[j] > pivot) {
  177.                 j--;
  178.             }
  179.             if (i <= j) {
  180.                 int temp = arr[i];
  181.                 arr[i] = arr[j];
  182.                 arr[j] = temp;
  183.                 i++;
  184.                 j--;
  185.             }
  186.         }
  187.  
  188.         if (low < j) {
  189.             quickSort(arr, low, j);
  190.         }
  191.         if (i < high) {
  192.             quickSort(arr, i, high);
  193.         }
  194.     }
  195.     public static void outputOutputChoice() {
  196.         System.out.println("Введите 0, если хотите вывести данные в консоль, и 1 - в файл:");
  197.     }
  198.  
  199.     public static void outputPathOutputCondition() {
  200.         System.out.println("Введите путь к файлу, в который вы хотите вывести результат: ");
  201.     }
  202.  
  203.     public static String TakePath() {
  204.         String path;
  205.         boolean isIncorrect;
  206.         do {
  207.             isIncorrect = false;
  208.             path = scan.nextLine();
  209.             isIncorrect = isFileCorrect(path);
  210.             if (isIncorrect) {
  211.                 System.out.println("Повторите ввод пути к файлу:");
  212.             }
  213.         } while (isIncorrect);
  214.         return path;
  215.     }
  216.  
  217.     public static void outputInFile(int [] arr) {
  218.         String path;
  219.         boolean isIncorrect;
  220.         int i, j;
  221.         do {
  222.             isIncorrect = false;
  223.             path = TakePath();
  224.             try (PrintWriter fileWriter = new PrintWriter(new FileWriter(path,          false))) {
  225.                 fileWriter.println("Отсортированная последовательность:");
  226.                 for (i = 0; i < arr.length; i++){
  227.                     fileWriter.print(arr[i] + " ");
  228.                 }
  229.                 fileWriter.println();
  230.             } catch (IOException e) {
  231.                 System.out.print(e.getMessage());
  232.                 isIncorrect = true;
  233.             }
  234.         } while (isIncorrect);
  235.     }
  236.  
  237.     public static void outputSuccessfulOutput() {
  238.         System.out.println("Данные записаны в файл успешно.");
  239.     }
  240.  
  241.     public static void outputInConsole(int [] arr) {
  242.         int i, j;
  243.         System.out.println("Отсортированная последовательность:");
  244.         for (i = 0; i < arr.length; i++) {
  245.             System.out.print(arr[i] + " ");
  246.         }
  247.     }
  248.     public static void outputFinalArr(boolean isOutput, int [] arr) {
  249.         if (isOutput) {
  250.             outputPathOutputCondition();
  251.             outputInFile(arr);
  252.             outputSuccessfulOutput();
  253.         }
  254.         else {
  255.             outputInConsole(arr);
  256.         }
  257.     }
  258.  
  259.     public static void main(String[] args) {
  260.         int [] arr;
  261.         boolean isInput;
  262.         boolean isOutput;
  263.         outputCondition();
  264.         outputInputChoice();
  265.         isInput = isUserChoice();
  266.         arr = inputVector(isInput);
  267.         quickSort(arr, 0, arr.length-1);
  268.         outputOutputChoice();
  269.         isOutput = isUserChoice();
  270.         outputFinalArr(isOutput, arr);
  271.         scan.close();
  272.     }
  273. }
  274.  
  275.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement