java задачи для обучения

Практические задачи по Java — для курсов и прочих занятий

Практические задачи по Java — для курсов и прочих занятий

Несколько вводных слов

Последние несколько лет я читаю курс по программированию на Java. Со временем он менялся — то добавлялись, то выкидывались разные части, менялась последовательность тем, менялся подход к построению плана самих занятий, и так далее. То есть, курс совершенствовался. Одной из основных проблем, возникших при подготовке курса — это задачи. О них и пойдёт речь.

Дело в том, что каждое моё занятие состоит из двух частей. На первой я выступаю в роли лектора — рассказываю с примерами кода о какой-то новой теме (классы, наследование, дженерики и так далее). Вторая часть — практическая. Очевидно, что нет смысла просто рассуждать о программировании, надо программировать. Приоритет на занятиях — решение задач, то есть программирование чего-то как-то. Программирование на занятиях отличается от программирования дома, так как на занятиях можно задать вопрос, показать код, получить быструю оценку кода, комментарии по улучшению, исправлению написанного. Очень легко было найти задачи для самых первых занятий. Задачи на циклы, условные операторы, и ООП (к примеру, написать класс «Собака» или класс «Вектор»). Сервисы вроде leetcode позволяют даже проверить правильность решения таких задач сразу, онлайн. Но какие задачи дать студентам на занятии, которое было посвящено коллекциям? Потокам? А аннотациям? За несколько лет я придумал, или переработал несколько таких задач, и эта статья, по сути, является сборником этих задач (к некоторым задачам прилагается решение).

Конечно, все задачи уже где-то появлялись. Однако, эта статья ориентирована на преподавателей курсов по программированию (для языков, похожих на Java, большинство задач подойдёт), или тех, кто преподаёт программирование частным образом. Эти задачи можно использовать «из коробки» на своих занятиях. Изучающие Java тоже могут попробовать решать их. Но такие решения требуют сторонней проверки и оценки.

Некоторые самые простые задачи, которые уже десятилетия все используют, я тоже включил в эту статью. Пожалуй, для того, чтобы не начинать сразу с абстрактных классов.

Любые идеи и пожелания приветствуются!

Список задач

Основы

1.0. Максимальное, минимальное и среднее значение
1.1 Сортировка массива
1.2 Поиск простых чисел
1.3 Удаление из массива

Основы ООП

2.0 Проектирование и создание класса, описывающего вектор
2.1 Генерация случайного элемента с весом
2.2 Связный список

Рекурсия

3.0 Двоичный поиск
3.1 Найти корень уравнения
3.2 Бинарное дерево поиска

Наследование

4.0 Реализовать иерархию классов, описывающую трёхмерные фигуры
4.1 Реализовать иерархию классов, описывающую трёхмерные фигуры — 2
4.2 Реализовать иерархию классов, описывающую трёхмерные фигуры — 3
4.3 Реализовать иерархию классов, описывающую трёхмерные фигуры — 4

Строки

5.0 Частотный словарь букв

Абстрактные классы и интерфейсы

6.0. Конвертер температур
6.1. Stringbuilder с поддержкой операции undo
6.2. Stringbuilder с возможностью отслеживания состояния (паттерн наблюдатель)
6.4. Заполнение массива с помощью Function

Коллекции

7.0. Частотный словарь слов
7.1. Коллекция без дубликатов
7.2. ArrayList и LinkedList
7.3. Написать итератор по массиву
7.4. Написать итератор по двумерному массиву
7.5. Ещё более сложный итератор
7.6. Итератор по двум итераторам
7.7. Подсчёт элементов
7.8. Поменять ключи и значения в Map

Многопоточность

8.0. Состояния
8.1. Синхронизация потоков
8.2. Производитель-потребительt

Аннотации

9.0. Своя аннотация — создание и использование с помощью reflection

Итоговые и прочие задания

10.0. Количество дорожных ограничений
10.1. Поиск по Википедии. В консольной программе
10.2. Итоговое задание — консольная утилита для скачивания файлов по HTTP
10.3. Итоговое задание — погодный Telegram-бот
10.4. Итоговое задание — распознавание рукописных цифр

Основы

1.0. Максимальное, минимальное и среднее значение

Заполните массив случайным числами и выведете максимальное, минимальное и среднее значение.

Для генерации случайного числа используйте метод Math.random(), который возвращает значение в промежутке [0, 1].

1.1. Реализуйте алгоритм сортировки пузырьком для сортировки массива

1.2. Поиск простых чисел

Напишите программу, которая выводит на консоль простые числа в промежутке от [2, 100].
Используйте для решения этой задачи оператор «%» (остаток от деления) и циклы.

Или, используя циклы с метками:

1.3. Удаление из массива

Дан массив целых чисел и ещё одно целое число. Удалите все вхождения этого числа из массива (пропусков быть не должно).

Можно написать метод для «отрезания хвоста» массива и самостоятельно, но стоит отметить, что стандартный метод будет работать быстрее:

Впрочем, если идти таким путём, то можно сначала создать массив нужной длины, а потом уже заполнить его:

2.0. Проектирование и создание класса, описывающего вектор

Создайте класс, который описывает вектор (в трёхмерном пространстве).

У него должны быть:

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

Использовать этот класс можно так:

Это решение можно обобщить и написать класс Vector для произвольной размерности:

2.1. Генерация случайного элемента с весом

Напишите класс, конструктор которого принимает два массива: массив значений и массив весов значений.
Класс должен содержать метод, который будет возвращать элемент из первого массива случайным образом, с учётом его веса.
Пример:
Дан массив [1, 2, 3], и массив весов [1, 2, 10].
В среднем, значение «1» должно возвращаться в 2 раза реже, чем значение «2» и в десять раз реже, чем значение «3».

Но, так как массив ranges отсортирован, то можно (и нужно) использовать бинарный поиск:

Есть ещё один вариант решения этой задачи. Можно создать массив, размер которого равен сумме всех весов. Тогда выбор случайного элемента сводится к генерации случайного индекса. То есть, если дан массив значений [1, 2, 3], и массив весов [1, 2, 10], то можно сразу создать массив [1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] и извлекать из него случайный элемент:

У этого решения есть преимущество — время извлечения случайного элемента O(1), в отличии от log(n) в предыдущем решении. Однако требует много памяти:

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

2.2. Связный список

Еще одна задача, которую я часто даю — реализация связного списка. Её можно давать в самом простом виде (реализовать только add() и get()), а можно попросить реализовать java.util.List.
Я не буду подробно на этом останавливаться, много статей о реализации связного списка на Java есть на Хабре, к примеру эта:
Структуры данных в картинках. LinkedList

3.0. Двоичный поиск

Напишите метод, который проверяет, входит ли в массив заданный элемент или нет.
Используйте перебор и двоичный поиск для решения этой задачи.
Сравните время выполнения обоих решений для больших массивов (например, 100000000 элементов).
Решение:

3.1. Найти корень уравнения

Найдите корень уравнения

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

на отрезке [0; 10] с точностью по x не хуже, чем 0.001. Известно, что на этом промежутке корень единственный.
Используйте для этого метод деления отрезка пополам (и рекурсию).

Замечание: если мы хотим добиться нужной точности не по x, по y, то условие в методе следует переписать:

Маленькая хитрость: учитывая, что множество значений double конечно (есть два соседних значения, между которыми нет ни одного значения double), условие выхода из рекурсии переписать так:

Таким образом получим максимальную точность, которую вообще можно получить, используя этот подход.

3.2. Бинарное дерево поиска

Реализация бинарного дерева поиска — отличная задача. Я обычно даю её, когда заходит разговор про рекурсию.
Об этом я тоже много писать не буду, есть много статей/реализаций самого разного вида:
Структуры данных: бинарные деревья.
Бинарное дерево, быстрая реализация
Реализация на Java хешированного бинарного дерева

Наследование

4.0. Реализовать иерархию классов, описывающую трёхмерные фигуры

Реализуйте иерархию классов:

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения
Класс Box является контейнером, он можем содержать в себе другие фигуры. Метод add() принимает на вход Shape. Нужно добавлять новые фигуры до тех пор, пока для них хватаем места в Box (будем считать только объём, игнорируя форму. Допустим, мы переливаем жидкость). Если места для добавления новой фигуры не хватает, то метод должен вернуть false.

Чтобы к этой задаче не возвращаться, далее описывается еще несколько вариаций этой задачи.

4.1. Реализовать иерархию классов, описывающую трёхмерные фигуры — 2

Реализуйте ту же иерархию классов, но сделав некоторые классы абстрактными.

4.2. Реализовать иерархию классов, описывающую трёхмерные фигуры — 3

Реализуйте ту же иерархию классов, но использовав интерфейсы.
Дополнительно, студентам предлагается реализовать интерфейс Comparable.

4.3. Реализовать иерархию классов, описывающую трёхмерные фигуры — 4

Добавьте в иерархию классов фигуру вращения для произвольной функции. Вычислять объём можно приближенное с помощью определённого интеграла. Так как объём фигуры вращения вокруг оси x это

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

java задачи для обучения. Смотреть фото java задачи для обучения. Смотреть картинку java задачи для обучения. Картинка про java задачи для обучения. Фото java задачи для обучения

То можно написать реализацию метода прямоугольников:

Конечно, мы не учитываем точность вычислений здесь, и не подбираем количество разбиений для достижения необходимой точности, но это задача на программирование, а не численные методы, так что на занятиях мы это опускаем.

Строки

Можно найти очень много задач на строки. Я обычно даю такие:

Из более интересных мне нравится эта:

5.0. Частотный словарь букв русского (или английского) алфавита.

Постройте частотный словарь букв русского (или английского) алфавита. Опустим проблему выбора и анализа корпуса языка, достаточно будет взять текст небольшой длины).

Абстрактные классы и интерфейсы

6.0. Конвертер температур

Напишите класс BaseConverter для конвертации из градусов по Цельсию в
Кельвины​, ​Фаренгейты​, и так далее. У метода должен быть метод convert, который
и делает конвертацию.

Дополнительно можно попросить реализовать фабричный метод, как-то так:

6.1. Stringbuilder с поддержкой операции undo

Напишите свой класс StringBuilder с поддержкой операции undo. Для этого делегируйте все методы стандартному StringBuilder, а в собственном классе храните список всех операций для выполнения undo(). Это будет реализацией шаблона «Команда».

6.2. Stringbuilder с возможностью отслеживания состояния (паттерн наблюдатель)

Напишите свой класс StringBuilder, с возможностью оповещения других объектов об изменении своего состояния. Для этого делегируйте все методы стандартному StringBuilder, а в собственном классе реализуйте шаблон проектирования «Наблюдатель».

6.3. Фильтр

Напишите​ метод​ filter,​ который​ принимает​ на​ вход​ массив​ (любого​ типа)​ и реализацию​ ​интерфейса Filter​ c методом​ apply(Object​ o),​ чтобы​ убрать​ из​ массива лишнее.
Проверьте как он работает на строках или других объектах.

Решение:
Обычно, я даю эту задачу еще до Generics, поэтому студенты пишут метод без них, используя Object:

Но, можно и с Generics. Тогда можно использовать стандартный Function:

6.4. Заполнение массива

Задача, немного похожая на предыдущую:
Напишите метод fill, который принимает массив объектов, и реализацию интерфейса Function (или своего).
Метод fill должен заполнить массив, получая новое значение по индексу с помощью реализации интерфейса Function. То есть, использовать его хочется так:

Коллекции

7.0. Частотный словарь слов

см. Задачу про частотный словарь букв алфавита

7.1. Коллекция без дубликатов

Напишите метод, который на вход получает коллекцию объектов, а возвращает коллекцию уже без дубликатов.

7.2. ArrayList и LinkedList

Напишите метод, который добавляет 1000000 элементов в ArrayList и LinkedList. Напишите еще один метод, который выбирает из заполненного списка элемент наугад 100000 раз. Замерьте время, которое потрачено на это. Сравните результаты и предположите, почему они именно такие.

7.3. Написать итератор по массиву

7.4. Итератор по двумерному массиву

Напишите итератор по двумерному массиву.

7.5. Ещё более сложный итератор

Мне нравится эта задача. До неё доходит всего несколько студентов в группе, которые сравнительно легко справляются с предыдущими задачи.

Дан итератор. Метод next() возвращает либо String, либо итератор такой же структуры (то есть который опять возвращает или String, или такой же итератор). Напишите поверх этого итератора другой, уже «плоский».

7.6. Итератор по двум итераторам

Напишите итератор, который проходит по двум итератором.

7.7. Подсчёт элементов

7.8. Поменять ключи и значения в Map

Напишите метод, который получает на вход Map и возвращает Map, где ключи и значения поменяны местами. Так как значения могут совпадать, то тип значения в Map будет уже не K, а

Многопоточность

8.0. Состояния

Выведете состояние потока перед его запуском​, после запуска и во время выполнения.

Добавим WAITING и BLOCKED:

Для TIMED_WAITING немного изменим тот же код:

8.1. Синхронизация потоков

Напишите программу, в которой создаются два потока, которые выводят на консоль своё имя по очереди.

8.2. Производитель-потребитель

Одна из классических задач по многопоточности. Дано два потока — производитель и потребитель. Производитель генерирует некоторые данные (в примере — числа). Производитель «потребляет» их.
Два потока разделяют общий буфер данных, размер которого ограничен. Если буфер пуст, потребитель должен ждать, пока там появятся данные. Если буфер заполнен полностью, производитель должен ждать, пока потребитель заберёт данные и место освободится.

9.0. Своя аннотация — создание и использование

Эту задачу я обычно даю, когда речь заходит про аннотации и reflection. Заодно, можно рассказать про Executors, ThreadPoolExecutor и другие.

Создайте свою аннотацию Repeat с целочисленным параметром.
Расширьте класс ​ ThreadPoolExecutor​​ и переопределите метод ​execute следующим образом: если экземпляр Runnable имеет аннотацию Repeat, то его метод run выполняется несколько раз (количество задается параметром в Repeat).

То есть, написав такой класс:

Итоговые и прочие задания

В течение курса я даю студентам несколько сложных задач — на целое занятие. Требуется написать небольшую программу, используя ранее изученное. Кстати, тут часто возникает сложность. Решение задач, сводящихся к написанию одного метода — это одно, а придумать алгоритм, вспомнить всё, что изучали ранее и еще и написать сразу 50 строк на Java — совсем другое. Но на занятии я могу подталкивать их в нужном направлении, помогаю решать проблемы, дебажить, находить нужные классы и методы, и так далее. Несколько таких задач описаны ниже. В таком виде я и даю их своим студентам.

Кроме того, в конце курса все должны выполнить итоговое задание. То есть дома, самостоятельно, написать программу. Еще немного более сложную. Я даю возможность выбрать один из нескольких вариантов. Кстати, интересный факт — необходимо написать минимум одну программу, а можно написать сразу несколько. Кажется, я помню только одного человека, кто написал больше одной.

10.0. Количество дорожных ограничений

Небольшая задача, которая демонстрирует, как можно приложить Java к решению практических задач.

Подготовка данных:
С портала открытых данных Санкт-Петербурга загружаем данные об ограничении движения транспорта на период производства работ в формате csv.

Требуется определить, сколько дорожных ограничений действовало в городе на определенную дату.

Программа в качестве аргумент получает два параметра:

Необходимо вывести количество действовавших ограничений движения транспорта на эту дату.

Решение я тут не привожу, их может быть много разных и каждое надо смотреть индивидуально.

10.1. Поиск по Википедии. В консольной программе

Эту задачу тоже можно разбить на несколько этапов:

Генерация запроса
API предоставляет возможность делать поисковые запросы, без ключей. Вот таким, примерно, образом:

Вы можете открыть эту ссылку в браузере, и посмотреть на результат запроса.
Однако, чтобы запрос прошел удачно, следует убрать из ссылки недопустимые символы, то есть сделать Percent-encoding, он же URL Encoding.
Для этого в Java можно воспользоваться статическим методом encode в классе URLEncoder, вот так:

Вот и всё, URL готов! Осталось теперь сделать запрос к серверу…

Запрос к серверу
Для GET и POST запросов можно воспользоваться классом HttpURLConnection. Это самое простое. Просто создать, открыть соединение и получить InputStream. Нам его даже не надо читать, за нас это сделает Gson.
Ещё можно использовать retrofit, или что-то подобное.

Подготовка к обработке ответа
Сервер возвращает данные в формате JSON.
Но нам его не надо парсить вручную, для этого есть библиотека Gson от Google.
Примеры есть тут:
https://github.com/google/gson
https://habrahabr.ru/company/naumen/blog/228279/

Если остаётся время, можно написать получение статьи, выбранной при поиске и так далее.

10.2. Итоговое задание — консольная утилита для скачивания файлов по HTTP

Консольная утилита для скачивания файлов по HTTP… звучит знакомо? Да, это оно и есть — История одного тестового задания. Всё логично — итоговое задание курса по Java такого же уровня, как и тестовое задание на должность Junior Java разработчика.
И это действительно хорошая задача — несложная, но охватывает самые разные темы. И сразу видно, насколько автор структурирует код, использует разные подходы и паттерны, использует сам язык и стандартную библиотеку.

10.3. Итоговое задание — погодный Telegram-бот

Напишите бота для Telegram, который будет:

Эта задача скорее на умение и способность разобраться в новой технологии (bot-api) и разных библиотеках. А еще настроить VPN надо! И код написать придётся, само собой.

Кстати, интересный факт — большинство студентов игнорируют словосочетание «присланное местоположение» и наличие возможности его отправки. Они пишут бота, который ожидает название города. Я не знаю почему. Это часто работает плохо, код становится немного сложнее, но они продолжают это делать.

10.4. Итоговое задание — распознавание рукописных цифр

Реализовать программу для классификации рукописных цифр.
Эта задача уже больше ориентирована на реализацию алгоритма, умение разбираться в таковых. Обычно код у студентов получается не очень структурированный.

Описание задачи
В качестве исследуемого набора данных будет использоваться база изображений рукописных цифр MNIST. Изображения в данной базе имеют разрешение 28×28 и хранятся в виде набора значений оттенков серого. Вся база разбита на две части: тренировочную, состоящую из 50000 изображений, и тестовую — 10000 изображений.

Для решения этой задачи предлагается реализовать метод k ближайших соседей — метрический алгоритм для автоматической классификации объектов. Основным принципом метода ближайших соседей является то, что объект присваивается тому классу, который является наиболее распространённым среди соседей данного элемента.
Соседи берутся исходя из множества объектов, классы которых уже известны, и, исходя из ключевого для данного метода значения k рассчитывается, какой класс наиболее многочислен среди них. В качестве расстояния между объектами можно использовать Евклидову метрику, то есть привычное нам расстояние между точками в пространстве.

Необходимо написать программу, которая будет распознавать рукописные цифры. Должна быть возможность инициализировать некий класс данными для обучения и предоставить метод для распознавания одного изображения.

Кроме самой реализации алгоритма, следует написать код для проверки его точности (посчитать error rate). Для этого следует использовать 10000 тестовых изображений.
Кроме вычисления точности предлагается провести эксперимент: вместо евклидовой метрики использовать расстояние городских кварталов, угол между векторами или что-то еще, и проверить качество распознавания.

Если всё хорошо работает, то можно ещё немного усложнить задание. Добавив, к примеру, отсев шума (выбросов) или использование метода Парзеновского окна для повышения точности.

Источник

Практические задачи по Java — для курсов и прочих занятий

Практические задачи по Java — для курсов и прочих занятий

Несколько вводных слов

Последние несколько лет я читаю курс по программированию на Java. Со временем он менялся — то добавлялись, то выкидывались разные части, менялась последовательность тем, менялся подход к построению плана самих занятий, и так далее. То есть, курс совершенствовался. Одной из основных проблем, возникших при подготовке курса — это задачи. О них и пойдёт речь.

Дело в том, что каждое моё занятие состоит из двух частей. На первой я выступаю в роли лектора — рассказываю с примерами кода о какой-то новой теме (классы, наследование, дженерики и так далее). Вторая часть — практическая. Очевидно, что нет смысла просто рассуждать о программировании, надо программировать. Приоритет на занятиях — решение задач, то есть программирование чего-то как-то. Программирование на занятиях отличается от программирования дома, так как на занятиях можно задать вопрос, показать код, получить быструю оценку кода, комментарии по улучшению, исправлению написанного. Очень легко было найти задачи для самых первых занятий. Задачи на циклы, условные операторы, и ООП (к примеру, написать класс «Собака» или класс «Вектор»). Сервисы вроде leetcode позволяют даже проверить правильность решения таких задач сразу, онлайн. Но какие задачи дать студентам на занятии, которое было посвящено коллекциям? Потокам? А аннотациям? За несколько лет я придумал, или переработал несколько таких задач, и эта статья, по сути, является сборником этих задач (к некоторым задачам прилагается решение).

Конечно, все задачи уже где-то появлялись. Однако, эта статья ориентирована на преподавателей курсов по программированию (для языков, похожих на Java, большинство задач подойдёт), или тех, кто преподаёт программирование частным образом. Эти задачи можно использовать «из коробки» на своих занятиях. Изучающие Java тоже могут попробовать решать их. Но такие решения требуют сторонней проверки и оценки.

Некоторые самые простые задачи, которые уже десятилетия все используют, я тоже включил в эту статью. Пожалуй, для того, чтобы не начинать сразу с абстрактных классов.

Источник

Базовое программирование на Java: упражнения, практика, решение

Базовые упражнения Java [150 упражнений с решением]

[ Внизу страницы доступен редактор для написания и выполнения сценариев. ]

1. Напишите программу на Java, которая напечатает «Hello» на экране, а затем напечатайте свое имя в отдельной строке. Перейти к редактору
Ожидаемый результат :
Привет
Александра Абрамова

2. Напишите программу на Java для вывода суммы двух чисел. Перейти к редактору
Тестовые данные:
74 + 36
Ожидаемый результат :
110

3. Напишите программу на Java, чтобы разделить два числа и напечатать на экране. Перейти к редактору
Тестовые данные:
50/3
Ожидаемый результат :
16

5. Напишите программу Java, которая принимает два числа в качестве входных данных и отображает произведение двух чисел. Перейти к редактору
Тестовые данные:
Введите первое число: 25
Введите второе число: 5
Ожидаемый результат :
25 х 5 = 125

7. Напишите программу на Java, которая принимает число в качестве входных данных и печатает свою таблицу умножения до 10. Перейти к редактору
Тестовые данные:
Введите число: 8
Ожидаемый результат :
8 х 1 = 8
8 х 2 = 16
8 х 3 = 24
.
8 х 10 = 80

8. Напишите программу на Java для отображения следующего шаблона. Перейти к редактору
Образец шаблона:

11. Напишите Java-программу для печати области и периметра круга. Перейти к редактору
Тестовые данные:
Радиус = 7,5
Ожидаемый результат
Периметр = 47.12388980384689
Площадь = 176.71458676442586

12. Напишите программу на Java, которая принимает три числа в качестве входных данных для вычисления и печати среднего числа. Перейти к редактору
Нажмите меня, чтобы увидеть решение

13. Напишите Java-программу для печати площади и периметра прямоугольника. Перейти к редактору
Тестовые данные:
Ширина = 5,5 Высота = 8,5

Ожидаемый результат
Площадь 5,6 * 8,5 = 47,60
Периметр 2 * (5,6 + 8,5) = 28,20

14. Напишите Java-программу для печати американского флага на экране. Перейти к редактору
Ожидаемый результат

15. Напишите программу на Java для замены двух переменных. Перейти к редактору
Нажмите меня, чтобы увидеть решение

16. Напишите программу на Java для печати лица. Перейти к редактору
Ожидаемый результат

17. Напишите программу на Java, чтобы добавить два двоичных числа. Перейти к редактору
Входные данные:
Введите первое двоичное число: 10
Введите второе двоичное число: 11
Ожидаемый результат

18. Напишите программу на Java для умножения двух двоичных чисел. Перейти к редактору
Входные данные:
Введите первое двоичное число: 10
Введите второе двоичное число: 11
Ожидаемый результат

19. Напишите программу на Java для преобразования десятичного числа в двоичное число. Перейти к редактору
Входные данные:
Введите десятичное число: 5
Ожидаемый результат

20. Напишите Java-программу для преобразования десятичного числа в шестнадцатеричное число. Перейти к редактору
Входные данные:
Введите десятичное число: 15
Ожидаемый результат

21. Напишите программу на Java для преобразования десятичного числа в восьмеричное число. Перейти к редактору
Входные данные:
Введите десятичное число: 15
Ожидаемый результат

22. Напишите программу на Java для преобразования двоичного числа в десятичное число. Перейти к редактору
Входные данные:
Введите двоичное число: 100
Ожидаемый результат

23. Напишите программу на Java для преобразования двоичного числа в шестнадцатеричное число. Перейти к редактору
Входные данные:
Введите двоичное число: 1101
Ожидаемый результат

24. Напишите программу на Java для преобразования двоичного числа в восьмеричное число. Перейти к редактору
Входные данные:
Введите двоичное число: 111
Ожидаемый результат

25. Напишите программу на Java для преобразования восьмеричного числа в десятичное число. Перейти к редактору
Входные данные:
Введите любое восьмеричное число: 10
Ожидаемый результат

26. Напишите программу на Java для преобразования восьмеричного числа в двоичное число. Перейти к редактору
Входные данные:
Введите любое восьмеричное число: 7
Ожидаемый результат

27. Напишите программу на Java для преобразования восьмеричного числа в шестнадцатеричное число. Перейти к редактору
Входные данные:
Введите восьмеричное число: 100
Ожидаемый результат

28. Напишите программу на Java для преобразования шестнадцатеричного числа в десятичное число. Перейти к редактору
Входные данные:
Введите шестнадцатеричное число: 25
Ожидаемый результат

29. Напишите программу на Java для преобразования шестнадцатеричного числа в двоичное число. Перейти к редактору
Входные данные:
Введите шестнадцатеричное число: 37
Ожидаемый результат

30. Напишите программу на Java для преобразования шестнадцатеричного числа в восьмеричное число. Перейти к редактору
Входные данные:
Введите шестнадцатеричное число: 40
Ожидаемый результат

31. Напишите программу на Java, чтобы проверить, установлена ли Java на вашем компьютере. Перейти к редактору
Ожидаемый результат

32. Напишите программу на Java для сравнения двух чисел. Перейти к редактору
Входные данные:
Введите первое целое число: 25
Введите второе целое число: 39
Ожидаемый результат

33. Напишите программу на Java и вычислите сумму цифр целого числа. Перейти к редактору
Входные данные:
Введите целое число: 25
Ожидаемый результат

37. Напишите программу на Java для обращения строки. Перейти к редактору
Входные данные:
Введите строку: быстрый коричневый лис
Ожидаемый результат

38. Напишите программу на Java для подсчета букв, пробелов, чисел и других символов входной строки. Перейти к редактору
Ожидаемый результат

39. Напишите программу на Java для создания и отображения уникального трехзначного числа, используя 1, 2, 3, 4. Также подсчитайте, сколько существует трехзначных чисел. Перейти к редактору
Ожидаемый результат

40. Напишите программу на Java, чтобы перечислить доступные наборы символов в объектах charset. Перейти к редактору
Ожидаемый результат

41. Напишите программу на Java для печати значения ascii данного символа. Перейти к редактору
Ожидаемый результат

42. Напишите программу на Java для ввода и отображения вашего пароля. Перейти к редактору
Ожидаемый результат

43. Напишите программу на Java для печати следующей строки в определенном формате (см. Вывод). Перейти к редактору
Пример вывода

44. Напишите программу на Java, которая принимает целое число (n) и вычисляет значение n + nn + nnn. Перейти к редактору
Пример вывода:

45. Напишите программу на Java, чтобы найти размер указанного файла. Перейти к редактору
Пример вывода:

46. Напишите программу на Java для отображения системного времени. Перейти к редактору
Пример вывода:

47. Напишите программу на Java для отображения текущей даты и времени в определенном формате. Перейти к редактору
Пример вывода:

48. Напишите программу на Java для печати нечетных чисел от 1 до 99. Печатает по одному числу в строке. Перейти к редактору
Пример вывода:

49. Напишите программу на Java, которая принимает число и проверяет, является ли число четным или нет. Печатает 1, если число четное, или 0, если число нечетное. Перейти к редактору
Пример вывода:

50. Напишите программу на Java для печати чисел от 1 до 100, которые делятся на 3, 5 и оба. Перейти к редактору
Пример вывода:

51. Напишите программу на Java для преобразования строки в целое число в Java. Перейти к редактору
Пример вывода:

52. Напишите программу на Java для вычисления суммы двух целых чисел и верните true, если сумма равна третьему целому числу. Перейти к редактору
Пример вывода:

53. Напишите программу на Java, которая принимает три целых числа от пользователя и возвращает true, если второе число больше первого числа, а третье число больше второго числа. Если «abc» истинно, второе число не должно быть больше первого числа. Перейти к редактору
Пример вывода:

54. Напишите программу на Java, которая принимает три целых числа от пользователя и возвращает true, если два или более из них (целые числа) имеют одинаковую самую правую цифру. Целые числа неотрицательны. Перейти к редактору
Пример вывода:

55. Напишите программу на Java для преобразования секунд в часы, минуты и секунды. Перейти к редактору
Пример вывода:

56. Напишите программу на Java, чтобы найти число целых чисел в диапазоне двух указанных чисел, которые делятся на другое число. Перейти к редактору
Например, x = 5, y = 20 и p = 3, найдите количество целых чисел в диапазоне x..y, которые делятся на p, т. Е.
Пример вывода:

57. Напишите программу на Java, которая принимает целое число и подсчитывает множители числа. Перейти к редактору
Пример вывода:

58. Напишите программу на Java, которая будет использовать первую букву каждого слова в предложении. Перейти к редактору
Пример вывода:

59. Напишите программу на Java для преобразования заданной строки в строчные. Перейти к редактору
Пример вывода:

60. Напишите программу на Java, чтобы найти предпоследнее (рядом с последним) слово предложения. Перейти к редактору
Пример вывода:

61. Напишите программу на Java, чтобы перевернуть слово. Перейти к редактору
Пример вывода:

62. Напишите программу на Java, которая принимает три целочисленных значения и возвращает true, если одно из них равно 20 или больше и меньше вычитаний других. Перейти к редактору
Пример вывода:

63. Напишите программу на Java, которая принимает два целочисленных значения от пользователя и возвращает большие значения. Однако, если два значения одинаковы, вернуть 0 и вернуть меньшее значение, если два значения имеют одинаковый остаток при делении на 6. Перейти к редактору
Пример вывода:

64. Напишите программу на Java, которая принимает два целых числа от 25 до 75 и возвращает true, если в обоих числах есть общая цифра. Перейти к редактору
Пример вывода:

65. Напишите программу на Java для вычисления модулей двух чисел без использования встроенного оператора модуля. Перейти к редактору
Пример вывода:

66. Напишите программу на Java для вычисления суммы первых 100 простых чисел. Перейти к редактору
Пример вывода:

67. Напишите программу на Java для вставки слова в середину другой строки. Перейти к редактору
Вставить «Учебник» в середине «Python 3.0», поэтому результатом будет Python Tutorial 3.0
Пример вывода:

68. Напишите программу на Java для создания новой строки из 4 копий последних 3 символов исходной строки. Длина исходной строки должна быть от 3 и выше. Перейти к редактору
Пример вывода:

69. Напишите программу на Java для извлечения первой половины строки четной длины. Перейти к редактору
Тестовые данные: Python
Пример вывода:

70. Напишите программу на Java для создания строки в виде short_string + long_string + short_string из двух строк. Строки не должны иметь одинаковую длину. Перейти к редактору
Тестовые данные: Str1 = Python
Str2 = учебник
Пример вывода:

71. Напишите программу на Java для создания объединения двух строк, за исключением удаления первого символа каждой строки. Длина строк должна быть от 1 и выше. Перейти к редактору
Тестовые данные: Str1 = Python
Str2 = учебник
Пример вывода:

72. Напишите программу на Java для создания новой строки, в которой первые три символа взяты из данной строки. Если длина данной строки меньше 3, используйте «#» в качестве заменяющих символов. Перейти к редактору
Тестовые данные: Str1 = «»
Пример вывода:

73. Напишите программу на Java для создания новой строки, содержащей первые и последние символы из двух заданных строк. Если длина одной из строк равна 0, используйте «#» для пропущенного символа. Перейти к редактору
Тестовые данные: str1 = «Python»
str2 = «»
Пример вывода:

78. Напишите программу на Java, чтобы проверить, что данный массив целых чисел длины 2 содержит 4 или 7. Перейти к редактору
Пример вывода:

79. Напишите программу на Java, чтобы вращать массив (длина 3) целых чисел в левом направлении. Перейти к редактору
Пример вывода:

80. Напишите программу на Java, чтобы получить большее значение между первым и последним элементом массива (длина 3) целых чисел. Перейти к редактору
Пример вывода:

81. Напишите программу на Java, чтобы поменять местами первый и последний элементы массива (длина должна быть не менее 1) и создать новый массив. Перейти к редактору
Пример вывода:

82. Напишите программу на Java, чтобы найти самый большой элемент между первым, последним и средним значениями из массива целых чисел (четной длины). Перейти к редактору
Пример вывода:

83. Напишите программу на Java, чтобы умножить соответствующие элементы двух массивов целых чисел. Перейти к редактору
Пример вывода:

84. Напишите программу на Java, которая берет последние три символа из заданной строки и добавляет эти три символа в начале и в конце строки. Длина строки должна быть больше трех и более. Перейти к редактору
Тестовые данные: «Python» будет «honPythonhon»
Пример вывода:

85. Напишите программу на Java, чтобы проверить, начинается ли строка с указанного слова. Перейти к редактору
Пример данных: string1 = «Привет, как дела?»
Пример вывода:

86. Напишите Java-программу, начинающуюся с целого числа n, разделите n на 2, если n четное, или умножьте на 3, и добавьте 1, если n нечетное, повторяйте процесс до n = 1. Перейти к редактору

87. Напишите программу на Java, затем прочитайте целое число, вычислите сумму его цифр и напишите номер каждой цифры суммы на английском языке. Перейти к редактору

88. Напишите программу на Java, чтобы получить текущую системную среду и системные свойства. Перейти к редактору
Нажмите меня, чтобы увидеть решение

89. Напишите программу на Java, чтобы проверить, был ли менеджер безопасности уже установлен для текущего приложения или нет. Перейти к редактору
Нажмите меня, чтобы увидеть решение

90. Напишите программу на Java, чтобы получить значение переменной среды PATH, TEMP, USERNAME. Перейти к редактору
Нажмите меня, чтобы увидеть решение

91. Напишите программу на Java, чтобы измерить, сколько времени занимает выполнение кода в наносекундах. Перейти к редактору
Нажмите меня, чтобы увидеть решение

92. Напишите программу на Java для подсчета количества четных и нечетных элементов в данном массиве целых чисел. Перейти к редактору
Нажмите меня, чтобы увидеть решение

93. Напишите программу на Java, чтобы проверить, содержит ли массив целых чисел элемент 10 рядом с 10 или элемент 20 рядом с 20, но не оба. Перейти к редактору
Нажмите меня, чтобы увидеть решение

94. Напишите программу на Java, чтобы переставить все элементы заданного массива целых чисел так, чтобы все нечетные числа предшествовали всем четным числам. Перейти к редактору
Нажмите меня, чтобы увидеть решение

96. Напишите программу на Java, чтобы проверить, есть ли 10 в данном массиве целых чисел с 20 где-то позже в массиве. Перейти к редактору
Нажмите меня, чтобы увидеть решение

97. Напишите программу на Java, чтобы проверить, содержит ли массив целых чисел заданное число рядом друг с другом или есть два одинаковых заданных числа, разделенных одним элементом. Перейти к редактору
Нажмите меня, чтобы увидеть решение

98. Напишите программу на Java, чтобы проверить, появляется ли значение 20 три раза и нет ли 20 рядом друг с другом в данном массиве целых чисел. Перейти к редактору
Нажмите меня, чтобы увидеть решение

99. Напишите программу на Java, чтобы проверить, присутствует ли указанное число в каждой паре смежных элементов данного массива целых чисел. Перейти к редактору
Нажмите меня, чтобы увидеть решение

100. Напишите программу на Java для подсчета двух элементов, отличающихся на 1 или менее от двух заданных массивов целых чисел одинаковой длины. Перейти к редактору
Нажмите меня, чтобы увидеть решение

101. Напишите программу на Java, чтобы проверить, больше ли число 10, чем число до 20 в данном массиве целых чисел. Перейти к редактору
Нажмите меня, чтобы увидеть решение

102. Напишите программу на Java, чтобы проверить, содержит ли указанный массив целых чисел 10 или 30. Перейти к редактору
Нажмите меня, чтобы увидеть решение

103. Напишите Java-программу для создания нового массива из заданного массива целых чисел, новый массив будет содержать элементы из данного массива после последнего значения элемента 10. Перейти к редактору
Нажмите меня, чтобы увидеть решение

104. Напишите Java-программу для создания нового массива из заданного массива целых чисел, новый массив будет содержать элементы из данного массива до значения последнего элемента 10. Перейти к редактору
Нажмите меня, чтобы увидеть решение

105. Напишите программу на Java, чтобы проверить, совпадают ли группы чисел (l) в начале и конце данного массива. Перейти к редактору
Нажмите меня, чтобы увидеть решение

106. Напишите программу на Java для создания нового массива, смещенного влево от заданного массива целых чисел. Перейти к редактору
Нажмите меня, чтобы увидеть решение

107. Напишите программу на Java, чтобы проверить, содержит ли массив целых трех возрастающих смежных чисел. Перейти к редактору
Нажмите меня, чтобы увидеть решение

108. Напишите программу на Java для добавления всех цифр заданного положительного целого числа, пока результат не будет иметь одну цифру. Перейти к редактору
Нажмите меня, чтобы увидеть решение

109. Напишите программу на Java, чтобы сформировать лестничную форму из n монет, где каждая k-я строка должна иметь ровно k монет. Перейти к редактору
Нажмите меня, чтобы увидеть решение

110. Напишите программу на Java, чтобы проверить, является ли данное целое число степенью 4 или нет. Перейти к редактору
Если задано num = 64, верните true. Если задано num = 6, вернуть false.
Нажмите меня, чтобы увидеть решение

111. Напишите программу на Java для добавления двух чисел без использования арифметических операторов. Перейти к редактору
Учитывая х = 10 и у = 12; результат = 22
Нажмите меня, чтобы увидеть решение

112. Напишите Java-программу для вычисления числа конечных нулей в факториале. Перейти к редактору
7! = 5040, поэтому на выходе должно быть 1
Нажмите меня, чтобы увидеть решение

113. Напишите программу на Java для объединения двух заданных отсортированных массивов целых чисел и создания нового отсортированного массива. Перейти к редактору
массив1 = [1,2,3,4]
массив2 = [2,5,7, 8]
результат = [1,2,2,3,4,5,7,8]
Нажмите меня, чтобы увидеть решение

114. Напишите Java-программу с заданной строкой и смещением, поверните строку по смещению (поверните слева направо). Перейти к редактору
Нажмите меня, чтобы увидеть решение

116. Напишите программу на Java, которая перебирает целые числа от 1 до 100. Для кратных трех выведите «Fizz» вместо числа и напечатайте «Buzz» для кратных пяти. Когда число делится на три и пять, выведите «fizz buzz». Перейти к редактору
Нажмите меня, чтобы увидеть решение

117. Напишите программу на Java для вычисления квадратного корня заданного целого числа. Перейти к редактору
Введите положительное целое число: 25
Квадратный корень из 25: 5
Нажмите меня, чтобы увидеть решение

118. Напишите программу на Java, чтобы получить первое вхождение (позиция начинается с 0.) строки в данной строке. Перейти к редактору
Нажмите меня, чтобы увидеть решение

119. Напишите программу на Java, чтобы получить первое вхождение (позиция начинается с 0.) элемента данного массива. Перейти к редактору
Нажмите меня, чтобы увидеть решение

120. Напишите программу на Java, которая ищет значение в матрице mxn. Перейти к редактору
Нажмите меня, чтобы увидеть решение

123. Напишите программу на Java, чтобы найти подмассив с наименьшей суммой из заданного массива целых чисел. Перейти к редактору
Нажмите меня, чтобы увидеть решение

125. Напишите программу на Java, чтобы получить предварительный обход значений ее узлов заданного двоичного дерева. Перейти к редактору
Пример:
Ожидаемый результат: 10 20 40 50 30
Нажмите меня, чтобы увидеть решение

126. Напишите Java-программу для получения обхода значений ее узлов заданного двоичного дерева. Перейти к редактору
Пример: <10, 20, 30, 40, 50>
Выход: 40 20 50 10 30
Нажмите меня, чтобы увидеть решение

127. Напишите Java-программу для получения обхода Postorder значений его узлов заданного двоичного дерева. Перейти к редактору
Нажмите меня, чтобы увидеть решение

128. Напишите программу на Java для вычисления медианы заданного несортированного массива целых чисел. Перейти к редактору
Пример: <10,2,38,23,38,23,21>
Выход: 23
Нажмите меня, чтобы увидеть решение

129. Напишите программу на Java, чтобы найти число, которое встречается только один раз в данном массиве целых чисел, все числа встречаются дважды. Перейти к редактору
Source Array: [10, 20, 10, 20, 30, 40, 40, 30, 50] 50 появляется только один раз
Нажмите меня, чтобы увидеть решение

130. Напишите программу на Java, чтобы найти максимальную глубину заданного двоичного дерева. Перейти к редактору
Пример вывода: Максимальная глубина двоичного дерева: 3
Нажмите меня, чтобы увидеть решение

131. Напишите программу на Java, чтобы найти новую длину заданного отсортированного массива, в котором каждый элемент появляется только один раз (удалите дубликаты). Перейти к редактору
Исходный массив: [1, 1, 2, 3, 3, 3, 4, 5, 6, 7, 7] Длина исходного массива: 11. После удаления дубликатов новая длина массива: 7
Нажмите меня, чтобы увидеть решение

132. Напишите программу на Java, чтобы найти новую длину заданного отсортированного массива, в котором дублирующиеся элементы появлялись не более двух раз. Перейти к редактору
Исходный массив: [1, 1, 2, 3, 3, 3, 4, 5, 6, 7, 7, 7, 7]
Длина исходного массива: 13
После удаления дубликатов новая длина массива: 10
Нажмите меня, чтобы увидеть решение

133. Напишите программу на Java, чтобы найти путь сверху вниз в правом направлении, который минимизирует сумму всех чисел вдоль ее пути. Перейти к редактору
Примечание: двигайтесь вниз или вправо в любой момент времени.
Пример вывода: сумма всех чисел по пути: 13
Нажмите меня, чтобы увидеть решение

134. Напишите программу на Java, чтобы найти отличные способы подняться на вершину (n шагов, чтобы добраться до вершины) лестницы. Каждый раз вы можете подняться на 1 или 2 шага. Перейти к редактору
Пример: n = 5
а) 1 + 1 + 1 + 1 + 1 = 5 б) 1 + 1 + 1 + 2 = 5 в) 1 + 2 + 2 = 5 д) 2 + 2 + 1 = 5 д) 2 + 1 + 1 + 1 = 5 е) 2 + 1 + 2 = 5 г) 1 + 2 + 1 + 1 = 5 ч) 1 + 1 + 2 + 1 = 5
Пример вывода: Различными способами вы можете подняться на вершину: 8
Нажмите меня, чтобы увидеть решение

135. Напишите Java-программу для удаления дубликатов из отсортированного связанного списка. Перейти к редактору
Исходный список с дублирующимися элементами:
12-> 12-> 13-> 14-> 15-> 15-> 16-> 17-> 17
После удаления дубликатов из указанного списка:
12-> 13-> 14-> 15-> 16-> 17
Нажмите меня, чтобы увидеть решение

136. Напишите программу на Java, чтобы найти возможные уникальные пути от верхнего левого угла до правого нижнего угла данной сетки (mxn). Перейти к редактору
Примечание: вы можете двигаться вниз или вправо в любой момент времени.
Пример вывода: Уникальные пути из левого верхнего угла в правый нижний угол указанной сетки: 3
Нажмите меня, чтобы увидеть решение

137. Напишите программу на Java, чтобы найти возможные уникальные пути, учитывающие некоторые препятствия, от верхнего левого угла до правого нижнего угла данной сетки (mxn). Перейти к редактору
Примечание: Вы можете двигаться вниз или вправо в любой момент времени, и препятствие и пустое пространство помечаются как 1 и 0 соответственно в сетке.
Пример сетки:
int [] [] tactcle_Grid = <
<0, 0, 0>,
<0, 1, 0>,
<0, 0, 0>,
>;
Пример вывода: Уникальные пути из верхнего левого угла в правый нижний угол указанной сетки (с учетом некоторых препятствий): 2
Нажмите меня, чтобы увидеть решение

138. Напишите программу на Java, чтобы найти все самое длинное слово в данном словаре. Перейти к редактору
Пример-1:
<
«кошка»,
«флаг»,
«Зеленый»,
«страна»,
«W3resource»
>
Результат: «w3resource»
Пример-2:
<
«кошка»,
«собака»,
«Красный»,
«является»,
«Я»
>
Результат: «кот», «собака», «рыжий»
Нажмите меня, чтобы увидеть решение

140. Напишите программу на Java для объединения всех перекрывающихся интервалов из заданного набора интервалов. Перейти к редактору
Пример вывода: 1 6
8 10
15 20
Нажмите меня, чтобы увидеть решение

141. Напишите программу на Java, чтобы проверить, содержит ли данная строка все уникальные символы. Перейти к редактору
Пример вывода: Исходная строка: xyyz
В строке есть все уникальные символы: false
Нажмите меня, чтобы увидеть решение

143. Напишите программу на Java для объединения двух заданных отсортированных списков. Перейти к редактору
Пример вывода:
Объединить два отсортированных списка T:
1 2 3 7 9 13 40
Нажмите меня, чтобы увидеть решение

144. Напишите программу на Java, чтобы удалить все вхождения указанного значения в заданном массиве целых чисел и вернуть новую длину массива. Перейти к редактору
Пример вывода:
Исходный массив: [1, 4, 6, 7, 6, 2]
Длина нового массива: 4
Нажмите меня, чтобы увидеть решение

145. Напишите Java-программу для удаления n-го элемента из конца данного списка. Перейти к редактору
Пример вывода:
Исходный узел:
1 2 3 4 5
После удаления 2-го элемента с конца:
1 2 3 5
Нажмите меня, чтобы увидеть решение

146. Напишите программу на Java для преобразования отсортированного массива в двоичное дерево поиска. Поддерживать минимальную высоту дерева. Перейти к редактору
Пример вывода:
2
1
4
6
5
3
Нажмите меня, чтобы увидеть решение

147. Напишите программу на Java, чтобы найти число битов, необходимое для переворачивания, чтобы преобразовать два заданных целых числа. Перейти к редактору
Пример вывода:
2
Нажмите меня, чтобы увидеть решение

148. Напишите программу на Java, чтобы найти индекс первого уникального символа в данной строке, предположим, что в строке есть хотя бы один уникальный символ. Перейти к редактору
Пример вывода:
Исходная строка: ресурс
Первый уникальный персонаж из вышеперечисленного: 0
Нажмите меня, чтобы увидеть решение

149. Напишите программу на Java, чтобы проверить, является ли данная строка перестановкой другой данной строки. Перейти к редактору
Пример вывода:
Оригинальные строки: xxyz yxzx
правда
Нажмите меня, чтобы увидеть решение

150. Напишите программу на Java, чтобы проверить, является ли двоичное дерево поддеревом другого двоичного дерева. Перейти к редактору
Пример вывода:
Оригинальные строки: xxyz yxzx
правда
Нажмите меня, чтобы увидеть решение

Редактор кода Java:

Не отправляйте решение вышеупомянутых упражнений здесь, если вы хотите внести вклад, перейдите на соответствующую страницу упражнения.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *