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

2392_Смирнова_М_ЛР5

.docx
Скачиваний:
0
Добавлен:
05.12.2024
Размер:
1.41 Mб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра АПУ

отчет

по лабораторной работе 5

по дисциплине «Алгоритмы и структуры данных»

ТЕМА: «Алгоритмы поиска»

Студентка гр. 2392

Смирнова М. В.

Преподаватель

Ряскова Е. Б.

Санкт-Петербург

2023

Постановка задачи.

В программе, написанной в лабораторной работе № 4, организовать последовательный поиск определенного элемента в каждом исходном массиве и подсчитать количество совпадений этого элемента в каждом массиве. Организовать бинарный поиск определенного элемента в каждом отсортированном массиве. Меню дополнить следующие пункты:

7 Poisk

7.1 Posledovatel’nyi poisk

7.2 Binarnyi poik

Результаты поиска записать в файл.

Ход решения.


Void Sequential_search: Функция последовательного поиска. При её выполнении просто просматривается множество элементов данных и эти элементы сравниваются с искомыми данными, пока не обнаружится совпадение. В случае совпадения на экран выводится количество совпадений и надпись: «number of matches». В ином случае на экран выводится уведомление о том, что совпадения не найдены.


Void Binary_search: Бинарный поиск состоит в том, что ключ V сравнивается со средним элементом списка. Если эти значения окажутся равными, то искомый элемент найден, в противном случае поиск продолжается в одной из половин списка. В случае совпадения на экран выводится надпись: «Match!». В ином случае на экран выводится уведомление о том, что совпадения не найдены.


Case 7: Добавлен новый пункт меню, а также два подпункта с двумя видами поиска: последовательный и бинарный. От пользователя просят ввести цифру, совпадение с которой ищется в сгенерированных массивах. Далее выбор последовательной или бинарной сортировки, после вывод на экран всех массивов и совпадений (пример работы ниже).

Вывод.

Благодаря проведенной лабораторной, я изучила алгоритмы поиска в массивах (бинарный и последовательный), а также разработала программу для реализации этих алгоритмов.

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

Приложение

#include <iostream>

#include <fstream>

using namespace std;

void Random_fill(int*& arr, int size) {

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

arr[i] = rand() % 10;

}

}

void Init_arrays(int*& BUB, int*& INS, int*& MIN, int*& SHL, int*& HOA, int* size) {

cin >> *size;

BUB = new int[*size];

INS = new int[*size];

MIN = new int[*size];

SHL = new int[*size];

HOA = new int[*size];

Random_fill(BUB, *size);

Random_fill(INS, *size);

Random_fill(MIN, *size);

Random_fill(SHL, *size);

Random_fill(HOA, *size);

cout << "Huh, I thought you'd write something cooler than " << *size << endl;

}

void showArray(int* arr, int size) {

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

cout << arr[i] << " ";

}

cout << endl;

}

void PrintInFile(int*& arr, int size, ofstream* printOut) {

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

*printOut << arr[i] << " ";}

*printOut << endl;}

void bubbleSort(int*& BUB, int size) {

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

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

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

swap(BUB[j + 1], BUB[j]);

}

}

}

cout << "AFTER: " << endl;

showArray(BUB, size);

}

void Min_Sort(int*& MIN, int size) {

int min_idx = 0;

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

min_idx = i;

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

if (MIN[j] < MIN[min_idx]) {

min_idx = j;

}

}

swap(MIN[min_idx], MIN[i]);

}

cout << "AFTER: " << endl;

showArray(MIN, size);

}

void Insert_Sort(int*& INS, int size) {

int k = 0;

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

k = i;

while (k > 0 && INS[k - 1] > INS[k]) {

swap(INS[k - 1], INS[k]);

k--;

}

}

cout << "AFTER: " << endl;

showArray(INS, size);

}

void Shell_Sort(int*& SHL, int size) {

for (int s = size / 2; s > 0; s /= 2) {

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

for (int j = i - s; j >= 0 && SHL[j] > SHL[j + s]; j -= s) {

swap(SHL[j], SHL[j + s]);}}}

cout << "AFTER: " << endl;

showArray(SHL, size);}

void Hoare_Sort(int*& HOA, int size, int left, int right) {

int i = left, j = right;

int test = HOA[(left + right) / 2];

do {

while (HOA[i] < test)

i++;

while (HOA[j] > test)

j--;

if (i <= j) {

swap(HOA[i], HOA[j]);

i++; j--;

}

} while (i <= j);

if (i < right)

Hoare_Sort(HOA, size, i, right);

if (j > left)

Hoare_Sort(HOA, size, left, j);

}

void Sequential_search(int* arr, int size, int value, ofstream* printOut) {

bool flag = false;

int counter = 0;

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

if (value == arr[i]) {

flag = true;

counter++;}}

if (flag) {

cout << counter << " - number of matches" << endl;

*printOut << counter << " - number of matches" << endl;}

else {

cout << "No matches." << endl;

*printOut << "No matches." << endl;}}

void Binary_search(int* arr, int size, int value, ofstream* printOut) {

bool flag = false;

int l = 0;

int r = size - 1;

int mid;

while ((l <= r) && (flag != true)) {

mid = (l + r) / 2;

if (arr[mid] == value) {

flag = true;}

if (arr[mid] > value) {

r = mid - 1;}

else {

l = mid + 1;}}

flag ? cout << "Match!" << endl : cout << "No matches." << endl;

flag ? *printOut << "Match!" << endl : *printOut << "No matches." << endl;}

int main() {

ofstream printOut;

printOut.open("output.txt");

int number_menu = 0;

int number_2menu = 0;

int size = 0;

int value = 0;

int* BUB = NULL;

int* INS = NULL;

int* MIN = NULL;

int* SHL = NULL;

int* HOA = NULL;

while (true) {

cout << "1. Initilization arrays" << "\n";

cout << "2. Result of BUBBLE SORT" << "\n";

cout << "3. Result of MIN SORT" << "\n";

cout << "4. Result of INSERT SORT" << "\n";

cout << "5. Result of SHELL SORT" << "\n";

cout << "6. Result of HOARE SORT" << "\n";

cout << "7. SEARCH for element" << "\n";

cout << "8. exit " << "\n";

cin >> number_menu;

switch (number_menu) {

case 1:

system("cls");

cout << "NAME the SIZE of items to be SORTED LATER (please... ^^):" << endl;

Init_arrays(BUB, INS, MIN, SHL, HOA, &size);

system("pause");

system("cls");

break;

case 2:

system("cls");

cout << "BUBBLE SORT:" << endl;

cout << "Elements:" << endl;

cout << "BEFORE:" << endl;

showArray(BUB, size);

bubbleSort(BUB, size);

system("pause");

system("cls");

PrintInFile(BUB, size, &printOut);

break;

case 3:

system("cls");

cout << "MIN SORT: " << endl;

cout << "Elements: " << endl;

cout << "BEFORE:" << endl;

showArray(MIN, size);

Min_Sort(MIN, size);

system("pause");

system("cls");

PrintInFile(MIN, size, &printOut);

break;

case 4:

system("cls");

cout << "INSERT SORT: " << endl;

cout << "Elements: " << endl;

cout << "BEFORE:" << endl;

showArray(INS, size);

Insert_Sort(INS, size);

system("pause");

system("cls");

PrintInFile(INS, size, &printOut);

break;

case 5:

system("cls");

cout << "SHELL SORT: " << endl;

cout << "Elements: " << endl;

cout << "BEFORE:" << endl;

showArray(SHL, size);

Shell_Sort(SHL, size);

system("pause");

system("cls");

PrintInFile(SHL, size, &printOut);

break;

case 6:

system("cls");

cout << "HOARE SORT: " << endl;

cout << "Elements: " << endl;

cout << "BEFORE:" << endl;

showArray(HOA, size);

Hoare_Sort(HOA, size, 0, size - 1);

cout << "AFTER: " << endl;

showArray(HOA, size);

system("pause");

system("cls");

PrintInFile(HOA, size, &printOut);

break;

case 7:

system("cls");

cout << "Search for element you need in random arrays: " << endl;

cout << "Enter the NUMBER YOU WANT TO FIND: " << endl;

cin >> value;

cout << "1. SEQUENTIAL (posledovatelno) search " << endl;

cout << "2. BINARY (binarno) search " << endl;

cin >> number_2menu;

while (true){

switch (number_2menu){

case 1:

system("cls");

cout << "Array Bubble: " << endl;

showArray(BUB, size);

Sequential_search(BUB, size, value, &printOut);

cout << "\n" << "Array Insert: " << endl;

showArray(INS, size);

Sequential_search(INS, size, value, &printOut);

cout << "\n" << "Array Min: " << endl;

showArray(MIN, size);

Sequential_search(MIN, size, value, &printOut);

cout << "\n" << "Array Shell: " << endl;

showArray(SHL, size);

Sequential_search(SHL, size, value, &printOut);

cout << "\n" << "Array Hoare: " << endl;

showArray(HOA, size);

Sequential_search(HOA, size, value, &printOut);

system("pause");

system("cls");

break;

case 2:

system("cls");

cout << "array Bubble: " << endl;

showArray(BUB, size);

Binary_search(BUB, size, value, &printOut);

cout << "\n" << "array Insert: " << endl;

showArray(INS, size);

Binary_search(INS, size, value, &printOut);

cout << "\n" << "array Min: " << endl;

showArray(MIN, size);

Binary_search(MIN, size, value, &printOut);

cout << "\n" << "array Shell: " << endl;

showArray(SHL, size);

Binary_search(SHL, size, value, &printOut);

cout << "\n" << "array Hoare: " << endl;

showArray(HOA, size);

Binary_search(HOA, size, value, &printOut);

system("pause");

system("cls");

break;}

break;}

break;

case 8:

system("cls");

cout << "BYE-BYE!!" << endl;

exit(0);

break;}}

delete[] BUB;

delete[] INS;

delete[] MIN;

delete[] SHL;

delete[] HOA;}