5812

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

Дипломная

Информатика, кибернетика и программирование

Специальная часть Задача Постановка задачи Задача заключается в написании приложения Решение базовых логических операций. Данная организация программы в целом позволит: Создать базовые логические операции Сохранить базовы...

Русский

2012-12-21

3.4 MB

9 чел.

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

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

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

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

  •  Создать базовые логические операции
  •  Сохранить базовые логические операции в файл и вывод в приложение Microsoft Word
  •  Получить студентам разные варианты базовых логических операций
  •  Проверить решение базовых логических операций и постановки оценки за правильность решения
  •  Записать полученную студентом оценку и вариант в файл

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

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

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

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

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

Пример:

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

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

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

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

А

В

А ^ В

0

0

0

0

1

0

1

0

0

1

1

1

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

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

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

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

Пример:

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

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

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

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

А

В

А V В

0

0

0

0

1

1

1

0

1

1

1

1

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

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

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

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

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

Пример:

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

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

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

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

А

¬А

0

1

1

0

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

0 = 1, 1 = 0

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

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

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

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

Пример:

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

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

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

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

А

В

А → В

0

0

1

0

1

1

1

0

0

1

1

1

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

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

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

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

Пример:

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

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

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

А

В

А ≡ В

0

0

1

0

1

0

1

0

0

1

1

1

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

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

  1.  Технология разработки программы
    1.  Описание среды программирования

Для создания программного продукта использовалась среда программирования 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), как поля, свойства и методы. Поля класса аналогичны полям записи и служат для хранения информации об объекте. Методами называются процедуры и функции, предназначенные для обработки полей. Свойства занимают промежуточное положение между полями и методами.

ADO (от англ. ActiveX Data Objects — «объекты данных ActiveX») — интерфейс программирования приложений для доступа к данным, разработанный компанией Microsoft (MS Access, MS SQL Server) и основанный на технологии компонентов ActiveX. ADO позволяет представлять данные из разнообразных источников (реляционных баз данных, текстовых файлов и т. д.) в объектно-ориентированном виде. [6]

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

  •  Connection (представляет подключение к удалённому источнику данных)
  •  Recordset (представляет набор строк, полученный от источника данных)
  •  Command (используется для выполнения команд и SQL-запросов с параметрами)
  •  Record (может представлять одну запись объекта Recordset или же иерархическую структуру, состоящую из текстовых данных)
  •  Stream (используется для чтения и записи потоковых данных, например, документов XML или двоичных объектов)
  •  Errors (представляет ошибки)
  •  Fields (представляет столбцы таблицы базы данных)
  •  Parameters (представляет набор параметров SQL-инструкции)
  •  Properties (представляет набор свойств объекта)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

var

s1,s2,s3,y1,y2,y3: string;

x1l1,x2l1,x3l1,x4l1:string;

x1l2,x2l2,x3l2,x4l2:string;

x1l3,x2l3,x3l3,x4l3:string;

x1l4,x2l4,x3l4,x4l4:string;

begin

 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

f:Textfile;

begin

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

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

ReWrite(f);

Writeln(f,Memo2.Text);

 Closefile(f);

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

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

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

Reset(f);

 while not EOF(f) do

 begin

   readln(f, buf);

   Memo3.Lines.Add(buf);

 end;

 CloseFile(f);

1.2.5 Аномалии

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

for i:= 0 to 15 do

begin

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

end;

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

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

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

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

  1.  Восходящий
    1.  Нисходящий

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

  1.  проверка нормальных условий – проверка, основанная на тестировании данных, которые соответствуют реальным условиям программы;
  2.  проверка экстремальных условий;
  3.  проверка исключительных ситуаций;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

- Windows’98/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

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

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

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

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

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

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

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

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

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

  1.  Получить домашнее задание
  2.  Проверить домашнее задание

Если нужно получить задание, выбираем «получить д/з». в появившемся окне выбираем номер варианта и подтверждаем его. При выполнении домашнего задания, каждую функцию необходимо будет считать для каждого значения 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 – Трудоемкость.

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

Тмин, дн

Тмах, дн

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

3

5

Разработка ТЗ

2

4

Разработка алгоритма

10

15

Определение структуры данных

2

5

Разработка интерфейса

15

17

Кодирование (запись алгоритмов на языковом коде)

15

20

Отладка

3

5

Тестирование и усовершенствование

20

25

Создание справочной системы

2

4

Маркетинговые исследования

20

25

Окончательное согласование и утверждение

3

5

Оформление Программного Продукта

10

13

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  •  1-й год – 2 штуки
  •  2-й год – 4 штуки
  •  3-й и 4-й год – 5 штук ежегодно;    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.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л.

200

200,00

flash-память

650

1

650,00

CD-RW диск

10

10

100,00

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

 

 

1 800,00

Итого

 

 

2 750,00

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

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

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

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

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

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

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

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

Номер строки

Тмин

дн

Тмах дн

Тср дн

Руководитель %

Программист %

Оператор ЭВМ, %

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

3

5

3,8

40

60

0

Разработка ТЗ

2

4

2,8

60

0

40

Разработка алгоритма

10

15

12

20

80

0

Определение структуры данных

2

5

3,2

0

75

25

Разработка интерфейса

15

17

15,8

20

40

40

Кодирование (запись алгоритмов на языковом коде)

15

20

17

0

100

0

Отладка

3

5

3,8

0

95

5

Тестирование и усовершенствование

20

25

22

0

75

25

Создание справочной системы

2

4

2,8

5

5

90

Маркетинговые исследования

20

25

22

90

0

10

Окончательное согласование и утверждение

3

5

3,8

90

10

0

Оформление Программного Продукта

10

13

11,2

50

5

45

Итого

37,56

54,59

28,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. Расчет коммерческой  эффективности проекта от реализаци 

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

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

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

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

  1.  отсутствие материально-вещественной структуры;
  2.  использование в производстве продукции, при выполнении работ или оказании услуг либо для управленческих нужд организации;
  3.  использование в течение длительного времени, т.е. срока полезного использования, продолжительностью свыше 12 месяцев или обычного операционного цикла, если он превышает 12 месяцев;
  4.  организация не предполагает последующую перепродажу данного имущества;
  5.  способность приносить организации экономические выгоды (доход) в будущем;
  6.  наличие надлежаще оформленных документов, подтверждающих существование самого актива и исключительного права у организации на результаты интеллектуальной деятельности (патенты, свидетельства, другие охранные документы, договор уступки (приобретения) патента, товарного знака и т.п.).

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

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

Наименование

Кол-во (шт.)

Цена (за шт. в тыс.руб.)

Стоимость (в тыс.руб.)

Компьютер

2

22,00

44,00

База данных

2

42,50

85,00

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

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

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

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

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

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

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

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

показатель

Годы инвестиционного периода

0

1

2

3

4

 

оф

нма

оф

нма

оф

нма

оф

нма

 

 

 

 

 

 

 

 

 

 

 

1

Первоначальная стоимость

0

44,00

85,00

44,00

85,00

44,00

85,00

44,00

85,00

2

Амортизационные отчисления

0

8,80

8,50

8,80

8,50

8,80

8,50

8,80

8,80

 

 

 

 

 

 

 

 

 

 

 

 

Остаточная стоимость

 

 

 

 

 

 

 

 

 

3

на начало года

0

44,00

85,00

35,20

76,50

26,40

68,00

17,60

59,50

4

на конец года

0

35,20

76,50

26,40

68,00

17,60

59,50

8,80

51,00

5

среднегодовая стоимость

0

39,60

 

30,80

 

22,00

 

13,20

 

6

налог на имущество

0

0,59

 

0,46

 

0,33

 

0,20

 

Остаточная стоимость

59,80

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

2.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 – Расчет денежных потоков.                                                    в тыс. руб.

Номер строки

Показатель

Годв инвестиционного периода

0

1

2

3

4

 

Операционная деательность

 

 

 

 

 

1

Выручка без НДС

0

237,06

474,12

711,18

711,18

2

Производственные затраты

0

39,87

79,73

119,60

119,60

3

Амортизационные отчисления

0

17,30

17,30

17,30

17,30

4

Валовая прибыль

0

179,69

377,09

574,28

574,28

5

Налог на имущество

0

0,59

0,46

0,33

0,20

6

Налогооблагаемая прибыль

0

179,30

376,63

573,95

574,08

7

Налог на прибыль

0

35,86

75,33

114,79

114,82

8

Чистая прибыль

0

143,44

301,30

459,26

459,26

9

Сальдо от потока операционной деятельности

0

160,74

318,60

476,46

476,56

 

Инвестиционная деятельность

 

 

 

 

 

10

притоки

0

0

0

0

59,80

11

Инвестиции

-472,62

0,00

0,00

0,00

0,00

12

Сальдо от потока инвестиционной деятельности

-472,62

0,00

0,00

0,00

61,00

 

Сальдо суммарного потока

-472,62

160,74

318,60

476,46

536,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 = VN = 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.2.3 Расчет основных показателей эффективности

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

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


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

Показатель

Годы инвестиционнго периода

0

1

2

3

4

1

Сальдо суммарного потока

-472,62

160,74

318,60

476,46

536,36

2

Коээфициент дисконтирования

1,00

0,88

0,78

0,69

0,61

3

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

-472,62

141,45

248,51

328,76

327,18

4

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

573,28

5

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

-472,62

-331,17

-82,66

246,10

573,28

6

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

2,25

7

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

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.2.4 Расчет уровня безубыточности

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

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

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

 

Годы инвестиционного периода

0

1

2

3

4

1

Выручка без НДС

0,00

237,06

474,12

711,18

711,18

2

Производственные затраты

0,00

39,87

79,73

119,60

119,60

3

Амортизационные отчисления

0,00

17.30

17.30

17.30

17.30

4

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

0,00

57,17

97,03

136,90

136,90

5

Постоянные затраты

0,00

37,73

64,04

90,35

90,35

6

Переменные затраты

0,00

19,44

32,99

46,55

46,55

7

Уровень безубыточности

0,00

0,08

0,10

0,10

0,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 = SumTFC = 57,17 – 37,73 = 19,44 тыс. руб.

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

   

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

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

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

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

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

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

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

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

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

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

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

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

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

- 1-й год: 0,08;

- 2-й год: 0,10;

- 3-й год: 0,10;

- 4-й год: 0,10;

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

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

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

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

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

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

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

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

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

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

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

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

 

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

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

Показатель

Годы инвестиционнго периода

0

1

2

3

4

нма

нма

нма

нма

нма

1

Первоначальная стоимость

0,00

39,51

39,51

39,51

39,51

2

амортизационные отчисления

0,00

3,95

3,95

3,95

3,95

 

Остаточная стоимость

 

 

 

 

 

3

На начало периода

0,00

39,51

35,56

31,61

27,66

4

На конец периода

0,00

35,56

31,61

27,66

23,71

Остаточная стоимость

23,71

 

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

,

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

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

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

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

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

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

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

Показатель

Годы инвестиционного периода

 

0

1

2

3

4

 

операционная деятельность

 

 

 

 

 

1

Выручка без НДС

0,00

56,90

56,90

56,90

56,90

2

Производственные затраты

0,00

7,51

7,51

7,51

7,51

3

Амортизационные отчисления

0,00

3,95

3,95

3,95

3,95

4

Валовая прибыль

0,00

45,44

45,44

45,44

45,44

5

Налог на прибыль

0,00

9,09

9,09

9,09

9,09

6

Чистая прибыль

0,00

36,35

36,35

36,35

36,35

7

Сальдо потока от операционной деятельности

0,00

40.30

40.30

40.30

40.30

8

Инвестиционная деятельность

 

 

 

 

 

9

Притоки

0,00

0,00

0,00

0,00

23,71

 

Инвестиции

-39,51

0,00

0,00

0,00

0,00

10

Сальдо потока от инвестиционной деятельности

-39,51

0,00

0,00

0,00

23,71

11

Сальдо суммарного потока

-39,51

40.30

40.30

40.30

64,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 тыс. руб.

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

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

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

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

Показатель

Годы инвестиционного периода

0

1

2

3

4

1

Сальдо суммарного потока

-39,51

40.30

40.30

40.30

64,01

2

Коэффициент дисконтирования

1,00

0,88

0,78

0,69

0,61

3

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

-39,51

35,46

31,43

27,81

39,05

4

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

94,24

5

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

-39,51

-4,05

27,38

55,19

94,24

6

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

1,11

7

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

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 Вывод об экономической эффективности применения базы данных

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

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

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

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

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

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

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

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

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

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

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


3 Заключение

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

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

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

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

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


4 Литература

  1.  Аширова Н.Г Конспект лекций по дисциплине «Технология разработки программных продуктов» Математический колледж г. Москва, 2010 год.
  2.  Информация с сайта http://ru.wikipedia.org/;
  3.  Экономика для колледжей. Базовый курс / Озерова О. П. – Ростов-на-Дону: Феникс, 2005;
  4.  Экономический анализ предприятия. Учебник / Прыкина Л. В.: Юнити, 2006;
  5.  Delphi 6. Учебный курс. – М.: Издатель Молгачева С.В., 2003. – 672 с., ил.
  6.  Microsoft Word. Версия 2002. Шаг за шагом: Практ.пособ./Пер.с анг.-М.: издательствоЭКОМ, 2004.-336с.: илл.
  7.  Катюшина В.А Конспект лекций дисциплине «Пакеты прикладных программ». Математический колледж г. Москва, 2011 год.


Приложение А

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

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

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

Аномальные ситуации

Реакция программы

Отсутствие информации в полях добавления

Выдается сообщение: «Поля должны быть заполнены » и ожидается заполенение полей

Повторная попытка  выбора варианта или проверки варианта

Выдается сообщение: «Вариант уже выбран» или «Оценка уже получена» и ожидается исправление замечания

Ввод текста в числовое поле

Выдается сообщение: «Ввод только «0» и «1»» и ожидается исправление замечания

Не выбрана одна или более операций над функциями

Выдается сообщение: «Заполните все операции 3 функции» и ожидается исправления замечания

Таблица 4 Результаты тестирования программы

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

Ожидаемый результат

Аномалия

1

Правильное значение

нормальная работа

Нет

2

Отсутствие нужного значения

переход на пустое поле

Да

3

Отсутствие ненужного значения

нормальная работа

Нет

4

Некорректные значения

блокировка ввода

Да


Приложение Б

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

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

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

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

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

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

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

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

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

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

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

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


Приложение В

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

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

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

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

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

1 страничка файла Microsoft Word. Вариант №1 созданных преподавателей функций

2 страничка файла Microsoft Word. Вариант №2 созданных преподавателей функций

3 страничка файла Microsoft Word. Вариант №3 созданных преподавателей функций

4 страничка файла Microsoft Word. Вариант №4 созданных преподавателей функций

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

Страничка файла Microsoft Word. Домашнее задание, полученное студентом программно.

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


Приложение Г

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

unit Unit1;

interface

uses

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

 Dialogs, StdCtrls, Mask, ExtCtrls, jpeg;

type

 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;

var

 Form1: TForm1;

implementation

uses Unit2, Unit3, Unit4, Unit5, Unit6;

{$R *.dfm}

procedure TForm1.Button2Click(Sender: TObject);

var

 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;

end;

procedure TForm1.ComboBox1Change(Sender: TObject);

var

s:string;

begin

 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;

end;

end.

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

unit Unit2;

interface

uses

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

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

type

 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;

var

 Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);

var

s1,s2,s3,y1,y2,y3: string;

x1l1,x2l1,x3l1,x4l1:string;

x1l2,x2l2,x3l2,x4l2:string;

x1l3,x2l3,x3l3,x4l3:string;

x1l4,x2l4,x3l4,x4l4:string;

begin

 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;

procedure TForm2.Button1Click(Sender: TObject);

var

s1,s2,s3,y1,y2,y3: string;

x1l1,x2l1,x3l1,x4l1:string;

x1l2,x2l2,x3l2,x4l2:string;

x1l3,x2l3,x3l3,x4l3:string;

x1l4,x2l4,x3l4,x4l4:string;

begin

 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;

procedure TForm2.Button3Click(Sender: TObject);

var

s1,s2,s3,y1,y2,y3: string;

x1l1,x2l1,x3l1,x4l1:string;

x1l2,x2l2,x3l2,x4l2:string;

x1l3,x2l3,x3l3,x4l3:string;

x1l4,x2l4,x3l4,x4l4:string;

begin

 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;

procedure TForm2.Button4Click(Sender: TObject);

var

s1,s2,s3,y1,y2,y3: string;

x1l1,x2l1,x3l1,x4l1:string;

x1l2,x2l2,x3l2,x4l2:string;

x1l3,x2l3,x3l3,x4l3:string;

x1l4,x2l4,x3l4,x4l4:string;

begin

 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;

procedure TForm2.Button5Click(Sender: TObject);

var

s1,s2,s3,y1,y2,y3: string;

x1l1,x2l1,x3l1,x4l1:string;

x1l2,x2l2,x3l2,x4l2:string;

x1l3,x2l3,x3l3,x4l3:string;

x1l4,x2l4,x3l4,x4l4:string;

begin

 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;

procedure TForm2.Button6Click(Sender: TObject);

var

MSWord: Variant;

begin

 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;

end;

procedure 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;

end.

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

unit Unit3;

interface

uses

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

 Dialogs, StdCtrls, ExtCtrls, XPMan, Menus;

type

 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;

var

 Form3: TForm3;

implementation

uses Unit4;

{$R *.dfm}

function prov (s,s1:string):integer;

var

i:integer;

begin

result:=0;

for i:=1 to 16 do

  begin

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

    result:=result+1;

  end;

end;

function element( var s:string):integer;

var

l,n:integer;

begin

l:=length(s);

if 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;

end;

function oper(var s:string):integer;

var

l:integer;

begin

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;

end;

function Bin(x: Integer): string;

const t:array[0..1] of char = ('0','1');

var res:string;

d:0..1;

begin

res:='';

while (x<>0) do

begin

d:=x mod 2 ;

res:=t[d]+res;

x:=x div 2 ;

end;

Bin:=res;

end;

procedure TForm3.FormCreate(Sender: TObject);

var

a,i,j:integer;

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

f: TextFile; // файл

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

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

 x1,x2,x3,x4:byte;

begin

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

Edit4.Clear;

Edit5.Clear;

for i:= 0 to 15 do

begin

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

end;

for i:= 0 to 15 do

for j:= 0 to 15 do

begin

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

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

end;

s:=Memo1.Lines[13] ;

//ShowMessage(s[3]);

begin

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

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

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

 while not EOF(f) do

 begin

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

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

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

 CloseFile(f);

end;

end;

procedure TForm3.Button2Click(Sender: TObject);

var

sl: TStringList;

s,s1,s2:string;

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

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

begin

   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;

k:=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;

end;

end.

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

unit Unit4;

interface

uses

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

 Dialogs, StdCtrls, OleServer, WordXP;

type

 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;

var

 Form4: TForm4;

implementation

uses ComObj;

{$R *.dfm}

procedure TForm4.ComboBox1Change(Sender: TObject);

var

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;

end;

procedure TForm4.Button1Click(Sender: TObject);

var

 sl: TStringList;

 i: integer;

 MSWord: Variant;

begin

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;

end;

end.

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

unit Unit5;

interface

uses

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

 Dialogs, StdCtrls, XPMan;

type

 TForm5 = class(TForm)

   Button1: TButton;

   Button2: TButton;

   XPManifest1: TXPManifest;

   procedure Button1Click(Sender: TObject);

   procedure Button2Click(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

 end;

var

 Form5: TForm5;

implementation

uses Unit4, Unit3;

{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);

var

i:integer;

sl: TStringList;

begin

     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;

end;

procedure TForm5.Button2Click(Sender: TObject);

var

i:integer;

sl: TStringList;

begin

     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;

end;

end.

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

unit Unit6;

interface

uses

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

 Dialogs, XPMan, StdCtrls;

type

 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;

var

 Form6: TForm6;

implementation

uses Unit2, Unit7;

{$R *.dfm}

procedure TForm6.Button4Click(Sender: TObject);

begin

form2.show;

end;

procedure TForm6.Button1Click(Sender: TObject);

begin

Form7.show;

Form7.Panel1.Show;

Form7.Caption:='Создание';

Form7.Panel2.Hide;

Form7.Panel3.Hide;

end;

procedure TForm6.Button2Click(Sender: TObject);

begin

Form7.show;

Form7.Caption:='Редактирование';

Form7.Panel2.Show;

Form7.Panel1.Hide;

Form7.Panel3.Hide;

end;

procedure TForm6.Button3Click(Sender: TObject);

begin

Form7.Show;

Form7.Panel3.Show;

Form7.Caption:='Просмотр';

Form7.Panel1.Hide;

Form7.Panel2.Hide;

end;

end.

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

unit Unit7;

interface

uses

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

 Dialogs, ExtCtrls, StdCtrls, XPMan;

type

 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;

var

 Form7: TForm7;

implementation

uses Unit6;

{$R *.dfm}

procedure TForm7.Button1Click(Sender: TObject);

var

f:Textfile;

begin

if Edit1.Text='' then

showmessage('Введите номер группы!')

else

begin

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

ReWrite(f);

Writeln(f,Memo1.Text);

Closefile(f);

Showmessage('Группа успешно создана');

Edit1.Clear;

form6.show;

form7.Close;

end;

end;

procedure TForm7.Button2Click(Sender: TObject);

var

f:Textfile;

begin

if Edit2.Text='' then

showmessage('Введите номер группы!')

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;

end;

procedure TForm7.Button3Click(Sender: TObject);

var

f:Textfile;

buf: string[80];

begin

if Edit2.Text='' then

showmessage('Введите номер группы!')

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;

end;

procedure TForm7.Button4Click(Sender: TObject);

var

f:Textfile;

buf: string[80];

begin

Memo3.Clear;

Memo3.Show;

Label6.Show;

if Edit3.Text='' then

ShowMessage('Введите название группы!')

 else

 begin

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

Reset(f);

 while not EOF(f) do

 begin

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

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

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

 CloseFile(f);

end; end;

procedure TForm7.FormShow(Sender: TObject);

begin

Form7.Memo1.Clear;

Form7.Edit1.Clear;

Form7.Edit2.Clear;

Form7.Memo2.Clear;

Form7.Memo3.Clear;

Form7.Edit3.Clear;

end;

end.


Создать

группу

Вход

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

Редактировать

группу

Получить

домашнее задание

Студент

Просмотреть

группу

Проверить

домашнее

задание

Создать

функции


 

А также другие работы, которые могут Вас заинтересовать

16079. Адміністративна деліктологія 317.5 KB
  Подлінув С.Д. Адміністративна деліктологія. Навчальнометодичний посібник призначений для самостійної роботи студентів які вивчають фундаментальну спеціальну дисципліну Адміністративна деліктологія. В посібнику розгляну...
16080. Аграрне право України О.О. Погрібного 2.85 MB
  У підручнику докладно розглянуті умови та порядок створення та функціонування субєктів аграрних правовідносин, питання права власності їх на землю, розкриті умови та порядок набуття і користування земельними ділянками, реалізації земельних прав і обмеження прав на землю. Підручник буде корисним для студентів, бакалаврів, спеціалістів, магістрів, аспірантів та викладачів правознавчих, аграрних, землевпорядних та економічних спеціальностей вищих навчальних закладів, а також широкому колу читачів, які цікавляться проблемами аграрного законодавства і права України.
16081. Порівняльне правознавство 1.71 MB
  ББК67 П41 Підручник підготовлений викладачами Національної юридичної академії України імені Ярослава Мудрого Гриф Затверджено Міністерством освіти і науки України як підручник для студентів юридичних спеціальностей вищих навчальних закладів надано 15.09.2003 рок
16082. Право інтелектуальної власності в Україні 1.26 MB
  О.А. Підопригора О.О Підопригора ПРАВО ІНТЕЛЕКТУАЛЬНОЇ ВЛАСНОСТІ УКРАЇНИ НАВЧАЛЬНИЙ ПОСІБНИК для студентів юридичних вузів і факультетів університетів Київ Юрінком Інтер 1998 Рекомендовано вченою радою юридичного факультету Київського ун
16083. Право інтелектуальної власності 4.51 MB
  Охорона прав на результати інтелектуальної діяльності введена порівняно недавно — дещо більше 200 років тому, — термін, з історичної точки зору, мізерно малий. І належала вона лише до деяких видів інтелектуальних продуктів, що є результатами творчої діяльності, які вийшли на той час на ринок, — творів літератури і мистецтва, а також винаходів.
16084. Законодавство України про інтелектуальну власність 1.52 MB
  В монографії в доступній для широкого читача формі висвітлюються роль і значення інтелектуальної власності в Україні в умовах переходу до ринкової економіки. В ній, зокрема, розкривається процес становлення законодавства України про інтелектуальну власність. В роботі здійснено грунтовий аналіз цього законодавства, розкриті його позитивні якості і риси. Разом з тим виявлені...
16085. Государственное и муниципальное управление в зарубежных странах 1.34 MB
  Курс лекций Государственное и муниципальное управление в зарубежных странах Старцев Я.Ю. Оглавление Об авторе Тема 1. Предмет задачи и структура учебной дисциплины Тема 2. Разделение властей и разделение функций в государственном управлении
16086. Административная юстиция, теория, история, перспективы 1.58 MB
  Старилов Ю.Н. Административная юстиция. Теория история перспективы. – М.: Издательство НОРМА Издательская группа НОРМА – ИНФРА М 2001 – 304 с. ББК 67.401 С77 Сведения об авторе: Старилов Юрий Николаевич – доктор юридических наук профессор Воронежского государст
16087. Налоговая полиция, вчера, сегодня, завтра 955 KB
  Вячеслав Солтаганов налоговая полиция вчера сегодня, завтра МОСКВА АНО ИЗДАТЕЛЬСКИЙ ДОМ НП ИЗДАТЕЛЬСКИЙ ДОМ ДАШКОВ И К Солтаганов В. Ф. Налоговая полиция: вчера сегодня С 60 завтра. М.: АНО Издательский Дом НП Издат...