Разработка приложения "Базовые логические операции"

 

1. Специальная часть


.1 Задача


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

Задача заключается в написании приложения «Решение базовых логических операций».

Данная организация программы в целом позволит:

Создать базовые логические операции

Сохранить базовые логические операции в файл и вывод в приложение Microsoft Word

Получить студентам разные варианты базовых логических операций

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

Записать полученную студентом оценку и вариант в файл

Описание математической модели

В алгебре логики, как и в обычной алгебре, вводится ряд операций. Связки И, ИЛИ и НЕ заменяются логическими операциями.

Конъюнкция - это логическое умножение.

Конъюнкция двух высказываний А и В соответствует союзу «И». Она обозначается символами /\ или & (амперсенд), или *.

Запись А ^ В читается как «А и В».

Пример:

Пусть суждение А = «Сегодня солнечный день», а суждение В = «Иван пошел купаться», тогда конъюнкция А ^ В есть суждение: Х = «Сегодня солнечный день, и Иван пошел купаться».

Конъюнкция двух высказываний истинна тогда и только тогда, когда истинны оба высказывания.

Таблица истинности конъюнкции двух суждений А и В такова:

Таблица истинности. Конъюнкция.

АВА ^ В000010100111

В программировании эту операцию обозначают «AND» (от английского «И»).

Дизъюнкция - это логическое сложение.

Дизъюнкция двух высказываний А и В соответствует союзу «ИЛИ». Она обозначается символами \/ или + .

Запись А V В читается как «А или В»

Пример:

Пусть суждение А = «Снег пойдет ночью», а суждение В = «Снег пойдет утром», тогда дизъюнкция A V В есть суждение: Х = «Снег пойдет ночью или утром».

Дизъюнкция двух высказываний ложна тогда и только тогда, когда ложны оба высказывания.

Таблица истинности дизъюнкции двух суждений А и В такова:


Таблица истинности. Дизъюнкция.

АВА V В000011101111

В программировании эту операцию обозначают «OR» (от английского «ИЛИ»).

Инверсия (отрицание) - это логическое не.

Говорят, что имея суждение А, можно образовать новое суждение, которое читается как «не А» или «неверно, что А»

Для обозначения отрицания суждения употребляется символ ¬ или - над переменной.

Запись ¬А читается как «не А».

Пример:

Пусть суждение А = «Сегодня идёт снег», тогда отрицанием будет (не А) А = «Сегодня не идёт снег».

Инверсия логической переменной истинна, если сама переменная ложна, и, наоборот, инверсия ложна, если переменная истинна.

Для операции «инверсия» (или «отрицания») таблица истинности выглядит так:


Таблица истинности. Отрицание.

А¬А0110

Это может быть также записано в виде:

= 1, 1 = 0

В программировании операцию отрицания обозначают «NOT» (от английского «не»).

Импликация - это логическое следование.

Импликация двух высказываний А и В соответствует союзу «ЕСЛИ…ТО». Она обозначается символом ?

Запись А ? В читается как «из А следует В»

Пример:

Пусть суждение А = «Завтра будет хорошая погода», а суждение В = «Я выйду на прогулку», тогда импликация А ? В есть суждение: Х = «Если завтра будет хорошая погода, то я выйду на прогулку».

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

Таблица истинности импликации двух суждений А и В такова:


Таблица истинности. Импликация.

АВА ? В001011100111

В программировании эту операцию обозначают «IMP».

Эквивалентность - это функция тождества.

Она обозначается символами ? или <=>. Выбираем обозначение А ? В. («тогда и только тогда»).

Запись А ? В читается как «А эквивалентно В».

Пример:

Эквивалентность двух высказываний истинна только в тех случаях, когда оба высказывания ложны или оба истинны.

Таблица истинности эквивалентности двух суждений А и В такова:


Таблица истинности. Эквивалентность.

АВА ? В001010100111

В программировании эту операцию обозначают «EQV».

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


.2 Технология разработки программы


Описание среды программирования

Для создания программного продукта использовалась среда программирования Delphi 7, как наиболее подходящего под поставленные задачи.

Среда программирования Delphi представляет собой идеальную платформу для создания приложений в среде Windows. С ее помощью можно быстро писать программы. Визуальные аспекты программирования в Delphi позволяют считать его великолепным инструментом скоростной разработки программ. А также он содержит в себе всю мощь компилируемого языка программирования (Object Pascal), помещённого в оболочку средств скоростной разработки приложений (RAD) - Rapid Application Development. RAD резко повышает эффективность разработки приложений.

Во-первых, это, конечно же, наличие объектно-ориентированного языка программирования:

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

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

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

Операторы - Список операторов через пробел: + - * / div mod not and or xor shl shr ^ = <> >= <= < > @ in is as

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

Объекты - Объекты как экземпляры класса объявляются в программе в разделе var как обычные переменные. Например: var CCircle1: TColorCircle; CircleA: TCircle; Как и в случае записей, для обращения к конкретному элементу объекта (полю; свойству или методу) указывается имя объекта и имя элемента, разделенные точкой, то есть имя элемента является составным.

Классы В языке Object Pascal классы - это специальные типы данных, используемые для описания объектов. Соответственно объект, имеющий тип какого-либо класса, является экземпляром (instance) этого класса или переменной этого типа. Класс представляет собой особый тип записи, имеющий в своем составе такие элементы (члены, member), как поля, свойства и методы. Поля класса аналогичны полям записи и служат для хранения информации об объекте. Методами называются процедуры и функции, предназначенные для обработки полей. Свойства занимают промежуточное положение между полями и методами.(от англ. ActiveX Data Objects - «объекты данных ActiveX») - интерфейс программирования приложений для доступа к данным, разработанный компанией Microsoft (MS Access, MS SQL Server) и основанный на технологии компонентов ActiveX. ADO позволяет представлять данные из разнообразных источников (реляционных баз данных, текстовых файлов и т. д.) в объектно-ориентированном виде. [6]

Объектная модель ADO состоит из следующих объектов высокого уровня и семейств объектов:

Connection (представляет подключение к удалённому источнику данных)

Recordset (представляет набор строк, полученный от источника данных)

Command (используется для выполнения команд и SQL-запросов с параметрами)

Record (может представлять одну запись объекта Recordset или же иерархическую структуру, состоящую из текстовых данных)

Stream (используется для чтения и записи потоковых данных, например, документов XML или двоичных объектов)

Errors (представляет ошибки)

Fields (представляет столбцы таблицы базы данных)(представляет набор параметров SQL-инструкции)(представляет набор свойств объекта)

Компоненты ADO используются в языках высокого уровня, таких как VBScript в ASP, JScript в WSH, Visual Basic, Delphi.

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

В-третьих, должна обеспечиваться поддержка стандартных протоколов обмена данными между приложениями.

Система Delphi - самое последнее достижение на ниве визуального программирования. В этой среде программирования можно создавать пользовательские интерфейсы, стили оформления, что расширяет потребности пользователей.

Входные и выходные данные

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

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

Структурное проектирование задачи

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

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

Программа имеет иерархическую структуру, приведенную на Рис. 2 (Приложение А)

Методы решения задачи

Создание функции

Создание позволяет создать новую функцию, которую в последствии преподаватель задаст для решения дома.


var,s2,s3,y1,y2,y3: string;l1,x2l1,x3l1,x4l1:string;l2,x2l2,x3l2,x4l2:string;l3,x2l3,x3l3,x4l3:string;l4,x2l4,x3l4,x4l4:string;

Label23.Caption:='';

Label24.Caption:='';

Label25.Caption:='';

Label26.Caption:='';

if (CoB11.Text='') or (CoB12.Text='') or (CoB13.Text='') then

ShowMessage('Заполните все операции 1 функции!!!')

else

begin

begin

if Chb11.Checked = true then

begin

x1l1:='not x1 ';

x1l2:='x1 ';

x1l3:='not x1 ';

x1l4:='not x1 ';

end

else

x1l4:='x1 ';

x1l1:='x1 ';

x1l3:='x1 ';

x1l2:='not x1 ';

end;

Begin

s1:=Cob11.Items[Cob11.ItemIndex];

if s1 = 'Конъюнкция (*)' then

y1:='and ';

if s1 = 'Дизъюнкция (+)' then

y1:='or ';

if s1 = 'Исключающее (ИЛИ)' then

y1:='xor ';

end;

begin

if Chb12.Checked = true then

begin

x2l4:='not x2 ';

x2l1:='not x2 ';

x2l2:='x2 ';

x2l3:='x2 ';

end

else

x2l4:='x2 ';

x2l2:='not x2 ';

x2l1:='x2 ';

x2l3:='not x2 ';

end;

Begin

s2:=Cob12.Items[Cob12.ItemIndex];

if s2 = 'Конъюнкция (*)' then

y2:='and ';

if s2 = 'Дизъюнкция (+)' then

y2:='or ';

if s2 = 'Исключающее (ИЛИ)' then

y2:='xor ';

end;

begin

if Chb13.Checked = true then

begin

x3l4:='not x3 ';

x3l2:='not x3 ';

x3l1:='x3 ';

x3l3:='not x3 ';

end

else

x3l4:='x3 ';

x3l2:='x3 ';

x3l1:='not x3 ';

x3l3:='not x3 ';

end;

Begin

s3:=Cob13.Items[Cob13.ItemIndex];

if s3 = 'Конъюнкция (*)' then

y3:='and ';

if s3 = 'Дизъюнкция (+)' then

y3:='or ';

if s3 = 'Исключающее (ИЛИ)' then

y3:='xor ';

end;

begin

if Chb14.Checked = true then

begin

x4l4:='not x4 ';

x4l1:='not x4 ';

x4l2:='x4 ';

x4l3:='not x4 ';

end

else

x4l4:='x4 ';

x4l1:='x4 ';

x4l2:='not x4 ';

x4l3:='x4 ';

end;

begin

Label23.Caption:=x1l4+y1+x2l4+y2+x3l4+y3+x4l4;

Label24.Caption:=x1l1+y2+x2l1+y3+x3l1+y1+x3l1;

Label25.Caption:=x1l2+y3+x3l2+y2+x3l2;

Label26.Caption:=x1l3+y1+x2l3+y2+x3l3+y3+x4l3+y1+x1l3;

end; end;


Редактирование записей

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


var:Textfile;

DeleteFile('spiski\'+f1+'.txt');

AssignFile(f,'spiski\'+Edit2.Text+'.txt');

ReWrite(f);

Writeln(f,Memo2.Text);

Closefile(f);


Просмотр данных

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


AssignFile(f,'spiski\'+Edit3.Text+'.txt');(f);

while not EOF(f) do

begin

readln(f, buf);

Memo3.Lines.Add(buf);

end;

CloseFile(f);


Аномалии

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

Все аномальные ситуации, которые могут возникнуть в программе, приведены в таблице 3 (Приложение А).

Реализация защитного программирования

Защитное программирование - это стиль программирования, при котором ошибки легко обнаруживаются и идентифицируются программистом.

С целью повышения надежности разрабатываемой программы был применен метод защитного программирования - обеспечение программного контроля:

. Правильность и полнота ввода

. Достоверность данных

Оптимизация программы.

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

Для сокращения объёма кода программы он разбивается на части - подпрограммы. Каждая подпрограмма может вызываться из разных частей основной программы.

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

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

Функция - это подпрограмма специального вида, которая, кроме получения параметров, выполнения действий и передачи результатов работы через параметры имеет ещё одну возможность - она может возвращать результат. Вызов функции является, с точки зрения языка программирования, выражением, он может использоваться в других выражениях или в качестве правой части присваивания

Процедура - это любая подпрограмма, которая не является функцией.

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

Также в оптимизации чаще всего нуждаются циклы. Цикл - это последовательность из нескольких (0 и больше) операторов, которая указывается в тексте программы один раз, но может выполняться несколько (0 и более) раз.

Например, цикл, выполняющий заполнение списка двоичными словами длины 4.


for i:= 0 to 15 do

Memo1.Lines.Add(Bin(i));;


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

1.3 Отладка и тестирование программы


Тестирование - это набор программных действий, предназначенных на выявление ошибок и демонстрации правильности работы программы в заданных режимах. Цель тестирования - выяснить наличие ошибок [3].

Существует два вида тестирования:

Восходящий

Нисходящий

Процесс тестирования делится на три этапа:

проверка нормальных условий - проверка, основанная на тестировании данных, которые соответствуют реальным условиям программы;

проверка экстремальных условий;

проверка исключительных ситуаций;

Данная программа тестировалась методом функциональных диаграмм (метод причинно-следственных связей). Этот метод позволяет системно выбирать только высокоэффективные тесты и уточнить спецификации программы. Диаграмма представлена в Приложении А (Рис.1).

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

Для данного тестирования могут принимать участие следующие причины:

П1 - отсутствие обязательного значения;

П2 - некорректные значения;

П3 - правильное значение;

П4 - отсутствие необязательного значения;

В результате тестирования могут возникать следующие действия:

С1 - исправная работа программы;

С2 - блокировка неверного ввода;

С3 - просьба ввести данные;

Чертеж графа приведен в Приложении А. (рис.2)

Результаты тестирования приведены в Приложении А в таблице 4


.4 Анализ результатов решения


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

Уровень корректности:

Обеспечивает ликвидацию синтаксических ошибок;

Обеспечивает отсутствие ошибок в операторах;

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

Обеспечивает выдачу корректных результатов на случайном множестве тестовых данных или рациональной области тестовых данных;

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

Программа выдает корректные результаты и информацию об ошибках для любых входных данных.


.5 Инструкция пользователя (системные требования, инсталляция,

инструкция пользователя)


Системные требования

Программа тестировалась и корректно работает на компьютере с минимальной конфигурацией:

Процессор Pentium ® 3 и выше

Место на жестком диске 100 Mb, файл подкачки 300 Mb;

Windows98/XP;

Цветной монитор (Желательно 1024x768*16);

Оперативная память 128 Mb;

Стандартная клавиатура 101/102;

Стандартная мышь;

Струйный или лазерный принтер;

Желательно наличие архива (WinRAR или WinZip);

Для работы с программой так же потребуется приложение Microsoft office 2003 Word.

Системные требования для Microsoft Word:

Процессор Pentium ® 3 и выше

Место на жестком диске 245 Mb и 115 Mb на жестком диске, на котором установлена операционная система;

Windows 2000 c пакетом обновления 3 (SP3) /XP и более;

Цветной монитор (Желательно 800x600);

Оперативная память 128 Mb;

Стандартная клавиатура 101/102;

Стандартная мышь;

Струйный или лазерный принтер;

Желательно наличие архива (WinRAR или WinZip);

Инсталляция

Для того чтобы установить программу на ваш персональный компьютер, вставьте диск с программой в CD-ROM, перед вами появится папка с файлами, скопируйте их в папку C:\Program Files\. В папке запустите Project.exe

Инструкция пользователя

В главном окне программы выбираем из списка под кем мы хотим пользоваться данной программой: «Преподаватель» или «Студент».

Если мы зашли как «Преподаватель», мы можем:

Создать учебную группу

Редактировать учебную группу

Просмотреть учебную группу

Создать функции «базовых логических операций» для домашнего задания студентам.

Если нужно создать новую группу, выбираем «Создать группу» и в появившемся окне заполняем необходимые поля.

Если нужно отредактировать группу в связи с неправильной работой студентов с данной программой, поступления нового студент в группу или отчисления студента, выбираем «Редактировать группу» и в появившемся окне заполняем необходимые поля.

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

Если нужно создать новые функции «базовых логических операций», выбираем «Создать функции» и в появившемся окне заполняем все поля. Примечание: При создании одной функции, программа автоматически создает еще 3 варианта этой функции, которые будут записаны в другие варианты соответственно. После создания функций, обязательно сохраните их и если понадобиться можете вывести их в приложение Microsoft Word.

Если мы зашли как «Студент», мы можем:

Получить домашнее задание

Проверить домашнее задание

Если нужно получить задание, выбираем «получить д/з». в появившемся окне выбираем номер варианта и подтверждаем его. При выполнении домашнего задания, каждую функцию необходимо будет считать для каждого значения X, т.е. (х1=0, х2=0, х3=0, х4=0), (х1=0, х2=0, х3=0, х4=1), (х1=0, х2=0, х3=1, х4=0), и т.д. до (х1=1, х2=1, х3=1, х4=1). Для каждой функции должно получиться 16 значений. Примечание: После подтверждения варианта откроется домашнее задание в приложении Microsoft Word, а данная программа будет закрыта автоматически.

Если нужно проверить домашнее задание, выбираем «проверка д/з» и в появившемся окне в каждом поле вводим результаты, полученные дома. И после нажатия «проверить» вам будет выставлена оценка, которую в дальнейшем проверит учитель после проверки всей группы домашнего задания. Примечание: Нужно соблюдать порядок функций. Значения вводятся без пробелов.



2. Экономическая часть


Исходные данные

Данные о затратах по разработке программы

Материальные затраты:

бумага для принтеров - 200 листов по цене 100 руб. за 100 листов;

flash-память 1гб - 1 штука по цене 650 руб.;

CD-RW - 10 штук по 10 руб. за штуку;

ручки и прочие - 1800руб.;

Основная заработная плата разработчиков (ОЗП):

минимальное(Тмин) и максимальное(Тмах)время в чел×днях, необходимое для выполнения основных этапов описано в Таблице 1.


Таблица 1 - Трудоемкость.

Название этапаТмин, днТмах, днОпределение требований к Программному Продукту35Разработка ТЗ24Разработка алгоритма1015Определение структуры данных25Разработка интерфейса1517Кодирование (запись алгоритмов на языковом коде)1520Отладка35Тестирование и усовершенствование2025Создание справочной системы24Маркетинговые исследования2025Окончательное согласование и утверждение35Оформление Программного Продукта1013

- в году 124 выходных и праздничных дней;

оклад программиста в месяц - 25000 руб.;

оклад оператора ЭВМ - 10500 руб.;

оклад руководителя в месяц - 40500 руб.;

Дополнительная заработная плата разработчиков - 12%

Страховые взносы - 30,2%

Накладные расходы - 155% от ОЗП

Затраты, связанные с работой компьютера при разработке программного обеспечения (амортизация, расходы на электроэнергию, профилактика и пр.) - 1,4% от суммарной ОЗП всех разработчиков;

Прочие затраты 2% от суммарной ОЗП всех разработчиков;

Затраты на оформление программного продукта - 0,5% от затрат на разработку.

Данные о реализации программы

для реализации программы (далее Пр-мы) приобретаются два компьютера (в 0-й год - инвестиции!) стоимостью 22000 руб. каждый, со сроком полезного использования 5 лет;

на баланс организации принимаются две Пр-мы по себестоимости разработки;

срок полезного использования (Тпол) Пр-мы - 10лет;

плановая рентабельность реализации одной Пр-мы - 200%;

ежегодные текущие затраты на обслуживание, рекламу, интернет-промоушен Пр-мы и прочие - 35% от суммарной себестоимости проданных Пр-мы за год;

в год планируется продавать Пр-мы:

-й год - 2 штуки

-й год - 4 штуки

-й и 4-й год - 5 штук ежегодно;

налог на имущество - 1,5% от его среднегодовой стоимости;

налог на прибыль - 20%

норма дисконта - 13%;

инвестиционный период - 4 года;

сумма постоянных издержек в суммарных затрат - 66%

Данные об использовании Пр-мы внутри организации

к эксплуатации принимается одна Пр-мы по себестоимости разработки;

срок полезного использования (Тпол) Пр-мы -10лет;

расчетное высвобождение рабочего времени при использовании Пр-мы исполнителями - 1,9%, руководителями - 1,6%;

количество работников, использующих Пр-мы в организации, всего - 6 человек, из них исполнителей - 5, руководителей - 1;

средний оклад исполнителя - 26500 руб.;

средний оклад руководителя - 40750 руб.;

затраты на обслуживание базы данных (без амортизации) - 15% от ее себестоимости.


.1 Расчет затрат на разработку программы


.1.1 Материальные затраты

Материальные затраты включают в себя затраты на сырьё, материалы, покупные изделия, упаковку, топливо и энергию всех видов и т.п.

Бумага для принтеров:


Цена = 100 руб. за 100 листов, количество = 200 листов;

Цена за 1 лист = = 1 руб.

Стоимость бумаги = 200 * 1 = 200 руб.


Flash-память:


Цена = 650 руб. за 1 штуку, количество = 1 штука;

Стоимость flash-памяти = 1 * 650 = 650 руб.

CD-RW:


Цена = 10 руб. за 1 диск, количество = 10 дисков;

Стоимость CD-RW = 10 * 10 = 100 руб.


Ручки и прочие:


Стоимость ручек и прочего = 1800 руб.

Материальные затраты (Мат.затр.) = Бумага + Flash-память + CD-RW + Ручки,


где Бумага - стоимость бумаги, Flash-память - стоимость flash-памяти,

CD-RW - стоимость CD-RW, Ручки - стоимость ручек и прочего.


Материальные затраты(Затрмат) = 280 + 650 + 100 + 1800 = 2830 руб.


Таблица 2 - Материальные затраты

ПоказательСтоимость 1 единицы, руб.Кол-во, шт.Итого, руб.Бумага для принтеров 100,00 за 100л.200200,00flash-память6501650,00CD-RW диск1010100,00Ручки и прочее 1 800,00Итого 2 750,00

.1.2 Заработная плата разработчиков

Заработная плата - это вознаграждение за труд, выплачиваемое в соответствии с количеством и качеством труда.


Баланс рабочего времени (средняя продолжительность месяца) = ,

где 366 - количество дней в году, 12 - количество месяцев,

выходные и праздничные дни - количество выходных и праздничных дней = 117 дня;

Эффективный фонд (в днях) = (366 - 117)/12 = 20,75;

В Таблице 3 представлены данные о трудоемкости каждого из разработчиков на каждом этапе.


Таблица 3 - Общая трудоемкость

Номер строкиТмин днТмах днТср днРуково-дитель %Програм-мист %Оператор ЭВМ, %Определение требований к Программному Продукту353,840600Разработка ТЗ242,860040Разработка алгоритма10151220800Определение структуры данных253,207525Разработка интерфейса151715,8204040Кодирование (запись алгоритмов на языковом коде)15201701000Отладка353,80955Тестирование и усовершенствование20252207525Создание справочной системы242,85590Маркетинговые исследования20252290010Окончательное согласование и утверждение353,890100Оформление Программного Продукта101311,250545Итого37,5654,5928,04

Заработная плата = трудоемкость разработки* ставку,


где трудоемкость программиста = 54,59 дня, трудоемкость оператора ЭВМ = 28,04 дня, трудоемкость руководителя = 37,56 дня.

Заработная плата программиста (ЗПпрог) =25000/20,75 * 54,59 = 65 771,08 руб.;

Заработная плата оператора ЭВМ (ЗПоп) = 10800/20,75 * 28,04 = 14 594,31 руб.;

Заработная плата оператора ЭВМ (ЗПрук) = 40500/20,75 * 37,56 = 73 309, 88 руб.;


Основная заработная плата (ОЗП) = ЗПпрог+ ЗПоп +ЗПрук;


Основная заработная плата 65 771,08+ 14 594,31 + 73 309, 88 = 153 675,27 руб.


Дополнительная заработная плата (ДЗП) = ОЗП * 12%,


где 12% - процент ДЗП;

Дополнительная заработная плата = 153 675,27 * 12% = 18 441, 03 руб.


Процентное соотношение трудоемкости по каждому этапу изображено на рисунке 1.


Рисунок 1 Трудоемкость

2.1.3 Расчет итоговой калькуляции проекта


Страховые взносы (СВ) = (ОЗП + ДЗП) * 30,2%,


где 30,2% - процент СВ;

СВ= (153 675,27 + 18 441, 03) * 30,2% = 51 979,12 руб.;

Накладные расходы(Затрнак) =155% от ОЗП;

Затрнак = 155%*153 675,27 =238 196,7 руб.

Затраты, связанные с работой компьютера при разработке программного обеспечения(Затрк)=1,4% от ОЗП;

Затрк=1.4%*153 675,27 = 2151,45 руб.

Прочие затраты(Затрпр) 2% от ОЗП;

Затрпр=2%*153 675,27 =3073,5 руб.


Предварительные затраты=Затрмат+ОЗП+СВ+ДЗП+ Затрнак+ Затрк+ Затрпр;


Предварительные затраты = 2750 +153 675,27 + 18 441, 03+ 51 979,12 + 238 196,7 + 2151,45 + 3073,5 = 470267,1 руб.

Затраты на оформление(Затроформ) 0,5% от затрат на разработку;


Затроформ=0,5%*470267,1 =2351,34 руб.

Итоговая калькуляция = Предварительные затраты + Затроформ;


Итоговая калькуляция = 470267,1 руб. + 2351,34 руб. =472 618,39 руб.

Схематичное изображение доли каждого вида затрат в общей калькуляции показано на рисунке 2.

Рисунок 2 Итоговая калькуляция


.2 Расчет коммерческой эффективности проекта от реализаци


.2.1 Расчет экономической эффективности проекта

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

Нематериальные активы (НМА) - неденежные активы, не имеющий физической формы.

К нематериальным активам относят активы, которые удовлетворяют следующим условиям:

отсутствие материально-вещественной структуры;

использование в производстве продукции, при выполнении работ или оказании услуг либо для управленческих нужд организации;

использование в течение длительного времени, т.е. срока полезного использования, продолжительностью свыше 12 месяцев или обычного операционного цикла, если он превышает 12 месяцев;

организация не предполагает последующую перепродажу данного имущества;

способность приносить организации экономические выгоды (доход) в будущем;

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

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


Таблица 4 - ОФ и НМА

НаименованиеКол-во (шт.)Цена (за шт. в тыс.руб.)Стоимость (в тыс.руб.)Компьютер222,0044,00База данных242,5085,00

Амортизационные отчисления основных фондов (АОФ) вычисляются следующим образом:

Аоф = 44тыс.руб./4лет = 10тыс.руб., где 4 лет - срок полезного использования компьютера.

Амортизационные отчисления нематериальных активов (АНА) вычисляются следующим образом:

Ана = 85тыс.руб./10лет = 8,5тыс.руб., где 10 лет - срок полезного использования базы данных.

Остаточная стоимость на начало года равна остаточной стоимость на конец предыдущего года (для первого года остаточная стоимость на начало года равна сумме необходимых инвестиций.)

Среднегодовая стоимость равна стоимость на начало года + стоимости на конец года разделить на 2. Среднегодовая стоимость вычисляется только для основных фондов

Налог на имущество равен среднегодовой стоимости, умноженной на 1,5%.

Все расчеты относительно ОФ и НМА представлены в таблице 5.


Таблица 5 - Расчет остаточной стоимости и налога на имуществ в тыс.

№показательГоды инвестиционного периода01234 офнмаофнмаофнмаофнма 1Первоначальная стоимость044,0085,0044,0085,0044,0085,0044,0085,002Амортизационные отчисления08,808,508,808,508,808,508,808,80 Остаточная стоимость 3на начало года044,0085,0035,2076,5026,4068,0017,6059,504на конец года035,2076,5026,4068,0017,6059,508,8051,005среднегодовая стоимость039,60 30,80 22,00 13,20 6налог на имущество00,59 0,46 0,33 0,20 Остаточная стоимость59,80руб.


.2.2 Расчет денежных потоков

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

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

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

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

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


Стоимость одной копии Пр-мы = себестоимость Пр-мы + себестоимость Пр-мы * рентабельность


Рентабельность базы данных = 200%. Это означает, что стоимость одной базы данных (PPr) на 200% больше ее себестоимости (39,51 тыс.руб.)

PPr =39,51.+ 39,51. * 200% =158,04 тыс. руб.

Итак, выручка, например, во второй год (TR2) будет равна:

TR2 = 158,04. * 4шт. = 632,12 тыс. руб.

Производственные затраты (TC) составляют 23,72% от суммарной стоимости проданных Пр-мы за год, так для второго года они равны:

TC2 = TR2 * 23,72% = 4*158,04 * 23,72% = 149,94 тыс.руб.

Расчет денежных потоков представлен в таблице 6.


Таблица 6 - Расчет денежных потоков. в тыс. руб.

Номер строкиПоказательГодв инвестиционного периода01234 Операционная деательность 1Выручка без НДС0237,06474,12711,18711,182Производственные затраты039,8779,73119,60119,603Амортизационные отчисления017,3017,3017,3017,304Валовая прибыль0179,69377,09574,28574,285Налог на имущество00,590,460,330,206Налогооблагаемая прибыль0179,30376,63573,95574,087Налог на прибыль035,8675,33114,79114,828Чистая прибыль0143,44301,30459,26459,269Сальдо от потока операционной деятельности0160,74318,60476,46476,56 Инвестиционная деятельность 10притоки000059,8011Инвестиции-472,620,000,000,000,0012Сальдо от потока инвестиционной деятельности-472,620,000,000,0061,00 Сальдо суммарного потока-472,62160,74318,60476,46536,36

Распишем подробно расчет для второго года инвестиционного периода

Амортизационные отчисления (А) берутся из таблицы 5 - Расчет остаточной стоимости и налога на имущество

А = 17,3 тыс.руб.


Валовая прибыль (V) равна выручке без НДС (TR) минус производственные затраты (TC) и минус амортизационные отчисления (А)


V = TR - TC - A = 474,12 - 79,73 - 17,3 = 377,09 тыс.руб.


Налог на имущество (N) берется из таблицы 5

N = 0,53 тыс. руб.

Налогооблагаемая прибыль (PN) равна валовая прибыль (V) минус налог на имущество (N)


PN = V - N = 377,09 - 0,53 = 376,56 тыс. руб.

Налог на прибыль (NP) равен налогооблагаемой прибыли (PN), умноженной на 20%.


NP = PN * 20% = 75, 312 тыс. руб.


Чистая прибыль (P) равна налогооблагаемой прибыли (PN) минус налог на прибыль (NP)


P = PN - NP = 375,36 - 75, 072 = 301,248 тыс. руб.


Сальдо потока от операционной деятельности (S) равно чистой прибыли (Р) плюс амортизационные отчисления (А)


S = Р + А = 301,248 + 17,3 =318,548 тыс.руб.


Притоков во второй год нет, они есть только в последний год в виде остаточной стоимости проекта (61 тыс.руб.)

Инвестиций во второй год нет, они есть только в нулевой год (-472,62тыс.руб.).

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

Сальдо суммарного потока (SS) равно сальдо потока от операционной деятельности (S).

SS = S = 318,548 тыс. руб.

На Рисунке 3 показана динамика роста выручки и издержек организации.


Рисунок 3 Динамика роста выручки и издержек


.2.3 Расчет основных показателей эффективности

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

Расчет основных показателей эффективности представлен в таблице 7.


Таблица 7 - Расчет основных показателей эффективности в тыс.руб.

№ПоказательГоды инвестиционнго периода012341Сальдо суммарного потока-472,62160,74318,60476,46536,362Коээфициент дисконтирования1,000,880,780,690,613Дисконтирование сальдо суммарного потока-472,62141,45248,51328,76327,184Чистый дисконтированный доход573,285Дисконтирование сальдо накопленного потока-472,62-331,17-82,66246,10573,286Срок окупаемости с учётом дисконтирования, годы2,257Внутренняя норма доходности, %52,93%

Распишем подробно расчет для второго года инвестиционного периода.

Сальдо суммарного потока (S) берется из таблицы 6 .

S = 318,548 тыс.руб.

Коэффициент дисконтирования (K) вычисляется по формуле


,


где Е - норма дисконта, а R - год инвестиционного периода.

Итак, для года коэффициент дисконтирования будет равен:

Дисконтированное сальдо суммарного потока (SD) равно сальдо суммарного потока (S) умножить на коэффициент дисконтирования (K).


SD = S * К = 318,548 * 0,78 = 248,66 тыс.руб.


Чистый дисконтированный доход (D) вычисляется по истечению инвестиционного периода (4 года) сложением дисконтированного сальдо суммарного потока за все годы инвестиционного периода.


D = SD0 + SD1 + SD2 + SD3 + SD4 = -472,62 + 141,45 + 248,51 + 328,76 + 327,18= 573,28 тыс.руб.


Дисконтированное сальдо накопленного потока (SDN) считается пошаговым прибавлением дисконтированного сальдо суммарного потока (SD) к имеющейся сумме.

Так для второго года дисконтированное сальдо накопленного потока будет равно:

SDN = SD0 + SD1 + SD2 = -472,62 + 141,45 + 248,51 = -82,66 тыс. руб.


Дисконтированное сальдо накопленного потока (SDN) позволяет определить срок окупаемости проекта с учетом дисконтирования (T), для этого необходимо определить, после какого года SDN > 0, и к этому году прибавить величину, равную дисконтированное сальдо суммарного потока следующего года, деленное на дисконтированное сальдо накопленного потока этого года.

Срок окупаемости с учётом дисконтирования года равен:


год погашения плюс,


где год погашения - последний год, в котором дисконтированное сальдо суммарного потока отрицательное,

Дискон. СНП - дисконтированное сальдо суммарного потока, в последний год, где оно отрицательное,

Дискон.ССП - дисконтированное сальдо суммарного потока, следующий год за годом погашения;

Срок окупаемости с учётом дисконтирования года = 2 - = 2.25;

Внутренняя норма доходности (ВСД) - Внутренняя норма доходности (прибыли, внутренний коэффициент окупаемости) - норма прибыли, порожденная инвестицией. Это та норма прибыли (барьерная ставка, ставка дисконтирования), при которой чистая текущая стоимость инвестиции равна нулю.

Если норма дисконта выше внутренней нормы доходности, то проект будет неэффективным.

ВСД была рассчитана с помощью функции в программе Microsoft Excel пакета Microsoft Office 2007 .

Схематичное изображение динамики дисконтированного сальдо суммарного потока изображено на рисунке 4.


Рисунок 4 Дисконтированное сальдо суммарного потока


.2.4 Расчет уровня безубыточности

Уровень безубыточности показывает, какой процент составляют издержки от реализации.

Расчет уровня безубыточности представлен в таблице 8.


Таблица 8 - Расчет уровня безубыточности в тыс. руб.

№ Годы инвестиционного периода012341Выручка без НДС0,00237,06474,12711,18711,182Производственные затраты0,0039,8779,73119,60119,603Амортизационные отчисления0,0017.3017.3017.3017.304Итого суммарные затраты в том числе0,0057,1797,03136,90136,905Постоянные затраты0,0037,7364,0490,3590,356Переменные затраты0,0019,4432,9946,5546,557Уровень безубыточности0,000,080,100,100,10

Распишем подробно отчет для первого года инвестиционного периода.

Выручка без НДС (TR) берется из таблицы 6.

TR = 237,06 тыс.руб.

Производственные затраты (TC) берутся из таблицы 6.

TC = 39,87 тыс. руб.

Амортизационные отчисления (А) берутся из таблицы.

А = 17,30тыс. руб.

Суммарные затраты равны (Sum) :


Sum = TC + A = 57,17 тыс.руб.


Постоянные затраты (TFC) составляют 66% от суммарных затрат (Sum):


TFC = Sum * 66% = 57,17 * 66% = 37,73 тыс.руб.


Переменные затраты (TVC) составляют соответственно остальную часть суммарных затрат (Sum):


TVC = Sum - TFC = 57,17 - 37,73 = 19,44 тыс. руб.


Уровень безубыточности равен (U):



.2.5 Вывод о коммерческой эффективности проекта

Исходя из расчета экономической эффективности проекта, следует вывод:

) сальдо суммарного потока положительно во все годы инвестиционного периода, кроме нулевого года;

) чистый дисконтированный доход больше нуля: 573,28тыс.руб. > 0 .

) срок окупаемости 2,25 лет (конец марта 2-го года), что устраивает инвесторов;

) принятая норма доходности меньше внутренней: 13% < 52,93%;

Если норма дисконта выше внутренней нормы доходности, то проект будет неэффективным.

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

Внутренняя норма доходности = 52,93%;

Маржа безопасности = 52,93% - 13% = 39,93%;

Схематическое изображение нормы доходности изображено на рисунке 5

Рисунок 5 Внутренняя норма доходности


) уровень безубыточности не больше допустимого (0,60) ни в одном году инвестиционного периода:

1-й год: 0,08;

2-й год: 0,10;

3-й год: 0,10;

4-й год: 0,10;

Схематически изобразим график точки безубыточности:


Рисунок 6 График точки безубыточности


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

Проект эффективен.


.3 Расчет экономической эффективности применения программы в

организации


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


.3.1 Расчет денежных потоков

Исполнитель благодаря использованию базы данных будет экономить 1,9% рабочего времени, руководитель - 1,6%. Исполнителей в организации 5 человек (оклад 28500руб.), руководителей - 1 (оклад 42750руб.).

Годовая экономия заработной платы будет равна:

Годовая экономия социальных отчислений (26%) будет равна:

руб. * 26% = 540540 руб.

Общая экономия равна экономии заработной платы плюс экономия социальных отчислений:

Для данного расчета величину нематериальных активов берем равной себестоимости базы данных.


Таблица 9 - Расчет остаточной стоимости в тыс. руб.

№ПоказательГоды инвестиционнго периода01234нманманманманма1Первоначальная стоимость0,0039,5139,5139,5139,512амортизационные отчисления0,003,953,953,953,95 Остаточная стоимость 3На начало периода0,0039,5135,5631,6127,664На конец периода0,0035,5631,6127,6623,71Остаточная стоимость23,71

Амортизационные отчисления нематериальных активов (АНА) вычисляются следующим образом:

,

где 10 лет - срок полезного использования базы данных.

Остаточная стоимость на начало года равна остаточной стоимость на конец предыдущего года (для первого года остаточная стоимость на начало года равна сумме необходимых инвестиций 39,51 тыс.руб.).

Налог на имущество равен среднегодовой стоимости, умноженной на 1,5%.

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

Теперь необходимо произвести расчет денежных потоков (Таблица 10 - Расчет денежных потоков)

Так как база данных не продается, а остается в организации, то высвобожденная заработной платой и СН (30,2%) сумма будет являться выручкой (55,41тыс.руб.), а производственные затраты, по исходным данным, будут составлять 19% от себестоимости базы данных.


Таблица 10 - Расчет денежных потоков в тыс. руб.

№ПоказательГоды инвестиционного периода 01234 операционная деятельность 1Выручка без НДС0,0056,9056,9056,9056,902Производственные затраты0,007,517,517,517,513Амортизационные отчисления0,003,953,953,953,954Валовая прибыль0,0045,4445,4445,4445,445Налог на прибыль0,009,099,099,099,096Чистая прибыль0,0036,3536,3536,3536,357Сальдо потока от операционной деятельности0,0040.3040.3040.3040.308Инвестиционная деятельность 9Притоки0,000,000,000,0023,71 Инвестиции-39,510,000,000,000,0010Сальдо потока от инвестиционной деятельности-39,510,000,000,0023,7111Сальдо суммарного потока-39,5140.3040.3040.3064,01

Распишем подробно расчет для первого года инвестиционного периода

Амортизационные отчисления (А) берутся из Таблицы 9 .

А = 3,95 тыс. руб.

Валовая прибыль (V) равна выручке без НДС (TR) минус производственные затраты (TC) и минус амортизационные отчисления (А)

V = TR - TC - A = 56,90. - 7,51. - 3,95= 45,44 тыс. руб.


Налог на прибыль (NP) равен валовой прибыли (V), умноженной на 20%.


NP = V * 20% = 9,09тыс. руб.


Чистая прибыль (P) равна валовой прибыли (V) минус налог на прибыль (NP)

P = V - NP = 45,44 - 9,09 =36,35 тыс.руб.


Сальдо потока от операционной деятельности (S) равно чистой прибыли (Р) плюс амортизационные отчисления (А)


S = Р + А = 36,35 + 3,95 тыс. руб. = 40,3 тыс. руб.


Притоков в первый год нет, они есть только в последний год в виде остаточной стоимости проекта (23,71тыс.руб.)

Инвестиций в первый год нет, они есть только в нулевой год (-39,51 тыс.руб.)

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

Сальдо суммарного потока (SS) равно сальдо потока от операционной деятельности (S).

SS = S = 39,11 тыс. руб.


.3.2 Расчет основных показателей эффективности

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

Расчет основных показателей эффективности представлен в таблице 11.


Таблица 11 - Расчет основных показателей эффективности в тыс. руб.

№ПоказательГоды инвестиционного периода012341Сальдо суммарного потока-39,5140.3040.3040.3064,012Коэффициент дисконтирования1,000,880,780,690,613Дисконтированное сальдо суммарного потока-39,5135,4631,4327,8139,054Чистый дисконтированный доход94,245Дисконтированное сальдо накопленного потока-39,51-4,0527,3855,1994,246Срок окупаемости с учетом дисконтирования,годы1,117Внутренняя норма доходности99%

Распишем подробно расчет для третьего года инвестиционного периода.

Сальдо суммарного потока (S) берется из таблицы 10 .

S = 39,11 тыс. руб.

Коэффициент дисконтирования (K) вычисляется по формуле


,


где Е - норма дисконта, а R - год инвестиционного периода.

Итак, для третьего года коэффициент дисконтирования будет равен:

Дисконтированное сальдо суммарного потока (SD) равно сальдо суммарного потока (S) умножить на коэффициент дисконтирования (K).

SD = S * К = 39,11 * 0,69 = 26,99 тыс.руб.


Чистый дисконтированный доход (D) вычисляется по истечению инвестиционного периода (5 лет) сложением дисконтированного сальдо суммарного потока за все годы инвестиционного периода.


D = SD0 + SD1 + SD2 + SD3 + SD4 = -39,51+35,46+31,43+27,81+39,05= 94,24 тыс.руб.


Дисконтированное сальдо накопленного потока (SDN) считается пошаговым прибавлением дисконтированного сальдо суммарного потока (SD) к имеющейся сумме.

Так для третьего года дисконтированное сальдо накопленного потока будет равно:


SDN = SD0 + SD1 + SD2 + SD3 = -39,51+35,46+31,43+27,81= 55,19 тыс.руб.


Дисконтированное сальдо накопленного потока (SDN) позволяет определить срок окупаемости проекта с учетом дисконтирования (T), для этого необходимо определить, после какого года SDN > 0, и к этому году прибавить величину, равную дисконтированному сальдо суммарного потока следующего года, деленное на дисконтированное сальдо накопленного потока этого года.

Срок окупаемости с учётом дисконтирования года равен:


год погашения плюс ,

где год погашения - последний год, в котором дисконтированное сальдо суммарного потока отрицательное,

Дискон. СНП - дисконтированное сальдо суммарного потока, в последний год, где оно отрицательное,

Дискон.ССП - дисконтированное сальдо суммарного потока, следующий год за годом погашения;

Срок окупаемости с учётом дисконтирования года = 1 + = 1,11;


Схематичное изображение динамики дисконтированного сальдо суммарного потока изображено на рисунке 7.


Рисунок 7 Дисконтированное сальдо суммарного потока


Внутренняя норма доходности (прибыли, внутренний коэффициент окупаемости) - норма прибыли, порожденная инвестицией. Это та норма прибыли (барьерная ставка, ставка дисконтирования), при которой чистая текущая стоимость инвестиции равна нулю.

Если норма дисконта выше внутренней нормы доходности, то проект будет неэффективным.

Внутренняя норма доходности была рассчитана с помощью функции в программе Microsoft Excel пакета Microsoft Office 2007.

2.3.3 Вывод об экономической эффективности применения базы

данных

Исходя из расчета экономической эффективности применения базы данных в организации, следует вывод:

) сальдо суммарного потока больше нуля в каждом году инвестиционного периода, кроме нулевого года;

) чистый дисконтированный доход больше нуля: 94,24 тыс. руб.;

) срок окупаемости 1,11 года (10 февраля 2-го года), что устраивает инвесторов;

) принятая норма доходности меньше внутренней: 13% < 99%.

Внутренняя норма доходности = 99%;

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

Маржа безопасности = 99% - 13% = 86%;

Схематическое изображение нормы доходности изображено на рисунке 8.


Рисунок 8 Внутренняя норма доходности


Проект эффективен.

Заключение


Программа «Базовые логические операции» полностью соответствует требованиям, рассмотренным в пункте 1.1.1 «Постановка задачи». Выходные данные полностью удовлетворяют целям и потребностям задачи. Они могут представляться в виде текстовых документов Word, которые могут быть распечатаны.

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

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

При работе программы обеспечено выполнение всех заданных режимов.

Программа прошла тестирование и получила хороший результат.


программа тестирование пользователь эффективность экономический

Литература


1. Аширова Н.Г Конспект лекций по дисциплине «Технология разработки программных продуктов» Математический колледж г. Москва, 2010 год.

. Информация с сайта #"justify">. Экономика для колледжей. Базовый курс / Озерова О. П. - Ростов-на-Дону: Феникс, 2005;

. Экономический анализ предприятия. Учебник / Прыкина Л. В.: Юнити, 2006;

. Delphi 6. Учебный курс. - М.: Издатель Молгачева С.В., 2003. - 672 с., ил.

. Microsoft Word. Версия 2002. Шаг за шагом: Практ.пособ./Пер.с анг.-М.: издательствоЭКОМ, 2004.-336с.: илл.

. Катюшина В.А Конспект лекций дисциплине «Пакеты прикладных программ». Математический колледж г. Москва, 2011 год.



Приложение А


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


Рисунок 2 граф тестирования программы


Таблица 3 Аномальные ситуации и реакция на них программы.

Аномальные ситуацииРеакция программы Отсутствие информации в полях добавленияВыдается сообщение: «Поля должны быть заполнены » и ожидается заполенение полейПовторная попытка выбора варианта или проверки вариантаВыдается сообщение: «Вариант уже выбран» или «Оценка уже получена» и ожидается исправление замечания Ввод текста в числовое полеВыдается сообщение: «Ввод только «0» и «1»» и ожидается исправление замечания Не выбрана одна или более операций над функциямиВыдается сообщение: «Заполните все операции 3 функции» и ожидается исправления замечанияТаблица 4 Результаты тестирования программы

№Входные данныеОжидаемый результатАномалия1Правильное значениенормальная работаНет2Отсутствие нужного значенияпереход на пустое полеДа3Отсутствие ненужного значениянормальная работаНет4Некорректные значенияблокировка вводаДа


Приложение Б


Входные формы приложения


Общая входная форма


Входная форма для преподавателя

Входная форма для студента


Форма для выбора действия преподавателя


Форма создания новой группы

Форма редактирования группы


Форма просмотра группы


Форма создания функций для домашнего задания


Форма для выбора действий студенту


Форма получения домашнего задания


Форма получения домашнего задания


Приложение В


Выходные формы


Форма после входа преподавателя


Форма создания новой группы


Форма редактирования группы


Форма просмотра группы


Форма входа студента


Вывод оценки студенту после проверки домашнего задания


Приложение Г


Листинг программы (Unit1).


unit Unit1;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Mask, ExtCtrls, jpeg;

TForm1 = class(TForm)

Edit1: TEdit;

Label2: TLabel;

Label3: TLabel;

Button2: TButton;

ComboBox1: TComboBox;

MaskEdit1: TMaskEdit;

Panel1: TPanel;

Panel2: TPanel;

Label4: TLabel;

Label5: TLabel;

Edit2: TEdit;

Edit3: TEdit;

Image1: TImage;

procedure Button2Click(Sender: TObject);

procedure ComboBox1Change(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Form1: TForm1;Unit2, Unit3, Unit4, Unit5, Unit6;

{$R *.dfm}TForm1.Button2Click(Sender: TObject);

s:string;

sl: TStringList;

i: integer;

b: boolean;

begin

s:=ComboBox1.Items[ComboBox1.ItemIndex];

if s = 'Преподаватель' then

begin

if (edit1.Text='') or (MaskEdit1.text='') then

ShowMessage('Введите Фамилию и/или Пароль!')

else

begin

sl := TStringList.Create;

sl.LoadFromFile( 'spiski\prep.txt' );

for i := 0 to sl.Count-1 do

if Pos( Edit1.Text, sl[i] ) > 0 then

if Pos( MaskEdit1.Text, sl[i+1] ) > 0 then

begin

form6.Show;

form6.label1.caption:=Edit1.Text;

end

else

ShowMessage('Неверно введен логин и/или пароль!!!');

sl.Free; end; end;

if s = 'Студент' then

begin

if (edit2.Text='') or (edit3.text='') then

ShowMessage('Введите Фамилию и/или Группу!')

else

begin

if FileExists('spiski\'+Edit3.Text+'.txt') then

begin

b:=false;

sl := TStringList.Create;

sl.LoadFromFile( 'spiski\'+Edit3.Text+'.txt' );

for i := 0 to sl.Count-1 do

if Pos( Edit2.Text, sl[i] ) > 0 then

begin

form4.label1.caption:=Edit2.Text;

form4.label2.caption:=Edit3.Text;

form5.Show;

b:=true;

break;

end;

if not b then

ShowMessage('Неверно введена фамилия и/или группа');

sl.Free;

end

else

Begin

ShowMessage('Неправильно введен № группы!');

Edit3.Text:='';

end;

end;

end;;TForm1.ComboBox1Change(Sender: TObject);:string;

Edit1.Text:='';

Edit2.Text:='';

Edit3.Text:='';

MaskEdit1.Text:='';

s:=ComboBox1.Items[ComboBox1.ItemIndex];

if s = 'Преподаватель' then

begin

Panel1.Visible:=true;

Panel2.Visible:=false;

end;

if s = 'Студент' then

begin

Panel2.Visible:=true;

Panel1.Visible:=false;

end; ;.

Листинг программы (Unit2).Unit2;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, ComObj, WordXP, OleServer;

TForm2 = class(TForm)

GroupBox1: TGroupBox;

Label7: TLabel;

Label8: TLabel;

ChB11: TCheckBox;

CoB11: TComboBox;

Button2: TButton;

CoB12: TComboBox;

ChB12: TCheckBox;

Label9: TLabel;

ChB13: TCheckBox;

CoB13: TComboBox;

Label10: TLabel;

ChB14: TCheckBox;

GroupBox2: TGroupBox;

Label1: TLabel;

Label2: TLabel;

ChB21: TCheckBox;

CoB21: TComboBox;

Button1: TButton;

CoB22: TComboBox;

ChB22: TCheckBox;

Label3: TLabel;

ChB23: TCheckBox;

CoB23: TComboBox;

Label4: TLabel;

ChB24: TCheckBox;

Label6: TLabel;

GroupBox3: TGroupBox;

Label13: TLabel;

Label14: TLabel;

ChB31: TCheckBox;

CoB31: TComboBox;

Button3: TButton;

CoB32: TComboBox;

ChB32: TCheckBox;

Label15: TLabel;

ChB33: TCheckBox;

CoB33: TComboBox;

Label16: TLabel;

ChB34: TCheckBox;

GroupBox4: TGroupBox;

Label5: TLabel;

Label11: TLabel;

Label12: TLabel;

Label17: TLabel;

ChB41: TCheckBox;

CoB41: TComboBox;

Button4: TButton;

CoB42: TComboBox;

ChB42: TCheckBox;

ChB43: TCheckBox;

CoB43: TComboBox;

ChB44: TCheckBox;

GroupBox5: TGroupBox;

Label18: TLabel;

Label19: TLabel;

Label20: TLabel;

Label21: TLabel;

ChB51: TCheckBox;

CoB51: TComboBox;

Button5: TButton;

CoB52: TComboBox;

ChB52: TCheckBox;

ChB53: TCheckBox;

CoB53: TComboBox;

ChB54: TCheckBox;

Panel1: TPanel;

Panel2: TPanel;

Panel3: TPanel;

Panel4: TPanel;

Label22: TLabel;

Label23: TLabel;

Label26: TLabel;

Label24: TLabel;

Label25: TLabel;

Label27: TLabel;

Label28: TLabel;

Label29: TLabel;

Label30: TLabel;

Label31: TLabel;

Label32: TLabel;

Label33: TLabel;

Label34: TLabel;

Label35: TLabel;

Label36: TLabel;

Label37: TLabel;

Label38: TLabel;

Label39: TLabel;

Label40: TLabel;

Label41: TLabel;

Label42: TLabel;

Label43: TLabel;

Label44: TLabel;

Label45: TLabel;

Button6: TButton;

WordApplication1: TWordApplication;

Button7: TButton;

Memo1: TMemo;

Memo2: TMemo;

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Form2: TForm2;

{$R *.dfm}TForm2.Button2Click(Sender: TObject);,s2,s3,y1,y2,y3: string;l1,x2l1,x3l1,x4l1:string;l2,x2l2,x3l2,x4l2:string;l3,x2l3,x3l3,x4l3:string;l4,x2l4,x3l4,x4l4:string;

Label23.Caption:='';

Label24.Caption:='';

Label25.Caption:='';

Label26.Caption:='';

if (CoB11.Text='') or (CoB12.Text='') or (CoB13.Text='') then

ShowMessage('Заполните все операции 1 функции!!!')

else

begin

begin

if Chb11.Checked = true then

begin

x1l1:='not x1 ';

x1l2:='x1 ';

x1l3:='not x1 ';

x1l4:='not x1 ';

end

else

x1l4:='x1 ';

x1l1:='x1 ';

x1l3:='x1 ';

x1l2:='not x1 ';

end;

Begin

s1:=Cob11.Items[Cob11.ItemIndex];

if s1 = 'Конъюнкция (*)' then

y1:='and ';

if s1 = 'Дизъюнкция (+)' then

y1:='or ';

if s1 = 'Исключающее (ИЛИ)' then

y1:='xor ';

end;

begin

if Chb12.Checked = true then

begin

x2l4:='not x2 ';

x2l1:='not x2 ';

x2l2:='x2 ';

x2l3:='x2 ';

end

else

x2l4:='x2 ';

x2l2:='not x2 ';

x2l1:='x2 ';

x2l3:='not x2 ';

end;

Begin

s2:=Cob12.Items[Cob12.ItemIndex];

if s2 = 'Конъюнкция (*)' then

y2:='and ';

if s2 = 'Дизъюнкция (+)' then

y2:='or ';

if s2 = 'Исключающее (ИЛИ)' then

y2:='xor ';

end;

begin

if Chb13.Checked = true then

begin

x3l4:='not x3 ';

x3l2:='not x3 ';

x3l1:='x3 ';

x3l3:='not x3 ';

end

else

x3l4:='x3 ';

x3l2:='x3 ';

x3l1:='not x3 ';

x3l3:='not x3 ';

end;

Begin

s3:=Cob13.Items[Cob13.ItemIndex];

if s3 = 'Конъюнкция (*)' then

y3:='and ';

if s3 = 'Дизъюнкция (+)' then

y3:='or ';

if s3 = 'Исключающее (ИЛИ)' then

y3:='xor ';

end;

begin

if Chb14.Checked = true then

begin

x4l4:='not x4 ';

x4l1:='not x4 ';

x4l2:='x4 ';

x4l3:='not x4 ';

end

else

x4l4:='x4 ';

x4l1:='x4 ';

x4l2:='not x4 ';

x4l3:='x4 ';

end;

begin

Label23.Caption:=x1l4+y1+x2l4+y2+x3l4+y3+x4l4;

Label24.Caption:=x1l1+y2+x2l1+y3+x3l1+y1+x3l1;

Label25.Caption:=x1l2+y3+x3l2+y2+x3l2;

Label26.Caption:=x1l3+y1+x2l3+y2+x3l3+y3+x4l3+y1+x1l3;

end; end;

end;TForm2.Button1Click(Sender: TObject);,s2,s3,y1,y2,y3: string;l1,x2l1,x3l1,x4l1:string;l2,x2l2,x3l2,x4l2:string;l3,x2l3,x3l3,x4l3:string;l4,x2l4,x3l4,x4l4:string;

Label30.Caption:='';

Label31.Caption:='';

Label32.Caption:='';

Label33.Caption:='';

if (CoB21.Text='') or (CoB22.Text='') or (CoB23.Text='') then

ShowMessage('Заполните все операции 2 функции!!!')

else

begin

begin

if Chb21.Checked = true then

begin

x1l1:='not x1 ';

x1l2:='x1 ';

x1l3:='not x1 ';

x1l4:='not x1 ';

end

else

x1l4:='x1 ';

x1l1:='x1 ';

x1l3:='x1 ';

x1l2:='not x1 ';

end;

Begin

s1:=Cob21.Items[Cob21.ItemIndex];

if s1 = 'Конъюнкция (*)' then

y1:='and ';

if s1 = 'Дизъюнкция (+)' then

y1:='or ';

if s1 = 'Исключающее (ИЛИ)' then

y1:='xor ';

end;

begin

if Chb22.Checked = true then

begin

x2l4:='not x2 ';

x2l1:='not x2 ';

x2l2:='x2 ';

x2l3:='x2 ';

end

else

x2l4:='x2 ';

x2l2:='not x2 ';

x2l1:='x2 ';

x2l3:='not x2 ';

end;

Begin

s2:=Cob22.Items[Cob22.ItemIndex];

if s2 = 'Конъюнкция (*)' then

y2:='and ';

if s2 = 'Дизъюнкция (+)' then

y2:='or ';

if s2 = 'Исключающее (ИЛИ)' then

y2:='xor ';

end;

begin

if Chb23.Checked = true then

begin

x3l4:='not x3 ';

x3l2:='not x3 ';

x3l1:='x3 ';

x3l3:='not x3 ';

end

else

x3l4:='x3 ';

x3l2:='x3 ';

x3l1:='not x3 ';

x3l3:='not x3 ';

end;

Begin

s3:=Cob23.Items[Cob23.ItemIndex];

if s3 = 'Конъюнкция (*)' then

y3:='and ';

if s3 = 'Дизъюнкция (+)' then

y3:='or ';

if s3 = 'Исключающее (ИЛИ)' then

y3:='xor ';

end;

begin

if Chb24.Checked = true then

begin

x4l4:='not x4 ';

x4l1:='not x4 ';

x4l2:='x4 ';

x4l3:='not x4 ';

end

else

x4l4:='x4 ';

x4l1:='x4 ';

x4l2:='not x4 ';

x4l3:='x4 ';

end;

begin

Label30.Caption:=x1l4+y1+x2l4+y2+x3l4+y3+x4l4;

Label32.Caption:=x1l1+y2+x2l1+y3+x3l1+y1+x3l1;

Label33.Caption:=x1l2+y3+x3l2+y2+x3l2;

Label31.Caption:=x1l3+y1+x2l3+y2+x3l3+y3+x4l3+y1+x1l3;

end;

end;

end;TForm2.Button3Click(Sender: TObject);,s2,s3,y1,y2,y3: string;l1,x2l1,x3l1,x4l1:string;l2,x2l2,x3l2,x4l2:string;l3,x2l3,x3l3,x4l3:string;l4,x2l4,x3l4,x4l4:string;

Label34.Caption:='';

Label35.Caption:='';

Label36.Caption:='';

Label37.Caption:='';

if (CoB31.Text='') or (CoB32.Text='') or (CoB33.Text='') then

ShowMessage('Заполните все операции 3 функции!!!')

else

begin

begin

if Chb31.Checked = true then

begin

x1l1:='not x1 ';

x1l2:='x1 ';

x1l3:='not x1 ';

x1l4:='not x1 ';

end

else

x1l4:='x1 ';

x1l1:='x1 ';

x1l3:='x1 ';

x1l2:='not x1 ';

end;

Begin

s1:=Cob31.Items[Cob31.ItemIndex];

if s1 = 'Конъюнкция (*)' then

y1:='and ';

if s1 = 'Дизъюнкция (+)' then

y1:='or ';

if s1 = 'Исключающее (ИЛИ)' then

y1:='xor ';

end;

begin

if Chb32.Checked = true then

begin

x2l4:='not x2 ';

x2l1:='not x2 ';

x2l2:='x2 ';

x2l3:='x2 ';

end

else

x2l4:='x2 ';

x2l2:='not x2 ';

x2l1:='x2 ';

x2l3:='not x2 ';

end;

Begin

s2:=Cob32.Items[Cob32.ItemIndex];

if s2 = 'Конъюнкция (*)' then

y2:='and ';

if s2 = 'Дизъюнкция (+)' then

y2:='or ';

if s2 = 'Исключающее (ИЛИ)' then

y2:='xor ';

end;

begin

if Chb33.Checked = true then

begin

x3l4:='not x3 ';

x3l2:='not x3 ';

x3l1:='x3 ';

x3l3:='not x3 ';

end

else

x3l4:='x3 ';

x3l2:='x3 ';

x3l1:='not x3 ';

x3l3:='not x3 ';

end;

Begin

s3:=Cob33.Items[Cob33.ItemIndex];

if s3 = 'Конъюнкция (*)' then

y3:='and ';

if s3 = 'Дизъюнкция (+)' then

y3:='or ';

if s3 = 'Исключающее (ИЛИ)' then

y3:='xor ';

end;

begin

if Chb34.Checked = true then

begin

x4l4:='not x4 ';

x4l1:='not x4 ';

x4l2:='x4 ';

x4l3:='not x4 ';

end

else

x4l4:='x4 ';

x4l1:='x4 ';

x4l2:='not x4 ';

x4l3:='x4 ';

end;

begin

Label34.Caption:=x1l4+y1+x2l4+y2+x3l4+y3+x4l4;

Label37.Caption:=x1l1+y2+x2l1+y3+x3l1+y1+x3l1;

Label35.Caption:=x1l2+y3+x3l2+y2+x3l2;

Label36.Caption:=x1l3+y1+x2l3+y2+x3l3+y3+x4l3+y1+x1l3;

end;

end;

end;TForm2.Button4Click(Sender: TObject);,s2,s3,y1,y2,y3: string;l1,x2l1,x3l1,x4l1:string;l2,x2l2,x3l2,x4l2:string;l3,x2l3,x3l3,x4l3:string;l4,x2l4,x3l4,x4l4:string;

Label38.Caption:='';

Label39.Caption:='';

Label40.Caption:='';

Label41.Caption:='';

if (CoB41.Text='') or (CoB42.Text='') or (CoB43.Text='') then

ShowMessage('Заполните все операции 4 функции!!!')

else

begin

begin

if Chb41.Checked = true then

begin

x1l1:='not x1 ';

x1l2:='x1 ';

x1l3:='not x1 ';

x1l4:='not x1 ';

end

else

x1l4:='x1 ';

x1l1:='x1 ';

x1l3:='x1 ';

x1l2:='not x1 ';

end;

Begin

s1:=Cob41.Items[Cob41.ItemIndex];

if s1 = 'Конъюнкция (*)' then

y1:='and ';

if s1 = 'Дизъюнкция (+)' then

y1:='or ';

if s1 = 'Исключающее (ИЛИ)' then

y1:='xor ';

end;

begin

if Chb42.Checked = true then

begin

x2l4:='not x2 ';

x2l1:='not x2 ';

x2l2:='x2 ';

x2l3:='x2 ';

end

else

x2l4:='x2 ';

x2l2:='not x2 ';

x2l1:='x2 ';

x2l3:='not x2 ';

end;

Begin

s2:=Cob42.Items[Cob42.ItemIndex];

if s2 = 'Конъюнкция (*)' then

y2:='and ';

if s2 = 'Дизъюнкция (+)' then

y2:='or ';

if s2 = 'Исключающее (ИЛИ)' then

y2:='xor ';

end;

begin

if Chb43.Checked = true then

begin

x3l4:='not x3 ';

x3l2:='not x3 ';

x3l1:='x3 ';

x3l3:='not x3 ';

end

else

x3l4:='x3 ';

x3l2:='x3 ';

x3l1:='not x3 ';

x3l3:='not x3 ';

end;

Begin

s3:=Cob43.Items[Cob43.ItemIndex];

if s3 = 'Конъюнкция (*)' then

y3:='and ';

if s3 = 'Дизъюнкция (+)' then

y3:='or ';

if s3 = 'Исключающее (ИЛИ)' then

y3:='xor ';

end;

begin

if Chb44.Checked = true then

begin

x4l4:='not x4 ';

x4l1:='not x4 ';

x4l2:='x4 ';

x4l3:='not x4 ';

end

else

x4l4:='x4 ';

x4l1:='x4 ';

x4l2:='not x4 ';

x4l3:='x4 ';

end;

begin

Label38.Caption:=x1l4+y1+x2l4+y2+x3l4+y3+x4l4;

Label39.Caption:=x1l1+y2+x2l1+y3+x3l1+y1+x3l1;

Label40.Caption:=x1l2+y3+x3l2+y2+x3l2;

Label41.Caption:=x1l3+y1+x2l3+y2+x3l3+y3+x4l3+y1+x1l3;

end;

end;

end;TForm2.Button5Click(Sender: TObject);,s2,s3,y1,y2,y3: string;l1,x2l1,x3l1,x4l1:string;l2,x2l2,x3l2,x4l2:string;l3,x2l3,x3l3,x4l3:string;l4,x2l4,x3l4,x4l4:string;

Label42.Caption:='';

Label43.Caption:='';

Label44.Caption:='';

Label45.Caption:='';

if (CoB51.Text='') or (CoB52.Text='') or (CoB53.Text='') then

ShowMessage('Заполните все операции 5 функции!!!')

else

begin

begin

if Chb51.Checked = true then

begin

x1l1:='not x1 ';

x1l2:='x1 ';

x1l3:='not x1 ';

x1l4:='not x1 ';

end

else

x1l4:='x1 ';

x1l1:='x1 ';

x1l3:='x1 ';

x1l2:='not x1 ';

end;

Begin

s1:=Cob51.Items[Cob51.ItemIndex];

if s1 = 'Конъюнкция (*)' then

y1:='and ';

if s1 = 'Дизъюнкция (+)' then

y1:='or ';

if s1 = 'Исключающее (ИЛИ)' then

y1:='xor ';

end;

begin

if Chb52.Checked = true then

begin

x2l4:='not x2 ';

x2l1:='not x2 ';

x2l2:='x2 ';

x2l3:='x2 ';

end

else

x2l4:='x2 ';

x2l2:='not x2 ';

x2l1:='x2 ';

x2l3:='not x2 ';

end;

Begin

s2:=Cob52.Items[Cob52.ItemIndex];

if s2 = 'Конъюнкция (*)' then

y2:='and ';

if s2 = 'Дизъюнкция (+)' then

y2:='or ';

if s2 = 'Исключающее (ИЛИ)' then

y2:='xor ';

end;

begin

if Chb53.Checked = true then

begin

x3l4:='not x3 ';

x3l2:='not x3 ';

x3l1:='x3 ';

x3l3:='not x3 ';

end

else

x3l4:='x3 ';

x3l2:='x3 ';

x3l1:='not x3 ';

x3l3:='not x3 ';

end;

Begin

s3:=Cob53.Items[Cob53.ItemIndex];

if s3 = 'Конъюнкция (*)' then

y3:='and ';

if s3 = 'Дизъюнкция (+)' then

y3:='or ';

if s3 = 'Исключающее (ИЛИ)' then

y3:='xor ';

end;

begin

if Chb54.Checked = true then

begin

x4l4:='not x4 ';

x4l1:='not x4 ';

x4l2:='x4 ';

x4l3:='not x4 ';

end

else

x4l4:='x4 ';

x4l1:='x4 ';

x4l2:='not x4 ';

x4l3:='x4 ';

end;

begin

Label42.Caption:=x1l4+y1+x2l4+y2+x3l4+y3+x4l4;

Label45.Caption:=x1l1+y2+x2l1+y3+x3l1+y1+x3l1;

Label43.Caption:=x1l2+y3+x3l2+y2+x3l2;

Label44.Caption:=x1l3+y1+x2l3+y2+x3l3+y3+x4l3+y1+x1l3;

end;

end;

end;TForm2.Button6Click(Sender: TObject);: Variant;

if (Label23.Caption='') or (Label30.Caption='') or (Label34.Caption='') or (Label38.Caption='') or( Label42.Caption='') then

showmessage('Заполните все функции!')

else

begin

try

MSWord:=CreateOleObject('Word.Application');

MSWord.Visible:=true;

except

Exception.Create('Error');

end;

MSWord.Documents.Add;

MSWord.Selection.Font.Size := 10;

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphCenter;

MSWord.Selection.TypeText(Memo1.Text);

MSWord.Selection.Font.Size := 12;

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

MSWord.Selection.TypeText(Memo2.Text);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Домашнее задание');

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Вариант 1');

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label23.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label30.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label34.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label38.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label42.Caption);

MSWord.Selection.InsertNewPage;

//.............................

MSWord.Selection.Font.Size := 10;

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphCenter;

MSWord.Selection.TypeText(Memo1.Text);

MSWord.Selection.Font.Size := 12;

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

MSWord.Selection.TypeText(Memo2.Text);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Домашнее задание');

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Вариант 2');

MSWord.Selection.Font.Bold := false;

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.Font.Size := 12;

MSWord.Selection.TypeText(Label24.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label31.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label35.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label39.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label43.Caption);

MSWord.Selection.InsertNewPage;

//.............................

MSWord.Selection.Font.Size := 10;

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphCenter;

MSWord.Selection.TypeText(Memo1.Text);

MSWord.Selection.Font.Size := 12;

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

MSWord.Selection.TypeText(Memo2.Text);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Домашнее задание');

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Вариант 3');

MSWord.Selection.Font.Bold := false;

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.Font.Size := 12;

MSWord.Selection.TypeText(Label25.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label32.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label36.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label40.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label44.Caption);

MSWord.Selection.InsertNewPage;

//.............................

MSWord.Selection.Font.Size := 10;

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphCenter;

MSWord.Selection.TypeText(Memo1.Text);

MSWord.Selection.Font.Size := 12;

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

MSWord.Selection.TypeText(Memo2.Text);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Домашнее задание');

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Вариант 4');

MSWord.Selection.Font.Bold := false;

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.Font.Size := 12;

MSWord.Selection.TypeText(Label26.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label33.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label37.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label41.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Label45.Caption);

MSWord.ActiveDocument.SaveAs('C:\Lab_rab.doc');

end;; TForm2.Button7Click(Sender: TObject);

var

f1,f2,f3,f4: Textfile;

begin

if (Label23.Caption='') or (Label30.Caption='') or (Label34.Caption='') or (Label38.Caption='') or( Label42.Caption='') then

showmessage('Заполните все функции!')

else

begin

AssignFile(f1, 'lab_rab\var1.txt');

AssignFile(f2, 'lab_rab\var2.txt');

AssignFile(f3, 'lab_rab\var3.txt');

AssignFile(f4, 'lab_rab\var4.txt');

ReWrite(f1);

ReWrite(f2);

ReWrite(f3);

ReWrite(f4);

Writeln(f1,Label23.Caption);

Writeln(f1,Label30.Caption);

Writeln(f1,Label34.Caption);

Writeln(f1,Label38.Caption);

Writeln(f1,Label42.Caption);

////////////////////////////

Writeln(f2,Label24.Caption);

Writeln(f2,Label31.Caption);

Writeln(f2,Label35.Caption);

Writeln(f2,Label39.Caption);

Writeln(f2,Label43.Caption);

////////////////////////////

Writeln(f3,Label25.Caption);

Writeln(f3,Label32.Caption);

Writeln(f3,Label36.Caption);

Writeln(f3,Label30.Caption);

Writeln(f3,Label44.Caption);

///////////////////////////

Writeln(f4,Label26.Caption);

Writeln(f4,Label33.Caption);

Writeln(f4,Label37.Caption);

Writeln(f4,Label41.Caption);

Writeln(f4,Label45.Caption);

Closefile(f1);

Closefile(f2);

Closefile(f3);

Closefile(f4);

end;

end;.

Листинг программы (Unit3).Unit3;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, XPMan, Menus;

TForm3 = class(TForm)

XPManifest1: TXPManifest;

Panel1: TPanel;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

Memo1: TMemo;

Memo2: TMemo;

Button2: TButton;

Label1: TLabel;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

Label10: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Form3: TForm3;Unit4;

{$R *.dfm}prov (s,s1:string):integer;:integer;:=0;

for i:=1 to 16 do

begin

if s[i]<>s1[i] then

result:=result+1;

end;;element( var s:string):integer;,n:integer;:=length(s);s[1]='x' then

begin

n:=StrToInt(s[2]);

result:=2*n-1;

s:=copy(s,4,l-3);

end

else

begin

n:=StrToInt(s[6]);

result:=2*n;

s:=copy(s,8,l-7);

end;;oper(var s:string):integer;:integer;

l:=length(s);

if s[1]='a' then

begin

result:=1;

s:=copy(s,5,l-4);

end

else

if s[1]='o' then

begin

result:=2;

s:=copy(s,4,l-3);

end

else

begin

result:=3;

s:=copy(s,5,l-4);

end;;Bin(x: Integer): string;t:array[0..1] of char = ('0','1');res:string;:0..1;:='';(x<>0) do:=x mod 2 ;:=t[d]+res;:=x div 2 ;;:=res;;TForm3.FormCreate(Sender: TObject);,i,j:integer;

s,s1,s2,s3,s4,s5:string;

f: TextFile; // файл

fName: String[80]; // имя файла

buf: string[80]; // буфер для чтения из файла

x1,x2,x3,x4:byte;.Clear;.Clear;.Clear;.Clear;.Clear;i:= 0 to 15 do

Memo1.Lines.Add(Bin(i));;i:= 0 to 15 doj:= 0 to 15 do

if length(Memo1.Lines[i])<4 then

Memo1.Lines[i]:='0'+Memo1.Lines[i];

end;:=Memo1.Lines[13] ;

//ShowMessage(s[3]);(f, 'lab_rab\var1.txt');

Reset(f); // открыть для чтения

// чтение из файла

while not EOF(f) do

begin

readln(f, buf); // прочитать строку из файла

Memo2.Lines.Add(buf); // добавить строку в поле Memo1

end; // закрыть файл

CloseFile(f);;;TForm3.Button2Click(Sender: TObject);

sl: TStringList;

s,s1,s2:string;

x1,x2,x3,x4,i,res,j,k,o:integer;

a:array [1..5] of integer;

if (length(Edit1.text)<>16)or (length(Edit2.text)<>16)or(length(Edit3.text)<>16)or(length(Edit4.text)<>16)or(length(Edit5.text)<>16)then

begin

Showmessage('длина ответа должна рaвняться 16 символам!');

exit;

end;

for i:=1 to 16 do

if not(Edit1.Text[i] in ['0','1']) or not(Edit2.Text[i] in ['0','1']) or not(Edit3.Text[i] in ['0','1']) or not(Edit4.Text[i] in ['0','1']) or not(Edit5.Text[i] in ['0','1']) then

begin

ShowMessage('Вводятся только "0" и "1"!');

Exit;

end;

s1:=Memo2.Lines[0] ;

Label2.Caption:='';

for i:= 0 to 15 do

begin

s2:=s1;

s:=Memo1.Lines[i] ;

x1:=StrToInt(s[1]);

x2:=StrToInt(s[2]);

x3:=StrToInt(s[3]);

x4:=StrToInt(s[4]);

case element(s2) of

1: res:=x1;

2: res:=1-x1;

3: res:=x2;

4: res:=1-x2;

5: res:=x3;

6: res:=1-x3;

7: res:=x4;

8: res:=1-x4;

end;

while length(s2)>0 do

begin

case oper(s2) of

1:

case element(s2) of

1: res:=res and x1;

2: res:=res and (1-x1);

3: res:=res and x2;

4: res:=res and (1-x2);

5: res:=res and x3;

6: res:=res and (1-x3);

7: res:=res and x4;

8: res:=res and (1-x4);

end;

2:

case element(s2) of

1: res:=res or x1;

2: res:=res or (1-x1);

3: res:=res or x2;

4: res:=res or (1-x2);

5: res:=res or x3;

6: res:=res or (1-x3);

7: res:=res or x4;

8: res:=res or (1-x4);

end;

3:

case element(s2) of

1: res:=res xor x1;

2: res:=res xor (1-x1);

3: res:=res xor x2;

4: res:=res xor (1-x2);

5: res:=res xor x3;

6: res:=res xor (1-x3);

7: res:=res xor x4;

8: res:=res xor (1-x4);

end;

end;

end;

label2.Caption:=Label2.Caption+IntToStr(res);

end;

// вторая функция

s1:=Memo2.Lines[1] ;

Label3.Caption:='';

for i:= 0 to 15 do

begin

s2:=s1;

s:=Memo1.Lines[i] ;

x1:=StrToInt(s[1]);

x2:=StrToInt(s[2]);

x3:=StrToInt(s[3]);

x4:=StrToInt(s[4]);

case element(s2) of

1: res:=x1;

2: res:=1-x1;

3: res:=x2;

4: res:=1-x2;

5: res:=x3;

6: res:=1-x3;

7: res:=x4;

8: res:=1-x4;

end;

while length(s2)>0 do

begin

case oper(s2) of

1:

case element(s2) of

1: res:=res and x1;

2: res:=res and (1-x1);

3: res:=res and x2;

4: res:=res and (1-x2);

5: res:=res and x3;

6: res:=res and (1-x3);

7: res:=res and x4;

8: res:=res and (1-x4);

end;

2:

case element(s2) of

1: res:=res or x1;

2: res:=res or (1-x1);

3: res:=res or x2;

4: res:=res or (1-x2);

5: res:=res or x3;

6: res:=res or (1-x3);

7: res:=res or x4;

8: res:=res or (1-x4);

end;

3:

case element(s2) of

1: res:=res xor x1;

2: res:=res xor (1-x1);

3: res:=res xor x2;

4: res:=res xor (1-x2);

5: res:=res xor x3;

6: res:=res xor (1-x3);

7: res:=res xor x4;

8: res:=res xor (1-x4);

end;

end;

end;

label3.Caption:=Label3.Caption+IntToStr(res);

end;

// третья функция

s1:=Memo2.Lines[2] ;

Label4.Caption:='';

for i:= 0 to 15 do

begin

s2:=s1;

s:=Memo1.Lines[i] ;

x1:=StrToInt(s[1]);

x2:=StrToInt(s[2]);

x3:=StrToInt(s[3]);

x4:=StrToInt(s[4]);

case element(s2) of

1: res:=x1;

2: res:=1-x1;

3: res:=x2;

4: res:=1-x2;

5: res:=x3;

6: res:=1-x3;

7: res:=x4;

8: res:=1-x4;

end;

while length(s2)>0 do

begin

case oper(s2) of

1:

case element(s2) of

1: res:=res and x1;

2: res:=res and (1-x1);

3: res:=res and x2;

4: res:=res and (1-x2);

5: res:=res and x3;

6: res:=res and (1-x3);

7: res:=res and x4;

8: res:=res and (1-x4);

end;

2:

case element(s2) of

1: res:=res or x1;

2: res:=res or (1-x1);

3: res:=res or x2;

4: res:=res or (1-x2);

5: res:=res or x3;

6: res:=res or (1-x3);

7: res:=res or x4;

8: res:=res or (1-x4);

end;

3:

case element(s2) of

1: res:=res xor x1;

2: res:=res xor (1-x1);

3: res:=res xor x2;

4: res:=res xor (1-x2);

5: res:=res xor x3;

6: res:=res xor (1-x3);

7: res:=res xor x4;

8: res:=res xor (1-x4);

end;

end;

end;

label4.Caption:=Label4.Caption+IntToStr(res);

end;

// четвертая функция

s1:=Memo2.Lines[3] ;

Label5.Caption:='';

for i:= 0 to 15 do

begin

s2:=s1;

s:=Memo1.Lines[i] ;

x1:=StrToInt(s[1]);

x2:=StrToInt(s[2]);

x3:=StrToInt(s[3]);

x4:=StrToInt(s[4]);

case element(s2) of

1: res:=x1;

2: res:=1-x1;

3: res:=x2;

4: res:=1-x2;

5: res:=x3;

6: res:=1-x3;

7: res:=x4;

8: res:=1-x4;

end;

while length(s2)>0 do

begin

case oper(s2) of

1:

case element(s2) of

1: res:=res and x1;

2: res:=res and (1-x1);

3: res:=res and x2;

4: res:=res and (1-x2);

5: res:=res and x3;

6: res:=res and (1-x3);

7: res:=res and x4;

8: res:=res and (1-x4);

end;

2:

case element(s2) of

1: res:=res or x1;

2: res:=res or (1-x1);

3: res:=res or x2;

4: res:=res or (1-x2);

5: res:=res or x3;

6: res:=res or (1-x3);

7: res:=res or x4;

8: res:=res or (1-x4);

end;

3:

case element(s2) of

1: res:=res xor x1;

2: res:=res xor (1-x1);

3: res:=res xor x2;

4: res:=res xor (1-x2);

5: res:=res xor x3;

6: res:=res xor (1-x3);

7: res:=res xor x4;

8: res:=res xor (1-x4);

end;

end;

end;

label5.Caption:=Label5.Caption+IntToStr(res);

end;

// пятая функция

s1:=Memo2.Lines[4] ;

Label6.Caption:='';

for i:= 0 to 15 do

begin

s2:=s1;

s:=Memo1.Lines[i] ;

x1:=StrToInt(s[1]);

x2:=StrToInt(s[2]);

x3:=StrToInt(s[3]);

x4:=StrToInt(s[4]);

case element(s2) of

1: res:=x1;

2: res:=1-x1;

3: res:=x2;

4: res:=1-x2;

5: res:=x3;

6: res:=1-x3;

7: res:=x4;

8: res:=1-x4;

end;

while length(s2)>0 do

begin

case oper(s2) of

1:

case element(s2) of

1: res:=res and x1;

2: res:=res and (1-x1);

3: res:=res and x2;

4: res:=res and (1-x2);

5: res:=res and x3;

6: res:=res and (1-x3);

7: res:=res and x4;

8: res:=res and (1-x4);

end;

2:

case element(s2) of

1: res:=res or x1;

2: res:=res or (1-x1);

3: res:=res or x2;

4: res:=res or (1-x2);

5: res:=res or x3;

6: res:=res or (1-x3);

7: res:=res or x4;

8: res:=res or (1-x4);

end;

3:

case element(s2) of

1: res:=res xor x1;

2: res:=res xor (1-x1);

3: res:=res xor x2;

4: res:=res xor (1-x2);

5: res:=res xor x3;

6: res:=res xor (1-x3);

7: res:=res xor x4;

8: res:=res xor (1-x4);

end;

end;

end;

label6.Caption:=Label6.Caption+IntToStr(res);

end;

k:=prov(Edit1.Text,Label2.Caption);

if k=0 then

a[1]:=5

else

if k<=2 then

a[1]:=4

else

if k<=7 then

a[1]:=3

else

a[1]:=2;:=prov(Edit2.Text,Label3.Caption);

if k=0 then

a[2]:=5

else

if k<=2 then

a[2]:=4

else

if k<=7 then

a[2]:=3

else

a[2]:=2;

k:=prov(Edit3.Text,Label4.Caption);

if k=0 then

a[3]:=5

else

if k<=2 then

a[3]:=4

else

if k<=7 then

a[3]:=3

else

a[3]:=2;

k:=prov(Edit4.Text,Label5.Caption);

if k=0 then

a[4]:=5

else

if k<=2 then

a[4]:=4

else

if k<=7 then

a[4]:=3

else

a[4]:=2;

k:=prov(Edit5.Text,Label6.Caption);

if k=0 then

a[5]:=5

else

if k<=2 then

a[5]:=4

else

if k<=7 then

a[5]:=3

else

a[5]:=2;

o:=(a[1]+a[2]+a[3]+a[4]+a[5])div 5;

Showmessage('Оценка '+IntToStr(o));

sl := TStringList.Create;

sl.LoadFromFile( 'spiski\'+form4.label2.caption+'.txt' );

for i := 0 to sl.Count-1 do

if Pos( form4.label1.Caption, sl[i] ) > 0 then

begin

sl[i+1]:=sl[i+1]+' Оценка '+IntToStr(o);

sl.SaveToFile('spiski\'+form4.label2.Caption+'.txt');

sl.Free;

Form3.Close;

break;

end;;.

Листинг программы (Unit4).Unit4;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, OleServer, WordXP;

TForm4 = class(TForm)

Label1: TLabel;

Label2: TLabel;

ComboBox1: TComboBox;

Memo1: TMemo;

Button1: TButton;

WordApplication1: TWordApplication;

Memo2: TMemo;

Memo3: TMemo;

procedure ComboBox1Change(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Form4: TForm4;ComObj;

{$R *.dfm}TForm4.ComboBox1Change(Sender: TObject);

s:string;

f: TextFile; // файл

buf: string[80]; // буфер для чтения из файла

begin

s:=ComboBox1.Items[ComboBox1.ItemIndex];

if s = 'Вариант 1' then

begin

Memo1.Clear;

AssignFile(f, 'lab_rab\var1.txt');

Reset(f); // открыть для чтения

// чтение из файла

while not EOF(f) do

begin

readln(f, buf); // прочитать строку из файла

Memo1.Lines.Add(buf); // добавить строку в поле Memo1

end; // закрыть файл

CloseFile(f);

end;

if s = 'Вариант 2' then

begin

Memo1.Clear;

AssignFile(f, 'lab_rab\var2.txt');

Reset(f); // открыть для чтения

while not EOF(f) do// чтение из файла

begin

readln(f, buf); // прочитать строку из файла

Memo1.Lines.Add(buf); // добавить строку в поле Memo1

end; // закрыть файл

CloseFile(f);

end;

if s = 'Вариант 3' then

begin

Memo1.Clear;

AssignFile(f, 'lab_rab\var3.txt');

Reset(f); // открыть для чтения

// чтение из файла

while not EOF(f) do

begin

readln(f, buf); // прочитать строку из файла

Memo1.Lines.Add(buf); // добавить строку в поле Memo1

end; // закрыть файл

CloseFile(f);

end;

if s = 'Вариант 4' then

begin

Memo1.Clear;

AssignFile(f, 'lab_rab\var4.txt');

Reset(f); // открыть для чтения

// чтение из файла

while not EOF(f) do

begin

readln(f, buf); // прочитать строку из файла

Memo1.Lines.Add(buf); // добавить строку в поле Memo1

end; // закрыть файл

CloseFile(f);

end;;TForm4.Button1Click(Sender: TObject);

sl: TStringList;

i: integer;

MSWord: Variant;

begin

sl := TStringList.Create;

sl.LoadFromFile( 'spiski\'+label2.Caption+'.txt' );

for i := 0 to sl.Count-1 do

if Pos( label1.Caption, sl[i] ) > 0 then

if sl.Count>=(i+2) then

begin

if pos ('Вариант',sl[i+1])>0 then

begin

showmessage('задание уже получено!');

sl.Free;

form4.Close;

exit;

end

else

begin

sl.Insert((i+1),ComboBox1.Text );

sl.SaveToFile('spiski\'+label2.Caption+'.txt');

sl.Free;

break;

end;

end

else

begin

sl.Insert((i+1),ComboBox1.Text );

sl.SaveToFile('spiski\'+label2.Caption+'.txt');

sl.Free;

break;

end;

end;

begin

try

MSWord:=CreateOleObject('Word.Application');

MSWord.Visible:=true;

except

Exception.Create('Error');

end;

MSWord.Documents.Add;

MSWord.Selection.Font.Size := 10;

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphCenter;

MSWord.Selection.TypeText(Memo3.Text);

MSWord.Selection.Font.Size := 12;

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Домашнее задание');

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.ParagraphFormat.Alignment:=wdAlignParagraphLeft;

MSWord.Selection.TypeText('Группа : ');

MSWord.Selection.TypeText(Label2.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText('Студент : ');

MSWord.Selection.TypeText(Label1.Caption);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Memo2.Text);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(ComboBox1.Text);

MSWord.Selection.TypeText(#13#10);

MSWord.Selection.TypeText(Memo1.Text);

end;

Application.Terminate;;.

Листинг программы (Unit5).Unit5;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, XPMan;

TForm5 = class(TForm)

Button1: TButton;

Button2: TButton;

XPManifest1: TXPManifest;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Form5: TForm5;Unit4, Unit3;

{$R *.dfm}TForm5.Button1Click(Sender: TObject);

i:integer;

sl: TStringList;

sl := TStringList.Create;

sl.LoadFromFile( 'spiski\'+form4.label2.caption+'.txt' );

for i := 0 to sl.Count-1 do

if Pos( form4.label1.Caption, sl[i] ) > 0 then

if sl.Count=i+1 then

begin

Form4.Show;

break;

end

else

if pos ('Вариант',sl[i+1])>0 then

showmessage('Вариант уже выбран!')

else

begin

Form4.Show;

break;

end;;TForm5.Button2Click(Sender: TObject);

i:integer;

sl: TStringList;

sl := TStringList.Create;

sl.LoadFromFile( 'spiski\'+form4.label2.caption+'.txt' );

for i := 0 to sl.Count-1 do

if Pos( form4.label1.Caption, sl[i] ) > 0 then

if sl.Count=i+1 then

begin

Form4.Show;

break;

end

else

if pos ('Оценка',sl[i+1])>0 then

showmessage('Оценка уже получена')

else

begin

Form3.Show;

break;

end;;.

Листинг программы (Unit6).Unit6;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, XPMan, StdCtrls;

TForm6 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

XPManifest1: TXPManifest;

Label1: TLabel;

Label2: TLabel;

procedure Button4Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Form6: TForm6;Unit2, Unit7;

{$R *.dfm}TForm6.Button4Click(Sender: TObject);.show;;TForm6.Button1Click(Sender: TObject);.show;.Panel1.Show;.Caption:='Создание';.Panel2.Hide;.Panel3.Hide;;TForm6.Button2Click(Sender: TObject);.show;.Caption:='Редактирование';.Panel2.Show;.Panel1.Hide;.Panel3.Hide;;TForm6.Button3Click(Sender: TObject);.Show;.Panel3.Show;.Caption:='Просмотр';.Panel1.Hide;.Panel2.Hide;;.

Листинг программы (Unit7).Unit7;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, XPMan;

TForm7 = class(TForm)

Memo1: TMemo;

Edit1: TEdit;

Button1: TButton;

Label1: TLabel;

Panel1: TPanel;

Label2: TLabel;

Panel2: TPanel;

Edit2: TEdit;

Memo2: TMemo;

Button2: TButton;

Label3: TLabel;

Label4: TLabel;

Button3: TButton;

XPManifest1: TXPManifest;

Panel3: TPanel;

Edit3: TEdit;

Label5: TLabel;

Label6: TLabel;

Memo3: TMemo;

Button4: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure FormShow(Sender: TObject);

private

{ Private declarations }

public

f1:string;

{ Public declarations }

end;

Form7: TForm7;Unit6;

{$R *.dfm}TForm7.Button1Click(Sender: TObject);:Textfile;Edit1.Text='' then('Введите номер группы!')

else

begin

AssignFile(f,'spiski\'+Edit1.Text+'.txt');

ReWrite(f);

Writeln(f,Memo1.Text);

Closefile(f);

Showmessage('Группа успешно создана');

Edit1.Clear;

form6.show;

form7.Close;

end;;TForm7.Button2Click(Sender: TObject);:Textfile;

if Edit2.Text='' then('Введите номер группы!')

else

begin

DeleteFile('spiski\'+f1+'.txt');

AssignFile(f,'spiski\'+Edit2.Text+'.txt');

ReWrite(f);

Writeln(f,Memo2.Text);

Closefile(f);

Showmessage('Группа успешно редактирована');

Edit1.Clear;

form6.show;

form7.Close;

end;;TForm7.Button3Click(Sender: TObject);:Textfile;: string[80];Edit2.Text='' then('Введите номер группы!')

else

begin

Memo2.Clear;

Memo2.Show;

Label4.Show;

f1:=Edit2.Text;

Button2.Show;

AssignFile(f,'spiski\'+Edit2.Text+'.txt');

Reset(f);

while not EOF(f) do

begin

readln(f, buf); // прочитать строку из файла

Memo2.Lines.Add(buf); // добавить строку в поле Memo1

end; // закрыть файл

CloseFile(f);

end;;TForm7.Button4Click(Sender: TObject);:Textfile;: string[80];.Clear;.Show;.Show;Edit3.Text='' then

ShowMessage('Введите название группы!')

else

begin(f,'spiski\'+Edit3.Text+'.txt');(f);

while not EOF(f) do

begin

readln(f, buf); // прочитать строку из файла

Memo3.Lines.Add(buf); // добавить строку в поле Memo1

end; // закрыть файл

CloseFile(f);; end;TForm7.FormShow(Sender: TObject);.Memo1.Clear;.Edit1.Clear;.Edit2.Clear;.Memo2.Clear;.Memo3.Clear;.Edit3.Clear;;.


1. Специальная часть .1 Задача Постановка задачи Задача заключается в написании приложения «Решение базовых логических операций».

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ