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

Лаб_4 Головков И.Е. 12002108 ООП

.docx
Скачиваний:
4
Добавлен:
26.06.2024
Размер:
133.92 Кб
Скачать

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

КАФЕДРА ИНФОРМАЦИОННЫХ И РОБОТОТЕХНИЧЕСКИХ СИСТЕМ

Отчет по лабораторной работе №4

Вариант №5 Тема работы «Статические поля и методы. Работа с файлами» по дисциплине «Объектно-ориентированное программирование»

студента очного отделения

2 курса группы 12002108

Головкова Игоря Евгеньевича

Проверил:

Резников Н. Г.

Белгород 2022

Цель работы: ознакомиться с организацией двумерных массивов в языке Java. Приобрести практические навыки в чтении данных из внешних файлов и выводе данных во внешние файлы.

Общая постановка задачи:

1. Составить алгоритм, его блок-схему и программу для решения Вашего варианта задания на языке программирования Java.

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

3. Первый класс должен содержать также следующие статические методы:

1) метод класса, запрашивающий у пользователя метод ввода матрицы (с клавиатуры или из файла).

2) метод класса для ввода исходной матрицы с клавиатуры

3) метод класса для чтения из файла;

4) метод класса для вычисления элементов массива Х;

5) метод класса для вывода на экран исходной матрицы;

6) метод класса для вывода на экран вычисленного массива Х;

7) метод класса для записи в файл вычисленного массива Х.

4. Во втором классе необходимо описать главный метод класса (main), в котором должны быть объявлены матрица А и массив Х и осуществлен вызов статических методов первого класса.

5. Оформить отчет по лабораторной работе, включающий

 титульный лист;

 цель работы;

 постановку задачи для Вашего варианта;

 блок-схему алгоритма;

 текст программы на языке Java;

 скриншоты результатов выполнения тестовых примеров;

 ответы на контрольные вопросы.

Индивидуальные данные для выполнения работы:

Вариант №5. Дана матрица А(5х5). Определить массив Х из 5 элементов, каждый из которых равен наименьшему из элементов соответствующего столбца матрицы.

Листинг программы:

Файл 1:

import java.io.*; import java.util.InputMismatchException; import java.util.Scanner; public class Massiv { static Scanner read = new Scanner(System.in); public static int NUM_1 = 5, NUM_2 = 5; static int[][] arr = new int[NUM_1][NUM_2]; static int[] X = new int[NUM_1]; static byte vybor(){ byte choice; System.out.println("Хотите ввести с клавиатуры(1) или считать из файла(2)?"); choice = read.nextByte(); return choice; } static void vvod() { for (int i = 0; i < NUM_1; i++) { for (int j = 0; j < NUM_2; j++) { System.out.print("Введите значение №" + i + " " + j + ": "); arr[i][j] = read.nextInt(); } } } static void readFile(){ String path = "d://lab/file2.txt"; try { try (Scanner in = new Scanner(new File(path))) { for (int i = 0; i < NUM_1; i++) { for (int j = 0; j < NUM_2; j++) { arr[i][j] = in.nextInt(); } } } } catch (FileNotFoundException e) { System.out.println("Ошибка " + e + "! файл " + path + " не найден!"); } catch (InputMismatchException e) { System.out.println("Ошибка " + e + "! Несоответствие типов данных!"); } } static void writeFile(){ try { PrintStream print = new PrintStream(new FileOutputStream("d://lab/file3.txt")); System.setOut(print); for (int i = 0; i < NUM_1; i++) { System.out.print(X[i] + " "); } } catch(FileNotFoundException e) { e.printStackTrace(); } } static void vyvod_2() { System.out.println("Исходный массив: "); for (int i = 0; i < NUM_1; i++) { for (int j = 0; j < NUM_2; j++) { System.out.print (arr[i][j] + " "); } System.out.println(); } } static void vyvod_1() { System.out.println("Исходный массив: "); for (int i = 0; i < NUM_1; i++){ System.out.print(X[i] + " "); } } static void findMin(){ for (int i = 0; i < NUM_1; i++) { int mini = arr[i][0]; for (int j = 0; j < NUM_2; j++) { if (arr[i][j]<mini) mini = arr[i][j]; } X[i] = mini; } } }

Файл 2:

public class Main { public static void main(String[] args) { Massiv mas = new Massiv(); int[][] matr = new int[Massiv.NUM_1][Massiv.NUM_2]; int[] X = new int[Massiv.NUM_1]; boolean flag = false; while (!flag) { flag = true; switch (Massiv.vybor()) { case 1 -> Massiv.vvod(matr); case 2 -> Massiv.readFile(matr); case 3 -> Massiv.zapolnRandom(matr); default -> flag = false; } } Massiv.vyvod_2(matr); Massiv.findMin(matr, X); Massiv.vyvod_1(X); Massiv.writeFile(X); } }

Результаты работы java-приложения:

Ответы на контрольные вопросы:

1. Каковы принципы размещения в памяти многомерных массивов в

языке Java?

Задаётся ячейка типа N-мерный массив, а также создаётся и назначается этой ссылочной переменной массив, имеющий по первому индексу А элементов, а по второму Б (т. е. мы имеем А ячеек типа одномерный массив, каждая из которых ссылается на массив из Б целых чисел).

2. Как производится описание многомерных массивов?

Задание N-мерного массива целых чисел будет выглядеть так: int[]…[] a=new int[А]…[Б];

3. Как производится обращение к элементам многомерного массива?

Доступ к элементам N-мерного массива осуществляется указанием N индексов: a[0]…[1]= …;

4. Какими способами можно произвести заполнение многомерного

массива элементами?

Ввод с клавиатуры и чтение из файла

5. Что такое статические поля и методы?

Статические поля и методы – это поля и методы, принадлежащие классу. Они объявляются с ключевым словом static. Основное отличие от обычных полей и методов – для обращения к статическим полям не требуется создание объекта.

6. Каким образом выполняется чтение исходных данных из файла?

С помощью класса Scanner и указания пути к файлу для чтения

7. Каким образом выполняется запись в файл?

С помощью перенаправления потока и PrintStream