Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб работа языки высокого уровня java (3).docx
Скачиваний:
0
Добавлен:
25.05.2024
Размер:
254.24 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ

ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ

(НИУ «БелГУ»)

ИНСТИТУТ ИНЖЕНЕРНЫХ И ЦИФРОВЫХ ТЕХНОЛОГИЙ

КАФЕДРА ПРИКЛАДНОЙ ИНФОРМАТИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

Отчет по лабораторной работе № 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));

}

}