Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готовые отчеты (2020) / Java. Лабораторная работа 3.pdf
Скачиваний:
78
Добавлен:
29.01.2021
Размер:
960.64 Кб
Скачать

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

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

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

ЛАБОРАТОРНАЯ РАБОТА №3

по дисциплине «Разработка Java-приложений управления телекоммуникациями»

Выполнил: студент 3-го курса дневного отделения группы ИКПИ-85

Коваленко Леонид Александрович Преподаватель:

доцент кафедры ПИиВТ Белая Татьяна Иоанновна

Санкт-Петербург

2020

Цель работы

Ознакомиться с механизмом исключений в Java и концепцией интерфейсов.

Ход работы

Задание №1.

Изменим класс Vector (из прошлой работы), оставив в нем следующие методы:

методы доступа к элементам вектора (получение и изменение);

метод получения размера вектора (числа элементов);

метод нахождения нормы Евклида;

метод вывода вектора на экран.

Само название класса изменим на Array. Результат изменения кода приведен в табл. 1.

Таблица 1 — Код Task3.java с классом Array

public class Task3 { // Точка входа

public static void main(String[] args) { Array a = new Array(3), b = new Array(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.normEuclidean(): " + a.normEuclidean()); System.out.println("b.normEuclidean(): " + b.normEuclidean());

}

}

class Array {

//Конструктор public Array(int n) {

data = new double[n];

}

//Получение элемента по индексу public double get(int i) {

return data[i];

}

//Установка значения элемента по индексу

2

public void set(int i, double value) { data[i] = value;

}

//Получение размера вектора public int size() {

return data.length;

}

//Нахождение нормы Евклида public double normEuclidean() {

double r = 0;

for (double x : data) { r += x * x;

}

return Math.sqrt(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]);

}

System.out.println();

}

//Данные

private final double[] data;

}

Результат компиляции и запуска приведен на рис. 1.

Рисунок 1 — Компиляция и запуск Task3.java с Array Задание №2.

Создадим отдельный класс Vectors, который будет содержать статические методы работы с векторами1:

метод умножения вектора на скаляр;

метод сложения двух векторов;

метод нахождения скалярного произведения двух векторов. Код приведен в табл. 2.

1 Здесь под вектором понимается любой упорядоченный контейнер данных (будь то массив или список), который позволяет получить число элементов и обратиться к любому из них по индексу.

3

Таблица 2 — Код Task3.java с классами Array и Vectors

public class Task3 { // Точка входа

public static void main(String[] args) { Array a = new Array(3), b = new Array(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.normEuclidean(): " + a.normEuclidean()); System.out.println("b.normEuclidean(): " + b.normEuclidean()); System.out.println("Vectors.mul(a, b): " + Vectors.mul(a, b)); System.out.println("Vectors.mul(b, a): " + Vectors.mul(b, a)); System.out.println("Vectors.mul(a, a): " + Vectors.mul(a, a)); System.out.print("a * 2.5: ");

Vectors.mul(a, 2.5).print(); System.out.print("a + b: "); Vectors.add(a, b).print(); System.out.print("b + a: "); Vectors.add(b, a).print(); System.out.print("a + a: "); Vectors.add(a, a).print();

}

}

class Array {

//Конструктор public Array(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 normEuclidean() {

double r = 0;

for (double x : data) { r += x * x;

}

return Math.sqrt(r);

4

}

//Вывод вектора на экран 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]);

}

System.out.println();

}

//Данные

private final double[] data;

}

class Vectors {

// Умножение вектора на число

public static Array mul(Array array, double number) { int size = array.size();

Array r = new Array(size);

for (int i = 0; i < size; ++i) { r.set(i, array.get(i) * number);

}

return r;

}

// Сложение двух векторов

public static Array add(Array array, Array arg) { Array minSizeArr = array, maxSizeArr = arg; if (minSizeArr.size() > maxSizeArr.size()) {

Array t = minSizeArr; minSizeArr = maxSizeArr; maxSizeArr = t;

}

Array r = new Array(maxSizeArr.size());

for (int i = 0, len = maxSizeArr.size(); i < len; ++i) { r.set(i, maxSizeArr.get(i));

}

for (int i = 0, len = minSizeArr.size(); i < len; ++i) { r.set(i, r.get(i) + minSizeArr.get(i));

}

return r;

}

// Скалярное произведение двух векторов

public static double mul(Array array, Array arg) { int len = Math.min(array.size(), arg.size()); double r = 0;

for (int i = 0; i < len; ++i) {

r += array.get(i) * arg.get(i);

}

return r;

}

}

5