Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЯП Лабораторная работа 5

.pdf
Скачиваний:
0
Добавлен:
17.06.2025
Размер:
457.63 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)

ГЕНЕРИРОВАНИЕ И ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ Отчет по лабораторной работе №5

по дисциплине «Языки программирования» Вариант №3

Студент гр. 7х3-х

_______ ххххххх

_______

Приняла: Преподаватель каф. КИБЭВС

_______ хххххххх

_______

Томск 2025

Введение

Целью работы является изучение различных видов исключительных ситуаций и методов их обработки.

Постановка задачи:

1.Изучить краткие теоретические сведения;

2.Для выбранного варианта языка программирования изучить механизмы подпрограмм, их описание и вызовы, а также особенности передачи параметров в подпрограммы;

3.Разработать программу, генерирующую исключительную ситуацию, и обрабатывающую вызванное исключение на языке программирования, соответствующим варианту;

4.Доработать написанную программу, применив схему обработки исключительных ситуаций Б. Мейера;

5.Написать отчет и защитить у преподавателя.

2

1 ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ

Для выполнения работы был выбран язык программирования Java, исходный код программы представлен в приложении А. Программа вычисляет соотношение наибольшей и наименьшей стороны треугольника, а также вычисляет его периметр и площадь.

При вводе значений сторон треугольника происходит проверка на число. Если не удается преобразовать полученную строку в тип double, то программа выкидывает исключение типа NumberFormatException и сообщение «Введено не число!» (рисунок 1.1).

Рисунок 1.1 – Проверка на число

Далее программа проверяет стороны на положительность значений с помощью метода. Если хотя бы одна сторона меньше или равна нулю, то программа выкидывает исключение «Сторона должна быть положительной!» (рисунок 1.2).

Рисунок 1.2 – Проверка на положительность значения

С помощью метода IsTriangle программа проверяет треугольник на его возможность существования. Если условие не выполняется, то программа выкидывает исключение с сообщением «Треугольник не существует!» (рисунок

1.3).

3

Рисунок 1.3 – Проверка на существование треугольника

При соблюдении всех условий программа рассчитывает значения и выводит получившиеся результаты (рисунок 1.4).

Рисунок 1.4 – Результат работы программы

4

2 ПРИМЕНЕНИЕ СХЕМЫ Б. МЕЙЕРА

Для программы из пункта 1 была применена схема Б. Мейера. В метод, отвечающий за проверку вводимых значений были добавлены сообщения о количестве попыток исправить значения для неправильно введенной стороны (рисунок 2.1).

Рисунок 2.1 – Реализация схемы Б. Мейера в методе

5

Заключение

В ходе выполнения данной работы были изучены различные виды исключительных ситуаций и методов их обработки.

6

Приложение А Код программы

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;

public class Main {

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

try {

System.out.println("Введите стороны треугольника:");

double sideA = readPositiveDouble(br); double sideB = readPositiveDouble(br); double sideC = readPositiveDouble(br);

//Проверка существования треугольника if (!isTriangle(sideA, sideB, sideC)) {

throw new Exception("Треугольник не существует!");

}

//Расчет соотношения сторон

System.out.println("\nСоотношение наибольшей стороны треугольника к

наименьшей");

double minSide = Math.min(sideA, Math.min(sideB, sideC)); double maxSide = Math.max(sideA, Math.max(sideB, sideC));

double sideRatio = maxSide / minSide; System.out.println("Коэффициент: " + sideRatio);

// Расчет периметра и площади

System.out.println("\nРасчет периметра и площади треугольника"); double perimeter = sideA + sideB + sideC;

double halfPerimeter = perimeter / 2;

double area = Math.sqrt(halfPerimeter * (halfPerimeter - sideA) * (halfPerimeter - sideB) * (halfPerimeter - sideC));

System.out.println("Периметр треугольника: " + perimeter);

System.out.println("Площадь треугольника: " + area);

7

}catch (NumberFormatException e) { System.out.println("Ошибка: Введено не число!");

}catch (Exception e) {

System.out.println("Ошибка: " + e.getMessage()); } finally

{

br.close();

}

}

//Проверка на положительность значений

private static double readPositiveDouble(BufferedReader br) throws Exception { double value = Double.parseDouble(br.readLine());

if (value <= 0) {

throw new Exception("Сторона должна быть положительной!");

}

return value;

}

private static boolean isTriangle(double a, double b, double c) { return a + b > c && a + c > b && b + c > a;

}

}

8

Приложение Б Схема Б. Мейера

import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;

public class Main {

public static void main(String[] args) throws IOException {

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

try {

System.out.println("Введите стороны треугольника:");

double sideA = readPositiveDouble(br, "A"); double sideB = readPositiveDouble(br, "B"); double sideC = readPositiveDouble(br, "C");

//Проверка существования треугольника if (!isTriangle(sideA, sideB, sideC)) {

throw new Exception("Треугольник не существует!");

}

//Расчет соотношения сторон

System.out.println("\nСоотношение наибольшей стороны треугольника к

наименьшей");

double minSide = Math.min(sideA, Math.min(sideB, sideC)); double maxSide = Math.max(sideA, Math.max(sideB, sideC));

double sideRatio = maxSide / minSide; System.out.println("Коэффициент: " + sideRatio);

// Расчет периметра и площади

System.out.println("\nРасчет периметра и площади треугольника"); double perimeter = sideA + sideB + sideC;

double halfPerimeter = perimeter / 2;

double area = Math.sqrt(halfPerimeter * (halfPerimeter - sideA) * (halfPerimeter - sideB) * (halfPerimeter - sideC));

System.out.println("Периметр треугольника: " + perimeter);

System.out.println("Площадь треугольника: " + area);

9

} catch (Exception e) {

System.out.println("Ошибка: " + e.getMessage()); } finally {

br.close();

}

}

private static double readPositiveDouble(BufferedReader br, String side) throws Exception {

int attempts = 3; while (attempts > 0) {

try {

double value = Double.parseDouble(br.readLine());

if (value <= 0) {

throw new Exception("Сторона должна быть положительной!");

}

return value;

} catch (NumberFormatException e) {

System.out.println("Ошибка: Введено не число! Осталось попыток для стороны " + side + ": " + (attempts - 1));

} catch (Exception e) {

System.out.println("Ошибка: " + e.getMessage() + " Осталось попыток для стороны " + side + ": " + (attempts - 1));

}

attempts--;

}

throw new Exception("Превышено количество попыток ввода для стороны " + side);

}

// Метод для проверки существования треугольника

private static boolean isTriangle(double a, double b, double c) { return a + b > c && a + c > b && b + c > a;

}

}

10