You are on page 1of 13

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ЗАПОРІЗЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ


МАТЕМАТИЧНИЙ ФАКУЛЬТЕТ
КАФЕДРА ПРОГРАМНОЇ ІНЖЕНЕРІЇ

Дисципліна «Мова програмування Java»


Лабораторна робота № 2: “Масиви у програмах Java"

Виконав студент гр. 6.1210-2пі


Новіков Олег

Перевірив: Викладач
Горбенко Віталій Іванович

Запоріжжя
2022
Хід роботи
Завдання 1

Используя массивы напишите программу на Java, в которой реализовано скалярное


и векторное произведение двух векторов, представленных в трехмерном
Декартовом пространстве
public class Main {
public static void main(String[] args) {

int[] firstVector = new int[3];


int[] secondVector = new int[3];
int scalar = 0;

for(int i = 0; i < 3; i++)


{
firstVector[i] = (int)(Math.random() * 10);
secondVector[i] = (int)(Math.random() * 10);
}

System.out.println("\nVector A coordinates: (" + firstVector[0] + ";" + firstVector[1] + ";" +


firstVector[2] + ")");
System.out.println("Vector B coordinates: (" + secondVector[0] + ";" + secondVector[1] + ";" +
secondVector[2] + ")");

for(int i = 0; i < 3; i++) {

scalar += firstVector[i] * secondVector[i];

System.out.println("\nA*B = " + scalar);


int[] vector_c = new int[3];

vector_c[0] = firstVector[1] * secondVector[2] - secondVector[1] * firstVector[2];


vector_c[1] = -(firstVector[0] * secondVector[2] - secondVector[0] * firstVector[2]);
vector_c[2] = firstVector[0] * secondVector[1] - secondVector[0] * firstVector[1];

System.out.println("\n[A*B] = (" + vector_c[0] + ";" + vector_c[1] + ";" + vector_c[2] + ")");


}
}
Завдання 2
Напишите программу, в которой создается одномерный массив заданной длины и
инициализируется числами Фибоначчи.
public class Main {

public static void main(String[] args) {

int[] array = new int[10];

int firstNumber = 0;

int secondNumber = 1;

for (int i = 0; i < array.length; i++) {

array[i] = firstNumber + secondNumber;

firstNumber = secondNumber;

secondNumber = array[i];

System.out.print(array[i] + " ");

}
Завдання 3
Напишите программу транспонирования квадратной матрицы задаваемого
размера.
public class Main {

public static void main(String[] args) {

int size = 3;

int[][] matrix = new int[size][size];

for (int i = 0; i < size; i++) {

for (int j = 0; j < size; j++) {

matrix[i][j] = size*i + j;

System.out.println("Начальна");

System.out.println("------");

for (int i = 0; i < size; i++) {

for (int j = 0; j < size; j++) {

System.out.printf("%4d", matrix[i][j]);

System.out.println();

for (int i = 0; i < size; i++) {

for (int j = i+1; j < size; j++) {

int temp = matrix[i][j];

matrix[i][j] = matrix[j][i];

matrix[j][i] = temp;

}
System.out.println();

System.out.println("Нова матриця");

System.out.println("------");

for (int i = 0; i < size; i++) {

for (int j = 0; j < size; j++) {

System.out.printf("%3d", matrix[i][j]);

System.out.println();

}
Завдання 4
Напишите программу произведения квадратных матриц типа double
public class Main {

public static void main(String[] args) {

double[][] firstMatrix = {{2.0, 2.3, -3.1},{-7.0, -6.3, -1.1}};

double[][] secondMatrix = {{-4.3, 8, 4.5},{2, 1.9, 0},{-8.8, -1.6, 0}};

print(firstMatrix);

print(secondMatrix);

double[][] thirdMatrix = new double[firstMatrix.length][firstMatrix[0].length];

for(int i = 0; i < firstMatrix.length; i++){

for(int j = 0; j < secondMatrix[0].length; j++){

for(int k = 0; k < secondMatrix.length; k++){

thirdMatrix[i][j] += firstMatrix[i][k] * secondMatrix[k][j];

print(thirdMatrix);

public static void print(double[][] data) {

for (int i = 0; i < data.length; i++) {

for (int j = 0; j < data[0].length; j++) {

System.out.printf("%.2f ", data[i][j]);

System.out.print("\n");

}
System.out.print("\n");

}
Завдання 5
Напишите программу (или программы) на Java, в которой для одних и тех же
размеров одномерных массивов выполняется сортировка элементов по 4
различным алгоритмам. Результатом работы программы должно быть время
выполнения каждого алгоритма сортировки.
Создаем 4 метода для каждой из сортировок.
Я выбрал сортировку позырьком, сортировка вставками, сортировка выбором и
быстрая сортировка.
Создал рандомный массив на 5000 элементов. Результаты сортировок в конце на
скриншоте.
import java.util.Random;

public class Main {

public static void main(String[] args) {

long time1, time2;

int[] array = new Random().ints(5000, 0, 100).toArray();

System.out.println("Random array: ");

for (int i = 0; i < array.length; i++){

System.out.print(" " + array[i]);

System.out.println("\n");

int[] bubble = new int[5000];

time1 = System.currentTimeMillis();

bubble = bubbleSort(array);

time2= System.currentTimeMillis();

System.out.println("\nBubble sorted: ");

for (int i = 0; i < bubble.length; i++){

System.out.print(" " + bubble[i]);

}
System.out.println("\nTime ms: " + (double)(time2-time1)/1000 + "\n");

int[] insertion = new int[5000];

time1 = System.currentTimeMillis();

insertion = insertionSort(array);

time2= System.currentTimeMillis();

System.out.println("\nInsertion sorted: ");

for (int i = 0; i < insertion.length; i++){

System.out.print(" " + insertion[i]);

System.out.println("\nTime ms: " + (double)(time2-time1)/1000 + "\n");

int[] selection = new int[5000];

time1 = System.currentTimeMillis();

selection = selectionSort(array);

time2= System.currentTimeMillis();

System.out.println("\nSelection sorted: ");

for (int i = 0; i < selection.length; i++){

System.out.print(" " + selection[i]);

System.out.println("\nTime ms: " + (double)(time2-time1)/1000 + "\n");

int[] quick = new int[5000];

time1 = System.currentTimeMillis();

quick = quickSort(array, 0, array.length-1);

time2= System.currentTimeMillis();

System.out.println("\nQuick sorted: ");

for (int i = 0; i < quick.length; i++){

System.out.print(" " + quick[i]);

}
System.out.println("\nTime ms: " + (double)(time2-time1)/1000 + "\n");

public static int[] bubbleSort(int[] sortArr) { //сортировка пузырьком

for (int i = 0; i < sortArr.length - 1; i++) {

for (int j = 0; j < sortArr.length - i - 1; j++) {

if (sortArr[j + 1] < sortArr[j]) {

int swap = sortArr[j];

sortArr[j] = sortArr[j + 1];

sortArr[j + 1] = swap;

return sortArr;

public static int[] quickSort(int[] sortArr, int low, int high) { //быстрая сортировка

//выбираем опорный элемент

int middle = low + (high - low) / 2;

int border = sortArr[middle];

//разделияем на подмассивы и меняем местами

int i = low, j = high;

while (i <= j) {

while (sortArr[i] < border) i++;

while (sortArr[j] > border) j--;

if (i <= j) {

int swap = sortArr[i];

sortArr[i] = sortArr[j];

sortArr[j] = swap;

i++;
j--;

//рекурсия для сортировки левой и правой части

if (low < j) quickSort(sortArr, low, j);

if (high > i) quickSort(sortArr, i, high);

return sortArr;

public static int[] insertionSort(int[] sortArr) { //сортировка вставками

int j;

//сортировку начинаем со второго элемента, т.к. считается, что первый элемент уже
отсортирован

for (int i = 1; i < sortArr.length; i++) {

//сохраняем ссылку на индекс предыдущего элемента

int swap = sortArr[i];

for (j = i; j > 0 && swap < sortArr[j - 1]; j--) {

//элементы отсортированного сегмента перемещаем вперёд, если они больше элемента


для вставки

sortArr[j] = sortArr[j - 1];

sortArr[j] = swap;

return sortArr;

public static int[] selectionSort(int[] sortArr) { //соритровка выбором

for (int i = 0; i < sortArr.length; i++) {

int pos = i;

int min = sortArr[i];

//цикл выбора наименьшего элемента


for (int j = i + 1; j < sortArr.length; j++) {

if (sortArr[j] < min) {

//pos - индекс наименьшего элемента

pos = j;

min = sortArr[j];

sortArr[pos] = sortArr[i];

//меняем местами наименьший с sortArr[i]

sortArr[i] = min;

return sortArr;

You might also like