
ЯП Лабораторная работа 5
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронновычислительных систем (КИБЭВС)
ГЕНЕРИРОВАНИЕ И ОБРАБОТКА ИСКЛЮЧИТЕЛЬНЫХ СИТУАЦИЙ Отчет по лабораторной работе №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