Готовые отчеты (2020) / Java. Лабораторная работа 2
.pdfФедеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)
Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники
ЛАБОРАТОРНАЯ РАБОТА №2
по дисциплине «Разработка Java-приложений управления телекоммуникациями»
Выполнил: студент 3-го курса дневного отделения группы ИКПИ-85
Коваленко Леонид Александрович Преподаватель:
доцент кафедры ПИиВТ Белая Татьяна Иоанновна
Санкт-Петербург
2020
Цель работы
Ознакомиться с основными конструкциями языка Java и принципами создания классов.
Ход работы Создадим класс, реализующий работу с векторами (набор
вещественных чисел, координат) и базовые операции векторной арифметики. Экземпляр класса должен соответствовать вектору фиксированной
длины (задается как параметр конструктора). Должны быть реализованы следующие методы:
—методы доступа к элементам вектора (получение и изменение);
—метод получения размера вектора (числа элементов);
—методы поиска минимального и максимального значений;
—метод сортировки;
—метод нахождения нормы Евклида;
—метод умножения вектора на число;
—метод сложения двух векторов;
—метод нахождения скалярного произведения двух векторов;
—метод вывода вектора на экран.
В процессе решения не будем пользоваться специальными классами и
методами Java, кроме Math.sqrt, Math.min и System.out.print(-ln).
Код представлен в табл. 1. Таблица 1 — Код Task2.java
public class Task2 {
// Точка входа
public static void main(String[] args) {
Vector a = new Vector(3), b = new Vector(5); a.set(0, 2);
a.set(1, 1); a.set(2, 0); b.set(0, 5); b.set(1, 4); b.set(2, 3); b.set(3, 2); b.set(4, 1);
System.out.print("a: "); a.print(); System.out.print("b: "); b.print();
System.out.println("a.size(): " + a.size()); System.out.println("b.size(): " + b.size()); System.out.println("a.min(): " + a.min());
2
System.out.println("a.max(): " + a.max()); System.out.println("b.min(): " + b.min()); System.out.println("b.max(): " + b.max()); System.out.println("a.normEuclidean(): " + a.normEuclidean()); System.out.println("b.normEuclidean(): " + b.normEuclidean()); System.out.println("a.mul(b): " + a.mul(b)); System.out.println("b.mul(a): " + b.mul(a)); System.out.print("new a (after sort): ");
a.sort();
a.print();
System.out.print("new b (after sort): "); b.sort();
b.print(); System.out.print("a.mul(2.5): "); a.mul(2.5).print(); System.out.print("a.sum(b): "); a.sum(b).print(); System.out.print("b.sum(a): "); b.sum(a).print(); System.out.print("a.sum(a): "); a.sum(a).print();
}
}
class Vector {
// Конструктор
public Vector(int n) { data = new double[n];
}
//Получение элемента по индексу public double get(int i) {
return data[i];
}
//Установка значения элемента по индексу public void set(int i, double value) {
data[i] = value;
}
//Получение размера вектора
public int size() { return data.length;
}
//Поиск минимального значения public double min() {
double min = data[0];
for (int i = 1; i < data.length; ++i) { if (data[i] < min) min = data[i];
}
return min;
}
//Поиск максимального значения
public double max() { double max = data[0];
for (int i = 1; i < data.length; ++i) { if (data[i] > max) max = data[i];
}
return max;
}
// Сортировка вставками
3
public void sort() {
for (int i = 1; i < data.length; ++i) { double itemToInsert = data[i];
int j = i - 1;
for (; j >= 0 && data[j] > itemToInsert; --j) { data[j + 1] = data[j];
}
data[j + 1] = itemToInsert;
}
}
//Нахождение нормы Евклида public double normEuclidean() {
double r = 0;
for (double x : data) { r += x * x;
}
return Math.sqrt(r);
}
//Умножение вектора на число public Vector mul(double number) {
Vector r = new Vector(data.length); for (int i = 0; i < data.length; ++i) {
r.data[i] = data[i] * number;
}
return r;
}
//Сложение двух векторов public Vector sum(Vector arg) {
double[] minSizeVec = data, maxSizeVec = arg.data; if (minSizeVec.length > maxSizeVec.length) {
double[] t = minSizeVec; minSizeVec = maxSizeVec; maxSizeVec = t;
}
Vector r = new Vector(maxSizeVec.length);
for (int i = 0, len = maxSizeVec.length; i < len; ++i) { r.data[i] = maxSizeVec[i];
}
for (int i = 0, len = minSizeVec.length; i < len; ++i) { r.data[i] += minSizeVec[i];
}
return r;
}
//Скалярное произведение двух векторов
public double mul(Vector arg) {
int len = Math.min(data.length, arg.data.length); double r = 0;
for (int i = 0; i < len; ++i) { r += data[i] * arg.data[i];
}
return r;
}
// Вывод вектора на экран public void print() {
if (data.length > 0) { System.out.print(data[0]);
}
for (int i = 1; i < data.length; ++i) { System.out.print(" " + data[i]);
}
4
System.out.println();
}
// Данные
private final double[] data;
}
Выполним компиляцию и запуск (рис. 1).
Рисунок 1 — Компиляция и запуск Task2.java Заключение
В результате выполнения лабораторной работы мы ознакомились с основными конструкциями языка Java и принципами создания классов.
5