Отсортировать с выписыванием промежуточных шагов массив из 16 элементов:
- простой сортировкой (показать первые 5 шагов)
- быстрой сортировкой (показать все шаги)
- сортировкой слиянием (показать все шаги)
Напишите класс, реализующий правильные с объектно-ориентированной точки зрения целые числа. При создании нового объекта должно создаваться число, равное нулю. В классе должны быть определены:
- методы
increment()
иdecrement()
, соответственно увеличивающие и уменьшающие число на 1 - методы
add(Int n)
иsubtract(Int n)
, увеличивающие и уменьшающие число на n - метод
toString()
Примечания:
- в методах
add
иsubtract
передаются значения типа Int (с большой буквы), а не стандартный int - для сдачи основного задания нельзя придумывать свои методы и конструкторы, нужно использовать указанные выше
- применить инкриминирование 1000 раз - плохой вариант
- в доп. задании можно создать конструктор
Int(int value)
Напишите наиболее короткую программу, которая используя только класс Int, выводит на экран число 1000. Программа должна быть чисто объектно-ориентированной. В частности, в ней нельзя использовать оператор присваивания.
Напишите класс Matrix, реализующий квадратные матрицы. В нем должны быть определены (во всех методах предполагается, что передаваемые параметры всегда корректны):
- конструктор с целочисленным параметром - размером матрицы, создающий единичную матрицу;
- методы
Matrix sum(Matrix)
иMatrix product(Matrix)
, вычисляющие сумму и произведение матриц - сеттеры и геттеры для обращения к элементам матрицы:
setElement(int row, int column, int value)
иgetElement(int row, int column)
- метод
toString()
(необходимо использоватьStringArray или StringBuilder
)
Напишите программу, выводящую первые 10 степеней матрицы:
[1 1]
[1 0]
Напишите класс Matrix
, реализующий матрицы и расширяющий его класс SquareMatrix
, реализующий квадратные матрицы
В классах должны быть определены:
- конструкторы с параметрами размера матриц, создающие нулевую матрицу для
Matrix
и единичную дляSquareMatrix
- методы
Matrix sum(Matrix)
иMatrix product(Matrix)
, вычисляющие сумму и произведение матриц; метод sum должен быть переопределен вSquareMatrix
- методы
setElement(int row, int column, int value)
иgetElement(int row, int column)
, для обращения к элементам матрицы - метод
toString()
Напишите собственный класс исключения, расширяющий (наследующий) класс RuntimeException
. Во всех конструкторах и методах должны бросаться исключения в тех случаях, когда соответствующая операция невозможна (например, при сложении матриц разных размеров). Исключения должны содержать информацию о том, какая именно проблема возникла. Достаточно хранить эту информацию в виде строки, возвращаемой методом getMessage()
Примените к написанной программе:
- Разложите классы по пакетам
- Напишите слово
final
в тех случаях, где оно разумно - Реализуйте для матриц метод
equals()
Напишите класс SortedIntegerList
, который хранит отсортированный в порядке возрастания список целых чисел. Внутри класса список должен храниться с помощью LinkedList
В классе SortedInteger List
должны быть определены:
- Конструктор с булевским параметром. Если этот параметр принимает значение true, то в создаваемом списке разрешены повторяющиеся элементы, иначе - нет
- Методы
add(int)
иremove(int)
, которые, добавляют число в список / удаляют число из списка; если добавление (удаление) невозможно - метод не делает ничего. Операции добавления / удаления должны требовать не более чем одного прохода по списку - Метод
equals()
Примечание: везде использовать итератор
Напишите программу, проверяющую работу класса SortedIntegerList
. Постарайтесь реализовать возможно полный набор проверок
Напишите интерфейс IMatrix
с несколькими реализациями - UsualMatrix
и расширяющий его SquareMatrix
из предыдущих заданий и SparseMatrix
для разреженных матриц. SparseMatrix
должен быть реализован с помощью LinkedList
(возможно, вам потребуется создать какие-то еще дополнительные классы, которые должны быть вложенными/внутренними). Все общие методы должны быть представлены в интерфейсе IMatrix
Напишите программу, создающую 2 случайные матрицы размером 1000x1000 с 1000 ненулевых элементов в каждой двумя способами - с помощью обычных и разреженных матриц. Проверьте, что сложение и умножение для разных видов матриц дает одинаковые результаты
Реализовать класс FormattedInput
с двумя статическими функциями:
// Читает с System.in
Object[] scanf(String format)
// Читает из строки in
Object[] sscanf(String format, String in)
format
- строка со спецификацией формата ввода (может быть несколько спецификаторов в одной строке, например, %d %d %f
)
Список спецификаторов:
%d - целое int
%f - дробное double
%s - строка
%c - символ
Если ввод пользователя не соответствует спецификации, то функция запрашивает ввод повторно
Пример:
void main() {
// Ввод с клавиатуры
Object vals[] = scanf(“%d %s %c”);
}
Ввод пользователя: 10 ten v
Реализовать программу EncodingConverter
для перекодирования текстовых файлов из одной кодировки в другую. Программа должна получать параметры из командной строки и контролировать их корректность
Пример вызова:
java EncodingConverter in.txt out.txt utf8 cp1251
Реализуйте класс для хранения настроек Settings
, в котором хранятся пары (имя параметра, значение). Имя параметра задается строкой, а значение - целым числом. Реализация должна использовать класс HashMap
. В классе Settings
должны быть определены:
equals()
toString()
put(String, int)
int get(String)
delete(String)
loadFromBinaryFile(String filename)
saveToBinaryFile(String filename)
loadFromTextFile(String filename)
saveToTextFile(String filename)
Реализовать класс ParallelMatrixProduct
для многопоточного умножения матриц UsualMatrix
. В конструкторе класс получает число потоков, которые будут использованы для перемножения (число потоков может быть меньше, чем число строк у первой матрицы)
В функции main
сравнить время перемножения больших случайных матриц обычным и многопоточным способом. Получить текущее время можно с помощью методов класса System
Написать программу, приводящую к ситуации взаимной блокировки (deadlock)
Написать класс стек на основе связного списка (классом LinkedList
пользоваться нельзя) с методами:
- модифицирующими:
void push(int), int pop()
- читающими:
equals(), toString()
Класс должен быть пригоден к использованию в многопоточных программах. Написать две реализации:
SynchroStack
- со стеком одновременно работать может только один потокSynchroStackFast
- со стеком одновременно может работать либо один модифицирующий поток, либо несколько читающих потоков
В main с помощью замеров времени показать преимущество SynchroStackFast
при работе в многопоточной программе.