Вы находитесь на странице: 1из 6

Министерство образования Республики Беларусь

Учреждение образования

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


ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ»

Кафедра информационных радиотехнологий

ОТЧЁТ ПО ЛР № 1
по дисциплине
«Технология проектирования программного обеспечения информационных
систем»

Выполнили: Манченко А.А.


Локтева М.В.
Одинец А.В.

Минск 2022
Задание 1
1.Отсортировать массив каким-либо из известных вам методов.
2.Реализовать бинарный поиск элемента в отсортированном массиве
(обычный или рекурсивный)

Листинг программы:
package com.company;

import java.util.Arrays;
import java.util.Scanner;

public class Main {

public static void main(String args[]) {


int counter, num, item, array[], first, last;

//Создаем объект Scanner для считывания чисел


Scanner input = new Scanner(System.in);
System.out.println("Введите количество элементов массива: ");
num = input.nextInt();

// Создаем массив введенного размера


array = new int[num];

System.out.println("Введите " + num + " чисел");

//Заполняем массив, вводя элементы в консоль


for (counter = 0; counter < num; counter++)
array[counter] = input.nextInt();

// сортируем элементы массива, так как для бинарного поиска


// элементы массива должны быть отсортированными
Arrays.sort(array);

System.out.println("Введите элемент для бинарного поиска: ");


item = input.nextInt();
first = 0;
last = num - 1;

// метод принимает начальный и последний индекс, а также число для


поиска
binarySearch(array, first, last, item);
}

// бинарный поиск
public static void binarySearch(int[] array, int first, int last, int
item) {
int position;
int comparisonCount = 1; // для подсчета количества сравнений

// для начала найдем индекс среднего элемента массива


position = (first + last) / 2;

while ((array[position] != item) && (first <= last)) {


comparisonCount++;
if (array[position] > item) { // если число заданного для поиска
last = position - 1; // уменьшаем позицию на 1.
} else {
first = position + 1; // иначе увеличиваем на 1
}
position = (first + last) / 2;
}
if (first <= last) {
System.out.println(item + " является " + ++position + " элементом
в отсортированном массиве");
System.out.println("Метод бинарного поиска нашел число после " +
comparisonCount +
" сравнений");
} else {
System.out.println("Элемент не найден в массиве. Метод бинарного
поиска закончил работу после "
+ comparisonCount + " сравнений");
}
}
}

Результат работы программы

Задание 2
1. Создать две произвольных строки
2. Определить длину наидлиннейшей общей подпоследовательности
строк

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


package com.company;

import java.util.Scanner;

public class Main {

public static String findLengthOfLCS(String str1, String str2, int p, int q) {

// создание матрицы
int[][] tableForLCS = new int[p + 1][q + 1];
// заполнение таблицы сверху вниз
for (int i = 0; i <= p; i++) {
for (int j = 0; j <= q; j++) {
if (i == 0 || j == 0)
tableForLCS[i][j] = 0; // заполнение ячееек соответствующих
первому столбцу и первой строке 0
else if (str1.charAt(i - 1) == str2.charAt(j - 1))
tableForLCS[i][j] = tableForLCS[i - 1][j - 1] + 1; //
добавление 1 в ячейку предыдущей строки и столбца
else
tableForLCS[i][j] = Math.max(tableForLCS[i - 1][j],
tableForLCS[i][j - 1]); //определение максимального значения из ячейки предыдущей
строки и текущего столбца и ячейки текущей строки и предыдущего столбца
}
}

int index = tableForLCS[p][q];


int temp = index;

char[] longestCommonSubsequence = new char[index + 1];


longestCommonSubsequence[index] = '\0';

int i = p, j = q;
String lcs = "";
while (i > 0 && j > 0) {
if (str1.charAt(i - 1) == str2.charAt(j - 1)) {

longestCommonSubsequence[index - 1] = str1.charAt(i - 1);


i--;
j--;
index--;
} else if (tableForLCS[i - 1][j] > tableForLCS[i][j - 1])
i--;
else
j--;
}

for (int k = 0; k <= temp; k++)


lcs = lcs + longestCommonSubsequence[k];

return lcs;
}

public static void main(String[] args) {

String str1, str2, LCS;

Scanner sc = new Scanner(System.in);


System.out.print("Ввод первой последовательности: \n");
str1 = sc.nextLine();

System.out.print("Ввод второй последовательности: \n");


str2 = sc.nextLine();

int p = str1.length();
int q = str2.length();

LCS = findLengthOfLCS(str1, str2, p, q);

System.out.println("\n самая длинная общая подпоследовательность: \n"


+ LCS);
}
}
Результат работы программы

2.3 Зная длину, определить саму наидлиннейшую общую


подпоследовательность строк

Листинг программы
package com.company;

import java.util.Scanner;

public class Main {

public static int getLengthOfLCS(char[] str1, char[] str2, int p, int q)


{
//проверка длины последовательности
if (p == 0 || q == 0)
return 0;

// случай, когда последний символ обеих последовательностей равен


if (str1[p - 1] == str2[q - 1])
return 1 + getLengthOfLCS(str1, str2, p - 1, q - 1);
else
return maxValue(getLengthOfLCS(str1, str2, p, q - 1),
getLengthOfLCS(str1, str2, p - 1, q));
}

// создание maxValue() метода который возвращает длину


последовательности, имеющей максимальную длину
static int maxValue(int length1, int length2)
{
if (length1 > length2)
return length1;
else
return length2;
}
public static void main(String[] args)
{
String string1, string2;

Scanner sc = new Scanner(System.in);


System.out.print("Ввод первой последовательности: \n");
string1 = sc.nextLine();

System.out.print("Ввод второй последовательности: \n");


string2 = sc.nextLine();

char[] str1 = string1.toCharArray();


char[] str2 = string2.toCharArray();

int p = string1.length();
int q = string2.length();

System.out.println("Длина самой длинной общей подпоследовательности


равна: "+ getLengthOfLCS(str1, str2, p, q));
}
}

Результат работы программы

Вам также может понравиться