551 lines
36 KiB
Markdown
551 lines
36 KiB
Markdown
---
|
||
gitea: none
|
||
include_toc: true
|
||
---
|
||
|
||
# Тесты к курсу «Введение в программирование»
|
||
|
||
[Условия домашних заданий](https://www.kgeorgiy.info/courses/prog-intro/homeworks.html)
|
||
|
||
<!--
|
||
## Домашнее задание 14. Обработка ошибок
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Класс `ExpressionParser` должен реализовывать интерфейс
|
||
[ListParser](java/expression/exceptions/ListParser.java).
|
||
* Результат разбора должен реализовывать интерфейс
|
||
[ListExpression](java/expression/ListExpression.java).
|
||
* Нельзя использовать типы `long` и `double`
|
||
* Нельзя использовать методы классов `Math` и `StrictMath`
|
||
* [Исходный код тестов](java/expression/exceptions/ExceptionsTest.java)
|
||
* Первый аргумент: `easy` или `hard`
|
||
* Последующие аргументы: модификации
|
||
* *3637* Дополнительно реализуйте бинарные операции (максимальный приоритет):
|
||
* `**` – возведение в степень, `2 ** 3` равно 8;
|
||
* `//` – логарифм, `10 // 2` равно 3.
|
||
* *3839* Дополнительно реализуйте
|
||
* бинарные операции (максимальный приоритет):
|
||
* `**` – возведение в степень, `2 ** 3` равно 8;
|
||
* `//` – логарифм, `10 // 2` равно 3.
|
||
* унарные операции:
|
||
* `log₂` – логарифм по основанию 2, `log₂ 10` равно 3;
|
||
* `pow₂` – два в степени, `pow₂ 4` равно 16.
|
||
* *3435* Дополнительно реализуйте унарные операции:
|
||
* `log₂` – логарифм по основанию 2, `log₂ 10` равно 3;
|
||
* `pow₂` – два в степени, `pow₂ 4` равно 16.
|
||
* *3233*
|
||
* Дополнительно реализуйте унарные операции:
|
||
* `low` – младший установленный бит, `low 123456` равно 64;
|
||
* `high` – старший установленный бит, `high 123456` равно 65536.
|
||
|
||
|
||
## Домашнее задание 13. Разбор выражений
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Класс `ExpressionParser` должен реализовывать интерфейс
|
||
[ListParser](java/expression/parser/ListParser.java)
|
||
* Результат разбора должен реализовывать интерфейс
|
||
[ListExpression](java/expression/ListExpression.java)
|
||
* [Исходный код тестов](java/expression/parser/ParserTest.java)
|
||
* Первый аргумент: `easy` или `hard`
|
||
* Последующие аргументы: модификации
|
||
* *3637*. Дополнительно реализуйте:
|
||
* бинарные операции (минимальный приоритет):
|
||
* `min` – минимум, `2 min 3` равно 2;
|
||
* `max` – максимум, `2 max 3` равно 3.
|
||
* унарную операцию
|
||
`reverse` – число с переставленными цифрами,
|
||
`reverse -12345` равно `-54321`.
|
||
* *3839*. * Дополнительно реализуйте:
|
||
* бинарные операции (минимальный приоритет):
|
||
* `min` – минимум, `2 min 3` равно 2;
|
||
* `max` – максимум, `2 max 3` равно 3;
|
||
* унарные операции
|
||
* `reverse` – число с переставленными цифрами,
|
||
`reverse -12345` равно `-54321`;
|
||
* `digits` – сумма цифр числа, `digits -12345` равно 15.
|
||
* *3435*
|
||
* унарные операции
|
||
* `floor` – округление вниз до числа кратного 1000,
|
||
`floor 1234` равно 1000;
|
||
* `ceiling` – округление вверх до числа кратного 1000,
|
||
`ceiling 1234` равно 2000.
|
||
* бинарные операции (минимальный приоритет):
|
||
* `set` – установка бита, `2 set 3` равно 10;
|
||
* `clear` – сброс бита, `10 clear 3` равно 2.
|
||
* *3233*. Дополнительно реализуйте унарные операции
|
||
* `floor` – округление вниз до числа кратного 1000,
|
||
`floor 1234` равно 1000;
|
||
* `ceiling` – округление вверх до числа кратного 1000,
|
||
`ceiling 1234` равно 2000.
|
||
|
||
## Домашнее задание 12. Выражения
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Реализуйте интерфейс [Expression](java/expression/Expression.java)
|
||
* [Исходный код тестов](java/expression/ExpressionTest.java)
|
||
* Первый аргумент: `easy` или `hard`
|
||
* Последующие аргументы: модификации
|
||
* *Triple* (32-39)
|
||
* Дополнительно реализуйте поддержку выражений с тремя переменными: `x`, `y` и `z`.
|
||
* Например, для `expr = new Subtract(new Add(new Variable("x"), new Variable("y")), new Const(1))`:
|
||
* `expr.evaluate(2, 3, 5)` должно быть равно 4;
|
||
* `expr.toString()` должно быть равно `((x + y) - 1)`.
|
||
* Интерфейс/тесты [TripleExpression](java/expression/TripleExpression.java).
|
||
* *BigIntegerList* (36, 37). Дополнительно реализуйте поддержку вычисления
|
||
выражений в типе `BigInteger` с позиционными переменными.
|
||
* Конструктор позиционной переменной получает индекс переменной.
|
||
* При выводе позиционная переменная должна иметь вид `$index`.
|
||
* Метод вычисления выражения должен называться `evaluateBi`,
|
||
ему передаётся список значений переменных.
|
||
* Например, для `expr = new Subtract(new Add(new Variable(0), new Variable(1)), new Const(BigInteger.ONE))`:
|
||
* `expr.evaluateBi(List.of(BigInteger.TWO, BigInteger.THREE))` должно быть равно 4;
|
||
* `expr.toString()` должно быть равно `(($0 + $1) - 1)`.
|
||
* Интерфейс/тесты [BigIntegerListExpression](java/expression/BigIntegerListExpression.java).
|
||
* *BigDecimalList* (38, 39). Дополнительно реализуйте поддержку вычисления
|
||
выражений в типе `BigDecimal` с позиционными переменными.
|
||
* Конструктор позиционной переменной получает индекс переменной.
|
||
* При выводе позиционная переменная должна иметь вид `$index`.
|
||
* Метод вычисления выражения должен называться `evaluateBd`,
|
||
ему передаётся список значений переменных.
|
||
* Например, для `expr = new Subtract(new Add(new Variable(0), new Variable(1)), new Const(BigDecimal.ONE))`:
|
||
* `expr.evaluateBd(List.of(BigDecimal.TWO, BigDecimal.THREE))` должно быть равно 4;
|
||
* `expr.toString()` должно быть равно `(($0 + $1) - 1)`.
|
||
* Интерфейс/тесты [BigDecimalListExpression](java/expression/BigDecimalListExpression.java).
|
||
* *List* (34, 35). Дополнительно реализуйте поддержку выражений вычисления
|
||
выражений с позиционными переменными.
|
||
* Конструктор позиционной переменной получает индекс переменной.
|
||
* При вычислении выражения передаётся список значений переменных.
|
||
* При выводе позиционная переменная должна иметь вид `$index`.
|
||
* Например, для `expr = new Subtract(new Add(new Variable(0), new Variable(1)), new Const(1))`:
|
||
* `expr.evaluate(List.of(2, 3))` должно быть равно 4;
|
||
* `expr.toString()` должно быть равно `(($0 + $1) - 1)`.
|
||
* Интерфейс/тесты [ListExpression](java/expression/ListExpression.java).
|
||
|
||
|
||
## Домашнее задание 11. Игра m,n,k
|
||
|
||
Решение должно находиться в пакете `game`.
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Тестов не существует, так как они зависят от вашего кода.
|
||
* *Двукруговой турнир* (32-39)
|
||
* Добавьте поддержку двукругового турнира для нескольких участников.
|
||
* В рамках турнира каждый с каждым должен сыграть две партии,
|
||
по одной каждым цветом.
|
||
* Выведите таблицу очков по схеме:
|
||
* 3 очка за победу;
|
||
* 1 очко за ничью;
|
||
* 0 очков за поражение.
|
||
* *Гекс* (36-39)
|
||
* Добавьте поддержку ромбической доски для
|
||
[игры Гекс](https://ru.wikipedia.org/wiki/Гекс)
|
||
(с тремя направлениями линий).
|
||
* В качестве примера, сделайте доску размером 11×11.
|
||
* *Дополнительные ходы* (34-37)
|
||
* Если в результате хода игрока на доске появляется новая последовательность
|
||
из 4+ одинаковых символов, то он делает дополнительный ход.
|
||
* Игрок не может сделать несколько дополнительных ходов подряд.
|
||
* *Multiplayer* (38, 39)
|
||
* Добавьте возможность игры для 3 и 4 игроков (значки `@` и `#`);
|
||
* Если игрок проигрывает из-за ошибочного хода,
|
||
то игра продолжается без него.
|
||
Если остался только один игрок, он объявляется победителем.
|
||
|
||
|
||
## Домашнее задание 9. Markdown to HTML
|
||
|
||
Модификации
|
||
* *Base*
|
||
* [Исходный код тестов](java/md2html/Md2HtmlTester.java)
|
||
* [Откомпилированные тесты](artifacts/Md2HtmlTest.jar)
|
||
* Аргументы командной строки: модификации
|
||
* *3637*
|
||
* Добавьте поддержку
|
||
`<<вставок>>`: `<ins>вставок</ins>` и
|
||
`}}удалений{{`: `<del>удалений</del>`
|
||
* *3839*
|
||
* Добавьте поддержку
|
||
\`\`\``кода __без__ форматирования`\`\`\`:
|
||
`<pre>кода __без__ форматирования</pre>`
|
||
* *3233*
|
||
* Добавьте поддержку `%переменных%%`: `<var>переменных</var>`
|
||
* *3435*
|
||
* Добавьте поддержку `!!примеров!!`: `<samp>примеров</samp>`
|
||
|
||
|
||
## Домашнее задание 7. Разметка
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Исходный код тестов:
|
||
* [MarkupTester.java](java/markup/MarkupTester.java)
|
||
* [MarkupTest.java](java/markup/MarkupTest.java)
|
||
* Аргументы командной строки: модификации
|
||
* Откомпилированных тестов не существует,
|
||
так как они зависят от вашего кода
|
||
* *3637*, *3839*, *4142*, *4749*
|
||
* Дополнительно реализуйте метод `toTex`, генерирующий TeX-разметку:
|
||
* Абзацы предваряются командой `\par{}`
|
||
* Выделенный текст заключается в `\emph{` и `}`
|
||
* Сильно выделенный текст заключается в `\textbf{` и `}`
|
||
* Зачеркнутый текст заключается в `\textst{` и `}`
|
||
* Добавьте поддержку:
|
||
* Нумерованных списков (класс `OrderedList`, окружение `enumerate`): последовательность элементов
|
||
* Ненумерованных списков (класс `UnorderedList`, окружение `itemize`): последовательность элементов
|
||
* Элементов списка (класс `ListItem`, тег `\item`: последовательность абзацев и списков
|
||
* Для новых классов поддержка Markdown не требуется
|
||
* [Исходный код тестов](java/markup/MarkupListTest.java)
|
||
* *3233*, *3435*
|
||
* Дополнительно реализуйте метод `toHtml`, генерирующий HTML-разметку:
|
||
* Абзацы окружаются тегом `p`
|
||
* Выделенный текст окружается тегом `em`
|
||
* Сильно выделенный текст окружается тегом `strong`
|
||
* Зачеркнутый текст окружается тегом `s`
|
||
|
||
|
||
## Домашнее задание 6. Подсчет слов++
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Класс должен иметь имя `Wspp`
|
||
* Исходный код тестов:
|
||
[WsppTest.java](java/wspp/WsppTest.java),
|
||
[WsppTester.java](java/wspp/WsppTester.java)
|
||
* Откомпилированные тесты: [WsppTest.jar](artifacts/WsppTest.jar)
|
||
* Аргументы командной строки: модификации
|
||
* *3637*
|
||
* В выходном файле слова должны быть упорядочены
|
||
по возрастанию длины, а при равной длине –
|
||
по порядку первого вхождения во входной файл
|
||
* Вместо всех вхождений в файле надо указывать
|
||
только последнее вхождение в строке
|
||
* В словах могут дополнительно встречаться
|
||
цифры и символы `$` и `_`
|
||
* Класс должен иметь имя `WsppLast`
|
||
* *3839*
|
||
* В выходном файле слова должны быть упорядочены
|
||
по возрастанию длины, а при равной длине –
|
||
по порядку первого вхождения во входной файл
|
||
* Вместо всех вхождений в файле надо указывать
|
||
только среднее вхождение строке
|
||
* В словах могут дополнительно встречаться
|
||
цифры и символы `$` и `_`
|
||
* Класс должен иметь имя `WsppMiddle`
|
||
* *3435*
|
||
* В выходном файле слова должны быть упорядочены
|
||
по возрастанию длины, а при равной длине –
|
||
по порядку первого вхождения во входной файл
|
||
* Вместо номеров вхождений во всем файле надо указывать
|
||
`<номер строки>:<номер вхождения>`,
|
||
где номер вхождения считается с конца файла
|
||
* В словах могут дополнительно встречаться
|
||
цифры и символы `$` и `_`
|
||
* Класс должен иметь имя `WsppPosition`
|
||
* *3233*
|
||
* В выходном файле слова должны быть упорядочены
|
||
в порядке вхождения во входной файл
|
||
* Вместо номеров вхождений во всем файле надо указывать
|
||
`<номер строки>:<номер вхождения>`,
|
||
где номер вхождения считается с конца файла
|
||
* В словах могут дополнительно встречаться
|
||
цифры и символы `$` и `_`
|
||
* Класс должен иметь имя `WsppPos`
|
||
* *4142*
|
||
* В выходном файле слова должны быть упорядочены
|
||
по возрастанию длины, а при равной длине –
|
||
по порядку первого вхождения во входной файл
|
||
* Вместо всех вхождений в файле надо указывать
|
||
только последнее вхождение в строке
|
||
* В словах могут дополнительно встречаться
|
||
цифры и символы `$` и `_`
|
||
* Класс должен иметь имя `WsppLast`
|
||
* *4749*
|
||
* В выходном файле слова должны быть упорядочены
|
||
по возрастанию длины, а при равной длине –
|
||
по порядку первого вхождения во входной файл
|
||
* Вместо номеров вхождений во всем файле надо указывать
|
||
`<номер строки>:<номер вхождения>`,
|
||
где номер вхождения считается с конца файла
|
||
* В словах могут дополнительно встречаться
|
||
цифры и символы `$` и `_`
|
||
* Класс должен иметь имя `WsppPosition`
|
||
|
||
|
||
## Домашнее задание 5. Свой сканнер
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Исходный код тестов: [FastReverseTest.java](java/reverse/FastReverseTest.java)
|
||
* Откомпилированные тесты: [FastReverseTest.jar](artifacts/FastReverseTest.jar)
|
||
* Аргументы командной строки: модификации
|
||
* *3637*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
вместо каждого числа выведите минимум из чисел,
|
||
находящихся в его столбце в последующих строках, и его самого
|
||
* Во вводе могут быть десятичные и восьмиричные числа
|
||
* Числа дополнительно могут разделяться
|
||
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
|
||
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
|
||
скобками
|
||
* Класс должен иметь имя `ReverseMinC`
|
||
* *3839*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
вместо каждого числа выведите минимум из чисел
|
||
текущее число — правый нижний угол матрицы
|
||
* Во вводе могут быть десятичные и восьмиричные числа
|
||
* Числа дополнительно могут разделяться
|
||
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
|
||
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
|
||
скобками
|
||
* Класс должен иметь имя `ReverseMin`
|
||
* *3435*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
выведите ее поворот по часовой стрелке
|
||
* Числа дополнительно могут разделяться
|
||
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
|
||
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
|
||
скобками
|
||
* Класс должен иметь имя `ReverseRotate`
|
||
* *3233*
|
||
* Выведите (в реверсивном порядке) только числа,
|
||
у которых сумма номеров строки и столбца четная
|
||
* Числа дополнительно могут разделяться
|
||
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
|
||
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
|
||
скобками
|
||
* Класс должен иметь имя `ReverseEven`
|
||
* *4142*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
вместо каждого числа выведите среднее из чисел в его столбце и строке
|
||
* Числа дополнительно могут разделяться
|
||
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
|
||
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
|
||
скобками
|
||
* Класс должен иметь имя `ReverseAvg`
|
||
* *4749*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
вместо каждого числа выведите сумму чиселв его столбце и строке
|
||
* Числа дополнительно могут разделяться
|
||
[открывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#START_PUNCTUATION)
|
||
и [закрывающими](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/Character.html#END_PUNCTUATION)
|
||
скобками
|
||
* Класс должен иметь имя `ReverseSum`
|
||
|
||
|
||
## Домашнее задание 4. Подсчет слов
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Класс должен иметь имя `WordStat`
|
||
* Исходный код тестов:
|
||
[WordStatTest.java](java/wordStat/WordStatTest.java),
|
||
[WordStatTester.java](java/wordStat/WordStatTester.java),
|
||
[WordStatChecker.java](java/wordStat/WordStatChecker.java)
|
||
* Откомпилированные тесты: [WordStatTest.jar](artifacts/WordStatTest.jar)
|
||
* Аргументы командной строки: модификации
|
||
* *FastSort*
|
||
* Пусть _n_ – число слов во входном файле,
|
||
тогда программа должна работать за O(_n_ log _n_).
|
||
* *3637*
|
||
* Назовём _серединой слова_ подстроку, полученную удалением
|
||
первых и последних 3 символов слова.
|
||
Слова длины меньшей 7 игнорируются.
|
||
* Выходной файл должен содержать все различные
|
||
середины слов, встречающихся во входном файле,
|
||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||
* Класс должен иметь имя `WordStatLengthMiddle`
|
||
* *3839*
|
||
* Назовём _аффиксами слова_
|
||
его префикс и суффикс длины `n / 2`, где `n` — длина слова.
|
||
Слова длины один игнорируются.
|
||
* Выходной файл должен содержать все различные
|
||
аффиксы слов, встречающихся во входном файле,
|
||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||
* Класс должен иметь имя `WordStatLengthAffix`
|
||
* *3435*
|
||
* Назовём _суффиксом слова_ подстроку,
|
||
состоящую из `n / 2` последних символов слова, где `n` — длина слова.
|
||
Слова длины один игнорируются.
|
||
* Выходной файл должен содержать все различные
|
||
суффиксы слов, встречающихся во входном файле,
|
||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||
* Класс должен иметь имя `WordStatLengthSuffix`
|
||
* *3233*
|
||
* Выходной файл должен содержать все различные
|
||
слова встречающиеся во входном файле,
|
||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||
* Класс должен иметь имя `WordStatLength`
|
||
* *4142*
|
||
* Назовём _серединой слова_ подстроку, полученную удалением
|
||
первых и последних 3 символов слова.
|
||
Слова длины меньшей 7 игнорируются.
|
||
* Выходной файл должен содержать все различные
|
||
середины слов, встречающихся во входном файле,
|
||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||
* Класс должен иметь имя `WordStatLengthMiddle`
|
||
* *4749*
|
||
* Назовём _префиксом слова_ подстроку,
|
||
состоящую из `n / 2` первых символов слова, где `n` — длина слова.
|
||
Слова длины один игнорируются.
|
||
* Выходной файл должен содержать все различные
|
||
префиксы слов, встречающихся во входном файле,
|
||
упорядоченные по возрастанию длины (при равенстве – по первому вхождению).
|
||
* Класс должен иметь имя `WordStatLengthPrefix`
|
||
|
||
|
||
## Домашнее задание 3. Реверс
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Исходный код тестов:
|
||
[ReverseTest.java](java/reverse/ReverseTest.java),
|
||
[ReverseTester.java](java/reverse/ReverseTester.java)
|
||
* Откомпилированные тесты: [ReverseTest.jar](artifacts/ReverseTest.jar)
|
||
* Аргументы командной строки: модификации
|
||
* *Memory*
|
||
* Программа должна сначала считывать все данные в память,
|
||
и только потом обрабатывать их.
|
||
* Пусть _M_ – объём памяти, необходимый для сохранения ввода
|
||
в двумерном массиве `int` минимального размера.
|
||
Ваша программа должна использовать не более 4_M_ + 1024 байт памяти.
|
||
* Накладные расходы на запуск вашей программы JVM не учитываются.
|
||
* *3637*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
вместо каждого числа выведите максимум из чисел,
|
||
находящихся в его столбце в последующих строках, и его самого
|
||
* Класс должен иметь имя `ReverseMaxC`
|
||
* *3839*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
вместо каждого числа выведите максимум из чисел
|
||
текущее число — правый нижний угол матрицы
|
||
* Класс должен иметь имя `ReverseMax`
|
||
* *3435*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
выведите ее поворот по часовой стрелке, например для ввода
|
||
```
|
||
1 2 3 4
|
||
5 6
|
||
7 8 9
|
||
```
|
||
вывод должен быть
|
||
```
|
||
7 5 1
|
||
8 6 2
|
||
9 3
|
||
4
|
||
```
|
||
* Класс должен иметь имя `ReverseRotate`
|
||
* *3233*
|
||
* Выведите (в реверсивном порядке) только числа,
|
||
у которых сумма номеров строки и столбца четная
|
||
* Класс должен иметь имя `ReverseEven`
|
||
* *4142*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
вместо каждого числа выведите среднее из чисел в его столбце и строке
|
||
* Класс должен иметь имя `ReverseAvg`
|
||
* *4749*
|
||
* Рассмотрим входные данные как (не полностью определенную) матрицу,
|
||
вместо каждого числа выведите сумму чиселв его столбце и строке
|
||
* Класс должен иметь имя `ReverseSum`
|
||
-->
|
||
|
||
## Домашнее задание 2. Сумма чисел [](https://git.fymio.us/me/prog-intro-2025/actions)
|
||
|
||
Модификации
|
||
* *Base*
|
||
* Исходный код тестов:
|
||
[SumTest.java](java/sum/SumTest.java),
|
||
[SumTester.java](java/sum/SumTester.java),
|
||
[базовые классы](java/base/)
|
||
* Откомпилированные тесты: [SumTest.jar](artifacts/SumTest.jar)
|
||
* Аргументы командной строки: модификации
|
||
* *3637*
|
||
* Входные данные являются 64-битными числами в формате с плавающей точкой
|
||
* На вход подаются десятичные и шестнадцатеричные числа
|
||
* Шестнадцатеричные числа имеют префикс `0x`,
|
||
например `0xa.bp2` равно (10+11/16)·4 равно 42.75
|
||
* Ввод регистронезависим
|
||
* Класс должен иметь имя `SumDoubleHex`
|
||
* *3839*
|
||
* Входные данные помещаются в тип [BigDecimal](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/math/BigDecimal.html)
|
||
* На вход подаются десятичные и шестнадцатеричные числа
|
||
* Шестнадцатеричные числа имеют префикс `0x`,
|
||
например `0xbsc` равно 11·10⁻¹²
|
||
(мантисса и порядок являются целыми числами)
|
||
* Ввод регистронезависим
|
||
* Класс должен иметь имя `SumBigDecimalHex`
|
||
* *3435*
|
||
* На вход подаются десятичные и шестнадцатеричные числа
|
||
* Шестнадцатеричные числа имеют префикс `0x`
|
||
* Ввод регистронезависим
|
||
* Класс должен иметь имя `SumHex`
|
||
* *3233*
|
||
* Входные данные являются 64-битными числами в формате с плавающей точкой
|
||
* Класс должен иметь имя `SumDouble`
|
||
* *4142*
|
||
* Входные данные помещаются в тип [BigInteger](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/math/BigInteger.html)
|
||
* восьмеричные числа имеют суффикс `o`
|
||
* Класс должен иметь имя `SumBigIntegerOctal`
|
||
* *4749*
|
||
* Входные данные являются 64-битными целыми числами
|
||
* восьмеричные числа имеют суффикс `o`
|
||
* Класс должен иметь имя `SumLongOctal`
|
||
|
||
|
||
Для того, чтобы протестировать программу:
|
||
|
||
1. Скачайте откомпилированные тесты ([SumTest.jar](artifacts/SumTest.jar))
|
||
1. Откомпилируйте `Sum.java`
|
||
1. Проверьте, что создался `Sum.class`
|
||
1. В каталоге, в котором находится `Sum.class`, выполните команду
|
||
```
|
||
java -ea -jar <путь к SumTest.jar> Base
|
||
```
|
||
* Например, если `SumTest.jar` находится в текущем каталоге, выполните команду
|
||
```
|
||
java -ea -jar SumTest.jar Base
|
||
```
|
||
1. Для ускорения отладки рекомендуется сделать скрипт, выполняющий шаги 2−4.
|
||
|
||
|
||
## Домашнее задание 1. Запусти меня!
|
||
|
||
Модификации
|
||
* *RunMe*
|
||
1. Скачайте исходный код [RunMe.java](java/RunMe.java).
|
||
1. Создайте скрипт, компилирующий и запускающий `RunMe` из командной строки
|
||
с выданными вам аргументами командной строки.
|
||
1. Следуйте выведенной инструкции.
|
||
|
||
Рекомендации по выполнению модификации
|
||
|
||
1. Проверьте версию Java:
|
||
1. Запустите `javac --version` и проверьте, что версия
|
||
находится в диапазоне 21..24.
|
||
1. Запустите `java --version` и проверьте, что версия
|
||
такая же как и у `javac`.
|
||
1. Скачайте [RunMe.java](java/RunMe.java)
|
||
1. Откомпилируйте `RunMe.java`:
|
||
1. Запустите `javac RunMe.java`
|
||
1. Убедитесь, что компиляция завершилась без ошибок
|
||
1. Проверьте, что появился `RunMe.class`
|
||
1. Запустите `RunMe`:
|
||
1. Запустите `java RunMe [шесть] [слов] [пароля] [пришедшего] [на] [email]`
|
||
1. При правильном исполнении вы должны получить ссылку.
|
||
Если получено сообщение об ошибке — исправьте её и запустите повторно
|
||
1. Зайдите по полученной ссылке и убедитесь, что она правильная
|
||
1. Напишите и протестируйте скрипт:
|
||
1. Напишите скрипт, включающий команды компиляции и запуска.
|
||
Если вы не умеете писать скрипты, воспользуйтесь одной из инструкций:
|
||
[Windows](https://tutorialreference.com/batch-scripting/batch-script-files),
|
||
[Linux](https://www.freecodecamp.org/news/shell-scripting-crash-course-how-to-write-bash-scripts-in-linux/),
|
||
[macOS](https://rowannicholls.github.io/bash/intro/myscript.html)
|
||
1. Запустите и проверьте, что вы получили ту же ссылку, что и в предыдущем пункте
|
||
1. Сдайте скрипт преподавателю
|
||
1. Вы можете получить больше плюсиков, модифицируя код `RunMe.java`
|