Математическое обеспечение комплекса задач «Оценка эффективности работы военно-медицинского учреждения»

ВВЕДЕНИЕ
Данный дипломный проект (ДП) выполнен в соответствии с заданием и приказом на дипломное проектирование и является частью комплексного проекта распределенного интеллектуального синергетического комплекса (РИСК-2).
Целью настоящего дипломного проекта является анализ и обоснование выбора архитектуры распределенного информационно-справочного комплекса для медицинских учреждений и разработка математического и программного обеспечения для его подсистем. Проектирование РИСК производится силами СКБ-2 кафедры СА и ПО АСУ МИРЭА последовательно в течение нескольких лет. В качестве медицинского учреждения выступает Главный Военный Клинический Госпиталь им. Бурденко (ГВКГ).
В 1998-1999 учебном году студентами 6-го курса разработаны комплексы задач (КЗ) по платным медицинским услугам, электронного документооборота, распознаванию болезней печени, оценки эффективности функционирования медицинского учреждения и др. прикладные системы. Эти разработки представляют комплексный дипломный проект (КДП) СКБ-2.
В процессе выполнения данного КДП решены несколько текущих задач по развитию РИСК-2:
* системный анализ РИСК, рассмотрение направлений и этапов его создания; организация взаимодействия исполнителей на текущем этапе и анализ места частной задачи проекта в общей работе;
* разработка МО и ПО по основной теме ДП;
* создание (во взаимодействии с другими членами СКБ) прикладных программных систем по курсам «Гражданская оборона», «Экология и охрана труда» и «Экономика» по заданиям, выданным соответствующими кафедрами МИРЭА;
* оценка экономической эффективности проекта и исследование перспектив развития РИСК 2.
ГЛАВА 1. СИСТЕМНЫЙ АНАЛИЗ И СИНТЕЗ РИСК II
1.1. Анализ замысла, целей, направлений и этапов разработки РИСК II
1.1.1. Замысел и цели разработки РИСК II
Последнее десятилетие происходит интенсивное развитие вычислительной техники (ВТ). С каждым следующим днем мы получаем возможность использовать ВТ по своей производительности превосходящую ту, которая была вчера, а по стоимости практически такую же, а то может быть и дешевле.
Наибольшее распространение ВТ получает в тех областях, где от человека требуется внимательность, точность, аккуратность и, в некоторых случаях, быстрота реакции или принятия решения. Это может быть, например, какая-нибудь область, связанная с запуском и управлением полетом спутников, ракетами ПВО, а может - обыкновенная бухгалтерия, банковские операции.
Замысел разработки РИСК II заключается в автоматизации деятельности медицинского персонала военно-медицинских учреждений МО РФ.
Целью разработки РИСК II является создание распределенных информационно-справочных комплексов, входящих в состав АСУ Главного Военного Клинического Госпиталя (ГВКГ) им. акад. Н.Н. Бурденко, проектируемой рамках ОКР "Тонус".
1.1.2. Направления и этапы разработки РИСК II
Основными направлениями разработки являются:
1. Разработка архитектуры РИСК II
2. Разработка математического обеспечения (МО) и специального программного обеспечения (СПО) прикладных задач.
Учитывая, что автоматизации подлежит большое количество задач, разработка РИСК II ведется поэтапно, в соответствии с этапами разработки АСУ ГВКГ в ОКР "Тонус". Разработка данного КДП совпадает с II этапом создания АСУ ГВКГ.
1.1.3. Исследование требований заказчика
Настоящий дипломный проект является составной частью комплексного дипломного проекта (КДП) "Разработка распределенного информационно-справочного комплекса медицинских учреждений (РИСК II)", выполняемого группой дипломников, объединенных в студенческое конструкторское бюро (СКБ 2).
На данном этапе в КДП требовалось разработать следующие комплексные задачи:
1. Комплекс задач (КЗ) “Математическое обеспечение оценки эффективности работы госпиталя”.
2. КЗ "Математическое обеспечение информационного обеспечения автоматизированного рабочего места специалиста медицинской части".
3. КЗ " Математическое обеспечение идентификации медицинских объектов методом главных компонент".
4. КЗ "Математическое обеспечение автоматизации бухгалтерского учета торговых предприятий".
По каждой комплексной задаче заказчиком были предъявлены требования к составу программных и технических средств, применяемых в процессе решения формулированных задач, а также к функциональным характеристикам, режимам функционирования и условиям эксплуатации программно-технических комплексов с учетом выбранной архитектуры.
Кроме того, в состав КДП решаются прикладные задачи по учебным курсам экономики, охраны труда и гражданской обороны. По этим задачам также были предъявлены требования к составу программных и технических средств, функциональным характеристикам, режимам решения, содержащиеся в ТЗ на эти задачи.
1.1.4. Анализ возможностей разработчика
На основе анализа всех предъявленных требований выделим основные технические и программные возможности разработчика:
1). Программное обеспечение для ГВКГ по требованию заказчика, должно быть реализовано на ПЭВМ IBM PC с операционной системой Windows 95 (или Windows NT 4.0 Workstation), обладающей возможностью подключения в локальную сеть.
2). Программное обеспечение обучающей системы по курсу "Экология и охрана труда" реализовано на ПЭВМ IBM PC с операционной системой MS DOS 6.0 для автономного режима функционирования.
3). Программное обеспечение системы по курсу "Экономика" должно быть реализовано на ПЭВМ IBM PC с операционной системой Windows 95 или Windows NT.
1.2. Синтез и обоснование проектных решений
1.2.1. Архитектура РИСК II
Использование в работе лечебного учреждения средств вычислительной техники является сегодня естественной необходимостью, в значительной мере определяющей уровень медицинской науки и непосредственно оказывающей влияние на диагностику заболеваний пациентов.
Крупным медицинским учреждением Московского военного округа и всей Российской армии является Главный Военный Клинический Госпиталь им. акад. Н.Н. Бурденко. Он курирует работу других госпиталей, таких как окружной военный госпиталь в г. Подольске, гарнизонные госпитали в г. Красногорске, Москве и т.д., а также ряда центральных поликлиник МО РФ.
По своей структуре госпиталь им. академика Бурденко является сложным многопрофильным лечебным учреждением, обеспечивающим как амбулаторное, так и стационарное обследование и лечение пациентов. В состав госпиталя входят:
1) основные лечебные отделения: операционное, переливания крови, терапевтическое, интенсивной терапии, кардиологии, гастроэнтерологии и др.;
2) вспомогательные лечебные отделения: приемное, лечебной физкультуры, физиотерапии, стоматологии и другие;
3) лаборатории: диагностики, биологическая, клиническая и другие;
4) административные и обеспечивающие подразделения: отдел материально-технического снабжения, отдел кадров, отделение медицинской статистики, аптека, склад, отдел гражданской обороны, отдел охраны труда, бухгалтерия, экономический отдел и другие.
За основу при определении структуры госпитальной информационной системы, состава и содержания базы данных, состава программных средств и подсистем необходимо положить комплекс задач, обеспечивающих лечебный процесс в отделениях. Система должна обеспечивать выполнение следующих функций:
- автоматизация выполнения расчетов и проведения анализа полученных результатов функциональных, лабораторных и рентгенологических исследований, а также доведение результатов до лечащих врачей;
- получение справок о наличии лекарственных средств и медицинского оборудования;
- передача заявок на питание больных и лекарственные средства;
- автоматизированное формирование и выдача отчетных и справочных документов;
- планирование проведения консультаций и исследований, контроль их исполнения;
- обеспечение обмена информации между лечебными и обеспечивающими подразделениями госпиталя.
Кроме этого госпитальная информационная система должна иметь программные средства, обеспечивающие печатание, редактирование, хранение текстовой и графической информации, статистическую обработку данных, получение справок по медицинской литературе, а также результатов анализа деятельности лечебных отделений и ряд других.
При автоматизации лечебного процесса в отделениях многопрофильного медицинского учреждения необходимо рассматривать его как сложный комплекс различных методов получения информации о больном, ее анализе и принятия решения о лечебном воздействии на основе этой информации.
Он требует четкого взаимодействия всех обеспечивающих его подразделений. При этом на всех этапах лечения должен создаваться машинный документ, отражающий динамику состояния больного, методы его лечения и являющийся частью автоматизированной истории болезни. Результаты каждого этапа должны вводиться в ЭВМ.
Внедрение такой системы позволит повысить качество документации, уровень обследования и диагностики лечения, а также создать базу данных обо всех лечившихся в лечебном учреждении.
На основе такой структуры ГВКГ, была разработана архитектура РИСК II, приведенная на рис.1.1.
На данном этапе, автоматизации подлежит деятельность медицинской части, 7-го неврологического отделения и бухгалтерии госпиталя.
В настоящем КДП этой проблеме посвящена глава 2, в которой проводится разработка математического обеспечения комплекса задач "Оценка эффективности функционирования военно-медицинского учреждения" для медицинской части.
1.2.2. Организация взаимодействия исполнителей
На основе разработанной архитектуры РИСК II и требованиями Заказчика на текущем этапе общий объем работ был распределен между исполнителями в соответствии с делением на классы задач, стоявших перед разработчиками. Работа над проектом проводилась разработчиками СКБ 2 в составе:
Чихирев Р.Б. - разработка модуля статистической обработки и анализа данных КЗ "Оценка эффективности работы военного госпиталя" - главный конструктор, ответственный за комплексную задачу по курсу “Экология и охрана труда”;
Базин В.В.. - разработка КЗ "Болезни печени" - первый заместитель главного конструктора, ответственный за комплексную задачу по курсу "Гражданская оборона";
Баймеев Р.Х. - заместитель главного консруктора по задаче по курсу “Экономика”;
Сачков А.В. - помошник главного конструктора.
Взаимодействие между исполнителями по решаемым задачам осуществлялась в соответствии с приведенной на рис. 1.2 матрицей взаимодействия.
На разработку комплексного дипломного проекта было выдано техническое задание (ТЗ) (Приложение 1), в котором автору предлагалось решить следующие комплексные задачи:
1. Провести системный анализ и синтез РИСК II.
2. Разработать математическое и программное обеспечение статистической обработки и анализа данных для комплекса задач "Оценка эффективности работы военного госпиталя".
3. Разработать автоматизированную обучающую систему по курсу "Гражданская оборона".
4. Разработать информационное обеспечение для автоматизированной обучающей системы по курсу "Экология и охрана труда".
5. Разработать и отладить программное обеспечение для системы оценки финансового состояния предприятия по курсу "Экономика".
Учитывая вышеизложенное, в соответствии с выданным на разработку техническим заданием, основные требования на разработку дипломного проекта являются следующими:
1) Провести обследование ГКВГ им. Бурденко и выявить ряд первоочередных задач, требующих автоматизации решения.
2) Для ПЭВМ IBM PC AT в среде Windows 95 или Windows NT Workstation 4.0 разработать математическое и программное обеспечение статистической обработки и анализа данных для комплекса задач "Оценка эффективности работы военного госпиталя".
3) Разработать рекомендации по защите оператора и ПЭВМ от поражающих факторов ядерного взрыва и землетрясения по курсу "Гражданская оборона".
4) Для ПЭВМ IBM PC AT в среде MS DOS разработать обучающую систему по курсу "Экология и охрана труда", представляющую собой компьютерный лабораторный практикум по требуемым разделам предмета и состоит из информационной и контролирующей части, которые управляются сценарием обучения.
5) Разработать программное обеспечение для системы анализа финансового состояния предприятия по курсу "Экономика".
6) В дипломном проекте необходимо провести технико-экономическую оценку разработки и определить перспективы развития РИСК II.
7) Программные продукты должны обеспечивать реализацию функций, заданных в ТЗ на эти средства.
8) На программные продукты должна быть разработана пользовательская документация в составе:
- руководство системного программиста;
- руководство программиста;
- руководство оператора..
1.2.3. Обоснование выбора программных средств
1.2.3.1. Операционная среда
Операционные среды: MS DOS 5.0., Windows 3.1 (или Windows for Workgroups 3.11), Windows 95 (или Windows NT Workstation 4.0) определена требованиями Заказчика, вытекающими из проектных работ, реализуемых в рамках выполнения ОКР “Тонус”.
1.2.3.2. Инструментальные средства разработки
В качестве средств разработки специального программного обеспечения была выбрана система Borland C++ Builder 1.0 Client/Server. Выбор обуславливается тем, что с его помощью можно в кратчайшие сроки разработать быстрое, компактное и полноценное Windows-приложение, работающее с базами данных.
Для разработки программного обеспечения по курсу "Экономика" был выбран MSM 4.3, так как программа должна будет работать под операционными системами Windows 95.
Для разработки программного обеспечения по курсу "Экология и охрана труда" был выбран Borland C++ 5.0., так как программа должна будет работать под операционной системой MS DOS 5.0 по требованию кафедры.
Для разработки программного обеспечения по курсу "Гражданская оборона" был выбран Visual Basic 4.0., так как программа должна будет работать под операционной системой Windows 95 по требованию кафедры.
Для связи с физическими таблицами используется специальная программа Borland Database Engine 4.0.
Полностью структура программного обеспечения используемого при выполнении КДП РИСК II представлена на рис.1.3.

Рисунок. 1.1. Архитектура РИСК II.

Рисунок 1.2. Матрица взаимодействия исполнителей

Рисунок 1.3. Структура программного обеспечения РИСК II.

Выводы по главе 1
В данной главе содержатся результаты системного анализа и синтеза РИСК II, а именно:
* Проведен анализ замысла, целей, направлений и этапов разработки РИСК II;
* Проведен анализ требований заказчика и возможностей разработчика. результаты обследования объектов заказчика:
* Разработана архитектура РИСК II, представляющая собой совокупность территориально удаленных объектов (медицинских учреждений), взаимодействующих между собой через систему обмена данными. Внутри объектов взаимодействие осуществляется посредством локальных вычислительных сетей. Для разработки комплекса средств автоматизации интерес представляет ЛВС госпиталя.
* На основе разработанной архитектуры РИСК II и требований Заказчика на данном этапе было организовано взаимодействие исполнителей для решения поставленных задач.
* Проведено обоснование использования программных средств, необходимых для разработки и эксплуатации задач.
ГЛАВА 2. МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ КОМПЛЕКСА ЗАДАЧ "ОЦЕНКА ЭФФЕКТИВНОСТИ ФУНКЦИОНИРОВАНИЯ ВОЕННО-МЕДИЦИНСКОГО УЧРЕЖДЕНИЯ”
2.1 Постановка задачи и её спецификация
Основной целью разработки КЗ “Оценка эффективности работы военного госпиталя методом главных компонент” является автоматизация обработки статистических данных, представляющих собой показатели функционирования подразделений ГВКГ имени академика Н.Н. Бурденко.
Для повышения эффективности использования коечного фонда требуется объективная оценка показателей работы отделений и центров госпиталя. В этой связи комплекс задач “Оценка эффективности функционирования военно-медицинского учреждения”, должен позволять по совокупности показателей, характеризующих различные аспекты функционирования отделений медицинского учреждения, определить сравнительную эффективность их работы. Одним из приемлемых и достаточно простых в реализации математических методов решения поставленной задачи является метод главных компонент (МГК).
Метод главных компонент, сущность которого состоит в сведении множества показателей к нескольким суммарным интегральным оценкам, в данном случае обладает существенными преимуществами [3] по сравнению с другими статистическими методами, такими как дисперсионный, регрессионный и факторный анализы [7,9].
Однако, недостаток метода главных компонент состоит в сложности нахождения собственных чисел и собственных векторов матриц большой размерности [3,6] при ручной обработке которых, невозможно получить достаточно точные результаты за приемлемое время, поэтому необходима ее автоматизация с применением ЭВМ.
Для достижения цели проекта требуется решить следующие задачи:
- изучить теоретические основы метода главных компонент;
- разработать математическую модель работы отделений учреждения, т. е. выделить исследуемые и измеряемые параметры, установить зависимости между ними и дать математическую постановку задачи;
- выбрать метод решения задачи;
- разработать алгоритм и программу, реализующей этот метод.
2.1.1 Метод главных компонент
Объекты изучения в прикладных областях могут быть всесторонне охарактеризованы только при помощи целого набора признаков. При характеристике объекта исследования случайными многомерными признаками строится корреляционная матрица, элементы которой учитывают тесноту линейной стохастической связи. Однако при большом числе признаков характеристика выявленных связей становится труднообозримой задачей. Возникает потребность в описании объектов меньшим числом обобщенных показателей, например факторами или главными компонентами. Главные компоненты являются более удобными укрупненными показателями. Они отражают внутренние объективно существующие закономерности, которые не поддаются непосредственному наблюдению.
При корреляционном или регрессионном анализе на основе полученной корреляционной матрицы строятся, например, уравнения регрессии, связывающие факторные признаки с результативными. Сами уравнения регрессии являются конечной целью исследования. По ним проводится содержательная интерпретация полученных результатов и принимаются соответствующие решения. При использовании метода главных компонент корреляционная матрица используется как исходная ступень для дальнейшего анализа наблюдаемых ранее значений признаков. Появляется возможность извлечения дополнительной информации об изучаемом процессе или объекте.
2.1.2 Задачи решаемые методом главных компонент
С помощью метода главных компонент можно решить четыре основных типа задач.
Первая задача - отыскание скрытых, но объективно существующих закономерностей, определяемых воздействием внутренних и внешних причин.
Вторая задача - описание изучаемого процесса числом главных компонент m, значительно меньшим, чем число первоначально взятых признаков n. Главные компоненты адекватно отражают исходную информацию в более компактной форме. Выделенные главные компоненты содержат больше информации, чем непосредственно замеряемые признаки.
Третья задача - выявление и изучение стохастической связи признаков с главными компонентами. Выявление признаков, наиболее тесно связанных с данной главной компонентой., что позволяет принять научно обоснованное управляющее воздействие, способствующее повышению эффективности функционирования изучаемого процесса.
Существует возможность использования полученных данных для решения четвертой задачи, которая заключается в прогнозировании хода развития процесса на основе уравнения регрессии, построенного по полученным главным компонентам.
Негативной стороной метода является сложность математического аппарата, требующая знания как теории вероятностей и математической статистики, так и линейной алгебры и математического обеспечения ЭВМ. Однако, в настоящее время, в связи с большим прогрессом в области вычислительной техники и программного обеспечения ЭВМ, большинство вычислительных трудностей относительно легко разрешаются.
2.1.3 Анализ условий допущений и ограничений задачи
В ходе алгоритма нахождения главных компонент требуется найти собственные векторы и собственные значения матрицы парных корреляций. На настоящий момент наиболее быстрыми являются алгоритмы QR разложения [2,5] и их частные случаи. В частности, в связи с тем, что получающиеся в ходе исследования матрицы являются симметричными (симметрическими), то для нахождения собственных чисел и собственных векторов удобен относительно простой метод Якоби [6].
2.2. Обоснование проектных решений
2.2.1. Математическая модель метода главных компонент
Известно, что истинная величина изучаемого объекта содержит по крайней мере два компонента: истинную характеристику оцениваемого явления и ошибку измерения, которая зависит от большого числа причин. Если измерения проводятся в таких областях, как экономика, биология, медицина, психология, то добавляется третья составляющая, зависящая от вариабельности изучаемого признака, индивида или объекта. Таким образом, зарегистрированное значение может быть представлено в виде суммы , где - зарегистрированное значение изменяемого признака н i-ого объекта исследования, - истинное значение (математическое ожидание) измеряемого признака у i - ого индивида, - вариативное значение изменяемого признака i - ого индивида, - ошибка измерения при определении j - ого признака у i - ого объекта исследования.
В основу метода главных компонент положена линейная модель. Если N - число исследуемых объектов, n - число признаков, то математическая модель принимает вид:
, (2.1)
где r,j =1,2,...n; f - r-я главная компонента; - вес r-ой компоненты в j-ой переменной; -нормированное значение j-ого признака, полученное из эксперимента, на основе наблюдения. В матричной форме y=Af.
Для исследования начальными данными являются ковариации или коэффициенты корреляции. В дальнейшем будем использовать коэффициенты корреляции.
Для установления связи между главными компонентами и коэффициентами корреляции перепишем формулу для любого i в виде:
(2.2)
Вариабельность, зависящая от особенностей объектов, является причиной разброса показаний признаков от объекта к объекту относительно математического ожидания. Полная дисперсия выражается через дисперсию главных компонент, а так как дисперсии нормированных величин равны единице, то можно записать:
.(2.3)
Поскольку главные компоненты ортогональны, то выражение упрощается . Слева записана дисперсия, а справа доли полной дисперсии, относящиеся к соответствующим главным компонентам. Дисперсия является характеристикой изменчивости случайной величины, её отклонений от среднего значения. Полный вклад r-ого факторов дисперсию всех n признаков определяет ту долю общей дисперсии, которую данная главная компонента объясняет.
Этот вклад вычисляется по формуле:
(2.4)
Различают два вида компонент, общие и генеральные. Генеральные главные компоненты существенно связаны со всеми признаками задачи, общие - более чем с одним.
Несмотря на то, что вместо признаков получено такое же количество главных компонент, вклад в общую дисперсию большинства оказывается небольшим. Можно исключить из рассмотрения те компоненты, вклад которых мал.
Итак, при проведении эксперимента мы получаем результаты в виде матрицы наблюдаемых величин ХN,n где N - число наблюдаемых объектов, n - число измеряемых признаков.
Элементы данной матрицы центрируются и нормируются, и мы получаем матрицу Y.
Выясним, что представляют собой весовые коэффициенты между признаками и главными компонентами. Для этого умножим на первую главную компоненту и получим:
. (2.5)
Чтобы получит коэффициент корреляции между j-ым признаком и первой главной компонентой, просуммируем левую часть по всем N наблюдениям и разделим сумму на число наблюдений N, тогда правая часть примет вид:
. (2.6)
Учитывая, что , перепишем выражение:
, (2.7)
где -коэффициент корреляции между j-ым признаком и r-й главной компонентой, - коэффициент корреляции между r-й и первой главной компонентой, - весовые коэффициенты, которые называются в факторном анализе коэффициентами отображения. Поскольку в методе главных компонент компоненты не коррелированны между собой, можно записать =0 (r?k), поэтому =. И в общем случае в методе главных компонент можно написать =.
Матрица наблюденных коэффициентов корреляции может быть представлена так:
R=YY?, (2.8)
где Y - матрица нормированных значений признаков, Y? - транспонированная матрица.
Коэффициент корреляции характеризует связь между двумя случайными величинами Хj и Хr в случае линейной корреляции между ними. Коэффициент корреляции представляет эмпирический первый основной смешанный момент. Для любых признаков и случайных величин , (2.9)
Среднее значение случайной величины Хj определяется по формуле
, (2.10)
а среднеквадратическое отклонение
. (2.11)
В результате преобразований корреляционной матрицы можно получить y=U?1/2f, где ?-матрица собственных значений матрицы R, U - матрица из собственных векторов R. Отсюда можно заключить, что искомая матрица А может быть определена как А=U?1/2, или, соответственно для столбцов .
Вклад данного вектора аr в общую дисперсию определится по формуле
. (2.12)
2.2.2. Геометрическая интерпретация метода главных компонент
Геометрической интерпретацией метода главных компонент служит переход к новой системе координат, где осями служат главные компоненты распределения. [3,11].
Рассмотрим простейший двумерный случай. Она представлена на Рис 2.1.

Рис. 2.1. Геометрическая интерпретация метода главных компоент для двумерного случая
2.2.3 Блок схема алгоритма
Блок схема алгоритма метода главных компонент приведена на рисунке 2.2.

Рис 2.2. Блок схема алгоритма метода главных компонент
2.2.4 Обратная факторная задача
Как было указано выше, каждая главная компонента даёт некую новую общую характеристику всем изучаемым объектам. Причем каждая компонента является функцией особенностей каждого из изучаемых объектов. Часто нас интересует случай, когда нас интересуют качества объектов, связанные с одной или несколькими главными компонентами. Если было бы возможно получить значение компоненты для каждого из рассматриваемых пациентов, то их можно было бы ранжировать и классифицировать по такой важной интегральной особенности, как тяжесть ранения.
Обратимся к модели метода главных компонент. Развернём равенство , для j-ого признака:
(2.13)
Выразим теперь значения главных компонент через значения признаков. Для r-ой компоненты:
. (2.14)
Предложенный метод не является единственным, зато он легко программируется на ЭВМ.
2.2.5 Проблема собственных чисел и собственных значений
При решении задачи методом главных компонент возникает проблема вычисления собственных чисел и собственных векторов. В соответствующей литературе, посвященной методу главных компонент [4], для решения этой проблемы рекомендуется воспользоваться стандартными подпрограммами и библиотеками, входящими в поставку программного обеспечения ЭВМ. Однако, в связи с грандиозным прогрессом в области вычислительной техники, развитием персональных ЭВМ, и переориентацией рынка программных средств, данные рекомендации теряют актуальность. Очевидно так же, что и при написании этой методической литературы, данные рекомендации не являлись идеальными, так как при использовании стандартных подпрограмм никак не используются свойства матриц, получающихся при расчетах методом главных компонент.
2.2.6 Методы нахождения собственных чисел и собственных векторов
2.2.6.1 Постановка задачи
Собственным значением квадратной матрицы А называется такое число ?, что для некоторого ненулевого вектора х имеет место равенство Ах=?х. Любой ненулевой вектор х, удовлетворяющий этому равенству, называется собственным вектором матрицы А, соответствующим собственному значению ?. Все собственные векторы матрицы определены с точностью до числового множителя. Множество всех собственных значений матрицы А называется спектром матрицы А.
Собственные значения ? матрицы А являются корнями алгебраического уравнения:
(2.16)
которое называется характеристическим уравнением матрицы А.
Известно, что характеристическое уравнение имеет в области комплексных чисел ровно m корней ?1, ?2, ..., ?m (с учетом их кратности). Таким образом каждая квадратная матрица А порядка m обладает набором из m собственных значений ?1, ?2, ..., ?m.
Если матрица А симметричная, то все её собственные значения являются вещественными числами. В противном случае, для несимметричных матриц возможно наличие комплексных собственных значений вида ?=??i? с ненулевой мнимой частью. В этом случае собственным значением матрицы будет и комплексно-сопряженное число.
Численные методы решения проблемы собственных значений до конца 40-х годов, сводились, в основном, к решению характеристического уравнения. При реализации такого подхода, основные усилия были направлены на разработку эффективных методов быстрого вычисления коэффициентов характеристического уравнения. Такие методы имеют названия прямых. Популярным методом этого типа является метод Данилевского [10].
Указанный подход становится неудовлетворительным при вычислении собственных значений матриц, имеющих порядок m в несколько десятков (и тем более сотен). В частности, одним из недостатков является так же то, что точность вычисления корней многочлена высокой степени данным методом чрезвычайно чувствительна к погрешности в коэффициентах, и на этапе вычисления последних может быть в значительной степени потеряна информация о собственных значениях матрицы.
С появлением ЭВМ широкое распространение получили интерполяционные методы решения проблемы собственных значений, не использующие вычисление характеристического многочлена. В настоящее время эти методы почти полностью вытеснили прямые.
2.2.6.2 QR разложение матрицы
В настоящее время лучшими методами вычисления всех собственных значений квадратных заполненных матриц общего вида являются алгоритмы, основанные на QR разложении, которое позволяет получить представление исходной матрицы А в виде произведения ортогональной матрицы Q на верхнюю треугольную матрицу R. Планарные (плоские) вращения (они же вращения Якоби или Гивенса) представляют собой наиболее простое средство получения искомого ортогонального разложения. Метод планарных вращений может быть естественным образом обобщен для получения более удобных форм ортогональных вращений, осуществляемых в пространстве с произвольным числом измерений. Такими обобщениями является алгоритм Хаусхольдера (метод отражений) и модифицированный алгоритм Грама - Шмидта [1,8].
Очевидно, что для полного разложения, независимо от применяемого алгоритма, требуется некая последовательность ортогональных преобразований, которые могут быть представлены матрицами Q0,Q1,...,Qm. Таким образом, полученная в результате матрица примет вид Q= Q0,Q1,...,Qm.
2.2.6.3 Метод вращений ( метод Гивенса)
Отдельное планарное вращение, применяемое к матрице А, эквивалентно умножению её на матрицу вида:
(2.15)
где с=cos?, s=sin?, ? - угол вращения. Таким образом, в процессе преобразования матрицы изменяются только её элементы строк i и l.
Предположим, что в результате проведенных преобразований расположенные ниже главной диагонали элементы строк с 1 по l матрицы А стали равными нулю. Тогда для обращения в нуль расположенных ниже главной диагонали элементов (l+1) -й строки матрицы А осуществляется её вращение последовательно с первой, второй и последующими строками. Этот процесс продолжается до тех пор, пока все расположенные ниже главной диагонали элементы (l+1) -й строки не станут равными нулю. То есть, пока не получим треугольную матрицу вида:
(2.16)
Назовём полученную матрицу матрицей R, она связана с исходной матрицей равенством R=ТА, где Т=Тm-1,m...T
2.2.6.4 Метод Якоби
Метод Якоби является частным случаем метода Гивенса, для симметрической матрицы А, следовательно вычисление всех собственных значений и собственных векторов вещественной симметрической матрицы можно свести к отысканию такой ортогональной матрицы Т, для которой произведение D = ТTАT представляет диагональную матрицу, причем столбцы матрицы Т будут являться соответствующими собственными векторами матрицы А. Матрица Т находится как предел бесконечного произведения элементарных матриц вращений, каждая из которых имеет вид
(2.17)
где с=cos?, s=sin?, ? - угол вращения.
Если необходимо обратить в нуль аik матрицы А, то соs? и sin? нужно выбрать по формулам
,
, (2.18)

Тогда получим матрицу D = ТTmATm с измененными i-м и k-м столбцами и строками:
bii=cos2?aii+sin2?akk+2cos?sin?aik,
bkk=sin2?aii+cos2?akk?2cos?sin?aik,
bik=bki=0, (2.19)
bij=bji=cos?aji+sin?ajk
bkj=bjk=sin?aji?sin?ajk
j=1,...n, j?i, j?k,
bji=aji,
в остальных случаях.
Отметим, что выполняется соотношение b2ii+b2kk=a2ii+a2kk+2a2ik, т.е. сумма квадратов диагональных элементов увеличивается.
Соответственно на ту же величину уменьшается сумма квадратов внедиагональных элементов, откуда и следует сходимость к диагональной матрице. Элементы, которые однажды обратились в нуль, при последующих шагах снова могут стать ненулевыми.
2.2.6.5 Приведение матрицы собственных чисел к виду необходимому для метода главных компонент
Для метода главных компонент необходимо, чтобы собственные число были расположены в порядке убывания. Матрица собственных чисел, получающаяся в методе Якоби, не выполняет данное требование. Для получения искомой матрицы переставим строки в матрицах ? и А (помним что ?=ТА) так чтобы max{?} было в первом столбце, получив соответственно матрицы ?* и А*. Теперь для того чтобы матрица ?* опять стала диагональной требуется применить планарное вращение Тij (где i,j переставленные строки). Получаем ?*= ТijТА*.
Применяя подобные перестановки и планарные вращения далее, легко получить требуемую матрицу, у которой |?1|>|?2|>...|?m|.
2.2.6.6. Алгоритм метода Якоби
Блок схема алгоритма метода Якоби приведена на Рис. 2.3.

Рис. 2.3. Блок схема алгоритма метода Якоби
2.2.7. Применение метода главных компонент в задаче оценки эффективности функционирования военно-медицинского учреждения
Исходные данные для анализа представляют собой таблицу собранных статистических данных, объектами в которой являются отделения ГВКГ, а параметрами - установленные ГВМУ показатели для оценки эффективности использования коечного фонда (Таблица 2.1).
В методических рекомендациях Министерства здравоохранения РФ даются следующие статистические показатели использования коечного фонда госпиталя (лечебного отделения):
1. Среднее число развернутых коек:
.
2. Среднее число занятых коек:
.
3. Показатель использования плановой коечной мощности отделения (%):

4. Показатель использования фактической коечной мощности отделения (%):

5. Среднее число дней занятости койки:

6. Оборот койки:

7. Средняя длительность пребывания больного на койке:
.
Совокупность перечисленных показателей (феноменологически наблюдаемых признаков) отражает качество функционирования лечебного учреждения как системы. Нельзя не отметить, что традиционная оценка качества функционирования лечебных учреждений затруднена не только чрезмерным обилием основных показателей, но и их сильной корреляцией. Именно предпосылки подобного рода – множественность и взаимозависимость показателей – и предопределяют необходимость поиска показателей качества использования коечного фонда на основе метода главных компонент. При этом из имеющихся показателей следует исключить те, о которых мы заранее знаем, что они линейно зависимы. Например, параметры "Количество проведенных койко-дней" и "Среднее число занятых коек вычисляются друг из друга и, следовательно, не будут одновременно использоваться нами в анализе. Подготовив таким образом данные, их можно подать на вход алгоритма метода главных компонент.
Используя вышеописанный массив показателей, мы рассчитываем матрицу парных корреляций (в таблице 2.2), которая показывает тесноту линейной стохастической связи между признаками исследуемых объектов. На ее основе, используя изложенный выше алгоритм, получаем вклады главных компонент в общую дисперсию процесса (таблица 2.3).
Доля дисперсии, объясняемой извлеченными первыми тремя главными компонентами, составляет более 84%. Таким образом, общий вклад остальных четырех компонент составляет менее 16%, что является не значительным и их можно не учитывать.
Характер вклада главных компонент в общую дисперсию процесса представлен в таблице 2.4.
Интерпретация для извлеченных нами главных компонент должны удовлетворять, по крайней мере, двум свойствам:
- связь в реальной жизни данного фактора с измеряемыми параметрами должна соответствовать весовым коэффициентам, которые получены нами в таблице 2.4;
- факторы должны быть некоррелированы, т.е. интерпретируя главные компоненты мы должны подразумевать их независимость.
Наиболее существенный вклад в общую дисперсию имеет первая главная компонента. Она связана положительными весами со всеми признаками, кроме показателя «Оборот койки фактический за период». На последний показатель главная компонента влияет меньше всего. Если бы не этот факт, можно было бы свести все показатели утвержденные ГВМУ к одному интегрированному. Однако, первая главная компонента не позволяет обобщить все характеристики процесса функционирования коечного фонда отделения.
Данную главную компоненту было решено интерпретировать как «реализованная мощность» отделения.
Далее остановимся на второй главной компоненте. Как видно из таблицы 2.11, данная компонента существенно увеличивает средний койко-день, уменьшая оборот койки и количество лечившихся, при этом практически не связана с количеством штатных коек и наличием. Это позволяет нам интерпретировать ее как оборачиваемость коечного фонда отделения.
Третья главная компонента увеличивает использование фактической мощности, оборот койки фактический за период и использование плановой мощности, одновременно влияя в сторону уменьшения на среднее число развернутых коек и количество штатных коек. Данный фактор, на мой взгляд, более всего отвечает понятию «эффективность использования коечного фонда».
Первый внутренний фактор определен нами первоначально как фактор мощности отделения. Это дало возможность говорить об эффективности использования коечного фонда. Второй внутренний фактор назван фактором мощности лечебного учреждения.
Рассмотрим фактор – эффективность использования коечного фонда. С ним коррелирует одна часть показателей положительно, другая часть – отрицательно. Очевидно, можно говорить о двух сторонах использования коечного фонда. Позитивная сторона предполагает использование основных источников эффективности, что проявляется в увеличении степени занятости штатного коечного фонда, увеличении оборота койки, т. е. интенсификации нагрузки на каждую койку, а также в возрастании среднего числа дней использования койки в году. В свою очередь каждый показатель содержит позитивные и негативные стороны. Превышение числа развернутых коек над штатными и большая длительность лечения больных – явления отрицательные. Отрицательная сторона использования коечного фонда состоит в привлечении дополнительных источников удовлетворения потребностей в госпитализации – развертывании сверхштатных коек и определении более длительного срока лечения больных. Оценивая корреляцию данного внутреннего фактора и показателей, с учетом изложенного можно предположить, что увеличение эффективности лечебного учреждения связано с возрастанием позитивных сторон использования коечного фонда и снижением негативных.
Второй внутренний фактор – мощность лечебного учреждения. Он также биполярен, имеет положительные и отрицательные связи с исходными показателями. Очевидно, можно говорить о двух резервах мощности лечебных учреждений. Внутренний фактор положительно коррелирует с показателями развертывания штатных коек, их занятости и оборота, т. е. нагрузки на каждую койку. Показатели отражают непосредственные основные резервы мощности лечебных учреждений. Положительная связь с ними второго внутреннего фактора говорит о том, что с увеличением мощности лечебного учреждения возрастает степень использования основных резервов.
Второй внутренний фактор имеет отрицательную связь с показателями средней длительности лечения больных и среднего числа дней использования койки. Эти показатели отражают дополнительные, косвенные резервы мощности лечебного учреждения. Чем больше мощность последнего, тем меньше присутствуют в нем косвенные резервы повышения мощности.
Полученные коэффициенты могут быть использованы для решения обратной факторной задачи с целью определения индекса эффективности использования коечного фонда или реализованной мощности лечебного учреждения. Результаты обратного факторного анализа приведены в таблицах 2.7.-2.9. Данные таблицы представляют собой отделения госпиталя, ранжированные по разным главным компонентам, характеризующим различные некоррелированные внутренние факторы работы отделений.
Предложенная методика синтеза индекса эффективности и реализованной мощности лечебного учреждения как показателей качества его функционирования поможет органам управления здравоохранением дать правильные оценки использованию коечного фонда в процессе принятия решений по управлению сетью лечебных учреждений.
2.3 Программная реализация
В данном разделе описывается программа, реализующая изложенные выше методы для обработки статистических данных, полученных по результатам функционирования отделений ГВКГ.
2.3.1 Выбор средств программирования
Для написания программы была выбрана интегрированная система программирования Borland C++ Builder [2.4] и объектноориентированный язык C++, так же использовался компилятор С++ 5.02 фирмы Borland и язык программирования С++ [5]. Эти средства позволяют создавать прикладные программы, предназначенные для работы на ПЭВМ IBM PC AT под управлением оболочки Windows 95 и более поздних версий, а так же операционной системы Windows NT и использующие общепринятые для Windows элементы пользовательского интерфейса. Программы такого типа в настоящее время признаны в качестве стандарта ПП, поскольку наиболее широко распространены, удобны для пользователей и не требуют долгого их обучения.
Предпочтение было отдано системе Borland C++ Builder благодаря тому, что она позволяет программисту очень быстро и удобно разрабатывать пользовательский интерфейс. Это свойство особенно ценно из-за того, что, как показывает практика, работа над интерфейсом занимает б(льшую часть (до 80%) времени создания ПП. Еще одним преимуществом выбранной системы является высокая (по сравнению со многими другими средствами программирования) эффективность генерируемого компилятором кода, что весьма существенно для данного ДП, т.к. в нем применяется метод, требующий большого количества вычислений.
2.3.2 Описание программного продукта
Программа оценки эффективности функционирования медицинского учреждения позволяет имеет следующие функциональные возможности:
* ввод входного массива статистических данных из файла в формате Excel 5.0;
* редактирование данных в таблице;
* работа с буфером обмена операционной системы;
* сохранение данных в файле формата MS Excel 5.0 ;
* нормирование данных;
* расчет корреляционной матрицы признаков объектов;
* расчет матрицы связей параметров объектов с главными компонентами;
* расчет вклада главных компонент в общую дисперсию;
* получение значений главных компонент для каждого объекта, по его признакам;
* формирование отчета о результатах расчетов в формате листа MS Excel 5.0;
* настройка параметров выводимого отчета.
2.3.3 Разработка программной документации
В документацию к ПП на КЗ “Оценка эффективности функционирования военно-медицинского учреждения” входят Программа и методика испытаний, Руководство системного программиста, Руководство программиста, Руководство оператора и тексты исходных модулей программы. Программная документация на КЗ “Оценка эффективности функционирования военно-медицинского учреждения” разработана в соответствии с требованиями ГОСТ 19.301-76, ГОСТ 19.503-79 и ГОСТ 19.504-79.
Эти документы приведены в приложении 2 к настоящему дипломному проекту.
2.3.4 Результаты опытной эксплуатации КЗ “Оценка эффективности функционирования военно-медицинского учреждения” и технические предложения по его развитию
Опытная эксплуатация разработанного МО КЗ и ПП показала, что он соответствует требованиям ТЗ на данный комплекс и решает поставленную перед ним задачу.
В большинстве случаев удаётся проинтерпретировать главные компоненты и построить на их базе требуемые оценки.
В ходе исследования КЗ “Оценка эффективности функционирования военно-медицинского учреждения” выяснилось, что если исходные данные слабо коррелированны, то при переходе от признаков к главным компонентам ожидаемого снижения размерности не происходит. Для устранения этого недостатка необходимо произвести новый анализ предметной области, и подобрать характеристики более адекватно описывающие суть явления.
Выявлены следующие недостатки КЗ (большинство из которых предполагалось заранее):
значительное время вычислений (до нескольких минут) в случае большого количества параметров, на оборудовании заказчика;
Для устранения вышеперечисленных недостатков требуется оптимизировать программный продукт под оборудование заказчика и повысить компьютерную грамотность медицинского персонала госпиталя.

Таблица 2.1. Исходные данные. Показатели функционирования отделений госпиталя
Таблица 2.2. Матрица парных корреляций показателей
Таблица 2.3. Вклад главных компонент в общую дисперсию процесса
Таблица 2.4. Характер связи главных компонент с показателями работы отделений
Таблица 2.5. Главные компоненты отделений, ранжированных по первой главной компоненте

Таблица 2.6. Главные компоненты отделений, ранжированных по второй главной компоненте

Таблица 2.7. Главные компоненты отделений, ранжированных по третьей главной компоненте

Таблица 2.8. Главные компоненты отделений, ранжированных по главной компоненте

Выводы по главе 2
В данной главе решены следующие задачи:
1. Выполнена постановка задачи на разработку КЗ “Оценка эффективности функционирования военно-медицинского учреждения”
2. Рассмотрен метод главных компонент как основной математический аппарат решения поставленной задачи и разработана математическая модель.
3. Разработано МО и ПО КЗ “Оценка эффективности функционирования военно-медицинского учреждения”.
4. Разработанный математический аппарат признан пригодным для автоматизации проводимых в медицинской части ГВКГ им. академика Бурденко работ по повышению эффективности функционирования госпиталя.
В перспективе возможно применение разработанных методов и построенных моделей в других медицинских учреждениях Российской Федерации.
ГЛАВА 3. МАТЕМАТИЧЕСКОЕ ОБЕСПЕЧЕНИЕ ПРИКЛАДНЫХ ЗАДАЧ
3.1. Деловая игра по курсу "Гражданская оборона"
3.1.1. Постановка задачи и ее спецификация
Гражданская оборона (ГО) Российской Федерации (РФ) - это составная часть системы общегосударственных мероприятий, проводимых в целях защиты населения и обеспечения устойчивой работы отраслей и хозяйственных объектов государства в условиях применения противником в военное время оружия массового поражения, а так же для спасательных и неотложно-восстановительных работ в очагах поражения и зонах катастрофических разрушений в результате стихийных бедствий.
Стихийные действия сил природы, пока еще не в полной мере подвластные человеку , наносят экономике государства и населению огромный ущерб. Стихийные бедствия - такие явления природы, которые вызывают экстремальные ситуации, нарушают нормальную жизнедеятельность людей и работу объектов. Наиболее характерные стихийные бедствия для различных районов нашей страны - землетрясения, наводнения, селевые потоки и оползни, снежные лавины , бури и ураганы, пожары.
Стихийные бедствия возникают внезапно и носят чрезвычайный характер. Они могут разрушить здания и сооружения, уничтожить ценности, нарушить процессы производства, вызывать гибель людей и животных. По характеру своего воздействия на объекты отдельные явления природы могут быть аналогичны воздействию некоторых поражающих факторов ядерного взрыва и других средств нападения противника.
Представляемая часть дипломного проекта посвящена наиболее опасному и разрушительному стихийному бедствию - землетрясению. В современных условиях, когда в различных сферах человеческой деятельности используется и потребляется большое количество химических веществ , горюче-смазочных материалов и других источников энергии, возникает проблема вторичных поражающих факторов. В то время , когда промышленность и техника не были достаточно развиты, население несло потери в основном за счет обрушения зданий и построек, а также вызываемых землетрясениями оползней, наводнений и т.д..Такая тенденция наблюдается также в слаборазвитых странах с низким техническим развитием. В настоящее время в технически и промышленно развитых районах остро стоит проблема вторичных поражающих факторов, например опасность химического заражения местности вблизи химических заводов, опасность от взрывов и пожаров вблизи от газо и нефтепроводов, хранилищ сжиженных газов, нефтепперерабатывающих заводов и т.д..Поэтому необходимо и целесообразно заранее оценивать и прогнозировать степень последствий таких факторов или оперативно оценивать обстановку после землетрясений.
Основная задача обучения в высших учебных заведениях по курсу ГО - дать студентам теоретическую основу для осуществления мероприятий ГО на объектах народного хозяйства. Компьютеризация всех сфер народного хозяйства предоставляет широкие возможности по использованию средств вычислительной техники в сфере обучения . Возникает потребность в разработке АРС (Автоматизированной расчетной системы), одним из возможных применений которой является использование ее студентами при выполнении лабораторных работ по курсу "Гражданская оборона". Предполагается, что студент предварительно знакомится со справочной информацией по работе, получая необходимые сведения о цели работы, составе входных и выходных параметров, а также о методике расчета. После этого студент производит необходимые измерения и вводит данные в систему, которая выдает рассчитанные значения параметров.
Другим важным применением АРС является ее использование сотрудниками отделов ГО предприятий, которые получают возможность делать необходимые расчеты по предложенным методикам. Выполняемые ранее человеком сложные расчеты берет на себя АРС. Это не только облегчает работу сотрудников отделов ГО, но и предотвращает возможное появление ошибок. Кроме того, при расчетах часто используется информация, получаемая из справочных таблиц, АРС содержит многие из них внутри себя, что устраняет необходимость искать необходимые данные в многотомных справочниках. При разработке такой АРС важное значение приобретает тот факт, что система ориентирована на пользователей, имеющих в большинстве своем чрезвычайно небольшой опыт обращения с ЭВМ. Это приводит к необходимости создания развернутой системы помощи, которая в каждый момент времени давала бы пользователю необходимые сведения о возможных действиях. Кроме того, должна быть обеспечена проверка введенных пользователем данных, чтобы не возникло сбоев системы. Вообще, система должна корректно реагировать на любое действие пользователя, например, выполнять требуемое действие или выдавать сообщение об ошибке, в противном случае пользователь перестанет понимать, что он должен делать, что в конечном итоге приведет к отказу от использования системы.
Состав и содержание расчетов, составляющих АРС "Гражданская оборона", определялись в соответствии с консультациями, получаемыми на кафедре "Охрана труда". Состав работ выбирался, исходя из анализа проблем, стоящих перед некоторым промышленным предприятием, и сравнительной сложности расчетов. Состав и распределение задач между исполнителями для АРС СКБ-2 выглядит следующим образом:
Тему "Землетрясения.Общая характеристика" разрабатывает Р. Чихирев.
Тему "Землетрясения.Распространение СДЯВ" разрабатывает В. Базин.
Тему "Землетрясения.Распространение пожаров" разрабатывает Р. Баймеев.
Тему "Землетрясения.Взрывы ГВС" разрабатывает А.Сачков.
Таким образом, в соответствии с заданием кафедры охраны труда в КДП СКБ2 разработана АРС по моделированию и исследованию вышеописанных процессов.
АРС представляет собой комплекс однотипных программ для ЭВМ IBM PC 486 (структура системы изображена на рис.3.1 на стр. __):
Каждая программа обеспечивает расчет и моделирование зависимостей выходных параметров от входных.
Работа с системой предполагает выполнение студентами ряда лабораторных работ с использованием этих программ (темы работ соответствуют названиям программ). Для каждой лабораторной работы членами СКБ2 написаны методические указания.
Проектирование АРС проводилось под автором (ответственным по Гражданской обороне).
3.1.2. Характеристика землетрясений
Землетрясение - это колебание земной поверхности при прохождении волн от подземного источника энергии. Землетрясения наиболее опасные и разрушительные стихийные бедствия. По самым скромным подсчетам все происшедшие только в нашем столетии землетрясения унесли около одного миллиона жизней [14, 16].
3.1.2.1. Механизм землетрясения
Землетрясение происходит, когда в породах, слагающих земную кору, в результате нарастания избыточного напряжения, которое в свою очередь обычно является следствием движения литосферных плит, образуется разрыв. Разрыв происходит по неровной области вдоль более или менее плоской поверхности геологического разлома, которая может быть вертикальной или наклонной. Длина вспоровшейся части разлома может быть от нескольких метров при практически неощутимых землетрясениях до нескольких сотен километров при крупнейших землетрясениях. Вспарывающаяся трещина может достичь поверхности Земли, но может и остановиться много глубже. В целом, чем больше длина вспоровшегося разлома, тем больше магнитуда землетрясения.
Землетрясение начинается в некоторой точке и затем распространяется в стороны от нее. Место, в котором начинается вспарывание, называется фокусом землетрясения или гипоцентром, а точка на поверхности Земли точно над гипоцентром - эпицентром . Расстояние от поверхности Земли до гипоцентра, называемое глубиной очага, может быть от нескольких километров до нескольких сотен километров. Самый глубокий из известных толчков произошел на глубине около 720 км под морем Флорес. Наибольшие разрушения приносят мелкофокусные землетрясения, очаги которых расположены непосредственно под земной поверхностью. Часто сильные мелкофокусные землетрясения сопровождаются многочисленными землетрясениями меньшей силы в течение нескольких часов и даже нескольких месяцев. Так, в 1965 году после сильного землетрясения, происшедшего 4 февраля на Крысьих островах (в архипелаге Алеутских островов), в течение 24 дней произошло 750 мелких землетрясений (афтершоков). Некоторым землетрясениям предшествуют предварительные толчки из очаговой области - их называют форшоками [16].
После того как при землетрясении трещина начала вспарываться, она быстро распространяется вдоль поверхности геологического разлома, высвобождая упругую энергию накопленных в горных породах деформаций. Для образования всей трещины требуется определенное время, которое можно измерить. При слабом землетрясении вспарывание заканчивается за несколько секунд, но при сильнейших землетрясениях оно длится десятки секунд.
Энергия выделяется из горных пород на переднем крае трещины по мере развития процесса ее вспарывания. Большая часть выделившейся упругой энергии расходуется на разламывание и дробление пород, на вертикальное и горизонтальное смещение примыкающих блоков земной коры и на образование тепла. Небольшая часть энергии излучается во всех направлениях в окружающее пространство в виде сейсмических волн, которые распространяются в теле Земли. Когда волны достигают земной поверхности, они порождают те колебания почвы, которые мы воспринимаем как землетрясение.
3.1.2.2. Сейсмические волны
Cуществует два основных типа сейсмических волн - объемные волны, распространяющиеся в объеме Земли и подобные звуковым волнам, и поверхностные волны, идущие вдоль земной поверхности, подобно морским волнам [15].
Объемные волны образуются непосредственно при вспарывании пород. Они излучаются в окружающую среду во всех направлениях, ослабевая по мере удаления от источника. Существует два типа объемных - это первичные (primary), или продольные (Р-волны), и вторичные (secondary), или поперечные (S-волны). Продольные при своем распространении попеременно давят на горные породы (сжимают их) или создают в них разряжение, растягивают их. Поперечные волны при распространении сдвигают частицы вещества в стороны, под прямым углом к направлению своего пути. Скорость распространения этих двух типов волн неодинакова. Продольные волны проходят около 8 км/с, а поперечные волны - лишь 4,5 км/с. В большинстве случаев при землетрясениях продольные волны ощущаются первыми. Их действие похоже на удар воздушной волны, которая создает грохот и треск дребезжащих стекол в окнах. Спустя несколько секунд приходят поперечные волны, которые раскачивают все на своем пути вверх-вниз и из стороны в сторону, смещая поверхность грунта как по вертикали, так и по горизонтали. Именно эти колебания и приводят к наибольшему повреждению построек.
Поверхностные волны распространяются вдоль земной поверхности, захватывая лишь неглубокую зону под ней. В некоторых случаях разрушительные движения почвы могут вызываться этими волнами, которые распространяются с меньшей скоростью и имеют более длинные периоды, чем объемные волны. Поверхностные волны, создаваемые землетрясением, делятся на два вида. Первый называется волнами Лява, второй - волнами Релея (в честь открывших их ученых). В волнах Лява частицы грунта смещаются из стороны в сторону в горизонтальной плоскости, но под прямыми углами к направлению распространения волн. Вертикальных движений не происходит. Волны Релея распространяются так: сначала происходит толчок в направлении распространения волны, затем движение вверх, назад, вниз и новый толчок. При движении волны частицы перемещаются по эллипсам вверх и назад по отношению к движению волны. Поверхностные движутся примерно в 2 раза медленнее, чем поперечные волны, причем волна Релея распространяется медленнее волны Лява.
Для регистрации землетрясения используют сейсмографы - инструменты, сконструированные таким образом, чтобы записывать колебания своих оснований, установленных на земной поверхности или в шахте. На сейсмографе записывается сейсмограмма, т. е. линия, повторяющая колебания земной поверхности в любом выбранном направлении. Всякое изменение частоты или амплитуды колебания на сейсмографе называется фазой. Сейсмографы строятся таким образом, чтобы регистрировать достаточно ограниченные диапазоны частот или только интенсивные колебания [15].
3.1.2.3. Интенсивность и магнитуда землетрясения
Интенсивность землетрясения - мера величины сотрясения грунта, определяется степенью разрушения построенных людьми зданий, характером изменений земной поверхности и данными об испытанных людьми ощущениях.
Интенсивность землетрясений измеряется в баллах. Существует несколько шкал балльности, в деталях или существенно отличающихся друг от друга. В нашей стране и ряде европейских стран для оценки интенсивности подземных бурь в последние десятилетия используется 12-балльная международная шкала МSK.
Условно землетрясения подразделяются на слабые (1-4 балла), сильные (5-7 баллов) и сильнейшие (разрушительные - восемь баллов и более).
Один балл. Землетрясение людьми не ощущается, толчки регистрируются только специальными приборами.
Два балла. Землетрясение очень слабое. Колебания заметно ощущаются лишь немногими, находящимися в покое, особенно на верхних этажах зданий.
Три балла. Землетрясение слабое. Колебания заметно ощущаются в помещениях: раскачиваются подвешенные предметы, открытые двери. Чувствуется вибрация, как от прошедшей поблизости грузовой автомашины. Можно оценить длительность сотрясения.
Четыре балла. Умеренное землетрясение. Оно ощущается многими, кто находится в помещении, и лишь немногими - на открытом воздухе. В ночное время некоторые спящие просыпаются. Раскачиваются подвешенные предметы, дребезжат окна, хлопают двери, звенит посуда, трещат деревянные стены и каркасы.
Пять баллов. Довольно сильное землетрясение. Ощущается почти всеми, просыпаются спящие. Двери раскачиваются на петлях, закрываются, открываются, стучат ставни. Жидкость в сосудах колеблется, иногда расплескивается. Бьется часть посуды, трескаются стекла в окнах, местами появляются трещины в штукатурке, опрокидывается неустойчивая мебель. Маятниковые часы останавливаются, начинают идти, изменяют ход. Иногда качаются деревья и столбы.
Шесть баллов. Сильное землетрясение. Ощущается всеми. Многие в испуге выбегают из домов. Походка становится неустойчивой. Бьются окна, тарелки, стеклянная посуда. Книги, отдельные предметы падают с полок. Падают картины. Приходит в движение и опрокидывается мебель. Появляются трещины в штукатурке и кладке. Заметно сотрясаются деревья и кусты, слышен шелест листьев.
Семь баллов. Очень сильное землетрясение. Трудно удержаться на ногах. Все жители выбегают из домов. Дрожат подвешенные предметы. Ломается мебель. Многие здания получают значительные повреждения. Печные трубы обламываются на уровне крыш. Обваливаются штукатурка, плохо уложенные кирпичи, камни, черепица, а также неукрепленные парапеты и архитектурные украшения. Появляются трещины в сухих грунтах. Происходят небольшие оползни и провалы на песчаных и гравийных склонах. Звонят большие колокола. Мутнеет вода в водоемах и реках от ила. Повреждаются бетонные оросительные каналы.
Восемь баллов. Разрушительное землетрясение. Типовые здания получают значительные повреждения, иногда частично разрушаются. Ветхие постройки разрушаются. Происходит отрыв панелей от каркасов. Поворачиваются и падают печные и фабричные трубы, памятники, башни, колонны, водонапорные башни. Ломаются подгнившие сваи. Обламываются ветви на деревьях, возникают трещины во влажном грунте и на крутых склонах. Изменяется температура воды в источниках и колодцах.
Девять баллов. Опустошительное землетрясение. Общая паника. Дома разрушаются. Серьезно повреждаются плотины и борта водохранилищ. Рвутся подземные трубопроводы. Появляются значительные трещины на земной поверхности.
Десять баллов. Уничтожающее землетрясение. Большая часть построек разрушается до основания. Обрушиваются некоторые хорошо построенные деревянные здания и мосты. Серьезно повреждаются плотины, дамбы и насыпи. На земной поверхности появляются многочисленные трещины. Возникают большие оползни, вода выплескивается из каналов, рек, озер и т. д. Приходит в движение песчаный и глинистый грунт на пляжах и низменных участках. Слегка изгибаются рельсы на железных дорогах. Ломаются ветки и стволы деревьев. Животные мечутся и кричат.
Одиннадцать баллов. Катастрофа. Только немногие каменные здания сохраняют устойчивость. Разрушаются плотины, насыпи, мосты. Видны широкие трещины на поверхности земли. Подземные трубопроводы полностью выходят из строя. Сильно вспучиваются рельсы. Сплывы и оползни в рыхлых грунтах.
Двенадцать баллов. Сильная катастрофа. Полное разрушение зданий и сооружений. Смещаются крупные скальные массивы, на поверхности земли появляются волны, образуются водопады, возникают новые озера, изменяются русла рек. Растительность и животные погибают от обвалов и осыпей в горных районах. Обломки грунта, предметов летают в воздухе.
Интенсивность представляет собой качественное понятие: она не является параметром очага землетрясения, а отражает только наблюдаемое воздействие землетрясения на поверхность земли в определенной точке. Интенсивность субъективная мера, поскольку зависит главным образом от впечатлений наблюдателей.
Объективная мера должна обобщать суммарный эффект землетрясения; она определяется по записям на сейсмостанциях.
Способ определения такой меры был найден профессором Калифорнийского технического университета Ч. Рихтером, который изобрел в 1935 году шкалу магнитуд землетрясений.
Магнитуда - это мера полной энергии сейсмических волн. Разработанная Рихтером количественная шкала для оценки энергии очага (или интенсивности в очаге) землетрясения по своей идее сродни той, которая используется астрономами для градуировки звезд по шкале звездных величин. Рихтер определил магнитуду как число, пропорциональное десятичному логарифму амплитуды (выраженной в микрометрах) наиболее сильной волны, записанной стандартным сейсмографом на расстоянии 100 км от эпицентра землетрясения. Магнитуда может изменяться от 0 до 8,8. Если магнитуда оказывается больше на единицу, это означает, что амплитуда волн данного землетрясения возросла в 10 раз.
Магнитуда Рихтера тесно связана с энергией, высвобождающейся при землетрясении, но связь эта не вполне прямая, так как используется «логарифмическая» шкала. Ее равновеликим делениям соответствуют постоянно возрастающие количества энергии: повышение магнитуды (М) на единицу соответствует увеличению количества выделенной энергии примерно в 30 раз. Следовательно, при толчке с М = 5 высвобождается в 30 раз больше энергии, чем при М = 4, и в 900 раз больше, чем при М = 3.
Сильными считаются землетрясения, магнитуды которых равны 5-6 единицам (6-8 баллов). В нашем столетии всего несколько землетрясений, записанных сейсмографами, имели магнитуду 8,3-8,8 (11-12 баллов) [15].
В среднем во всем мире ежегодно происходит одно землетрясение с магнитудой 8 и выше.
3.1.3. Вторичные поражающие факторы землетрясений
В приведенных ниже разделах будут приведены характеристика СДЯВ, а также будут рассмотрены вторичные поражающие факторы землетрясений как то:
- распространение СДЯВ и воздействия их на окружающую среду и людей;
- оценка распространения пожаров;
- взрывы газовоздушной смеси.
3.1.3.1. Распространение и характеристика СДЯВ
Хлор ? зеленовато-желтый газ с резким запахом. Порог восприятия ? 0,003 мг/л. ПДК в рабочей зоне ? 0,001 мг/л. Следовательно , если чувствуется резкий запах , то работать без средств защиты уже опасно. Хлор в 2,5 раза тяжелее воздуха, поэтому облако хлора перемещается по направлению ветра близко к земле. Температура кипения - 34,6? С, следовательно даже зимой хлор находится в газообразном состоянии. Хранится в жидком состоянии под давлением. При испарении на воздухе, хлор образует с водяными парами белый туман.
Поражающая концентрация при экспозиции 1 ч. ? 0,01 мг/л, поражающая токсидоза ? 0,6 мг*мин/л.
Защита: промышленные противогазы марки «В» и «М», гражданские ГП-5, при концентрациях свыше 8,6 мг/л ? изолирующие противогазы.
Первая помощь: надеть противогаз и вывести на свежий воздух, ингаляция кислородом, вдыхание нашатырного спирта. Промывание глаз, носа и рта 2% раствором соды. Теплое молоко с боржоми или содой, кофе.
Дегазацию производят щелочными отходами производства, водными растворами гипосульфита, гашеной извести, неитрализацию — водой.
Аммиак — бесцветный газ с запахом нашатыря. Порог восприятия — 0,037 мг/л. ПДК в рабочей зоне — 0,02 мг/л. Температура кипения — 33.3? C. Хранится в жидком состоянии под давлением. Поражающая токсидоза — 15 мг/л. Хорошо растворяется в воде.
Защита: промышленные противогазы марки «К» и «М»; ГП-5, при высоких концентрациях — изолирующие противогазы и защитная одежда.
Первая помощь: свежий воздух, теплое молоко с боржоми или содой. При попадании в глаза — немедленное промывание водой. При поражении кожи — обмывание водой.
Дегазацию производят кислотными растворами, нейтрализацию водой.
Подробная характеристика СДЯВ и меры защиты изложены в аварийных карточках.
3.1.3.2. Химическая обстановка на местности в случае разрушения емкостей со СДЯВ
При заблаговременном прогнозировании для сейсмических районов за величину выброса принимают общий запас СДЯВ; метеорологические условия: вертикальная устойчивость атмосферы — инверсия, скорость ветра уземли м/c, направление ветра.
В основу метода прогнозирования положено численное решение уравнения турбулентной диффузии. Для упрощения расчетов ряд условий оценивается с помощью коэффициентов.
Исходные данные: тип и количество СДЯВ на объектах, физико-химические свойства, токсичность, условия хранения, метеоусловия, топографические условия местности.
3.1.3.3. Глубина, ширина и площадь заражения СДЯВ
Глубина

где G — суммарнаая доза СДЯВ на ХОО, кг; D=C*T — токсодоза , мг*мин/л, С — поражающая концентрация, мг/л, Т — время экспозиции, мин. Dхлор=0,6 мг*мин/л; Dаммиак=15 мг*мин/л; V — скорость ветра в приземном слое, м/с.
Ширина: Ш=К1*Г, м.
Площадь: S=0,5*Г*Ш, кв.м,
где К1, К2, К6 — коэффициенты, учитывающие состояние атмосферы; К3, К4 — учитывают условия хранения и топографические условия местности; К5 — учитывает влияние скорости ветра на продолжительность поражающего действия СДЯВ.
Таблица 3.1.1. Значения коэффициентов
Вертикальная устойчивость атмосферы

Инверсия
Изотермия
Конвекция
К1
0,03
0,15
0,8
К2
1
1/3
1/9
К6
2
1,5
1,5


Хранилище СДЯВ


Открыто
Обваловано
К3
1
2/3
tT
Хлор
1,3 ч.
22 ч.

Аммиак
1,24 ч.
20 ч.

Местность

Открытая
Закрытая
К4
1
1/3

V, м/с
1
2
3
4
5
6
К5
1
0,7
0,55
0,43
0,37
0,32

3.1.3.4 Время подхода зараженного воздуха к объекту
,
где L — расстояние от места аварии до объекта
— скорость переноса облака СДЯВ, м/с.
Продолжительность поражающего действия СДЯВ:
ч, где tт — время испарения СДЯВ при V=1м/с.
Граница возможных ОХП
Определяется путем нанесения зоны возможного заражения на карту (схему), а затем выделяют источники химического заражения, объекты, населенные пункты или их части ,которые попадают в зону химического заражения.
Возможные потери людей в ОХП
Потери рабочих и служащих, населения и личного состава формирований зависят от численности людей, своевременного их оповещения, степени защищенности и умения использовать СИЗ.
Таблица 3.1.2. Возможные потери рабочих, служащих и населения от СДЯВ в очаге поражения, %
Условия нахождения
без противогазов
людей, обеспеченных противогазами %
людей

20
30
50
60
70
90
100
На открытой местности
90-100
75
65
50
40
35
18
10
В простейших укрытиях, зданиях
50
40
35
27
22
18
9
4

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

При плотности застройки до 7% пожары не распространяются, при плотности застройки от 7% до 20% — возможны отдельные пожары , свыше 20% — возможны сплошные пожары.
Расположение зданий на территории объекта может быть неравномерным, при этом необходимо при определении вероятности распространения пожара учитывать расстояния между зданиями.
Таблица 3.1.3. Зависимость вероятности распространения пожара (В) от плотности застройки (П)
В,%
12
45
63
75
88
100
П,%
10
20
30
40
50
60

Таблица 3.1.4. Зависимость вероятности распространения пожара (В) от расстояния (L) между зданиями
В,%
100
87
66
47
27
23
9
3
2
L,%
0
5
10
15
20
30
40
50
70

Оценка пожарной обстановки при разрушении емкостей с пропаном
При разрушении емкостей со сжиженными углеводородами (пропан, бутан, нефтяной газ и др.), которые хранятся под высоким давлением, происходит их выброс в атмосферу, вскипание с быстрым испарением и образованием облака газовоздушной смеси (ГВС).
При наличии источника зажигания , например искры, может возникнуть интенсивное горение или детонация.
Интенсивное (дефлаграционное) горение с образованием огненного шара возникает, если облако ГВС переобогащено топливом (более 9,5% для пропана). При этом тепловой импульс от огненного шара может вызвать загорание элементов объекта.
3.1.5. Оценка воздействия взрыва ГВС на элементы объекта
В тех случаях, когда при разрушении емкостей обраазуется облако с объемной концентрацией пропана от 3 до 7%, может возникнуть взрыв.
Радиус зоны детонационной волны рассчитывается по формуле:
,
где Q — масса сжиженного газа, т.
Избыточное давление в зоне детонации принимается постоянным и равным ?P=1700 кПа.
Радиус зоны поражения продуктами взрыва: R2=1,7*R1.
Избыточное давлление в зоне действия продуктов взрыва изменяется от 1350 до 300 кПа и определяетсчя по формуле:
кПа,
где R — расстояние от центра взрыва до рассматриваемой точки (элемента объекта) , м.
Для расчета избыточного давления в зоне действия воздушной ударной волны предварительно определяется относительная величина
,
при

при

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


3.2. Автоматизированная система по курсу «Экология и охрана труда»
3.2.1. Постановка задачи и ее спецификации
В процессе труда человек подвергается воздействию большого числа факторов, различных по своей природе и характеру воздействия, которые влияют на его здоровье и работоспособность. Обязательным условием для сохранения здоровья работающих и обеспечения высокой производительности труда является соответствие трудовой деятельности свойствам и возможностям человека, исключение воздействия опасных и вредных производственных факторов. Это достигается при помощи систем законодательных актов, социально - экономических, организационных, технических и профилактических мероприятий и средств охраны труда (ОТ).
ОТ - это система законных актов, мероприятий и средств, обеспечивающих безопасность, сохранение здоровья и работоспособности человека в процессе труда.
Основная задача обучения в высших учебных заведениях по курсу ОТ - дать студентам теоретическую основу для осуществления мероприятий ОТ на объектах народного хозяйства. Компьютеризация всех сфер народного хозяйства предоставляет широкие возможности по использованию средств вычислительной техники в сфере обучения и, в частности, на кафедре "Охрана труда". Возникает потребность в разработке АРС (Автоматизированной расчетной системы), одним из возможных применений которой является использование ее студентами при выполнении лабораторных работ по курсу "Охрана труда". Предполагается, что студент предварительно знакомиться со справочной информацией по работе, получая необходимые сведения о цели работы, составе входных и выходных параметров, а также о методике расчета. После этого студент производит необходимые измерения и вводит данные в систему, которая выдает рассчитанные значения параметров.
Другим важным применением АРС является ее использование сотрудниками отделов ОТ предприятий, которые получают возможность делать необходимые расчеты по предложенным методикам, с которыми они могут ознакомиться, используя справочную информацию, предлагаемую АРС. Выполняемые ранее человеком сложные расчеты, часто включающие в себя вычисление интегралов, логарифмов, использование метода наименьших квадратов, берет на себя АРС. Это не только облегчает работу сотрудников отделов ОТ, но и предотвращает возможное появление ошибок. Кроме того, при расчетах часто используется информация, получаемая из справочных таблиц, АРС содержит многие из них внутри себя, что устраняет необходимость искать необходимые данные в многотомных справочниках. При разработке такой АРС важное значение приобретает тот факт, что система ориентирована на пользователей, имеющих в большинстве своем чрезвычайно небольшой опыт обращения с ЭВМ. Это приводит к необходимости создания развернутой системы помощи, которая в каждый момент времени давала бы пользователю необходимые сведения о возможных действиях. Кроме того, должна быть обеспечена проверка введенных пользователем данных, чтобы не возникло сбоев системы. Вообще, система должна корректно реагировать на любое действие пользователя, например, выполнять требуемое действие или выдавать сообщение об ошибке, в противном случае пользователь перестанет понимать, что он должен делать, что в конечном итоге приведет к отказу от использования системы.
Состав и содержание расчетов, составляющих АРС "Охрана труда", определялись в соответствии с консультациями, получаемыми на кафедре "Охрана труда". Состав работ выбирался, исходя из анализа проблем, стоящих перед некоторым промышленным предприятием, и сравнительной сложности расчетов. Состав и распределение задач между исполнителями для АРС СКБ-2 выглядит следующим образом:
Тему "Постановка лабораторных работ исследования загрязнения выбросами из узкого отдельно стоящего здания" разрабатывает Р. Чихирев.
Тему "Постановка лабораторных работ исследования загрязнения выбросами из широкого отдельно стоящего здания" разрабатывает В. Базин.
Тему "Постановка лабораторных работ исследования загрязнения выбросами из группы зданий" разрабатывает Р. Баймеев.
Тему "Постановка лабораторных работ исследования безопасности электрических установок с изолированной нейтралью с компенсацией емкостных токов" разрабатывает А.Сачков.
Таким образом, в соответствии с заданием кафедры охраны труда в КДП СКБ2 разработана АОС по моделированию и исследованию вышеописанных процессов.
АОС представляет собой комплекс однотипных программ для ЭВМ IBM PC AT 286 (структура системы изображена на рис.3.2.1 на стр. __):
Каждая программа обеспечивает расчет и моделирование зависимостей выходных параметров соответствующего оборудования от входных.
Работа с системой предполагает выполнение студентами ряда лабораторных работ с использованием этих программ (темы работ соответствуют названиям программ). Для каждой лабораторной работы членами СКБ2 написаны методические указания.
3.2.1.1. Постановка задачи оценки степени загрязнения атмосферы выбросами из низких источников
При проектировании промышленных предприятий требуется в соответствии с санитарными нормами проводить расчет возможного загрязнения атмосферного воздуха вентиляционными и технологическими выбросами. Расчет проводят с целью проверки эффективности предусмотренных проектом мероприятий по обеспечению чистоты атмосферного воздуха населенных пунктов, а также воздуха на площадках предприятий у приемных отверстий систем вентиляции и кондиционирования воздуха и у аэрационных приточных проемов. Полученные расчетом концентрации вредных веществ в атмосферном воздухе населенных пунктов не должны превышать максимальных разовых концентраций, а в воздухе, поступающем внутрь зданий и сооружений через приемные отверстия систем вентиляции и кондиционирования воздуха и через аэрационные проемы, - 30% предельно допустимых концентраций (Спдк) этих веществ в рабочей зоне производственных помещений. При превышении этих пределов следует разработать дополнительные мероприятия по снижению уровня загрязнения, например предусмотреть повышение эффективности очистных устройств, сооружение новых газоочистных установок, совершенствование отдельных технологических узлов и установок, увеличение высоты труб, уменьшение выбросов соседних предприятий. Степень загрязнения наружного воздуха, определенная расчетным путем, будет соответствовать действительному состоянию воздуха только в том случае, если при расчете использованы достоверные данные, учитывающие весь комплекс одновременно действующих источников выделения вредных веществ, а также существующий фон загрязнения.
3.2.1.2. Постановка задачи оценки безопасности в электроустановках
Безопасностью труда принято называть такое состояние условий труда, при котором отсутствует возможность воздействия на работающих опасных факторов. В электроустановках опасным фактором является электрический ток.
Техника безопасности в электрических установках направлена прежде всего на предотвращение случаев поражения электрическим током. Установлено, что наибольшее количество несчастных случаев поражения электрическим током происходят в электроустановках напряжением до 1000В.
Поражение электрическим током является одной из основных причин несчастных случаев со смертельным исходом. Отсюда ясно, насколько велико социальное значение техники безопасности при работе в электроустановках.
Поражение человека возможно в случае прикосновения его к двум точкам, между которыми существует напряжение, например, к двум фазам, фазе и земле, к двум местам земли, имеющим разные потенциалы. Ток поражения зависит от рабочего напряжения и схемы питания электроустановки, сопротивления всех элементов электрической цепи, по которой проходит ток.
Схемы включения человека в цепь тока могут быть различными. Однако наиболее характерны две схемы включения: между двумя фазами электрической сети и между одной фазой и землей. Во втором случае предполагается связь между сетью и землей. Такая связь может быть обусловлена несовершенством изоляции проводов относительно земли, наличием емкостной связи между проводниками и землей и, наконец, заземлением нейтрали источника тока, питающего данную сеть.
Применительно к сетям переменного тока одна схема соответствует двухфазному прикосновению, а вторая - однофазному.
Двухфазное прикосновение, как правило, более опасно, поскольку к телу человека прикладывается наибольшее по данной сети напряжение – линейное, а ток, проходящий через человека, оказываясь не зависимым от схемы сети, режима ее нейтрали и других факторов, имеет наибольшее значение
Случаи двухфазного прикосновения происходят крайне редко. Они являются, как правило, результатом работы под напряжением в электроустановках до 1000В – на щитах, сборках, воздушных линиях электропередачи и т.п., применения неисправных индивидуальных электрозащитных средств, эксплуатации оборудования с неогражденными неизолированными токоведущими частями.
Однофазное прикосновение, обычно менее опасно, чем двухфазное, поскольку ток, проходящий через человека, ограничивается влиянием многих факторов.
Однако, однофазное прикосновение возникает во много раз чаще, поэтому в данном ДП рассматривается только этот случай. При этом в целях упрощения принимаем, что тело человека обладает лишь активным сопротивлением Rh, а сопротивление растеканию ног человека Rосн и сопротивление его обуви Rоб принимаем равными нулю.
Проводники фаз электросети имеют емкость относительно земли, которая может достигать значительных величин (0.25-1мкФ). Эти емкости являются причиной возникновения емкостных токов, опасных для человека даже при больших активных сопротивлениях изоляции фаз относительно земли. Для уменьшения влияния емкостных токов на ток, проходящий через человека при прикосновении его к фазе сети, применяют компенсаторы – индуктивные сопротивления, которые включаются между любой фазой и землей, либо между нейтралью и землей.
В данном ДП ребуется рассчитать ток, проходящий, через человека в случае прикосновения его к фазе в сети с изолированной нейтралью с компенсацией емкостных токов.
3.2.2. Обоснование проектных решений
Как отмечено в постановке задачи, АРС по ОТ рассчитана на непрофессионального пользователя, поэтому особенностью системы является простота использования АРС. Ввод данных, получение результатов и получение справочной информации осуществляется в диалоговом режиме с использованием системы меню.
При входе в систему пользователь получает возможность выбирать из главного меню одну из следующих альтернатив:
получить меню для выбора одной из работ для выполнения;
закончить работу в АРС.
ввести исходные данные
провести расчет
посмотреть сгенерированный расчет
Таким образом, основным эффектом разработанной АРС является освобождение пользователя от трудоемких расчетов.
Для обеспечения работы программы необходимы следующие программные и технические средства:
- IBM PC AT 286 или совместимая ПЭВМ;
- объем оперативной памяти не менее 640 К;
- требуется наличие свободного места на жестком диске не менее 3Мб;
- операционная среда MS-DOS 5.0 и выше.
Тексты программы приведены в Приложении 5.
3.2.2.1. Математическая модель определения степени загрязнения атмосферы
3.2.2.1.1. Обозначения используемые при построении математической модели
С, Сх, Су концентрация вредных веществ в наружном воздухе, мг/м3;
М - количество вредных веществ, выбрасываемых источником в атмосферу, мг/с;
k - безразмерный коэффициент, учитывающий влияние возвышения устья источника на уровень загрязнения ;
v - расчетная скорость ветра, принимаемая по рекомендации Главного санитарно-эпидемиологического управления равной 1м/с;
Нзд - высота здания от поверхности земли до его крыши при плоской кровле, до конька крыши при двускатной кровле, до верха карниза фонаря при продольных фонарях, расположенных ближе 3 м от наветренной стены здания, м;
1 - длина здания (размер, перпендикулярный направлению ветра), м;
b - ширина здания (размер вдоль направления ветра), м;
х - расстояние от заветренной стены здания до точки, в которой определяется концентрация, м;
S, S1, S2, S3, S4 - вспомогательная безразмерная величина, позволяющая определять концентрации вредных веществ на расстоянии у, м, по перпендикуляру от оси факела выброса из точечных источников;
b1 - расстояние в пределах крыши широкого здания от его наветренной стороны до точки, в которой определяется концентрация, м;
b2 - расстояние в пределах крыши широкого здания от источника до точки, в которой определяется концентрация, м;
L - количество газовоздушной смеси, выбрасываемой из источника м3/с;
m - безразмерный коэффициент, показывающий какое количество выделяемых источником примесей участвует в загрязнении циркуляционных зон;
b3 - расстояние в пределах крыши широкого здания от источника до заветренной стены здания, м; - относительная высота здания, равная
(Н-1,8Нзд)/(Нгр-1,8Нзд)
при расположении устья источника вне единой или межкорпусной зоны узкого здания и над наветренной зоной широкого здания и равная
(Н-Нзд)/(Нгр-Нзд)
при расположении устья источника вне наветренной, над заветренной или над межкорпусной зоной широкого здания;
Нгр - предельная высота низких источников, м;
X1 - расстояние между зданиями.
3.2.2.1.2 Область применения расчетных формул
При расчете степени загрязнения, решении различных вопросов по сокращению выбросов и выборе мест расположения приемных отверстий систем вентиляции и кондиционирования воздуха необходимо учитывать возникновение вблизи зданий при обтекании их воздушным потоком циркуляционных (замкнутых плохо проветриваемых) зон. При обтекании воздушным потоком узкого здания над и за ним возникает единая циркуляционная зона, распространяющаяся от заветренной стены здания на расстояние шесть его высот (6 Нзд). Высота этой зоны в среднем составляет 1,8 Нзд. При обтекании воздушным потоком широкого здания над ним возникает наветренная циркуляционная зона длиной 2,5 Нзд и высотой 0,8 Нзд, а за ним - заветренная циркуляционная зона длиной 4 Нзд и высотой около Нзд. При обтекании воздушным потоком группы зданий между двумя смежными зданиями возникает межкорпусная циркуляционная зона длиной до 10 Нзд, если первое по потоку здание узкое и до 8 Нзд, если первое по потоку здание широкое. При больших межкорпусных расстояниях здания можно рассматривать как отдельно стоящие.
Источники вредных веществ, загрязняющие циркуляционные зоны зданий, следует относить к низким.
Граничное положение устья источника, до которого он действует как низкий, находят по формулам:
для узкого отдельно стоящего здания
Нгр = 0.36b3+2.5Нзд , (3.2.2.1)
для широкого отдельно стоящего здания
Нгр = 0.36b3+1.7Нзд , (3.2.2.2)
для группы зданий
Нгр = 0.36(bз+x1)+Нзд , (3.2.2.3)
где bз - расстояние от источника, расположенного в пределах крыши, до заветренной стены здания.
Источники, выбрасывающие вредные вещества на высоте, превышающей Нгр и не загрязняющие циркуляционные зоны над и за зданием, следует относить к высоким.
Загрязнение, создаваемое низкими источниками, рассчитывают в соответствии с "Руководством по расчету загрязнения воздуха на промышленных площадках", разработанным ЦНИИПромзданий и ВЦНИИОТ в 1975 г.
3.2.2.1.3. Расчетные формулы для выбросов из низких источников
Формулы для расчета концентраций вредных веществ в наружном воздухе при загрязнении его выбросами из низких источников выбирают в зависимости от вида здания (узкое или широкое отдельно стоящее, группа зданий), вида источника (точечный или линейный), места расположения устья источника и места определения концентраций.
Узкое отдельно стоящее.
В единой циркуляционной зоне или над ней.
В единой циркуляционной зоне при 0<х<6Нэд
;
; (3.2.2.4 a)
;
Вне циркуляционной зоны за зданием при х>6Нзд
;
; (3.2.2.4 б)
.
Широкое отдельно стоящее
На крыше в наветренной циркуляционной зоне при b12,5Hзд

; (3.2.2.5 a)
;
На крыше вне наветренной циркуляционной зоны при b12,5Hзд
;
; (3.2.2.5 б)
.
В заветренной циркуляционной зоне при 0<х4Нзд
;
; (3.2.2.5 в)
;
Вне заветренной циркуляционной зоны за зданием при x>4Нзд
;
; (3.2.2.5 г)

Вне наваренной циркуляционной зоны над крышей при <0,3.
На крыше вне наветренной циркуляционной зоны при b1>2,5H~
;
; (3.2.2.6 а)
;
В заветренной циркуляционной зоне при 0<х<4Нзд
;
; (3.2.2.6 б)
;
Вне заветренной циркуляционной зоны за зданием при х>4Нзд
;
; (3.2.2.6 в)
;
Вне наветренной циркуляционной зоны над крышей при >0,3
На крыше вне наветренной циркуляционной зоны при b12,8(Н-Нзд)
и у<(Н-Hзд)
;
; (3.2.2.7 а)
В заветренной циркуляционной зоне при 0<х<4Нэд
;
; (3.2.2.7 б)
;
Вне заветренной циркуляционной зоны за зданием при х>4Нзд
;
; (3.2.2.7 в)
;
В заветренной циркуляционной зоне или над ней.
В заветренной циркуляционной зоне при 0<х4Нзд
;
; (3.2.2.8 а)
;
Вне заверенной циркуляционной зоны за зданием при х>4Нзд
;
; (3.2.2.8 б)
;
Группа зданий
В наветренной циркуляционной зоне первого по потоку широкого здания
В межкорпусной циркуляционной зоне при Нзд ;
; (3.2.2.9 а)
;
В межкорпусной циркуляционной зоне при 4Нзд ;
; (3.2.2.9 б)
;
Вне наветренной циркуляционной зоны первого по потоку широкого здания на крыше при <0,3
В межкорпусной циркуляционной зоне при Нзд ;
; (3.2.2.10 а)

В межкорпусной циркуляционной зоне при 4Нзд ;
; (3.2.2.10 б)
;
Вне наветренной циркуляционной зоны первого по потоку широкого здания на крыше при >0,3
В межкорпусной циркуляционной зоне при Нзд ; (3.2.2.11 а)
;
В межкорпусной циркуляционной зоне при 4Нзд ; (3.2.2.11 б)
;
В межкорпусной циркуляционной зоне при первом по потоку широком здании и <0,3
В межкорпусной циркуляционной зоне при Нзд ;
; (3.2.2.12 а)
;
В межкорпусной циркуляционной зоне при 4Нзд ;
; (3.2.2.12 б)
;
Над межкорпусной циркуляционной зоной при первом по потоку широком здании и >0,3
В межкорпусной циркуляционной зоне при Нзд ; (3.2.2.13 а)
;
В межкорпусной циркуляционной зоне при 4Нзд ; (3.2.2.13 б)
;
В межкорпусной циркуляционной зоне или над ней при первом по потоку узком здании
В межкорпусной циркуляционной зоне при Нзд ;
; (3.2.2.14 а)
;
В межкорпусной циркуляционной зоне при 6Нэд<Х1<10Нзд
;
; (3.2.2.14 б)
;
За расчетное принимают направление ветра, перпендикулярное продольной стороне здания.
При действии линейных источников (аэрационных фонарей, ряда близко расположенных шахт и труб) концентрации вредных веществ в единой, заветренной или межкорпусной циркуляционной зоне достаточно рассчитать для любой точки зоны, так как они одинаковы в пределах каждой зоны.
При действии точечных источников концентрации вредных веществ рассчитывают на оси их факела x, где они будут наибольшими.
Понижающие коэффициенты S, S1, S2, S3 и S4, вводимые при выборе мест воздухозаборов и решении других задач, связанных с определением концентраций, подсчитывают по формулам:
;
;
; (3.2.2.15)
;
;
При расчете концентрации вредных веществ за вторым и последующими зданиями по направлению ветра поступление вредных веществ определяют с учетом расстояния x по оси факела и расстояния у, перпендикулярного оси факела.
3.2.2.2. Математическая модель расчета безопасности электроустановок
3.2.2.2.1. Обозначения используемые при построении математической модели
Rh – сопротивление тела человека, Ом;
Uф – фазное напряжение, В;
Uл – линейное напряжение сети, В;
С1, C2, C3, СН– емкость проводников относительно земли, Ф;
r1, r2, r3 – активные составляющие сопротивлений фаз относительно земли, Ом;
xL = wL - индуктивное сопротивление заземления нейтрали, Ом;
xC C – емкостное сопротивление провода относительно земли, Ом;
f – угловая частота тока, с-1;
f - частота тока, Гц;
L – индуктивность компенсирующего устройства.
3.2.2.2.2. Расчетные формулы для оценки электробезопасности
Воспользуемся для расчетов символическим методом. Вначале рассмотрим прикосновение человека к фазному проводу трехфазной четырех проводной сети, у которой нейтраль заземлена через активное и индуктивное сопротивления r0 и xL(Рис. 3.2), а сопротивления изоляции проводов r, Ом, относительно земли, так же как и емкости проводов С, Ф, относительно земли не равны между собой.
Полные проводимости, См, изоляции фазных и нулевого проводов относительно земли Y1,Y2,Y3,YН и заземления нейтрали Y0 в комплексной форме равны


а полная проводимость тела человека

При прикосновении человека к одной из фаз, например к фазе 1 (Рис. 3.1), напряжение прикосновения, В, определится выражением

а ток, проходящий через тело человека, А, будет равен

где U1- комплексное напряжение фазы 1 (фазное напряжение), В; U0 – комплексное напряжение между нейтралью источника тока и землей, В.

С учетом того, что для симметричной трехфазной системы

где a – фазный оператор трехфазной системы, учитывающий сдвиг фаз:

будем иметь

Подставив это значение в формулу (3. ) , получим уравнение напряжения в комплексной форме, В, приложенного к телу человека, прикоснувшегося к фазе 1 трехфазной четырехпроводной сети с нейтралью, заземленной через активное и индуктивное сопротивления:

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

Пользуясь уравнениями (3.2.2.2) и (3.2.2.3), определим Uпр и Ih при прикосновении человека к фазе трехпроводной сети с изолированной нейтралью.Рассмотрим трехфазную сеть с изолированной нейтралью с компенсацией емкостных токов при нормальном режиме работы сети. Для этого принимаем, что

где Rк- активное сопротивление компенсирующего устройства;
Lк – индуктивность компенсирующего устройства.
3.2.3. Разработка программной документации
На АРС "Охрана труда" разработан документ "Руководства оператора" (Р. МИРЭА.00003-01 34 01).
Документ оформлен в соответствии с ГОСТ 19.505-79 и содержит следующие разделы:
* назначение программы;
* условия выполнения программы;
* выполнение программы;
* сообщения оператору.
Руководство содержит сведения, необходимые для обеспечения процесса интерактивного взаимодействия пользователя с АРС, и позволяет облегчить процесс освоения разработанной АРС.
Руководство оператора приведено в Приложении 5.
3.2.4. Результаты опытной эксплуатации системы и технические предложения по её развитию
В ходе опытной эксплуатации по методике представленной в Приложении 5 был сделан вывод, что система удовлетворяет требованиям заказчика.
АРС "Охрана труда" проста в использовании и снабжена развернутой системой помощи, что позволяет непрофессиональным пользователям, составляющим большинство, работать с системой баз предварительного обучения.
В целом разработанная система вполне может быть использована как кафедрой "Охрана труда" в качестве дополнительного обучающего средства при выполнении студентами лабораторных работ, так и сотрудниками отделов ОТ на предприятиях.
АРС "Охрана труда" на следующих этапах разработки может быть расширена за счет дополнительных расчетных и информационных модулей, охватывающих другие направления ОТ производства, или за счет предоставления возможности выбора методик для существующих расчетов. Кроме того, АРС может быть дополнена развернутой диагностикой ошибок пользователя при вводе данных, а также модулем пояснения пользователю того, как был получен каждый конкретный результат, при желании с выдачей промежуточных результатов.


3.3 Автоматизированная обучающая система по курсу экономики
3.3.1 Постановка задачи и ее спецификация
Анализ безубыточности, также известный как анализ критических соотношений общей выручки от реализации и объема производства, используется для определения объема продаж , при которых компания способна покрыть все свои расходы без получения прибыли.
Порядок и инструменты анализа , проводимого с целью принятия финансовых решений , предопределяется самой логикой функционирования финансового механизма предприятия , Одним из самых простых и эффективных методов финансового анализа с целью оперативного, а также стратегического планирования, является операционный анализ , также называемый анализом «Издержки-Объем-Прибыль» и отслеживающий зависимость финансовых результатов бизнеса от издержек и объемов производства/сбыта.
Анализ «Издержки-Объем-Прибыль» служит для ответа на важнейшие вопросы, возникающие перед финансистами предприятия на основных этапах денежного оборота.
Ключевыми элементами операционного анализа служат финансовый и операционный рычаги , порог рентабельности и запас финансовой прочности. Операционный анализ - неотъемлемая часть управленческого учета. В отличие от внешнего финансового анализа , результаты операционного (внутреннего) анализа могут составлять коммерческую тайну предприятия.
Действия операционного (производственного, хозяйственного) рычага проявляются в том, что любое изменение выручки от реализации всегда порождает более сильное изменение прибыли. Этот эффект обусловлен различной степенью влияния динамики постоянных и переменных затрат на формирование финансовых результатов деятельности предприятия при изменении объема производства. Чем больше уровень постоянных издержек, тем больше сила воздействия операционного рычага. Указывая темп падения прибыли с каждым процентом снижения выручки, сила операционного рычага свидетельствует об уровне предпринимательского риска данного предприятия.
Действие финансового рычага заключается в том, что предприятия, использующее заемные средства, изменяет чистую рентабельность собственных средств и свои дивидендные возможности. Уровень эффекта финансового рычага указывает на финансовый риск, связанный с предприятием. Поскольку проценты за кредит относятся к постоянным издержкам, наращивание финансовых расходов по заемным средствам сопровождается увеличением силы операционного рычага и возрастанием предпринимательского риска.
Операционный анализ служит поиску наиболее выгодных комбинаций между переменными единицу продукции, постоянными издержками, ценой и объемом продаж. Поэтому анализ невозможен без разделения издержек на постоянные и переменные.
Переменные издержки меняются в целом прямо пропорционально изменениям объема изменениям объема производства товаров (работ, услуг). Это могут быть прямые издержки на основные сырье и материалы в производстве, издержки по приобретению партий товара в коммерции, комиссионные продавцам, некоторые снабженческие расходы и прочее.
Постоянные издержки в краткосрочном периоде в целом не меняются с изменением объема производства. Это могут быть расходы по аренде, амортизационные отчисления, оклады администрации, налог на имущество, проценты за кредит и прочее. Постоянные издержки графически отображаются горизонтальной линией для каждого из релевантных ( краткосрочных, не требующих нового скачка постоянных издержек) периодов.
Сложением переменных и постоянных издержек получают суммарные издержки на весь объем продукции.
Рассматривая поведение переменных и постоянных издержек, необходимо очерчивать релевантный период: структура издержек, суммарные постоянные издержки и переменные издержки на единицу продукции неизменны лишь в определенном периоде и при определенном количестве продаж.
Далее, поскольку анализ «Издержки-Объем-Прибыль» требует разделения издержек на переменные и постоянные, при аналитических расчетах необходимо отделять одни издержки от других с помощью промежуточного финансового результата деятельности предприятия. Эту величину принято называть валовой маржей, результатом от реализации после возмещения переменных затрат суммой покрытия. Одной из главной целей менеджмента является максимизация валовой маржи, поскольку именно она является источником покрытия постоянных издержек и формирования прибыли.
Сила воздействия операционного рычага рассчитывается отношением валовой маржи к прибыли и показывает, сколько процентов изменения прибыли дает каждый процент изменения выручки.
Сила воздействия операционного рычага зависит от относительной величины постоянных издержек. Для предприятий, отягощенных громоздкими производственными фондами , высокая сила операционного рычага представляет значительную опасность: в условиях экономической нестабильности, падении платежеспособного спроса клиентов и сильнейшей инфляции каждый процент снижения выручки оборачивается катастрофическим падением прибыли и вхождением в зону убытков. Менеджмент оказывается «заблокированным», т.е. лишенным большей части выбора продуктивных решений.
Операционный анализ часто называют также анализом безубыточности, поскольку он позволяет вычислить такую сумму или количество продаж, при которой приход равен расходу. Бизнес не несет убытков, но не имеет и прибыли. Продажи ниже точки безубыточности влекут за собой убытки; продажи выше точки безубыточности приносят прибыль. Точка безубыточности - это тот рубеж, который предприятию необходимо перешагнуть, чтобы выжить. Поэтому точку безубыточности многие экономисты склонны называть порогом рентабельности. Чем выше порог рентабельности , тем труднее его перешагнуть. С низким порогом рентабельности легче пережить падение спроса на продукцию или услуги, отказаться от неоправданно высокой цены реализации. Снижение порога рентабельности можно добиться наращиванием валовой маржи (повышая цену и/или объем реализации, снижая переменные издержки), либо сокращением постоянных издержек.
Идеальные условия для бизнеса - сочетание низких постоянных издержек с высокой валовой маржей. Операционный анализ ищет наиболее выгодную комбинацию переменных и постоянных издержек, цены и физического объема реализации. Иногда решение заключается в наращивании валовой маржи за счет снижения цены и роста количество продаваемых товаров, иногда - в увеличении постоянных издержек (например, на рекламу) и опять же в увеличении количества продаж. Возможны и другие пути, но все они сводятся к поиску компромисса между переменными и постоянными издержками.
Как далеко планируемая выручка от реализации «убегает» от порога рентабельности, показывает запас финансовой прочности.
Для расчета порога рентабельности, силы воздействия операционного рычага и запаса финансовой прочности используется алгоритм вычислений, приведенный ниже. Он содержит ключевую информацию и расчетные показатели, необходимые для принятия главнейших финансовых решений. Алгоритм реализуется для объема продаж конкретного вида продукции (услуг). Все величины, участвующие в вычислениях, очищены от налога на добавленную стоимость и спецналога. Расчет начинают с разделения издержек на переменные и постоянные, т.к. без этого невозможно вычислить валовую маржу. Сопоставив ее с суммой выручки, получают коэффициент валовой маржи - долю валовой маржи в выручке от реализации. Постоянные издержки делят на коэффициент валовой маржи и получают порог рентабельности. Превышение фактической выручки от реализации над порогом рентабельности составляет запас финансовой прочности предприятия. Прогнозируемая прибыль рассчитывается умножением запаса финансовой прочности на коэффициент валовой маржи. В алгоритме присутствует также расчет силы воздействия операционного рычага.
Алгоритм расчета порога рентабельности, запаса финансовой прочности и силы воздействия операционного рычага
1. Валовая маржа:
(Выручка от реализации) - (Переменные издержки)
2. Коэффициент валовой маржи
(Валовая маржа) / (Выручка о реализации)
3. Точка безубыточности:
(Постоянные издержки) / (Коэффициент валовой маржи)
4. Запас финансовой прочности:
(Выручка от реализации) - (Точка безубыточности)
5. Прибыль:
(Запас финансовой прочности) * (Коэффициент валовой маржи)
6. Сила воздействия операционного рычага:
(Валовая маржа) / (Прибыль)
3.3.2. Обоснование проектных решений
Разрабатываемый модуль должен обеспечивать:
1) Расчет точки безубыточности;
2) Расчет эффекта экономического рычага;
3) Расчет запаса финансовой прочности;
4) Факторный анализ точки безубыточности.
5) Интерактивный, полноэкранный режим работы;
6) Протоколирование сеанса.
Необходимо обеспечить удобство работы с программой пользователю, не являющемуся программистом. Модуль также должен удовлетворять требованиям, предъявленным при интегрировании его в состав целостного продукта.
Обучение личного состава желательно проводить на рабочих местах, что позволяет снизить затраты и повысить эффективность обучения и контроля. Наиболее удобным в этом случае является использование ПЭВМ, установленных на рабочих местах обучаемых. В настоящее время ПЭВМ все шире используется в самых различных областях человеческой деятельности. Это привело к тому, что большинство государственных предприятий и частных фирм имеют в своем распоряжении рабочие места с установленными на них ПЭВМ. За использование ПЭВМ также говорит и то, что малые ЭВМ серии СМ, которые также можно рассматривать в качестве технического средства для реализации, не удовлетворяют пользователя по скорости работы и отсутствию удобства в интерфейсе. С другой стороны, использование больших супер-ЭВМ, обладающих высокой скоростью обработки данных, также является нецелесообразным из-за дефицита машинного времени и вычислительных ресурсов, разделяемых между задачами большой важности и срочности.
Кроме того, следует принять во внимание психологический аспект использования персональных ЭВМ, находящихся в подразделениях, особенно человеком, по роду профессиональных занятий не связанному с вычислительной техникой, гораздо проще, чем посещение занятий на специализированном стенде, где техника отделена от пользователя и общение с ней происходит через операторов и системных программистов.
По мнению разработчиков, сказанное выше является достаточным основанием для выбора профессиональной ПЭВМ в качества аппаратных средств. Это позволяет реализовать диалоговый режим реального времени, работу с цветными панелями и меню, использование звуковых эффектов и тому подобное.
Также в соответствии с требованиями к системе, изложенными выше, были выбраны и программные средства для разработки системы. Было решено проводить разработку в системе MSM Workstation 2.0 Пользовательский диалог в стиле Windows знаком многим пользователям ПЭВМ, удобен в работе , требует распространенной среды MS Windows, не требует для своей работы мощных аппаратных средств.
Более подробно требования к аппаратным средствам сформулированы ниже:
- персональная ЭВМ, совместимая с IBM PC AT с тактовой частотой процессора не ниже 40 МГц;
- наличие цветного графического адаптера VGA;
- оперативная память не менее 8 МБайт;
- наличие операционной системы MS Windows.
- наличие жесткого диска и дисководов для флоппи-дисков.
3.3.3 Разработка программной документации
Анализ точки безубыточности включает следующие блоки:
* Расчет точки безубыточности;
* Расчет эффекта экономического рычага;
* Расчет запаса финансовой прочности;
* Факторный анализ точки безубыточности.
Перед СКБ была поставлена задача анализа точки безубыточности. Поставленная задача была разбита на модули в соответствии со структурной схемой. Модули были распределены между членами СКБ следующим образом:

ИСПОЛНИТЕЛЬ
ТЕМА
Чихирев Р.Б.
Главный конструктор
Расчет точки безубыточности.
Баймеев Р.Х.
Заместитель главного конструктора по экономической части
Расчет эффекта экономического рычага.
Разработка интерфейсной части.
Базин В.В.
Расчет запаса финансовой прочности.
Сачков А.В.
Факторный анализ точки безубыточности.

Общая структура задачи приведена на рис. 3.3.1.
Автором настоящего ДП было произведено программирование задачи.
3.3.4. Результаты опытной эксплуатации игры и технические предложения по ее развитию
Модуль анализа точки безубыточности был разработан в полном объеме и отлажен по тестовым примерам расчетов.
Также по итогам опытной эксплуатации модуля разработчиками были сформулированы технически предложения по развитию системы, представленные ниже.
Программный комплекс должен в будущем создаваться совместными усилиями всех СКБ, что объясняется схожими потребностями будь то предприятие, общественная организация, медицинское учреждение или учебное заведение, а также пожеланиями консультанта.
Структура программного комплекса должна определяться требованиями Заказчика, спецификой предметной области и задачами, которые должен решать этот программный комплекс, в том числе:
- представлять теоретические сведения;
- в интерактивном режиме запрашивать необходимые исходные данные, производить расчеты и немедленно выводить результаты, что позволит изменяя значения параметров, определять зависимости;
- создать "дружественную" среду работающему пользователю, оставляя возможность в любой момент прекратить сеанс диалога с программой, предлагая производить необходимые действия в удобной для того форме, блокируя неразрешенные манипуляции, сопровождая работу постоянной помощью в виде подсказок и меню.
Одни из выше перечисленных функций должны быть реализованы отдельными программными модулями, другие реализуются параллельно другими модулями.
С учетом выше сказанного структура предполагает наличие следующих компонент:
- модуль главного меню;
- модуль ввода параметров системы;
- модуль ввода параметров системы;
- модуль расчета точки безубыточности;
- модуль расчета эффекта экономического рычага;
- модуль расчета запаса финансовой прочности;
- модуль факторного анализа точки безубыточности;
- модуль вывода расчетных значений;
- модуль работы с выходными данными в виде графика;
- модуль работы с выходными данными в аналитическом виде;
Для проверки корректности расчетов проводился тестовые примеры работы с модулем. Результаты представлены ниже.
Тестовые примеры работы с системой
Тестовые примеры подбирались следующим образом: Были взяты базовые (основные) параметры системы, а затем менялся один из параметров. Это позволило оценить правильность работы системы и собрать информацию для факторного анализа точки безубыточности.
Тестовый пример 1:
Взяты базовые параметры системы. Входные параметры системы, расчетные значения, таблица для построения графика на рис. 3.3.2., а график представлен и рис. 3.3.3.
Тестовый пример 2:
Взяты базовые параметры системы, за исключением розничной цены. Розничная цена увеличена вдвое относительно примера 1 . Входные параметры системы, расчетные значения, таблица для построения графика на рис. 3.3.4., а график представлен и рис. 3.3.5.
Тестовый пример 3:
Взяты базовые параметры системы, за исключением переменных издержек. Переменные издержки увеличены в полтора раза относительно примера 1 . Входные параметры системы, расчетные значения, таблица для построения графика на рис. 3.3.6., а график представлен и рис. 3.3.7.
Тестовый пример 4:
Взяты базовые параметры системы, за исключением постоянных издержек. Постоянные издержки уменьшены в два раза относительно примера 1 . Входные параметры системы, расчетные значения, таблица для построения графика на рис. 3.3.8., а график представлен и рис. 3.3.9.

Факторный анализ точки безубыточности
В результате моделирования выявлены следующие закономерности:
Точка безубыточности:
* Уменьшается при увеличении розничной цены (12500руб.-11111руб.);
* Увеличивается при увеличении переменных издержек (12500руб.-14286руб.);
* Уменьшается при уменьшении постоянных издержек (12500руб.-6250руб.).
Запас финансовой прочности:
* Увеличивается при увеличении розничной цены (37500руб.-88889руб.);
* Уменьшается при увеличении переменных издержек (37500руб.-35714руб.);
* Увеличивается при уменьшении постоянных издержек (37500руб.-43750руб.).
Сила воздействия операционного рычага:
* Уменьшается при увеличении розничной цены (1.33-1.13);
* Увеличивается при увеличении переменных издержек (1.33-1.40);
* Уменьшается при уменьшении постоянных издержек (1.33-1.14).
В ходе прогона тестовых примеров выявлены закономерности между входными параметрами системы и выходными (расчетными) значениями. Для каждого изменения входного параметра зафиксировано изменения расчетного значения. Эти изменения соответствуют физическому смыслу исследуемых значений. Это позволяет сделать о правильности работы системы на уровне прогона тестовых примеров.
Выводы по главе 3
В данной главе проекта содержатся описания разработок прикладных программных систем по курсам Гражданская оборона, экология и охрана труда и экономика, выполненных по заданиям соответствующих кафедр МИРЭА. Эти задания выполнены коллективом СКБ-2 дополнительно к основной работе - проектированию МО и СПО РИСК-2.
Перечисленные системы предназначены для использования в учебных целях - для выполнения лабораторных и практических работ по обучению, например для оценки последствий вторичных поражающих факторов землетрясений или исследований загрязнения атмосферы.
ГЛАВА 4. ОЦЕНКА ЭКОНОМИЧЕСКОЙ ЭФФЕКТИВНОСТИ И ПЕРСПЕКТИВЫ РАЗВИТИЯ ПРОЕКТА
4.1. Оценка экономической эффективности проекта
В этом разделе проекта анализируется экономическая эффективность разработки комплекса задач “Оценка эффективности функционирования военно-медицинского учреждения", описанного в главе 2. Для этого определяются затраты на разработку, цена ПП и экономия средств в результате его внедрения, после чего вычисляется ожидаемый и реальный экономический эффект.
4.1.1. Затраты (калькуляция темы)
При расчете затрат на разработку ПП учитываются следующие статьи калькуляции:
- затраты на материалы, покупные изделия, полуфабрикаты;
- основная заработная плата работающих;
- дополнительная заработная плата работающих;
- отчисления на социальное страхование;
- накладные расходы;
- прочие расходы.
Затраты по первой статье калькуляции приведены в таблице 4.1.
Затраты на покупные материалы, изделия и полуфабрикаты Таблица 4.1

Транспортные расходы составляют 5% от общей суммы, что равняется 500( 0,05 = 25 руб. Полные затраты на покупные материалы, изделия и полуфабрикаты — 500 + 25 = 525 руб.
Над созданием ПП работала группа из трёх человек:
- руководитель (оклад 800 руб., стоимость рабочего дня 880 / 22 = 40 )
- главный конструктор (студент, стипендия 350 руб., стоимость рабочего дня 352 / 22 = 16),
- консультант (оклад 2200 руб., стоимость рабочего дня 2200 / 22 = 100 ). Расчет основной заработной платы исполнителей по этапам работы содержится в таблице 4.2.
Дополнительная заработная плата составляет 10% от основной: 3801 ( 0,1 = 380,1 руб.
Отчисления на социальное страхование составляют 40,5% от суммы
основной и дополнительной заработных плат: (3801 + 380,1) ( 0,405 = 1693,34 руб.
К накладным расходам относятся затраты на управление организацией, на содержание и ремонт зданий, сооружений, инвентаря и др. Их сумму принимают равной 120% от основной заработной платы: 3801 ( 1,2 = 4561,2 руб.
Прочие расходы в данном случае представляют собой стоимость аренды машинного времени. Один час машинного времени стоит в среднем 1 руб. На разработку понадобилось 1200 часов, следовательно, прочие расходы составляют 1*1200 = 1200 рублей.
Основная заработная плата. Таблица 4.2.

Затраты на разработку по всем перечисленным статьям приведены в таблице 4.3.
Итоги по смете затрат. Таблица 4.3.

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

где СПП – себестоимость ПП (равная сумме затрат), Пн-нормативная прибыль(20% от себестоимости).
Цена с учетом НДС, составляющего 20% от расчетной цены, получается равной
14678.09 1.2 =17531.43
С учетом тиража в K=20 копий – ЦТПП = K ЦПП = 14678.09 20 = 293561.8
4.1.3. Экономическая эффективность программного продукта
Внедрение данного ПП приводит к экономии средств, которая является результатом снижения временных затрат на обслуживание. Экономия в течение года определяется по формуле:
Этг = Зс – За
где Зс — годовые затраты до внедрения ПП,
За — годовые затраты после внедрения ПП.
До разработки ПП учет данных производился в ручную. На анализ состояния одного больного тратится в среднем по 30 минут в день. В среднем в день необходимо обрабатывать Nг = 50 историй болезни; стоимость обработки одной истории болезни равна стоимости рабочего времени персонала. Средний оклад персонала - 500. Один час рабочего времени стоит 500/176 = 2,84 руб. Следовательно, для K рабочих мест:
Зс = (0.5 ( 200 ( 2,84) ( 260 ( 5 = 369200 руб.
Затраты на автоматизированную обработку данных в год вычисляются как
За = Nг ( T1 ( (Ца + Зоп) ( W ( K,
где Т1 — время обработки одной истории болезни (в среднем 1ч),
Ца — цена машинного времени (1 руб./ч),
Зоп — заработная плата оператора за один час работы (700 / 176 = 3,98 руб./ч),
W — количество рабочих дней в году (260),
К — количество копий ПП.
Таким образом, За = (50 ( 1 ( (1 + 3,98)) ( 260 ( 5 = 323700 руб.;
Этг = 369200 – 86405.1 = 292794.9 руб.
Ожидаемый годовой эффект вычисляется по формуле:
Эг = Этг – Ен ( КНИР ( К,
где Ен — нормативный коэффициент эффективности капитальных вложений,
равный 0,2,
КНИР — себестоимость разработки ПП, К — количество копий ПП.
Эг = 292794.9 – 0,2 (14179,61 ( 5 = 278615,29 руб.
Наконец, эффективность разработки определяется по формуле:

Поскольку Эр >? Ен, ПП можно считать экономически эффективным, а его разработку - оправданной.
4.2. Перспективы развития РИСК II и технические предложения по его развитию
4.2.1. Перспективы развития
Направлениями дальнейшего развития и совершенствования РИСК II. является создание автоматизированной системы управления всеми медицинскими учреждениями военного ведомства.
Анализ функций военных учреждений показал, что решение проблемы создания АСУ требует декомпозиции организационной структуры учреждений на ряд функциональных подсистем и автоматизации решения задач в рамках этих подсистем.
4.2.2. Технические предложения
Основные направления развития и совершенствования КЗ «Оценка эффективности функционирования военно-медицинского учреждения» могут включать в себя следующие:
* усовершенствование интерфейса пользователя;
* интеграция с АСУ «Тонус»;
* усовершенствование алгоритмов и оптимизация программ в целях ускорения вычислений и минимизации используемых вычислительных ресурсов ЭВМ;
* использование описанного математического аппарата в клинических исследованиях.
4.2.3. Проект технического задания на следующий этап разработки


"СОГЛАСОВАНО" "УТВЕРЖДАЮ"
Руководитель СКБ II, Зав. кафедрой СА и ПО АСУ
к.т.н., доцент профессор
___________ В.В. Радионов ________ Б.Д. Залещанский
"___"_____________ 1999 г "___"____________ 1999 г
ТЕХНИЧЕСКОЕ ЗАДАНИЕ
на дипломный проект
РИСК II. Математическое обеспечение оценки эффективности работы военного госпиталя
"СОГЛАСОВАНО" "СОГЛАСОВАНО"
Консультант по спецчасти Консультант по гражданской
к. м. н. обороне, к. т. н., доцент
___________ _________ В.И. Острейко
"___"_____________ 1999 г "___"_____________ 1999 г
"СОГЛАСОВАНО" "СОГЛАСОВАНО"
Консультант по охране труда, Консультант по организационно-
к.т.н., доцент экономической части, к. э. н., доцент
___________ С.М. Кучерук ________ Н.Д. Николаева
"___"_____________ 1999 г "___"_____________ 1999 г
"СОГЛАСОВАНО"
Главный конструктор СКБ II, Исполнитель, ИП-1-93
___________ ___________
"___"_____________ 1999 г "___"_____________ 1999 г


1999



1. ВВЕДЕНИЕ
Наименование дипломного проекта —
Дипломный проект выполняется в соответствии с исходными данными, выданными руководителем и консультантами проекта.
2. ОСНОВАНИЯ ДЛЯ РАЗРАБОТКИ
Основанием для выполнения дипломного проекта является учебный план по специальности 01.0200 "Прикладная математика", приказ о дипломном проектировании.
3. НАЗНАЧЕНИЕ РАЗРАБОТКИ
3.1. Цель дипломного проекта
3.1.1.Целью дипломного проекта является разработка распределенного интеллектуального синергетического комплекса (РИСК) II.
3.2. Задачи, решаемые в дипломном проекте
3.2.1. Разработка замысла, целей, направлений и этапов разработки РИСК II, организация взаимодействия исполнителей.
3.2.2. Системный анализ и синтез РИСК II.
3.2.3. Математическое и программное обеспечение комплекса задач “Оценка тяжести ранений”.
3.2.4. Математическое обеспечение автоматизированной обучающей системы по курсу “Гражданская оборона”.
3.2.5. Математическое обеспечение автоматизированной обучающей системы по курсу “Экология и охрана труда”.
3.2.6. Математическое обеспечение автоматизированной системы оценки финансового состояния предприятия по курсу “Экономика”.
3.2.7. Технико-экономические оценки и перспективы развития РИСК II.
ТРЕБОВАНИЯ К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ
Требования к надежности
4.2.1. Образец программного продукта должен удовлетворять поставленным исходным данным.
4.2.1. Образец программного продукта должен быть полностью отлажен, не иметь синтаксических и алгоритмических программных ошибок, работоспособность его должна быть проверена на уровне прогона тестового примера.
4.2.3. Образец программного продукта должен иметь защиту от ошибок оператора в интерактивном режиме работы.
4.3. Условия эксплуатации
Программный продукт, разрабатываемый в дипломном проекте, предполагает эксплуатацию пользователями различной квалификации. Требования к составу пользователей модулей программного обеспечения приводятся в соответствующих программных документах.
4.4. Требования к составу и параметрам технических средств
РИСК II должен строиться на базе неоднородной ЛВС с выходом в глобальные сети. Архитектура РИСК должна включать сетевые технические средства - ТСЛС, ПЭВМ семейства IBM-совместимых. В составе архитектуры должен быть предусмотрен стенд Главного конструктора.
4.5. Требования к информационной и программной совместимости
Программное обеспечение должно работать под управлением операционной системы MS Windows 95 версии 4.095 и более старших для персональных ЭВМ.
4.6. Требования к маркировке и упаковке
Требования к маркировке и упаковке определяются по ГОСТ 19.105-78.
5. ТРЕБОВАНИЯ К ПРОГРАММНОЙ ДОКУМЕНТАЦИИ
5.1. Дипломный проект должен состоять из расчетно-пояснительной записки объемом 100 страниц и графических материалов объемом 8 листов.
5.2. Расчетно-пояснительная записка должна иметь следующие составные части:
- системный анализ и синтез РИСК II;
- математическое обеспечение комплекса задач “Оценка тяжести ранений”
- математическое и программное обеспечение задачи конечного пользователя;
- технико-экономические оценки и перспективы развития РИСК II;
- список литературы;
- приложения.
5.3. Титульный лист, техническое задание, исходные данные и акт экспертизы оформляются в соответствии с ЕСКД, ЕСПД и требованиями кафедры в печатном виде.
5.4. Расчетно-пояснительная записка и приложения должны быть оформлены в соответствии с общими требованиями к текстовым документам по ГОСТ 2.105-79 на листах формата А4. Графические материалы должны быть выполнены на листах формата А1.
5.5. Программная документация на разрабатываемое программное обеспечение оформляется по ГОСТ 19.105-78.
6. ТЕХНИКО-ЭКОНОМИЧЕСКИЕ ПОКАЗАТЕЛИ
Разработка должна удовлетворять требованиям окупаемости. Экономическая эффективность должна быть подтверждена соответствующими расчетами.
7. СТАДИИ И ЭТАПЫ РАЗРАБОТКИ
7.1. Сроки выполнения дипломного проекта: сентябрь-январь 1998/99 учебного года.
7.2. Выполнение дипломного проекта должно проводиться в одну стадию, состоящую из 22 этапов:
1 этап
03.09.98
подготовка к Государственному экзамену по специальности;
2 этап
10.09.98
подготовка к Государственному экзамену по специальности;
3 этап
17.09.98
Государственный экзамен по специальности;
4 этап
24.09.98
20%;
5 этап
01.10.98
30%;
6 этап
10.10.98
40%;
7 этап
15.10.98
50%;
8 этап
22.10.98
60%;
9 этап
29.10.98
70%;
10 этап
05.11.98
80%;
11 этап
12.11.98
90%;
12 этап
19.11.98
100%;
13 этап
26.11.98
сдача методических пособий на кафедру, доклад
14 этап
03.12.98
допуск к предварительным испытаниям;
15 этап
10.12.98
предварительные испытания;
16 этап
17.12.98
устранение замечаний, выявленных в ходе предварительных испытаний;
17 этап
24.12.98
устранение замечаний, выявленных в ходе предварительных испытаний;
18 этап
06.01.99
устранение замечаний, выявленных в ходе предварительных испытаний;
19 этап
14.01.99
сдача комплексного дипломного проекта в переплет;
20 этап
21.01.99
предзащита;
21 этап
28.01.99
допуск к защите;
22 этап
04.02.99
защита дипломного проекта.

8. ПОРЯДОК КОНТРОЛЯ И ПРИЕМКИ
Контроль осуществляется на каждом этапе в соответствии со сроками, указанными в пункте 7.
Защита дипломного проекта проводится в составе СКБ 04.02.99г.
Исполнитель ______________
ПРИЛОЖЕНИЕ 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ДИПЛОМНЫЙ ПРОЕКТ


"СОГЛАСОВАНО"
"УТВЕРЖДАЮ"
Руководитель СКБ-2, к. т. н., доцент
Зав. кафедрой АСУ, профессор
___________ В.В. Радионов
___________ Б.Д. Залещанский
"___"__________ 1999 г.
"___"___________ 1999 г.

ТЕХНИЧЕСКОЕ ЗАДАНИЕ
на дипломный проект


РИСК II. Математическое обеспечение комплекса задач «Оценка эффективности функционирования военно-медицинского учреждения»

"СОГЛАСОВАНО"
 
"СОГЛАСОВАНО"
Консультант по спецчасти
 
Консультант по гражданской
обороне, к.т.н., доцент
______________ Ф.А. Дикушин
 
____________ В.И. Острейко
"___"_____________ 1998 г
 
"___"_____________ 1998 г.
 
 
 
"СОГЛАСОВАНО"
 
"СОГЛАСОВАНО"
Консультант по охране труда, к.т.н., доцент
 
Консультант по организационно- экономической части, к.э.н., доцент
___________ С.М. Кучерук
 
____________ Н.Д. Николаева
"___"_____________ 1998 г
 
"___"_____________ 1998 г
 
 
 
"СОГЛАСОВАНО"
 
 
Главный конструктор СКБ III,
 
Исполнитель, АП-1-93
___________ Р.Б. Чихирев
 
___________ Р.Б. Чихирев
"___"_____________ 1998 г
 
"___"_____________1998 г




1998



1. ВВЕДЕНИЕ

Наименование дипломного проекта – Математическое обеспечение КЗ «Оценка эффективности работы военно-медицинского учреждения».
Дипломный проект выполняется в соответствии с исходными данными, выдаваемыми руководителем и консультантами дипломного проекта.


2. ОСНОВАНИЯ ДЛЯ РАЗРАБОТКИ

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


3. НАЗНАЧЕНИЕ РАЗРАБОТКИ
3.1. Цель дипломного проекта

3.1.1.Целью дипломного проекта является разработка распределенного интеллектуального синергетического комплекса (РИСК) II.

3.2. Задачи, решаемые в дипломном проекте

3.2.1. Разработка замысла, целей, направлений и этапов разработки РИСК II, организация взаимодействия исполнителей.
3.2.2. Системный анализ и синтез РИСК II.
3.2.3. Математическое и программное обеспечение комплекса задач
3.2.4. Математическое обеспечение автоматизированной обучающей системы (АОС) по курсу «Гражданская оборона».
3.2.5. Математическое обеспечение автоматизированной обучающей системы (АОС) по курсу «Экология и охрана труда».
3.2.6. Математическое обеспечение автоматизированной системы по курсу «Экономика».
3.2.7. Технико-экономические оценки и перспективы развития РИСК II.


4. ТРЕБОВАНИЯ К ПРОГРАММНОМУ ОБЕСПЕЧЕНИЮ

4.1.Требования к функциональным характеристикам
Программный продукт, разрабатываемый в дипломном проекте, должен состоять из следующих основных частей:
- модуль по спецчасти;
- модуль по курсу «Гражданская оборона»;
- модуль АОС по курсу экология и «Охрана труда»;
- модуль системы по курсу «Экономика».

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

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

4.4. Требования к составу и параметрам технических средств
РИСК III должен строиться на базе неоднородной ЛВС с выходом в глобальные сети. Архитектура РИСК должна включать сетевые технические средства - ТСЛС, ПЭВМ семейства IBM-совместимых. В составе архитектуры должен быть предусмотрен стенд Главного конструктора.

4.5. Требования к информационной и программной совместимости
Программное обеспечение должно работать под управлением операционной системы MS DOS версии 3.30 и более старших для персональных ЭВМ.

4.6. Требования к маркировке и упаковке
Требования к маркировке и упаковке определяются по ГОСТ 19.105-78.

ТРЕБОВАНИЯ К ПРОГРАММНОЙ ДОКУМЕНТАЦИИ
5.1. Дипломный проект должен состоять из расчетно-пояснительной записки объемом 100 страниц и графических материалов объемом 8 листов.

5.2. Расчетно-пояснительная записка должна иметь следующие составные части:
- системный анализ и синтез РИСК II;
- математическое обеспечение автоматизированной системы управления (АСУ) для расчетов с населением за коммунальные услуги.
- математическое и программное обеспечение задачи конечного пользователя;
- технико-экономические оценки и перспективы развития РИСК II;
- список литературы;
- приложения.

5.3. Титульный лист, техническое задание, исходные данные и акт экспертизы оформляются в соответствии с ЕСКД, ЕСПД и требованиями кафедры в печатном виде.

5.4. Расчетно-пояснительная записка и приложения должны быть оформлены в соответствии с общими требованиями к текстовым документам по ГОСТ 2.105-79 на листах формата А4. Графические материалы должны быть выполнены на листах формата А1.

5.5. Программная документация на разрабатываемое программное обеспечение оформляется по ГОСТ 19.105-78.


6. ТЕХНИКО-ЭКОНОМИЧЕСКИЕ ПОКАЗАТЕЛИ

Разработка должна удовлетворять требованиям окупаемости. Экономическая эффективность должна быть подтверждена соответствующими расчетами.


7. СТАДИИ И ЭТАПЫ РАЗРАБОТКИ

7.1. Сроки выполнения дипломного проекта: сентябрь-январь 1998/99 учебного года.

7.2. Выполнение дипломного проекта должно проводиться в одну стадию, состоящую из 22 этапов:

1 этап
1.09.98
подготовка к Государственному экзамену по специальности;
2 этап
8.09.98
подготовка к Государственному экзамену по специальности;
3 этап
15.09.98
Государственный экзамен по специальности;
4 этап
22.09.98
20%;
5 этап
29.09.98
30%;
6 этап
6.10.98
40%;
7 этап
13.10.98
50%;
8 этап
20.10.98
60%;
9 этап
27.10.98
70%;
10 этап
3.11.98
80%;
11 этап
10.11.98
90%;
12 этап
17.11.98
100%;
13 этап
24.11.98
сдача методических пособий на кафедру, доклад
14 этап
1.12.98
допуск к предварительным испытаниям;
15 этап
8.12.98
предварительные испытания;
16 этап
15.12.98
устранение замечаний, выявленных в ходе предварительных испытаний;
17 этап
22.12.98
устранение замечаний, выявленных в ходе предварительных испытаний;
18 этап
5.01.99
устранение замечаний, выявленных в ходе предварительных испытаний;
19 этап
12.01.99
сдача комплексного дипломного проекта в переплет;
20 этап
19.01.99
предзащита;
21 этап
26.01.99
допуск к защите;
22 этап
2.02.99
защита дипломного проекта.
 
8. ПОРЯДОК КОНТРОЛЯ И ПРИЕМКИ

Контроль осуществляется на каждом этапе в соответствии со сроками, указанными в пункте 7.
Защита дипломного проекта проводится в составе СКБ 2.02.99г.
ПРИЛОЖЕНИЕ 2. ПРОГРАММНАЯ ДОКУМЕНТАЦИЯ ПРОФЕССИОНАЛЬНОЙ ЗАДАЧИ
ПРИЛОЖЕНИЕ 2. ПРОГРАММНАЯ ДОКУМЕНТАЦИЯ К ПРОФЕССИОНАЛЬНОЙ ЗАДАЧЕ

УТВЕРЖДАЮ

Зав. кафедрой СА и ПО АСУ
д. т. н., проф.,

______________Б.Д. Залещанский

"___"________________ 1998 г.


КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения”
Программа и методика испытаний
ЛИСТ УТВЕРЖДЕНИЯ
( дискета 3 дюйма 1440Кб )
Листов ______


Исполнитель

___________ Р.Б. Чихирев

"____" _______________ 1998 г.



Нормоконтролер



"____" _______________ 1998 г.


1998
Литера



УТВЕРЖДЕН
КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения”
Программа и методика испытаний
дискета 3 дюйма 1440Кб )
Листов ______


1998
Литера



СОДЕРЖАНИЕ
1. Объект испытаний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Цель испытаний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Состав предъявляемой документации. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. Технические требования. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5. Методы испытаний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


1. ОБЪЕКТ ИСПЫТАНИЙ
Объектом испытаний является комплекс задач “Оценка эффективности функционирования военно-медицинского учреждения”
2. ЦЕЛЬ ИСПЫТАНИЙ
Цель испытаний - определить удовлетворяет ли программа, представленная разработчиком, требованиям сформулированным в ТЗ; выявить недостатки в программе и возможные недоработки для их последующего устранения.
3. СОСТАВ ПРЕДЪЯВЛЯЕМОЙ ДОКУМЕНТАЦИИ
В состав документации, предъявляемой при проведении испытаний входят:
* руководство системного программиста;
* руководство программиста;
* руководство оператора.
4. ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ
4.1. Требования к программной документации
Документация на программу должна быть разработана в соответствии с требованиями ЕСПД.
4.2. Требования к техническим характеристикам
Требования к совместимости:
система должна функционировать на любой ПЭВМ с архитектурой микропроцессора 80486, на которой функционирует операционная система MS Windows 95 или NT 4.0 и выше.
Программа должна предоставлять пользователю следующие услуги:
ввод входного массива статистических данных из файла в формате Excel 5.0;
редактирование данных в таблице;
работу с буфером обмена операционной системы;
сохранение данных в файле формата MS Excel 5.0 ;
нормирование данных;
расчет корреляционной матрицы признаков объектов;
расчет матрицы связей параметров объектов с главными компонентами;
расчет вклада главных компонент в общую дисперсию;
получение значений главных компонент для каждого объекта, по его признакам;
формирование отчета о результатах расчетов;
настройка параметров выводимого отчета.
Испытания правильности функционирования программы проводятся с помощью тестов по специально разработанному сценарию. Состав технических и программных средств, необходимых для проведения испытаний следующий:
ПЭВМ Intel 80486
ОС MS Windows 95
Если в процессе испытаний обнаружены неисправности технических средств, разрешается повторный запуск шага испытаний по программе.
При обнаружении ошибок, которые не могут быть устранены без прерываний испытаний, испытания прерываются и возобновляются после устранения ошибок.
Система считается выдержавшей испытания, если содержание результатов испытаний совпадают с эталонными результатами.
5. МЕТОДЫ ИСПЫТАНИЙ
Описания проверок с указанием результатов проведения испытаний сведены в таблицу:
Содержание
проверки
Выполняемые действия
Эталонный результат
ввод входного массива статистических данных из файла в формате Excel 5.0;

при помощи команды меню «Файл»\«Открыть…» выбрать в стандартном диалоговом окне Windows нужный файл в формата Excel 5.0 \95 с расширением и нажать кнопку ОК.
Содержимое рабочей книги Excel появится в главном окне программы в виде рабочей книги с листами
редактирование данных в ячейке
подвести курсор к нужной ячейке таблицы
нажав клавишу Backspace удалить данные
ввести новое содержимое ячейки с клавиатуры
В ячейке таблицы новое содержимое
работу с буфером обмена операционной системы;
при помощи мыши выделить диапазон ячеек в таблице;
используя команды меню «Правка» вырезать или скопировать данные в буфер обмена;
используя команду меню «Правка»\«Вставить» вставить данные в предварительно указанную мышью область рабочего листа
В месте указанном курсором появится содержимое буфера обмена
сохранение данных в файле формата MS Excel 5.0 ;

использовать команду меню «Файл»\«Сохранить»
Данные из текущей рабочей книги сохранятся в файле с указанным именем. Это можно проверить используя программу MS Excel
настройка компонент отчета
используя команду меню «Настройки»\ «Отчет…» отметить в появившемся диалоговом окне галочками те компоненты, которые Вы желаете в нем видеть в отчете
появление диалогового окна со списком компонент отчета
выполнение расчета
выделить мышью диапазон ячеек, над которыми Вы желаете произвести расчеты методом главных компонент, при этом первый столбец и первая строка выделенной матрицы будет использоваться для идентификации объектов и параметров соответственно

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



УТВЕРЖДАЮ

Зав. кафедрой СА и ПО АСУ
д. т. н., проф.,

______________Б.Д. Залещанский

"___"________________ 1998 г.

КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения
Руководство системного программиста
ЛИСТ УТВЕРЖДЕНИЯ
( дискета 3 дюйма 1440Кб)
Листов ______


Исполнитель

___________ Р.Б. Чихирев

"____" _______________ 1998 г.



Нормоконтролер



"____" _______________ 1998 г.


1998
Литера



УТВЕРЖДЕН
ПС 50337-01 32
КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения”
Руководство системного программиста
Листов ______


1998
Литера

АННОТАЦИЯ
Настоящее руководство содержит сведения, необходимые для обеспечения действий системного программиста при настройке и работе с системой “Оценка эффективности функционирования военно-медицинского учреждения”.
В документе содержатся общие сведения о системе и ее структуре, описан порядок проверки и настройки системы, а также восстановления после возможного сбоя.

СОДЕРЖАНИЕ
1. Общие сведения о системе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Настройка системы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Проверка работоспособности системы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. Поддержка целостности. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1. ОБЩИЕ СВЕДЕНИЯ О СИСТЕМЕ
Комплекс задач “Оценка эффективности функционирования военно-медицинского учреждения” предназначена для автоматизации обработки статистического материала о работе отделений медицинского учреждения для облегчения его анализа и формирования текущей отчетности.
2. НАСТРОЙКА СИСТЕМЫ
Комплекс задач “Оценка эффективности функционирования военно-медицинского учреждения” является автономной системой. Она разработана с использованием средств Borland C++ Builder, поставляется в виде дистрибутива способна функционировать самостоятельно без необходимости установки самой Borland C++ Builder.
Для запуска системы:
вставьте дистрибутивную дискету в дисковод 3.5”;
нажмите кнопку «Пуск» на панели задач;
выберете команду «Выполнить…»;
в строке «Открыть:» напечатайте «A:\setup», где A – буква вашего дисковода;
нажмите ОК.
В процессе установки программы Вам будет предложено выбрать следующие параметры:
каталог для установки;
программную группу;
имя пользователя.
После установки программы необходимо настроить на нужные рабочие каталоги используя меню «Настройки»\ «Каталоги».
3. ПРОВЕРКА РАБОТОСПОСОБНОСТИ СИСТЕМЫ
Проверка работоспособности осуществляется прогоном тестовых примеров. Подробно все действия, осуществляемые при запуске программы и прогоне тестовых примеров, представлены в Методике испытаний.
4. ПОДДЕРЖКА ЦЕЛОСТНОСТИ
Программа имеет защиту от неправильных действий оператора и специальных мер по поддержанию целостности базы данных не требуется. Возможна ситуация, когда во время работы программы произойдет аппаратный сбой.
Для избежания более сложных случаев потери целостности базы данных рекомендуется регулярно производить архивное копирование.



УТВЕРЖДАЮ

Зав. кафедрой СА и ПО АСУ
д. т. н., проф.,

______________Б.Д. Залещанский

"___"________________ 1998 г.

КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения”
Руководство программиста
ЛИСТ УТВЕРЖДЕНИЯ
( дискета 3 дюйма 1440Кб )
Листов ______


Исполнитель

___________ Р.Б. Чихирев

"____" _______________ 1998 г.



Нормоконтролер



"____" _______________ 1998 г.


1998
Литера




УТВЕРЖДЕН
ПС.50337-01 3
КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения”
Руководство программиста
Листов ______


1998
Литера


АННОТАЦИЯ
Настоящее руководство содержит сведения, необходимые для обеспечения действий программиста при работе с системой “Оценка эффективности функционирования военно-медицинского учреждения”. В документе содержатся общие сведения о структуре системы и структуре базы данных.


СОДЕРЖАНИЕ
1. Назначение и условия применения системы . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Характеристики системы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Обращение к системе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. Входные и выходные данные. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .



1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ СИСТЕМЫ
Комплекс задач “Оценка эффективности функционирования военно-медицинского учреждения” состоит из нескольких частей:
2. ХАРАКТЕРИСТИКИ ПРОГРАММЫ
Комплекс задач разработан в системе Borland C++ Builder. Аппаратная платформа, на которой разрабатывалась система - Intel x86. Операционная среда - MS-Widows 95 / NT 4.0 или выше.
3. ОБРАЩЕНИЕ К ПРОГРАММЕ
Для запуска программы необходимо в через кнопку «Пуск» на панели задач выбрать в системном меню Программы\PCM.
4. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ
Входными данными для программы являются числовые массивы, содержащиеся в файлах формата Excel 5.0. Для расчета неоходимо выделить диапазон ячеек в таблице и выполнить команду основного меню Данные\Расчитать.




«УТВЕРЖДАЮ»

Зав. кафедрой СА и ПО АСУ
д. т. н., проф.,

______________Б.Д. Залещанский

"___"________________ 1998 г.

КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения”
Руководство оператора
ЛИСТ УТВЕРЖДЕНИЯ
Листов ______


Исполнитель

___________ Р.Б. Чихирев

"____" _______________ 1998 г.



Нормоконтролер



"____" _______________ 1998 г.



1998
Литера



УТВЕРЖДЕН
ПС. 50337-01 34 ЛУ
КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения”
Руководство оператора
Листов ______
ПС. 50337-01 34


1998
Литера

СОДЕРЖАНИЕ
1. Назначение системы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Условия выполнения системы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Функционирование системы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. Перечень системных сообщений. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

АННОТАЦИЯ
Настоящий документ определяет функциональные возможности системы и порядок работы оператора с ней. Данное руководство также содержит сведения об условиях выполнения системы и перечень системных сообщений.
НАЗНАЧЕНИЕ СИСТЕМЫ
Комплекс задач “Оценка эффективности функционирования военно-медицинского учреждения” предназначен для автоматизации обработки статистического материала о
Программа должна предоставляет пользователю следующие возможности:
* ввод входного массива статистических данных из файла в формате Excel 5.0;
* редактирование данных в таблице;
* работу с буфером обмена операционной системы;
* сохранение данных в файле формата MS Excel 5.0 ;
* нормирование данных;
* расчет корреляционной матрицы признаков объектов;
* расчет матрицы связей параметров объектов с главными компонентами;
* расчет вклада главных компонент в общую дисперсию;
* получение значений главных компонент для каждого объекта, по его признакам;
* формирование отчета о результатах расчетов;
* настройка параметров выводимого отчета.

УСЛОВИЯ ВЫПОЛНЕНИЯ СИСТЕМЫ
КЗ “Оценка эффективности функционирования военно-медицинского учреждения” предназначена для функционирования ПЭВМ типа IBM PC с операционной системой MS-Windows 95 / NT 4.0 или выше.
Для работы программы необходимо 8 М Байт оперативной памяти, 2Мбайта пространства на жестком диске для размещения программы и дополнительное место для хранения базы данных. Дополнительные требования к ресурсам компьютера зависят от размерности решаемой задачи и ожидаемой скорости работы.
Разработка и тестирование системы “Оценка эффективности функционирования военно-медицинского учреждения” велась на ПЭВМ на базе процессора AMD К5-PR133 с объемом оперативной памяти 64MB, объемом жесткого диска 1300MB под операционной системой Windows-95.
ФУНКЦИОНИРОВАНИЕ СИСТЕМЫ
Система работает в условиях интерактивного режима. Сеанс работы оператора состоит из следующих этапов (некоторые из них могут быть опущены или меняться местами):
-запуск системы;
-открытие файла с данными или создание новой таблицы;
-редактирование массива данных;
-настройка параметров отчета;
-выбор таблицы для расчета;
-вычисления;
-просмотр и возможное сохранение результатов в файле.
-печать отчета.
Запуск системы осуществляется через меню Пуск\Программы\PCM панели задач.
Выполнение указанной последовательности действий приводит к возникновению на экране ПЭВМ главного окна программы, внешний вид которого изображен на рис 1.

Для открытия файла с данными можно воспользоваться командой
основного меню Файл\Открыть или соответствующей кнопкой на панели инструментов.
Редактирование данных возможно при помощи команд меню группы Правка Вырезать, Вставить, Удалить, Копировать или кнопок панели инструментов .
Для настройки параметров сформированного после вычислений отчета необходимо воспользоваться командой «Настройки\Отчет…» Перед Вами появится диалоговое окно см. Рис. 2. В данном диалоговом окне требуется отметить те компоненты, которые вы желаете видеть в отчете.

Рис. 2. Диалоговое настройки параметров отчета
Перед тем как запустить вычисления главных компонент необходимо выделить мышью тот массив данных, который будет характеризовать объекты исследования (в нашем случае это отделения госпиталя). При этом в выделенном массиве сверху вниз будут изменяться объекты, а слева направо - их показатели.
Первый и первая строка выделяемого массива используются для идентификации объектов и их параметров соответственно. Пример правильно выделенной области показан на Рис. 3.
После того, как данные выделены, необходимо запустить вычисления по алгоритму метода при помощи команды меню Данные\Расчитать или кнопки на панели инструментов. В результате перед пользователем появится панель хода выполнения процесса, (Рис.3.)

Рис.3. Диалоговое окно хода выполнения процесса
которая показывает состояние вычислений на данный момент. Пользователь в любой момент может прервать расчет, нажав кнопку «Отмена».
ПЕРЕЧЕНЬ СИСТЕМНЫХ СООБЩЕНИЙ

Сообщение
Возможная причина
Методы устранения
1. Не могу открыть файл.
Неверный формат или версия выбранного файла. Данный программный продукт в данной его версии не поддерживает форматы файлов MS Excel версий после 5.0.
Попробуйте, используя Excel сохранить файл в более раннем формате, а потом попробуйте снова.
Еще один выход – это получить данные, используя буфер обмена.
2.Неверный формат ячейки
Все данные в выделенной для расчета области должны иметь числовой формат, или должны приводиться к нему. В указанной области (кроме первого столбца и первой строки диапазона) присутствуют данные, которые нельзя интерпретировать как численные. Часто это бывает в случаях, когда в качестве разделителя десятичной дроби присутствует запятая. Данная программа воспринимает в качестве разделителя только точку.
Привести данные в ячейке к требуемому виду
3. Деление на ноль
В указанных данных присутствуют показатели с нулевой дисперсией.
Не включать в используемый массив показатели, значение которых постоянны от объекта к объекту.



«УТВЕРЖДАЮ»

Зав. кафедрой СА и ПО АСУ
д. т. н., проф.,

______________Б.Д. Залещанский

"___"________________ 1998 г.

КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения”
Тексты программ
ЛИСТ УТВЕРЖДЕНИЯ
( дискета 3 дюйма 1440Кб )
Листов ______


Исполнитель

___________ Р.Б. Чихирев

"____" _______________ 1998 г.



Нормоконтролер



"____" _______________ 1998 г.



1998
Литера



УТВЕРЖДЕН
КОМПЛЕКС ЗАДАЧ
“Оценка эффективности функционирования военно-медицинского учреждения”
Тексты программы
( дискета 3 дюйма 1440Кб )
Листов ______


1998
Литера
//------------------------------------------------------------------------
// Файл Vector.h
//------------------------------------------------------------------------
// Объект вещественный вектор произвольного размера
#ifndef VectorH
#define VectorH
#include "Matrix.h"
#include
class TVector{
public:
friend class TMatrix;
friend class TSquareMatrix;
friend class ifstream;
friend class ofstream;
TVector(int size);
TVector(const TVector& v);
void SetAll(double value);
~TVector();
int GetSize()const {return n;}
double& operator[](int i);
friend TVector operator * ( const TVector&, const TMatrix&);
// Поэлементное произведение
friend TVector operator & ( const TVector&, const TVector&);
// Скалярное произведение
friend double operator * ( const TVector&, const TVector&);
// Векторное произведение
//friend TVector operator ^ ( const TVector&, const TVector&);
friend ostream& operator << ( ostream&,const TVector&);
friend istream& operator >> ( istream&,TVector&);
protected:
double *x;
int n;
};
//-------------------------------------------------------------------------
#endif

//-------------------------------------------------------------------------
// Файл Vector.cpp
//-------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Vector.h"
#include
//
// Конструкторы класса
//
TVector::TVector(int size)
{
x = new double [size];
n = size;
}
//
// Конструктор копии
//
TVector::TVector(const TVector& v)
{
x = new double [v.n];
n = v.n;
for(int i=0;i x[i]=v.x[i];
}
//
// Деструктор класса
//
TVector::~TVector()
{
delete []x;
}
//
// Оператор доступа по индексу
//
double& TVector::operator [] (int i)
{
if(i<0||i>=n)
throw Exception("TVector::operator[]: illegal index");
return x[i];
}
//
// Друзья
//
//
// Поэлементное произведение
//
TVector operator & (const TVector &v,const TVector &u)
{
if(v.n!=u.n)
throw Exception("TVector operator &: illegal sizes");
TVector res(v.n);
for(int i=0;i res.x[i]=v.x[i]*u.x[i];
return res;
}
//
//Скалярное произведение векторов
//
double operator * (const TVector &v, const TVector &u)
{
if(v.n!=u.n)
throw Exception("TVector operator &: illegal sizes");
double res=0;
for(int i=0;i res+=v.x[i]*u.x[i];
return res;
}
//
// Потоковый ввод
//
ostream& operator << (ostream& out,const TVector& v)
{
for(int i=0;i out << v.x[i]<< (i!=v.n?'\t':'\n');
return out;
}
//
// Потоковый вывод
//
istream& operator >> (istream& in, TVector& v)
{
for(int i=0;i in >> v.x[i];
return in;
}
//-------------------------------------------------------------------------

//---------------------------------------------------------------------------
// Файл Matrix.h Объект Матрица c вещественными элементами
//---------------------------------------------------------------------------
#ifndef MatrixH
#define MatrixH
#include
//#include
#include
#include "Vector.h"
class TMatrix {
public:
friend class ostream;
friend class istream;
friend class TVector;
TMatrix(int r,int c);
TMatrix(TMatrix& m);
TMatrix(int size, double value);
~TMatrix();
int GetNumRows()const {return r;}
int GetNumCols()const {return c;}
double& operator ()(int i,int j);
TMatrix& operator = (const TMatrix &m);
void SetAll(double value);
double RowElemsSum (int r);
double ColElemsSum (int c);
TMatrix& Transpose();
//***********************************
// Арифметические операции
//
TMatrix& operator += (const TMatrix&);
TMatrix& operator -= (const TMatrix&);
TMatrix& operator *= (double);
TMatrix& operator /= (double);
TMatrix& operator += (double);
TMatrix& operator -= (double);
friend TMatrix operator + ( const TMatrix&, const TMatrix&);
friend TMatrix operator - ( const TMatrix&, const TMatrix&);
friend TMatrix operator * ( const TMatrix&, double);
friend TMatrix operator * ( const TMatrix&, const TMatrix&);
friend TVector operator * ( const TVector&, const TMatrix&);
//******************
// Ввод/вывод
//
friend ostream& operator << (ostream& out, const TMatrix& m);
friend istream& operator >> (istream& in, TMatrix& m);
//
// Статистические функции.
// Подразумевается, что первая координата в матрице -
// это номер измерения, а вторая - номер параметра.
//
void Average(TVector& vA); // Оценка среднего
void Dispersion(TVector& vD, TVector& vA); // Несмещенная оценка дисперсии
void Normalize(TMatrix& mN, TVector& vD, TVector& vA); // Нормализация данных
double Norm();
protected:
double ** x;// указатель на данные
int r;// количество рядов
int c; // количество столбцов
};
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------
#include
#pragma hdrstop
//#define DEBUG
#include "Matrix.h"
// Конструктор
TMatrix::TMatrix(int rnum,int cnum)
{
if(rnum<2||cnum<2||rnum > 32000||cnum>32000)
throw Exception("Matrix: illegal matrix ranges");
x = new double*[rnum];
for(int i=0;i x[i]=new double[cnum];
c = cnum;
r = rnum;
}
//
// Конструктор копии
//
TMatrix::TMatrix(TMatrix &m)
{
x = new double*[m.r];
for(int i=0;i x[i]=new double[m.c];
for(int j = 0;j x[i][j] = m.x[i][j];
}
c = m.c;
r = m.r;
}
//
// Оператор присваивания
//
TMatrix& TMatrix::operator = (const TMatrix& m)
{
for( int i = 0; i for(int j=0; j x[i][j] = m.x[i][j];
return *this;
}
//
// Деструктор
//
TMatrix::~TMatrix()
{
for(int i=0;i delete []x[i];
delete []x;
r = 0;
c = 0;
}
//
// Оператор доступа по индексу
//
double& TMatrix::operator ()(int i,int j)
{
if(i<0 || i>=r || j<0 || j>=c)
throw Exception("TMatrix operator(): illegal index");
return x[i][j];
}
//
// Присваивает всем элементам массива одно и то же значение
//
void TMatrix::SetAll(double value)
{
for(int i=0;i for(int j=0;j x[i][j]=value;
}
//
// Сумма элементов строки
//
double TMatrix::RowElemsSum (int rn)
{
double pos=0;
double neg=0;
for(int i=0;i if(x[rn][i]>0)
pos+=x[rn][i];
else
neg+=x[rn][i];
return pos+neg;
}
//
// Сумма элементов столбца
//
double TMatrix::ColElemsSum (int cn)
{
double pos=0;
double neg=0;
for(int i=0;i if(x[i][cn]>0)
pos+=x[i][cn];
else
neg+=x[i][cn];
return pos+neg;
}
//
// Транспонирование матрицы
//
TMatrix& TMatrix::Transpose()
{
int t;
double **nx = new double*[c];
for(int i=0;i nx[i] = new double[r];
for(int j=0;j nx[i][j]=x[j][i];
}
}
for(int i=0;i delete []x[i];
delete[]x;
x = nx;
t=r;r=c;c=t;
return *this;
}
//
//
//
TMatrix& TMatrix :: operator += ( double d)
{
for( int i =0;i for( int j =0; j x[i][j] +=d;
return *this;
}
TMatrix& TMatrix :: operator -= ( double d)
{
for( int i =0;i for( int j =0; j x[i][j] -=d;
return *this;
}
TMatrix& TMatrix :: operator += ( const TMatrix& A)
{
if(r!=A.r||c!=A.c)
throw Exception("TMatrix::operator +=: Illegal TMatrix size");
for( int i =0;i for( int j =0; j x[i][j] +=A.x[i][j];
return *this;
}
TMatrix& TMatrix::operator -= ( const TMatrix& A)
{
if(r!=A.r||c!=A.c)
throw Exception("TMatrix::operator -=: Illegal TMatrix size");
for( int i =0;i for( int j =0; j x[i][j] -=A.x[i][j];
return *this;
}
TMatrix& TMatrix::operator *= ( double v)
{
for( int i =0;i for( int j =0; j x[i][j] *=v;
return *this;
}
TMatrix& TMatrix::operator /= ( double v)
{
if( v == 0 )
throw Exception("TMatrix operator /=: devision by zero");
for( int i =0;i for( int j =0; j x[i][j] /=v;
return *this;
}
// Найти вектор вредних
void TMatrix:: Average(TVector& vA)
{
for(int i=0; i< c;i++){
vA[i] = ColElemsSum(i)/r;
}
}
// Найти вектор несмещенной оченки дисперсии
void TMatrix:: Dispersion(TVector& vD, TVector& vA)
{
double d;
for(int i=0; i< c;i++){
vA[i] = ColElemsSum(i)/r;
vD[i] = 0;
for(int j=0; j< r; j++){
d = (x[j][i]-vA[i]);
vD[i] += d*d;
}
vD[i]/=r; // Смещенное среднее
}
}
// Вычисляет нормализованные случайные величины,
// вектор средних и дисперсию
void
TMatrix::Normalize(TMatrix& mNormalData,TVector& vDispersion,TVector& vAverage)
{
if(mNormalData.GetNumRows()!=r || mNormalData.GetNumCols()!=c)
throw Exception("Illegal matrix size in TMatrix::Normalize()");
if(vDispersion.GetSize()!= c || vAverage.GetSize()!= c)
throw Exception ("Illegal vector size in TMatrix::Normalize()");
int i,j;
#ifdef DEBUG
ofstream fout("Matrix.txt");
fout << "\tTMatrix::Normalize:" << endl;
#endif
double ss; // Среднеквадратическое отклонение
for(i=0; i vAverage[i]=ColElemsSum(i)/r;
vDispersion[i] = 0;
for( j = 0; j < r; j ++ ){
(mNormalData)(j,i) = x[j][i]-(vAverage)[i]; // Центрировать СВ
(vDispersion)[i]+=(mNormalData)(j,i)*(mNormalData)(j,i); // Возвести в квадрат
}
(vDispersion)[i] /= r; // Посчитать дисперсию
ss = sqrt((vDispersion)[i]); // Ср.-квадратичное отклонение
for(j=0; j (mNormalData)(j,i) /= ss; //
}
}
}
//
// Норма Фробениуса ( сумма квадратов элементов)
//
double TMatrix::Norm()
{
double result=0;
for(int i=0; i < r; i++ )
for(int j=0; j < c; j++ )
result+= x[i][j]*x[i][j];
return result;
}
//
// Перегрузка арифметических операторов
//
TMatrix operator + ( const TMatrix& A, const TMatrix& B)
{
TMatrix res(A.r, A.c );
if(B.r!=A.r||B.c!=A.c)
throw Exception("TMatrix::operator +: Illegal TMatrix size");
for( int i =0;i for( int j =0; j res.x[i][j] = A.x[i][j]+B.x[i][j];
return res;
}
//
//
//
TMatrix operator - ( const TMatrix& A, const TMatrix& B)
{
if(B.r!=A.r||B.c!=A.c)
throw Exception("TMatrix::operator -: Illegal TMatrix size");
TMatrix res(A.r,A.c);
for( int i =0; i < A.r; i++)
for( int j =0; j < A.c; j++)
res.x[i][j] = A.x[i][j] - B.x[i][j];
return res;
}
//
// Оператор умножения матриц
//
TMatrix operator * ( const TMatrix& A,const TMatrix& B)
{
if(A.c!=B.r)
throw Exception(
"TMatrix::operator *: Illegal TMatrix size");
TMatrix res(A.r,B.c);
for( int i =0;i for(int j=0;j {
res.x[i][j] = 0;
for( int k =0; k < A.c; k++)
res.x[i][j] +=A.x[i][k]*B.x[k][j];
}
return res;
}
//
// Умножение матрицы на число
//
TMatrix operator * (const TMatrix& A, double v)
{
TMatrix res(A.r,A.c);
for(int i=0;i for(int j=0;j res.x[i][j] = A.x[i][j]*v;
return res;
}
//
// Умножение вектора на матрицу
//
TVector operator * (const TVector& v, const TMatrix& M)
{
TVector res(M.c);
for(int i = 0;i res[i] = 0;
for(int k=0;k res[i]+=v.x[k]*M.x[k][i];
}
return res;
}
//********************** Воод/вывод**********************
ostream& operator << (ostream& out, const TMatrix& m)
{
for( int i = 0; i for(int j =0; j out << m.x[i][j] << (j==m.c?"":"\t");
out << endl;
}
return out;
}
istream& operator >> (istream& in, TMatrix& m)
{
for( int i = 0; i for( int j = 0; j in >> m.x[i][j];
return in;
}
//---------------------------------------------------------------------------

//
// Квадратная матрица
//
//---------------------------------------------------------------------------
#ifndef SquMatrH
#define SquMatrH
#include
//#include
#include "Matrix.h"
class TSquareMatrix : public TMatrix
{
public:
friend TMatrix;
// Конструкторы
TSquareMatrix(int size):TMatrix(size,size){}
// Создает диагональную матрицу размера (size X size)
TSquareMatrix(int size,double value);
// Произведение векторов
TSquareMatrix(const TVector& v, const TVector& u);
// Произведение матриц
TSquareMatrix(const TMatrix& v,const TMatrix& u);
// QR-разложение матрицы
void QRExpansion(TSquareMatrix &q, TSquareMatrix &r);
// Сумма диагональных элементов
double UnderDiagonalSquareSum();
TSquareMatrix& Rotate(int i,int j,double cos,double sin);
// создает матрицу поворота вокруг оси XkOXl
TSquareMatrix& MakeRotate(int k,int l,double cos,double sin);
// Оператор умножения матрицы на матрицу той же размерности
TSquareMatrix& operator *= (TSquareMatrix &m);
TSquareMatrix& Transpose();
TSquareMatrix& SetDiagonal(double );
TSquareMatrix& Multiple(const TMatrix& m, const TMatrix& n);
double Trace();
};
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "SquMatr.h"
//#define DEBUG
#ifdef DEBUG
ofstream fout("SquMatr.txt");
#endif
//

// Конструктор
//
TSquareMatrix::TSquareMatrix(int size, double v):
TMatrix(size,size)
{
for(int i=0;i for(int j=0;j x[i][j] = (i==j ? v : 0);
}
TSquareMatrix& TSquareMatrix:: SetDiagonal(double value)
{
for(int i=0; i x[i][i] = value;
return *this;
}
//
//
//
TSquareMatrix::TSquareMatrix(const TVector& v,const TVector& u):TMatrix(v.n,v.n)
{
if(v.n!=u.n)
throw Exception("TSquareMatrix constructor:illegal sizes of vectors");
for(int i=0;i for(int j=0;j {
x[i][j]=v.x[i]*v.x[j];
}
}
//
// Создает матрицу как произведение заданных матриц
//
TSquareMatrix::TSquareMatrix(const TMatrix& u, const TMatrix& v)
:TMatrix(u.GetNumRows(),v.GetNumCols())
{
Multiple(u,v);
}
TSquareMatrix& TSquareMatrix::operator *= (TSquareMatrix &m)
{
if(m.r!=r)
throw Exception("TSquareMatrix::operator : Illegal matrix size");
return *this = TSquareMatrix(*this, m);
}
//
//
//
TSquareMatrix& TSquareMatrix::MakeRotate(int k,int l,double cos,double sin)
{
//double s = cos*cos + sin*sin;
//if(s!=1)
// throw Exception("Illegal argument");
SetAll(0);
for(int i=0;i x[i][i]=1;
x[k][k] = x[l][l]=cos;
x[k][l] =-(x[l][k]=sin);
return *this;
}
//
// По идее, должна создать QR-разложение
//
void TSquareMatrix::QRExpansion(TSquareMatrix &Q, TSquareMatrix &R)
{
if(Q.r != r || R.r != r)
throw Exception("TSquareMatrix::QRExpansion: illegal matrix size");
double cos,sin; //
double t;
Q.SetAll(0);
Q.SetDiagonal(1);
TSquareMatrix Tij(r);
R = *this;
//ofstream fout("out1.txt");
//fout << "Матрица A:" < //fout << R << endl;
for(int j=0;j for(int i=j+1;i t = sqrt(R.x[j][j]*R.x[j][j]+R.x[i][j]*R.x[i][j]);
if(t != 0){
cos = R.x[j][j]/t;
sin = R.x[i][j]/t;
Tij.MakeRotate(i,j,cos,sin);// создать матрицу поворота
//fout << "Tij" << endl;
//fout << Tij << endl;
Q = TSquareMatrix(Tij,Q);
R = TSquareMatrix(Tij,R);
//fout << "A:" << endl;
//fout << R << endl;
}
}
}
Q.Transpose(); // Q = [T]^t
//fout << "Q*R"<< endl;
//fout << TSquareMatrix(Q,R)<< endl;
}
//
// Операция транспонирования квадратной матрицы
//
TSquareMatrix& TSquareMatrix::Transpose()
{
double t;
for(int i=0;i for(int j=i;j t = x[i][j];
x[i][j]=x[j][i];
x[j][i]=t;
}
return *this;
}
//
// Вохвращает сумму внедиагональных элементов
//
double TSquareMatrix::UnderDiagonalSquareSum()
{
double pos=0;
double neg=0;
double xx;
for(int i=0;i for(int j=0;j if(i>j)
if((xx = x[i][j]*x[i][j]) > 0)
pos+=xx;
else
neg+=xx;
return (pos+neg);
}
//
// Перемножает заданные матрицы
//
TSquareMatrix& TSquareMatrix::Multiple(const TMatrix& u, const TMatrix& v)
{
if((u.GetNumCols()!=v.GetNumRows()) || (u.GetNumRows()!= v.GetNumCols()) || u.GetNumRows()!=r)
throw Exception("illegal arguments");
double negative;
double uv;
for(int i=0; i for(int j=0;j x[i][j] = negative = 0;
for(int k=0;k if((uv = u(i,k)*v(k,j))>0)
x[i][j] += uv;
else
negative += uv;
}
x[i][j] += negative;
}
return *this;
}
// Вычисление следа матрицы
double TSquareMatrix::Trace()
{
double pos=0,neg=0;
for(int i=0; i< r; i++)
if( x[i][i] > 0)
pos+=x[i][i];
else
neg+=x[i][i];
return pos+neg;
}
//
// T*RT, T-матрица поворота (вращает матрицу в плоскости (i,j)
//
TSquareMatrix&
TSquareMatrix::Rotate(int i,int j, double c,double s)
{
double xjk, xik, xkj, xki; // Временные переменные
double xij, xii, xji, xjj;
//double fxij, fxii, fxji, fxjj;
if(i==j || i<0 || j<0 || i>=r || j>=r )
throw Exception("Illegal arguments in TSquareMatrix::Rotate");
//double y;
int k;
// Умножить справа
for(k=0; k if(k!=i && k!=j){
// Слева
xjk = x[j][k]*c - x[i][k]*s;//
xik = x[j][k]*s + x[i][k]*c;
// Справа
xkj = x[k][j]*c - x[k][i]*s;
xki = x[k][j]*s + x[k][i]*c;
// Запись
x[j][k] = xjk;
x[i][k] = xik;
x[k][j] = xkj;
x[k][i] = xki;
}
}
xjj = c*x[j][j] - s*x[i][j];
xji = c*x[j][i] - s*x[i][i];
xij = s*x[j][j] + c*x[i][j];
xii = s*x[j][i] + c*x[i][i];
x[j][j] = xjj*c - xji*s;
x[j][i] = xjj*s + xji*c;
x[i][j] = xij*c - xii*s;
x[i][i] = xij*s + xii*c;
#ifdef DEBUG
fout << "RT" << endl << *this << endl;
#endif
/*
// Умножить слева
for( k=0; k< r; k++){
y = x[j][k]*c + x[i][k]*s;
x[i][k] = -x[j][k]*s + x[i][k]*c;
x[j][k] = y;
}
*/
#ifdef DEBUG
fout << "T*R" << endl << *this << endl;
#endif
return *this;
}
//---------------------------------------------------------------------------

//---------------------------------------------------------------------------
// Симметрическая матрица
//---------------------------------------------------------------------------
#ifndef SymMatrH
#define SymMatrH
#include "SquMatr.h"
//#include
//#define DEBUG
#ifdef DEBUG
#include
#endif
// Симметрическая матрица
class TSymMatrix : public TSquareMatrix
{
public:
// Создает симметрическую матрицу как квадрат данной матрицы
TSymMatrix(TMatrix& m);
// Создает симметрическую матрицу как квадрат вектора
TSymMatrix(TVector& v): TSquareMatrix(v,v){};
TSymMatrix(int size) : TSquareMatrix(size){};
// Расчет собственых значений и собственных векторов методом Якоби
void Eigenvalues(TVector& vEigenvalues, TSquareMatrix& smEigenvectors);
};
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "SymMatr.h"
//#define DEBUG
//
// Переписать
// проверку на симметричность при изменении элементов,
//
// Makes matrice as multiplication of two equal matrices
TSymMatrix::TSymMatrix(TMatrix& m):
TSquareMatrix(m.GetNumCols())
{
TMatrix mT(m);
mT.Transpose();
Multiple(mT,m);
}
//
// Нахождение собственных значений и матрицы с собственными векторами
//
void TSymMatrix::Eigenvalues(TVector& v,TSquareMatrix& T)
{
#ifdef DEBUG
ofstream fout("SymMatr.txt");
int inum = 0;
#endif
T.SetAll(0);
T.SetDiagonal(1);
if(v.GetSize()!=r)
throw Exception("Illegal vector size in TSymMatix::Eigenvalues");
if(T.GetNumRows()!=r)
throw Exception("Illegal matrix size in TSymMatrix::Eigenvalue");
TSquareMatrix R(*this);
TSquareMatrix Tij(r);// Матрица поворота
int i,j,k; // Индексы для прохода по элементам матрицы
static const double single_error = 1E-10;
long rotate_counter;
double c,s; // Синус и косинус поворота в методе Якоби
double cotan2a; // Тангенс удвоенного угла поворота
double t; // Тангенс угла поворота
double rr;
int udenum = (r-1)*r/2; // количество поддиагональных элементов
double udesum = R.UnderDiagonalSquareSum(); // Сумма наддиагональных элементов
const COUNT = 100*udenum;// Максимальное количество проходов по поддиагональным элементам
#ifdef DEBUG
fout << "R:" << endl << R << endl;// Исходная симметричная матрица
// fout << "R-R*" << endl << R - TSquareMatrix(R).Transpose() << endl;
fout << "udesum = " << udesum << endl;
fout << "udenum = " << udenum << endl;
#endif
for(k=0,rotate_counter=0;k for( j=0; j < r; j++){// для каждого ряда (кроме последнего)
for( i = j+1; i if( fabs(R(i,j)) >= sqrt(udesum/udenum)/*/2*/){// Проверить, достаточно ли большой данный элемент
#ifdef DEBUG
fout << endl << "********** Поворот №" << (inum +1 )<< "*********" << endl;
fout << "level = " << sqrt(udesum/udenum) << endl;
fout << "udesum = " << udesum << endl;
// fout << "Tr(R) = " << R.Trace() << endl;
//fout << "R(" << i << "," << i << ")-R(" << j << ',' << j << ") = " << (R(i,i)-R(j,j)) << endl;
#endif
rr = R(i,j)*R(i,j); // Store
cotan2a = (R(i,i) - R(j,j))/ (2*R(i,j));
t = ( cotan2a<0 ? -1 : 1)/
(fabs(cotan2a) + sqrt(1 + cotan2a*cotan2a));
#ifdef DEBUG
fout << "cotan(a) = " << t << endl;
#endif
c = 1/sqrt(1+t*t);
s = c*t;
Tij.MakeRotate(i,j,c,s);// Создать матрицу поворота
#ifdef DEBUG
//fout << "Tij:" << endl << Tij << endl;
#endif
T*=Tij;
// R = TSquareMatrix(R,Tij); // Глючит???
// Tij.Transpose();
// R = TSquareMatrix(Tij,R);
R.Rotate(i,j,c,s);//Ортогональное преобразование корреляционной матрицы
#ifdef DEBUG
inum++;
fout << "Обнуляемый элемент:"
<<"("<< i <<","<< j << ")"< fout << "cotan(2a) = " << cotan2a << endl;
fout << "cos(a) = " << c << endl;
fout << "sin(a) = " << s << endl;
fout << "Матрица R после поворота:" << endl << R << endl;
fout << "R(i,j)*R(i,j) = " << rr << endl;
fout << "Сумма внедиагональных элементов: "
<< R.UnderDiagonalSquareSum() << endl;
//fout << "Матрица T:" << endl << T << endl;
#endif
udesum -= rr; //subtackt out-of-diagonal elements summa
rotate_counter++;
if(udesum <= 0)
goto ok;
}
}
}
}
#ifdef DEBUG
fout << "Матрица R после серии поворотов: " << endl << R << endl;
#endif
ok:
// Sort the eigenvalues
for(i=0;i for(j=i+1;j if(R(j,j)>R(i,i)){
// swap two eigenvalues
Tij.MakeRotate(i,j,0,1);
// R = TSquareMatrix(R,Tij);
T = TSquareMatrix(T,Tij);
R.Rotate(i,j,0,1);
// Tij.Transpose();
// R = TSquareMatrix(Tij,R);
}
}
v[i]=R(i,i); // Вклад i-ой главной компоненты
}
#ifdef DEBUG
fout << "Число поворотов k = " << rotate_counter << endl;
fout << "Норма матрицы R0 = " << Norm() << endl;
fout << "Норма матрицы эквивалентного возмущения ||M|| <= " << (rotate_counter+1)*r*Norm() *single_error;
#endif
}
//---------------------------------------------------------------------------7

//---------------------------------------------------------------------------
// Главные компоненты
//
#ifndef MainCompH
//#include "Matrix.h"
#include "SymMatr.h"
#include "CalcDlg.h"
//#define DEBUG
class TMainComp
{
protected:
unsigned StatusBits; // Биты состояния после вычисления
enum {
OKBit = 0,
NegEvalBit = 1,
ZeroEvalBit = 2
};
TMatrix mNormalData; // Центрированные данные,нормированные
TSymMatrix *smCorrelation; // Корреляционная матрица
TVector vAverage; // Оценка средних
TVector vDispersion; // Оценка дисперсии
TVector vEigenvalues; // Вектор собственных чисел
TVector vDeviation;
TVector vV;
TMatrix mPC;
void MakeMainComponents();
int N; // Размер выборки
int n; // Количество параметров
TSquareMatrix smEigenvectors;
TSquareMatrix *smResult;
#ifdef DEBUG
ofstream fout;
#endif
public:
TMainComp(TMatrix& mData); // Матрица с исходными данными
~TMainComp(); // Деструктор класса
TSquareMatrix& GetResult()const {return *smResult;}
TVector& GetEigenvalues(){return vEigenvalues;}
TMatrix& GetEigenvectors(){return smEigenvectors;}
TVector& GetV (){return vV;};
TMatrix& GetPC(){return mPC;}
TMatrix& GetY(){return mNormalData;}
TSymMatrix& GetR(){return *smCorrelation;}
TVector& GetDispersion(void ){return vDispersion;}
TVector& GetAverage(void){return vAverage;}
unsigned Status()const{return StatusBits;}
bool ZeroEval()const{return ZeroEvalBit & StatusBits;}
bool NegEval ()const{return NegEvalBit & StatusBits;}
bool OK()const{return OKBit & StatusBits;};
};
#define MainCompH
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#include
#pragma hdrstop

#include "MainComp.h"
TMainComp::TMainComp(TMatrix& mData):
StatusBits(0),
N(mData.GetNumRows()),
n(mData.GetNumCols()),
mNormalData( mData.GetNumRows(), mData.GetNumCols() ),
vEigenvalues(mData.GetNumCols()),
smEigenvectors(mData.GetNumCols()),
vAverage( mData.GetNumCols()),
vDispersion( mData.GetNumCols() ),
vDeviation( mData.GetNumCols()),
vV(mData.GetNumCols()),
mPC(mData.GetNumRows(),mData.GetNumCols())
{
ProgressDlg->ProgressLabel->Caption = "Нормализация данных...";
ProgressDlg->ProgressBar->Position = 0;
ProgressDlg->ProgressBar->Max = 100;
#ifdef DEBUG
ofstream fout("MainComp.txt");
#endif
mData.Normalize(mNormalData,vDispersion,vAverage); // Нормализовать данные
ProgressDlg->ProgressBar->StepBy(10);
ProgressDlg->ProgressLabel->Caption = "Вычисление матрицы парных корреляций...";
smCorrelation = new TSymMatrix(mNormalData); // Создать матрицу размером (n x n) коварриационых моментов
*smCorrelation /=(double)N;
ProgressDlg->ProgressBar->StepBy(10);
ProgressDlg->ProgressLabel->Caption = "Вычисление собственных чисел...";
smCorrelation->Eigenvalues(vEigenvalues, smEigenvectors); // Вычислить собственные числа матрицы
ProgressDlg->ProgressBar->StepBy(50);
#ifdef DEBUG
fout << "Исходная метрица данных:" << endl << mData << endl;
fout << "Среднее:" << endl;
fout << vAverage << endl;
fout << "Дисперсия:" << endl;
fout << vDispersion << endl;
fout << "Нормализованные данные" << endl;
fout << mNormalData << endl;
fout << "Корреляционная матрица:" << endl;
fout << *smCorrelation << endl;
fout << "Вектор собственных чисел:" << endl;
fout << vEigenvalues << endl;
fout << "Матрица собственных векторов:" << endl;
fout << smEigenvectors << endl;
#endif
ProgressDlg->ProgressLabel->Caption = "Вычисление матрицы весовых коэффициентов...";
MakeMainComponents(); // Получить матрицу связи главных компонент с признаков
ProgressDlg->ProgressBar->StepBy(30);
#ifdef DEBUG
fout << "Результат:" << endl;
fout << *smResult << endl;
#endif
}
// Деструктор класса
TMainComp::~TMainComp()
{
delete smCorrelation;
delete smResult;
}
//
// Создать матрицу А весовых коэффициентов при главных компонентах,
// а также матрицу занчений главных компонент для каждого объекта
//
void TMainComp::MakeMainComponents()
{
TSquareMatrix Sqrt(n);
int i;
//double temp;
// Make matrix with the eigenvalues on diagonal
for(i=0;i for(int j=0;j if(vEigenvalues[i]<0){
StatusBits |= NegEvalBit;
vEigenvalues[i] = 0;
}else
if(vEigenvalues[i]==0){
StatusBits |= ZeroEvalBit;
}
Sqrt(i,j) = (i==j ? sqrt(vEigenvalues[i]) : 0);
}
// Make Principal Components Matrix
smResult = new TSquareMatrix(smEigenvectors,Sqrt);
for(i=0; i< n;i++){
vV[i]=0;
for(int j=0;j vV[i]+= (*smResult)(j,i)*(*smResult)(j,i);
}
if(!NegEval() && !ZeroEval()){
for(i=0; i Sqrt(i,i) = 1 / sqrt(vEigenvalues[i]);
mPC = (mNormalData* (*smResult))*Sqrt;
}else{
mPC.SetAll(0);
}
}

//---------------------------------------------------------------------------
// Главная форма приложения
//
#ifndef MainFormH
#define MainFormH
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
//#include "Matrix.h"
//#include "SMatrix.h"
#include "MainComp.h"
#include
#include
#include
#include
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TMainMenu *MainMenu;
TMenuItem *FileItem;
TMenuItem *FileExitItem;
TVCFormulaOne *F1Book;
TMenuItem *N1;
TMenuItem *FileOpenItem;
TOpenDialog *OpenDialog;
TSaveDialog *SaveDialog;
TMenuItem *FileSaveAsItem;
TMenuItem *FileSaveItem;
TMenuItem *DataItem;
TMenuItem *DataCalculateItem;
TMenuItem *HelpItem;
TMenuItem *AboutItem;
TMenuItem *ContentsHelpItem;
TMenuItem *FileNewItem;
TMenuItem *N2;
TMenuItem *FilePrintItem;
TMenuItem *FilePageSetupItem;
TMenuItem *N3;
TMenuItem *EditItem;
TMenuItem *EditCopyItem;
TMenuItem *EditCutItem;
TMenuItem *EditPasteItem;
TMenuItem *FormatItem;
TMenuItem *FormatFontItem;
TFontDialog *FontDialog;
TPrintDialog *PrintDialog;
TPrinterSetupDialog *PrinterSetupDialog;
TMenuItem *N4;
TMenuItem *EditDeleteItem;
TMenuItem *DataSortItem;
TMenuItem *EditDeleteSheetItem;
TMenuItem *InsertItem;
TMenuItem *InsertSheetItem;
TPanel *SpeedPanel;
TSpeedButton *NewSpeedButton;
TSpeedButton *OpenSpeedButton;
TSpeedButton *SaveSpeedButton;
TSpeedButton *SpeedButton1;
TSpeedButton *SpeedButton2;
TSpeedButton *SpeedButton3;
TSpeedButton *CalculateSpeedButton;
TStatusBar *StatusBar;
TMenuItem *OptionsMenu;
TMenuItem *OptionsDirectoriesItem;
TMenuItem *OptionsReport;
TMenuItem *FormatAlignmentItem;
TMenuItem *FormatBorderItem;
TMenuItem *DataTransposeItem;
TMenuItem *DataNormalizeItem;
TMenuItem *N5;
void __fastcall FileExitItemClick(TObject *Sender);
void __fastcall FormResize(TObject *Sender);
void __fastcall FileOpenItemClick(TObject *Sender);
void __fastcall FileSaveAsItemClick(TObject *Sender);
void __fastcall FileSaveItemClick(TObject *Sender);
void __fastcall DataCalculateItemClick(TObject *Sender);
void __fastcall FilePrintItemClick(TObject *Sender);
void __fastcall FilePageSetupItemClick(TObject *Sender);
void __fastcall AboutItemClick(TObject *Sender);
void __fastcall EditCutItemClick(TObject *Sender);
void __fastcall EditCopyItemClick(TObject *Sender);
void __fastcall EditPasteItemClick(TObject *Sender);
void __fastcall FormatFontItemClick(TObject *Sender);
void __fastcall EditDeleteItemClick(TObject *Sender);
void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
void __fastcall ContentsHelpItemClick(TObject *Sender);
void __fastcall DataSortItemClick(TObject *Sender);
void __fastcall EditDeleteSheetItemClick(TObject *Sender);
void __fastcall InsertSheetItemClick(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall FormDestroy(TObject *Sender);
void __fastcall F1BookModified(TObject *Sender);
void __fastcall F1BookSelChange(TObject *Sender);
void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
void __fastcall OptionsDirectoriesItemClick(TObject *Sender);
void __fastcall OptionsReportClick(TObject *Sender);
void __fastcall FormatAlignmentItemClick(TObject *Sender);
void __fastcall FormatBorderItemClick(TObject *Sender);
void __fastcall DataNormalizeItemClick(TObject *Sender);
void __fastcall DataTransposeItemClick(TObject *Sender);
private: // User declarations
TRegistry * Registry;
void __fastcall AdjustSizes(); // Updates the sizes of the controls
void __fastcall UpdateMenuItems(TObject * Sender); // Updates items status
void __fastcall ShowHint(TObject * Sender); // Shows hints in the statusbar
AnsiString DefaultFontName;
short DefaultFontSize;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
int FileType;
void __fastcall MakeSheetFromMatrix (TMatrix& mData, String& strSheetName,
int row_position, AnsiString * RowNames, AnsiString * ColNames);
void __fastcall Calculate();
};
//---------------------------------------------------------------------------
extern TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include
#include "MainForm.h"
#include "AboutDlg.h"
#include "CalcDlg.h"
#include "Calculat.h"
#include "OptionsDlg.h"
#include "SymMatr.h"
#include "ReportDlg.h"
#include "EdDelDlg.h"
//TRegistry
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
#ifndef DEBUG
//#define DEBUG // turns on/off debugging
#endif
// Шрифт по умолчанию
//extern TCalculationsForm *CalculationsForm;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Registry = new TRegistry;
Registry->OpenKey("SOFTWARE\\Chikhirev\\PCM\\1.0",true);
OpenDialog->InitialDir = Registry->ReadString("OpenDlgInitialDir");
SaveDialog->InitialDir = Registry->ReadString("SaveDlgInitialDir");
DefaultFontName = Registry->ReadString("DefaultFontName");
DefaultFontSize = Registry->ReadInteger("DefaultFontSize");
F1Book->SetDefaultFont(DefaultFontName,DefaultFontSize);
F1Book->Modified = false;
//F1Book->FileName = "Таблица.xls";
//Form1->Caption = Application->Title + " - " + FileName->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FileExitItemClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormResize(TObject *Sender)
{
AdjustSizes();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FileOpenItemClick(TObject *Sender)
{
OpenDialog->FileName = "";
if(OpenDialog->Execute())
{
F1Book->Read (OpenDialog->FileName, F1FileExcel5);
F1Book->TableName=OpenDialog->FileName;
F1Book->FileName = OpenDialog->FileName;
F1Book->Modified = false;
Form1->Caption = Application->Title + " - " + OpenDialog->FileName;
UpdateMenuItems(Sender);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FileSaveAsItemClick(TObject *Sender)
{
//SaveDialog->FileName = F1Book->FileName;
if(SaveDialog->Execute())
{
F1Book->Write(SaveDialog->FileName, F1FileExcel5);
F1Book->TableName=SaveDialog->FileName;
F1Book->FileName = SaveDialog->FileName;
Form1->Caption = Application->Title + " - " + SaveDialog->FileName;
F1Book->Modified = false;
}
UpdateMenuItems(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FileSaveItemClick(TObject *Sender)
{
if(F1Book->FileName.IsEmpty()){ // AnsiString
SaveDialog->FileName = "Таблица.xls";
FileSaveAsItemClick(Sender);
}else{
F1Book->Write(F1Book->FileName, F1FileExcel5);
F1Book->Modified = false;
}
UpdateMenuItems(Sender);
}
//---------------------------------------------------------------------------
// Makes a new named worksheet and fill in it with data from matrix
//
void __fastcall TForm1::MakeSheetFromMatrix(TMatrix& m,String& Name,int row_pos,
AnsiString * RowNames, AnsiString * ColNames)
{
F1Book->TextRC[row_pos][1]=Name;
F1Book->SetSelection(row_pos+1,1,row_pos+1,F1Book->MaxCol);
F1Book->SetFont(DefaultFontName,DefaultFontSize,true,false,false,false,TColor(0,0,0),
NULL, NULL);
F1Book->SetActiveCell(row_pos,1);
F1Book->SetFont(DefaultFontName,DefaultFontSize,true,false,false,false,TColor(0,0,0),
NULL, NULL);
row_pos+=1;
for(int i=0;i F1Book->TextRC[row_pos+i+1][1] = RowNames[i];
for(int j=0;j F1Book->NumberRC[i+row_pos+1][j+2]= m(i,j);
F1Book->TextRC[row_pos][j+2] = ColNames[j];// FormatRC
}
}
F1Book->SetSelection(row_pos+1,2,row_pos+m.GetNumRows()+1,m.GetNumCols()+2);
F1Book->NumberFormat = "0.000";
F1Book->SetActiveCell(1,1);
}
//
// Основные вычисления выполняе данная функция
//
void __fastcall TForm1::Calculate()
{
ProgressDlg->ProgressLabel->Caption = "Формирование исходных данных...";
ProgressDlg->ProgressBar->Position = 0;
//Application->MessageBox("Form1->Calculate","Calculations",0);
// Getting selected area coordinates
int sc,ec,sr,er;
F1Book->GetSelection(0,sr,sc,er,ec);
int row = 1;
int iParams = ec - sc; // Number of objects
int iObjects = er - sr; // Number of paremeters
AnsiString * ColNames = new(AnsiString[iParams]); // Наименования параметров
AnsiString * RowNames = new(AnsiString[iObjects]); // Наименования объектов
AnsiString * V = new(AnsiString[iParams]);
if(iObjects < 2 || iParams < 2) //
return ;
#ifdef DEBUG
ofstream fout("MainForm.txt");// Файл для отладки
fout << '(' << sr << ',' << sc << ")-(" << er << ',' << ec << ')' << endl;
#endif
TMatrix mX(iObjects,iParams); // Создать матрицу нужной размерности
// Read selected data from worksheet to the work matrix
long number = iObjects*iParams;
ProgressDlg->ProgressBar->Max = 65535;
ProgressDlg->ProgressBar->Step = (TProgressRange)(number > 65535 ? 1 : 65535/number);
for(int i=0; i RowNames[i] = F1Book->TextRC[sr+i+1][sc];
for(int j=0; j ColNames[j] = F1Book->TextRC[sr][sc+j+1];
V[j] = AnsiString("V") + AnsiString(j+1);
// Test for validation of data in cell
if(F1Book->TypeRC[sr+i+1][sc+j+1]!=1){// Check data type
AnsiString s("Неверный формат ячейки (");
// s+=F1Book->RowText[sr+1+i];
s+=AnsiString(sr+1+i);
s+=AnsiString(',');
// s+=F1Book->ColText[sc+j+1];
s+=AnsiString(sc+j+1);
s+=AnsiString(')');
Application->MessageBox(s.c_str(),NULL,NULL);
return;
}
// Read data from current cell
mX(i,j)= F1Book->NumberRC[sr+i+1][sc+j+1];
ProgressDlg->ProgressBar->StepIt();
}
}
#ifdef DEBUG
fout << "Исходные данные:" << endl;
fout << mX << endl;
#endif
TMainComp mcTest(mX);
ProgressDlg->ProgressLabel->Caption = "Формирование листа отчета..." ;
ProgressDlg->ProgressBar->Position = 0;
ProgressDlg->ProgressBar->Max = 100;
AnsiString ShNm = F1Book->SheetName[F1Book->Sheet];
ProgressDlg->ProgressBar->StepBy(10);
// Make a new named worksheet
F1Book->InsertSheets(1,1);
F1Book->SheetName[1] = AnsiString("Отчет_")+ShNm;
F1Book->Sheet=1;
F1Book->SetDefaultFont(DefaultFontName,DefaultFontSize);
F1Book->SetSelection(1,1,F1Book->MaxRow,1);
F1Book->SetFont(DefaultFontName,DefaultFontSize,true,false,false,false,
TColor(0,0,0),NULL, NULL);
F1Book->SetFont(DefaultFontName,DefaultFontSize,true,false,false,false,
TColor(0,0,0),NULL, NULL);
TDateTime now;
F1Book->TextRC[row][1] = AnsiString("Отчет №____ от ") + now.CurrentDate().DateString();
row++;
if(Registry->ReadBool("RptData")){
MakeSheetFromMatrix(mX,"Исходные данные:",row,RowNames,ColNames);
row+=iObjects+3;
}
if(Registry->ReadBool("RptNormalData")){
MakeSheetFromMatrix(mcTest.GetY(),"Нормированные данные",row,RowNames,ColNames);
row+=iObjects+3;
}
ProgressDlg->ProgressBar->StepBy(10);
// Вывести матрицу парных корреляций признаков
if(Registry->ReadBool("RptCorrMatrix")){
MakeSheetFromMatrix(mcTest.GetR(),"Матрица парных корреляций признаков:",
row,ColNames,ColNames);
row += mcTest.GetR().GetNumRows()+3;
}
ProgressDlg->ProgressBar->StepBy(10);
/*
if(mcTest.NegEval()){
ProgressDlg->Close();
return;
}
*/
#ifdef DEBUG
fout << "A:" << endl << mcTest.GetResult() << endl;
#endif
if(Registry->ReadBool("RptPCDeal")){
F1Book->TextRC[row++][1] = "Вклад главных компонент в общую дисперсию:";
for(int i=0; i F1Book->TextRC[row][i+2] = AnsiString("V") + AnsiString(i+1);
F1Book->SetActiveCell(row,i+2);
F1Book->SetFont(DefaultFontName,DefaultFontSize,true,false,false,false,
TColor(0,0,0),NULL, NULL);
F1Book->NumberRC[row+1][i+2]
= (mcTest.GetV())[i];
F1Book->NumberRC[row+2][i+2]
= (mcTest.GetV())[i]*100/mcTest.GetResult().GetNumCols();
}
F1Book->SetSelection(row+1,2,row+2,2+iParams);
F1Book->NumberFormat = "0.000";
F1Book->TextRC[row+1][1] = "Vr(абс)";// Selection
F1Book->TextRC[row+2][1] = "Vr(%)";
row+=4;
}
ProgressDlg->ProgressBar->StepBy(10);
//MakeSheetFromMatrix(mcTest.GetPC(),"Principal Components");
if(Registry->ReadBool("RptPC2ParamsMatrix")){
MakeSheetFromMatrix( mcTest.GetResult(),
"Матрица связи главных компонент с параметрами объектов:",row,ColNames,V);
row+=mcTest.GetResult().GetNumRows()+3;
}
ProgressDlg->ProgressBar->StepBy(10);
/* if(mcTest.ZeroEval()){
ProgressDlg->Close();
return;
}
*/
if(Registry->ReadBool("RptObjectsPC")){
MakeSheetFromMatrix( mcTest.GetPC(),
"Главные компоненты объектов, ранжированные по первой ГК:",row,RowNames,V);
//row+=mcTest.GetPC().GetNumRows()+2;
F1Book->Sort3(row+2,1,row+iObjects+1,iParams+1,true,-2,0,0);
}
ProgressDlg->ProgressBar->StepBy(20);
ProgressDlg->ProgressLabel->Caption += AnsiString("Готово");
ProgressDlg->ProgressBar->StepBy(20);
ProgressDlg->Close();
}
void __fastcall TForm1::DataCalculateItemClick(TObject *Sender)
{
Application->CreateForm(__classid(TProgressDlg), &ProgressDlg);
ProgressDlg->ShowModal();
ProgressDlg->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FilePrintItemClick(TObject *Sender)
{
try{
F1Book->FilePrint(true);
}catch(EOleException& ){
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FilePageSetupItemClick(TObject *Sender)
{
F1Book->FilePageSetupDlg();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AboutItemClick(TObject *Sender)
{
Application->CreateForm(__classid(TAboutBox), &AboutBox);
AboutBox->ShowModal();
AboutBox->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EditCutItemClick(TObject *Sender)
{
F1Book->EditCut();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EditCopyItemClick(TObject *Sender)
{
F1Book->EditCopy();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EditPasteItemClick(TObject *Sender)
{
F1Book->EditPaste();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormatFontItemClick(TObject *Sender)
{
TFont* f;
if(!FontDialog->Execute())
return;
f = FontDialog->Font;
//
F1Book->SetFont(
f->Name,
(short)f->Size,
f->Style.Contains(fsBold), // Set font properties
f->Style.Contains(fsItalic),
f->Style.Contains(fsUnderline),
f->Style.Contains(fsStrikeOut),
TColor(f->Color),
true,
NULL
);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EditDeleteItemClick(TObject *Sender)
{
Application->CreateForm(__classid(TEditDeleteDlg), &EditDeleteDlg);
EditDeleteDlg->ShowModal();
if(EditDeleteDlg->ModalResult==IDOK){
switch(EditDeleteDlg->RadioGroup->ItemIndex)
{
case 0:
F1Book->EditDelete(F1ShiftHorizontal);
break;
case 1:
F1Book->EditDelete(F1ShiftVertical);
break;
case 2:
F1Book->EditDelete(F1ShiftRows);
break;
case 3:
F1Book->EditDelete(F1ShiftCols);
break;
}
}
EditDeleteDlg->Free();
//F1Book->EditDelete();
//F1ShiftHorizontal
//F1ShiftVertical
//F1ShiftRows
//F1ShiftCols
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
// Перед закрытием главной формы проверить была ли модифицирована рабочая книга
//
if(F1Book->Modified){
int res = Application->MessageBox(
"Данные изменены. Сохранить, прежде чем выйти?","Сохранение изменений",MB_YESNOCANCEL);
switch(res)
{
case IDYES:
FileSaveItemClick(Sender);
CanClose = !F1Book->FileName.IsEmpty();
return;
case IDNO:
CanClose = true;
return;
case IDCANCEL:
CanClose = false;
return;
}
}else
CanClose = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ContentsHelpItemClick(TObject *Sender)
{
Application->HelpCommand(HELP_CONTENTS,NULL); // Application
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DataSortItemClick(TObject *Sender)
{
F1Book->SortDlg();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::EditDeleteSheetItemClick(TObject *Sender)
{
F1Book->EditDeleteSheets();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::InsertSheetItemClick(TObject *Sender)
{
F1Book->EditInsertSheets();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::AdjustSizes()
{
F1Book->Top = SpeedPanel->Height;
F1Book->Height = ClientHeight - SpeedPanel->Height-StatusBar->Height;
SpeedPanel->Width = F1Book->Width = ClientWidth;
}
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Application->OnHint = ShowHint;
Screen->OnActiveFormChange = UpdateMenuItems;
UpdateMenuItems(Sender);
AdjustSizes();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
Screen->OnActiveFormChange = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpdateMenuItems(TObject *Sender)
{
int scol,srow,ecol,erow;
F1Book->GetSelection(0,srow,scol,erow,ecol);
CalculateSpeedButton->Enabled = ( ecol-scol>1 && erow-srow>1 ? true:false );
DataCalculateItem->Enabled = ( ecol-scol>1 && erow-srow>1 ? true:false );
FileSaveItem->Enabled = F1Book->Modified;
SaveSpeedButton->Enabled = F1Book->Modified;
}
void __fastcall TForm1::ShowHint(TObject * Sender)
{
StatusBar->SimpleText = Application->Hint;
}
void __fastcall TForm1::F1BookModified(TObject *Sender)
{
UpdateMenuItems(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::F1BookSelChange(TObject *Sender)
{
UpdateMenuItems(Sender);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Registry->CloseKey();
Registry->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OptionsDirectoriesItemClick(TObject *Sender)
{
Application->CreateForm(__classid(TOKBottomDlg), &OKBottomDlg);
OKBottomDlg->OpenDlgInitialDirEdit->Text = Registry->ReadString("OpenDlgInitialDir");
OKBottomDlg->SaveDlgInitialDirEdit->Text = Registry->ReadString("SaveDlgInitialDir");
OKBottomDlg->ShowModal();
if(OKBottomDlg->ModalResult == IDOK){
Registry->WriteString("OpenDlgInitialDir", OKBottomDlg->OpenDlgInitialDirEdit->Text);
Registry->WriteString("SaveDlgInitialDir", OKBottomDlg->SaveDlgInitialDirEdit->Text);
}
OKBottomDlg->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OptionsReportClick(TObject *Sender)
{
Application->CreateForm(__classid(TReportOptionsDlg),&ReportOptionsDlg);
ReportOptionsDlg->CheckBox1->Checked = Registry->ReadBool("RptData");
ReportOptionsDlg->CheckBox2->Checked = Registry->ReadBool("RptNormalData");
ReportOptionsDlg->CheckBox3->Checked = Registry->ReadBool("RptCorrMatrix");
ReportOptionsDlg->CheckBox4->Checked = Registry->ReadBool("RptPCDeal");
ReportOptionsDlg->CheckBox5->Checked = Registry->ReadBool("RptPC2ParamsMatrix");
ReportOptionsDlg->CheckBox6->Checked = Registry->ReadBool("RptObjectsPC");
ReportOptionsDlg->ShowModal();
if(ReportOptionsDlg->ModalResult == IDOK){
Registry->WriteBool("RptData",ReportOptionsDlg->CheckBox1->Checked);
Registry->WriteBool("RptNormalData", ReportOptionsDlg->CheckBox2->Checked);
Registry->WriteBool("RptCorrMatrix",ReportOptionsDlg->CheckBox3->Checked);
Registry->WriteBool("RptPCDeal",ReportOptionsDlg->CheckBox4->Checked);
Registry->WriteBool("RptPC2ParamsMatrix",ReportOptionsDlg->CheckBox5->Checked);
Registry->WriteBool("RptObjectsPC",ReportOptionsDlg->CheckBox6->Checked);
}
ReportOptionsDlg->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormatAlignmentItemClick(TObject *Sender)
{
F1Book->FormatAlignmentDlg();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormatBorderItemClick(TObject *Sender)
{
F1Book->FormatBorderDlg();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DataNormalizeItemClick(TObject *Sender)
{
int r1,c1,r2,c2;
F1Book->GetSelection(0,r1,c1,r2,c2);
int rows = r2-r1+1;
int cols = c2-c1+1;
TMatrix buffer(rows,cols);
TMatrix result(rows,cols);
TVector aver(cols);
TVector disp(cols);
for(int i=0; i for(int j=0; j buffer(i,j) = F1Book->NumberRC[r1+i][c1+j];
buffer.Normalize(result,disp,aver);
for(int i=0; i for(int j=0; j F1Book->NumberRC[r1+i][c1+j] = result(i,j);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DataTransposeItemClick(TObject *Sender)
{
/*
int r1,c1,r2,c2;
F1Book->GetSelection(0,r1,c1,r2,c2);
int rows = r2-r1+1;
int cols = c2-c1+1;
TMatrix buffer(rows,cols);
for(int i=0; i for(int j=0; j buffer(i,j) = F1Book->NumberRC[r1+i][c1+j];
F1Book->EditInsertSheets();
for(int i=0; i for(int j=0; j F1Book->NumberRC[j+1][i+1] = buffer(i,j);
*/
}
//---------------------------------------------------------------------------

//----------------------------------------------------------------------------
// Модуль диалогового окна с настройками рабочих каталогов
//
#ifndef OptionsDlgH
#define OptionsDlgH
//----------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//----------------------------------------------------------------------------
class TOKBottomDlg : public TForm
{
__published:
TButton *OKBtn;
TButton *CancelBtn;
TBevel *Bevel;
TEdit *OpenDlgInitialDirEdit;
TLabel *Label1;
TEdit *SaveDlgInitialDirEdit;
TLabel *Label2;
void __fastcall OKBtnClick(TObject *Sender);
void __fastcall CancelBtnClick(TObject *Sender);
private:
public:
virtual __fastcall TOKBottomDlg(TComponent* AOwner);
};
//----------------------------------------------------------------------------
extern TOKBottomDlg *OKBottomDlg;
//----------------------------------------------------------------------------
#endif


//---------------------------------------------------------------------
#include
#pragma hdrstop
#include "OptionsDlg.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TOKBottomDlg *OKBottomDlg;
//---------------------------------------------------------------------
__fastcall TOKBottomDlg::TOKBottomDlg(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------
void __fastcall TOKBottomDlg::OKBtnClick(TObject *Sender)
{
ModalResult = IDOK;
}
//---------------------------------------------------------------------------
void __fastcall TOKBottomDlg::CancelBtnClick(TObject *Sender)
{
ModalResult = IDCANCEL;
}
//---------------------------------------------------------------------------

//----------------------------------------------------------------------------
// Диалоговое окно с параметрами отчета
//
#ifndef ReportDlgH
#define ReportDlgH
//----------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//----------------------------------------------------------------------------
class TReportOptionsDlg : public TForm
{
__published:
TButton *OKBtn;
TButton *CancelBtn;
TGroupBox *GroupBox1;
TCheckBox *CheckBox1;
TCheckBox *CheckBox2;
TCheckBox *CheckBox3;
TCheckBox *CheckBox4;
TCheckBox *CheckBox5;
TCheckBox *CheckBox6;
private:
public:
virtual __fastcall TReportOptionsDlg(TComponent* AOwner);
};
//----------------------------------------------------------------------------
extern TReportOptionsDlg *ReportOptionsDlg;
//----------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------
#include
#pragma hdrstop

#include "ReportDlg.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TReportOptionsDlg *ReportOptionsDlg;
//---------------------------------------------------------------------
__fastcall TReportOptionsDlg::TReportOptionsDlg(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------

//----------------------------------------------------------------------------
// Диалоговое окно меню "Правка" -> "Удалить…"
//
#ifndef EdDelDlgH
#define EdDelDlgH
//----------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//----------------------------------------------------------------------------
class TEditDeleteDlg : public TForm
{
__published:
TButton *OKBtn;
TButton *CancelBtn;
TRadioGroup *RadioGroup;
private:
public:
virtual __fastcall TEditDeleteDlg(TComponent* AOwner);
};
//----------------------------------------------------------------------------
extern TEditDeleteDlg *EditDeleteDlg;
//----------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------
#include
#pragma hdrstop
#include "EdDelDlg.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TEditDeleteDlg *EditDeleteDlg;
//---------------------------------------------------------------------
__fastcall TEditDeleteDlg::TEditDeleteDlg(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------

//---------------------------------------------------------------------------
// Параллельный процесс для вычисления главных компонент
//
#ifndef CalculatH
#define CalculatH
//---------------------------------------------------------------------------
#include
#include "Matrix.h"
//---------------------------------------------------------------------------
class TCalculations : public TThread
{
private:
void __fastcall RunPCM ( TMatrix& mData); // Расчет методом главных компонент
__published:
void __fastcall OnTerminate(TObject * Sender);
protected:
void __fastcall Execute();
public:
__fastcall TCalculations(bool CreateSuspended);
};
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "Calculat.h"
#include "MainForm.h"
//---------------------------------------------------------------------------
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall TCalculations::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
//---------------------------------------------------------------------------
__fastcall TCalculations::TCalculations(bool CreateSuspended)
: TThread(CreateSuspended)
{
FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall TCalculations::Execute()
{
// Synchronize
Form1->Calculate();
//---- Place thread code here ----
}
//---------------------------------------------------------------------------
void __fastcall TCalculations::OnTerminate(TObject * Sender)
{
//Application->MessageBox("Calculations have been terminated",AnsiString(Sender->ClassName()).c_str(),0);
}
void __fastcall TCalculations::RunPCM(TMatrix &mData)
{
// Расчет методом главных компонент и отображение отчета в рабочей книге
// Модификация индикатора хода выполнения процесса
}

//---------------------------------------------------------------------------
// Диалоговое окно текущего состояния процесса вычислений
//
#ifndef CalcDlgH
#define CalcDlgH
//---------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include "Calculat.h"
//---------------------------------------------------------------------------
class TProgressDlg : public TForm
{
__published: // IDE-managed Components
TLabel *ProgressLabel;
TProgressBar *ProgressBar;
TButton *CancelBtn;
void __fastcall CancelBtnClick(TObject *Sender);

void __fastcall FormClose(TObject *Sender, TCloseAction &Action);
private: // User declarations
TCalculations * PcmThread;
public: // User declarations
__fastcall TProgressDlg(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern TProgressDlg *ProgressDlg;
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "MainForm.h"
#include "CalcDlg.h"
#include "Calculat.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TProgressDlg *ProgressDlg;
//---------------------------------------------------------------------------
__fastcall TProgressDlg::TProgressDlg(TComponent* Owner)
: TForm(Owner)
{
PcmThread = new TCalculations(false);
}
//---------------------------------------------------------------------------
void __fastcall TProgressDlg::CancelBtnClick(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TProgressDlg::FormClose(TObject *Sender, TCloseAction &Action)
{
PcmThread->Terminate();
}
//---------------------------------------------------------------------------

//----------------------------------------------------------------------------
#ifndef AboutDlgH
#define AboutDlgH
//----------------------------------------------------------------------------
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//----------------------------------------------------------------------------
class TAboutBox : public TForm
{
__published:
TPanel *Panel1;
TImage *ProgramIcon;
TLabel *ProductName;
TLabel *Version;
TLabel *Copyright;
TLabel *Comments;
TButton *OKButton;
private:
public:
virtual __fastcall TAboutBox(TComponent* AOwner);
};
//----------------------------------------------------------------------------
extern TAboutBox *AboutBox;
//----------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------
#include
#pragma hdrstop
#include "AboutDlg.h"
//---------------------------------------------------------------------
#pragma resource "*.dfm"
TAboutBox *AboutBox;
//---------------------------------------------------------------------
__fastcall TAboutBox::TAboutBox(TComponent* AOwner)
: TForm(AOwner)
{
}
//---------------------------------------------------------------------

//---------------------------------------------------------------------------
#ifndef ApplicationH
#define ApplicationH
//---------------------------------------------------------------------------
#include
#include
#include
#include
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

//---------------------------------------------------------------------------
#include
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("MainForm.cpp", Form1);
USERES("Application.res");
USEUNIT("Vector.cpp");
USEUNIT("SquMatr.cpp");
USEUNIT("Matrix.cpp");
USEUNIT("MainComp.cpp");
USEUNIT("SymMatr.cpp");
USEFORM("AboutDlg.cpp", AboutBox);
USEFORM("CalcDlg.cpp", ProgressDlg);
USEUNIT("Calculat.cpp");
USEFORM("OptionsDlg.cpp", OKBottomDlg);
USEFORM("ReportDlg.cpp", ReportOptionsDlg);
USEFORM("EdDelDlg.cpp", EditDeleteDlg);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->Title = "Метод главных компонент";
Application->HelpFile = "C:\\Program Files\\Borland\\CBuilder\\Projects\\Application\\Pcmhelp.hlp";
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
return 0;
}
//---------------------------------------------------------------------------
ПРИЛОЖЕНИЕ 3. ПРОГРАММНАЯ ДОКУМЕНТАЦИЯ ПО ГРАЖДАНСКОЙ ОБОРОНЕ



``СОГЛАСОВАНО``
``УТВЕРЖДАЮ``


Консультант по охране труда
Зав. кафедрой СА и ПО АСУ
к.т.н., доц.
д.т.н., проф.
________________ В.И. Острейко
______________Б.Д. Залещанский
"___"________________ 1999 г.
"___"________________ 1999 г

АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ
СИСТЕМА ПО КУРСУ "ГРАЖДАНСКАЯ ОБОРОНА"
Программа и методика испытаний
ЛИСТ УТВЕРЖДЕНИЯ
Листов

Исполнитель Р.Б. Чихирев

"____" ____________1999 г.

1999 Литера

УТВЕРЖДЕН
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ
СИСТЕМА ПО КУРСУ "ГРАЖДАНСКАЯ ОБОРОНА"
Программа и методика испытаний
Листов
1999 Литера

СОДЕРЖАНИЕ

1. Объект испытаний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2. Цель испытаний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3. Состав предъявляемой документации. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4. Технические требования. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5. Методы испытаний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .


1. ОБЪЕКТ ИСПЫТАНИЙ
Объектом испытаний является автоматизированная расчетная система по курсу ``Гражданская оборона`` .
Система обеспечивает моделирование лабораторных работ на темы :
1. Землетрясения. Общая характеристика;
2. Землетрясения. Взрывы газовоздушной смеси;
3. Землетрясения. Распространение СДЯВ;
4. Землетрясения. Оценка вероятности возникновения и распространения пожаров.
2. ЦЕЛЬ ИСПЫТАНИЙ
Цель испытаний - определить удовлетворяет ли программа, представленная разработчиком, требованиям сформулированным в ТЗ; выявить недостатки в программе и возможные недоработки для их последующего устранения.
3. СОСТАВ ПРЕДЪЯВЛЯЕМОЙ ДОКУМЕНТАЦИИ
В состав документации, предъявляемой при проведении испытаний входят:
* руководство системного программиста;
* руководство программиста;
* руководство оператора.
4. ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ
4.1. Требования к программной документации
Документация на программу должна быть разработана в соответствии с требованиями ЕСПД.
4.2. Требования к техническим характеристикам
Требования к совместимости:
* система должна функционировать на любой ПЭВМ с архитектурой микропроцессора 80486, на которой функционирует операционная система Windows 3.1 или выше.
Испытания правильности функционирования программы проводятся с помощью тестов по специально разработанному сценарию. Состав технических и программных средств, необходимых для проведения испытаний следующий:
* ПЭВМ Intel 80486
* MS DOS 6.22 и Windows 3.1
Если в процессе испытаний обнаружены неисправности технических средств, разрешается повторный запуск шага испытаний по программе.
При обнаружении ошибок, которые не могут быть устранены без прерываний испытаний, испытания прерываются и возобновляются после устранения ошибок.
Система считается выдержавшей испытания, если содержание результатов испытаний совпадают с эталонными результатами.
5. МЕТОДЫ ИСПЫТАНИЙ
Описания проверок с указанием результатов проведения испытаний сведены в таблицу:

Содержание
проверки
Выполняемые действия
Эталонный результат
Выбор необходимой лабораторной работы
В главном меню системы выбрать название лабораторной работы при помощи стрелок.
На экране -отображение меню выбора опций лабораторной работы
Заполнение таблицы исходных данных
Выбрать пункт меню “Ввод данных” и заполнить таблицу исходных данных
Заполненная таблица
Выполнение расчета
Выбрать пункт меню “Расчет”.
На экране в окне вывода появятся результаты моделирования.

Просмотр отчета
Выбрать пункт меню “Просмотр результата”.
На экране в окне вывода появятся результаты моделирования.

Редактирование отчета и вывод его на печать
Выбрать пункт меню “Просмотр результата”. Откорректировать отчет. Осуществить печать нажав на клавишу.
На принтер выведется откорректированный отчет


Консультант по охране труда Зав. кафедрой СА и ПО АСУ
к.т.н., доц. д.т.н., проф.
______________ В.И. Острейко _______________ Б.Д. Залещанский
"___"________________1999г. "___"________________ 1999 г.
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ
СИСТЕМА ПО КУРСУ ``ГРАЖДАНСКАЯ ОБОРОНА``
Руководство системного программиста
ЛИСТ УТВЕРЖДЕНИЯ
Листов

Исполнитель
___________ Р.Б. Чихирев
"____" ______________ 1999 г.

1999 Литера


УТВЕРЖДЕН

АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ
СИСТЕМА ПО КУРСУ "ГРАЖДАНСКАЯ ОБОРОНА"
Руководство системного программиста
Листов
1999 Литера

АННОТАЦИЯ
Настоящее руководство содержит сведения, необходимые для обеспечения действий системного программиста при настройке и работе с автоматизированной расчетной системой по курсу ``Гражданская оборона``.
В документе содержатся общие сведения о системе и ее структуре, описан порядок проверки и настройки системы, а также восстановления после возможного аппаратного сбоя.

СОДЕРЖАНИЕ

1. Общие сведения о системе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Настройка системы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Проверка работоспособности системы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. Поддержка целостности исходных данных и возможные ошибки . . . . . . . . . . . .

1. ОБЩИЕ СВЕДЕНИЯ О СИСТЕМЕ
АРС по курсу ``Гражданская оборона`` предназначена для проведения следующих расчетов
1. Землетрясения. Общая характеристика;
2. Землетрясения. Взрывы газовоздушной смеси;
3. Землетрясения. Распространение СДЯВ;
4. Землетрясения. Оценка вероятности возникновения и распространения пожаров.
2. НАСТРОЙКА СИСТЕМЫ
АРС по курсу "Гражданская оборона" является автономной системой. Она разработана с использованием средств Visual Basic 4.0, поставляется в виде готового исполняемого модуля и способна функционировать самостоятельно без необходимости установки самой среды программирования.
Для запуска системы необходимо:
* скопировать в отдельный каталог оператора все файлы (*.txt - файлы выходных отчетов, ncedit.* - текстовый редактор, MainGo.exe - собственно программа);
* запустить систему командой MainGo.exe
3. ПРОВЕРКА РАБОТОСПОСОБНОСТИ СИСТЕМЫ
Проверка работоспособности осуществляется прогоном тестовых примеров. Подробно все действия, осуществляемые при запуске программы и прогоне тестовых примеров, представлены в Методике испытаний.
4. ПОДДЕРЖКА ЦЕЛОСТНОСТИ ИСХОДНЫХ ДАННЫХ И ВОЗМОЖНЫЕ ОШИБКИ
Программа не имеет специальных встроенных средств семантического анализа исходных данных. Данная задача целиком возлагается на пользователя. Наиболее вероятные ошибки в исходных данных:
1. В знаковом представлении чисел с плавающей точкой вместо точки поставлена занятая
2. Данные введены не в той последовательности как указано
3. Данные введены не в той системе единиц, как указано

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

"СОГЛАСОВАНО" "УТВЕРЖДАЮ"
Консультант по охране труда Зав. кафедрой СА и ПО АСУ
к.т.н., доц. д.т.н., проф.,
____________ В.И. Острейко _____________ Б.Д. Залещанский
"____"____________1999 г. "____"_____________ 1999 г.
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
ПО КУРСУ "ГРАЖДАНСКАЯ ОБОРОНА"
Руководство программиста
ЛИСТ УТВЕРЖДЕНИЯ
Р.МИРЭА.00004-01 34 01-ЛУ
Листов

Исполнитель
___________ Р.Б. Чихирев
"____" ______________ 1999 г.

1999

УТВЕРЖДЕН
Р.МИРЭА.00004-01 34 01-ЛУ
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
ПО КУРСУ "ГРАЖДАНСКАЯ ОБОРОНА"
Руководство программиста
Р.МИРЭА.00004-01 34 01-ЛУ
Листов
1999


АННОТАЦИЯ

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

СОДЕРЖАНИЕ
1. Назначение и условия применения программы . . . . . . . . . . . . . . . . . . . . . .
2. Характеристики программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Обращение к программе, входные и выходные данные. . . . . . . . . . . . . . . .

1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ ПРОГРАММЫ

Автоматизированная расчетная система по курсу ``Гражданская оборона`` предназначена для моделирования лабораторных работ :
1. Землетрясения. Общая характеристика;
2. Землетрясения. Взрывы газовоздушной смеси;
3. Землетрясения. Распространение СДЯВ;
4. Землетрясения. Оценка вероятности возникновения и распространения пожаров.
Автоматизированная расчетная система выполнялась в интересах кафедры “Гражданская оборона” МИРЭА .
Автоматизированная расчетная система является автономной системой. Она разработана в среде Visual Basic 4.0. Для ее запуска необходимо запустить файл MainGo.exe.
2. ХАРАКТЕРИСТИКИ ПРОГРАММЫ

Время загрузки программы: максимум 10 секунд (зависит от типа ПЭВМ). Вся информация об ошибках в ходе выполнения выводится на экран дисплея в виде сообщений.
3. ОБРАЩЕНИЕ К ПРОГРАММЕ, ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ

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


"СОГЛАСОВАНО" "УТВЕРЖДАЮ"
Консультант по спецчасти Зав. кафедрой СА и ПО АСУ
к.т.н. д.т.н., проф.,
____________В.И. Острейко ____________Б.Д.Залещанский "____"______________ 1999 г. "____"_______________ 1999 г.
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
"ГРАЖДАНСКАЯ ОБОРОНА"
Руководство оператора
ЛИСТ УТВЕРЖДЕНИЯ
Р.МИРЭА.00004-01 34 01-ЛУ
Листов

Исполнитель
___________ Р.Б. Чихирев
"____" _______________ 1999 г.
Нормоконтролер
"____" _______________ 1999 г.
1999

УТВЕРЖДЕН
Р.МИРЭА.00004-01 34 01-ЛУ
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
"ГРАЖДАНСКАЯ ОБОРОНА"
Руководство оператора
Р.МИРЭА.00004-01 34 01-ЛУ
Листов
1999

А Н Н О Т А Ц И Я
АРС `` Гражданская оборона`` предназначена для проведения следующих расчетов :
определение мощности взрыва ГВС;
расчет вероятности возникновения пожара;
оценка распространения СДЯВ;
общая характеристика землетрясений.
В документе изложены правила работы с программой.


СОДЕРЖАНИЕ
1. Назначение программы ...................................................................................
2. Условия выполнения программы......................................................................
3. Выполнение программы....................................................................................

1. НАЗНАЧЕНИЕ ПРОГРАММЫ
АРС может использоваться как кафедрой `` Гражданская оборона `` в качестве дополнительного обучающего средства при выполнении лабораторных работ, так и сотрудниками отделов ОТ на предприятиях.
2. УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ
Для обеспечения работы программы необходимы следующие программные и технические средства :
- IBM PC XT/AT или совместимая ПЭВМ;
- объем оперативной памяти не менее 1024 Кб;
- требуется наличие свободного места на жестком диске не менее 100 Мб;
- операционная среда MSDOS 6.22 и Windows 3.1 и выше (или совместимая).
В рабочую директорию должен быть помещен файл MainGo.exe, и все другие необходимые файлы.
3. ВЫПОЛНЕНИЕ ПРОГРАММЫ
3.1. Для начала работы с АРС `` Гражданская оборона `` необходимо запустить файл MainGo.exe.
3.2 Сеанс работы с пользователем начинается с вывода на экран главного меню, определяющего основные действия, возможные в системе (Рис.1):
Ввод данных;
расчет;
вывод результатов;
выход из системы.
Рис 1. Главное меню
Передвижение осуществляется при помощи стрелок, а выбор нужного - нажатием клавиши .
3.3. Выбор альтернативы приводит оператора в подменю одной из расчетных работ, представленном на Рис 2.

Характеристика
Распространение СДЯВ
Взрывы ГВС
Распространение пожаров

Рис 2. Подменю расчетной работы

Передвижение осуществляется при помощи стрелок, а выбор нужного - нажатием клавиши . По окончании ввода исходных данных для получения результата необходимо выбрать альтернативу ``Расчет`` использованием клавиши (Экран задачи после выбора этой альтернативы приведен на Рис 3). Для просмотра коррекции и выводи получившегося результата - выберите альтернативу “Результат”.
Рис 3. Экран задачи после выбора альтернативы “Расчет”
4. СООБЩЕНИЯ ОПЕРАТОРУ
4.1. При невозможности или отсутствии необходимого для работы файла данных выдается сообщение об ошибке : “Не могу открыть файл <файл. имя>”


"СОГЛАСОВАНО" "УТВЕРЖДАЮ"
Консультант по спецчасти Зав. кафедрой СА и ПО АСУ
к.т.н. д.т.н., проф.,
____________ В.И. Острейко ___________Б.Д. Залещанский
"____"______________ 1999 г. "____"_______________ 1999 г.
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
"ГРАЖДАНСКАЯ ОБОРОНА"
Тексты программ
ЛИСТ УТВЕРЖДЕНИЯ
Р.МИРЭА.00004-01 34 01-ЛУ
Листов

Исполнитель
___________ Р.Б. Чихирев
"____" _______________ 1999 г.
Нормоконтролер
"____" _______________ 1999 г.
1999

УТВЕРЖДЕН
Р.МИРЭА.00004-01 34 01-ЛУ
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
"ГРАЖДАНСКАЯ ОБОРОНА"
Тексты программ
Р.МИРЭА.00004-01 34 01-ЛУ
Листов
1999
ПРИЛОЖЕНИЕ 4. ПРОГРАММНАЯ ДОКУМЕНТАЦИЯ ПО ОХРАНЕ ТРУДА


``СОГЛАСОВАНО``
``УТВЕРЖДАЮ``


Консультант по охране труда
Зав. кафедрой СА и ПО АСУ
к.т.н., доц.
д.т.н., проф.
________________ С.М.Кучерук
______________Б.Д. Залещанский
"___"________________ 1999 г.
"___"________________ 1999 г

АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯСИСТЕМА
ПО КУРСУ "ОХРАНА ТРУДА"
Программа и методика испытаний
ЛИСТ УТВЕРЖДЕНИЯ
Листов____

Исполнитель
______________ Р.Б. Чихирев
"____" ____________1999 г.

1999


УТВЕРЖДЕН
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ
СИСТЕМА ПО КУРСУ "ОХРАНА ТРУДА"
Программа и методика испытаний
Листов_____
1999 Литера

СОДЕРЖАНИЕ

1. Объект испытаний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Цель испытаний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Состав предъявляемой документации. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4. Технические требования. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5. Методы испытаний. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1. ОБЪЕКТ ИСПЫТАНИЙ
Объектом испытаний является автоматизированная расчетная система по курсу ``Охрана труда`` .
Система обеспечивает моделирование лабораторных работ на темы :
Постановка лабораторных работ исследования загрязнения выбросами из узкого отдельно стоящего здания.
Постановка лабораторных работ исследования загрязнения выбросами из широкого отдельно стоящего здания.
Постановка лабораторных работ исследования загрязнения выбросами из группы зданий.
Постановка лабораторных работ исследования безопасности электрических установок с изолированной нейтралью и компенсацией ёмкостного тока.
2. ЦЕЛЬ ИСПЫТАНИЙ
Цель испытаний - определить удовлетворяет ли программа, представленная разработчиком, требованиям сформулированным в ТЗ; выявить недостатки в программе и возможные недоработки для их последующего устранения.
3. СОСТАВ ПРЕДЪЯВЛЯЕМОЙ ДОКУМЕНТАЦИИ
В состав документации, предъявляемой при проведении испытаний входят:
руководство системного программиста;
руководство программиста;
руководство оператора.
4. ТЕХНИЧЕСКИЕ ТРЕБОВАНИЯ
4.1. Требования к программной документации
Документация на программу должна быть разработана в соответствии с требованиями ЕСПД.
4.2. Требования к техническим характеристикам
Требования к совместимости:
система должна функционировать на любой ПЭВМ с архитектурой микропроцессора 80286, на которой функционирует операционная система DOS 3.30 или выше.
Испытания правильности функционирования программы проводятся с помощью тестов по специально разработанному сценарию. Состав технических и программных средств, необходимых для проведения испытаний следующий:
ПЭВМ Intel 80286
ОС DOS 3.30
Если в процессе испытаний обнаружены неисправности технических средств, разрешается повторный запуск шага испытаний по программе.
При обнаружении ошибок, которые не могут быть устранены без прерываний испытаний, испытания прерываются и возобновляются после устранения ошибок.
Система считается выдержавшей испытания, если содержание результатов испытаний совпадают с эталонными результатами.
5. МЕТОДЫ ИСПЫТАНИЙ
Описания проверок с указанием результатов проведения испытаний сведены в таблицу:

Содержание
проверки
Выполняемые действия
Эталонный результат
Выбор необходимой лабораторной работы
В главном меню системы выбрать название лабораторной работы при помощи стрелок.
На экране -отображение меню выбора опций лабораторной работы
Заполнение таблицы исходных данных
Выбрать пункт меню “Ввод данных” и заполнить таблицу исходных данных
Заполненная таблица
Выполнение расчета
Выбрать пункт меню “Расчет”.
На экране в окне вывода появятся результаты моделирования.

Просмотр отчета
Выбрать пункт меню “Просмотр результата”.
На экране в окне вывода появятся результаты моделирования.

Редактирование отчета и вывод его на печать
Выбрать пункт меню “Просмотр результата”. Откорректировать отчет. Осуществить печать нажав на клавишу F8.
На принтер выведется откорректированный отчет




Консультант по охране труда к.т.н., доц
Зав. кафедрой СА и ПО АСУ д.т.н., проф
______________ С.М. Кучерук
_______________ Б.Д. Залещанский
"___"________________1999г
"___"________________ 1999 г.

АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ
СИСТЕМА ПО КУРСУ `ОХРАНА ТРУДА``
Руководство системного программиста
ЛИСТ УТВЕРЖДЕНИЯ
Листов_____


Исполнитель

___________ Р.Б. Чихирев

"____" _______________ 1999 г.



Нормоконтролер



"____" _______________ 1999 г.


Литера

1999

УТВЕРЖДЕН
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ
СИСТЕМА ПО КУРСУ "ОХРАНА ТРУДА"
Руководство системного программиста
Листов


1999
Литера

АННОТАЦИЯ
Настоящее руководство содержит сведения, необходимые для обеспечения действий системного программиста при настройке и работе с автоматизированной расчетной системой по курсу ``Охрана труда``.
В документе содержатся общие сведения о системе и ее структуре, описан порядок проверки и настройки системы, а также восстановления после возможного аппаратного сбоя.
СОДЕРЖАНИЕ

1. Общие сведения о системе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Настройка системы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Проверка работоспособности системы. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.Поддержка целостности исходных данных и возможные ошибки . . . . . . .
1. ОБЩИЕ СВЕДЕНИЯ О СИСТЕМЕ
АРС по курсу ``Охрана труда`` предназначена для проведения следующих расчетов
Постановка лабораторных работ исследования загрязнения выбросами из узкого отдельно стоящего здания.
Постановка лабораторных работ исследования загрязнения выбросами из широкого отдельно стоящего здания.
Постановка лабораторных работ исследования загрязнения выбросами из группы зданий.
Постановка лабораторных работ исследования безопасности электрических установок с изолированной нейтралью и компенсацией ёмкостного тока.
2. НАСТРОЙКА СИСТЕМЫ
АРС по курсу "Охрана труда" является автономной системой. Она разработана с использованием средств Borland C++ 3.1, поставляется в виде готового исполняемого модуля и способна функционировать самостоятельно без необходимости установки самой среды программирования.
Для запуска системы необходимо:
скопировать в отдельный каталог оператора все файлы (*.dat - файлы исходных данных, *.txt - файлы выходных отчетов, ncedit.* - текстовый редактор, lab.exe - собственно программа);
запустить систему командой lab.exe
3. ПРОВЕРКА РАБОТОСПОСОБНОСТИ СИСТЕМЫ
Проверка работоспособности осуществляется прогоном тестовых примеров. Подробно все действия, осуществляемые при запуске программы и прогоне тестовых примеров, представлены в Методике испытаний.
4. ПОДДЕРЖКА ЦЕЛОСТНОСТИ ИСХОДНЫХ ДАННЫХ И ВОЗМОЖНЫЕ ОШИБКИ
Программа не имеет специальных встроенных средств семантического анализа исходных данных. Данная задача целиком возлагается на пользователя. Наиболее вероятные ошибки в исходных данных:
В конце файла отсутствует перевод на новую строку
После знака равно отсутствует пробел
В знаковом представлении чисел с плавающей точкой вместо точки поставлена занятая
Данные введены не в той последовательности, как указано
Данные введены не в той системе единиц, как указано

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

"СОГЛАСОВАНО" "УТВЕРЖДАЮ"
Консультант по охране труда Зав. кафедрой СА и ПО АСУ
к.т.н., доц. д.т.н., проф.,
____________ С. М. Кучерук _____________ Б.Д. Залещанский
"____"____________1999 г. "____"_____________ 1999 г.
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
ПО КУРСУ "ОХРАНА ТРУДА"
Руководство программиста
ЛИСТ УТВЕРЖДЕНИЯ
Р.МИРЭА.00004-01 34 01-ЛУ
Листов______




Исполнитель

___________ Р.Б. Чихирев

"____" ______________ 1999 г.


1999




УТВЕРЖДЕН
Р.МИРЭА.00004-01 34 01-ЛУ
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
ПО КУРСУ "ОХРАНА ТРУДА"
Руководство программиста
Р.МИРЭА.00004-01 34 01-ЛУ
Листов_____


1999



АННОТАЦИЯ
В настоящем руководстве содержатся общие сведения о структуре системы и данных, необходимые для работы программиста.


СОДЕРЖАНИЕ
1.Назначение и условия применения программы . . . . . . . . . . . . . . . . . . . . . .
2. Характеристики программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3. Обращение к программе, входные и выходные данные. . . . . . . . . . . . . . . .

1. НАЗНАЧЕНИЕ И УСЛОВИЯ ПРИМЕНЕНИЯ ПРОГРАММЫ

Автоматизированная расчетная система по курсу ``Охрана труда`` предназначена для моделирования лабораторных работ :
Постановка лабораторных работ исследования загрязнения выбросами из узкого отдельно стоящего здания.
Постановка лабораторных работ исследования загрязнения выбросами из широкого отдельно стоящего здания.
Постановка лабораторных работ исследования загрязнения выбросами из группы зданий
Постановка лабораторных работ исследования безопасности электрических установок с изолированной нейтралью и компенсацией ёмкостного тока.
Автоматизированная расчетная система выполнялась в интересах кафедры “Экология и охрана труда” МГИРЭА (ТУ).
Автоматизированная расчетная система является автономной системой. Она разработана в среде Borland C++ 3.1 на языке ANSI C. Для ее запуска необходимо запустить файл lab.exe.
2. ХАРАКТЕРИСТИКИ ПРОГРАММЫ
Время загрузки программы: максимум 10 секунд (зависит от типа ПЭВМ). Вся информация об ошибках в ходе выполнения выводится на экран дисплея в виде сообщений.
3. ОБРАЩЕНИЕ К ПРОГРАММЕ, ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ

Программа запускается с помощью модуля lab.exe.
Входными данными являются значения, вводимые в таблицы исходных данных, которые содержаться в файлах с расширением *.dat. (Их можно редактировать как в ручную, в любом текстовом редакторе, так и из системы).
Выходными данными являются результаты моделирования, оформленные в виде отчета в формате текстового файла (расширение *.txt).


"СОГЛАСОВАНО"
"УТВЕРЖДАЮ"
Консультант по спецчасти к.т.н.
Зав. кафедрой СА и ПО АСУ д.т.н., проф.
____________С.М.Кучерук
___________Б.Д.Залещанский
"____"_____________ 1999 г
"____"_____________ 1999 г.

АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
"ОХРАНА ТРУДА"
Руководство оператора
ЛИСТ УТВЕРЖДЕНИЯ
Р.МИРЭА.00004-01 34 01-ЛУ
Листов


Исполнитель

___________ Р.Б. Чихирев

"____" _______________ 1999 г.



Нормоконтролер



"____" _______________ 1999 г.



1999



УТВЕРЖДЕН
Р.МИРЭА.00004-01 34 01-ЛУ
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
"ОХРАНА ТРУДА"
Руководство оператора
Р.МИРЭА.00004-01 34 01-ЛУ
Листов______


1999


АННОТАЦИЯ
АРС `` Охрана труда `` предназначена для проведения следующих расчетов:
* определение мощности взрыва паров;
* определение количества пара для пожаротушения;
* определение взрывоопасного состояния;
* расчет пространственного распределения СВЧ-илучения;
* расчет флотационной установки;
* определение категории взрывоопасности;
* расчет вероятности возникновения пожара;
* расчет эвакуации при пожаре.
В документе изложены правила работы с программой.

СОДЕРЖАНИЕ
Назначение программы ...................................................................................
Условия выполнения программы......................................................................
Выполнение программы....................................................................................

1. НАЗНАЧЕНИЕ ПРОГРАММЫ
АРС может использоваться как кафедрой ``Охрана труда`` в качестве дополнительного обучающего средства при выполнении лабораторных работ.
2. УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ
Для обеспечения работы программы необходимы следующие программные и технические средства :
-IBM PC XT/AT или совместимая ПЭВМ;
- объем оперативной памяти не менее 640 Кб;
- требуется наличие свободного места на жестком диске не менее 3 Мб;
- операционная среда MSDOS 3.3 и выше (или совместимая).
В рабочую директорию должен быть помещен файл all.exe, и все другие необходимые файлы.
3. ВЫПОЛНЕНИЕ ПРОГРАММЫ
3.1. Для начала работы с АРС `` Охрана труда `` необходимо запустить файл lab.exe.
3.2 Сеанс работы с пользователем начинается с вывода на экран главного меню, определяющего основные действия, возможные в системе (Рис.1):
выбор одной из 8-ми лабораторных работ ;
выход из системы :

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

Рис 1. Главное меню
Передвижение осуществляется при помощи стрелок, а выбор нужного - нажатием клавиши .
Выбор альтернативы приводит оператора в подменю одной из лабораторных работ, представленном на Рис 2.

Коррекция данных
Расчет
Просмотр
Вернуться

Рис 2. Подменю лабораторной работы

Передвижение осуществляется при помощи стрелок, а выбор нужного - нажатием клавиши . По окончании ввода исходных данных для получения результата необходимо выбрать альтернативу ``Расчет`` использованием клавиши (Экран задачи после выбора этой альтернативы приведен на Рис 3). Для просмотра коррекции и выводи получившегося результата - выберите альтернативу “Просмотр”. Для возвращения в основное меню при помощи стрелок выбрать альтернативу ``Вернуться ``.

Rf = 1000
Uf = 380
f = 50
C = 0.0001
L=10

Ток через человека I = 0.0153 A

Рис 3. Экран задачи после выбора альтернативы “Расчет”
4. СООБЩЕНИЯ ОПЕРАТОРУ
4.1. При невозможности или отсутствии необходимого для работы файла данных выдается сообщение об ошибке : “Не могу открыть файл < имя файла>”


"СОГЛАСОВАНО"
"УТВЕРЖДАЮ"
Консультант по спецчасти к.т.н.
Зав. кафедрой СА и ПО АСУ д.т.н., проф.,
____________ С. М. Кучерук
___________Б.Д. Залещанский
"____"______________ 1999 г.
"____"_______________ 1999 г.




АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
"ОХРАНА ТРУДА"
Тексты программ
ЛИСТ УТВЕРЖДЕНИЯ
Р.МИРЭА.00004-01 34 01-ЛУ
Листов____


Исполнитель

___________ Р.Б. Чихирев

"____" _______________ 1999 г.



Нормоконтролер



"____" _______________ 1999 г.


1999



УТВЕРЖДЕН
Р.МИРЭА.00004-01 34 01-ЛУ
АВТОМАТИЗИРОВАННАЯ РАСЧЕТНАЯ СИСТЕМА
"ОХРАНА ТРУДА"
Тексты программ
Р.МИРЭА.00004-01 34 01-ЛУ
Листов
1999


// г================================================¬
// ¦ File lab.cpp ¦
// ¦ Постановка лабораторных работ по Охране труда ¦
// ================================================-
#include
#include
#include
#include
#include
#include
#include
//--------------------------------------------------------------
// Подпрограмма вывода одного символа в видеопамять
// Для адаптеров типа CGA/EGA/VGA
void vovputch(int x,int y,char c,char attr)
{
pokeb(0xB800,(80*y+x)*2,c);
pokeb(0xB800,(80*y+x)*2+1,attr);
}
//---------------------------------------------------------------
// Функция изменяет атрибуты прямоугольника с заданными параметрами
//
void shadow(int startx,int starty,int endx,int endy,char attr)
{
int i,j;
for(i=startx;i<=endx;i++)
for(j=starty;j<=endy;j++)
pokeb(0xB800,(j*80+i)*2+1,attr);
}
//----------------------------------------------------------------
//Функция устанавливает положение курсора
void move_cursor(int x, int y)
{
union REGS r;
r.h.ah=2;
r.h.bh=0;
r.h.dh=x;
r.h.dl=y;
int86(0x10,&r,&r);
}
//----------------------------------------------------------------
//Функция рисует рамку с заданными координатами
//
void border(int left,int top,int right,int bottom)
{
int i,j;
for(i=left;i<=right;i++)
{
vovputch(i-1,top-1,'=',23);
vovputch(i-1,bottom-1,'=',23);
}
for(j=top;j<=bottom;j++)
{
vovputch(left-1,j-1,'¦',23);
vovputch(right-1,j-1,'¦',23);
}
vovputch(left-1,top-1,'г',23);
vovputch(right-1,top-1,'¬',23);
vovputch(left-1,bottom-1,'L',23);
vovputch(right-1,bottom-1,'-',23);
}
//---------------------------------------------------------------
// Вывод строки в заданных координатах экрана
// Понимает \n
void vovputs(int x1,int y1,char *s,int attrib)
{
int a=x1;
int b=y1;
while(*s)
{
if(*s=='\n'){
a=x1;
b++;
s++;
}
vovputch(a,b,*s,attrib);
s++;
a++;
}
}
//---------------------------------------------------------------
// Создаёт всплывающее меню и выводит его на экран в требуемом месте
// Выводит в него строки текста
// Возвращает номер выбранной строки
//
int wind(int startx,int starty,char *text[],int maxcount)
{
register int i,j;
void *d;
char choice;
int counter,end,firstx,firsty,out;
int restore;
int left,top,right,bottom,maxlen;
maxlen = strlen(text[0]);// Размер строки текста в окне (!)
// Положение окна
left=startx;
right=left+maxlen+3;
top=starty;
bottom=top+maxcount-1+4;
// Память для хранения строки текста
d = new char[maxlen*2+2];
// Сохранить область окна и тени
gettext(left,top,right+1,bottom+1,d);
// Нарисовать затенение
shadow(left,top,right,bottom,7);
for(i=left;i<=right;i++)
for(j=top;j<=bottom;j++)
vovputch(i-1,j-1,' ',23);
// Нарисовать рамку
border(left,top,right,bottom);
textattr(23); // Установить атрибуты текста
window(left,top,right,bottom);// Установить окно для вывода
firstx=3; //
firsty=3; //
for(i=0;i gotoxy(firstx,firsty+i);
cputs(text[i]);
}
textattr(15);
gotoxy(firstx,firsty);
cputs(text[0]);
counter=0;
textattr(23);
end=1;
do{
choice=getch();
switch(choice)
{
case 0:
choice=getch();
switch(choice)
{
case 72:
counter--;
if(counter<0)
counter=maxcount-1;
restore=counter;
restore++;
if(restore>maxcount-1)
restore=0;
textattr(23);
gotoxy(firstx,firsty+restore);
cputs(text[restore]);
textattr(15);
gotoxy(firstx,firsty+counter);
cputs(text[counter]);
break;
case 80:
counter++;
if(counter>maxcount-1)
counter=0;
restore=counter;
restore--;
if(restore<0)
restore=maxcount-1;
textattr(23);
gotoxy(firstx,firsty+restore);
cputs(text[restore]);
textattr(15);
gotoxy(firstx,firsty+counter);
cputs(text[counter]);
break;
}
break;
case '\r':
out=counter+1;
end=0;
break;
default:
out=choice;
end=0;
break;
}
} while(end!=0);
puttext(left,top,right+1,bottom+1,d);
delete []d;
textattr(23);
return(out);
}
//
// Открывает окно и выводит туда текст
//
void textwindow(int x,int y,char *t)
{
register int i,j;
int hei,left,top,right,bottom,maxlen,l;
int len[24];
char *p;
void *w;
int co;
for(co=0;co<=24;co++) len[co]=0;
maxlen=0;
p=t;
hei=1;
l=0;
while(*p){
len[l]++;
if(*p=='\n'){
hei++;
l++;
}
p++;
}
maxlen=len[0];
for(i=0;i<=l;i++)
if(len[i]>maxlen)
maxlen=len[i];
left=x;
top=y;
right=x+maxlen+1;
bottom=y+hei+1;
w=new char[maxlen*2+2];
gettext(left,top,right+1,bottom+1,w);
shadow(left,top,right,bottom,7);
for(i=left;i<=right;i++)
for(j=top;j<=bottom;j++)
vovputch(i-1,j-1,' ',23);
border(left,top,right,bottom);
textattr(23);
window(left,top,right,bottom);
vovputs(left,top,t,23);
getch();
puttext(left,top,right+1,bottom+1,w); //
delete []w;
}
//
// Расчет безопасности в электроустановках с изолированной нейтралью
// с компенсацией емкостных токов
//
int electric(void)
{
return 0;
}
// --------------------------------------------------------------
// Расчёт выбросов из узкого здания
// Сначала считываем информацию из файла, затем выводим на экран
// и генерируем отчет в файле
int uzkoe(void)
{
FILE *d1, *d2;
int i, len, j, k, m, n;
static char *in_str, *fl_str, out_str[256];
double M, K, V, Hzd, L, B, X, Y /*, B1*/ ;
double C, Cx, Cy, S1;
double C1, Cx1, Cy1;
if ((d1 = fopen("uzkoe.dat", "rt")) == NULL){
fprintf(stderr, "Не могу открыть файл .\n");
return 1;
}
for(m=1;m<=75;m++)
for(n=1;n<=10;n++)
vovputch(m,n,' ',23);
border(2,2,76,11);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,2,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
M = atof(fl_str); // кол-во вр-х веществ
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,3,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
K = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,4,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
V = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,5,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
Hzd = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,6,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
L = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,7,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
B = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,8,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=') break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
X = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,9,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
Y = atof(fl_str);
fclose(d1);
vovputs(2,22,"Результаты расчетов смотрите в файле ",25);
if ((d2 = fopen("uzkoe.txt", "wt")) == NULL){
fprintf(stderr, "Не могу открыть файл .\n");
return 1;
}
for(m=1;m<=75;m++)
for(n=13;n<=23;n++)
vovputch(m,n,' ',25);
border(2,14,76,24);
if( X>=0 && X<=6*Hzd){
vovputs(2,14,"В единой циркуляционной зоне 0<=х<=6Нзд\n",25);
Cx = (1.3*M*K)/V;
Cx *= ( (0.6/(Hzd*L)) + 42/pow((1.4*L+B+X),2) );
sprintf(out_str,"%.2f",Cx);
strcat(out_str," - Концентрация вредных веществ Сх\n");
vovputs(2,15,out_str,25);
fputs(out_str,d2);
S1 = exp( -(30*Y*Y) / pow((1.4*L+B+X),2) );
Cy = (1.3*M*K)/V;
Cy *= ( (0.6/(Hzd*L)) + (42*S1)/pow((1.4*L+B+X),2) );
sprintf(out_str,"%.2f",Cy);
strcat(out_str," - Концентрация вредных веществ Сy\n");
vovputs(2,16,out_str,25);
fputs(out_str,d2);
C = (2*M*K)/(V*L*Hzd);
sprintf(out_str,"%.2f",C);
strcat(out_str," - Концентрация вредных веществ С\n");
vovputs(2,17,out_str,25);
fputs(out_str,d2);
}else{
vovputs(2,18,"В циркуляционной зоне за зданием х>6Нзд\n",25);
Cx1 = (55*M*K)/(V*pow(1.4*L+B+X,2));
sprintf(out_str,"%.2f",Cx1);
strcat(out_str," - Концентрация вредных веществ Сх\n");
vovputs(2,19,out_str,25);
fputs(out_str,d2);
S1 = exp( -(30*Y*Y) / pow((1.4*L+B+X),2) );
Cy1 = Cx1*S1;
sprintf(out_str,"%.2f",Cy1);
strcat(out_str," - Концентрация вредных веществ Сy\n");
vovputs(2,20,out_str,25);
fputs(out_str,d2);
C1 = (7.2*M*K)/(V*L*(B+X));
sprintf(out_str,"%.2f",C1);
strcat(out_str," - Концентрация вредных веществ С\n");
vovputs(2,21,out_str,25);
fputs(out_str,d2);
}
fclose(d2);
getch();
return 0;
}
// Расчёт выбросов из широкого здания
// Сначала считываем информацию из файла, затем генерируем отчет в файле
int shirokoe(void)
{
FILE *d1, *d2;
int i, len, j, k, m, n;
static char *in_str, *fl_str, out_str[256];
double M, K, V, Hzd, L, B, X, Y, B1, B2, LL, mm, B3;
double Htld, Hgr, H;
double C, Cx, Cy,S, S1,S2,S3, S4;
double C1, Cx1, Cy1, C2, Cx2, Cy2;
double C3, Cx3, Cy3, C4, Cx4,Cy4;
double C5, Cx5, Cy5, C6, Cx6, Cy6;
double C7, Cx7, /*Cy7, */ C8, Cx8 , Cy8;
double C9, Cx9,Cy9, C10, Cx10,Cy10;
double C11, Cx11, Cy11;
if ((d1 = fopen("shirokoe.dat", "rt")) == NULL){
fprintf(stderr, "Не могу открыть файл .\n");
return 1;
}
for(m=1;m<=75;m++)
for(n=1;n<=16;n++)
vovputch(m,n,' ',23);
border(2,2,76,17);
//
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,2,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
M = atof(fl_str); // Количество вредных веществ, выбр. источником
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,3,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=') break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
K = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,4,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
V = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,5,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
Hzd = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,6,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
L = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,7,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
B = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,8,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
X = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,9,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
Y = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,10,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
B1 = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,11,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
B2 = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,12,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=') break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
LL = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,13,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
mm = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,14,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
H = atof(fl_str);
in_str=fgets(in_str,80,d1);
len = strlen(in_str)-1;
in_str[len]='\0';
vovputs(2,15,in_str,23);
for(i=len;i>=0;i--)
if(in_str[i]=='=')
break;
for(j=i+1,k=0;j fl_str[k]=in_str[j];
fl_str[k]='\0';
B3 = atof(fl_str);
fclose(d1);
for(m=1;m<=75;m++)
for(n=18;n<=23;n++)
vovputch(m,n,' ',25);
border(2,19,76,24);
vovputs(2,19,"Результаты расчетов смотрите в файле ",25);
if ((d2 = fopen("shirokoe.txt", "wt")) == NULL){
fprintf(stderr, "Не могу открыть файл .\n");
return 1;
}
fputs("В наветренной циркуляционной зоне\n",d2);
if( B1<=2.5*Hzd){
fputs("На крыше в наветренной циркуляционной зоне b1<=2.5*Нзд\n",d2);
Cx = (1.3*M*K)/V;
Cx *= ( (0.6/(Hzd*L)) + 42/pow((1.4*L+B1),2) );
sprintf(out_str,"%.2f",Cx);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S = exp( -(30*Y*Y) / pow((1.4*L+B1),2) );
Cy = (1.3*M*K)/V;
Cy *= ( (1/(Hzd*L)) + (42*S)/pow((1.4*L+B1),2) );
sprintf(out_str,"%.2f",Cy);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C = (3.9*M*K)/(V*L*Hzd);
sprintf(out_str,"%.2f",C);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}else{
fputs("На крыше вне наветренной циркуляционной зоны b1>2.5*Нзд\n",d2);
Cx1 = (55*M*K)/(V*pow(1.4*L+B1,2));
sprintf(out_str,"%.2f",Cx1);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S = exp( -(30*Y*Y) / pow((1.4*L+B1),2) );
Cy1 = Cx1*S;
sprintf(out_str,"%.2f",Cy1);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C1 = (6.2*M*K)/(V*L*B1);
sprintf(out_str,"%.2f",C1);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}
if( X <= 4*Hzd && X >=0 ){
fputs("В заветренной циркуляционной зоне 0<=х<=4*Нзд\n",d2);
Cx2 = (5.6*M*mm*K)/(V*L*Hzd);
sprintf(out_str,"%.2f",Cx2);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S1 = exp( -(30*Y*Y) / pow((1.4*L+B+X),2) );
Cy2 = Cx2*S1;
sprintf(out_str,"%.2f",Cy2);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C2 = (2.8*M*mm*K)/(V*L*Hzd);
sprintf(out_str,"%.2f",C2);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}else{
fputs("Вне заветренной циркуляционной зоны х>4*Нзд\n",d2);
Cx3 = (15*M*K)/(V*L*(B+X));
sprintf(out_str,"%.2f",Cx3);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S1 = exp( -(30*Y*Y) / pow((1.4*L+B+X),2) );
Cy3 = Cx3*S1;
sprintf(out_str,"%.2f",Cy3);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C3 = (7.2*M*K)/(V*L*(B+X));
sprintf(out_str,"%.2f",C3);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}
Hgr = 0.36 * B3 + 2.5 * Hzd;
Htld = (H-1.8*Hzd)/(Hgr-1.8*Hzd);
if(Htld>0.3){
fputs("Вне наветренной циркуляционной зоны над крышей при Н<0.3\n",d2);
if(B1>=2.5*Hzd){
fputs("На крыше вне наветренной циркуляционной зоны b1>=2.5*Нзд\n",d2);
/*S4 = exp( -(30*(pow(H-Hzd,2)*Y*Y)) / pow(B2),2) );*/
Cx4 = (55*M*K)/(V*B2*B2+55*LL);
sprintf(out_str,"%.2f",Cx4);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S2 = exp( -(30*Y*Y) / pow(B2,2) );
Cy4 = Cx4*S2;
sprintf(out_str,"%.2f",Cy4);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C4 = (7.2*M*K)/(V*L*B2+7.2*LL);
sprintf(out_str,"%.2f",C4);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}
if( X <= 4*Hzd && X >=0 ){
fputs("В заветренной циркуляционной зоне 0<=х<=4*Нзд\n",d2);
Cx5 = (1.3*M*mm*K)/V;
Cx5 *= (0.8/(Hzd*L))+(42/pow(1.4*L+X,2));
sprintf(out_str,"%.2f",Cx5);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S3 = exp( -(30*Y*Y) / pow((1.4*L+X),2) );
Cy5 = (1.3*M*mm*K)/V;
Cy5 *= (0.8/(Hzd*L))+((42*S3)/pow(1.4*L+X,2));
sprintf(out_str,"%.2f",Cy5);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C5 = (2.8*M*mm*K)/(V*L*Hzd);
sprintf(out_str,"%.2f",C5);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}else{
fputs("Вне заветренной циркуляционной зоны за зданием х>4*Нзд\n",d2);
Cx6 = (55*M*mm*K)/(V*pow(1.4*L+X,2)+55*LL);
sprintf(out_str,"%.2f",Cx6);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S3 = exp( -(30*Y*Y) / pow((1.4*L+X),2) );
Cy6 = Cx6*S3;
sprintf(out_str,"%.2f",Cy6);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C6 = (7.2*M*mm*K)/(V*L*(B3+X)+7.2*LL);
sprintf(out_str,"%.2f",C6);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}
}else{
fputs("Вне заветренной циркуляционной зоны над крышей при Н>0.3\n",d2);
if( B1>=2.5*Hzd && Y<(H-Hzd) ){
fputs("На крыше вне наветренной циркуляционной зоны b1>=2.5*Нзд\n",d2);
S4 = exp( -(30*(pow(H-Hzd,2)*Y*Y)) / pow(B2,2) );
Cx7 = (26*M*K)*S4/(V*B2*B2+26*LL);
sprintf(out_str,"%.2f",Cx7);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
sprintf(out_str,"%.2f",Cx7);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C7 = (3.6*M*K)/(V*L*B2+3.6*LL);
sprintf(out_str,"%.2f",C7);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}
if( X <= 4*Hzd && X >=0 ){
fputs("В заветренной циркуляционной зоне 0<=х<=4*Нзд\n",d2);
Cx8 = (1.3*M*mm*K)/V;
Cx8 *= (0.8/(Hzd*L))+(20/pow(1.4*L+X,2));
sprintf(out_str,"%.2f",Cx8);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S3 = exp( -(30*Y*Y) / pow((1.4*L+X),2) );
Cy8 = Cx8*S3;
sprintf(out_str,"%.2f",Cy8);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C8 = (1.4*M*mm*K)/(V*L*Hzd);
sprintf(out_str,"%.2f",C8);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}else{
fputs("Вне заветренной циркуляционной зоны за зданием х>4*Нзд\n",d2);
Cx9 = (26*M*mm*K)/(V*pow(1.4*L+X,2)+26*LL);
sprintf(out_str,"%.2f",Cx9);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S3 = exp( -(30*Y*Y) / pow((1.4*L+X),2) );
Cy9 = Cx9*S3;
sprintf(out_str,"%.2f",Cy9);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C9 = (3.6*M*mm*K)/(V*L*(B3+X)+3.6*LL);
sprintf(out_str,"%.2f",C9);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}
}
fputs("В заветренной циркуляционной зоне\n",d2);
if( X<=4*Hzd && X>=0){
fputs("В заветренной циркуляционной зоне 0<=x<=4*Нзд\n",d2);
Cx10 = (1.3*M*K)/V;
Cx10 *= ( (0.8/(Hzd*L)) + 42/pow((1.4*L+X),2) );
sprintf(out_str,"%.2f",Cx10);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S3 = exp( -(30*Y*Y) / pow((1.4*L+X),2) );
Cy10 = (1.3*M*K)/V;
Cy10 *= ( (0.8/(Hzd*L)) + (42*S3)/pow((1.4*L+X),2) );
sprintf(out_str,"%.2f",Cy10);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C10 = (2.8*M*K)/(V*L*Hzd);
sprintf(out_str,"%.2f",C10);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}else{
fputs("Вне заветренной циркуляционной зоны за зданием х>4*Нзд\n",d2);
Cx11 = (55*M*K)/(V*pow(1.4*L+X,2));
sprintf(out_str,"%.2f",Cx11);
strcat(out_str," - Концентрация вредных веществ Сх\n");
fputs(out_str,d2);
S3 = exp( -(30*Y*Y) / pow((1.4*L+X),2) );
Cy11 = Cx11*S;
sprintf(out_str,"%.2f",Cy11);
strcat(out_str," - Концентрация вредных веществ Сy\n");
fputs(out_str,d2);
C11 = (7.2*M*K)/(V*L*X);
sprintf(out_str,"%.2f",C11);
strcat(out_str," - Концентрация вредных веществ С\n");
fputs(out_str,d2);
}
fclose(d2);
getch();
return 0;
}
//---------------------------------------------------------------
// Расчёт выбросов из группы зданий
// Сначала считываем информацию из файла, затем отчет в файле
// так как все данные не вмещаютя на экране
int gruppa(void)
{
FILE *d1, *d2;
int i, len, j, k, m, n;
static char *in_str, *fl_str, out_str[256];
double M, K, V, Hzd, L, B, X, Y,/*B1, B2,*/ /*LL,*/ mm, B3, X1;
double Htld, Hgr, H;
double C, Cx, Cy,/* S,*/ S1, /*S2, */S3 /*,S4*/ ;
double C1, Cx1, Cy1, C2, Cx2, Cy2;
double C3, Cx3, Cy3, C4, Cx4/*, Cy4*/;
double C5, Cx5, /*Cy5, */ C6, Cx6, Cy6;
double C7, Cx7, Cy7, C8, Cx8 /*,Cy8*/;
double C9, Cx9, /*Cy9,*/ C10, Cx10, Cy10;
double C11, Cx11, Cy11;
// откываем файл для ввода данных
if ((d1 = fopen("gruppa.dat", "rt")) == NULL){
fprintf(stderr, "Не могу открыть файл .\n");
return 1;
}
// ??? Проверить
for(m=1;m<=75;m++)
for(n=1;n<=17;n++) vovputch(m,n,' ',23);
border(2,2,76,18);
// Ввод значений параметров из файла
in_str=fg