Разработка и стандартизация программного обеспечения

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

Рубрика Программирование, компьютеры и кибернетика
Вид практическая работа
Язык русский
Дата добавления 03.01.2014
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Практическая работа

Разработка и стандартизация программного обеспечения

Введение

программа информационный стандартизация

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

Для того чтобы поддерживать конкурентоспособность своей организации, разработчики ПО должны применять все более эффективные, рентабельные методы, технологии, инструментальные средства, способствующие постоянному повышению качества и более совершенному удовлетворению потребителей ПО. Требования потребителей часто включаются в технические условия и неформализованные требования, описанные на некотором вербальном языке. Однако технические условия и неформализованные требования сами по себе не гарантируют их удовлетворение в конечном продукте, так как в настоящее время существует проблема выработки приемлемых требований к программному продукту, а также ряд других проблем, возникающих в процессе разработки конечного продукта. Это соображение привело к разработке стандартов, руководств, руководящих документов, относящихся к системам качества и дополняющих релевантные требования к ПО, установленные в технических требованиях.

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

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

Эскизный проект - полное описание архитектуры ПО на нескольких уровнях иерархии. На каждом уровне выделяются основные подсистемы и их модули.

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

Рабочий проект:

1. Описание ПО на выбранном проблемно-ориентированном языке.

2. Отладка.

3. Разработка, согласование и утверждение порядка и методики испытаний

4. Проведение тестирования.

5. Корректировка программы и программной документации по результатам тестирования.

6. Проведение приемо-сдаточных мероприятий.

1. Техническое задание

1.1 Обоснование необходимости разработки

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

Дано:

1) задание на разработку ПО;

2) набор ГОСТов, описывающих составление документации к ПО.

Требуется: разработать ПО согласно заданию и составить, основываясь на ГОСТах, список документов:

1) техническое задание;

2) пояснительная записка к эскизному проекту;

3) пояснительная записка к техническому проекту;

4) документация на ПО.

1.1.1 Назначение разработки

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

1.2 Выполнение научно-исследовательских работ

Структура входных и выходных данных

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

В качестве выходных данных выступает построенный график функции.

Предварительный выбор методов решения задачи

Построение графика функции будет осуществляться последовательно, рассчитывая каждую точку графика. Для упрощения этой задачи будет использоваться комбинация методов переноса, отражения и деформации, что существенно облегчит решение, поскольку сведет проблему к построению элементарной функции.

Определение требований к техническим средствам

Минимальная конфигурация для работы с программой:

- Типа процессора - Pentium 4 2.0 GHz или лучше;

- Объём ОЗУ - 512 МБ или больше;

- Мышь и клавиатура.

Обоснование целесообразности использования ранее разработанных программ

Процесс создания программы «Построитель графиков» будет осуществляться без программы-прототипа, поскольку аналогов в выбранной среде программирования у программы нет.

Определение требований к надежности

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

Требования к информационной и программной совместимости

Программное обеспечение должно работать под управлением операционных систем семейства Windows, начиная с Windows XP.

Программное обеспечение должно иметь интуитивно-понятный интерфейс.

Требования к маркировке и упаковке

Не предъявляются.

Требования к транспортированию и хранению

Не предъявляются.

Специальные требования

Не предъявляются.

Технико-экономические показатели

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

1.3 Разработка и утверждение технического задания

Определение требований к программе

Программа «Построитель графиков» должна отвечать следующим требованиям:

1. Должна быть предусмотрена возможность указания области построения заданной пользователем функции.

2. Построение графика функции должно осуществляться с выбранной точностью. В качестве критерия точности был выбран шаг построения.

3. Должна быть предусмотрена функция сохранения построенного графика, а также открытия ранее сохраненного.

4. Осуществлять контроль за вводимыми пользователем значениями.

Выделение стадий, этапов и сроков разработки

Этапы и сроки их выполнения приведены в таблице 1.

Таблица 1 - Стадии, этапы и сроки их реализации

Название этапа

Время, затраченное на этап

Ответственный за исполнение

11

Составление технического задания

7 дней

Хлудова О.Е.

22

Изучение методов и алгоритмов

14 дней

Хлудова О.Е.

33

Программная реализация

14 дней

Хлудова О.Е.

44

Составление отчетной документации

7 дней

Хлудова О.Е.

Выбор языков программирования

Выбор языка программирования и среды разработки осуществлялся методом групповой оценки объектов при непосредственном оценивании. Трем экспертам было предложено оценить 4 языка программирования: Delphi, C#, Java, C++ в своем интервале. Осуществив необходимые расчеты, был получен вектор количественных оценок важности объектов и вектор коэффициентов компетентности экспертов. В результате лучшим языком программирования оказался Delphi. Таким образом, разработка программы будет осуществляться в среде Borland Delphi 7. Это один из самых успешных продуктов Borland из-за стабильности, скорости и низких требований к аппаратному обеспечению.

Порядок контроля и приемки

Порядок защиты: защита осуществляется преподавателю предмета «Разработка и стандартизация ПС и ИТ». Крайний срок защиты - до начала зачетной недели.

2. Эскизный проект

2.1 Иерархическая схема структуры программы

На рисунке 1 приведена структура программы, описывающие основные модули и входящие в их состав блоки.

Рисунок 1 - Иерархическая схема структуры программы

2.2 Определение управляющего, описывающего и исполняющего модулей программы

В таблице 2 приведена структура программы, описывающая управляющий, исполняющий и обрабатывающий модули программы.

Таблица 2 - Структура программных модулей

Модуль

Название процедуры

Описание процедуры

Unit1- исполняющий модуль

procedure XYMinMax

Поиск минимальных и максимальных значений для масштабирования

procedure ris

Построение графика

procedure TForm1. StartBtnClick

Расчет точек

procedure TForm1. OpenBtnClick

Открытие файла

procedure TForm1. SaveBtnClick

Сохранение файла

Unit3 MyMath - обрабатывающий модуль

function maxmin

Проверка на отрицательность, удаление нулей

procedure delnull

Процедура проверки деления на нуль

procedure multiply

Процедура умножения

procedure substract

Процедура вычитания

procedure division

Процедура деления

function erranalise

Проверка на правильность введенной функции

Unit3 - управляющий модуль

function analise

Анализ введенной функции

3. Технический проект

3.1 Спецификации входных и выходных данных

В таблице 3 приведена спецификация входных данных.

Таблица 3 - Спецификация входных данных

Переменная

Описание

Ограничения

FormEd

содержит введенную пользователем функцию

оформляется в соответствии со стандартом, указанным в инструкции

XStart

содержит координату области определения

любое целое или рациональное число

XEnd

содержит координату области определения

любое целое или рациональное число

StepEd

содержит шаг построения (точность)

любое положительное число

В таблице 4 приведена спецификация выходных данных.

Таблица 4 - Спецификация выходных данных

Переменная

Формат

Описание

TOtv

record

содержит ответ

Resh

string

содержит решение

3.2 Блок-схемы алгоритмов

Блок-схемы процедур модуля Unit1

На рисунке 2 представлена блок-схема процедуры XYMinMax, осуществляющая поиск максимальных и минимальных значений для масштабирования и блок-схема процедуры Ris, выполняющая построение графика.

Блок-схемы процедур модуля Unit3

На рисунке 3 изображены блок-схемы процедур delnull и unitrig, реализующие операции проверки деления на нуль и тригонометрические функции соответственно.

Рисунок 2 - Блок-схема процедуры XYMinMax, процедуры Ris

Рисунок 3 - Блок-схема процедуры delnull и unitrig

4. Рабочий проект

4.1 Интерфейс программы

На рисунке 4 представлено главное окно программы «Построитель графиков», содержащее все необходимые элементы для работы с программой.

Рисунок 4 - Главное окно программы «Graphics»

На рисунке 5 представлен вид главного окна программы после того, как пользователь нажмет кнопку «Рисовать», предварительно задав вид функции, которую необходимо построить и ее область построения. Поставив флажок перед пунктом «Соединение линиями» пользователь получит график функции, сглаженный линиями. В случае если флажок поставлен не будет, график будет нарисован точечно. Кроме того, график функции может быть представлен в масштабе, чтобы корректно отобразить получившийся результат в области построения. Для этого существует специальная функция «Масштаб», применить которую можно поставив флажок перед соответствующим пунктом.

Рисунок 5 - Главное окно после нажатия кнопки «Рисовать»

Полученный результат может быть сохранен в виде файла. Чтобы воспользоваться этой функцией, необходимо нажать кнопку «Сохранить». График будет сохранен в формате.grf. При последующем использовании программы сохраненные графики можно открывать, нажав специально предназначенную для этого кнопку «Открыть». Форма открытия и сохранения файла представлена на рисунках 6 и 7 соответственно. Нарисовав один график, пользователь может либо продолжать рисовать и другой график в этой же области построения, либо, нажав кнопку «Очистить», нарисовать график на уже чистой области построения.

Пользователю доступна вся информация о разработанном программном продукте, включающая в себя информацию о разработчике, назначении программы и подробную инструкцию по работе с данной программой. Всю эту информацию пользователь может получить, нажав на соответствующие кнопки в главном меню программы. На рисунке 8 показан вид формы «О программе», а на рисунке 9 вид формы «Инструкция».

Рисунок 6 - Форма сохранения файла

Рисунок 7 - Форма открытия файла

Рисунок 8 - О программе

Рисунок 9 - Инструкция

4.2 Описание алгоритма взаимодействия пользователя с программой

Алгоритм взаимодействия пользователя с программой представлен в виде графа на рисунке 10.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 10 - Алгоритм пользователя с программой в виде графа

Обозначения:

1 - запуск программы;

2 - ввод функции;

3 - открытие ранее сохраненного файла;

4 - ввод области определения, точности;

5 - нажатие кнопки «рисовать»;

6 - сохранение построенного графика в виде файла.grf;

7 - очищение области построения;

8 - выход из программы.

4.3 Тестирование программы на обнаружение ошибок пользователя

Основным требованием к надежности программного продукта является реагирование на ошибки, допускаемые пользователем при работе.

В процессе работы пользователю требуется ввести некоторые значения, а именно:

1) функцию, которую требуется построить;

2) область построения этой функции, т.е. интервал [];

3) точность, т.е. шаг построения

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

В модуле MyMath, разработанной программы осуществляется анализ и проверка введенной пользователем информации. Если набранная информация корректна, программа осуществляет свою работу по заданному алгоритму. В противном случае программа выдаст сообщение для пользователя о неправильности введенной информации. На рисунке 11 представлено окно, оповещающее пользователя о совершенной ошибке.

Рисунок 11 - Окно ошибки

Кроме того пользователь может ознакомиться с перечнем возможных значений вводимой информации в окне «Инструкция», нажав соответствующий пункт главного меню.

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

Поскольку листинг всей программы занимает значительное место будет приведен листинг только математического модуля программы. Листинг приведен в приложении А.

Заключение

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

· техническое задание (ТЗ);

· пояснительная записка к эскизному проекту;

· пояснительная записка к техническому проекту;

· документация на ПО.

В процессе выполнения данной работы было выявлено, что ГОСТы более ориентированы на создание крупных АСУ и разрабатывать на их основе небольшой проект крайне затруднительно, поскольку это отнимает немало времени. Поэтому при разработке небольшого программного продукта лучше опираться на международные стандарты ISO, которые лучше отвечают требованиям современного рынка.

Приложение А

unit MyMath;

interface

uses SysUtils, math;

type

func=(more, less, same); type TOtv=record Resh:string; StartStr, EndStr:word;

end;

var otv:totv;

function maxmin (a, b:string):func; procedure swapstr (var a, b:string);

procedure swaparr (var a, b:array of shortint); procedure delnull (var a:string);

procedure multiply (var a, b:string); procedure addition (var a, b:string);

procedure substract (var a, b:string); procedure division (zn:cardinal; var a, b:string);

procedure uni (str:string; n:word; deystv:string); procedure unie (str:string; n:word);

procedure unitrig (str:string; n:word; deystv:string); function erranalise (str:string):string;

function analise (str:string):string;

implementation

function maxmin (a, b:string):func; var ch1:cardinal;

begin

delnull(a); delnull(b);

if (a[1]='-') and (b[1]<>'-') then begin maxmin:=less; exit; end;

if (a[1]<>'-') and (b[1]='-') then begin maxmin:=more; exit; end;

if pos (', ', a)=0 then a:=a+', 0'; if pos (', ', b)=0 then b:=b+', 0'; if pos (', ', a)>pos (', ', b) then

begin maxmin:=more; exit; end;

if pos (', ', a)<pos (', ', b) then begin maxmin:=less; exit; end;

if length(a)>length(b) then for ch1:=1 to length(a) - length(b) do b:=b+'0';

if length(a)<length(b) then for ch1:=1 to length(b) - length(a) do a:=a+'0';

begin if a[ch1]<b[ch1] then begin maxmin:=less; exit; end;

if a[ch1]>b[ch1] then begin maxmin:=more; exit; end; end;

maxmin:=same; end;

procedure swapstr (var a, b:string);

var c:^string;

begin

new(c); c^:=a; a:=b; b:=c^;

dispose(c); end;

procedure swaparr (var a, b:array of shortint);

var c, ch1:cardinal; q:shortint;

begin if (high(a) - low(a))=(high(b) - low(b)) then begin

if (low(a)>low(b)) or (low(a)=low(b)) then begin c:=low(a) - low(b);

for ch1:=low(a) to high(a) do begin q:=a[ch1]; a[ch1]:=b [ch1-c]; b [ch1-c]:=q; end; end;

if low(a)<low(b) then begin c:=low(b) - low(a); for ch1:=low(a) to high(a) do

begin q:=a [ch1-c]; a [ch1-c]:=b[ch1]; b[ch1]:=q; end; end; end; end;

procedure delnull (var a:string);

var min1:boolean;

begin

min1:=false; if pos ('-', a)=1 then begin min1:=true; delete (a, 1,1); end;

if a='' then begin a:='0'; exit; end; while a[1]='0' do

begin delete (a, 1,1); if a='' then begin a:='0'; break; end; end;

if pos (', ', a)<>0 then while a [length(a)]='0' do delete (a, length(a), 1);

if a [length(a)]=', ' then delete (a, length(a), 1); if a='' then a:='0'; if a[1]=', ' then a:='0'+a;

if (min1=true) and (a<>'0') then a:='-'+a; end;

procedure multiply (var a, b:string);

var ch1, ch2, z, la, lb:cardinal; min1, min2, min:boolean; a1, b1, c:array of byte;

begin

delnull(a); delnull(b);

min1:=false; min2:=false; z:=0; if pos ('-', a)=1 then begin min1:=true;

delete (a, 1,1); end;

if pos ('-', b)=1 then begin min2:=true; delete (b, 1,1); end;

min:=false;

if (min1=true) or (min2=true) then min:=true;

if (min1=true) and (min2=true) then min:=false; if pos (', ', a)<>0 then begin

z:=length(a) - pos (', ', a); delete (a, pos (', ', a), 1); end;

if pos (', ', b)<>0 then begin z:=abs (z+length(b) - pos (', ', b)); delete (b, pos (', ', b), 1); end;

la:=length(a); lb:=length(b); setlength (a1, la); setlength (b1, lb); setlength (c, la+lb);

for ch1:=0 to la-1 do a1 [ch1]:=strtoint (a[ch1+1]); for ch1:=0 to lb-1 do

b1 [ch1]:=strtoint (b[ch1+1]); for ch1:=0 to la+lb do c[ch1]:=0;

for ch1:=la-1 downto 0 do for ch2:=lb-1 downto 0 do begin

c [ch1+ch2+1]:=c [ch1+ch2+1]+a1 [ch1]*b1 [ch2]; if c [ch1+ch2+1]>9 then

begin c [ch1+ch2]:=c [ch1+ch2]+c [ch1+ch2+1] div 10;

c [ch1+ch2+1]:=c [ch1+ch2+1] - (c [ch1+ch2+1] div 10)*10; end; end;

a:=''; b:='0'; if min=true then a:='-'; for ch1:=0 to la+lb-1 do a:=a+inttostr (c[ch1]);

if z<>0 then insert (', ', a, abs (length(a) - z+1)); delnull(a); delnull(b);

finalize(a1); finalize(b1); finalize(c); end;

procedure addition (var a, b:string);

var ch1, z, z2, la:cardinal; min1, min2:boolean; a1, b1, c:array of byte;

begin delnull(a); delnull(b); min1:=false; min2:=false; z:=0; z2:=0; if pos ('-', a)=1 thenbegin min1:=true; delete (a, 1,1); end;

if pos ('-', b)=1 then begin min2:=true; delete (b, 1,1); end;

if pos (', ', a)<>0 then begin z:=length(a) - pos (', ', a); delete (a, pos (', ', a), 1); end;

if pos (', ', b)<>0 then begin z2:=length(b) - pos (', ', b); delete (b, pos (', ', b), 1); end;

if z>z2 then for ch1:=1 to z-z2 do b:=b+'0'; if z<z2 then begin for ch1:=1 to z2-z do

a:=a+'0'; z:=z2; end; if length(a)>length(b) then

for ch1:=1 to length(a) - length(b) do b:='0'+b; if length(a)<length(b) then

for ch1:=1 to length(b) - length(a) do a:='0'+a;

la:=length(a); setlength (a1, la); setlength (b1, la); setlength (c, la+1);

for ch1:=0 to la-1 do begin a1 [ch1]:=strtoint (a[ch1+1]); b1 [ch1]:=strtoint (b[ch1+1]);

c[ch1]:=0; end; c[la]:=0;

if (min1=true) and (min2=false) then begin swapstr (a, b); substract (a, b);

exit; end;

if (min1=false) and (min2=true) then begin substract (a, b);

exit; end;

if (min1=true) and (min2=true) then begin a:='-'+a; substract (a, b);

exit; end;

for ch1:=la-1 downto 0 do begin

c [ch1+1]:=c [ch1+1]+a1 [ch1]+b1 [ch1]; if c [ch1+1]>9 then begin

c[ch1]:=c [ch1+1] div 10; c [ch1+1]:=c [ch1+1] - 10; end; end;

a:=''; b:='0'; if min1=true then a:='-'; for ch1:=0 to la do a:=a+inttostr (c[ch1]);

if z<>0 then insert (', ', a, abs (length(a) - z+1)); delnull(a); delnull(b); finalize(a1);

finalize(b1); finalize(c); end;

procedure substract (var a, b:string);

var ch1, z, z2, la:cardinal; min1, min2:boolean; a1, b1, c:array of shortint; max:func;

begin delnull(a); delnull(b); min1:=false; min2:=false; z:=0; z2:=0;

if pos ('-', a)=1 then begin min1:=true; delete (a, 1,1); end;

if pos ('-', b)=1 then begin min2:=true; delete (b, 1,1); end;

if pos (', ', a)<>0 then begin z:=length(a) - pos (', ', a); delete (a, pos (', ', a), 1); end;

if pos (', ', b)<>0 then begin z2:=length(b) - pos (', ', b); delete (b, pos (', ', b), 1); end;

if z>z2 then for ch1:=1 to z-z2 do b:=b+'0'; if z<z2 then begin

for ch1:=1 to z2-z do a:=a+'0'; z:=z2; end;

if length(a)>length(b) then for ch1:=1 to length(a) - length(b) do b:='0'+b;

if length(a)<length(b) then for ch1:=1 to length(b) - length(a) do a:='0'+a;

la:=length(a); setlength (a1, la); setlength (b1, la); setlength (c, la+1);

for ch1:=0 to la-1 do begin a1 [ch1]:=strtoint (a[ch1+1]); b1 [ch1]:=strtoint (b[ch1+1]);

c[ch1]:=0; end; c[la]:=0; if (min1=true) and (min2=false) then begin addition (a, b);

a:='-'+a; exit; end;

if (min1=true) and (min2=true) then begin swapstr (a, b); substract (a, b); exit; end;

if (min1=false) and (min2=true) then begin addition (a, b); exit; end;

max:=maxmin (a, b); if max=less then swaparr (a1, b1); for ch1:=la-1 downto 0 do

begin c [ch1+1]:=c [ch1+1]+a1 [ch1] - b1 [ch1]; if c [ch1+1]<0 then begin

c[ch1]:=c[ch1] - 1; c [ch1+1]:=c [ch1+1]+10; end; end;

a:=''; b:='0'; if max=less then a:='-'; for ch1:=0 to la do a:=a+inttostr (c[ch1]);

if z<>0 then insert (', ', a, abs (length(a) - z+1)); delnull(a); delnull(b); finalize(a1);

finalize(b1); finalize(c); end;

procedure division (zn:cardinal; var a, b:string);

var ch1:cardinal; z:longint; min1, min2, min:boolean; c:shortint; a2, b2, c2:string; temp:string; label m1;

begin delnull(a); delnull(b); if (a='0') or (b='0') then begin a:='0'; b:='0'; exit; end;

min1:=false; min2:=false; if pos ('-', a)=1 then begin min1:=true; delete (a, 1,1); end;

if pos ('-', b)=1 then begin min2:=true; delete (b, 1,1); end;

min:=false; if (min1=true) or (min2=true) then min:=true;

if (min1=true) and (min2=true) then min:=false; a2:=a; b2:=b; a:=''; z:=0;

if min=true then a:='-'; ch1:=0; while maxmin (a2, b2)=less do begin exit;

temp:='10'; multiply (a2, temp); a:=a+'0'; z:=2; end;

while (pos (', ', a2)<>0) or (pos(', ', b2)<>0) do begin temp:='10'; multiply (a2, temp);

temp:='10'; multiply (b2, temp); end;

b:=b2; c:=0; c2:='0'; min:=false; min2:=false;

while ((length(a) - z+1<zn) and (z<>0)) or (z=0) do begin min1:=false;

while maxmin (c2, b2)=less do begin if (min2=true) and (min1=true) then

a:=a+'0'; ch1:=ch1+1; if ch1>length(a2) then min:=true; if min=true then

begin a2:=a2+'0'; if z=0 then z:=length(a)+1; end; c2:=c2+a2 [ch1]; min1:=true; end;

min2:=true; while (maxmin (c2, b2)=more) or (maxmin(c2, b2)=same) do begin

substract (c2, b2); b2:=b; c:=c+1; end; a:=a+inttostr(c); if (c2='') or (c2='0') then break;

c:=0; end; if z<>0 then insert (', ', a, z); b:='0'; delnull(a); delnull(b); end;

procedure unie (str:string; n:word);

var ch1, ch2:string; l, z:word; min:boolean; begin ch1:=''; ch2:=''; z:=0;

if str [n+1]='-' then str [n+1]:='~'; for l:=n-1 downto 1 do begin

if ((str[l]<'0') or (str[l]>'9')) and (str[l]<>', ') and (str[l]<>'~') then break;

if str[l]='~' then ch1:='-'+ch1 else ch1:=str[l]+ch1; end; min:=false;

if ch1 [1]='-' then begin min:=true; delete (ch1,1,1); end;

for l:=n+1 to length(str) do begin if ((str[l]<'0') or (str[l]>'9')) and (str[l]<>'~') then break;

if str[l]='~' then ch2:=ch2+'-' else ch2:=ch2+str[l]; end;

if abs (strtofloat(ch2))>30 then begin otv.resh:='0'; exit; end;

if pos (', ', ch1)<>0 then begin z:=length(ch1) - pos (', ', ch1); delete (ch1, pos (', ', ch1), 1);

end; otv.resh:=ch1; if ch2 [1]<>'-' then begin for l:=1 to strtoint(ch2) do begin

z:=z+1; otv.resh:=otv.resh+'0'; if (z<>0) and (z<>length (otv.resh)) then insert (', ', otv.resh, z);

end; if ch2 [1]='-' then delete (ch2,1,1); otv.resh:='0'+otv.resh; insert (', ', otv.resh, 2); end;

delnull (otv.resh); if min=true then otv.resh:='~'+otv.resh; end;

procedure uni (str:string; n:word; deystv:string);

var ch1, ch2:string; l:word; begin

ch1:=''; ch2:=''; for l:=n-1 downto 1 do begin

if ((str[l]<'0') or (str[l]>'9')) and (str[l]<>', ') and (str[l]<>'~') then break;

if str[l]='~' then ch1:='-'+ch1 else ch1:=str[l]+ch1; end;

otv.startstr:=n-length(ch1); for l:=n+1 to length(str) do begin

if ((str[l]<'0') or (str[l]>'9')) and (str[l]<>', ') and (str[l]<>'~') then break;

if str[l]='~' then ch2:=ch2+'-' else ch2:=ch2+str[l]; end;

otv.endstr:=n+length(ch2);

if deystv='step' then otv.resh:=floattostr (power(strtofloat(ch1), strtofloat(ch2)));

if deystv='umn' then otv.resh:=floattostr (strtofloat(ch1)*strtofloat(ch2));

if (deystv='del') or (deystv='drob') then otv.resh:=floattostr (strtofloat(ch1)/strtofloat(ch2));

if deystv='sum' then otv.resh:=floattostr (strtofloat(ch1)+strtofloat(ch2));

if deystv='min' then otv.resh:=floattostr (strtofloat(ch1) - strtofloat(ch2));

if otv.resh[1]='-' then otv.resh[1]:='~';

if pos ('E', otv.resh)<>0 then unie (otv.resh, pos ('E', otv.resh)); end;

procedure unitrig (str:string; n:word; deystv:string);

var l:word; ch:string;

begin otv.startstr:=n; for l:=n+1+length(deystv) to length(str) do

begin if ((str[l]<'0') or (str[l]>'9')) and (str[l]<>', ') and (str[l]<>'~') then break;

if str[l]='~' then ch:=ch+'-' else ch:=ch+str[l]; end;

otv.endstr:=n+length(ch)+length(deystv);

if deystv='cos' then otv.resh:=floattostr (cos(strtofloat(ch)));

if deystv='sin' then otv.resh:=floattostr (sin(strtofloat(ch)));

if deystv='tan' then otv.resh:=floattostr (sin(strtofloat(ch))/cos (strtofloat(ch)));

if deystv='ctg' then otv.resh:=floattostr (cos(strtofloat(ch))/sin (strtofloat(ch)));

if deystv='log' then otv.resh:=floattostr (log10 (strtofloat(ch)));

if deystv='sinh' then otv.resh:=floattostr (sinh(strtofloat(ch)));

if deystv='cosh' then otv.resh:=floattostr (cosh(strtofloat(ch)));

if otv.resh[1]='-' then otv.resh[1]:='~'; if pos ('E', otv.resh)<>0 then unie (otv.resh, pos ('E', otv.resh)); end; function erranalise (str:string):string;

var n:word; sk:integer; label a, b; begin sk:=0; for n:=1 to length(str) do begin

if str[n]=' (' then sk:=sk+1; if str[n]=')' then sk:=sk-1; end;

if sk<>0 then begin erranalise:='0'; exit; end; a:; for n:=1 to length(str) - 3 do 2sin x=2*sin x

if (((str[n]>='0') and (str[n]<='9')) or (str[n]=')')) and((copy (str, n+1,3)='sin') or

(copy (str, n+1,3)='cos') or (copy(str, n+1,3)='tan') or

(copy (str, n+1,3)='ctg') or (copy(str, n+1,3)='log')) then begin insert ('*', str, n+1); goto a;

end; b:; for n:=1 to length(str) - 1 do

begin if ((str[n]<'0') or (str[n]>'9')) and (str[n+1]=', ') then begin insert ('0', str, n+1);

goto b; end; if (((str[n]>='0') and (str[n]<='9')) or (str[n]=')')) and((str [n+1]='(') or

(str [n+1]>='a') and (str[n+1]<='z')) then begin insert ('&', str, n+1); goto b; end;

if ((str[n]='*') or (str[n]='&') or (str[n]=' ') or (str[n]='/') or (str[n]='+') or (str[n]='-') or (str[n]='(')) and (str[n+1]='-') then str [n+1]:='~'; end; erranalise:=str; end;

function analise (str:string):string;

var str2:string; n, m, opsk, clsk:word; label a, b, c; begin str:=' ('+str+')'; str:=erranalise(str);

str2:=''; repeat a:otv.resh:=''; for n:=1 to length(str) do

if ((str[n]<'0') or (str[n]>'9')) and (str[n]<>', ') and (str[n]<>'(') and (str[n]<>')') and (str[n]<>'~') then otv.resh:='norm'; if otv.resh<>'norm' then goto b; str2:=str; opsk:=0; clsk:=0;

for n:=1 to length(str) do begin if str[n]=' (' then opsk:=n; if str[n]=')' then begin

clsk:=n; str2:=copy (str, opsk, clsk-opsk+1); break; end; end; otv.resh:='';

for n:=1 to length(str2) do if ((str2 [n]<'0') or (str2 [n]>'9')) and (str2 [n]<>', ') and (str2 [n]<>'(') and (str2 [n]<>')') and (str2 [n]<>'~') then otv.resh:='norm'; if otv.resh<>'norm' then begin delete (str, opsk, clsk-opsk+1);

insert (copy(str2,2, length(str2) - 2), str, opsk); goto a; end;

for m:=1 to 5 do begin c:; for n:=1 to length(str2) - 4 do if m=3 then begin if copy (str2, n, 4)='cos ' then begin unitrig (str2, n, 'cos'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; if copy (str2, n, 4)='sin ' then begin unitrig (str2, n, 'sin'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; if copy (str2, n, 4)='tan ' then begin unitrig (str2, n, 'tan') delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; if copy (str2, n, 4)='ctg ' then begin unitrig (str2, n, 'ctg'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); begin unitrig (str2, n, 'log'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; for n:=1 to length(str2) - 5 do if m=3 then begin if copy (str2, n, 4)='cosh ' then begin unitrig (str2, n, 'cosh'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; if copy (str2, n, 4)='sinh ' then begin unitrig (str2, n, 'sinh'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; end; for n:=1 to length(str2) do begin if (m=1) and (str2 [n]='^') then begin uni (str2, n, 'step'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; if (m=2) and (str2 [n]='&') then begin uni (str2, n, 'umn'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; if (m=2) and (str2 [n]='\') then begin uni (str2, n, 'drob'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; if (m=4) and (str2 [n]='*') then begin uni (str2, n, 'umn'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; if (m=4) and (str2 [n]='/') then begin uni (str2, n, 'del'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1) insert (otv.resh, str2, otv.startstr); goto c; end; if (m=5) and (str2 [n]='+') then begin uni (str2, n, 'sum'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; if (m=5) and (str2 [n]='-') then begin uni (str2, n, 'min'); delete (str2, otv.startstr, otv.endstr-otv.startstr+1); insert (otv.resh, str2, otv.startstr); goto c; end; end; end; if str2 [1]=' (' then delete (str2,1,1) if str2 [length(str2)]=')' then delete (str2, length(str2), 1) delete (str, opsk, clsk-opsk+1) insert (str2, str, opsk); until opsk=0; b:if str[1]=' (' then delete (str, 1,1); if str [length(str)]=')' then delete (str, length(str), 1); if str[1]='~' then str[1]:='-'; analise:=str; end; end.

Размещено на Allbest.ru


Подобные документы

  • Основные функции автоматизированной системы "Решатель математических формул". Требования к техническим средствам, информационной и программной совместимости. Стратегии конструирования программного обеспечения. Проектирование, разработка программного кода.

    курсовая работа [600,0 K], добавлен 25.02.2012

  • Цели и задачи программной инженерии. Понятие программного обеспечения. Шесть принципов эффективного использования программного обеспечения. Виды программного обеспечения: общесистемное, сетевое и прикладное. Принципы построения программного обеспечения.

    курсовая работа [30,4 K], добавлен 29.06.2010

  • Программная и техническая характеристика информационных систем предприятия. Требования к информационной и программной совместимости. Проектирование программного обеспечения с использованием специализированных программных пакетов. Разработка базы данных.

    отчет по практике [1,3 M], добавлен 11.04.2019

  • Разработка программного продукта "2D-макет фильтра" для производства ООО ПК "ХимМаш". Назначение программы, требования к информационной и программной совместимости, параметрам технических средств. Проектирование архитектуры программного продукта.

    курсовая работа [1,3 M], добавлен 14.02.2016

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

    отчет по практике [159,3 K], добавлен 11.04.2016

  • Анализ требований к программному продукту. Требования к информационной и программной совместимости. Проектирование архитектуры программного продукта. Виды программ и программных документов. Общие сведения о С++. Технология разработки программного модуля.

    дипломная работа [1,2 M], добавлен 05.08.2011

  • Среда проектирования программного обеспечения Rational Rose. Унифицированный язык моделирования UML. Требования к функциональности, к безопасности, интерфейсу, настраиваемости, информационной и программной совместимости, программная документация.

    курсовая работа [582,0 K], добавлен 20.07.2011

  • Оснащенность предприятия системным программным обеспечением, используемым для организации производственного процесса. Проектирование, внедрение и эксплуатация системного и прикладного программного обеспечения. Тестирование и отладка программного продукта.

    отчет по практике [272,2 K], добавлен 29.12.2014

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

    курсовая работа [636,2 K], добавлен 23.08.2011

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

    реферат [2,2 M], добавлен 25.12.2017

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.