Добавил:
СПбГУТ * ИКСС * Программная инженерия Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АОПИ. Сортировка и интерполяция.pdf
Скачиваний:
19
Добавлен:
05.02.2022
Размер:
3.39 Mб
Скачать

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

ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М. А. БОНЧ-БРУЕВИЧА"

Факультет инфокоммуникационных сетей и систем Кафедра программной инженерии и вычислительной техники

ПРАКТИЧЕСКАЯ РАБОТА

по дисциплине «Алгоритмические основы программной инженерии» на тему «Интерполяция данных методом Лагранжа с предварительной их

сортировкой методом Хоара»

Выполнил: студент 1 курса дневного отделения группы ИКПИ-81 Коваленко Л. А.

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

СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ............................................................................................................

3

ОБЩЕЕ ОПИСАНИЕ...........................................................................................

3

РАЗРАБОТКА........................................................................................................

4

АНАЛИЗ ТРЕБОВАНИЙ.................................................................................

4

ПРОЕКТИРОВАНИЕ .......................................................................................

9

UML: USE CASE DIAGRAM.....................................................................

13

UML: SEQUENCE DIAGRAM...................................................................

14

UML: CLASS DIAGRAM ...........................................................................

15

РЕАЛИЗАЦИЯ................................................................................................

16

ИСХОДНЫЕ ФАЙЛЫ MAIN ....................................................................

17

ИСХОДНЫЕ ФАЙЛЫ DPIPE....................................................................

40

СЛОЖНОСТЬ АЛГОРИТМОВ.................................................................

47

ТЕСТИРОВАНИЕ...........................................................................................

50

ЗАКЛЮЧЕНИЕ...................................................................................................

61

2

ВВЕДЕНИЕ Наименование. Программа интерполирования данных методом Лагранжа с

предварительной их сортировкой методом Хоара.

Область применения. Областью применения программы является анализ результатов измерений в физике и технике, вычисление табулированной функции при разных значениях аргумента, построение графиков и точечных диаграмм с гладкими кривыми.

ОБЩЕЕ ОПИСАНИЕ

Программное обеспечение представляет собой консольное приложение с текстовым меню. Весь поток работы пользователя направлен на изменение данных двух контейнеров с координатами и . Возможности программы следующие:

Добавление данных (с консоли или файла).

Удаление данных.

Сохранение имеющихся данных в файл.

Отображение имеющихся данных в консоли.

Очистка контейнеров.

Итеративная сортировка контейнеров по X координате методом Хоара.

Удаление дубликатов по X координате.

Интерполяция данных контейнера (в файл или консоль) методом Лагранжа.

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

Контроль ввода числовых данных пользователем.

Контроль безошибочного открытия файла.

Контроль считывания данных из файла.

Контроль числовых данных на допустимые значения.

Также в отдельных случаях обеспечивается возможность выбора

пользователем механизма ядра — только потока (Thread), мьютекса (Mutex),

семафора (Semaphore), события (Event), ожидающего таймера (Waitable Timer) —

для решения поставленной задачи.

3

РАЗРАБОТКА АНАЛИЗ ТРЕБОВАНИЙ

Функциональные требования. ( , )

Наличие двух контейнеров, содержащих координаты точек .

Наличие целочисленной константы MAX_POINTS, описывающей максимально возможное количество точек. Равна 10.000.000.

Меню пользователя.

ID

Название пункта

Отображение в

Условие отображения

программе

пункта

 

 

 

 

 

 

0

Выход из программы

"0. Safe exit"

 

 

 

 

 

1

Добавить данные из

"1. Add data from file"

 

файла

Всегда отображается

 

 

 

 

 

 

2

Добавить данные с

"2. Add data from

 

консоли

console"

 

 

 

 

 

 

 

3

Сохранить имеющиеся

"3. Save existing data to

 

данные в файл

file"

 

 

 

 

 

 

 

4

Показать имеющиеся

"4. Show existing data"

 

данные (консоль)

Отображается при

 

 

 

 

 

наличии данных в

5

Удалить некоторые

"5. Delete some data"

программе

данные

 

 

 

 

 

 

 

6

Очистить все данные

"6. Clear all data"

 

 

 

 

 

7

Сортировать данные и

"7. Sort data and remove

 

удалить дубликаты

duplicates"

 

 

 

 

 

 

 

8

Интерполировать

"8. Interpolate by point"

Отображается после

данные по точке

 

 

сортировки данных (и

 

 

 

 

 

 

удаления дубликатов

9

Интерполировать

"9. Interpolate by

соответственно)

данные по отрезку

segment"

 

 

 

 

 

 

10

Статус памяти

"!. Memory Status"

Всегда отображается

(информация, график)

 

 

 

 

4

Функция добавления данных из файла (ID: 1). o Ввод имени файла пользователем.

o Открытие файла в двоичном режиме.

oЕсли файл не удалось открыть, то оповещение пользователя и возврат к меню.

oЕсли открытие файла успешно, то ввод данных из файла:

Проверка корректности числовых данных. (Если входные данные не являются корректными, то пользователь об этом оповещается и считывание продолжается.)

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

Контроль текущего количества точек. (Если текущее количество точек равно максимально допустимому количеству, то функция завершается.)

Функция добавления данных с консоли (ID: 2). ( , ) o Приглашение пользователя к вводу координат точек .

oКонтроль ввода числовых данных. (Если ввод не является корректным, то возврат к меню, иначе добавление данных в контейнеры и

продолжение ввода.)

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

Функция сохранения имеющихся данных в файл (ID: 3). o Ввод имени файла пользователем.

o Открытие файла в двоичном режиме.

oЕсли файл не удалось открыть, то оповещение пользователя и возврат к меню.

o Если открытие файла успешно, то запись данных контейнеров в файл.

5

Функцияотображенияданныхконтейнеровввидетекстовойтаблицы(ID: 4).

Пример.

X

Y

1.000000e+000

1.000000e+000

2.000000e+000

2.000000e+000

3.000000e+000

3.000000e+000

Функция удаления некоторых записей контейнеров (ID: 5).

o Отображение данных в виде текстовой таблицы с нумерацией строк.

N

X

Y

1

1.000000e+000

1.000000e+000

2

2.000000e+000

2.000000e+000

3

3.000000e+000

3.000000e+000

oПриглашение пользователя к вводу номера строки для удаления.

oЕсли пользователь вводит 0, то возврат к меню.

oИначе, если пользователь вводит действительный номер строки, то происходит удаление строки с данным номером и печать новой текстовой таблицы, иначе оповещение пользователя о некорректности введенных данных и возврат к повтору ввода.

Функция очистки всех данных контейнеров (ID: 6).

Функция сортировки и функция удаления дубликатов (ID: 7).

oИтеративная функция сортировки Хоара. Выбор пользователя: в

основном или во вторичном потоке.

o Функция удаления дубликатов X координат (с удалением соответствующих Y координат). Выбор пользователя: в основном или во вторичном потоке. Если встречены две одинаковые X координаты с разными Y координатами, то обе записи (точки) удаляются, если же с одинаковыми Y координатами, то только одна из записей остается.

Функция интерполяции по точке (ID: 8).

o Ввод степени полинома интерполяции.

6

oПоследовательный ввод координаты X точки пользователем и вывод результата интерполяции Y. (Если ввод неверный, то возврат к меню).

Функция интерполяции по отрезку (ID: 9).

oВыбор пользователя: вывод результатов в консоль или файл.

oВыбор пользователя: объект ядра (только вторичный поток, мьютекс, семафор, событие, ожидающий таймер с пользовательским значением задержки).

oВвод степени полинома интерполяции1, количества точек разбиения, начальной и конечной координаты.

 

 

x

Начальная

Число точек

Конечная

координата

координата

разбиения

 

 

o Выбор пользователя: рисование графика по результатам интерполяции.

Функция отображения информации о статусе памяти в виде текста и графика

(ID: 10).

1 Степень полинома интерполяции определяется количеством соседних точек, используемых в формуле интерполяции.

7

Требования к надежности.

Защита от неисправимых программой ошибок. Сообщения для пользователя.

ID

Ошибка

 

 

 

Описание

 

 

 

 

 

 

 

 

 

 

 

[#N# pair] -> #C#

 

Double:

 

 

±3.3621 10 .

1

coordinate is too small

#C# координата слишком мала по экспоненте.2

 

Float:

±2.22507 10

 

.

 

 

Long double:

 

 

−4932.

 

 

 

 

±1.17549 10

 

−308

 

(exponent). Not recorded.

#N# —

 

−38

 

 

 

 

порядковый номер пары элементов в

 

 

 

 

 

 

файле.

 

 

 

 

 

#C# — название координаты (X или Y).

 

 

 

 

 

 

 

[#N# pair] -> #C#

 

Double:

 

±1.18973 10 .

2

coordinate is too big

#C# координата слишком велика по экспоненте.3

 

Float:

±1.79769 10 .

 

 

 

Long double:

 

 

4932.

 

 

 

 

 

±3.40282 10

308

 

(exponent). Not recorded.

#N# —

 

 

38

 

 

 

 

порядковый номер пары элементов в

 

 

 

 

 

 

файле.

 

 

 

 

 

#C# — название координаты (X или Y).

Гарантия сохранности данных при сбоях в работе программы.

Защита от некорректных действий пользователя, включая неверный ввод числовых данных с клавиатуры.

2Некорректный ввод игнорируется. Операция считывания продолжается.

3Некорректный ввод игнорируется. Операция считывания продолжается.

8