ПРОЕКТИРОВАНИЕ
1.В качестве языка программирования выбран C++ (стандарт: ISO C++ 11).
2.В качестве среды программирования выбрана Dev-C++ 5.11 (от 27.04.2015) со встроенным компилятором TDM-GCC 4.9.2 32/64-bit.
3.Разработка осуществляется на компьютере с установленной операционной системой Microsoft Windows 8.1 (для одного языка) x64 (оперативная память: 8
Гб, процессор: Intel Core i5-7300HQ CPU 2.50GHz, видеокарта: NVidia GeForce GTX 1050).
4.В качестве типа контейнера выбрана двусторонняя очередь (англ. deque). Преимущества показаны в таблице:
Операция |
Сложность операции4 |
|
Произвольный доступ к элементу |
Постоянная |
|
|
|
|
Вставка и удаление элементов с начала |
Амортизированная постоянная (1) |
|
и с конца |
||
Вставка и удаление элементов не с |
Линейная |
|
начала или конца |
|
|
( ) |
|
|
|
|
|
Обоснование. Так как ПО будет часто использовать произвольный |
доступ к |
элементам(1) идобавлениеэлементоввконец (2), то данный выборгарантирует наибольшую скорость выполнения большинства используемых операций. Удаление произвольных элементов (3) используется функцией удаления некоторых данных и функцией для удаления дубликатов по X координате5.
5.В качестве типа числовых данных контейнера выбран вещественный тип повышенной точности long double (16 байт), который позволит обеспечить наиболее точную работу с данными по сравнению с остальными типами.
6.Программное обеспечение состоит из двух исполняемых файлов. Первый
файл занимается вычислениями, второй файл (dpipe.exe) — рисованием
4 Источник: https://ru.cppreference.com/w/cpp/container/deque
5 Предполагается, что пользователь уже имеет готовые для обработки данные и большая часть времени работы не будет уделена этим двум операциям.
9
графиков. Причем первый файл запускает второй, когда рисование необходимо. Коммуникация между сервером и клиентом осуществляется при помощи именованного канала "\\.\pipe\GraphPipe". Первый (родительский) процесс является клиентом, который пишет в канал, а второй (дочерний) процесс (dpipe.exe) является сервером, который принимает сообщения от клиента.
7. Дополнительные вспомогательные сообщения об ошибках.
ID |
Ошибка |
Описание |
|
|
|
|
|
|
|
Ошибка открытия файла.6 |
|
|
|
Возникает в следующих случаях: |
|
3 |
!> File open error. Try |
1. Файл уже открыт в другой программе. |
|
again later. |
2. Файл недоступен (ограничение прав доступа со |
||
|
|||
|
|
||
|
|
стороны системного ПО). |
|
|
|
3. Файл не найден (при открытии на чтение). |
|
|
|
|
|
|
!> File read error. Pair |
Ошибка при чтении числовых данных.7 |
|
4 |
#N# — порядковый номер пары элементов в |
||
number: #N#. |
|||
|
файле. |
||
|
|
||
|
|
|
|
|
!> Number of points |
Превышено максимально допустимое количество |
|
5 |
точек при чтении (с консоли / файла). Возврат к |
||
exceeded. |
|||
|
меню. |
||
|
|
||
|
|
|
|
6 |
!> Mutex was not |
Мьютекс не был освобожден. |
|
released. |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
|
!> WaitForSingleObject |
Ошибка ожидания объекта. |
|
7 |
#details# — детали ошибки. |
||
error: #details# |
|||
|
Пользователю нужно перезапустить программу. |
||
|
|
||
|
|
|
|
8 |
!> Timeout exceeded. |
Превышено время ожидания. |
|
Пользователю нужно перезапустить программу. |
|||
|
|
||
|
|
|
|
9 |
CreateMutex error: |
Ошибка создания объекта мьютекса. |
|
#details# |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
6 Операция прерывается. Происходит возврат к меню.
7 Некорректный ввод игнорируется. Операция считывания продолжается.
10
ID |
Ошибка |
Описание |
|
|
|
|
|
10 |
CreateSemaphore error: |
Ошибка создания объекта семафора. |
|
#details# |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
11 |
CreateEvent error: |
Ошибка создания объекта события. |
|
#details# |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
12 |
CreateWaitableTimer |
Ошибка создания объекта ожидающего таймера. |
|
error: #details# |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
13 |
CreateThread error: |
Ошибка создания потока. |
|
#details# |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
14 |
SetWaitableTimer error: |
Ошибка активации объекта ожидающего таймера. |
|
#details# |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
15 |
ReleaseMutex error: |
Ошибка освобождения объекта мьютекса. |
|
#details# |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
16 |
ReleaseSemaphore error: |
Ошибка освобождения объекта семафора. |
|
#details# |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
17 |
SetEvent error: #details# |
Ошибка освобождения объекта события. |
|
Пользователю нужно перезапустить программу. |
|||
|
|
|
|
18 |
CancelWaitableTimer |
Ошибка закрытия объекта таймера. |
|
error: #details# |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
|
!> An error occurred |
Ошибка создания процесса dpipe.exe. |
|
|
Пользователю нужно убедиться в том, что в |
||
19 |
while trying to create a |
||
каталоге с программой имеется файл dpipe.exe. |
|||
|
process dpipe.exe. |
||
|
Если его нет, то рисование графиков невозможно. |
||
|
|
||
|
|
|
|
20 |
!> The process is not |
Ошибка запуска процесса dpipe.exe. |
|
running. |
Пользователю нужно перезапустить программу. |
||
|
|||
|
|
|
|
|
!> Error sending |
Ошибка отправки данных в канал. |
|
21 |
Пользователю нужно перезапустить программу. |
||
information to the pipe. |
|||
|
|
||
|
|
|
11
ID |
Ошибка |
Описание |
|
|
|
|
|
22 |
!> Error opening pipe |
Ошибка открытия канала на запись. |
|
Пользователю нужно перезапустить программу. |
|||
|
|
||
|
|
|
|
|
!> An error occurred |
Ошибка закрытия дочернего процесса dpipe.exe. |
|
23 |
while the process is |
||
Пользователю нужно перезапустить программу. |
|||
|
complete |
||
|
|
||
|
|
|
|
|
!> Memory was not |
Ошибка выделения памяти. |
|
24 |
Пользователь должен убедиться, что свободной |
||
allocated. |
|||
|
оперативной памяти больше 200 Мбайт. |
||
|
|
||
|
|
|
12