Задачи с решениями для самостоятельного изучения

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Класс Math
Задание (Сигнум):
В переменной n лежит некоторое вещественное число. Вычислить и вывести на экран значение функции «сигнум» от этого числа (-1, если число отрицательное; 0, если нулевое; 1 если, положительное).
Java:
public class signum {
    public static void main(String[] args) {
        double a,b;
        int k;
        a = 0.1;
        b = Math.round(Math.abs(a)/(a+0.00000000000000000001));
        k = (int)b;
        System.out.println(k);
    }
}
или
Java:
public class signum {
public static void main(String[] args) {
  double a,b,c,s,i;
  int k;
  a = 0.1;
  b = Math.ceil(Math.abs(a)/(a+1));
  k = (int)b;
  System.out.println(k);
}
}

Задание (Площадь и Периметр):
В переменных a и b лежат положительные длины катетов прямоугольного треугольника. Вычислить и вывести на экран площадь треугольника и его периметр.
Java:
public class kateti {
public static void main(String[] args) {
  double a,b,c,s,p;
  a = 3;
  b = 4;
  c = Math.sqrt(a*a+b*b);
  s = (a*b)/2;
  p = c+a+b;
  System.out.println(s+"\n"+p);
}
}

Задание (Количество цифр):
Натуральное положительное число записано в переменную n. Определить и вывести на экран, сколько цифр в числе n.
Java:
public class sifri {
public static void main(String[] args) {
  double n;
  int a;
  n = 4;
  a = (int)(Math.ceil(Math.log10(n)+0.000000000000001));
  System.out.println(a);
}
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Math.random
1. Задание
Создайте программу, которая будет генерировать и выводить на экран вещественное псевдослучайное число из промежутка [-3;3).
Java:
public class one {
 public static void main(String[] args) {
  double c;
  c = Math.random()*6-3;// - [-3;3)
  System.out.println(c);
 }
}

2. Задание
Натуральное положительное число записано в переменную n. Создайте программу, которая будет генерировать и выводить на экран целое псевдослучайное число из отрезка [-n;n].
Java:
public class two {
 public static void main(String[] args) {
  int n,c;
  n = 10;
  c = (int)(Math.random()*(2*n+1))-n;
  System.out.println(c);
 }
}

3. Задание
В переменные a и b записаны целые числа, при этом b больше a. Создайте программу, которая будет генерировать и выводить на экран целое псевдослучайное число из отрезка [a;b].
Java:
public class three {
 public static void main(String[] args) {
  double c;
  int a,b,s;
  a = 3;
  b = 10;
  s = b-a+1;
  c = (int)(Math.random()*s)+a;
  System.out.println(c);
 }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Оператор сравнения if else
1. Задание
Создать программу, проверяющую и сообщающую на экран, является ли целое число записанное в переменную n, чётным либо нечётным.
Java:
public class one {
 public static void main(String[] args) {
  int n;
  n = 9;
  if(n%2==0) {
   System.out.println(n+" - chetnoe chislo");
  } else {
   System.out.println(n+" - nechetnoe chislo");
  }
 }
}

2. Задание
Создать программу, выводящую на экран ближайшее к 10 из двух чисел, записанных в переменные m и n. Например, среди чисел 8,5 и 11,45 ближайшее к десяти 11,45.
Java:
public class two {
    public static void main(String[] args) {
        double m,n,a,b,d;
        m = 9.9;
        n = 11;
        d = 10;
        a = Math.abs(m-d);
        b = Math.abs(n-d);
        if(a<b) {
            System.out.println(m+" blizje");
        } else if(a>b) {
            System.out.println(n+" blizje");
        } else {
            System.out.println("Rastoyanije ot "+m+" do 10 = rasstoyanijy ot "+n+" do 10");
        }
    }
}

3. Задание
В три переменные a, b и c записаны три вещественных числа. Создать программу, которая будет находить и выводить на экран вещественные корни квадратного уравнения ax2+bx+c=0, либо сообщать, что корней нет.
Java:
public class three {
    public static void main(String[] args) {
        double a,b,c,d,x1,x2;
        a = 1;
        b = 28;
        c = 27;
        d = b*b-4*a*c;
        if(d >= 0) {
            x1 = (-b + Math.sqrt(d))/(2*a);
            x2 = (-b - Math.sqrt(d))/(2*a);
            System.out.println("x1 = "+x1+", x2 = "+x2);
        } else {
            System.out.println("Yravnenije ne imeet reshenij");
        }
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Switch Case
1. Задание
Создать программу, которая будет проверять попало ли случайно выбранное из отрезка [5;155] целое число в интервал (25;100) и сообщать результат на экран.

Примеры работы программы:
Число 113 не содержится в интервале (25,100)
Число 72 содержится в интервале (25,100)
Число 25 не содержится в интервале (25,100)
Число 155 не содержится в интервале (25,100)
Java:
public class one {
public static void main(String[] args) {
  int n = (int)(Math.random()*150+5);
  if(n > 25 && n < 100) {
   System.out.println("Chislo "+n+" soderjitsa v intervale (25,100)");
  } else {
   System.out.println("Chislo "+n+" ne soderjitsa v intervale (25,100)");
  }
}
}

2. Задание
Создать программу, выводящую на экран случайно сгенерированное трёхзначное натуральное число и его наибольшую цифру.

Примеры работы программы:
В числе 208 наибольшая цифра 8
В числе 774 наибольшая цифра 7
В числе 613 наибольшая цифра 6
Java:
public class two {
  public static void main(String[] args) {
    int n = (int)(Math.random()*900+100),a,b,c;
    a = n/100;
    b = (n%100)/10;
    c = n%10;
    if(a>=b&&a>=c) {
      System.out.println("V chisle "+n+" naiboljchaya sifra "+a);
    } else if(b>=a&&b>=c) {
      System.out.println("V chisle "+n+" naiboljchaya sifra "+b);
    } else {
      System.out.println("V chisle "+n+" naiboljchaya sifra "+c);
    }
  }
}

3. Задание
В три переменные a, b и c явно записаны программистом три целых попарно неравных между собой числа. Создать программу, которая переставит числа в переменных таким образом, чтобы при выводе на экран последовательность a, b и c оказалась строго возрастающей.

Примеры работы программы:
Числа в переменных a, b и c: 3, 9, -1
Возрастающая последовательность: -1, 3, 9
Числа в переменных a, b и c: 2, 4, 3
Возрастающая последовательность: 2, 3, 4
Числа в переменных a, b и c: 7, 0, -5
Возрастающая последовательность: -5, 0, 7
Java:
public class three {
    public static void main(String[] args) {
        int a,b,c,min,max,middle;
        a = 7;
        b = 0;
        c = -5;
        if(a>b) {
            if(a>c) {
                max = a;
                if(c>b) {
                    middle = c;
                    min = b;
                } else {
                    middle = b;
                    min = c;
                }
            } else {
                max = c;
                middle = a;
                min = b;
            }
        } else {
            if(b>c) {
                max = b;
                    if(c>a) {
                        middle = c;
                        min = a;
                    } else {
                        middle = a;
                        min = c;
                    }
            } else {
                max = c;
                middle = b;
                min = a;
            }
        }
        System.out.println(min+" "+middle+" "+max);
    }
}
4. Задание
На некотором предприятии инженер Петров создал устройство, на табло которого показывается количество секунд, оставшихся до конца рабочего дня. Когда рабочий день начинается ровно в 9 часов утра — табло отображает «28800» (т.е. остаётся 8 часов), когда времени 14:30 — на табло «9000» (т.е. остаётся два с половиной часа), а когда наступает 17 часов — на табло отображается «0» (т.е. рабочий день закончился).

Программист Иванов заметил, как страдают офисные сотрудницы — им неудобно оценивать остаток рабочего дня в секундах. Иванов вызвался помочь сотрудницам и написать программу, которая вместо секунд будет выводить на табло понятные фразы с информацией о том, сколько полных часов осталось до конца рабочего дня. Например: «осталось 7 часов», «осталось 4 часа», «остался 1 час», «осталось менее часа».

Итак, в переменную n должно записываться случайное (на время тестирования программы) целое число из [0;28800], далее оно должно выводиться на экран (для Петрова) и на следующей строке (для сотрудниц) должна выводиться фраза о количестве полных часов, содержащихся в n секундах.

Примеры работы программы:
23466
Осталось 6 часов
10644
Осталось 2 часа
5891
Остался 1 час
1249
Осталось менее часа
Java:
public class four {
 public static void main(String[] args) {
  int time = (int)(Math.random()*28800), hours;
  double trace, tm = (double)time, del = 3600;
  trace = (double)(tm/del);
  if(time < 3600) {
   System.out.println(time+"\n"+trace+"\n"+"Do kontsa rabochego dnya ostalos menee chasa");
  } else {
   hours = (int)(time/3600);
   System.out.println(time+"\n"+trace+"\n"+"Do kontsa rabochego dnya ostalos "+hours+" chasov");
  }
 }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Потоки ввода/вывода и строки
1. Задание
Создать программу, которая будет сообщать, является ли целое число, введённое пользователем, чётным или нечётным. Если пользователь введёт не целое число, то сообщать ему об ошибке.
Java:
import java.util.Scanner;
public class one {
    public static void main(String[] args) {
        int n;
        System.out.print("Vvedite chislo: ");
        Scanner sc = new Scanner(System.in);
        if(sc.hasNextInt()) {
            n = sc.nextInt();
            if(n%2==0) {
                System.out.println("Vvedennoe chislo - chetnoe");
            } else {
                System.out.println("Vvedennoe chislo - nechetnoe");
            }
        } else {
            System.out.println("Vvedennoe vami chislo ne javlyaetsa tselim");
        }
    }
}

2. Задание
Создать программу, которая будет вычислять и выводить на экран сумму двух целых чисел, введённых пользователем. Если пользователь некорректно введёт хотя бы одно из чисел, то сообщать об ошибке.
Java:
import java.util.Scanner;
public class two {
    public static void main(String[] args) {
        int a,b,c;
        System.out.println("Dlya vipolneniya programmi nyjno vvesti 2 celih chisla");
        Scanner sc = new Scanner(System.in);
        System.out.print("Vvedite pervoe chislo: ");
        if(sc.hasNextInt()) {
            a = sc.nextInt();
            System.out.print("Vvedite vtoroye chislo: ");
            if(sc.hasNextInt()) {
                b = sc.nextInt();
                c = a+b;
                System.out.print("Summa etih chisel = "+c);
            } else {
                System.out.print("Vi vveli ne tseloye chislo");
            }
        } else {
            System.out.print("Vi vveli ne tseloye chislo");
        }
    }
}

3. Задание
Создать программу, которая будет выводить на экран меньшее по модулю из трёх введённых пользователем вещественных чисел.
Внимание! Дробную часть числа надо вводить после запятой, а не после точки, например: 2.5 - не верно. 2,5 - верно
Java:
import java.util.Scanner;
public class three {
    public static void main(String[] args) {
        int a,b,c,moda,modb,modc,min;
        System.out.println("Programma vivodit menshee chislo, vvedennoje polzovatelem chislo po modyly");
        Scanner sc = new Scanner(System.in);
        System.out.print("Vvedite pervoje chislo: ");
        if(sc.hasNextInt()) {
            a = sc.nextInt();
            System.out.print("Vvedite vtoroje chislo: ");
            if(sc.hasNextInt()) {
                b = sc.nextInt();
                System.out.print("Vvedite tretje chislo: ");
                if(sc.hasNextInt()) {
                    c = sc.nextInt();
                    moda = Math.abs(a);
                    modb = Math.abs(b);
                    modc = Math.abs(c);
                    if(moda<=modb&&moda<=modc){
                        min = a;
                    } else if(modb<=moda&&modb<=modc) {
                        min = b;
                    } else {
                        min = c;
                    }
                    System.out.println(min);
                } else {
                    System.out.println("Vi vveli ne tseloje chislo");
                }
            } else {
                System.out.println("Vi vveli ne tseloje chislo");
            }
        } else {
            System.out.println("Vi vveli ne tseloje chislo");
        }
    }
}

4. Задание
Создать программу, которая будет проверять, является ли слово из пяти букв, введённое пользователем, палиндромом (примеры: «комок», «ротор»). Если введено слово не из 5 букв, то сообщать об ошибке. Программа должна нормально обрабатывать слово, даже если в нём использованы символы разного регистра. Например, слова «Комок» или «РОТОР» следует также считать палиндромами.
Программа работает только с английскими словами
Java:
import java.util.Scanner;
public class four {
    public static void main(String[] args) {
        String s1,s2;
        char a0,a1,a2,a3,a4;
        Scanner sc = new Scanner(System.in);
        System.out.println("Programma proveraet slovo na polindromnost");
        System.out.print("Vvedite slovo is 5 bukv: ");
        if(sc.hasNext()) {
            s1 = sc.next();
            if(s1.length()==5) {
                s2 = s1;
                a0 = s1.charAt(0);
                a1 = s1.charAt(1);
                a2 = s1.charAt(2);
                a3 = s1.charAt(3);
                a4 = s1.charAt(4);
                s2 = a4+""+a3+""+a2+""+a1+""+a0;
                System.out.println(s2);
                if(s1.equals(s2)) {
                    System.out.println("Vvedennoje slovo "+"\""+s1+"\" yavlijaetsa polindromom");
                } else {
                    System.out.println("Vvedennoje slovo "+"\""+s1+"\" ne yavlijaetsa polindromom");
                }
            } else {
                System.out.print("Vi vveli stroky ne is pjati bykv "+s1);
            }
        } else {
            System.out.print("Vi nichego ne vveli");
        }
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Циклы (игра "Угадайка")
  1. Программа должна считать количество попыток, которое потребовалось пользователю, чтобы угадать число. И в конце сообщать, сколько было попыток.
  2. Программа должна загадывать число не из отрезка [1;10], а целое число из отрезка от [10;10], исключая ноль. При этом, постарайтесь, чтобы распределение случайных чисел генерируемых программой было равномерных (т. е. в случае выпадения нуля его нельзя просто заменить на какое-то другое число, например, на 1, ведь тогда 1 будет выпадать с вдвое большей вероятностью, чем остальные числа).
  3. Программа должна подсказывать пользователю, что он ошибся в знаке, если программа загадала положительное число, а пользователь ввёл отрицательное. И наоборот
Java:
import java.util.Scanner;
public class one {
    public static void main(String[] args) {
        // prog — число заданное программой
        // user — число введённое пользователем
        String znak;
        int prog,user,i;
        // Генерируем случайное целое число от 1 до 10
        do {
            prog = (int)(Math.random()*20 - 10);
        } while(prog == 0);
        System.out.println("Programma zagadala chislo ");
        i = 0;
        user = 0;
        do {
            i++;
            System.out.print("\nVvedite svoje chislo: ");
            Scanner input = new Scanner(System.in);
            if(input.hasNextInt()) {
                user = input.nextInt();
                if(user == prog) {
                    System.out.println("Vi ugadali!!! Chislo popitok - "+i);
                } else {
                    if (user <= 10 && user >= -10 && user != 0) {
                        System.out.println("Vi ne ugadali:");
                        if(user>0&&prog<0) {
                            System.out.println("=> Podskazka: Vvedite otritsateljnoje chislo");
                        } else if(user<0&&prog>0) {
                            System.out.println("=> Podskazka: Vvedite polojitelnoje chislo");
                        }
                        if(prog < user) {
                            System.out.println("=> Podskazka: Vozjmite chislo menjshe");
                        } else {
                            System.out.println("=> Podskazka: Vozjmite chislo bolshe");
                        }
                    } else {
                        System.out.println("Vi vveli nepravilnoje chislo");
                    }
                }
            } else {
            System.out.println("Vi vveli ne to chislo ili bukvy");
            }
        } while(user != prog);
        System.out.println("Do svidanja!");
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Циклы (for)
1. Задание
Создайте программу, выводящую на экран все четырёхзначные числа последовательности 1000 1003 1006 1009 1012 1015 ….
Java:
public class one {
    public static void main(String[] args) {
        for(int i=1000; i<=10000; i = i+3) {
            System.out.print(i+" ");
        }
    }
}

2. Задание
Создайте программу, выводящую на экран первые 55 элементов последовательности 1 3 5 7 9 11 13 15 17 ….
Java:
public class two {
    public static void main(String[] args) {
        for(int i=0, a=1; i<55; a = a+2, i++) {
            System.out.print(a+" ");
        }
    }
}

3. Задание
Создайте программу, выводящую на экран все неотрицательные элементы последовательности 90 85 80 75 70 65 60 ….
Java:
public class three {
    public static void main(String[] args) {
        for(int i=90; i>=0; i=i-5) {
            System.out.print(i+" ");
        }
    }
}

4. Задание
Создайте программу, выводящую на экран первые 20 элементов последовательности 2 4 8 16 32 64 128 ….
Java:
public class four {
    public static void main(String[] args) {
        for(int i = 0, a = 2; i<=20; a = a*2, i++) {
            System.out.print(a+" ");
        }
    }
}

5. Задание
Выведите на экран все члены последовательности 2an-1–1, где a1=2, которые меньше 10000.
Java:
public class five {
    public static void main(String[] args) {
        for(int a = 2; a<=10000; a=a*2-1) {
            System.out.print(a+" ");
        }
    }
}

6. Задание
Выведите на экран все двузначные члены последовательности 2an-1+200, где a1= –166.
Java:
public class six {
    public static void main(String[] args) {
        for(int a = -166; a<100; a=a*2+200) {
            if(a/100==0) {
                System.out.print(a+" ");
            }
        }
    }
}

7. Задание
Создайте программу, вычисляющую факториал натурального числа n, которое пользователь введёт с клавиатуры.
Java:
import java.util.Scanner;
public class seven {
    public static void main(String[] args) {
        int n,f;
        f = 1;
        Scanner sc = new Scanner(System.in);
        System.out.print("Vvedite chislo, kotoroje nado vozvesti v faktorial: ");
        if(sc.hasNextInt()) {
            n = sc.nextInt();
            for(int i=1; i<=n; i++) {
                f = f*i;
            }
            System.out.println(n+"! = "+f);
        } else {
         System.out.println("Vi vveli chto-to ne to");
        }
    }
}

8. Задание
Выведите на экран все положительные делители натурального числа, введённого пользователем с клавиатуры.
Java:
import java.util.Scanner;
public class eight {
    public static void main(String[] args) {
        int n;
        Scanner sc = new Scanner(System.in);
        System.out.print("Vvedite chislo: ");
        if(sc.hasNextInt()) {
            n = sc.nextInt();
            for(int i=1;i<=n;i++) {
                if(n%i==0) {
                    System.out.print(i+" ");
                }
            }
        } else {
            System.out.println("Vi vveli ne to chislo");
        }
    }
}

9. Задание
Проверьте, является ли введённое пользователем с клавиатуры натуральное число — простым. Постарайтесь не выполнять лишних действий (например, после того, как вы нашли хотя бы один нетривиальный делитель уже ясно, что число составное и проверку продолжать не нужно). Также учтите, что наименьший делитель натурального числа n, если он вообще имеется, обязательно располагается в отрезке [2; √n].
Java:
import java.util.Scanner;
public class nine {
    public static void main(String[] args) {
        int n,k;
        boolean b;
        b = false;
        Scanner sc = new Scanner(System.in);
        System.out.print("Vvedite chislo: ");
        if(sc.hasNextInt()) {
            n = sc.nextInt();
            for(int i=1; i<=Math.sqrt(n); i++) {
                if(n%i==0&&i>1) {
                    b = true;
                    break;
                }
            }
            if(b) {
                System.out.println("Chislo "+n+" ne prostoje, tak kak u nego est otlichnij ot nulja delitel ");
            } else {
                System.out.println("Chislo "+n+" prostoje, tak kak delitsa toljko na edinitsu i na samo sebja");
            }
        } else {
            System.out.println("Vi vveli nepraviljnoje chislo");
        }
    }
}

10. Задание
Создайте программу, выводящую на экран 12 первых элементов последовательности 2an-2–2, где a1=3 и a2=2.
Java:
public class ten {
    public static void main(String[] args) {
        for(int i=1, a1 = 3, a2 = 2; i<=12; i++) {
            if(i%2==0) {
                a2 = a2*2-2;
                System.out.print(a1+" ");
            } else {
                a1 = a1*2-2;
                System.out.print(a2+" ");
            }
        }
    }
}

11. Задание
Выведите на экран первые 11 членов последовательности Фибоначчи. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.
Java:
public class eleven {
    public static void main(String[] args) {
        int n1 = 1,n2 = 1,s = 0;
        for(int i = 0; i<11; i++){
            if(i%2==0) {
                n1 = n1+n2;
                System.out.print(n1+" ");
            } else {
                n2 = n1+n2;
                System.out.print(n2+" ");
            }
        }
    }
}

12. Задание
Для введённого пользователем с клавиатуры натурального числа посчитайте сумму всех его цифр (заранее не известно сколько цифр будет в числе).
Java:
import java.util.Scanner;
public class twelve {
    public static void main(String[] args) {
        int n,s,i,b;
        Scanner sc = new Scanner(System.in);
        System.out.print("Vvedite chislo: ");
        if(sc.hasNextInt()) {
            n = sc.nextInt();
            b = n;
            s = 0;
            i = 0;
            while(n!=0) {
                s = s+n%10;
                n = n/10;
                i++;
            }
            System.out.println("Summa sifr chisla "+b+" = "+s+", a kolichestvo sifr v nem: "+i);
        } else {
            System.out.println("Vi vveli nepravilnoje chislo");
        }
    }
}

13. Задание
В городе N проезд в трамвае осуществляется по бумажным отрывным билетам. Каждую неделю трамвайное депо заказывает в местной типографии рулон билетов с номерами от 000001 до 999999. «Счастливым» считается билетик у которого сумма первых трёх цифр номера равна сумме последних трёх цифр, как, например, в билетах с номерами 003102 или 567576. Трамвайное депо решило подарить сувенир обладателю каждого счастливого билета и теперь раздумывает, как много сувениров потребуется. С помощью программы подсчитайте сколько счастливых билетов в одном рулоне?
Java:
public class thirteen {
    public static void main(String[] args) {
        int d,o,m,j,s1,s2,f;//ot 1000 do 999999
        j = 0;
        for(int i=3000; i<=999999; i++) {
            m = i/1000;
            s1 = 0;
            s2 = 0;
            while(m!=0) {
                s1 = s1+m%10;
                m = m/10;
            }
            m = i%1000;
            while(m!=0) {
                s2 = s2+m%10;
                m = m/10;
            }
            if(s1==s2) {
                j++;
            }
        }
        System.out.println("Trebujetsa kolihestvo suvenirov: "+j);
    }
}

14. Задание
В городе N есть большой склад на котором существует 50000 различных полок. Для удобства работников руководство склада решило заказать для каждой полки табличку с номером от 00001 до 50000 в местной типографии, но когда таблички напечатали, оказалось что печатный станок из-за неисправности не печатал цифру 2, поэтому все таблички, в номерах которых содержалась одна или более двойка (например, 00002 или 20202) — надо перепечатывать. Напишите программу, которая подсчитает сколько всего таких ошибочных табличек оказалось в бракованной партии.
Java:
public class fourteen {
    public static void main(String[] args) {
        int f,j,k;
        j = 0;
        for(int i=1; i<=50000; i++) {
            k = i;
            f = 0;
            while(k!=0) {
                if(k%10==2) {
                    f = 1;
                    break;
                }
                k = k/10;
            }
            if(f == 0) {
                j++;
            }
        }
        System.out.println("Oshibochnih tablichek: "+j);
    }
}

15. Задание
Электронные часы показывают время в формате от 00:00 до 23:59. Подсчитать сколько раз за сутки случается так, что слева от двоеточия показывается симметричная комбинация для той, что справа от двоеточия (например, 02:20, 11:11 или 15:51).
Java:
public class fiveteen {
    public static void main(String[] args) {
        int hours,minutes,h1,h2,m1,m2,j;
        hours = 0;
        minutes = 0;
        j = 0;
        while(hours<24) {
            h1 = hours/10;
            h2 = hours%10;
            m1 = minutes/10;
            m2 = minutes%10;
            if(h1==m1&&h2==m2) {
                j++;
            }
            minutes++;
            if(minutes==60) {
                minutes = 0;
                hours++;
            }
        }
        System.out.println("Simmetrichnih combinatsij: "+j);
    }
}

16. Задание
В американской армии считается несчастливым число 13, а в японской — 4. Перед международными учениями штаб российской армии решил исключить номера боевой техники, содержащие числа 4 или 13 (например, 40123, 13313, 12345 или 13040), чтобы не смущать иностранных коллег. Если в распоряжении армии имеется 100 тыс. единиц боевой техники и каждая боевая машина имеет номер от 00001 до 99999, то сколько всего номеров придётся исключить?
Java:
public class sixteen {
    public static void main(String[] args) {
        int n,j;
        j = 0;
        for(int i=1; i<100000; i++){
            n = i;
            while(n!=0){
                if(n%10==4||n%100+10*n%10==13) {
                    j++;
                    break;
                }
                n = n/10;
            }
        }
        System.out.println("Iscluchit nomerov: "+j);
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Массивы
1. Задание
Создайте массив из всех чётных чисел от 2 до 20 и выведите элементы массива на экран сначала в строку, отделяя один элемент от другого пробелом, а затем в столбик (отделяя один элемент от другого началом новой строки). Перед созданием массива подумайте, какого он будет размера.

2 4 6 … 18 20
2
4
6

20
Java:
public class one {
    public static void main(String[] args) {
        int[] mas = new int[10];
        for(int i=0,n=2; i<mas.length; n=n+2,i++){
            mas[i] = n;
        }
        for(int i=0; i<mas.length; i++) {
            System.out.print(mas[i]+" ");
        }
        System.out.println();
        for(int i=0; i<mas.length; i++) {
            System.out.println(mas[i]);
        }
    }
}

2. Задание
Создайте массив из всех нечётных чисел от 1 до 99, выведите его на экран в строку, а затем этот же массив выведите на экран тоже в строку, но в обратном порядке (99 97 95 93 … 7 5 3 1).
Java:
public class two {
    public static void main(String[] args) {
        int[] mas = new int[50];
        for(int i=0,n=1; i<mas.length; n=n+2,i++){
            mas[i] = n;
        }
        for(int i=mas.length-1; i>=0; i--) {
            System.out.print(mas[i]+" ");
        }
    }
}

3. Задание
Создайте массив из 15 случайных целых чисел из отрезка [0;9]. Выведите массив на экран. Подсчитайте сколько в массиве чётных элементов и выведете это количество на экран на отдельной строке.
Java:
public class three {
    public static void main(String[] args) {
        int[] mas = new int[15];
        int j;
        j = 0;
        for(int i=0; i<mas.length; i++){
            mas[i] = (int)(Math.random()*10);
        }
        for(int i=0; i<mas.length; i++) {
            if(mas[i]%2==0) {
                j++;
            }
            System.out.print(mas[i]+" ");
        }
        System.out.println();
        System.out.println(j);
    }
}

4. Задание
Создайте массив из 8 случайных целых чисел из отрезка [1;10]. Выведите массив на экран в строку. Замените каждый элемент с нечётным индексом на ноль. Снова выведете массив на экран на отдельной строке.
Java:
public class four {
    public static void main(String[] args) {
        int[] mas = new int[8];
        for(int i=0; i<mas.length; i++){
            mas[i] = (int)(Math.random()*10+1);
        }
        for(int i=0; i<mas.length; i++){
            System.out.print(mas[i]+" ");
        }
        System.out.println();
        for(int i=0; i<mas.length; i++) {
            if(i%2==0) {
                mas[i]=0;
            }
            System.out.print(mas[i]+" ");
        }
    }
}

5. Задание
Создайте 2 массива из 5 случайных целых чисел из отрезка [0;5] каждый, выведите массивы на экран в двух отдельных строках. Посчитайте среднее арифметическое элементов каждого массива и сообщите, для какого из массивов это значение оказалось больше (либо сообщите, что их средние арифметические равны).
Java:
public class five {
    public static void main(String[] args) {
        int[] mas1 = new int[5], mas2 = new int[5];
        int s1, s2;
        double a1, a2;
        s1 = 0;
        s2 = 0;
        for(int i=0; i<mas1.length; i++){
            mas1[i] = (int)(Math.random()*6);
            mas2[i] = (int)(Math.random()*6);
        }
        for(int i=0; i<mas1.length; i++) {
            System.out.print(mas1[i]+" ");
        }
        System.out.println();
        for(int i=0; i<mas2.length; i++) {
            System.out.print(mas2[i]+" ");
        }
        for(int i=0; i<mas1.length; i++){
            s1 = s1+mas1[i];
        }
        for(int i=0; i<mas2.length; i++){
            s2 = s2+mas2[i];
        }
        System.out.println();
        a1 = (double)s1/5;
        a2 = (double)s2/5;
        if(a1<a2) {
        System.out.println("Srednee arifmeticheskoje pervogo massiva menjshe srednego arifmethicheskogo vtorogo massiva");
        } else if(a2<a1) {
        System.out.println("Srednee arifmeticheskoje vtorogo massiva menjshe srednego arifmethicheskogo pervogo massiva");
        } else {
            System.out.println("Srednije arifmethicheskije ravni drug drugu");
        }
    }
}

6. Задание
Создайте массив из 4 случайных целых чисел из отрезка [10;99], выведите его на экран в строку. Определить и вывести на экран сообщение о том, является ли массив строго возрастающей последовательностью.
Java:
public class six {
    public static void main(String[] args) {
        int[] mas = new int[4];
        int flag;
        flag = 0;
        for(int i=0; i<mas.length; i++){
            mas[i] = (int)(Math.random()*89+10);
        }
        for(int i=0; i<mas.length; i++) {
            System.out.print(mas[i]+" ");
        }
        System.out.println();
        for(int i=0; i<mas.length-1; i++) {
            if(mas[i]>mas[i+1]) {
                flag = 1;
                break;
            }
        }
        if(flag==1) {
            System.out.println("Posledovatelnost ne yavljaetsa strogo vozrastajyshej");
        } else {
            System.out.println("Posledovatelnost yavljaetsa strogo vozrastajyshej");
        }
    }
}

7. Задание
Создайте массив из 20-ти первых чисел Фибоначчи и выведите его на экран. Напоминаем, что первый и второй члены последовательности равны единицам, а каждый следующий — сумме двух предыдущих.
Java:
public class seven {
    public static void main(String[] args) {
        int[] mas = new int[20];
        for(int i=0, n1=1, n2=1; i<mas.length; i++){
            if(i%2==0) {
                n1=n1+n2;
                mas[i] = n1;
            } else {
                n2=n1+n2;
                mas[i] = n2;
            }
        }
        for(int i=0; i<mas.length; i++) {
            System.out.print(mas[i]+" ");
        }
    }
}

8. Задание
Создайте массив из 12 случайных целых чисел из отрезка [-15;15]. Определите какой элемент является в этом массиве максимальным и сообщите индекс его последнего вхождения в массив.
Java:
public class eight {
    public static void main(String[] args) {
        int[] mas = new int[12];
        int max=0,j=0;
        for(int i=0; i<mas.length; i++){
            mas[i]=(int)(Math.random()*31-15);
            System.out.print(mas[i]+" ");
        }
        for(int i=0; i<mas.length; i++) {
            if(mas[i]>=max) {
                max = mas[i];
                j = i;
            }
        }
        System.out.println("\nMaximalnim elementom massiva yavljaetsa "+mas[j]);
        System.out.println("Indeks ego poslednego vhojdeniya - "+j);
    }
}

9. Задание
Создайте два массива из 10 целых случайных чисел из отрезка [1;9] и третий массив из 10 действительных чисел. Каждый элемент с i-ым индексом третьего массива должен равняться отношению элемента из первого массива с i-ым индексом к элементу из второго массива с i-ым индексом. Вывести все три массива на экран (каждый на отдельной строке), затем вывести количество целых элементов в третьем массиве.
Java:
public class nine {
    public static void main(String[] args) {
        int[] mas1 = new int[10], mas2 = new int[10];
        double[] mas3 = new double[10];
        int j;
        j = 0;
        for(int i=0; i<mas1.length; i++){
            mas1[i]=(int)(Math.random()*9+1);
            mas2[i]=(int)(Math.random()*9+1);
            mas3[i]=(double)mas1[i]/mas2[i];
            System.out.print(mas1[i]+" ");
        }
        System.out.println();
        for(int i=0; i<mas2.length; i++) {
            System.out.print(mas2[i]+" ");
        }
        System.out.println();
        for(int i=0; i<mas3.length; i++) {
            System.out.print(mas3[i]+" ");
            if(mas3[i]%1==0) {
                j++;
            }
        }
        System.out.println("\n Kolichestvo tselih elementov v massive 3 ravno "+j);
    }
}

10. Задание
Создайте массив из 11 случайных целых чисел из отрезка [-1;1], выведите массив на экран в строку. Определите какой элемент встречается в массиве чаще всего и выведите об этом сообщение на экран. Если два каких-то элемента встречаются одинаковое количество раз, то не выводите ничего.
Java:
public class ten {
    public static void main(String[] args) {
        int[] mas = new int[11];
        int a=0,b=0,c=0;
        for(int i=0; i<mas.length; i++){
            mas[i]=(int)(Math.random()*4-2);
            System.out.print(mas[i]+" ");
        }
        System.out.println();
        for(int i=0; i<mas.length; i++) {
            if(mas[i]==-1) {
                a++;
            } else if(mas[i]==1) {
                b++;
            } else {
                c++;
            }
        }
        if(a>b&&a>c) {
            System.out.println("\nBoljshe vsego chisel, ravnih -1, ih "+a);
        } else if(b>a&&b>c) {
            System.out.println("\nBoljshe vsego chisel, ravnih 1, ih "+b);
        } else if(c>a&&c>b) {
            System.out.println("\nBoljshe vsego chisel, ravnih 0, ih "+c);
        }
    }
}

11. Задание
Пользователь должен указать с клавиатуры чётное положительное число, а программа должна создать массив указанного размера из случайных целых чисел из [-5;5] и вывести его на экран в строку. После этого программа должна определить и сообщить пользователю о том, сумма модулей какой половины массива больше: левой или правой, либо сообщить, что эти суммы модулей равны. Если пользователь введёт неподходящее число, то программа должна требовать повторного ввода до тех пор, пока не будет указано корректное значение.
Java:
import java.util.Scanner;
public class eleven {
    public static void main(String[] args) {
        int n=0,a,s1=0,s2=0;
        do {
            System.out.print("Vvedite chislo: ");
            Scanner sc = new Scanner(System.in);
            if(sc.hasNextInt()) {
                n = sc.nextInt();
                if(n>0&&n%2==0) {
                    int[] mas = new int[n];
                    for(int i=0; i<mas.length; i++) {
                        mas[i] = (int)(Math.random()*12-6);
                        System.out.print(mas[i]+" ");
                    }
                    a = mas.length/2;
                    for(int i=0; i<a; i++) {
                        s1 = s1+Math.abs(mas[i]);
                    }
                    for(int i=a; i<mas.length; i++) {
                        s2 = s2+Math.abs(mas[i]);
                    }
                    if(s1<s2) {
                        System.out.print("Summa modulej 1-j polovini <");
                    } else if(s1>s2) {
                        System.out.print("Summa modulej 2-j polovini <");
                    } else {
                        System.out.print("Summa modulej =");
                    }
                }
            }
        }while(n<=0||n%2!=0);
    }
}

12. Задание
Программа должна создать массив из 12 случайных целых чисел из отрезка [-10;10] таким образом, чтобы отрицательных и положительных элементов там было поровну и не было нулей. При этом порядок следования элементов должен быть случаен (т. е. не подходит вариант, когда в массиве постоянно выпадает сначала 6 положительных, а потом 6 отрицательных чисел или же когда элементы постоянно чередуются через один и пр.). Вывести полученный массив на экран.
Java:
public class twelve {
    public static void main(String[] args) {
        int[] mas = new int[12];
        int p,o,ran,k,o1,p1,j,z;
        p = 0;
        o = 0;
        k = 0;
        for(int i=0; i<mas.length; i++) {
            do {
                mas[i] = (int)(Math.random()*21-10);
            }while(mas[i]==0);
            if(mas[i]<0) {
                o++;
            } else {
                p++;
            }
            System.out.print(mas[i]+" ");
        }
        System.out.println();
        System.out.println(o+" "+p);
        System.out.println();
        j = 0;
        z = 0;
        int[] mp = new int[p], mo = new int[o];
        for(int i=0; i<mas.length; i++) {
            if(mas[i]>0) {
                mp[j] = i;
                j++;
            } else {
                mo[z] = i;
                z++;
            }
        }
        while(o>6) {
            do {
                ran = (int)(Math.random()*mo.length);
            }while(mo[ran]<0);
            k = mo[ran];
            mo[ran] = -1;
            mas[k] = (int)(Math.random()*10+1);
            o--;
        }
        while(p>6) {
            do {
                ran = (int)(Math.random()*mp.length);
            }while(mp[ran]<0);
            k = mp[ran];
            mp[ran] = -1;
            mas[k] = (int)(Math.random()*(-10)-1);
            p--;
        }
        System.out.println(o+" "+p);
        for(int i=0; i<mas.length; i++) {
            System.out.print(mas[i]+" ");
        }
    }
}

13. Задание
Пользователь вводит с клавиатуры натуральное число большее 3, которое сохраняется в переменную n. Если пользователь ввёл не подходящее число, то программа должна просить пользователя повторить ввод. Создать массив из n случайных целых чисел из отрезка [0;n] и вывести его на экран. Создать второй массив только из чётных элементов первого массива, если они там есть, и вывести его на экран.
Java:
import java.util.Scanner;
public class thirteen {
    public static void main(String[] args) {
        int n=0,a,s1=0,s2=0,j=0;
        do {
            System.out.print("Vvedite chislo: ");
            Scanner sc = new Scanner(System.in);
            if(sc.hasNextInt()) {
                n = sc.nextInt();
                if(n>3) {
                    int[] mas1 = new int[n];
                    for(int i=0; i<mas1.length; i++) {
                        mas1[i] = (int)(Math.random()*(n+1));
                        System.out.print(mas1[i]+" ");
                        if(mas1[i]%2==0) {
                            j++;
                        }
                    }
                    System.out.println("\n");
                    if(j!=0) {
                        int[] mas2 = new int[j];
                        j = 0;
                        for(int i=0; i<mas1.length; i++) {
                            if(mas1[i]%2==0) {
                                mas2[j] = mas1[i];
                                System.out.print(mas2[j]+" ");
                                j++;
                            }
                        }
                    } else {
                        System.out.println("Chetnih elementov net");
                    }
                }
            }
        }while(n<=3);
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Многомерные массивы
1. Задание
Создать двумерный массив из 8 строк по 5 столбцов в каждой из случайных целых чисел из отрезка [10;99]. Вывести массив на экран.
Java:
public class one {
    public static void main(String[] args) {
        int[][] mas = new int[5][8];
        for(int i=0; i<mas.length; i++){
            for(int j=0; j<mas[i].length; j++) {
                mas[i][j] = (int)(Math.random()*90+10);
            }
        }
        for(int i=0; i<mas.length; i++) {
            for(int j=0; j<mas[i].length; j++) {
                System.out.print(mas[i][j]+" ");
            }
            System.out.println();
        }
    }
}

2. Задание
Создать двумерный массив из 5 строк по 8 столбцов в каждой из случайных целых чисел из отрезка [-99;99]. Вывести массив на экран. После на отдельной строке вывести на экран значение максимального элемента этого массива (его индекс не имеет значения).
Java:
public class two {
    public static void main(String[] args) {
        int[][] mas = new int[7][4];
        int max = -1000;
        for(int i=0; i<mas.length; i++){
            for(int j=0; j<mas[i].length; j++) {
                mas[i][j] = (int)(Math.random()*-200+100);
                System.out.print(mas[i][j]+"\t");
            }
            System.out.println();
        }
        System.out.println();
        for(int i=0; i<mas.length; i++) {
            for(int j=0; j<mas[i].length; j++) {
                if(max < mas[i][j]) {
                    max = mas[i][j];
                }
            }
        }
        System.out.println(max);
    }
}

3. Задание
Cоздать двумерный массив из 7 строк по 4 столбца в каждой из случайных целых чисел из отрезка [-5;5]. Вывести массив на экран. Определить и вывести на экран индекс строки с наибольшим по модулю произведением элементов. Если таких строк несколько, то вывести индекс первой встретившейся из них.
Java:
public class three {
    public static void main(String[] args) {
        int[][] mas = new int[7][4];
        int imax=0, pmax=0, p1=1;
        for(int i=0; i<mas.length; i++){
            for(int j=0; j<mas[i].length; j++) {
                mas[i][j] = (int)(Math.random()*-6+6);
                System.out.print(mas[i][j]+"\t");
            }
            System.out.println();
        }
        System.out.println();
        for(int i=0; i<mas.length; i++) {
            for(int j=0; j<mas[j].length; j++) {
                p1 = p1*mas[i][j];
            }
            if(Math.abs(p1)>Math.abs(pmax)) {
                imax = i;
                pmax = p1;
            }
            System.out.println(i+" "+p1);
            p1 = 1;
        }
        System.out.println("\n");
        System.out.println("Naiboljshij indeks: "+imax);
    }
}

4. Задание
Создать двумерный массив из 6 строк по 7 столбцов в каждой из случайных целых чисел из отрезка [0;9]. Вывести массив на экран. Преобразовать массив таким образом, чтобы на первом месте в каждой строке стоял её наибольший элемент. При этом изменять состав массива нельзя, а можно только переставлять элементы в рамках одной строки. Порядок остальных элементов строки не важен (т.е. можно соврешить только одну перестановку, а можно отсортировать по убыванию каждую строку). Вывести преобразованный массив на экран.
Java:
public class four {
    public static void main(String[] args) {
        int[][] mas = new int[6][7];
        int max, p1=1, temp;
        for(int i=0; i<mas.length; i++){
            for(int j=0; j<mas[i].length; j++) {
                mas[i][j] = (int)(Math.random()*10);
                System.out.print(mas[i][j]+"\t");
            }
            System.out.println();
        }
        for(int i=0; i<mas.length; i++) {
            for(int j=mas[i].length-1; j>0; j--) {
                if(mas[i][j]>mas[i][j-1]) {
                    max = mas[i][j];
                    mas[i][j] = mas[i][j-1];
                    mas[i][j-1] = max;
                }
            }
        }
        System.out.println("\n---------------------Sorted----------------------\n");
        for(int i=0; i<mas.length; i++){
            for(int j=0; j<mas[i].length; j++) {
                System.out.print(mas[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

5. Задание
Для проверки остаточных знаний учеников после летних каникул, учитель младших классов решил начинать каждый урок с того, чтобы задавать каждому ученику пример из таблицы умножения, но в классе 15 человек, а примеры среди них не должны повторяться. В помощь учителю напишите программу, которая будет выводить на экран 15 случайных примеров из таблицы умножения (от 2*2 до 9*9, потому что задания по умножению на 1 и на 10 — слишком просты). При этом среди 15 примеров не должно быть повторяющихся (примеры 2*3 и 3*2 и им подобные пары считать повторяющимися).
Java:
public class five {
    public static void main(String[] args) {
        int[][] mas = new int[15][2];
        boolean flag = true;
        for(int i=0; i<mas.length; i++){
            mas[i][0] = (int)(Math.random()*8+2);
            mas[i][1] = (int)(Math.random()*8+2);
            if(i!=0){
                do{
                    for(int j=0; j<i; j++) {
                        if((mas[i][0]==mas[j][0]&&mas[i][1]==mas[j][1])||(mas[i][0]==mas[j][1]&&mas[i][1]==mas[j][0])) {
                            //System.out.println("---\nDo:"+mas[i][0]+"\t"+mas[i][1]+"\n---");
                            mas[i][0] = (int)(Math.random()*8+2);
                            mas[i][1] = (int)(Math.random()*8+2);
                            flag = false;
                            //System.out.println("---\nPosle:"+mas[i][0]+"\t"+mas[i][1]+"\n---");
                            break;
                        } else {
                            flag = true;
                        }
                    }
                }while(!flag);
            }
            if(flag) {
                System.out.println(mas[i][0]+" "+mas[i][1]);
            } else {
                System.out.println(mas[i][0]+"\t"+mas[i][1]);
            }
            flag = true;
        }
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Методы в Java
1. Задание
Создать статический метод, который будет иметь два целочисленных параметра a и b, и в качестве своего значения возвращать случайное целое число из отрезка [a;b]. C помощью данного метода заполнить массив из 20 целых чисел и вывести его на экран.
Java:
public class one {
    public static void pr(){
        System.out.println();
    }
    public static int rand(int a, int b) {
        return (int)(Math.random()*(b-a+1)+(a));
    }
    public static void main(String[] args) {
        int[] mas = new int[20];
        int a = 10, b = 15;
        for(int i=0; i<mas.length; i++) {
            mas[i] = rand(a, b);
            System.out.print(mas[i]+" ");
        }
        pr();
    }
}

2. Задание
Создать метод, который будет выводить указанный массив на экран в строку. С помощью созданного метода и метода из предыдущей задачи заполнить 5 массивов из 10 элементов каждый случайными числами и вывести все 5 массивов на экран, каждый на отдельной строке.
Java:
public class two {
    public static void pr(){
        System.out.println();
    }
    public static int rand(int a, int b) {
        return (int)(Math.random()*(b-a+1)+(a));
    }
    public static void arr(int[] mas) {
        for(int i=0; i<mas.length; i++) {
            System.out.print(mas[i]+" ");
        }
    }
    public static void main(String[] args) {
        int[] mas1 = new int[10], mas2 = new int[10], mas3 = new int[10], mas4 = new int[10], mas5 = new int[10];
        int a = 10, b = 15;
        for(int i=0; i<mas1.length; i++) {
            mas1[i] = rand(a, b);
        }
        arr(mas1);
        pr();
        
        
        for(int i=0; i<mas2.length; i++) {
            mas2[i] = rand(a, b);
        }
        arr(mas2);
        pr();
        
        
        for(int i=0; i<mas3.length; i++) {
            mas3[i] = rand(a, b);
        }
        arr(mas3);
        pr();
        
        
        for(int i=0; i<mas4.length; i++) {
            mas4[i] = rand(a, b);
        }
        arr(mas4);
        pr();
        
        
        for(int i=0; i<mas5.length; i++) {
            mas5[i] = rand(a, b);
        }
        arr(mas5);
        pr();
    }
}

3. Задание
Создать метод, который будет сортировать указанный массив по возрастанию любым известным вам способом.
Java:
public class three {
    public static void pr(){
        System.out.println();
    }
    public static int rand(int a, int b) {
        return (int)(Math.random()*(b-a+1)+(a));
    }
    public static void arr(int[] mas) {
        for(int i=0; i<mas.length; i++) {
            System.out.print(mas[i]+" ");
        }
    }
    public static void sort(int[] a) {
        for (int i = a.length - 1; i >= 2; i--) {
            boolean sorted = true;
            for (int j = 0; j < i; j++) {
                if (a[j] > a[j+1]) {
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                    sorted = false;
                }
            }
            if(sorted) {
                break;
            }
        }
    }
    public static void main(String[] args) {
        int[] mas = new int[10];
        int a = 10, b = 15;
        for(int i=0; i<mas.length; i++) {
            mas[i] = rand(a, b);
        }
        arr(mas);
        sort(mas);
        pr();
        arr(mas);
    }
}

4. Задание
В массиве хранится 7 явно заданных текстовых строк. Создать программу, которая отсортирует и выведет на экран строки в алфавитном порядке. Например, если были даны такие строки:
Пушкин
Лермонтов
Некрасов
Толстой Л. Н.
Толстой А. Н.
Есенин
Паустовский

Программа должна вывести на экран:
Есенин
Лермонтов
Некрасов
Паустовский
Пушкин
Толстой А. Н.
Толстой Л. Н.

Указание: прежде всего надо создать метод, устанавливающий отношения порядка для двух строк, переданных методу через аргументы.
Java:
public class four {
    public static void pr(){
        System.out.println();
    }
    public static void pr(String a){
        System.out.println(a);
    }
    /*-----------Вывод массива на экран-----------*/
    public static void arr(String[] mas) {
        for(int i=0; i<mas.length; i++) {
            System.out.println(mas[i]);
        }
    }
    /*--------------------------------------------*/
    
    
    
    /*------------------------------SORT(Сортировка)------------------------------------------*/
    public static void sort(String[] a) {
        for (int i = a.length - 1; i >= 2; i--) {
            boolean sorted = true;
            for (int j = 0; j < i; j++) {
                if (compare(a[j], a[j+1])>0) {//Используем функцию compare для сравнения двух слов
                    String temp = a[j+1];
                    a[j+1] = a[j];
                    a[j] = temp;
                    sorted = false;
                }
            }
            if(sorted) {
                break;
            }
        }
    }
    
    
    /*------------------------------COMPARE(Сравнение)------------------------------------------*/
    
    
    public static int compare(String word1, String word2) {
        word1 = word1.toLowerCase();//Переводим в нижний регистр
        word2 = word2.toLowerCase();//Переводим в нижний регистр
        //Задаем массивы, где будут храниться буквы слов
        int[] mas1 = new int[word1.length()];
        int[] mas2 = new int[word2.length()];
        //Заполняем массивы буквами (точнее порядковыми номерами этих букв)
        for(int i=0; i<mas1.length; i++) {
            char b = word1.charAt(i);//Цепляем из строки букву с порядковым номером i и сохраняем ее в переменную b
            int k = (int)b;//Берем порядковый номер этой буквы
            mas1[i] = k;//Записываем этот порядковый номер в массив
        }
        //Аналогично, только для другого слова
        for(int i=0; i<mas2.length; i++) {
            char b = word2.charAt(i);
            int k = (int)b;
            mas2[i] = k;
        }
        int i = 0, bool = 0;
        //Пропускаем все одинаковые буквы в слове, они нас не интересуют, пока не попадутся не равные
        while(mas1[i]==mas2[i]) {
            i++;
            if(i>=mas1.length||i>=mas2.length) {//Счетчик уже больше границ одного из массива, все остальное равно => сравниваем уже длину слова
                if(mas1.length==mas2.length) {
                    break;//Строки равны
                } else if(mas1.length<mas2.length) {
                    bool = -1;//Строка mas1 лежит выше по алфавиту, чем строка mas2
                    break;
                } else {
                    bool = 1;//Строка mas1 лежит ниже по алфавиту, чем строка mas2
                    break;
                }
            }
        }
        if(mas1.length>1&&mas2.length>1) {//Описываем, что делать программе, если строки состоят более, чем из одной буквы
            //Напомню, что мы уже исключили равные буквы, поэтому нам достаточно
            //сравнить только эти две неравные буквы, если буква 1-го слова больше буквы 2-го слова, то 1-е слово лежит ниже второго
            if(mas1[i]>mas2[i]) {
                bool = 1;
            //Аналогично, только тут идет проверка на то, лежит ли 1-е слово выше по алфавиту
            } else if(mas1[i]<mas2[i]) {
                bool = -1;
            }
        } else {
        //Остался вариант, когда слова представляют из себя буквы, тогда просто сравниваем нулевые элементы массивов
        //оба эти массива состаят из одного элемента с индексом 0
            //Ниже по алфавиту
            if(mas1[0]>mas2[0]) {
                bool = 1;
            //Выше по алфавиту
            }else if(mas1[0]<mas2[0]) {
                bool = -1;
            }
        }
        return bool;//Возвращаем значение переменной bool. Если значение отрицательное, то первое слово
        //лежит выше по алфавиту, чем второе. Если значение положительное, то ситуация обратна: первое
        //слово лежит ниже по алфавиту, чем второе. Если 0, то эти слова равны
    }
    
    /*-------------------------------------------------------------------------------*/
    
    
    
    
    
    public static void main(String[] args) {
        //Задаем исходный массив
        String[] a = {"Pushkin", "Lermontov", "Nekrasov", "Tolstoj L. N.", "Tolstoj A. N.", "Esenin", "Paystovskij","a","Av"};
        sort(a);//Сортируем массив
        arr(a);//Выводим массив на экран
        pr();//Переводим на другую строку
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Рекурсия
1-3. Задания
  1. Выясните экспериментальном путём, начиная с какого элемента последовательности Фибоначчи, вычисление с использованием рекурсии становится неприемлемым (занимает более минуты по времени).
  2. Создайте гибридный метод, для небольших n вычисляющий n-ое число Фибоначчи с помощью рекурсии, а для значений, превышающих выясненное вами в предыдущей задаче пороговое n, вычисляющий n-ое число Фибоначчи с помощью итерационного алгоритма (цикла, в рамках которого будут сохраняться значения двух предыдущих элементов последовательности).
  3. Подсчитайте, сколько раз потребуется повторно вычислить четвёртый элементы последовательности Фибоначчи для вычисления пятнадцатого элемента.
Java:
public class one {
    public static void ln(String a) {
        System.out.println(a);
    }
    static long fib (int n) {
        if (n==1 || n == 2) {
            return 1;
        }
        return fib (n-2) + fib (n-1);
    }
    static long fibo(int n) {
        //lim(fib(n)) = 47
        if(n < 47) {
            long z = fib(n);
            return z;
        } else {
            long n1 = 1,n2 = 1,s=0;
            for(int i = 0; i<n; i++){
                if(i%2==0) {
                    s = n1+n2;
                    n1 = s;
                } else {
                    s = n1+n2;
                    n2 = s;
                }
            }
            return s;
        }
    }
    public static void main(String[] args) {
        int f = 15;
        long d = fibo(f);
        f = 4;
        long d1 = fibo(f);
        int k = (int)(d/d1);
        ln("Zadanije 1: Na 48 nomere secundomer pokazal 1:00.76 (1 minuta 0.76 sekund)");
        System.out.println("Zadanije 2: "+fibo(100));
        System.out.println("Zadanije 3: "+k+" raz");
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Создание собственных классов в Java (начало)
1. Задание
Создайте в классе Circle метод, вычисляющий длину окружности.целых чисел и вывести его на экран.
Java:
class Circle {
 public double x; // абсцисса центра
 public double y; // ордината центра
 public double r; // радиус
 
 public void printCircle() {
       System.out.println("Okrujnost s centrom ("+x+";"+y+") i radiusom "+r);
 }
 public void moveCircle(double a, double b) {
       x = x + a;
       y = y + b;
 }
 public void zoomCircle(double r) {
       this.r = this.r * r;
 }
 public Circle() {
       x = 0.0;
       y = 0.0;
       r = 1.0;
 }
 public Circle(double a, double b, double s) {
       x = a;
       y = b;
       r = s;
 }
       // метод вычисляющий площадь круга
 public double squareCircle() {
       double s = Math.PI * r * r;
       return s;
 }
       // метод проверяющий равны ли окружности по площадям
 public boolean equalsCircle(Circle cir) {
    if(this.squareCircle() == cir.squareCircle()) {
       return true;
    } else {
       return false;
    }
 }
       //Метод, вычисляющий длину окружности
 public double lengthCircle() {
       double l = Math.PI*2*r;
       return l;
 }
}
public class one {
 public static void sop(String a) {
       System.out.println(a);
 }
 public static void main(String[] args) {
       Circle o1 = new Circle();
       o1.printCircle(); // Окружность с центром (0.0;0.0) и радиусом 1.0
       Circle o2 = new Circle(1,-1,14);
       o2.printCircle(); // Окружность с центром (1.0;-1.0) и радиусом 14.0
       System.out.println("Ploshad kruga o2: "+o2.squareCircle()); //615.75...
       o1.zoomCircle(14);
       sop("Dlina okrujnosti = "+o2.lengthCircle());
      
       if(o1.equalsCircle(o2)) {
         System.out.println("Krugi o1 i o2 imejut ravnuju ploshad");
       } else {
         System.out.println("Krugi o1 i o2 imejut raslichnuju ploshad");
       }
 }
}

2. Задание
Создайте в классе Circle метод, перемещающий центр круга в случайную точку квадрата координатной плоскости с диагональю от [-99;-99] до [99;99]. Обратите внимание на то, что требуется создать обычный метод, применимый к уже существующему объекту, а не конструктор создающий новый объект.
Java:
class Circle {
    public double x; // абсцисса центра
    public double y; // ордината центра
    public double r; // радиус

    public void printCircle() {
        System.out.println("Okrujnost s centrom ("+x+";"+y+") i radiusom "+r);
    }   
    public void moveCircle(double a, double b) {
        x = x + a;
        y = y + b;
    }
    public void zoomCircle(double r) {
        this.r = this.r * r;
    }
    public Circle() {
        x = 0.0;
        y = 0.0;
        r = 1.0;
    }
    public Circle(double a, double b, double s) {
        x = a;
        y = b;
        r = s;
    }
    // метод вычисляющий площадь круга
    public double squareCircle() {
        double s = Math.PI * r * r;
        return s;
    }
    // метод проверяющий равны ли окружности по площадям
    public boolean equalsCircle(Circle cir) {
        if(this.squareCircle() == cir.squareCircle()) {
            return true;
        } else {
            return false;
        }
    }
    
    //Метод, вычисляющий длину окружности
    public double lengthCircle() {
        double l = Math.PI*2*r;
        return l;
    }
    
    public void randomCenter() {
        x = (int)(Math.random()*199-99);
        y = (int)(Math.random()*199-99);
    }
}

public class two {
    public static void sop(String a) {
        System.out.println(a);
    }
    public static void main(String[] args) {
        Circle o1 = new Circle();
        o1.printCircle(); // Окружность с центром (0.0;0.0) и радиусом 1.0
        Circle o2 = new Circle(1,-1,14);
        o2.printCircle(); // Окружность с центром (1.0;-1.0) и радиусом 14.0
        System.out.println("Ploshad kruga o2: "+o2.squareCircle()); //615.75...
        o1.zoomCircle(14);
        sop("Dlina okrujnosti = "+o2.lengthCircle());
        if(o1.equalsCircle(o2)) {
            System.out.println("Krugi o1 i o2 imejut ravnuju ploshad");
        } else {
            System.out.println("Krugi o1 i o2 imejut raslichnuju ploshad");
        }
        o1.randomCenter();
        o1.printCircle();
    }
}

3. Задание
Измените в классе Circle конструктор по умолчанию так, чтобы в момент создания объекта с его помощью, координаты центра и радиус окружности пользователь вводил с клавиатуры.
Java:
import java.util.Scanner;
class Circle {
    public double x; // абсцисса центра
    public double y; // ордината центра
    public double r; // радиус

    public void printCircle() {
        System.out.println("Okrujnost s centrom ("+x+";"+y+") i radiusom "+r);
    }   
    public void moveCircle(double a, double b) {
        x = x + a;
        y = y + b;
    }
    public void zoomCircle(double r) {
        this.r = this.r * r;
    }
    public Circle() {
        System.out.println("Vvedite ordinatu kruga:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextInt()) {
            x = sc1.nextInt();
        }
        System.out.println("Vvedite abstissu kruga:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextInt()) {
            y = sc2.nextInt();
        }
        System.out.println("Vvedite radius kruga:");
        Scanner sc3 = new Scanner(System.in);
        if(sc3.hasNextInt()) {
            r = sc3.nextInt();
        }
        /*x = 0.0;
        y = 0.0;
        r = 1.0;
        */
    }
    public Circle(double a, double b, double s) {
        x = a;
        y = b;
        r = s;
    }
    // метод вычисляющий площадь круга
    public double squareCircle() {
        double s = Math.PI * r * r;
        return s;
    }
    // метод проверяющий равны ли окружности по площадям
    public boolean equalsCircle(Circle cir) {
        if(this.squareCircle() == cir.squareCircle()) {
            return true;
        } else {
            return false;
        }
    }
    
    //Метод, вычисляющий длину окружности
    public double lengthCircle() {
        double l = Math.PI*2*r;
        return l;
    }
    
    public void randomCenter() {
        x = (int)(Math.random()*199-99);
        y = (int)(Math.random()*199-99);
    }
}

public class three {
    public static void sop(String a) {
        System.out.println(a);
    }
    public static void main(String[] args) {
        Circle o1 = new Circle();
        o1.printCircle(); // Окружность с центром (0.0;0.0) и радиусом 1.0
        Circle o2 = new Circle(1,-1,14);
        o2.printCircle(); // Окружность с центром (1.0;-1.0) и радиусом 14.0
        System.out.println("Ploshad kruga o2: "+o2.squareCircle()); //615.75...
        o1.zoomCircle(14);
        sop("Dlina okrujnosti = "+o2.lengthCircle());
        if(o1.equalsCircle(o2)) {
            System.out.println("Krugi o1 i o2 imejut ravnuju ploshad");
        } else {
            System.out.println("Krugi o1 i o2 imejut raslichnuju ploshad");
        }
        o1.randomCenter();
        o1.printCircle();
    }
}

4. Задание
Создайте в классе Circle метод, вычисляющий расстояние между центрами двух окружностей.
Java:
import java.util.Scanner;
class Circle {
    public double x; // абсцисса центра
    public double y; // ордината центра
    public double r; // радиус

    public void printCircle() {
        System.out.println("Okrujnost s centrom ("+x+";"+y+") i radiusom "+r);
    }   
    public void moveCircle(double a, double b) {
        x = x + a;
        y = y + b;
    }
    public void zoomCircle(double r) {
        this.r = this.r * r;
    }
    public Circle() {
        System.out.println("Vvedite ordinatu kruga:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextInt()) {
            x = sc1.nextInt();
        }
        System.out.println("Vvedite abstissu kruga:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextInt()) {
            y = sc2.nextInt();
        }
        System.out.println("Vvedite radius kruga:");
        Scanner sc3 = new Scanner(System.in);
        if(sc3.hasNextInt()) {
            r = sc3.nextInt();
        }
    }
    public Circle(double a, double b, double s) {
        x = a;
        y = b;
        r = s;
    }
    // метод вычисляющий площадь круга
    public double squareCircle() {
        double s = Math.PI * r * r;
        return s;
    }
    // метод проверяющий равны ли окружности по площадям
    public boolean equalsCircle(Circle cir) {
        if(this.squareCircle() == cir.squareCircle()) {
            return true;
        } else {
            return false;
        }
    }
    
    //Метод, вычисляющий длину окружности
    public double lengthCircle() {
        double l = Math.PI*2*r;
        return l;
    }
    
    public void randomCenter() {
        x = (int)(Math.random()*199-99);
        y = (int)(Math.random()*199-99);
    }
    
    public double deltaCircles(Circle crc) {
        double deltax = Math.abs(this.x-crc.x);
        double deltay = Math.abs(this.y-crc.y);
        double delta = Math.sqrt(deltax*deltax+deltay*deltay);
        System.out.println(deltax+" "+deltay);
        return delta;
    }
}

public class four {
    public static void sop(String a) {
        System.out.println(a);
    }
    public static void main(String[] args) {
        Circle o1 = new Circle();
        o1.printCircle(); // Окружность с центром (0.0;0.0) и радиусом 1.0
        Circle o2 = new Circle(1,-1,14);
        o2.printCircle(); // Окружность с центром (1.0;-1.0) и радиусом 14.0
        System.out.println("Ploshad kruga o2: "+o2.squareCircle()); //615.75...
        o1.zoomCircle(14);
        sop("Dlina okrujnosti = "+o2.lengthCircle());
        if(o1.equalsCircle(o2)) {
            System.out.println("Krugi o1 i o2 imejut ravnuju ploshad");
        } else {
            System.out.println("Krugi o1 i o2 imejut raslichnuju ploshad");
        }
        o1.randomCenter();
        o1.printCircle();
        sop("Rasstoyanie mejdu centrami krugov = "+o1.deltaCircles(o2));
    }
}

5. Задание
Создайте в классе Circle метод, проверяющий, касаются ли окружности в одной точке. Учтите, что возможен вариант, когда одна окружность содержится внутри другой и при этом всё равно возможно касание в одной точке.
Java:
import java.util.Scanner;
class Circle {
    public double x; // абсцисса центра
    public double y; // ордината центра
    public double r; // радиус
    // метод, выводящий описание круга на экран
    public void printCircle() {
        System.out.println("Okrujnost s centrom ("+x+";"+y+") i radiusom "+r);
    }
    // метод, перемещающий круг на указанные переменные
    public void moveCircle(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод, масштабирующий круг
    public void zoomCircle(double r) {
        this.r = this.r * r;
    }
    // метод конструктора, просит пользователя ввести координаты и радиус круга самостоятельно
    public Circle() {
        System.out.println("Vvedite ordinatu kruga:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextInt()) {
            x = sc1.nextInt();
        }
        System.out.println("Vvedite abstissu kruga:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextInt()) {
            y = sc2.nextInt();
        }
        System.out.println("Vvedite radius kruga:");
        Scanner sc3 = new Scanner(System.in);
        if(sc3.hasNextInt()) {
            r = sc3.nextInt();
        }
    }
    // Перегрузка предыдущего метода, позволяет программисту вводить нужные координаты
    public Circle(double a, double b, double s) {
        x = a;
        y = b;
        r = s;
    }
    // метод вычисляющий площадь круга
    public double squareCircle() {
        double s = Math.PI * r * r;
        return s;
    }
    // метод проверяющий равны ли окружности по площадям
    public boolean equalsCircle(Circle cir) {
        if(this.squareCircle() == cir.squareCircle()) {
            return true;
        } else {
            return false;
        }
    }
    
    //Метод, вычисляющий длину окружности
    public double lengthCircle() {
        double l = Math.PI*2*r;
        return l;
    }
    // Метод, к заданию 3
    public void randomCenter() {
        x = (int)(Math.random()*199-99);
        y = (int)(Math.random()*199-99);
    }
    // Метод, к заданию 4
    public double deltaCircles(Circle crc) {
        double deltax = Math.abs(this.x-crc.x);
        double deltay = Math.abs(this.y-crc.y);
        double delta = Math.sqrt(deltax*deltax+deltay*deltay);
        //System.out.println(deltax+" "+deltay);
        return delta;
    }
    // Метод, к заданию 5
    public boolean hitTestCircle(Circle crc) {
        if(this.deltaCircles(crc)==(double)(this.r+crc.r)||this.deltaCircles(crc)==(double)(this.r-crc.r)) {
            if(this.x!=crc.x||this.y!=crc.y||this.r!=crc.r) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}

public class five {
    public static void sop(String a) {
        System.out.println(a);
    }
    public static void main(String[] args) {
        Circle o1 = new Circle(1,1,1);//1,1,1 - к номеру 5
        o1.printCircle(); // Окружность с центром (0.0;0.0) и радиусом 1.0
        Circle o2 = new Circle(1,-1,1);// Окружность o2 с центром в (1;-1) и радиусом 1
        o2.printCircle(); // Окружность с центром (1.0;-1.0) и радиусом 14.0
        System.out.println("Ploshad kruga o2: "+o2.squareCircle()); //615.75...
        //o1.zoomCircle(14);//удалить - к номеру 5 (масштабирует круг)
        sop("Dlina okrujnosti = "+o2.lengthCircle());// Выводит длину второй окружности
        //Сравнивает площади кругов, после чего делает умозаключение: равны ли круги или нет
        if(o1.equalsCircle(o2)) {
            System.out.println("Krugi o1 i o2 imejut ravnuju ploshad");
        } else {
            System.out.println("Krugi o1 i o2 imejut raslichnuju ploshad");
        }
        //o1.randomCenter();//удалить - к номеру 5 (переносит центр круга в случайную точку (задание 3))
        //o1.printCircle();// Окружность с центром (rand, rand) и радиусом 1
        //Проверяет, пересекаются ли круги в одной точке
        if(o1.hitTestCircle(o2)) {
            System.out.println("Krugi peresekajutsa v odnoj tochke");
        } else {
            System.out.println("Krugi NE peresekajutsa v odnoj tochke");
        }
        sop("Rasstoyanie mejdu centrami krugov = "+o1.deltaCircles(o2));
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Создание классов (продолжение). Класс Object
1. Задание
Создайте в классе метод, который будет выводить на экран сообщение о том, в какой координатной четверти лежит точка.
Java:
class Point {
    public double x; // абсцисса точки
    public double y; // ордината точки

    // возвращает строку с описанием точки
    public String toString() {
        return "("+x+";"+y+")";
    }
    // выводит на экран описание точки
    public void printPoint() {
        System.out.print(this.toString());
    }
    // метод перемещает точку на указанный вектор
    public void movePoint(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод изменяет координаты точки на указанные
    public void setPoint(double a, double b) {
        x = a;
        y = b;
    }
    // конструктор по умолчанию, создающий точку в начале координат
    public Point() {
        x = 0.0;
        y = 0.0;
    }
    // конструктор, создающий точку с указанными координатами
    public Point(double a, double b) {
        x = a;
        y = b;
    } 
    // метод вычисляющий расстояние между точками
    public double length(Point p) {
        return Math.sqrt( Math.pow(p.x-x,2) + Math.pow(p.y-y,2) );
    }
    // метод проверяющий совпадают ли точки
    public boolean equalsPoint(Point p) {
        if(this.x == p.x && this.y == p.y) {
            return true;
        } else {
            return false;
        }
    }
    
    public void quarter() {
        if(x>0&&y>0) {
            System.out.println("Point p2 is in first coordinate quarter");
        } else if(x<0&&y>0) {
            System.out.println("Point p2 is in second coordinate quarter");
        } else if(x<0&&y<0) {
            System.out.println("Point p2 is in third coordinate quarter");
        } else {
            System.out.println("Point p2 is in fourth coordinate quarter");
        }
    }
}

public class one {
    public static void main(String[] args) {
        Point p1 = new Point();
        Point p2 = new Point(-1,1);
        System.out.println("Distanse between "+p1+" and "+p2+" equals "+p1.length(p2));
        p2.quarter();
    }
}

2. Задание
Создайте в классе метод, проверяющий, являются ли две точки симметричными относительно начала отсчёта.
Java:
import java.util.*;
class Point {
    public double x; // абсцисса точки
    public double y; // ордината точки
    // возвращает строку с описанием точки
    public String toString() {
        return "("+x+";"+y+")";
    }
    // выводит на экран описание точки
    public void printPoint() {
        System.out.print(this.toString());
    }
    // метод перемещает точку на указанный вектор
    public void movePoint(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод изменяет координаты точки на указанные
    public void setPoint(double a, double b) {
        x = a;
        y = b;
    }
    // конструктор по умолчанию, создающий точку в начале координат
    public Point() {
        x = 0.0;
        y = 0.0;
    }
    // конструктор, создающий точку с указанными координатами
    public Point(double a, double b) {
        x = a;
        y = b;
    } 
    // метод вычисляющий расстояние между точками
    public double length(Point p) {
        return Math.sqrt( Math.pow(p.x-x,2) + Math.pow(p.y-y,2) );
    }
    // метод проверяющий совпадают ли точки
    public boolean equalsPoint(Point p) {
        if(this.x == p.x && this.y == p.y) {
            return true;
        } else {
            return false;
        }
    }
    
    public void quarter() {
        if(x>0&&y>0) {
            System.out.println("Point p2 is in first coordinate quarter");
        } else if(x<0&&y>0) {
            System.out.println("Point p2 is in second coordinate quarter");
        } else if(x<0&&y<0) {
            System.out.println("Point p2 is in third coordinate quarter");
        } else {
            System.out.println("Point p2 is in fourth coordinate quarter");
        }
    }
    public void sim(Point p) {
        if(Math.abs(this.x)==Math.abs(p.x)&&Math.abs(this.y)==Math.abs(p.y)) {
            System.out.println("Points are symmetrical");
        } else {
            System.out.println("Points are not symmetrical");
        }
    }
}

public class two {
    public static void main(String[] args) {
        Point p1 = new Point(1,1);
        Point p2 = new Point(-1,1);
        System.out.println("Distanse between "+p1+" and "+p2+" equals "+p1.length(p2));
        p2.quarter();
        p1.sim(p2);
    }
}

3. Задание
Измените в классе конструктор по умолчанию таким образом, чтобы начальные координаты точки при её создании пользователь задавал с клавиатуры.
Java:
import java.util.*;
class Point {
    public double x; // абсцисса точки
    public double y; // ордината точки
    // возвращает строку с описанием точки
    public String toString() {
        return "("+x+";"+y+")";
    }
    // выводит на экран описание точки
    public void printPoint() {
        System.out.print(this.toString());
    }
    // метод перемещает точку на указанный вектор
    public void movePoint(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод изменяет координаты точки на указанные
    public void setPoint(double a, double b) {
        x = a;
        y = b;
    }
    // конструктор по умолчанию, создающий точку в начале координат
    public Point() {
        System.out.println("Vvedite ordinatu tochki:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextInt()) {
            x = sc1.nextInt();
        }
        System.out.println("Vvedite abstissu tochki:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextInt()) {
            y = sc2.nextInt();
        }
    }
    // конструктор, создающий точку с указанными координатами
    public Point(double a, double b) {
        x = a;
        y = b;
    } 
    // метод вычисляющий расстояние между точками
    public double length(Point p) {
        return Math.sqrt( Math.pow(p.x-x,2) + Math.pow(p.y-y,2) );
    }
    // метод проверяющий совпадают ли точки
    public boolean equalsPoint(Point p) {
        if(this.x == p.x && this.y == p.y) {
            return true;
        } else {
            return false;
        }
    }
    
    public void quarter() {
        if(x>0&&y>0) {
            System.out.println("Point p2 is in first coordinate quarter");
        } else if(x<0&&y>0) {
            System.out.println("Point p2 is in second coordinate quarter");
        } else if(x<0&&y<0) {
            System.out.println("Point p2 is in third coordinate quarter");
        } else {
            System.out.println("Point p2 is in fourth coordinate quarter");
        }
    }
    public void sim(Point p) {
        if(Math.abs(this.x)==Math.abs(p.x)&&Math.abs(this.y)==Math.abs(p.y)) {
            System.out.println("Points are symmetrical");
        } else {
            System.out.println("Points are not symmetrical");
        }
    }
}

public class three {
    public static void main(String[] args) {
        Point p1 = new Point();
        Point p2 = new Point(-1,1);
        System.out.println("Distanse between "+p1+" and "+p2+" equals "+p1.length(p2));
        p2.quarter();
        p1.sim(p2);
    }
}

4. Задание
Создайте в классе метод, проверяющий, являются ли три точки коллинеарными (т.е. лежащими на одной прямой).
Java:
import java.util.*;
class Point {
    public double x; // абсцисса точки
    public double y; // ордината точки
    // возвращает строку с описанием точки
    public String toString() {
        return "("+x+";"+y+")";
    }
    // выводит на экран описание точки
    public void printPoint() {
        System.out.print(this.toString());
    }
    // метод перемещает точку на указанный вектор
    public void movePoint(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод изменяет координаты точки на указанные
    public void setPoint(double a, double b) {
        x = a;
        y = b;
    }
    // конструктор по умолчанию, создающий точку в начале координат
    public Point() {
        System.out.println("Vvedite ordinatu tochki:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextInt()) {
            x = sc1.nextInt();
        }
        System.out.println("Vvedite abstissu tochki:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextInt()) {
            y = sc2.nextInt();
        }
    }
    // конструктор, создающий точку с указанными координатами
    public Point(double a, double b) {
        x = a;
        y = b;
    } 
    // метод вычисляющий расстояние между точками
    public double length(Point p) {
        return Math.sqrt( Math.pow(p.x-x,2) + Math.pow(p.y-y,2) );
    }
    // метод проверяющий совпадают ли точки
    public boolean equalsPoint(Point p) {
        if(this.x == p.x && this.y == p.y) {
            return true;
        } else {
            return false;
        }
    }
    
    public void quarter() {
        if(x>0&&y>0) {
            System.out.println("Point p2 is in first coordinate quarter");
        } else if(x<0&&y>0) {
            System.out.println("Point p2 is in second coordinate quarter");
        } else if(x<0&&y<0) {
            System.out.println("Point p2 is in third coordinate quarter");
        } else {
            System.out.println("Point p2 is in fourth coordinate quarter");
        }
    }
    public void sim(Point p) {
        if(Math.abs(this.x)==Math.abs(p.x)&&Math.abs(this.y)==Math.abs(p.y)) {
            System.out.println("Points are symmetrical");
        } else {
            System.out.println("Points are not symmetrical");
        }
    }
    public void koll(Point p1, Point p2) {
        double distx1 = this.x-p1.x;
        double disty1 = this.y-p1.y;
        double distx2 = p1.x-p2.x;
        double disty2 = p1.y-p2.y;
        double k1 = disty1/distx1;
        double k2 = disty2/distx2;
        double c1 = this.y-k1*this.x;
        double c2 = p2.y-k2*p2.x;
        if(k1==k2&&c1==c2) {
            System.out.println("Kollinearni");
        } else {
            System.out.println("Ne kollinearni");
        }
    }
}

public class four {
    public static void main(String[] args) {
        Point p1 = new Point(1,1);
        Point p2 = new Point(2,2);
        Point p3 = new Point(3,3);
        p1.printPoint();
        System.out.println("Distanse between "+p1+" and "+p2+" equals "+p1.length(p2));
        p2.quarter();
        p1.sim(p2);
        p1.koll(p2,p3);
    }
}

5. Задание
Вместо представленного метода equalsPoint перегрузите в классе методы equals и hashCode.
Java:
import java.util.*;
class Point {
    public double x; // абсцисса точки
    public double y; // ордината точки
    // возвращает строку с описанием точки
    public String toString() {
        return "("+x+";"+y+")";
    }
    // выводит на экран описание точки
    public void printPoint() {
        System.out.print(this.toString());
    }
    // метод перемещает точку на указанный вектор
    public void movePoint(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод изменяет координаты точки на указанные
    public void setPoint(double a, double b) {
        x = a;
        y = b;
    }
    // конструктор по умолчанию, создающий точку в начале координат
    public Point() {
        System.out.println("Vvedite ordinatu tochki:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextDouble()) {
            x = sc1.nextDouble();
        }
        System.out.println("Vvedite abstissu tochki:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextDouble()) {
            y = sc2.nextDouble();
        }
    }
    // конструктор, создающий точку с указанными координатами
    public Point(double a, double b) {
        x = a;
        y = b;
    } 
    // метод вычисляющий расстояние между точками
    public double length(Point p) {
        return Math.sqrt( Math.pow(p.x-x,2) + Math.pow(p.y-y,2) );
    }
    public int hashCode() {
        double k =  x*y;
        return (int)k;
    }
    public boolean equals(Point p1) {
        if(this.x==p1.x&&this.y==p1.y) {
            return true;
        } else {
            return false;
        }
    }
    
    
    public void quarter() {
        if(x>0&&y>0) {
            System.out.println("Point p2 is in first coordinate quarter");
        } else if(x<0&&y>0) {
            System.out.println("Point p2 is in second coordinate quarter");
        } else if(x<0&&y<0) {
            System.out.println("Point p2 is in third coordinate quarter");
        } else {
            System.out.println("Point p2 is in fourth coordinate quarter");
        }
    }
    public void sim(Point p) {
        if(Math.abs(this.x)==Math.abs(p.x)&&Math.abs(this.y)==Math.abs(p.y)) {
            System.out.println("Points are symmetrical");
        } else {
            System.out.println("Points are not symmetrical");
        }
    }
    public void koll(Point p1, Point p2) {
        double distx1 = this.x-p1.x;
        double disty1 = this.y-p1.y;
        double distx2 = p1.x-p2.x;
        double disty2 = p1.y-p2.y;
        double k1 = disty1/distx1;
        double k2 = disty2/distx2;
        double c1 = this.y-k1*this.x;
        double c2 = p2.y-k2*p2.x;
        if(k1==k2&&c1==c2) {
            System.out.println("Kollinearni");
        } else {
            System.out.println("Ne kollinearni");
        }
    }
}

public class five {
    public static void main(String[] args) {
        Point p1 = new Point(1.9,1.2);
        Point p2 = new Point(1.9,1.2);
        Point p3 = new Point(3,3);
        p1.printPoint();
        System.out.println("Distanse between "+p1+" and "+p2+" equals "+p1.length(p2));
        p2.quarter();
        p1.sim(p2);
        p1.koll(p2,p3);
        System.out.println(/*p1.equals(p2)*/p1.hashCode()+" "+p2.hashCode());
    }
}
 

mygedz

Администратор
Сообщения
567
Оценка реакций
54
Создание классов (конец). Полиморфизм, инкапсуляция
1. Задание
Создайте класс треугольников на координатной плоскости, используя в качестве полей объекты-точки. Реализуйте в классе:
a) конструктор, позволяющий задавать вершины с клавиатуры;
b) метод print() выводящий описание треугольника на экран;
c) методы для вычисления периметра и площади треугольника.
Java:
import java.util.Scanner;
class Point {
    public double x; // абсцисса точки
    public double y; // ордината точки
    // возвращает строку с описанием точки
    public String toString() {
        return "("+x+";"+y+")";
    }
    // выводит на экран описание точки
    public void printPoint() {
        System.out.print(this.toString());
    }
    // метод перемещает точку на указанный вектор
    public void movePoint(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод изменяет координаты точки на указанные
    public void setPoint(double a, double b) {
        x = a;
        y = b;
    }
    // конструктор по умолчанию, создающий точку в начале координат
    public Point() {
        System.out.println("Vvedite ordinatu tochki:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextInt()) {
            x = sc1.nextInt();
        }
        System.out.println("Vvedite abstissu tochki:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextInt()) {
            y = sc2.nextInt();
        }
    }
    // конструктор, создающий точку с указанными координатами
    public Point(double a, double b) {
        x = a;
        y = b;
    } 
    // метод вычисляющий расстояние между точками
    public double length(Point p) {
        return Math.sqrt( Math.pow(p.x-x,2) + Math.pow(p.y-y,2) );
    }
    // метод проверяющий совпадают ли точки
    public boolean equalsPoint(Point p) {
        if(this.x == p.x && this.y == p.y) {
            return true;
        } else {
            return false;
        }
    }
    
    public void quarter() {
        if(x>0&&y>0) {
            System.out.println("Point p2 is in first coordinate quarter");
        } else if(x<0&&y>0) {
            System.out.println("Point p2 is in second coordinate quarter");
        } else if(x<0&&y<0) {
            System.out.println("Point p2 is in third coordinate quarter");
        } else {
            System.out.println("Point p2 is in fourth coordinate quarter");
        }
    }
    public void sim(Point p) {
        if(Math.abs(this.x)==Math.abs(p.x)&&Math.abs(this.y)==Math.abs(p.y)) {
            System.out.println("Points are symmetrical");
        } else {
            System.out.println("Points are not symmetrical");
        }
    }
    public void koll(Point p1, Point p2) {
        double distx1 = this.x-p1.x;
        double disty1 = this.y-p1.y;
        double distx2 = p1.x-p2.x;
        double disty2 = p1.y-p2.y;
        double k1 = disty1/distx1;
        double k2 = disty2/distx2;
        double c1 = this.y-k1*this.x;
        double c2 = p2.y-k2*p2.x;
        if(k1==k2&&c1==c2) {
            System.out.println("Kollinearni");
        } else {
            System.out.println("Ne kollinearni");
        }
    }
}
class Triangle {
    public Point A;
    public Point B;
    public Point C;
    public Triangle() {
        A = new Point();
        B = new Point();
        C = new Point();
    }
    public Triangle(double ax, double ay, double bx, double by, double cx, double cy) {
        A = new Point(ax, ay);
        B = new Point(bx, by);
        C = new Point(cx, cy);
    }
    public String toString() {
        return "Treygoljnik s koordinatami vershin: A="+A.toString()+"; B="+B.toString()+"; C="+C.toString()+";";
    }
    public void print() {
        System.out.print(this.toString());
    }
    public double P() {
        double a = Math.sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
        double b = Math.sqrt((B.x-B.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y));
        double c = Math.sqrt((A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y));
        System.out.println();
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        return a+b+c;
    }
    public double S() {
        double a = Math.sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
        double b = Math.sqrt((B.x-B.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y));
        //double c = (A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y);
        double h = Math.abs(a*a-b/2*b/2);
        return h*b/2;
    }
}
public class one {
    public static void main(String[] args) {
        Triangle abc = new Triangle(1,6,3,2,4,6);
        abc.print();
        System.out.println("Perimetr treygoljnika raven: "+abc.P());
        System.out.println("Ploshad treygoljnika ravna: "+abc.S());
    }
}

2. Задание
Доработайте конструктор таким образом, чтобы нельзя было задать три вершины, лежащие на одной прямой. Это несложно будет сделать с использованием метода из класса точек, который проверяет явлются ли точки коллинеарными, если прежде вы не реализовали этот метод, то сейчас самое время сделать это.
Java:
import java.util.Scanner;
class Point {
    public double x; // абсцисса точки
    public double y; // ордината точки
    // возвращает строку с описанием точки
    public String toString() {
        return "("+x+";"+y+")";
    }
    // выводит на экран описание точки
    public void printPoint() {
        System.out.print(this.toString());
    }
    // метод перемещает точку на указанный вектор
    public void movePoint(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод изменяет координаты точки на указанные
    public void setPoint(double a, double b) {
        x = a;
        y = b;
    }
    // конструктор по умолчанию, создающий точку в начале координат
    public Point() {
        System.out.println("Vvedite ordinatu tochki:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextInt()) {
            x = sc1.nextInt();
        }
        System.out.println("Vvedite abstissu tochki:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextInt()) {
            y = sc2.nextInt();
        }
    }
    // конструктор, создающий точку с указанными координатами
    public Point(double a, double b) {
        x = a;
        y = b;
    } 
    // метод вычисляющий расстояние между точками
    public double length(Point p) {
        return Math.sqrt( Math.pow(p.x-x,2) + Math.pow(p.y-y,2) );
    }
    // метод проверяющий совпадают ли точки
    public boolean equalsPoint(Point p) {
        if(this.x == p.x && this.y == p.y) {
            return true;
        } else {
            return false;
        }
    }
    
    public void quarter() {
        if(x>0&&y>0) {
            System.out.println("Point p2 is in first coordinate quarter");
        } else if(x<0&&y>0) {
            System.out.println("Point p2 is in second coordinate quarter");
        } else if(x<0&&y<0) {
            System.out.println("Point p2 is in third coordinate quarter");
        } else {
            System.out.println("Point p2 is in fourth coordinate quarter");
        }
    }
    public void sim(Point p) {
        if(Math.abs(this.x)==Math.abs(p.x)&&Math.abs(this.y)==Math.abs(p.y)) {
            System.out.println("Points are symmetrical");
        } else {
            System.out.println("Points are not symmetrical");
        }
    }
    public boolean koll(Point p1, Point p2) {
        double distx1 = this.x-p1.x;
        double disty1 = this.y-p1.y;
        double distx2 = p1.x-p2.x;
        double disty2 = p1.y-p2.y;
        double k1 = disty1/distx1;
        double k2 = disty2/distx2;
        double c1 = this.y-k1*this.x;
        double c2 = p2.y-k2*p2.x;
        if(k1==k2&&c1==c2) {
            System.out.println("Kollinearni");
            return true;
        } else {
            System.out.println("Ne kollinearni");
            return false;
        }
    }
}
class Triangle {
    public Point A;
    public Point B;
    public Point C;
    public Triangle() {
        Point a = new Point();
        Point b = new Point();
        Point c = new Point();
        if(!a.koll(b,c)) {
            A = new Point(a.x, a.y);
            B = new Point(b.x, b.y);
            C = new Point(c.x, c.y);
        } else {
            System.out.println("Tochki, zadannije vami, yavljyajytsa kollinearnimi, treugoljnik postroit nevozmojno");
            A = new Point(-1, 0);
            B = new Point(0, 1);
            C = new Point(1, 1);
        }
    }
    public Triangle(double ax, double ay, double bx, double by, double cx, double cy) {
        Point a = new Point(ax, ay);
        Point b = new Point(bx, by);
        Point c = new Point(cx, cy);
        if(!a.koll(b,c)) {
            A = new Point(ax, ay);
            B = new Point(bx, by);
            C = new Point(cx, cy);
        } else {
            System.out.println("Tochki, zadannije vami, yavljyajytsa kollinearnimi, treugoljnik postroit nevozmojno");
            A = new Point(-1, 0);
            B = new Point(0, 1);
            C = new Point(1, 1);
        }
    }
    public String toString() {
        return "Treygoljnik s koordinatami vershin: A="+A.toString()+"; B="+B.toString()+"; C="+C.toString()+";";
    }
    public void print() {
        System.out.print(this.toString());
    }
    public double P() {
        double a = Math.sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
        double b = Math.sqrt((B.x-B.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y));
        double c = Math.sqrt((A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y));
        System.out.println();
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        return a+b+c;
    }
    public double S() {
        double a = Math.sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
        double b = Math.sqrt((B.x-B.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y));
        //double c = (A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y);
        double h = Math.abs(a*a-b/2*b/2);
        return h*b/2;
    }
}
public class two {
    public static void main(String[] args) {
        //Triangle abc = new Triangle(1,6,3,2,4,6);
        //Triangle abc = new Triangle(1,1,2,2,3,3);
        Triangle abc = new Triangle();
        abc.print();
        System.out.println("Perimetr treygoljnika raven: "+abc.P());
        System.out.println("Ploshad treygoljnika ravna: "+abc.S());
    }
}

3. Задание
Инкапсулируйте поля таким образом, чтобы нельзя изменить значение любого из них так, чтобы вершины оказались на одной прямой.
Java:
import java.util.Scanner;
class Point {
    public double x; // абсцисса точки
    public double y; // ордината точки
    // возвращает строку с описанием точки
    public String toString() {
        return "("+x+";"+y+")";
    }
    // выводит на экран описание точки
    public void printPoint() {
        System.out.print(this.toString());
    }
    // метод перемещает точку на указанный вектор
    public void movePoint(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод изменяет координаты точки на указанные
    public void setPoint(double a, double b) {
        x = a;
        y = b;
    }
    // конструктор по умолчанию, создающий точку в начале координат
    public Point() {
        System.out.println("Vvedite ordinatu tochki:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextInt()) {
            x = sc1.nextInt();
        }
        System.out.println("Vvedite abstissu tochki:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextInt()) {
            y = sc2.nextInt();
        }
    }
    // конструктор, создающий точку с указанными координатами
    public Point(double a, double b) {
        x = a;
        y = b;
    } 
    // метод вычисляющий расстояние между точками
    public double length(Point p) {
        return Math.sqrt( Math.pow(p.x-x,2) + Math.pow(p.y-y,2) );
    }
    // метод проверяющий совпадают ли точки
    public boolean equalsPoint(Point p) {
        if(this.x == p.x && this.y == p.y) {
            return true;
        } else {
            return false;
        }
    }
    
    public void quarter() {
        if(x>0&&y>0) {
            System.out.println("Point p2 is in first coordinate quarter");
        } else if(x<0&&y>0) {
            System.out.println("Point p2 is in second coordinate quarter");
        } else if(x<0&&y<0) {
            System.out.println("Point p2 is in third coordinate quarter");
        } else {
            System.out.println("Point p2 is in fourth coordinate quarter");
        }
    }
    public void sim(Point p) {
        if(Math.abs(this.x)==Math.abs(p.x)&&Math.abs(this.y)==Math.abs(p.y)) {
            System.out.println("Points are symmetrical");
        } else {
            System.out.println("Points are not symmetrical");
        }
    }
    public boolean koll(Point p1, Point p2) {
        double distx1 = this.x-p1.x;
        double disty1 = this.y-p1.y;
        double distx2 = p1.x-p2.x;
        double disty2 = p1.y-p2.y;
        double k1 = disty1/distx1;
        double k2 = disty2/distx2;
        double c1 = this.y-k1*this.x;
        double c2 = p2.y-k2*p2.x;
        if(k1==k2&&c1==c2) {
            System.out.println("Kollinearni");
            return true;
        } else {
            System.out.println("Ne kollinearni");
            return false;
        }
    }
}
class Triangle {
    private Point A;
    private Point B;
    private Point C;
    public Triangle() {
        Point a = new Point();
        Point b = new Point();
        Point c = new Point();
        if(!a.koll(b,c)) {
            A = new Point(a.x, a.y);
            B = new Point(b.x, b.y);
            C = new Point(c.x, c.y);
        } else {
            System.out.println("Tochki, zadannije vami, yavljyajytsa kollinearnimi, treugoljnik postroit nevozmojno");
            A = new Point(-1, 0);
            B = new Point(0, 1);
            C = new Point(1, 1);
        }
    }
    public Triangle(double ax, double ay, double bx, double by, double cx, double cy) {
        Point a = new Point(ax, ay);
        Point b = new Point(bx, by);
        Point c = new Point(cx, cy);
        if(!a.koll(b,c)) {
            A = new Point(ax, ay);
            B = new Point(bx, by);
            C = new Point(cx, cy);
        } else {
            System.out.println("Tochki, zadannije vami, yavljyajytsa kollinearnimi, treugoljnik postroit nevozmojno");
            A = new Point(-1, 0);
            B = new Point(0, 1);
            C = new Point(1, 1);
        }
    }
    public String toString() {
        return "Treygoljnik s koordinatami vershin: A="+A.toString()+"; B="+B.toString()+"; C="+C.toString()+";";
    }
    public void print() {
        System.out.print(this.toString());
    }
    public double P() {
        double a = Math.sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
        double b = Math.sqrt((B.x-B.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y));
        double c = Math.sqrt((A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y));
        System.out.println();
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        return a+b+c;
    }
    public double S() {
        double a = Math.sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
        double b = Math.sqrt((B.x-B.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y));
        //double c = (A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y);
        double h = Math.abs(a*a-b/2*b/2);
        return h*b/2;
    }
    public Point getA() {
        return A;
    }
    public Point getB() {
        return B;
    }
    public Point getC() {
        return C;
    }
    public void setA(double x, double y) {
        Point p = new Point(x,y);
        if(!p.koll(B,C)) {
            A = p;
        } else {
            System.out.println("Tochku pomenjat neljza, t. k. ona budet kollinearna k drugim vershinam treugolnika");
        }
    }
    public void setB(double x, double y) {
        Point p = new Point(x,y);
        if(!p.koll(A,C)) {
            B = p;
        } else {
            System.out.println("Tochku pomenjat neljza, t. k. ona budet kollinearna k drugim vershinam treugolnika");
        }
    }
    public void setC(double x, double y) {
        Point p = new Point(x,y);
        if(!p.koll(A,B)) {
            C = p;
        } else {
            System.out.println("Tochku pomenjat neljza, t. k. ona budet kollinearna k drugim vershinam treugolnika");
        }
    }
}
public class three {
    public static void main(String[] args) {
        Triangle abc = new Triangle(1,6,3,2,4,6);
        //Triangle abc = new Triangle(1,1,2,2,3,3);
        //Triangle abc = new Triangle();
        abc.print();
        System.out.println("Perimetr treygoljnika raven: "+abc.P());
        System.out.println("Ploshad treygoljnika ravna: "+abc.S());
        abc.setA(10,11);
        abc.print();
    }
}

4. Задание
Создайте метод, поворачивающий треугольник вокруг центра тяжести на указанное в аргументе количество градусов.
Java:
import java.util.Scanner;
class Point {
    public double x; // абсцисса точки
    public double y; // ордината точки
    // возвращает строку с описанием точки
    public String toString() {
        return "("+x+";"+y+")";
    }
    // выводит на экран описание точки
    public void printPoint() {
        System.out.print(this.toString());
    }
    // метод перемещает точку на указанный вектор
    public void movePoint(double a, double b) {
        x = x + a;
        y = y + b;
    }
    // метод изменяет координаты точки на указанные
    public void setPoint(double a, double b) {
        x = a;
        y = b;
    }
    // конструктор по умолчанию, создающий точку в начале координат
    public Point() {
        System.out.println("Vvedite ordinatu tochki:");
        Scanner sc1 = new Scanner(System.in);
        if(sc1.hasNextInt()) {
            x = sc1.nextInt();
        }
        System.out.println("Vvedite abstissu tochki:");
        Scanner sc2 = new Scanner(System.in);
        if(sc2.hasNextInt()) {
            y = sc2.nextInt();
        }
    }
    // конструктор, создающий точку с указанными координатами
    public Point(double a, double b) {
        x = a;
        y = b;
    } 
    // метод вычисляющий расстояние между точками
    public double length(Point p) {
        return Math.sqrt( Math.pow(p.x-x,2) + Math.pow(p.y-y,2) );
    }
    // метод проверяющий совпадают ли точки
    public boolean equalsPoint(Point p) {
        if(this.x == p.x && this.y == p.y) {
            return true;
        } else {
            return false;
        }
    }
    
    public void quarter() {
        if(x>0&&y>0) {
            System.out.println("Point p2 is in first coordinate quarter");
        } else if(x<0&&y>0) {
            System.out.println("Point p2 is in second coordinate quarter");
        } else if(x<0&&y<0) {
            System.out.println("Point p2 is in third coordinate quarter");
        } else {
            System.out.println("Point p2 is in fourth coordinate quarter");
        }
    }
    public void sim(Point p) {
        if(Math.abs(this.x)==Math.abs(p.x)&&Math.abs(this.y)==Math.abs(p.y)) {
            System.out.println("Points are symmetrical");
        } else {
            System.out.println("Points are not symmetrical");
        }
    }
    public boolean koll(Point p1, Point p2) {
        double distx1 = this.x-p1.x;
        double disty1 = this.y-p1.y;
        double distx2 = p1.x-p2.x;
        double disty2 = p1.y-p2.y;
        double k1 = disty1/distx1;
        double k2 = disty2/distx2;
        double c1 = this.y-k1*this.x;
        double c2 = p2.y-k2*p2.x;
        if(k1==k2&&c1==c2) {
            System.out.println("Kollinearni");
            return true;
        } else {
            System.out.println("Ne kollinearni");
            return false;
        }
    }
}
class Triangle {
    private Point A;
    private Point B;
    private Point C;
    public Triangle() {
        Point a = new Point();
        Point b = new Point();
        Point c = new Point();
        if(!a.koll(b,c)) {
            A = new Point(a.x, a.y);
            B = new Point(b.x, b.y);
            C = new Point(c.x, c.y);
        } else {
            System.out.println("Tochki, zadannije vami, yavljyajytsa kollinearnimi, treugoljnik postroit nevozmojno");
            A = new Point(-1, 0);
            B = new Point(0, 1);
            C = new Point(1, 1);
        }
    }
    public Triangle(double ax, double ay, double bx, double by, double cx, double cy) {
        Point a = new Point(ax, ay);
        Point b = new Point(bx, by);
        Point c = new Point(cx, cy);
        if(!a.koll(b,c)) {
            A = new Point(ax, ay);
            B = new Point(bx, by);
            C = new Point(cx, cy);
        } else {
            System.out.println("Tochki, zadannije vami, yavljyajytsa kollinearnimi, treugoljnik postroit nevozmojno");
            A = new Point(-1, 0);
            B = new Point(0, 1);
            C = new Point(1, 1);
        }
    }
    public String toString() {
        return "Treygoljnik s koordinatami vershin: A="+A.toString()+"; B="+B.toString()+"; C="+C.toString()+";";
    }
    public void print() {
        System.out.print(this.toString());
    }
    public double P() {
        double a = Math.sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
        double b = Math.sqrt((B.x-B.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y));
        double c = Math.sqrt((A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y));
        /*System.out.println();
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);*/
        return a+b+c;
    }
    public double S() {
        double a = Math.sqrt((A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y));
        double b = Math.sqrt((B.x-B.x)*(B.x-C.x)+(B.y-C.y)*(B.y-C.y));
        //double c = (A.x-C.x)*(A.x-C.x)+(A.y-C.y)*(A.y-C.y);
        double h = Math.abs(a*a-b/2*b/2);
        return h*b/2;
    }
    public Point getA() {
        return A;
    }
    public Point getB() {
        return B;
    }
    public Point getC() {
        return C;
    }
    public void setA(double x, double y) {
        Point p = new Point(x,y);
        if(!p.koll(B,C)) {
            A = p;
        } else {
            System.out.println("Tochku pomenjat neljza, t. k. ona budet kollinearna k drugim vershinam treugolnika");
        }
    }
    public void setB(double x, double y) {
        Point p = new Point(x,y);
        if(!p.koll(A,C)) {
            B = p;
        } else {
            System.out.println("Tochku pomenjat neljza, t. k. ona budet kollinearna k drugim vershinam treugolnika");
        }
    }
    public void setC(double x, double y) {
        Point p = new Point(x,y);
        if(!p.koll(A,B)) {
            C = p;
        } else {
            System.out.println("Tochku pomenjat neljza, t. k. ona budet kollinearna k drugim vershinam treugolnika");
        }
    }
    public void rotate(double deg) {
        double rad,cos,sin;
        if(deg == 90) {
            cos = 0;
            sin = 1;
        } else {
            rad = deg*Math.PI/180;
            cos = Math.cos(rad);
            sin = Math.sin(rad);
        }
        double newAx = A.x*cos-A.y*sin;
        double newAy = A.x*sin-A.y*cos;
        double newBx = B.x*cos-B.y*sin;
        double newBy = B.x*sin-B.y*cos;
        double newCx = C.x*cos-C.y*sin;
        double newCy = C.x*sin-C.y*cos;
        A.x = newAx;
        A.y = newAy;
        B.x = newBx;
        B.y = newBy;
        C.x = newCx;
        C.y = newCy;
        /*A.x = A.x*Math.cos(rad)-A.y*Math.sin(rad);
        A.y = A.x*Math.sin(rad)-A.y*Math.cos(rad);
        B.x = B.x*Math.cos(rad)-B.y*Math.sin(rad);
        B.y = B.x*Math.sin(rad)-B.y*Math.cos(rad);
        C.x = C.x*Math.cos(rad)-C.y*Math.sin(rad);
        C.y = C.x*Math.sin(rad)-C.y*Math.cos(rad);*/
        //Triangle tr = new Triangle(A,B,C);
        //return tr;
    }
}
public class four {
    public static void main(String[] args) {
        //Triangle abc = new Triangle(1,6,3,2,4,6);
        //Triangle abc = new Triangle(1,1,2,2,3,3);
        Triangle abc = new Triangle(-1,0,0,1,1,0);
        abc.print();
        System.out.println("Perimetr treygoljnika raven: "+abc.P());
        System.out.println("Ploshad treygoljnika ravna: "+abc.S());
        //abc.setA(10,11);
        //abc.print();
        System.out.println();
        System.out.println(Math.sin(Math.PI));
        abc.rotate(45);
        System.out.println("Rotate 45");
        abc.print();
    }
}
 
Верх Низ