/
AlexStone
/
Java25sep
Обзор
Документация
Войти
/
AlexStone
/
Java25sep
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
java/tasks 24.html
807 строк
53 KB
unknown
КР 05.11.25
05 ноя 2025, 09:55
05 ноя 2025, 09:55
4a942c9
Код
Авторство
О чём код?
<!DOCTYPE html><html lang="ru"><head><meta charset='utf-8'/><title>24 Внутреннее состояние</title><style>.check_single { margin:15px; border:1px solid black; padding:5px; width:calc(100% - 40px); } sqrt val { border-top: 1px solid black; } sqrt:before { content:"\221A"; } .section { counter-reset:section; } .section h3:after { counter-increment:section; content: " " counter(section); } table { border-collapse:collapse; } .check_values, .check_values_v2 { width:100%; counter-reset:test_case; } .check_values td:first-child::before { counter-increment:test_case; content: counter(test_case); } table td, table th { border:1px solid black; text-align:center; } .check_values td:first-child, .check_values_v2 td:first-child{ width:40px; } .check_values td, .check_values_v2 td { max-width: 450px; } .lab_nav ol { list-style:none; } .nav { position:fixed; top:0; right:0; margin:15px; clear:both; } .nav ul{ list-style-type:none; padding:0; float:left; } .nav li { margin:2px; border:1px solid black; } .nav li a { display:block; padding:7px; } .task_block { width:80%; page-break-inside:avoid; padding:10px; display:block; } .task_block:target{ background-color:lightgrey; } .task_block:target .task_id{ color:white; } .task_id { float:right; color:lightgrey; } .quiz_block { width:80%; } .quiz_block:target{ background-color:lightgrey; } .task_desc { margin:5px; } .example_image { width:200px; } .lab_nav { width:80%; overflow:auto; } .check_values .preformatted, .preformatted { font-family:monospace; white-space-collapse:preserve; white-space:pre; text-wrap:pretty; text-align:left; padding:10px; } .stream_values tr td:nth-child(3) { border-top-width:0; border-bottom-width:0; text-align:left; } .stream_values tr:nth-child(2) td:nth-child(2) { border-top-width:0; border-bottom-width:0; text-align:right; } .stream_values tr td:nth-child(1){ border-top-width:0; border-bottom-width:0; text-align:right; } .stream_values tr.test_row td:nth-child(2){ text-align:right; } .stream_values tr td:nth-child(2){ border-top-width:0; border-bottom-width:0; text-align:left; } .stream_values .preformatted{ padding: 0; } .stream_values tr.test_row td { border-top-width:1px; } .stream_values tr.test_row td:first-of-type { border-top-width:1px; border-bottom-width:1px; text-align:center; width:15px; } .stream_values tr:last-of-type td { border-bottom-width:1px; } .stream_values { width:100%; } formula { font-weight:bold; text-align:center; vertical-align:middle; } fraction { display:inline-block; text-align:center; vertical-align:middle; font-weight:bold; } formula .abs{ border-left: solid black 1px; border-right: solid black 1px; padding: 2px; } numerator { display:block; border-bottom:2px solid black; } denominator { display:block; } .comment{ color:darkgrey; } .step{ display:none; } .step:last-child, .step:target{ display:block; } .step:target ~ .step:last-child{ display:none; } .console{ background-color:black; color:white; width:300px; } .zoom{ background-color:lightgrey; font-size:40pt; padding:0 10px; } .task_block:target .zoom { background-color:white; }</style><meta name="author" content="Подборка задач, выбор порядка подачи и подготовка тестовых данных - Крюков Александр, Омск 2013-2019"/></head><body class='section'><a name='heading'><h1>Внутреннее состояние</h1></a><div class='lab_nav'>Другие темы<ol> <li>1 <a href='tasks 1.html'>Печать текста на экран</a></li> <li>2 <a href='tasks 2.html'>Заполнение шаблона данными от пользователя</a></li> <li>3 <a href='tasks 3.html'>Организация вычислений</a></li> <li>4 <a href='tasks 4.html'>Проверка исходных данных</a></li> <li>5 <a href='tasks 5.html'>Запуск программы с известными исходными данными</a></li> <li>6 <a href='tasks 6.html'>Взаимоисключающие случаи</a></li> <li>7 <a href='tasks 7.html'>Работа с интервалами значений</a></li> <li>8 <a href='tasks 8.html'>Реорганизация повторяющихся действий</a></li> <li>9 <a href='tasks 9.html'>Обработка неизвестного объема данных</a></li> <li>10 <a href='tasks 10.html'>Вложенные циклы</a></li> <li>11 <a href='tasks 11.html'>Базовые операции с массивами</a></li> <li>12 <a href='tasks 12.html'>Перестановки элементов массива</a></li> <li>13 <a href='tasks 13.html'>Использование числовых массивов</a></li> <li>14 <a href='tasks 14.html'>Вычисление агрегатов</a></li> <li>15 <a href='tasks 15.html'>Поиск в массиве</a></li> <li>16 <a href='tasks 16.html'>Сортировка вставкой</a></li> <li>17 <a href='tasks 17.html'>Строки</a></li> <li>18 <a href='tasks 18.html'>Чтение файлов</a></li> <li>19 <a href='tasks 19.html'>Запись в файлы</a></li> <li>20 <a href='tasks 20.html'>Возврат значения</a></li> <li>21 <a href='tasks 21.html'>Перехват исключений</a></li> <li>22 <a href='tasks 22.html'>Выбрасывание исключений</a></li> <li>23 <a href='tasks 23.html'>Составные типы данных</a></li> <li>24 <a href='tasks 24.html'>Внутреннее состояние</a></li> <li>25 <a href='tasks 25.html'>Коллекции</a></li> <li>26 <a href='tasks 26.html'>Рекурсия</a></li> <li>27 <a href='tasks 27.html'>Даты</a></li> <li>28 <a href='tasks 28.html'>Комбинаторика</a></li> <li>29 <a href='tasks 29.html'>SQL СУБД</a></li> <li>30 <a href='tasks 30.html'>Псевдослучайные числа</a></li> <li>31 <a href='tasks 31.html'>Реализация стандартных интерфейсов</a></li> </ol></div><div class='nav'><ul><li><a href='#heading'>^</a></li><li><a href='#task3185' class='example'>1*</a><li><a href='#task2809'>2</a><li><a href='#task5304'>3</a><li><a href='#task2165'>4</a><li><a href='#task1168'>5</a><li><a href='#task5755'>6</a><li><a href='#task3759'>7</a><li><a href='#task2896'>8</a><li><a href='#task5032' class='example'>9*</a><li><a href='#task3567'>10</a></ul></div><div id='task3185' class='task_block'> <div class='task_id'>3185</div> <h3>Задача</h3> <h4>Постановка задачи</h4> <div class='task_desc'> Числа обозначают координаты двух точек A и B. Первое число это x точки A. Второе - y точки A. Третье - x точки B. Четвертое - y точки B. Вычислить расстояние между точками по формуле: <br/> <formula> <sqrt><val> (Bx - Ax)<sup>2</sup> + (By - Ay)<sup>2</sup> </val></sqrt> </formula> </div> <h4>Реализуйте НЕстатический метод для решения задачи</h4> <ol start='1'><li>Убедитесь, что вы реализовали класс Point и метод print из задачи <a href="tasks 23.html#task2686" target="_blank">ЛР23#2686(открыть в новой вкладке)</a></li><li>Метод distanceTo должен быть реализован в классе Point без использования слова static</li><li>Метод distanceTo принимает в качестве аргумента 1 экземпляр класса Point и возвращает действительное число.</li><li>В теле метода distanceTo расчитайте расстояние между точками, заданными полями x и y.</li></ol><div class='task_desc'> Должно получиться так: </div> <div class='check_single preformatted'>public double distanceTo(Point p) { double dx = this.x - p.x; //ключевое слово this обозначает тот экземпляр, у которого будет вызван метод. double dy = this.y - p.y; return Math.sqrt(dx * dx + dy * dy); }</div> <div class='task_desc'> В методе main класса Program добавьте следующий код: </div> <div class='check_single preformatted'>Point a = new Point(1, 1), b = new Point(3, 4); double distance = a.distanceTo(b);//this будет значить a System.out.printf("Расстояние между точками\t%s и\t%s\tравно\t%.4f\n",print(a), print(b), distance); Point src = new Point(-2, 4); Point dest = new Point(8, -10); distance = src.distanceTo(dest);//this будет значить src System.out.printf("Расстояние между точками\t" + print(src) + " и\t%s\tравно\t" + distance + "\n", print(dest)); src = new Point(0, 0); dest = new Point(-5, -7); distance = dest.distanceTo(src);//this будет значить dest System.out.printf("Расстояние между точками\t%s и\t%s\tравно\t%.4f\n", print(src), print(dest), distance); dest = new Point(0, 0); System.out.printf("Расстояние между точками\t" + print(src) + " и\t" + print(dest) + "\tравно\t%.4f\n", src.distanceTo(dest)); src = new Point(5, 5); for (int i = 0; i < 10; i++) { dest = new Point(0, i); System.out.printf("Расстояние между точками\t" + print(src) + " и\t" + print(dest) + "\tравно\t%.4f\n", src.distanceTo(dest)); } </div> <div class='task_desc'> В результате запуска программы должно быть выведено сообщение: </div> <div class='check_single preformatted'>Расстояние между точками (1.0 | 1.0) и (3.0 | 4.0) равно 3,6056 Расстояние между точками (-2.0 | 4.0) и (8.0 | -10.0) равно 17.204650534085253 Расстояние между точками (0.0 | 0.0) и (-5.0 | -7.0) равно 8,6023 Расстояние между точками (0.0 | 0.0) и (0.0 | 0.0) равно 0,0000 Расстояние между точками (5.0 | 5.0) и (0.0 | 0.0) равно 7,0711 Расстояние между точками (5.0 | 5.0) и (0.0 | 1.0) равно 6,4031 Расстояние между точками (5.0 | 5.0) и (0.0 | 2.0) равно 5,8310 Расстояние между точками (5.0 | 5.0) и (0.0 | 3.0) равно 5,3852 Расстояние между точками (5.0 | 5.0) и (0.0 | 4.0) равно 5,0990 Расстояние между точками (5.0 | 5.0) и (0.0 | 5.0) равно 5,0000 Расстояние между точками (5.0 | 5.0) и (0.0 | 6.0) равно 5,0990 Расстояние между точками (5.0 | 5.0) и (0.0 | 7.0) равно 5,3852 Расстояние между точками (5.0 | 5.0) и (0.0 | 8.0) равно 5,8310 Расстояние между точками (5.0 | 5.0) и (0.0 | 9.0) равно 6,4031 </div> </div> <div id='task2809' class='task_block'> <div class='task_id'>2809</div> <h3>Задача</h3> <div class='task_desc'> Дан массив точек. В ходе работы программы координаты некоторых точек меняются. Нужно определить какие точки изменились. </div> <ol start='1'><li>Убедитесь, что вы реализовали класс Point и метод print из задачи <a href="tasks 23.html#task2686" target="_blank">ЛР23#2686(открыть в новой вкладке)</a></li><li>Реализуйте НЕстатический метод setX. Он принимает действительное значение, ничего не возвращает и меняет значение поля x</li><li>Реализуйте НЕстатический метод setY. Он принимает действительное значение, ничего не возвращает и меняет значение поля y</li></ol><div class='task_desc'> Пример реализации метода setX </div> <div class='check_single preformatted'>public void setX(double x) { this.x = x; }</div> <ol start='4'><li>Реализуйте статический метод wasChanged. Он возвращает true, если значение полей x или y изменилось, иначе false</li><li>Вы можете добавлять поля класса и менять реализацию методов, если это необходимо</li></ol><div class='task_desc'> Сигнатура метода wasChanged </div> <div class='check_single preformatted'>public boolean wasChanged() {</div> <div class='task_desc'> В методе main класса Program добавьте следующий код: </div> <div class='check_single preformatted'>Point[] points = new Point[]{ new Point(1, 2), new Point(3, 4), new Point(5, 6), new Point(7, 8), new Point(9, 10), new Point(11, 12) }; int seed = 111111127;//поменяйте это значение, чтобы получить другой случайный результат Random rnd = new Random(seed); int plannedChangedCount = points.length / 2; System.out.println("Должно измениться: " + plannedChangedCount + " из " + points.length + " точек"); for (int i = 0; i < plannedChangedCount; i++) { int idx = rnd.nextInt(points.length); System.out.println("Меняю точку на индексе " + idx); points[idx].setX(100 + rnd.nextInt(10)); points[idx].setY(100 + rnd.nextInt(10)); } for (int i = 0; i < points.length; i++) { if (points[i].wasChanged()) { System.out.println(print(points[i]) + " изменилась"); } else { System.out.println(print(points[i]) + " не изменилась"); } } </div> <div class='task_desc'> В результате запуска программы должно быть выведено сообщение: </div> <div class='check_single preformatted'>Должно измениться: 3 из 6 точек Меняю точку на индексе 0 Меняю точку на индексе 2 Меняю точку на индексе 4 (108.0 | 101.0) изменилась (3.0 | 4.0) не изменилась (109.0 | 101.0) изменилась (7.0 | 8.0) не изменилась (100.0 | 100.0) изменилась (11.0 | 12.0) не изменилась </div> <div class='task_desc'> Попробуйте изменить значение переменной seed и посмотрите как изменится результат. </div> </div> <div id='task5304' class='task_block'> <div class='task_id'>5304</div> <h3>Задача</h3> <h4>Реализуйте сеттер для поля angle</h4> <ol start='1'><li>Убедитесь, что вы реализовали класс Direction и метод print из задачи <a href="tasks 23.html#task6791" target="_blank">ЛР23#6791(открыть в новой вкладке)</a></li><li>Реализуйте метод setAngle, который принимает действительное число - угол в градусах и записывает его в поле angle</li><li>Если угол меньше 0, нужно прибавлять 360 до тех пор, пока он не станет больше 0. Итоговое значение должно быть записано в поле angle</li><li>Если угол больше 360, нужно вычитать 360 до тех пор, пока он не станет меньше 360. Итоговое значение должно быть записано в поле angle</li><li>Конструктор класса Direction должен работать так же как и метод setAngle</li></ol><div class='task_desc'> Сигнатура метода setAngle: </div> <div class='check_single preformatted'>public void setAngle(double newAngle) {</div> <div class='task_desc'> В методе main класса Program добавьте следующий код: </div> <div class='check_single preformatted'>Direction base = new Direction(15, 99); base.setAngle(-100); System.out.println(print(base)); base.setAngle(-360); System.out.println(print(base)); base.setAngle(-400); System.out.println(print(base)); base.setAngle(-2000); System.out.println(print(base)); Direction dir = new Direction(-2000, 666); System.out.println(print(dir)); System.out.println("------------"); base.setAngle(45); System.out.println(print(base)); base.setAngle(360); System.out.println(print(base)); base.setAngle(400); System.out.println(print(base)); base.setAngle(3000); System.out.println(print(base)); dir = new Direction(3000, 666); System.out.println(print(dir)); System.out.println("------------"); base.setAngle(0); System.out.println(print(base)); </div> <div class='task_desc'> В результате запуска программы должно быть выведено сообщение: </div> <div class='check_single preformatted'>Угол 260,0000 проложение 99,0000 Угол 0,0000 проложение 99,0000 Угол 320,0000 проложение 99,0000 Угол 160,0000 проложение 99,0000 Угол 160,0000 проложение 666,0000 ------------ Угол 45,0000 проложение 99,0000 Угол 0,0000 проложение 99,0000 Угол 40,0000 проложение 99,0000 Угол 120,0000 проложение 99,0000 Угол 120,0000 проложение 666,0000 ------------ Угол 0,0000 проложение 99,0000 </div> </div> <div id='task2165' class='task_block'> <div class='task_id'>2165</div> <h3>Задача</h3> <h4>Реализуйте сеттер для поля distance</h4> <ol start='1'><li>Убедитесь, что вы реализовали класс Direction и метод print из задачи <a href="tasks 23.html#task6791" target="_blank">ЛР23#6791(открыть в новой вкладке)</a></li><li>Реализуйте метод setDistance, который принимает действительное число и записывает его в поле distance</li><li>Если расстояние меньше 0, то нужно также изменить угол поворота на 180 градусов</li><li>Конструктор класса Direction должен работать так же как и метод setDistance</li></ol><div class='task_desc'> Сигнатура метода setDistance: </div> <div class='check_single preformatted'>public void setDistance(double newDistance) {</div> <div class='task_desc'> В методе main класса Program добавьте следующий код: </div> <div class='check_single preformatted'>Direction base = new Direction(15, 99); base.setDistance(666); System.out.println(print(base)); base.setDistance(-1111); System.out.println(print(base)); base = new Direction(200, 99); base.setDistance(-22222); System.out.println(print(base)); base.setDistance(0); System.out.println(print(base)); Direction dir = new Direction(50, -666); System.out.println(print(dir)); dir = new Direction(2000, -1111); System.out.println(print(dir)); </div> <div class='task_desc'> В результате запуска программы должно быть выведено сообщение: </div> <div class='check_single preformatted'>Угол 15,0000 проложение 666,0000 Угол 195,0000 проложение 1111,0000 Угол 20,0000 проложение 22222,0000 Угол 20,0000 проложение 0,0000 Угол 230,0000 проложение 666,0000 Угол 20,0000 проложение 1111,0000 </div> </div> <div id='task1168' class='task_block'> <div class='task_id'>1168</div> <h3>Задача</h3> <h4>Реализуйте статический метод AreSame для сравнения экземпляров класса Direction</h4> <ol start='1'><li>Убедитесь, что вы реализовали класс Direction и метод print из задачи <a href="tasks 23.html#task6791" target="_blank">ЛР23#6791(открыть в новой вкладке)</a></li><li>Убедитесь, что вы реализовали метод setAngle из задачи <a href="tasks 24.html#task5304" target="_blank">ЛР24#5304(открыть в новой вкладке)</a></li><li>Убедитесь, что вы реализовали метод setDistance из задачи <a href="tasks 24.html#task2165" target="_blank">ЛР24#2165(открыть в новой вкладке)</a></li><li>Реализуйте статический метод areSame.</li><li>Два направления считаются одинаковыми, если они имеют одинаковые углы и расстояния.</li></ol><div class='task_desc'> В методе main класса Program добавьте следующий код: </div> <div class='check_single preformatted'>Direction first = new Direction(53.1301, 5); Direction second = new Direction(53.1301, 5); if (areSame(first, second)) { System.out.printf("ПРАВИЛЬНО: Проложения равны %s\n", print(first)); } else { System.out.printf("НЕ ПРАВИЛЬНО: Проложения %s и %s не равны\n", print(first), print(second)); } if (first == second) { System.out.println("Это сообщение не должно быть выведено"); } else { System.out.println("ПРАВИЛЬНО: Переменные a и b не равны, хотя значения проложений равны"); } first.setAngle(-100); second.setAngle(260); if (areSame(first, second)) { System.out.printf("ПРАВИЛЬНО: Проложения равны %s\n", print(first)); } else { System.out.printf("НЕ ПРАВИЛЬНО: Проложения %s и %s не равны\n", print(first), print(second)); } first.setDistance(-100); second = new Direction(80, -5); if (areSame(first, second)) { System.out.printf("ПРАВИЛЬНО: Проложения равны %s\n", print(first)); } else { System.out.printf("НЕ ПРАВИЛЬНО: Проложения %s и %s не равны\n", print(first), print(second)); } first = new Direction(20, 100); second = new Direction(-160, -100); if (areSame(first, second)) { System.out.printf("ПРАВИЛЬНО: Проложения равны %s\n", print(first)); } else { System.out.printf("НЕ ПРАВИЛЬНО: Проложения %s и %s не равны\n", print(first), print(second)); } </div> <div class='task_desc'> В результате запуска программы должно быть выведено сообщение: </div> <div class='check_single preformatted'>ПРАВИЛЬНО: Проложения равны Угол 53,1301 проложение 5,0000 ПРАВИЛЬНО: Переменные a и b не равны, хотя значения проложений равны ПРАВИЛЬНО: Проложения равны Угол 260,0000 проложение 5,0000 НЕ ПРАВИЛЬНО: Проложения Угол 80,0000 проложение 100,0000 и Угол 260,0000 проложение 5,0000 не равны ПРАВИЛЬНО: Проложения равны Угол 20,0000 проложение 100,0000 </div> </div> <div id='task5755' class='task_block'> <div class='task_id'>5755</div> <h3>Задача</h3> <h4>Реализуйте сеттер для поля volume и temperature</h4> <ol start='1'><li>Убедитесь, что вы реализовали класс LiquidPortion из задачи <a href="tasks 23.html#task7380" target="_blank">ЛР23#7380(открыть в новой вкладке)</a></li><li>Реализуйте метод setVolume, который принимает действительное число и записывает его в поле volume</li><li>Если переданное значение меньше нуля, метод должен выбросить исключение IllegalArgumentException</li><li>Реализуйте метод setTemperature, который принимает действительное число и записывает его в поле temperature</li><li>Если переданное значение меньше -273.15, метод должен выбросить исключение IllegalArgumentException</li></ol><div class='task_desc'> В методе main класса Program добавьте следующий код: </div> <div class='check_single preformatted'>LiquidPortion base = new LiquidPortion(99, 19); base.setVolume(20); System.out.printf("Объем емкости: %.4f л Температура смеси: %.4f °C\n", base.volume, base.temperature); base.setVolume(0); System.out.printf("Объем емкости: %.4f л Температура смеси: %.4f °C\n", base.volume, base.temperature); try { base.setVolume(-50); System.out.println("Это сообщение не должно быть выведено, потому что объем должен быть неотрицательным"); } catch (IllegalArgumentException e) { System.out.println("Ожидалось сообщение : Объем должен быть неотрицательным"); System.out.println("Фактическое сообщение: " + e.getMessage()); } base.setTemperature(100); System.out.printf("Объем емкости: %.4f л Температура смеси: %.4f °C\n", base.volume, base.temperature); try { base.setTemperature(-274); System.out.println("Это сообщение не должно быть выведено, потому что температура должна быть выше абсолютного нуля (-273.15)"); } catch (IllegalArgumentException e) { System.out.println("Ожидалось сообщение : Температура должна быть выше абсолютного нуля (-273.15)"); System.out.println("Фактическое сообщение: " + e.getMessage()); } base.setTemperature(-50); System.out.printf("Объем емкости: %.4f л Температура смеси: %.4f °C\n", base.volume, base.temperature); base.setTemperature(0); System.out.printf("Объем емкости: %.4f л Температура смеси: %.4f °C\n", base.volume, base.temperature); try { base.setTemperature(-1000); System.out.println("Это сообщение не должно быть выведено, потому что температура должна быть выше абсолютного нуля (-273.15)"); } catch (IllegalArgumentException e) { System.out.println("Ожидалось сообщение : Температура должна быть выше абсолютного нуля (-273.15)"); System.out.println("Фактическое сообщение: " + e.getMessage()); } </div> <div class='task_desc'> В результате запуска программы должно быть выведено сообщение: </div> <div class='check_single preformatted'>Объем емкости: 20,0000 л Температура смеси: 19,0000 °C Объем емкости: 0,0000 л Температура смеси: 19,0000 °C Ожидалось сообщение : Объем должен быть неотрицательным Фактическое сообщение: Объем должен быть неотрицательным Объем емкости: 0,0000 л Температура смеси: 100,0000 °C Ожидалось сообщение : Температура должна быть выше абсолютного нуля (-273.15) Фактическое сообщение: Температура должна быть выше абсолютного нуля (-273.15) Объем емкости: 0,0000 л Температура смеси: -50,0000 °C Объем емкости: 0,0000 л Температура смеси: 0,0000 °C Ожидалось сообщение : Температура должна быть выше абсолютного нуля (-273.15) Фактическое сообщение: Температура должна быть выше абсолютного нуля (-273.15) </div> </div> <div id='task3759' class='task_block'> <div class='task_id'>3759</div> <h3>Задача</h3> <ol start='1'><li>Убедитесь, что вы реализовали класс Force из задачи <a href="tasks 23.html#task8225" target="_blank">ЛР23#8225(открыть в новой вкладке)</a></li><li>Реализуйте метод getModule, который ничего не принимает и возвращает модуль вектора силы.</li><li>Значение вычисляется по формуле: <formula>a<sub>mod</sub>=<sqrt><val>x<sub>a</sub><sup>2</sup> * y<sub>a</sub><sup>2</sup></val></sqrt></formula></li></ol><div class='task_desc'> Сигнатура метода getModule: </div> <div class='check_single preformatted'>public double getModule() {</div> <div class='task_desc'> В методе main класса Program добавьте следующий код: </div> <div class='check_single preformatted'>Force force = new Force(10, 0, 40); double module = force.getModule(); System.out.println("Для силы " + print(force) + " модуль равен " + module); force = new Force(0, 15, 40); module = force.getModule(); System.out.println("Для силы " + print(force) + " модуль равен " + module); force = new Force(0, 0, 40); module = force.getModule(); System.out.println("Для силы " + print(force) + " модуль равен " + module); force = new Force(11, 13, 40); module = force.getModule(); System.out.println("Для силы " + print(force) + " модуль равен " + module); </div> <div class='task_desc'> В результате запуска программы должно быть выведено сообщение: </div> <div class='check_single preformatted'>Для силы (10,00|0,00)->40,00 модуль равен 10.0 Для силы (0,00|15,00)->40,00 модуль равен 15.0 Для силы (0,00|0,00)->40,00 модуль равен 0.0 Для силы (11,00|13,00)->40,00 модуль равен 17.029386365926403 </div> </div> <div id='task2896' class='task_block'> <div class='task_id'>2896</div> <h3>Задача</h3> <h4>Реализуйте класс ReverseCounter</h4> <ol start='1'><li>В папке с исходным кодом создайте класс ReverseCounter.</li><li>Объявите поле для целых чисел с названием current.</li><li>Реализуйте конструктор, инициализирующий поле current. Если значение аргумента меньше 0, то выбросите исключение IllegalArgumentException.</li><li>Создайте нестатический метод tick.</li><li>Метод tick не принимает аргументов и возвращает целое число.</li><li>В теле метода, если значение current больше 0, то уменьшите значение поля current на 1 и верните получившееся значение current.</li><li>Если значение current равно 0, тогда просто верните значение current.</li></ol><div class='task_desc'> В методе main класса Program добавьте следующий код: </div> <div class='check_single preformatted'>ReverseCounter counter = new ReverseCounter(4); int current = counter.tick(); System.out.println(current); current = counter.tick(); System.out.println(current); current = counter.tick(); System.out.println(current); current = counter.tick(); System.out.println(current); System.out.println(counter.tick()); System.out.println(counter.tick()); System.out.println("-----------"); counter = new ReverseCounter(0); System.out.println(counter.tick()); try { new ReverseCounter(-1); System.out.println("Это сообщение не должно быть выведено"); } catch (IllegalArgumentException e) { System.out.println("Ожидалось сообщение : Начальное значение должно быть больше 0"); System.out.println("Фактическое сообщение: " + e.getMessage()); } </div> <div class='task_desc'> В результате запуска программы должно быть выведено сообщение: </div> <div class='check_single preformatted'>3 2 1 0 0 0 ----------- 0 Ожидалось сообщение : Начальное значение должно быть больше 0 Фактическое сообщение: Начальное значение должно быть больше 0 </div> </div> <div id='task5032' class='task_block'> <div class='task_id'>5032</div> <h3>Задача</h3> <div class='task_desc'> Дан прямоугольник с координатами x = 100, y = 100, width = 100, height = 100. Исходный файл содержит список действий над ним в формате CSV (<a href='https://ru.wikipedia.org/wiki/CSV' target='_blank'>справка в новой вкладке</a>) с разделителем ";". Каждое действие описывается на отдельной строчке: наименование и необходимые значения. Нужно посчитать количество обработанных действий, а также получившиеся координаты и размеры прямоугольника. Действия описываются в следующем формате: </div> <ol start='1'><li>Переместить по горизонтали. Наименование shiftX. Значение - целое число, указывает насколько изменится координата прямоугольника по оси Х. Ширина прямоугольника остается прежней.</li><li>Переместить по вертикали. Наименование shiftY. Значение - целое число, указывает насколько изменится координата прямоугольника по оси Y. Высота прямоугольника остается прежней.</li><li>Изменить ширину. Наименование stretchX. Значение - целое число, указывает насколько изменится ширина прямоугольника. Координата верхнего-левого угла при этом не меняется.</li><li>Изменить высоту. Наименование stretchY. Значение - целое число, указывает насколько изменится высота прямоугольника. Координата верхнего-левого угла при этом не меняется.</li></ol><div class='task_desc'> При попытке совершить некорректное действие, вывести количество корректных действий, сообщение об ошибке и прекратить обработку. Ответ вывести в html-файл. Ответ должен содержать количество действий, описание ошибки и два прямоугольника: красный показывает исходное состояние прямоугольника, черный - последнее корректное состояние. Шаблон для печати прямоугольника: </div> <div class='check_single preformatted'><rect x="$x" y="$y" width="$width" height="$height" fill="transparent" stroke="$color"></rect></div> <div class='task_desc'> Перед прямоугольниками нужно написать: "<svg width="500" height="350">", а после них - "</svg>" </div> <table class='check_values_v2'> <tr><th>Номер теста</th><th>Исходные данные (filename)</th><th>Результат</th></tr> <tr><td>1</td><td><a href="files/task5032/test1.csv" target="_blank">скачать test1.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test1.csv</div> <div>Действий: 1</div><svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="113" y="100" width="100" height="100" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>2</td><td><a href="files/task5032/test2.csv" target="_blank">скачать test2.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test2.csv</div> <div>Действий: 1</div><svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="100" y="117" width="100" height="100" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>3</td><td><a href="files/task5032/test3.csv" target="_blank">скачать test3.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test3.csv</div> <div>Действий: 1</div><svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="100" y="100" width="119" height="100" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>4</td><td><a href="files/task5032/test4.csv" target="_blank">скачать test4.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test4.csv</div> <div>Действий: 1</div><svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="100" y="100" width="100" height="123" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>5</td><td><a href="files/task5032/test5.csv" target="_blank">скачать test5.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test5.csv</div> <div>Действий: 5</div><svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="120" y="120" width="110" height="150" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>6</td><td><a href="files/task5032/test6.csv" target="_blank">скачать test6.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test6.csv</div> <div>Действий: 2</div><div>Ошибка: Координата Y должна быть неотрицательной</div> <svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="110" y="80" width="100" height="100" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>7</td><td><a href="files/task5032/test7.csv" target="_blank">скачать test7.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test7.csv</div> <div>Действий: 11</div><div>Ошибка: Координата X должна быть неотрицательной</div> <svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="10" y="80" width="100" height="120" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>8</td><td><a href="files/task5032/test8.csv" target="_blank">скачать test8.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test8.csv</div> <div>Действий: 8</div><div>Ошибка: Высота должна быть положительной</div> <svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="130" y="120" width="50" height="60" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>9</td><td><a href="files/task5032/test9.csv" target="_blank">скачать test9.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test9.csv</div> <div>Действий: 2</div><div>Ошибка: Ширина должна быть положительной</div> <svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="100" y="120" width="110" height="100" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>10</td><td><a href="files/task5032/test10.csv" target="_blank">скачать test10.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test10.csv</div> <div>Действий: 80</div><svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="66" y="183" width="388" height="159" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>11</td><td><a href="files/task5032/test11.csv" target="_blank">скачать test11.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test11.csv</div> <div>Файл не найден \files\task5032\test11.csv</div> </td></tr> <tr><td>12</td><td><a href="files/task5032/test12.csv" target="_blank">скачать test12.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test12.csv</div> <div>Действий: 3</div> <div>Некорректное действие: stretchH</div> <div>Последнее корректное состояние:</div> <svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="100" y="100" width="80" height="120" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>13</td><td><a href="files/task5032/test13.csv" target="_blank">скачать test13.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test13.csv</div> <div>Действий: 4</div> <div>Ошибка: Некорректный формат</div> <div>Последнее корректное состояние:</div> <svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="100" y="120" width="95" height="120" fill="transparent" stroke="black"></rect> </svg> </td></tr> <tr><td>14</td><td><a href="files/task5032/test14.csv" target="_blank">скачать test14.csv</a></td><td class='preformatted'><div>Читаю данные из файла \files\task5032\test14.csv</div> <div>Действий: 2</div> <div>Ошибка: Некорректный формат</div> <div>Последнее корректное состояние:</div> <svg width="500" height="350"> <rect x="100" y="100" width="100" height="100" fill="transparent" stroke="red"></rect> <rect x="150" y="115" width="100" height="100" fill="transparent" stroke="black"></rect> </svg> </td></tr> </table> </div> <div id='task3567' class='task_block'> <div class='task_id'>3567</div> <h3>Задача</h3> <div class='task_desc'> Дан круг с координатами центра cx = 150, cy = 150, r = 50. Исходный файл содержит список действий над ним в формате CSV (<a href='https://ru.wikipedia.org/wiki/CSV' target='_blank'>справка в новой вкладке</a>) с разделителем ";". Каждое действие описывается на отдельной строчке: наименование и необходимые значения. Нужно вывести на экран количество обработанных действий, а также получившиеся координаты и размеры круга. Действия описываются в следующем формате: </div> <ol start='1'><li>Переместить по горизонтали. Наименование shiftX. Значение - целое число, указывает насколько изменится координата круга по оси Х. Ширина круга остается прежней.</li><li>Переместить по вертикали. Наименование shiftY. Значение - целое число, указывает насколько изменится координата круга по оси Y. Высота круга остается прежней.</li><li>Изменить ширину. Наименование stretchX. Значение - целое число, указывает насколько изменится ширина круга (dw). При этом координаты центра x, y и радиус изменятся на dw/2.</li><li>Изменить высоту. Наименование stretchY. Значение - целое число, указывает насколько изменится ширина круга (dw). При этом координаты центра x, y и радиус изменятся на dw/2.</li></ol><div class='task_desc'> При попытке совершить некорректное действие, вывести количество корректных действий, сообщение об ошибке и прекратить обработку. Ответ вывести в html-файл. Ответ должен содержать количество действий, описание ошибки и два прямоугольника: красный показывает исходное состояние прямоугольника, черный - последнее корректное состояние. </div> <table class='check_values_v2'> <tr><th>Номер теста</th><th>Исходные данные (filename)</th><th>Результат</th></tr> <tr><td>1</td><td><a href="files/task3567/test1.csv" target="_blank">скачать test1.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test1.csv</div> <div>Действий: 2</div><div>Результат:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='240' cy='250' r='100' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>2</td><td><a href="files/task3567/test2.csv" target="_blank">скачать test2.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test2.csv</div> <div>Действий: 1</div><div>Результат:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='200' cy='200' r='150' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>3</td><td><a href="files/task3567/test3.csv" target="_blank">скачать test3.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test3.csv</div> <div>Действий: 1</div><div>Результат:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='175' cy='175' r='125' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>4</td><td><a href="files/task3567/test4.csv" target="_blank">скачать test4.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test4.csv</div> <div>Действий: 2</div><div>Результат:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='225' cy='125' r='75' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>5</td><td><a href="files/task3567/test5.csv" target="_blank">скачать test5.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test5.csv</div> <div>Действий: 3</div><div>Результат:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='165' cy='165' r='115' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>6</td><td><a href="files/task3567/test6.csv" target="_blank">скачать test6.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test6.csv</div> <p>Действий: 1</div><div>Ошибка: Верхняя точка круга должна иметь неотрицательные координаты</div><div>Последнее корректное состояние:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='170' cy='150' r='100' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>7</td><td><a href="files/task3567/test7.csv" target="_blank">скачать test7.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test7.csv</div> <p>Действий: 2</div><div>Ошибка: Левая точка круга должна иметь неотрицательные координаты</div><div>Последнее корректное состояние:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='140' cy='150' r='90' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>8</td><td><a href="files/task3567/test8.csv" target="_blank">скачать test8.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test8.csv</div> <p>Действий: 0</div><div>Ошибка: Ширина должна быть положительной</div><div>Последнее корректное состояние:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='150' cy='150' r='100' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>9</td><td><a href="files/task3567/test9.csv" target="_blank">скачать test9.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test9.csv</div> <p>Действий: 1</div><div>Ошибка: Ширина должна быть положительной</div><div>Последнее корректное состояние:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='155' cy='155' r='105' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>10</td><td><a href="files/task3567/test10.csv" target="_blank">скачать test10.csv</a></td><td class='preformatted'>Файл не существует </td></tr> <tr><td>11</td><td><a href="files/task3567/test11.csv" target="_blank">скачать test11.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test11.csv</div> <div>Действий: 37</div><div>Результат:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='170' cy='186' r='132' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>12</td><td><a href="files/task3567/test12.csv" target="_blank">скачать test12.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test12.csv</div> <p>Действий: 2</div><div>Ошибка: Некорректное действие: shitfX</div><div>Последнее корректное состояние:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='210' cy='175' r='125' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>13</td><td><a href="files/task3567/test13.csv" target="_blank">скачать test13.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test13.csv</div> <p>Действий: 0</div><div>Ошибка: Некорректный формат</div><div>Последнее корректное состояние:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='150' cy='150' r='100' fill='transparent' stroke='black'/></svg> </td></tr> <tr><td>14</td><td><a href="files/task3567/test14.csv" target="_blank">скачать test14.csv</a></td><td class='preformatted'><div>Читаю файл: files/task3567/test14.csv</div> <p>Действий: 1</div><div>Ошибка: Некорректный формат</div><div>Последнее корректное состояние:</div><svg width="500" height="500"><circle cx='150' cy='150' r='100' fill='transparent' stroke='red'/><circle cx='153' cy='153' r='103' fill='transparent' stroke='black'/></svg> </td></tr> </table> </div> Версия 20240202. Подборка задач, выбор порядка подачи и подготовка тестовых данных - Крюков Александр, Омск 2013-2026. <a href='https://github.com/AKryukov92/programming-basics'>Основной репозиторий</a></body></html>