ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ
(НИУ «БелГУ»)
ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ
КАФЕДРА ПРИКЛАДНОЙ ИНФОРМАТИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
Отчет по лабораторной работе № 3 Тема работы “Программирование на языке Java”
по дисциплине “Программирование на языках высокого уровня”
студента очного отделения
3 Курса 12002105 группы
Проверил:
Доц. Лифиренко Максим Александрович
Белгород, 2024
Ход выполнения работы
В ходе выполнения работы освоил форматирование Java кода в соответствие с Java Code Conventions. Также освоил подключение к проекту внешних библиотек, в частности библиотеку логирования log4j от компании Apache, и освоил работу с данной библиотекой.
Код был отформатирован в соответствии с Java Code Conventions.
К проекту была подключена библиотека логирования log4j с помощью системы сборки maven. Библиотека настроена таким образом, что все сообщения со всех уровней собираются в файл myapp.log. Кроме того, в отдельный файл myapp-errors собираются только критические ошибки, то есть сообщения уровней WARN, ERROR, FATAL.
Весь вывод программы собирается в лог файл с уровнем INFO.
Логи с уровнем FATAL пишутся в том случае, если срабатывает одно из исключений. В частности, ошибка открытия файла.
Результаты работы программы представлены на рисунках 1-3.
Рисунок 1 – Работа программы в консоли
Рисунок 2 – Скриншот файла myapp.log
Рисунок 3 – Скриншот файла myapp-errors.log
Листинг программы
package com.example.lab3hll;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Collections;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringWriter;
import java.io.PrintWriter;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Main {
protected static final Logger logger = LogManager.getLogger();
public static void main(String[] args) throws IOException {
logger.info("Program just started. Trying to create a scanner and execute first 8 commands with it");
Scanner scanner = new Scanner(System.in);
number1(scanner);
number2(scanner);
number3(scanner);
number4(scanner);
number5(scanner);
number6(scanner);
number7(scanner);
number8(scanner);
scanner.close();
String filename = "data.txt";
try (var bufReader = new BufferedReader(new FileReader(filename))) {
number1_file(bufReader);
number2_file(bufReader);
number3_file(bufReader);
number4_file(bufReader);
number5_file(bufReader);
number6_file(bufReader);
number7_file(bufReader);
number8_file(bufReader);
} catch (IOException e) {
System.out.println(String.format("Ошибочка. Текст - %s", e.toString()));
var sw = new StringWriter();
var pw = new PrintWriter(sw);
e.printStackTrace(pw);
logger.fatal("App is down. Seems like tehere is no such file. App's stackTrace = " + sw.toString());
}
}
static void number1(Scanner scanner) {
System.out.print("Введите значение x: ");
double x = scanner.nextDouble();
System.out.print("Введите значение y: ");
double y = scanner.nextDouble();
var result = 8 * Math.pow((1 - Math.tan(x)), 1 / Math.tan(x)) + Math.cos(x - y);
System.out.println(String.format("\nНомер 1. Результат вычисления для x=%.3f, y=%.3f: %.4f\n", x, y, result));
logger.info(String.format("Number 1, scanner. Result for x = %.3f, y = %.3f is %.4f", x, y, result));
}
static void number1_file(BufferedReader reader) throws IOException {
double x = Double.parseDouble(reader.readLine());
double y = Double.parseDouble(reader.readLine());
var result = 8 * Math.pow((1 - Math.tan(x)), 1 / Math.tan(x)) + Math.cos(x - y);
System.out.println(String.format("\nНомер 1. Результат вычисления для x=%.3f, y=%.3f: %.4f\n", x, y, result));
logger.info(String.format("Number 1, file. Result for x=%.3f, y=%.3f is %.4f", x, y, result));
//var stackTrace = Thread.currentThread().getStackTrace();
//logger.info(" ");
}
static void number2(Scanner scanner) {
System.out.print("Введите значение x: ");
while (!scanner.hasNextDouble()) {
System.out.println("Проблема со вводом");
scanner.next();
}
double x = scanner.nextDouble();
System.out.print("Введите значение y: ");
double y = scanner.nextDouble();
System.out.println(String.format("\nНомер 2.X = %.2f, Y = %.2f", x, y));
if (y == 0) {
System.out.println("Нельзя делить на ноль");
return;
}
System.out.println(String.format("Сумма равна %.3f", x + y));
System.out.println(String.format("Разность равна %.3f", x - y));
System.out.println(String.format("Произведение равно %.3f", x * y));
System.out.println(String.format("Частное равно %.3f\n", x / y));
logger.info(String.format("Number 2, scanner. X = %.3f, Y = %.3f. Sum is %.3f, diff is %.3f, prod is %.3f, quot is %.3f",
x, y, x + y, x - y, x * y, x / y));
}
static void number2_file(BufferedReader reader) throws IOException {
double x = Double.parseDouble(reader.readLine());
double y = Double.parseDouble(reader.readLine());
System.out.println(String.format("\nНомер 2. X = %.2f, Y = %.2f", x, y));
if (y == 0) {
System.out.println("Нельзя делить на ноль");
return;
}
System.out.println(String.format("Сумма равна %.3f", x + y));
System.out.println(String.format("Разность равна %.3f", x - y));
System.out.println(String.format("Произведение равно %.3f", x * y));
System.out.println(String.format("Частное равно %.3f\n", x / y));
logger.info(String.format("Number 2, file. X = %.3f, Y = %.3f. Sum is %.3f, diff is %.3f, prod is %.3f, quot is %.3f",
x, y, x + y, x - y, x * y, x / y));
}
static void number3(Scanner scanner) {
System.out.print("Введите трехзначное число: ");
int x = scanner.nextInt();
System.out.println(String.format("Номер 3. X = %d", x));
if (x < 100 || x > 999) {
System.out.println("The number given should be three digits");
}
var firstDigit = x % 10;
x /= 10;
var secondDigit = x % 10;
x /= 10;
if ((x + firstDigit + secondDigit) % 2 == 0) {
System.out.println("Сумма цифр числа чётная\n");
logger.info(String.format("Number 3, scanner. X = %d, sum of digits is even", x));
} else {
System.out.println("Сумма цифр числа нечётная\n");
logger.info(String.format("Number 3, scanner. X = %d, sum of digits is odd", x));
}
}
static void number3_file(BufferedReader reader) throws IOException {
int x = Integer.parseInt(reader.readLine());
System.out.println(String.format("Номер 3. X = %d", x));
if (x < 100 || x > 999) {
System.out.println("В числе должно быть 3 цифры");
}
var firstDigit = x % 10;
x /= 10;
var secondDigit = x % 10;
x /= 10;
if ((x + firstDigit + secondDigit) % 2 == 0) {
System.out.println("Сумма цифр числа чётная\n");
logger.info(String.format("Number 3, file. X = %d, sum of digits is even", x));
} else {
System.out.println("Сумма цифр числа нечётная\n");
logger.info(String.format("Number 3, file. X = %d, sum of digits is odd", x));
}
}
static void number4(Scanner scanner) {
System.out.print("Введите значение x: ");
Double x = scanner.nextDouble();
System.out.println(String.format("\nНомер 4. X = %.2f", x));
ArrayList<Double> values = new ArrayList<>();
if (!Double.isNaN(Math.sin(x)))
values.add(Math.sin(x));
if (!Double.isNaN(Math.cos(x)))
values.add(Math.cos(x));
if (!Double.isNaN(Math.log(x)))
values.add(Math.log(x));
Collections.sort(values);
var loggerString = "";
for (double value : values) {
if (Math.abs(value - Math.sin(x)) < 0.000001){
System.out.print("Sin x: ");
loggerString += String.format(" Sin x is %.3f", value);
}
else if (Math.abs(value - Math.cos(x)) < 0.000001){
System.out.print("Cos x: ");
loggerString += String.format(" Cos x is %.3f", value);
}
else if (Math.abs(value - Math.log(x)) < 0.000001){
System.out.print("Log x: ");
loggerString += String.format(" Log x is %.3f", value);
}
System.out.println(String.format("%.2f", value));
}
System.out.println();
logger.info(String.format("Number 4, scanner. x is %.3f" + loggerString, x));
}
static void number4_file(BufferedReader reader) throws IOException {
double x = Double.parseDouble(reader.readLine());
System.out.println(String.format("\nНомер 4. X = %.2f", x));
ArrayList<Double> values = new ArrayList<>();
if (!Double.isNaN(Math.sin(x)))
values.add(Math.sin(x));
if (!Double.isNaN(Math.cos(x)))
values.add(Math.cos(x));
if (!Double.isNaN(Math.log(x)))
values.add(Math.log(x));
Collections.sort(values);
var loggerString = "";
for (double value : values) {
if (Math.abs(value - Math.sin(x)) < 0.000001){
System.out.print("Sin x: ");
loggerString += String.format(" Sin x is %.3f", value);
}
else if (Math.abs(value - Math.cos(x)) < 0.000001){
System.out.print("Cos x: ");
loggerString += String.format(" Cos x is %.3f", value);
}
else if (Math.abs(value - Math.log(x)) < 0.000001){
System.out.print("Log x: ");
loggerString += String.format(" Log x is %.3f", value);
}
System.out.println(String.format("%.2f", value));
}
System.out.println();
logger.info(String.format("Number 4, file. x is %.3f" + loggerString, x));
}
static void number5(Scanner scanner) {
System.out.println("\nНомер 5");
double radius, diameter, circumference;
double area;
System.out.print("1 - радиус, 2 - диаметр, 3 - длина окружности. Ваш выбор: ");
int choice = scanner.nextInt();
switch (choice) {
case 1:
System.out.print("Радиус круга: ");
radius = scanner.nextDouble();
area = Math.PI * radius * radius;
System.out.println(String.format("Площадь круга: %.2f", area));
logger.info(String.format("Number 5, scanner. Radius is %.2f and area is %.2f", radius, area));
break;
case 2:
System.out.print("Диаметр круга: ");
diameter = scanner.nextDouble();
radius = diameter / 2;
area = Math.PI * radius * radius;
System.out.println(String.format("Площадь круга: %.2f", area));
logger.info(String.format("Number 5, scanner. Diameter is %.2f and area is %.2f", diameter, area));
break;
case 3:
System.out.print("Длина окружности: ");
circumference = scanner.nextDouble();
radius = circumference / (2 * Math.PI);
area = Math.PI * radius * radius;
System.out.println(String.format("Площадь круга: %.2f", area));
logger.info(String.format("Number 5, scanner. Circumference is %.2f and area is %.2f", circumference, area));
break;
default:
System.out.println("Неверно.");
logger.error("Number 5, scanner. User entered a wrong number");
break;
}
System.out.println();
}
static void number5_file(BufferedReader reader) throws IOException {
int choice = Integer.parseInt(reader.readLine());
double radius, diameter, circumference;
double area;
switch (choice) {
case 1:
radius = Double.parseDouble(reader.readLine());
area = Math.PI * radius * radius;
System.out.println(String.format("Площадь круга: %.2f", area));
logger.info(String.format("Number 5, file. Radius is %.2f and area is %.2f", radius, area));
break;
case 2:
diameter = Double.parseDouble(reader.readLine());
radius = diameter / 2;
area = Math.PI * radius * radius;
System.out.println(String.format("Площадь круга: %.2f", area));
logger.info(String.format("Number 5, file. Diameter is %.2f and area is %.2f", diameter, area));
break;
case 3:
circumference = Double.parseDouble(reader.readLine());
radius = circumference / (2 * Math.PI);
area = Math.PI * radius * radius;
System.out.println(String.format("Площадь круга: %.2f", area));
logger.info(String.format("Number 5, file. Circumference is %.2f and area is %.2f", circumference, area));
break;
default:
System.out.println("Неверно.");
logger.error("Number 5, file. User entered a wrong number");
break;
}
System.out.println();
}
static void number6(Scanner scanner) {
System.out.print("Введите значение N: ");
int n = scanner.nextInt();
System.out.print("Введите значение K: ");
int k = scanner.nextInt();
System.out.print("Введите значение M: ");
int m = scanner.nextInt();
System.out.println(String.format("\nНомер 6. N = %d, K = %d, M = %d", n, k, m));
String result = "";
result += n + "" + k;
System.out.println("Совместная запись чисел: " + result);
var mChar = m + "";
for (char c : result.toCharArray()) {
if (c == mChar.charAt(0)) {
System.out.println(String.format("Цифра %d есть в итоговом числе\n", m));
logger.info(String.format("Number 6, scanner. N = %d, K = %d, M = %d. Result number is %s. There is %d in result",
n, k, m, result, m));
return;
}
}
System.out.println(String.format("Цифры %d нет в итоговом числе\n", m));
logger.info(String.format("Number 6, scanner. N = %d, K = %d, M = %d. Result number is %s. There is no %d in result",
n, k, m, result, m));
}
static void number6_file(BufferedReader reader) throws IOException {
int n = Integer.parseInt(reader.readLine());
int k = Integer.parseInt(reader.readLine());
int m = Integer.parseInt(reader.readLine());
System.out.println(String.format("\nНомер 6. N = %d, K = %d, M = %d", n, k, m));
String result = "";
result += n + "" + k;
System.out.println("Совместная запись чисел: " + result);
var mChar = m + "";
for (char c : result.toCharArray()) {
if (c == mChar.charAt(0)) {
System.out.println(String.format("Цифра %d есть в итоговом числе\n", m));
logger.info(String.format("Number 6, file. N = %d, K = %d, M = %d. Result number is %s. There is %d in result",
n, k, m, result, m));
return;
}
}
System.out.println(String.format("Цифры %d нет в итоговом числе\n", m));
logger.info(String.format("Number 6, file. N = %d, K = %d, M = %d. Result number is %s. There is no %d in result",
n, k, m, result, m));
}
static void number7(Scanner scanner) {
System.out.print("Введите значение N: ");
int n = scanner.nextInt();
System.out.println(String.format("\nНомер 7. N = %d", n));
double sum = 0;
for (var i = 1; i <= n; i++) {
double denominator = 0;
for (var j = 1; j <= i; j++) {
denominator += Math.sin(j);
}
sum += 1 / denominator;
}
System.out.println(String.format("Результат вычислений: %.5f\n", sum));
logger.info(String.format("Number 7, scanner. N = %d. Result is %.5f", n, sum));
}
static void number7_file(BufferedReader reader) throws IOException {
int n = Integer.parseInt(reader.readLine());
System.out.println(String.format("\nНомер 7. N = %d", n));
double sum = 0;
for (var i = 1; i <= n; i++) {
double denominator = 0;
for (var j = 1; j <= i; j++) {
denominator += Math.sin(j);
}
sum += 1 / denominator;
}
System.out.println(String.format("Результат вычислений: %.5f\n", sum));
logger.info(String.format("Number 7, file. N = %d. Result is %.5f", n, sum));
}
static void number8(Scanner scanner) {
System.out.print("Введите значение N: ");
int n = scanner.nextInt();
System.out.println(String.format("\nНомер 8. N = %d", n));
int sum = 0, count = 0, currentValue = 5;
while (sum < n) {
sum += currentValue;
currentValue += 4;
count++;
}
System.out.println(String.format("Нужно %d членов последовательности\n", count));
logger.info(String.format("Number 8, scanner. N = %d, and you need %d numbers from sequence", n, count));
}
static void number8_file(BufferedReader reader) throws IOException {
int n = Integer.parseInt(reader.readLine());
System.out.println(String.format("\nНомер 8. N = %d", n));
int sum = 0, count = 0, currentValue = 5;
while (sum < n) {
sum += currentValue;
currentValue += 4;
count++;
}
System.out.println(String.format("Нужно %d членов последовательности\n", count));
logger.info(String.format("Number 8, file. N = %d, and you need %d numbers from sequence", n, count));
}
}