Разработка программно-вычислительного комплекса, предназначенного для разработки эффективных форматов микрокоманд для различных способов микропрограммирования
Общие сведения об управляющих автоматах, построенных на основе принципа программируемой логики. Горизонтально-вертикальное кодирование. Алгоритмы кодирования операционной части. Анализ результатов оценки критериев. Алгоритм поиска минимального покрытия.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.08.2012 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
-- внешнего облучения при прохождении радиоактивного облака;
-- внешнего облучения, обусловленного радиоактивным загрязнением поверхности земли и местных объектов;
-- внутреннего облучения при вдыхании воздуха, зараженного радиоактивными веществами;
-- внутреннего облучения при употреблении загрязненной воды и пищи;
-- контактного облучения в результате попадания на кожу и одежду радиоактивных веществ [11].
На территории Украины работают 4 атомных электростанций с 15 энергетическими ядерными реакторами, которые дают около 50% электроэнергии, вырабатываемой в стране. Для проведения исследовательских работ функционируют 2 ядерных реактора. В Украине работают более 8 тысяч предприятий и организаций, которые используют различные радиоактивные вещества, а также хранят и перерабатывают радиоактивные отходы.
Развитие отечественной ядерной энергетики ведется на основе строительства реакторов на тепловых нейтронах, позволяющих использовать в качестве топлива слабообогощенный природный уран (U-238).
К таким реакторам относятся:
-- реакторы большой мощности, канальные (РБМК-1000, РБМК-1500), замедлителем в нем служит графит, а теплоносителем - кипящая вода, циркулирующая снизу вверх по вертикальным каналам, проходящим через активную зону. Он размещается в наземной шахте и содержит 192 т слабообогощенной двуокиси урана-238, а под ним находится железобетонный бункер для сбора радиоактивных отходов при работе реактора;
-- водоводяные энергетические реакторы (ВВЭР-600, ВВЭР-1000), в которых вода служит одновременно теплоносителем и замедлителем.
При аварии на АЭС с выбросом радионуклидов (ЧАЭС) необходимо быстро выявить радиационную обстановку методом прогнозирования, а затем уточнить ее по данным разведки. В данной методике оценка радиационной обстановки производится методом прогнозирования.
При авариях на АЭС выделяются 5 зон радиоактивного загрязнения. Зона радиационной опасности (М) - представляет собой участок загрязненной местности, в пределах которой доза излучения на открытой местности может составлять от 5 до 50 рад. в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 0.014 рад/час.
В пределах зоны «М» целесообразно ограничить пребывание людей, не привлекаемых непосредственно к работам по ликвидации последствий радиационной аварии.
При ликвидации аварии в зоне «М» и во всех других зонах должны выполняться основные мероприятия: радиационный и дозиметрический контроль, защита органов дыхания, профилактический прием йодосодержащих препаратов, санитарная обработка людей, дезактивация обмундирования и техники.
Зона умеренного загрязнения (А) - представляет собой участок загрязненной местности, в пределах которой доза излучения может составлять от 50 до 500 рад в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 0.14 рад/час. Действия формирований в зоне «А» необходимо осуществлять в защитной технике с обязательной защитой органов дыхания.
В зоне сильного загрязнения (Б) - доза излучения составляет от 500 до 1500 рад в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 1.4 рад/час. Действия формирований необходимо осуществлять в защитной технике с размещением в защитных сооружениях.
В зоне опасного загрязнения (В) - доза излучения составляет от 1500 до 5000 рад в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 4.2 рад/час. Действия формирований возможно только в сильно защищенных объектах, техники. Время нахождения в зоне - несколько часов.
В зоне чрезвычайного опасного загрязнения (Г) - доза излучения может составлять больше 5000 рад в год. На внешней границе этой зоны уровень радиации через 1 час после аварии составляет 14 рад/час. В зоне нельзя находиться даже кратковременно.
Оценка радиационной обстановки при аварии на АЭС сводится к определению методом прогноза доз излучения и выработке оптимальных режимов деятельности людей при нахождении их в прогнозируемой зоне загрязнения [11].
10.2 Расчетная часть
Расчетная часть выполнена по методическим указаниям [11].
Оценить радиационную обстановку и выработать предложения по защите рабочих и служащих университета, оказавшегося в зоне радиоактивного загрязнения после аварии на АЭС по следующим исходным данным:
- тип реактора РБМК-1000;
- мощность реактора 1000Мвт;
- количество аварийных реакторов - n = 1;
- доля выброса радиоактивных веществ в процентах - h = 10%;
- дата аварии - 12.03.12;
- время, в которое произошла авария - Тав. = 9час.00 мин.;
- время начала работы - Тнач. = 13.00 час.;
- начало работы после аварии - Тн = Тнач-Тав=4 час;
- продолжительность работы - Траб. = 9 часов;
- коэффициент ослабления мощности дозы - Косл. = 1;
- метеоусловия:
скорость ветра на высоте 10 м - V10 = 2 м/с;
направление ветра - в сторону университета;
облачность - отсутствует (2 балла);
- расстояние от университета до АЭС - Rх = 25 км.;
- допустимая доза облучения за время работы - Dуст. = 0.5 бэр;
- обеспеченность убежищами (СИЗ) - 100%.
По таблице 1 определяем категорию устойчивости атмосферы, соответствующую погодным условиям и заданному времени суток. По условию: облачность отсутствует (2б.), скорость приземного ветра V10 = 2 м/с. Согласно таблице 1 категория устойчивости А (конвекция).
По таблице 2 определяем среднюю скорость ветра Vср в слое распространения радиоактивного облака. Согласно таблицы для категории устойчивости А и скорость приземного ветра V10 = 2 м/с средняя скорость ветра Vср = 2 м/с.
По таблице 3 для заданного типа ЯЭР (РБМК-1000), доли выброшенных РВ (h = 10%) и Vср= 2 м/с определяем размеры прогнозируемых зон загрязнения местности и наносим их в масштабе в виде правильных эллипсов.
М L = 140 км.
РБМК-1000 А L = 28.0 км.
9.00 12.03 Vср= 2 м/с Б L = 6.88 км
В отсутствует
Рисунок 10.1 - Прогнозируемый размер зон
4. Исходя из заданного расстояния от университета (Rх = 25 км.) до аварийного реактора с учетом образующихся зон загрязнения устанавливаем, что университет оказался на внешней границе зоны «А».
5. По таблице 7 определяем время начала формирования следа радиоактивного загрязнения (tф) после аварии (время начала выпадения радиоактивных осадков на территории университета).
Для Rх=25 км, категории устойчивости А и средней скорости ветра Vср=2 м/с, tф=2.5 часа.
Следовательно, университет через tф = 2.5 часа после аварии окажется в зоне загрязнения, что потребует дополнительных мер по защите рабочих и служащих.
6. По таблице 9 для зоны загрязнения «А» с учетом времени начала работы после аварии (Тнач = 4 часа) и продолжительности работы (Траб = 9 часов) определяем дозу облучения, которую получат рабочие и служащие университета при открытом расположении на внешней границе зоны «А». Согласно таблице, Дзоны =2.25 бэр. Расчет дозы с учетом внешней или внутренней границы производим по формулам:
- для внутренней границы зоны (10.1)
- для внешней границы зоны (10.2)
Кзоны выбираем из примечания к каждой зоне (М, А, Б, В)
Для нашего примера: Дзоны = 2.25 бэр Косл = 1 (по исходным данным) Кзоны = 3.2 (примечание к таблице 9).
(бэр).
Расчет показывает, что рабочие и служащие университета за 9 часов работы в зоне «А» могут получить установленную дозу (Дуст = 0.5 бэр).
7. Используя данные таблицы 9 и формулу (10.2), определяем допустимое время начала работы рабочих служащих университета после аварии на АЭС при условии получения дозы не более Дуст. = 0.5 бэр (по условию) по формуле:
(бэр).
Т.к. для объектов, расположенных у внешней границы зоны:
Для объектов, расположенных у внутренней границы зоны:
Исходя из полученных данных, можно выделить два варианта решения задачи.
1. Согласно Д'з = 1.6 бэр и Траб = 9 часов по таблице 9 находим Тнач = 18 часов, т.е. можно начинать работу только через 18 часов после аварии на АЭС и работать полную смену (Траб = 9 часов).
2. По исходным данным необходимо начать работу после аварии через 4 часа (Тнач = 13 часов). Следовательно, по таблице 9 и времени Тнач=4 часа и рассчитанной дозе Д'з = 1.6 бэр с учетом Дуст находим продолжительность работы Траб = 6 часов.
Следовательно, рабочие и служащие университета, чтобы получить дозу не выше установленной (0.5 бэр), могут начинать работу в зоне «А» через 18 часа (Тнач) Д'з = 1.6 бэр и выполнять ее 9 часов (Траб) или при начале работы через 4 часа (по условию), Д'з = 1.6 бэр могут работать только 6 часов (Траб).
Таблица 10.1 Таблица расчетных данных
№вар. |
Категорияустойчивостиатмосферы |
Vсрм/с |
Зона, место взоне |
tф |
Дз |
Добл |
Д'з |
РежимыДано:1) Тнач; Д'з2) Траб; Д'зОпред: 1) tраб ?2) tнач ? |
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
|
21 |
А |
2 |
А, внешняя граница |
2.5 |
2.25 |
0.7 |
1.6 |
при Д'з= 1.6 бэр и Tнач=18 ч > tраб=9 чТраб=4ч >tнач= 6 ч |
10.3 Выводы и мероприятия по защите сотрудников университета
Университет окажется у внешней границы зоны умеренного загрязнения (зона А).
Время начала формирования радиоактивного следа после аварии на АС tф=2.5 ч.
При работе в заданном режиме в помещении с Косл = 1 служащие могут получить дозу облучения Добл = 0.7 бэр, что превышает установленную дозу Дуст = 0.5 бэр.
Мероприятия по защите рабочих и служащих:
- после получения оповещения о движении радиоактивного облака установить непрерывное радиационное наблюдение с переносными или стационарными дозиметрическими приборами;
- при прохождении радиоактивного облака, рабочих и служащих университета укрыть в убежище или ПРУ (в постах коллективной защиты);
- по данным разведки уточнить прогнозируемую радиационную обстановку;
- во избежание переоблучения рабочих и служащих университета необходимо организовать сменную работу (вахту) с учетом допустимой дозы;
- для исключения заноса радиоактивных веществ внутрь помещений необходимо загерметизировать их, а при наличии фильтровентиляционных установок включить их в режиме «чистой вентиляции»;
- после выпадения радиоактивных осадков и снижения загрязненности территории произвести дезактивационные работы с последующим контролем степени загрязненности. При больших уровнях загрязненности и невозможности работы служащих университета необходимо эвакуировать в незагрязненные районы.
ЗАКЛЮЧЕНИЕ
В результате разработки программно-вычислительного комплекса и проведенного анализа его функционирования для разработки эффективных форматов микрокоманд для различных способов микропрограммирования была создана программы, отвечающая основным требованиям, таким как кодирование набора микрокоманд с указанным списком микроопераций различными видами микропрограммирования, выдача основных характеристик и оценка сложности кодирования.
Ни одна электронная управляющая машина не может обойтись без устройства управления, при разработке которого в последнее время предпочтение отдается микропрограммному принципу управления.
Микропрограммирование в настоящее время получило самое широкое распространение. Микропрограммирование используется в центральных процессорах, в контроллерах ввода/вывода, в управлении дисплеями, в системах автоматизированной обработки сигналов, при построении компиляторов, реализации функций операционных систем и т.д. Особенно широкое применение микропрограммное управление получило в связи с появлением микропроцессоров.
Разработка средств микропрограммного управления - трудоемкая и сложная задача, поэтому автоматизация микропрограммирования становится необходимостью, и не только потому, что разработчик освобождается от рутинной работы, а главным образом потому, что средства, предоставляемые системами автоматизации, позволяют повысить качество и скорость разработки. Последнее обстоятельство тем более важно, поскольку производительность и стоимость ЭВМ существенно зависят от степени совершенства средств микропрограммного управления.
В этой связи актуальность разработки эффективных систем автоматизации микропрограммирования не вызывает сомнений. Задачи, связанные с автоматизацией разработки средств микропрограммного управления, решены далеко не полностью, тем более, что требование известной универсальности систем автоматизации привносит дополнительные и весьма существенные трудности.
Использование того или иного способа кодирования определяется целью, поставленной перед проектировщиком. Если необходимо существенно упростить структуру формирователя сигналов микроопераций (ФСМО), то прибегают к горизонтальному микропрограммированию. Однако, если операционное устройство предназначено для реализации большого разнообразия (n?100) микроопераций, то применение горизонтального способа кодирования приводит к существенному увеличению длины операционного поля микрокоманды, что, в свою очередь, требует расширения информационной емкости ПМК. Использование вертикального способа кодирования дает наименьшую длину поля М микрокоманды, но сопровождается усложнением структуры ФСМО.
Оптимального согласования размерности поля микрооперации и сложности аппаратной реализации ФСМО можно добиться за счет использования смешанного кодирования (горизонтально-вертикального или вертикально-горизонтального).
Точных рекомендаций по выбору способа кодирования для каждой конкретной микропрограммы не существует и поэтому решения, принимаемые разработчиком, носят субъективный характер. Один из возможных подходов к решению этого этапа заключается в просмотре качественной и предварительной количественной оценке в соответствии с критерием оптимальности, нескольких вариантов кодирования. Однако этот путь связан со значительными трудозатратами. Определение формата МК позволяет уточнить принятые решения с помощью некоторых количественных оценок, в частности по разрядности операционной и адресной частей МК.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Апраксин Ю. К. Основы теории и проектирования цифровых автоматов: Учебное пособие для ВУЗов. - Севастополь: Издательство СевГТУ, 2001. - 345 с.: ил.
2. Апраксин Ю. К. Синтез управляющих автоматов с программируемой логикой: Методические указания к циклу лабораторных работ по дисциплине «Цифровые ЭВМ» для студентов направления 6.050102 - «Компьютерная инженерия» дневной формы обучения / Сост. Ю. К. Апраксин, Т. В. Волкова - Севастополь: Издательство СевНТУ, 2009. - 44 с.
3. Булей Г. Микропрограммирование. Перевод с франц. под ред. М.Д. Пебарта. - Москва: Изд-во Мир, 1973, - 128 с.
4. ГОСТ 12.2.032-78 «Пожароопасность веществ и материалов. Номенклатура показателей и методы их определения».
5. ГОСТ 12.1.005-88. «Система стандартов безопасности труда. Общие санитарно-гигиенические требования к воздуху рабочей зоны».
6. ГОСТ 12.1.004-91 «Система стандартов безопасности труда. Пожарная безопасность. Общие требования».
7. ГОСТ 12.2.032-78 «Система стандартов безопасности труда. Рабочее место при выполнении работ сидя. Общие эргономические требования».
8. ГОСТ 12.1.003-83 «ССБТ. Шум. Общие требования безопасности».
9. НПАОП 0.00-1.31-99 «Правила охорони праці під час експлуатації електронно-обчислювальних машин».
10. Одинцов А.Н. Методические указания по выполнению расчетной части раздела «Охрана труда» в дипломных проектах «Расчет естественного и искусственного освещения» для студентов технических специальностей всех форм обучения / Сост. А.Н. Одинцов. - Севастополь: Изд-во СевНТУ, 2005 - 20с.
11. Придатко И.А. Методические указания к расчетно-графической работе на тему «Выявление и оценка радиационной обстановки на объекте при загрязнении радиоактивными веществами после аварии на атомной электростанции (АЭС).» / И.А. Придатко - Севастополь: Изд-во СевНТУ, 2011 - 24с.
12. Раздобреева Г.А. Методические указания к выполнению курсовой работы «Расчет экономической эффективности создания и использования программного продукта» по дисциплинам «Основы менеджмента и маркетинга», «Менеджмент» для студентов специальностей 7.091501, 7.091401, 7.080401 всех форм обучения / Сост. Г.А. Раздобреева, Е. В. Коваль, Т.В. Кулешова, С.В. Ключко.- Севастополь: Изд-во СевНТУ, 2009.- 24с.
13. СН 4559-88 «Временные санитарные нормы и правила для работников вычислительных центров».
14. СНиП ІІ-4-79. «Нормы проектирования. Естественное и искусственное освещение».
15. Щепин Ю.Н. Методические указания к практическому занятию на тему «Метод анализа иерархий» по дисциплине «Теория оптимальных решений» / Ю.Н. Щепин - Севастополь: Изд-во СевНТУ, 2002 - 11с.
16. Электронный ресурс / Свободная энциклопедия http://ru.wikipedia.org/wiki/Алгоритм_Брона_--_Кербоша
17. Электронный ресурс / Свободная энциклопедия http://ru.wikipedia.org/wiki/ Задача_о_вершинном_покрытии
18. Электронный ресурс / Свободная энциклопедия http://ru.wikipedia.org/wiki/ Метод_Квайна
19. Электронный ресурс / Свободная энциклопедия http://ru.wikipedia.org/wiki/ Тестирование
ПРИЛОЖЕНИЕ А - ТЕКСТ ПРОГРАММЫ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.IO;
using System.Collections;
namespace Kodirovochki{
class Program
{
public static string path = "";
public static List<List<string>> MasMK = new List<List<string>>(); //динамический двумерный массив
public static List<List<string>> MasMO = new List<List<string>>();
public static List<string> rowMK = new List<string>();
public static List<string> rowMO = new List<string>();
public static List<int> listOfMicOp = new List<int>();
public static int[] ObrabotanieStroki;
public static int[] ObrabotanieStrokiKoda;
public static int dlinKod;
public static bool errorMOcopy = false;
private static bool skleivaetsa;
[STAThread]
static void Main() {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1()); }
public static string ReadFile(String path) {
int counter = 0;
string line;
string text = null;
// Read the file and display it line by line.
StreamReader file = new StreamReader(path);
MasMK = new List<List<string>>();
while ((line = file.ReadLine()) != null && !(line.Equals("")) ){
text = text + line + Environment.NewLine;
rowMK = new List<string>();
int nomer = line.IndexOf("=");
string oper = line.Substring(nomer + 1);
string[] massiv = oper.Split(',');
for (int i = 0; i < massiv.Length; i++) {
bool Nedubl = true;
for (int g = i + 1; g < massiv.Length; g++) { if (massiv[i].Equals(massiv[g])) { Nedubl = false; errorMOcopy = true; } }
if (Nedubl) { rowMK.Add(massiv[i]); } }
MasMK.Add(rowMK);
counter++; }
file.Close();
return text; }// окончание чтения файла
public static int FindNumberOfOperation()
{
listOfMicOp = new List<int>();
for (int i = 0; i < MasMK.Count; i++)
{
for (int j = 0; j < MasMK[i].Count; j++) {
if (NotDuplicate(MasMK[i][j])) { string num = MasMK[i][j].Substring(1); listOfMicOp.Add(Convert.ToInt32(num)); }
}
}
listOfMicOp.Sort();
return listOfMicOp.Count;
}
private static bool NotDuplicate(string p)
{
bool NetDublei = true;
for (int i = 0; i < listOfMicOp.Count; i++) {
if (("y"+listOfMicOp[i]).Equals(p)) { NetDublei = false; } }
return NetDublei;
}
public static int[,] gorizont()
{
int a = FindNumberOfOperation();
dlinKod = a;
int[,] arr = new int[MasMK.Count, a];
for (int i = 0; i < MasMK.Count; i++)
{
for (int j = 0; j < a; j++)
{
if (FindOperation(("y"+listOfMicOp[j]), i)) { arr[i, j] = 1; }
else arr[i, j] = 0; } }
return arr;
}
private static bool FindOperation(string p, int stroka)
{
bool poisk = false;
for (int i = 0; i < MasMK[stroka].Count; i++)
{
if (p.Equals(MasMK[stroka][i])) { poisk = true; }
}
return poisk; }
internal static int[,] vertikal()
{
int[,] arr = gorizont();
ObrabotanieStroki = new int[arr.GetLength(0)];
dlinKod = (int)Math.Ceiling(Math.Log((double)(arr.GetLength(0)), 2.0));
ObrabotanieStrokiKoda = new int[(int)Math.Pow(2.0, dlinKod)];
int[,] vertik = new int[arr.GetLength(0), dlinKod];
int shet = arr.GetLength(0);
int z; //формат вывода..добавляем нули в начало
PermutationsWithRepetition gen = new PermutationsWithRepetition(new int[] { 1, 0 }, dlinKod);
int[,] variations = gen.getVariations();
while ((z = StrokaMaxRank(arr)) != -1) {
int strokaKoda = StrokaMaxRankFromKod(variations);
for (int k = 0; k < dlinKod; k++) { vertik[z, k] = variations[strokaKoda, k]; }}
return vertik;
}
private static int StrokaMaxRank(int[,] arr)
{
int maxRank = -1;
int numberOfLine = -1;
for (int i = 0; i < arr.GetLength(0); i++)
{
if (ObrabotanieStroki[i] != 1)
{
int sch = 0;
for (int j = 0; j < arr.GetLength(1); j++){sch = sch + arr[i, j];}
if (maxRank < sch)
{ maxRank = sch; numberOfLine = i; }
}
}
if (numberOfLine != -1) { ObrabotanieStroki[numberOfLine] = 1; }
return numberOfLine; }
private static int StrokaMaxRankFromKod(int[,] arr)
{
int maxRank = -1;
int numberOfLine = -1;
for (int i = 0; i < arr.GetLength(0); i++)
{
if (ObrabotanieStrokiKoda[i] != 1)
{
int sch = 0;
for (int j = 0; j < arr.GetLength(1); j++)
{
sch = sch + arr[i, j];
}
if (maxRank < sch)
{ maxRank = sch; numberOfLine = i; }
}
}
if (numberOfLine != -1) { ObrabotanieStrokiKoda[numberOfLine] = 1; }
return numberOfLine;
}
internal static string[] getBoolForGorizont()
{
string[] bulMassiv = new string[listOfMicOp.Count];
for (int i = 0; i < listOfMicOp.Count; i++)
{
bulMassiv[i] = ("y" + listOfMicOp[i]) + " = m" + (bulMassiv.Length - (i + 1)) + Environment.NewLine;
}
return bulMassiv; }
internal static string[] getBoolForVertical()
{
int[,] verKod = vertikal();
string[] bulMassiv = new string[listOfMicOp.Count];
getTableMicroOperation(verKod);
for (int i = 0; i < MasMO.Count; i++)
{
string text = "";
for (int j = 0; j < MasMO[i].Count; j++)
{
string insert = "";
for (int k = 0; k < MasMO[i][j].Length; k++)
{ string simbol = MasMO[i][j].Substring(k, 1);
if (simbol.Equals("0")) { insert = insert + "~"; }
insert = insert + "m" + (MasMO[i][j].Length - k - 1);
}
text = text + " " + insert + " v";
}
bulMassiv[i] = text.Substring(0, text.Length - 1);
}
return bulMassiv;
}
private static void getTableMicroOperation(int[,] verKod) // в каких микрокомандах встречается каждая микрооперация
{
MasMO = new List<List<string>>();
for (int z = 0; z < listOfMicOp.Count; z++)
{
rowMO = new List<string>();
for (int i = 0; i < MasMK.Count; i++)
{
for (int j = 0; j < MasMK[i].Count; j++)
{
if (MasMK[i][j].Equals(("y" + listOfMicOp[z])))
{
string row = "";
for (int ggg = 0; ggg < dlinKod; ggg++)
{
row = row + verKod[i, ggg] + "";
}
rowMO.Add(row); } } }
MasMO.Add(rowMO); } }
internal static string[] optimisationBoolForVert()
{
string[] bulMassiv = new string[listOfMicOp.Count];
for (int i = 0; i < MasMO.Count; i++)
{
skleivaetsa = true;
while (skleivaetsa)
{
skleivaetsa = false;
conglutination(i);//номер строки (микрооперации) на склейку
}
}
for (int i = 0; i < MasMO.Count; i++)
{
string text = "";
for (int j = 0; j < MasMO[i].Count; j++)
{
string insert = "";
if (MasMO[i][j] != null)
{
for (int k = 0; k < MasMO[i][j].Length; k++)
{ string simbol = MasMO[i][j].Substring(k, 1);
if (simbol.Equals("0"))
{
insert = insert + "~";
insert = insert + "m" + (MasMO[i][j].Length - k - 1);
}
else {
if (simbol.Equals("1"))
{
insert = insert + "m" + (MasMO[i][j].Length - k - 1); }
}
}
text = text + " " + insert + " v";
}
}
bulMassiv[i] = text.Substring(0, text.Length - 1);
}
return bulMassiv;
}
private static void conglutination(int num)
{
for (int i = 0; i < MasMO[num].Count; i++)
{
//bool Nedubl = true;
for (int g = i + 1; g < MasMO[num].Count; g++)
{
if (klei( i, g,num)) { skleivaetsa = true; } } } }
private static bool klei(int i, int g, int num)
{ bool ok = false;
int indexSkliki = -1;
int shetRasnizi = 0;
string first = MasMO[num][i];
string second = MasMO[num][g];
if (first != null & second != null)
{
for (int k = 0; k < first.Length; k++)
{
if ((first.Substring(k, 1)).Equals(second.Substring(k, 1))) { }
else { shetRasnizi++; indexSkliki = k; }
}
if (shetRasnizi == 1) { MasMO[num][g] = null;
char[] arr = first.ToCharArray();
arr[indexSkliki]='-';
string s = new string(arr);
MasMO[num][i] = s;
ok = true; } }
return ok; }
internal static int[] FindMinCover(int[,] workArray) {
int [] selectedRows = new int[workArray.GetLength(0)];
int [] selectedColumns = new int[workArray.GetLength(1)];
bool thereIsNoWorkColumn = false;
do{ // ищем ядерные строки (еще не выбранные)
int numberOfNuclearRow = -1;
for (int i = 0; i < selectedColumns.Length; i++)
{
int count = 0;
if (selectedColumns[i] != 1) //если не выбрана еще то считаем в ней единицы
{
for (int j = 0; j < selectedRows.Length; j++)
{
if (selectedRows[j] != 1)
{
count = count + workArray[j, i];
}
}
if (count == 1) {
for (int stroka = 0; stroka < selectedRows.Length; stroka++)
{
if(workArray[stroka,i]==1) numberOfNuclearRow = stroka;
}
}
}
}
int findNuclear = numberOfNuclearRow;//вернем номер строки ядерной или -1 если нет таких
if (findNuclear != -1)
{
selectedRows[findNuclear] = 1;
//checkColumnsForRow(findNuclear);
for (int i = 0; i < selectedColumns.Length; i++)
{
if (workArray[findNuclear, i] == 1) { selectedColumns[i] = 1; }
}
}
else{ // если нет ядерных ищем строку максимального ранга из остаdшихся
int numberOfMaxRankRow = -1;
int rank = 0;
for (int i = 0; i < selectedRows.Length; i++)
{
int count = 0;
if (selectedRows[i] != 1) //если не выбранна еще то считаем в ней единицы
{
for (int j = 0; j < selectedColumns.Length; j++)
{
if (selectedColumns[j] != 1)
{
count = count + workArray[i, j];
}
}
if (rank < count) { rank = count; numberOfMaxRankRow = i; }
}
}
int findMaxRank = numberOfMaxRankRow;
if (findMaxRank != -1)
{
selectedRows[findMaxRank] = 1;
// checkColumnsForRow(findMaxRank);
for (int i = 0; i < selectedColumns.Length; i++)
{
if (workArray[findMaxRank, i] == 1) { selectedColumns[i] = 1; }
}
}
} //проверка на то что есть еще незачеркнутые столбцы
thereIsNoWorkColumn = false;
for (int i = 0; i < selectedColumns.Length; i++)
{
if (selectedColumns[i] != 1) { thereIsNoWorkColumn = true; } } }
while (thereIsNoWorkColumn);
return selectedRows; }
internal static string gorVertKod() {
String text = null;
int[,] verKod = vertikal();
getTableMicroOperation(verKod);
int[,] tableSovm = FindSovmestOper();//нашли таблицу совместимости микрокоманд
List<List<int>> subGrafs = Graf.FindAllCliques(tableSovm);// нашли строки составлящие подграфы
int[,] subArray = toArray(subGrafs, tableSovm.GetLength(0));//преобразовали в массив для поиска мин покрытия)
int[] minCover = FindMinCover(subArray);// нашли строки состаляющие мин покрытие
List<List<int>> subGrafs2 = CheckForOverlay(subArray , minCover , subGrafs);//удаляем пересечения подмножжеств
List<String []> Kodi = new List<String []>();
for (int i = 0; i < subGrafs2.Count; i++){ //посчитать длину генерации и создать массив.
int peremen = subGrafs2[i].Count+1;
peremen = (int)Math.Ceiling(Math.Log(peremen, 2));
PermutationsWithRepetition gen = new PermutationsWithRepetition(new int[] { 1, 0 }, peremen);
int[,] variations = gen.getVariations();
String[] stroki = new String[subGrafs2[i].Count+1];
for (int gg = 0; gg < subGrafs2[i].Count; gg++)
{
string stroka = null;
for (int ggg = 0; ggg < variations.GetLength(1); ggg++)
{
stroka = stroka + variations[gg, ggg];
}
stroki[gg] = stroka;
}
String stroka2 = null;
for (int dl = 0; dl < peremen; dl++) { stroka2 = stroka2 + "0"; }
stroki[subGrafs2[i].Count] = stroka2;
Kodi.Add(stroki); }
for (int ii = 0; ii < subGrafs2.Count; ii++){
text = text + "G" +(ii+1)+" = ";
for (int jj = 0; jj < subGrafs2[ii].Count; jj++)
{
String UFUUU = "y" + (subGrafs2[ii][jj] + 1)+" ";
text = text + UFUUU;
}
text = text + Environment.NewLine ; }
text = text + Environment.NewLine;
text = text + Environment.NewLine;
for (int i = 0; i < MasMK.Count ; i++){
for (int ii = 0; ii < subGrafs2.Count; ii++) {
int hh = YestStroka(MasMK[i],subGrafs2[ii]);
if (hh != -1) { text = text + "" + Kodi[ii][hh] + " | "; }
else {text = text + "" + Kodi[ii][subGrafs2[ii].Count]+" | ";}
}
text = text + "Y" + (i + 1) + " ";
text = text + Environment.NewLine; }
return text;
}
private static int YestStroka(List<string> list,List<int> list_2)
{
int yest = -1;
for(int i = 0 ; i<list.Count;i++){
for (int j = 0; j < list_2.Count; j++) {
if(list[i].Equals("y"+(list_2[j]+1))){ yest = j; } } }
return yest; }
private static List<List<int>> CheckForOverlay(int[,] subArray, int[] minCover, List<List<int>> subGrafs)
{
List<List<int>> subGrafs2 = new List<List<int>>(); // найти перекрытия групп и устранить его
//строк мин покрытия
for (int i = 0; i < minCover.Length; i++)//для каждой строки мин покрытия выбираем каждый элемент и ищем в других строках мин покрытия
{
if (minCover[i] != 0) { subGrafs2.Add(subGrafs[i]); }
}
int[,] tableMinCover = toArray2(subGrafs2, MasMO.Count);// преобразовали в массив
// находим все для каждого элемента массив строк в которых он есть и сравнивая выбираем ту что останется
for (int i = 0; i < subGrafs2.Count-1; i++)
{
for (int j = 0; j < subGrafs2[i].Count; j++)
{
for (int ii = i + 1; ii < subGrafs2.Count; ii++)
{
for (int jj = 0; jj < subGrafs2[ii].Count; jj++)
{
if (subGrafs2[i][j].Equals(subGrafs2[ii][jj]))
{ int del = -1;
int a = subGrafs2[i].Count -1;
int b = subGrafs2[ii].Count -1;
int s1 =(int) Math.Log(a,2);
int s2 =(int) Math.Log(b,2);
int N1 =(int) Math.Pow(a,s1);
int N2 =(int) Math.Pow(b,s2);
int razn1 = N1 -a;
int razn2 = N2 -b;
if(razn1<razn2){del = i;subGrafs2[i].RemoveAt(j);}
else {
if (razn1 > razn2)
{ del = ii; subGrafs2[ii].RemoveAt(jj); }
else //если одинаково близки то та что длиннее
{
if (subGrafs2[i].Count > subGrafs2[ii].Count) { subGrafs2[i].RemoveAt(j); }
else { subGrafs2[ii].RemoveAt(j); }
}
}
}
}
}
}
}
return subGrafs2;
}
private static int[,] toArray2(List<List<int>> subGrafs2, int p)
{
int[,] massiv = new int[subGrafs2.Count, p];
for (int i = 0; i < subGrafs2.Count; i++)
{
for (int j = 0; j < subGrafs2[i].Count; j++)
{
massiv[i, subGrafs2[i][j]] = 1;
}
}
return massiv;
}
private static int[,] toArray(List<List<int>> subGrafs,int p)
{
int[,] massiv = new int[subGrafs.Count, p];
for (int i = 0; i < subGrafs.Count; i++)
{
for (int j = 0; j < subGrafs[i].Count; j++)
{
massiv[i, subGrafs[i][j]] = 1;
}
}
return massiv;
}
internal static string vertGorKod()
{
String text = null;
int[,] verKod = vertikal();
getTableMicroOperation(verKod);
int[,] tableNeSovm = FindSovmestOper();//нашли таблицу несовместимости микрокоманд
List<List<int>> subGrafs = Graf.FindAllCliques(tableNeSovm);// нашли строки составляющие подграфы
int[,] subArray = toArray(subGrafs, tableSovm.GetLength(0));//преобразовали в массив для поиска мин покрытия)
int[] minCover = FindMinCover(subArray);// нашли строки составляющие мин покрытие
List<List<int>> subGrafs2 = CheckForOverlay(subArray , minCover , subGrafs);//удаляем пересечения подмножеств
List<String []> Kodi = new List<String []>();
for (int i = 0; i < subGrafs2.Count; i++)
{
//посчитать длину генерации и создать массив.
int peremen = subGrafs2[i].Count+1;
peremen = (int)Math.Ceiling(Math.Log(peremen, 2));
PermutationsWithRepetition gen = new PermutationsWithRepetition(new int[] { 1, 0 }, peremen);
int[,] variations = gen.getVariations();
String[] stroki = new String[subGrafs2[i].Count+1];
for (int gg = 0; gg < subGrafs2[i].Count; gg++)
{
string stroka = null;
for (int ggg = 0; ggg < variations.GetLength(1); ggg++)
{
stroka = stroka + variations[gg, ggg];
}
stroki[gg] = stroka;
}
String stroka2 = null;
for (int dl = 0; dl < peremen; dl++) { stroka2 = stroka2 + "0"; }
stroki[subGrafs2[i].Count] = stroka2;
Kodi.Add(stroki);
}
private static int[,] FindSovmestOper()
{
int[,] massiv = new int[MasMO.Count, MasMO.Count];
for (int i = 0; i < MasMO.Count-1; i++)
{
for (int j = 0; j < MasMO[i].Count; j++)
{
for (int ii = i + 1; ii < MasMO.Count; ii++)
{
for (int jj = 0; jj < MasMO[ii].Count; jj++)
{
if (MasMO[i][j].Equals(MasMO[ii][jj])) { massiv[i, ii] = massiv[ii, i] = 1; } } } } }
for (int i = 0; i < MasMO.Count; i++)
{
for (int j = 0; j < MasMO.Count; j++)
{
if (massiv[i, j] == 1) { massiv[i, j] = 0; }
else { massiv[i, j] = 1; } } }
return massiv; } } }
class Graf
{
public static int[,] gmatrix;
public static List<List<int>> FindAllCliques(int[,] gmatrix) {
Graf.gmatrix = gmatrix;
List<List<int>> output = new List<List<int>>();
//сюда помещаются вершины, образующие клику
List<int> M = new List<int>();
//список вершин графа
List<int> K = new List<int>();
//список "отработанных" вершин
List<int> P = new List<int>();
//вершина
int v;
Stack<int> stackV = new Stack<int>();
Stack<List<int>> stackM = new Stack<List<int>>();
Stack<List<int>> stackK = new Stack<List<int>>();
Stack<List<int>> stackP = new Stack<List<int>>();
//список несмежных с вершиной вершин
List<int> GS = new List<int>();
//заполняем список вершинами графа
for (int i = 0; i < gmatrix.GetLength(0); i++)
K.Add(i);
while (K.Count != 0 || M.Count != 0)
{
if (K.Count != 0)
{
v = K[0];
stackM.Push(M.GetRange(0, M.Count));
stackK.Push(K.GetRange(0, K.Count));
stackP.Push(P.GetRange(0, P.Count));
stackV.Push(v);
M.Add(v);
GS = G(v);
SubtractSet(K, GS);
SubtractSet(K, v);
SubtractSet(P, GS);
}
else
{
if (P.Count == 0) //клика найдена
output.Add(M.GetRange(0, M.Count));
M = stackM.Pop();
K = stackK.Pop();
P = stackP.Pop();
v = stackV.Pop();
SubtractSet(K, v);
P.Add(v);
}
}
return output;
}
/* вычитает вершину из множества */
public static void SubtractSet(List<int> set, int vert)
{
for (int i = 0; i < set.Count; i++)
{
if (set[i] == vert)
set.RemoveAt(i);
}
}
/* вычитает второе множество из первого */
public static void SubtractSet(List<int> set1, List<int> set2)
{
for (int i = 0; i < set1.Count; i++)
for (int j = 0; j < set2.Count; j++)
if (set1.Count != 0 && i < set1.Count)
if (set1[i] == set2[j])
set1.RemoveAt(i);
}
/* возвращает список вершин, не смежных с vert */
public static List<int> G(int vert)
{
List<int> ret = new List<int>();
for (int i = 0; i < gmatrix.GetLength(0); i++)
if (gmatrix[i, vert] == 0)
ret.Add(i);
return ret;
}
}
}
class PermutationsWithRepetition {
private int variationLength;
private int[] source;
//private int[] p;
//private int p_2;
public PermutationsWithRepetition(int[] source, int variationLength)
{
this.source = source;
this.variationLength = variationLength;
}
public int[,] getVariations() {
int srcLength = source.Length;
int permutations = (int) Math.Pow(srcLength, variationLength);
int[,] table = new int[permutations,variationLength];
for (int i = 0; i < variationLength; i++) {
int t2 = (int) Math.Pow(srcLength, i);
for (int p1 = 0; p1 < permutations;) {
for (int al = 0; al < srcLength; al++) {
for (int p2 = 0; p2 < t2; p2++) {
table[p1,i] = source[al];
p1++; } } } }
return table; } } }
class Statistic
{
public static void DrawGraph()
{
double[,] a = new double [301,2];
double[,] b = new double[301, 2];
double[,] c = new double[301, 2];
double[,] d = new double[301, 2];//= new int [,];
// String[] text = new String[101];
Microsoft.Office.Interop.Excel.Application ExcelAppR = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
ObjWorkBook = ExcelAppR.Workbooks.Open("C:/Test.xls");
Microsoft.Office.Interop.Excel.Worksheet m_workSheet = null;
m_workSheet = ExcelAppR.ActiveSheet;
for (double i = 0; i < 300; i++)
{
int ii = (int)i;
m_workSheet.Cells[ i+1 , 1] = ii.ToString();//первый столбей итая строка
m_workSheet.Cells[ i + 1 ,2] = f1(i).ToString();
double gg = f2(i);
string ff = Convert.ToString(gg);
if (ff.Length > 5) { ff = Convert.ToString(gg).Substring(0, 4); }
m_workSheet.Cells[i + 1, 3] = ii.ToString();//первый столбей итая строка
m_workSheet.Cells[i + 1, 4] = ff;
gg = f3(i+1);
ff = Convert.ToString(gg);
if (ff.Length > 5) { ff = Convert.ToString(gg).Substring(0, 4); }
m_workSheet.Cells[i + 1, 5] = ii.ToString();//первый столбей итая строка
m_workSheet.Cells[i + 1, 6] = ff;
gg = f4(i);
ff = Convert.ToString(gg);
if (ff.Length > 5) { ff = Convert.ToString(gg).Substring(0, 4); }
m_workSheet.Cells[i + 1, 7] = ii.ToString();//первый столбей итая строка
m_workSheet.Cells[i + 1, 8] = ff;
Application.DoEvents(); }
ObjWorkBook.SaveAs(@"C:/Test2.xls",
Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, null, null, null, null,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, null, null, null, null, null);
ObjWorkBook.Close(true, null, null);
ExcelAppR.Quit();
ExcelAppR = new Microsoft.Office.Interop.Excel.Application();
ObjWorkBook = ExcelAppR.Workbooks.Open("C:/Test2.xls");
m_workSheet = null;
m_workSheet = ExcelAppR.ActiveSheet;
for (int i = 0; i < 300; i++)
{
Microsoft.Office.Interop.Excel.Range range = m_workSheet.get_Range("A" + (i+1).ToString(), "A" + (i+1).ToString());
Microsoft.Office.Interop.Excel.Range range2 = m_workSheet.get_Range("B" + (i + 1).ToString(), "B" + (i + 1).ToString());
a [i, 0] = Convert.ToDouble(range.Text.ToString());
a [i, 1] = Convert.ToDouble(range2.Text.ToString());
range = m_workSheet.get_Range("C" + (i + 1).ToString(), "C" + (i + 1).ToString());
range2 = m_workSheet.get_Range("D" + (i + 1).ToString(), "D" + (i + 1).ToString());
b[i, 0] = Convert.ToDouble(range.Text.ToString());
b[i, 1] = Convert.ToDouble(range2.Text.ToString());
range = m_workSheet.get_Range("E" + (i + 1).ToString(), "E" + (i + 1).ToString());
range2 = m_workSheet.get_Range("F" + (i + 1).ToString(), "F" + (i + 1).ToString());
c[i, 0] = Convert.ToDouble(range.Text.ToString());
c[i, 1] = Convert.ToDouble(range2.Text.ToString());
range = m_workSheet.get_Range("G" + (i + 1).ToString(), "G" + (i + 1).ToString());
range2 = m_workSheet.get_Range("H" + (i + 1).ToString(), "H" + (i + 1).ToString());
d[i, 0] = Convert.ToDouble(range.Text.ToString());
d[i, 1] = Convert.ToDouble(range2.Text.ToString());
Application.DoEvents();
}
ObjWorkBook.SaveAs(@"C:/Test.xls",
Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal, null, null, null, null,
Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlShared, null, null, null, null, null);
ObjWorkBook.Close(true, null, null);
ExcelAppR.Quit();
Form2 mySecondForm = new Form2(a, b, c, d);
mySecondForm.Show();
}
}
} public partial class Form1 : Form
{
public static string path = "";
public Form1()
{
InitializeComponent(); }
private void button1_Click(object sender, EventArgs e) {
openFileDialog1.ShowDialog(); }
public void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
path = openFileDialog1.FileName;
string text = Program.ReadFile(path);
button2.Show();
button3.Show();
button8.Show();
button9.Show();
textBox1.Text = text; }
private void button2_Click(object sender, EventArgs e)
{
int[,] gorKod = Program.gorizont();
string text = null;
text = text + " ";
for (int z = 0; z < Program.listOfMicOp.Count; z++) { text = text + "m" + (Program.listOfMicOp.Count-z-1) + " "; }
text = text + Environment.NewLine;
for (int i = 0; i < gorKod.GetLength(0); i++)
{
text = text+"Y"+(i+1)+" = ";
for (int j = 0; j < gorKod.GetLength(1); j++)
{
text = text + gorKod[i, j] + " ";
}
text = text + Environment.NewLine;
}
textBox2.Text = text ;
label2.Text = "" + Program.dlinKod;
textBox3.Text = "";
button4.Show();
button5.Hide();
button6.Hide();
if (Program.errorMOcopy) { MessageBox.Show("В микрокоманде встречаются одинаковые микрооперации"); } }
private void button3_Click(object sender, EventArgs e){
int[,] verKod = Program.vertikal();
string text = null;
text = text + " ";
for (int z = 0; z < Program.dlinKod; z++) { text = text + "m" + (Program.dlinKod - z - 1) + " "; }
text = text + Environment.NewLine;
for (int i = 0; i < verKod.GetLength(0); i++)
{
text = text + "Y" + (i + 1) + " = ";
for (int j = 0; j < verKod.GetLength(1); j++)
{
text = text + verKod[i, j] + " ";
}
text = text + Environment.NewLine;
}
textBox2.Text = text;
label2.Text = "" + Program.dlinKod;
textBox3.Text = "";
button5.Show();
button4.Hide();
button6.Hide();
if (Program.errorMOcopy) { MessageBox.Show("В микрокоманде встречаются одинаковые микрооперации"); }
}
private void button4_Click(object sender, EventArgs e)
{
string[] boolGor = Program.getBoolForGorizont();
string text = null;
for (int j = 0; j < boolGor.Length; j++)
{
text = text + boolGor[j];
}
textBox3.Text = text;
}
private void button5_Click(object sender, EventArgs e)
{
string[] boolVert = Program.getBoolForVertical();
string text = null;
for (int j = 0; j < boolVert.Length; j++)
{
text = text +"y"+(j+1)+" = " +boolVert[j]+Environment.NewLine;
}
textBox3.Text = text;
button6.Show();}
private void button6_Click(object sender, EventArgs e)
{
string[] optBoolVert = Program.optimisationBoolForVert();
string text = null;
for (int j = 0; j < optBoolVert.Length; j++)
{
text = text + "y" + (j + 1) + " = " + optBoolVert[j] + Environment.NewLine;
}
textBox3.Text = text;
}
private void button7_Click(object sender, EventArgs e)
private void button8_Click(object sender, EventArgs e) { vertGorKod(); button6.Hide(); button4.Hide(); button5.Hide(); }
private void button9_Click(object sender, EventArgs e)
{
button6.Hide();
button4.Hide();
button5.Hide();
String text = Program.gorVertKod();
textBox2.Text = text;
}
private void button8_Click_1(object sender, EventArgs e)
{
button6.Hide();
button4.Hide();
button5.Hide();
}
private void button7_Click_1(object sender, EventArgs e)
{
Statistic.DrawGraph();
}
public partial class Form2 : Form
{
public Form2(double[,] a, double[,] b, double[,] c, double[,] d)
{
InitializeComponent();
DrawGraph( a, b, c, d);
}
private void DrawGraph(double[,] a, double[,] b, double[,] c, double[,] d)
{
// Получим панель для рисования
GraphPane pane = zedGraphControl1.GraphPane;
// Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
pane.CurveList.Clear();
// Создадим список точек для кривой f1(x)
PointPairList f1_list = new PointPairList();
PointPairList f2_list = new PointPairList();
PointPairList f3_list = new PointPairList();
PointPairList f4_list = new PointPairList();
for (double x = 0; x <300; x ++)
{f1_list.Add(a[(int)x, 0], a[(int)x, 1]); }
for (double x = 0; x < 300; x++)
{f2_list.Add(b[(int)x, 0], b[(int)x, 1]);}
for (double x = 0; x < 300; x++)
{f3_list.Add(c[(int)x, 0], c[(int)x, 1]); }
for (double x = 0; x < 300; x++)
{f4_list.Add(d[(int)x, 0], d[(int)x, 1]); }
LineItem f1_curve = pane.AddCurve("Sinc", f1_list, Color.Blue, SymbolType.None);
LineItem f2_curve = pane.AddCurve("Sin", f2_list, Color.Red, SymbolType.None);
LineItem f3_curve = pane.AddCurve("Sin", f3_list, Color.Fuchsia, SymbolType.None);
LineItem f4_curve = pane.AddCurve("Sin", f4_list, Color.DeepSkyBlue, SymbolType.None);
// Вызываем метод AxisChange (), чтобы обновить данные об осях.
// В противном случае на рисунке будет показана только часть графика,
// которая умещается в интервалы по осям, установленные по умолчанию
zedGraphControl1.AxisChange();
// Обновляем график
zedGraphControl1.Invalidate();
}
}
}
Размещено на Allbest.ru
Подобные документы
Общие сведения об управляющих автоматах, построенных на основе принципа программируемой логики. Программно-вычислительный комплекс разработки эффективных форматов микрокоманд для различных способов кодирования. Алгоритмы кодирования операционной части.
дипломная работа [2,1 M], добавлен 26.06.2012Методы арифметического кодирования. Основные функции программ, реализующие алгоритмы кодирования по методам Хаффмана, Голомба, Фибоначчи и Элиаса. Разработка программно-аппаратных средств оптимального арифметического кодирования и их экономический расчет.
дипломная работа [1,1 M], добавлен 26.05.2012Описание алгоритма сортировки с двоичным включением, выбор структур данных. Пример сортировки массива, отсортированного случайным образом. Алгоритм покрытия по методу "Построение одного кратчайшего покрытия". Волновой алгоритм поиска длиннейшего пути.
курсовая работа [78,2 K], добавлен 24.09.2010Анализ эффективности способов кодирования. Средний размер одного разряда и средняя длина кодового слова. Кодирование по методу Хаффмена. Кодирование информации по методу Шенона-Фано. Построение кодового дерево для различных методов кодирования.
контрольная работа [491,4 K], добавлен 15.10.2013Алгоритм сортировки Шейкер: математическое описание задачи и описание алгоритма. Алгоритм покрытия: построение одного кратчайшего покрытия. Описание схемы и работы алгоритма на графах: нахождение кратчайшего пути. Контрольные примеры работы алгоритмов.
курсовая работа [43,8 K], добавлен 19.10.2010Теоретические сведения. Основные понятия. Строка, её длина, подстрока. Понятие о сложности алгоритма. Алгоритмы основанные на методе последовательного поиска. Алгоритмы Рабина, Кнута - Морриса - Пратта, Бойера – Мура.
курсовая работа [138,3 K], добавлен 13.06.2007Особенности создания виртуальных лабораторий с точки зрения дискретной математики. Специфика разработки виртуальной лаборатории, реализующей волновой алгоритм для поиска минимального маршрута и определения метрических характеристик заданного графа.
курсовая работа [3,2 M], добавлен 15.08.2012Теоретические сведения об алгоритмах поиска подстроки в строке. Глобализация информации в сети Internet. Интеллектуальный поиск. Алгоритм последовательного (прямого) поиска, Рабина и их применение. Анализ алгоритмов. Реализация программного кода.
курсовая работа [230,8 K], добавлен 12.02.2009Совокупность управляющего и операционного автоматов. Разработка микропрограммы выполнения операции деления с жесткой логикой и структурно-операционной схемы ОА. Иллюстрация функционирования ОУ на заданных числах. Оценка эффективности кодирования.
курсовая работа [314,4 K], добавлен 12.03.2014Разработка модели процессора, выполняющего набор машинных команд. Структурная схема процессора (операционного и управляющего автоматов), анализ принципа работы. Содержательный алгоритм микропрограммы, синтез управляющего автомата на основе жесткой логики.
курсовая работа [871,9 K], добавлен 16.09.2010