Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Готовые отчеты (2020) / Java. Лабораторная работа 2

.pdf
Скачиваний:
91
Добавлен:
29.01.2021
Размер:
215.74 Кб
Скачать

Федеральное агентство связи ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА» (СПбГУТ)

Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники

ЛАБОРАТОРНАЯ РАБОТА №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