Задачі ООП

  1. Два числа називаються дружніми, якщо кожне з них дорівнює сумі всіх дільників другого не рахуючи самого цього числа. Знайдіть всі пари дружніх чисел на відрізку [a; b].
  2. Відповідь:
    import static java.lang.Math.pow;
    import java.util.Scanner;
    
    public class TaskOop1 {
    
        Model m[];
        int a;
        int b;
    
        public TaskOop1(int a, int b) {
            this.a = a;
            this.b = b;
            int num = a;
            int sumDiv;
            boolean flag;
            int n = b - a + 1;
            m = new Model[n];
            for (int i = 0; i < n; i++) {
                flag = true;
                sumDiv = sumDiv(num);
                if (sumDiv == 1) {
                    flag = false;
                }
                m[i] = new Model(num, sumDiv, flag);
                num++;
            }
        }
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("Вкажіть границі проміжка [a;b]");
            System.out.print("a=");
            int a = sc.nextInt();
            System.out.print("b=");
            int b = sc.nextInt();
            TaskOop1 to1 = new TaskOop1(a, b);
            System.out.println("/////////////////////");
            to1.friendlyNumbers();
        }
    
        // Пошук дільників числа
    
        int sumDiv(int x) {
            int sum = 0;
            int c;
            int d;
            double y = pow(x, 0.5);
            int n = 1;
            while (n <= y) {
                c = x % n;
                d = x / n;
                if (c == 0) {
                    sum += n;
                    if (d != n) {
                        sum += d;
                    }
                }
                n++;
            }
            return sum - x;
        }
        //Пошук дружніх чисел
        public void friendlyNumbers() {
            for (int i = 0; i < m.length; i++) {
                if (m[i].isFlag() && (uslovie(m, i, a))) {
                    System.out.println("Пара: " + m[i].getSumDiv() + "; " + m[i].getNum());
    
                } else {
                    m[i].setFlag(false);
                }
            }
        }
        //Умова до методу пошуку
        public boolean uslovie(Model m[], int i, int a) {
            //Перевірка на попадання в проміжок 
            if ((m[i].getSumDiv() > m[m.length - 1].getNum()) || (m[i].getSumDiv() < m[0].getNum())) {
                return false;
            } else if (m[m[i].getSumDiv() - a].isFlag()) {  //перевірка на необхідність порівння            
                return false;
            } else if (m[i].getNum() == m[m[i].getSumDiv() - a].getSumDiv()) {
                return true;
            } else {
                return false;
            }
    
        }
    
    }
    
    Класс Model
    Відповідь:
    public class Model {
    
        int num;
        int sumDiv;
        boolean flag;
    
        public Model(int num, int div, boolean flag) {
            this.num = num;
            this.sumDiv = div;
            this.flag = flag;
        }
    
        public int getNum() {
            return num;
        }
    
        public int getSumDiv() {
            return sumDiv;
        }
    
        public boolean isFlag() {
            return flag;
        }
    
        public void setFlag(boolean flag) {
            this.flag = flag;
        }
    
    }
    

  3. Написати клас StudentsGrades, що містить приватний масив цілих чисел, в якому зберігаються оцінки групи студентів (оцінки можуть мати значення від 0 до 100). Клас повинен містити публічні методи для зчитування масиву (getter), присвоєння йому значення іншого масиву (setter) та додавання даних до нього (adder), а також методи, які повертають такі статистичні дані:
    • максимальна оцінка в групі
    • мінімальна оцінка в групі
    • середній бал групи
    • кількість студентів в яких бал вищий за середній
    • кількість студентів в яких бал нижчий за середній
    • кількість студентів з відмінною оцінкою
    • кількість студентів з оцінкою "добре"
    • кількість студентів з оцінкою "задовільно"
    • кількість студентів з оцінкою "не задовільно"
    • вивести всі оцінки (метод toString())
    Оцінки задаються від 0 до 100. "0-59" - незадовільно, "60-70" - задовільно, "71-90" - добре, "91-100" - відмінно.
    Написати клас-тестер із функцією main, в ході якої створюється об'єкт класу StudentsGrades, зчитуються з клавіатури оцінки студентів та друкуються усі вищеперераховані статистичні дані.
    Відповідь:
    Клас тестер.
    public class Test {
        public static void main(String[] args) {
            StudentsGrades studentsGrades=new StudentsGrades();
            studentsGrades.addGrades();
            System.out.println(studentsGrades.toString());
            studentsGrades.getInfo();
        }
    }
    
    Клас для считування даних
    Відповідь:
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    public class DataInput {
        public static Long getLong() throws IOException {
            String s = getString();
            Long value = Long.valueOf(s);
            return value;
        }
    
        public static char getChar() throws IOException {
            String s = getString();
            return s.charAt(0);
        }
    
        public static Integer getInt() {
            String s = "";
            try {
                s = getString();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Integer value = Integer.valueOf(s);
            return value;
    
        }
    
        public static String getString() throws IOException {
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader br = new BufferedReader(isr);
            String s = br.readLine();
            return s;
        }
    }
    
    
    Клас студент.
    Відповідь:
    import java.util.Arrays;
    
    public class StudentsGrades {
        private int[] grades;
        private int maxGrage = Integer.MIN_VALUE;
        private int minGrage = Integer.MAX_VALUE;
        private double averageGrade;
        private int countExelent;
        private int countGood;
        private int countNoBad;
        private int countBad;
        private int moreAverage;
        private int lessAverage;
    
        public StudentsGrades() {
            int size;
            do {
                System.out.print("Скільки студентів в групі? ->");
                size = DataInput.getInt();
                if (size <= 0) {
                    System.out.println("Кількість студентів повинна бути більше 0!");
                }
            }
            while (size <= 0);
            grades = new int[size];
        }
    
        public void setGrades(int[] grades) {
            this.grades = grades;
        }
    
        public void addGrades() {
            int grade;
            for (int i = 0; i < grades.length; i++) {
                do {
                    System.out.print("Балл " + (i + 1) + ": ");
                    grade = DataInput.getInt();
                } while ((grade < 0) || (grade > 100));
                grades[i] = grade;
                gradeValue(grade);
                gradeMinMax(grade);
                averageGrade += grade;
            }
            averageGrade /= grades.length;
            countMoreLeseAverage();
        }
    
        private void countMoreLeseAverage() {
            for (int i = 0; i < grades.length; i++) {
                if (grades[i] < averageGrade) {
                    lessAverage++;
                } else {
                    moreAverage++;
                }
            }
        }
    
        private void gradeMinMax(int grade) {
            if (grade > maxGrage) {
                maxGrage = grade;
            }
            if (grade < minGrage) {
                minGrage = grade;
            }
        }
    
        private void gradeValue(int grade) {
            if (grade <= 59) {
                countBad++;
            } else if (grade <= 70) {
                countNoBad++;
            } else if (grade <= 90) {
                countGood++;
            } else {
                countExelent++;
            }
        }
    
        public void getInfo() {
            System.out.println("Максимальний бал: " + maxGrage);
            System.out.println("Мінімальний бал: " + minGrage);
            System.out.println("Середній бал: " + averageGrade);
            System.out.println("Кількість студентів в яких бал вищий за середній: " + moreAverage);
            System.out.println("Кількість студентів в яких бал нищий за середній: " + lessAverage);
            System.out.println("Кількість студентів з оцінкою \"відмінною\": " + countExelent);
            System.out.println("Кількість студентів з оцінкою \"добре\": " + countGood);
            System.out.println("Кількість студентів з оцінкою \"задовільно\": " + countNoBad);
            System.out.println("Кількість студентів з оцінкою \"не задовільно\": " + countBad);
        }
    
        @Override
        public String toString() {
            return "Оцінки: " + Arrays.toString(grades);
        }
    }
    
  4. Створіть клас з ім'ям Student, що містить поля: прізвище та ініціали, номер групи, успішність (масив з п'яти елементів). Створити масив з елементів такого типу, впорядкувати записи за зростанням середнього бала. Додати можливість виведення прізвищ і номерів груп студентів, які мають оцінки, рівні тільки 4 або 5.
  5. Відповідь:
    import java.util.Arrays;
    
    public class Dispatcher {
        public static void main(String[] args) {
            // створюємо масив студентів
            Student[] students = new Student[]{
                    new Student("Іванов", "В.М.", "23", new int[]{4, 5, 5, 4, 5}),
                    new Student("Петров", "І.Р.", "23", new int[]{2, 4, 3, 4, 5}),
                    new Student("Сидоров", "У.П.", "23", new int[]{5, 4, 4, 5, 5}),
                    new Student("Карпов", "И.Ф.", "23", new int[]{5, 2, 4, 4, 2}),
            };
            // сортуємо за середнім балом та виводимо відсортований масив
            Arrays.sort(students);
            System.out.println();
            for (int i = 0; i < students.length; i++) {
                System.out.println(students[i].toString());
            }
            System.out.println();
            // виводимо інформацію про студентів в яких оцінки 4 та 5
            display(students);
        }
    
        private static void display(Student[] students) {
            for (int i = 0; i < students.length; i++) {
                if (isFourOrFive(students[i])) {
                    students[i].getInfo();
                }
            }
        }
    
        // перевірка на наявність оцінок студента тільки 4 і 5
        private static boolean isFourOrFive(Student student) {
            boolean flag = true;
            for (int i = 0; i < student.getAcPerf().length; i++) {
                if (student.getAcPerf()[i] != 4 && student.getAcPerf()[i] != 5) {
                    flag = false;
                    break;
                }
            }
            return flag;
        }
    }
    
    Клас Student.
    Відповідь:
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Student implements Comparable {
        private Scanner sc = new Scanner(System.in);
        private String firstName;
        private String initials;
        private String numberGroup;
        private int[] acPerf = new int[5];
        private Double average;
    
        public Student(String firstName, String initials, String numberGroup, int[] acPerf) {
            this.firstName = firstName;
            this.initials = initials;
            this.numberGroup = numberGroup;
            this.acPerf = acPerf;
            this.average = averege();
        }
    
        // конструктор на довільну кількість студентів
        public Student() {
            System.out.print("Прізвище ->");
            this.firstName = sc.next();
            System.out.print("Ініціали ->");
            this.initials = sc.next();
            System.out.print("Група ->");
            this.numberGroup = sc.next();
            for (int i = 0; i < acPerf.length; i++) {
                System.out.print(i + 1 + " бал ->");
                this.acPerf[i] = sc.nextInt();
            }
            this.average = averege();
    
        }
    
        public int[] getAcPerf() {
            return acPerf;
        }
    
        // розрахунок середнього балу
        private double averege() {
            double sum = 0;
            for (int i = 0; i < acPerf.length; i++) {
                sum += acPerf[i];
            }
            return sum / acPerf.length;
        }
    
        // інформація про призвище студента та номер групи
        public void getInfo() {
            System.out.print("Прізвище: " + firstName + ". № групи: " + numberGroup);
        }
    
        @Override
        public String toString() {
            return "Студент: " + firstName +
                    " " + initials +
                    "; Група: " + numberGroup +
                    "; Бали: " + Arrays.toString(acPerf) +
                    "; Середнє: " + average;
        }
    
        // для сортування за середнім балом
        @Override
        public int compareTo(Student student) {
            return this.average.compareTo(student.average);
        }
    
    }
    

  6. Створити клас для зберігання комплексних чисел. Реалізувати операції над комплексними числами: додавання, віднімання, множення, ділення, спряження, піднесення до ступіня, добування квадратного кореня.
  7. Відповідь:
    Клас тестер:
    public class Controller {
        public static void main(String[] args) {
            ComplexNumber z1 = new ComplexNumber(3, -4);
            ComplexNumber z2 = new ComplexNumber(0.0, 5);
            ComplexOperations co = new ComplexOperations();
            System.out.println(co.add(z1, z2));
            System.out.println(co.dif(z1, z2));
            System.out.println(co.mult(z1, z2));
            System.out.println(co.div(z1,z2));
            System.out.println(co.conjugate(z1));
            System.out.println(co.scrt(z1));
            System.out.println(co.pow(co.scrt(z1), 2));
        }
    }
    
    Клас комплексних чисел:
    Відповідь:
    public class ComplexNumber {
        private double real;
        private double imaginary;
        private String sReal;
        private String sImaginary;
    
        public ComplexNumber(double real, double imaginary) {
            this.real = real;
            this.imaginary = imaginary;
            sReal = String.format("%.2f", real);
            sImaginary = String.format("%.2f", imaginary);
        }
    
        public ComplexNumber(double real) {
            this(real, 0.0);
        }
    
        public ComplexNumber() {
            this(0.0);
        }
    
        @Override
        public String toString() {
            if (sReal == "NaN" || sImaginary == "NaN") {
                return "NaN";
            }
            if (Double.isInfinite(real) || Double.isInfinite(imaginary)) {
                return "Infinity";
            }
    
            if (imaginary == 0) {
                return "" + sReal;
            }
            if (real == 0) {
                return "" + sImaginary + "i";
            }
            if (imaginary > 0) {
                return sReal + "+" + sImaginary + "i";
            } else {
                return sReal + "" + sImaginary + "i";
            }
    
        }
    
        public void setReal(double real) {
            this.real = real;
            if (Double.isNaN(real)) {
                sReal = "NaN";
            } else {
                sReal = String.format("%.2f", real);
            }
        }
    
        public void setImaginary(double imaginary) {
            this.imaginary = imaginary;
            if (Double.isNaN(imaginary)) {
                sImaginary = "NaN";
            } else {
                sImaginary = String.format("%.2f", imaginary);
            }
        }
    
        public double getImaginary() {
            return imaginary;
        }
    
        public double getReal() {
            return real;
        }
    }
    

    Клас операцій над комплексними числами:
    Відповідь:
    import static java.lang.Math.signum;
    import static java.lang.Math.sqrt;
    
    public class ComplexOperations {
        private ComplexNumber z = new ComplexNumber();
    
        public ComplexNumber add(ComplexNumber z1, ComplexNumber z2) {
            z.setReal(z1.getReal() + z2.getReal());
            z.setImaginary(z1.getImaginary() + z2.getImaginary());
            return this.z;
        }
    
        public ComplexNumber dif(ComplexNumber z1, ComplexNumber z2) {
            this.z.setReal(z1.getReal() - z2.getReal());
            this.z.setImaginary(z1.getImaginary() - z2.getImaginary());
            return this.z;
        }
    
        public ComplexNumber mult(ComplexNumber z1, ComplexNumber z2) {
            double a = z1.getReal();
            double c = z2.getReal();
            double b = z1.getImaginary();
            double d = z2.getImaginary();
            this.z.setReal(a * c - b * d);
            this.z.setImaginary(b * c + a * d);
            return this.z;
        }
    
        public ComplexNumber div(ComplexNumber z1, ComplexNumber z2) {
            double a = z1.getReal();
            double c = z2.getReal();
            double b = z1.getImaginary();
            double d = z2.getImaginary();
            this.z.setReal((a * c + b * d) / (c * c + d * d));
            this.z.setImaginary((b * c - a * d) / (c * c + d * d));
            return this.z;
        }
    
        public ComplexNumber conjugate(ComplexNumber z) {
            this.z.setReal(z.getReal());
            this.z.setImaginary(-z.getImaginary());
            return this.z;
        }
    
        public ComplexNumber pow(ComplexNumber z, int pow) {
            this.z = z;
            for (int i = 1; i < pow; i++) {
                mult(this.z, z);
            }
            return this.z;
        }
    
        public ComplexNumber scrt(ComplexNumber z) {
            double a = z.getReal();
            double b = z.getImaginary();
            this.z.setReal(sqrt((a + sqrt(a * a + b * b)) / 2));
            this.z.setImaginary(signum(b) * sqrt((-a + sqrt(a * a + b * b)) / 2));
            return this.z;
        }
    }
    
    
    

  8. Створіть клас з ім'ям Train, що містить поля: назва пункту призначення, номер поїзда, час відправлення. Ввести дані в масив з п'яти елементів типу Ttrain, впорядкувати елементи за номерами поїздів. Додати можливість виведення інформації про потяг, номер якого введено користувачем. Додати можливість сортування масив по пункту призначення, причому поїзда з однаковими пунктами призначення повинні бути впорядковані за часом відправлення.
  9. Відповідь:
    Клас тестер.
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Controller {
        public static void main(String[] args) {
            Train[] trains = new Train[5];
            trains[0] = new Train("Дніпро", 32, "25.02.2018 15:24");
            trains[1] = new Train("Льві", 47, "26.02.2018 18:24");
            trains[2] = new Train("Дніпро", 92, "25.03.2018 20:04");
            trains[3] = new Train("Одеса", 100, "25.02.2018 17:25");
            trains[4] = new Train("Харків", 15, "20.04.2018 15:19");
            getInfoTrain(trains);
            Arrays.sort(trains, new TrainNumberComparator());
            for (Train train : trains
                    ) {
                System.out.println(train.toString());
            }
            Arrays.sort(trains, new TrainPunktComparator());
            System.out.println();
            for (Train train : trains
                    ) {
                System.out.println(train.toString());
            }
        }
    
        private static void getInfoTrain(Train[] trains) {
            System.out.println("Інформацію про який поїзд бажаєте отримати?");
            System.out.print("№№: ");
            for (int i = 0; i < trains.length - 1; i++) {
                System.out.print(trains[i].getNumber() + ", ");
            }
            System.out.println(trains[trains.length - 1].getNumber() + ".");
            Scanner scanner = new Scanner(System.in);
            System.out.print("->");
            int number = scanner.nextInt();
            for (int i = 0; i < trains.length; i++) {
                if (number == trains[i].getNumber()) {
                    trains[i].getInfo();
                    return;
                }
            }
            System.out.println("Поїзда з таким омером не існує!");
        }
    }
    
    Клас Train.
    Відповідь:
    import java.time.LocalDateTime;
    import java.time.format.DateTimeFormatter;
    
    public class Train {
        private String punkt;
        private int number;
        private LocalDateTime time;
    
        public LocalDateTime getTime() {
            return time;
        }
    
        public String getPunkt() {
            return punkt;
        }
    
        public int getNumber() {
            return number;
        }
    
        public Train(String punkt, int number, String date) {
            this.punkt = punkt;
            this.number = number;
            this.time = stringTime(date);
        }
    
        public void getInfo() {
            System.out.println("Пункт призначення: " + punkt);
            System.out.println("Дата відправлення: " + time());
        }
    
        private LocalDateTime stringTime(String date) {
            String pattern = "d'.'M'.'y HH':'mm";
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
            return LocalDateTime.parse(date, formatter);
        }
    
        private String time() {
            String pattern = "dd'.'MM'.'yyyy HH':'mm";
            DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
            return time.format(formatter);
        }
    
        @Override
        public String toString() {
            return "Пункт призначення '" + punkt + '\'' +
                    ", №" + number +
                    ", час відправлення=" + time();
        }
    }
    
    Клас компаратори за номером та пунктом призначення.
    Відповідь:
    import java.util.Comparator;
    
    public class TrainNumberComparator implements Comparator {
        @Override
        public int compare(Train train1, Train train2) {
            return train1.getNumber()-train2.getNumber();
        }
    }
    
    
    import java.util.Comparator;
    
    public class TrainPunktComparator implements Comparator {
        @Override
        public int compare(Train train1, Train train2) {
            if (train1.getPunkt().compareToIgnoreCase(train2.getPunkt()) == 0) {
                return train1.getTime().compareTo(train2.getTime());
            } else {
                return train1.getPunkt().compareToIgnoreCase(train2.getPunkt());
            }
        }
    }
    
  10. Створити клас з двома змінними. Додати функцію виведення на екран і функцію зміни цих змінних. Додати функцію, яка знаходить суму значень цих змінних, і функцію яка знаходить найбільше значення з цих двох змінних.
  11. Відповідь:
    Клас тестер.
    
    public class Controller {
        public static void main(String[] args) {
            TwoNumbers twoNumbers = new TwoNumbers(2, 8);
            System.out.println("x1 = " + twoNumbers.getX1() + ", x2 = " + twoNumbers.getX2());
            System.out.println("Сума = " + twoNumbers.sum());
            twoNumbers.max();
            twoNumbers.setX1(8);
            twoNumbers.max();
            twoNumbers.setX2(4);
            twoNumbers.max();
            System.out.println("x1 = " + twoNumbers.getX1() + ", x2 = " + twoNumbers.getX2());
        }
    }
    
    Клас 2 чисел.
    Відповідь:
    public class TwoNumbers {
        private int x1;
        private int x2;
    
        public TwoNumbers(int x1, int x2) {
            this.x1 = x1;
            this.x2 = x2;
        }
    
        public int getX1() {
            return x1;
        }
    
        public void setX1(int x1) {
            this.x1 = x1;
        }
    
        public int getX2() {
            return x2;
        }
    
        public void setX2(int x2) {
            this.x2 = x2;
        }
    
        public int sum() {
            return x1 + x2;
        }
    
        public void max() {
            if (x1 > x2) {
                System.out.println("Перша змінна більша і = " + x1);
            } else if (x1 < x2) {
                System.out.println("Друга змінна більша і = " + x2);
            } else {
                System.out.println("Змінні однакові і = " + x1);
            }
        }
    }
    
  12. Описати клас, який реалізує десятковий лічильник, який може збільшувати або зменшувати своє значення на одиницю в заданому діапазоні. Передбачити ініціалізацію лічильника значеннями за замовчуванням і довільними значеннями. Лічильник має два методи: збільшення і зменшення, - і властивість, що дозволяє отримати його поточний стан. Написати програму, яка демонструвала б всі можливості класу.
  13. Відповідь:
    public class Counter {
        private int max;
        private int min;
        private int count;
    
        public Counter(int count, int min, int max) {
            this.count = count;
            this.min = min;
            this.max = max;
        }
    
        public Counter() {
            this(0, 0, 10);
        }
    
        public void setMax(int max) {
            this.max = max;
        }
    
        public void setMin(int min) {
            this.min = min;
        }
    
        public void setCount(int count) {
            this.count = count;
        }
    
        public void up() {
            count++;
        }
    
        public void down() {
            count--;
        }
    }
    
  14. Скласти опис класу для вектора, заданого координатами його кінців в тривимірному просторі. Забезпечити операції додавання і віднімання векторів з отриманням нового вектора (суми або різниці), обчислення скалярного добутку двох векторів, довжини вектора, косинуса кута між векторами.
  15. Відповідь:
    Клас тестер
    
    public class Controller {
        public static void main(String[] args) {
            VectorOperation vo = new VectorOperation();
            Vector a = new Vector(1, 1, 1);
            Vector b = new Vector(1, 0, 0);
            System.out.println("Сума векторів с = " + vo.addVector(a, b).toString());
            System.out.println("Різниця векторів с = " + vo.difVector(a, b).toString());
            System.out.println("Косінус кута між векторами " + vo.getCosAlhfa(a, b));
            System.out.println("Модуль вектора |a| = " + a.getModul());
        }
    }
    
    Клас вектор
    Відповідь:
    import static java.lang.Math.sqrt;
    
    public class Vector {
        private double x;
        private double y;
        private double z;
        private double modul;
    
        @Override
        public String toString() {
            return "(" + x +
                    "; " + y +
                    "; " + z +
                    ")";
        }
    
        public Vector(double x, double y, double z) {
            this.x = x;
            this.y = y;
            this.z = z;
            setModul();
        }
    
        public Vector() {
            this(0, 0, 0);
        }
    
        private void setModul() {
            modul = sqrt(x * x + y * y + z * z);
        }
    
        public double getX() {
            return x;
        }
    
        public double getY() {
            return y;
        }
    
        public double getZ() {
            return z;
        }
    
        public double getModul() {
            return modul;
        }
    
        public void setX(double x) {
            this.x = x;
        }
    
        public void setY(double y) {
            this.y = y;
        }
    
        public void setZ(double z) {
            this.z = z;
        }
    }
    
    Клас векторних операцій
    Відповідь:
    import static java.lang.Math.cos;
    import static java.lang.Math.toRadians;
    
    public class VectorOperation {
        private Vector vector = new Vector();
    
        public Vector addVector(Vector a, Vector b) {
            vector.setX(a.getX() + b.getX());
            vector.setY(a.getY() + b.getY());
            vector.setZ(a.getZ() + b.getZ());
            return vector;
        }
    
        public Vector difVector(Vector a, Vector b) {
            vector.setX(a.getX() - b.getX());
            vector.setY(a.getY() - b.getY());
            vector.setZ(a.getZ() - b.getZ());
            return vector;
        }
    
        public double scalar(Vector a, Vector b, double alhfa) {
            return a.getModul() * b.getModul() * cos(toRadians(alhfa));
        }
    
        public double getCosAlhfa(Vector a, Vector b) {
            double temp = a.getX() * b.getX() + a.getY() * b.getY() + a.getZ() * b.getZ();
            return temp / a.getModul() / b.getModul();
        }
    }
    
    
    
  16. Описати клас, що представляє трикутник. Передбачити методи для створення об'єктів, обчислення площі, периметра і точки перетину медіан. Описати властивості для отримання стану об'єкта.
  17. Відповідь:
    public class Controller {
        public static void main(String[] args) {
            Triangle triangle = new Triangle(new Point(1, -4), new Point(4, 6), new Point(4, 7));
            System.out.printf("P=%.2f%n", triangle.perimetr());
            System.out.printf("S=%.2f%n", triangle.sqare());
            System.out.println("O" + triangle.getCoordinate().toString());
        }
    }
    
    Клас трикутник
    Відповідь:
    import static java.lang.Math.pow;
    import static java.lang.Math.sqrt;
    
    public class Triangle {
        private Point A;
        private Point B;
        private Point C;
        private double a;
        private double b;
        private double c;
        private Point M;
    
        public Triangle(Point A, Point B, Point C) {
            this.A = A;
            this.B = B;
            this.C = C;
            this.a = length(B, C);
            this.b = length(A, C);
            this.c = length(A, B);
            this.M = setCoordinate();
    
        }
    
        private double length(Point A, Point B) {
            return sqrt(pow(B.getX() - A.getX(), 2) + pow(B.getY() - A.getY(), 2));
        }
    
        public double perimetr() {
            return a + b + c;
        }
    
        public double sqare() {
            double p = perimetr() / 2;
            return sqrt(p * (p - a) * (p - b) * (p - c));
        }
    
        private Point setCoordinate() {
            Point M = new Point();
            M.setX(0.3 * (A.getX() + B.getX() + C.getX()));
            M.setY(0.3 * (A.getY() + B.getY() + C.getY()));
            return M;
        }
    
        public Point getCoordinate() {
            return M;
        }
    
    }
    
    Клас точка
    Відповідь:
    public class Point {
        private double x;
        private double y;
    
        public Point(double x, double y) {
            this.x = x;
            this.y = y;
        }
    
        public Point(double x) {
            this(x, x);
        }
    
        public Point() {
            this(0);
        }
    
        public double getX() {
            return x;
        }
    
        public void setX(double x) {
            this.x = x;
        }
    
        public double getY() {
            return y;
        }
    
        public void setY(double y) {
            this.y = y;
        }
    
        @Override
        public String toString() {
    
            return String.format("(%.2f; %.2f)", x, y);
        }
    }
    
  18. Створити інтерфейс Figure з методами обчислення площі та периметра, а також методом, що виводить інформацію про фігуру на екран. Створити похідні класи: Rectangle (прямокутник), Circle (коло), Triangle (трикутник) зі своїми методами обчислення площі і періметра. Створити масив n фігур і вивести повну інформацію про фігури на екран.
  19. Відповідь:
    public class Tester {
        public static void main(String[] args) {
            Figure[] figure = new Figure[5];
            figure[0] = new Rectangle(2, 3);
            figure[1] = new Circle(5);
            figure[2] = new Triangle(3, 4, 5);
            figure[3] = new Circle(10);
            figure[4] = new Rectangle(4, 6);
            for (Figure f : figure
                    ) {
                f.info();
            }
        }
    }
    
    Інтерфейс фигура
    Відповідь:
    interface Figure {
    
        double square();
    
        double perimeter();
    
        void info();
    
    }
    
    Клас прямокутник
    Відповідь:
    public class Rectangle implements Figure {
        private double a;
        private double b;
    
        public Rectangle(double a, double b) {
            if (a > 0)
                this.a = a;
            if (b > 0)
                this.b = b;
        }
    
        @Override
        public double square() {
            return a * b;
        }
    
        @Override
        public double perimeter() {
            return 2 * (a + b);
        }
    
        @Override
        public void info() {
            System.out.printf("Я прямокутник зі сторонами a = %.2f, b = %.2f%n", a, b);
            System.out.printf("S = %.2f, P = %.2f%n%n", square(), perimeter());
        }
    }
    
    Клас коло
    Відповідь:
    import static java.lang.Math.PI;
    
    public class Circle implements Figure {
        private double r;
    
        public Circle(double r) {
            if (r > 0)
                this.r = r;
        }
    
        @Override
        public double square() {
            return PI * r * r;
        }
    
        @Override
        public double perimeter() {
            return 2 * PI * r;
        }
    
        @Override
        public void info() {
            System.out.printf("Я коло з R = %.2f%n", r);
            System.out.printf("S = %.2f, C = %.2f%n%n", square(), perimeter());
        }
    }
    
    Клас трикутник
    Відповідь:
    import static java.lang.Math.sqrt;
    
    public class Triangle implements Figure {
        private double a;
        private double b;
        private double c;
    
        public Triangle(double a, double b, double c) {
            this.a = a;
            this.b = b;
            this.c = c;
        }
    
        @Override
        public double square() {
            double p = perimeter() / 2;
            return sqrt(p * (p - a) * (p - b) * (p - c));
        }
    
        @Override
        public double perimeter() {
            return a + b + c;
        }
    
        @Override
        public void info() {
            System.out.printf("Я трикутник зі сторонами a = %.2f, b = %.2f, с = %.2f%n", a, b, c);
            System.out.printf("S = %.2f, P = %.2f%n%n", square(), perimeter());
        }
    }
    
    
    
  20. Клас Покупець: Прізвище, Ім'я, По батькові, Адреса, Номер кредитної картки, Номер банківського рахунку; конструктор; Методи: установки значень атрибутів, отримання значень атрибутів, вивід інформації. Створити масив об'єктів даного класу. Вивести список покупців в алфавітному порядку і список покупців, у яких номер кредитної картки знаходиться в заданому діапазоні.
  21. Відповідь:
  22. Створити класс Emploee. клас повинен містити поле типу int для збереження номеру працівника і поле типу double для збереження його заробітної плати. Розробити класс, який дозволить ввести кількість працівників та відобразити інформацію про них. Написати класс який продемонструє дані можливості.

Комментариев нет:

Отправить комментарий