Разработка программно-вычислительного комплекса, предназначенного для разработки эффективных форматов микрокоманд для различных способов микропрограммирования

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 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ср

м/с

Зона, место в

зоне

Дз

Добл

Д'з

Режимы

Дано: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

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