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

ЛИЧНЫЙ КАБИНЕТ 

 

Здравствуйте гость!

 

Логин:

Пароль:

 

Запомнить

 

 

Забыли пароль? Регистрация

Повышение уникальности

Предлагаем нашим посетителям воспользоваться бесплатным программным обеспечением «StudentHelp», которое позволит вам всего за несколько минут, выполнить повышение уникальности любого файла в формате MS Word. После такого повышения уникальности, ваша работа легко пройдете проверку в системах антиплагиат вуз, antiplagiat.ru, etxt.ru или advego.ru. Программа «StudentHelp» работает по уникальной технологии и при повышении уникальности не вставляет в текст скрытых символов, и даже если препод скопирует текст в блокнот – не увидит ни каких отличий от текста в Word файле.

Результат поиска


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


курсовая работа Представление логических выражений в виде карт Карно

Информация:

Тип работы: курсовая работа. Добавлен: 21.08.2012. Сдан: 2011. Страниц: 12. Уникальность по antiplagiat.ru: < 30%

Описание (план):


ГОУ ВПО
«СУРГУТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Ханты-Мансийского  автономного округа – Югры»
 
                                                                              
Кафедра автоматики и компьютерных систем

КУРСОВАЯ  РАБОТА

 
Тема: Приложение «Представление логических выражений в виде карт Карно».
 
 
 
 
 
 
 
 
 
              Выполнил: студент 12-61 гр. 4 курса
              Факультета  автоматики и телекоммуникаций
                      Захарова
              Мария
              Анатольевна
 
                                      Научный руководитель:
                                      доцент
                                      Даниленко
                                      Иван 
                                      Николаевич
 
                                      доцент
                                      Гришмановский
                                      Павел
                                      Валерьевич
 
 
 
 
Сургут  2010
 

СОДЕРЖАНИЕ
Аннотация.......................................................................................................................................3
Задание............................................................................................................................................4
Введение.........................................................................................................................................5
Анализ.............................................................................................................................................6
Проектирование.............................................................................................................................7
Кодирование и  отладка.................................................................................................................9
Тестирование................................................................................................................................11
Руководство пользователя………………………………….….….……......….….…….….….17
Акт независимого тестирования….……………………………….…………………………..18
Заключение...................................................................................................................................19
Список используемой литературы.............................................................................................20
Приложение А..............................................................................................................................21
Приложение Б..............................................................................................................................30
Приложение В..............................................................................................................................32
 

     АННОТАЦИЯ
    Целью проекта является закрепление навыков  и умений решать задачи программирования, а также ознакомление с правилами составления и оформления проектных документов, соответствующих этой стадии. 
    Пояснительная записка к курсовому проекту  является техническим документом, в  котором представлен весь процесс  разработки программного продукта, который  состоит из следующих этапов: анализ, проектирование, кодирование и тестирование программного обеспечения. Каждый этап освещается в отдельном разделе пояснительной записки. Также в пояснительную записку входят различные графические и справочные материалы, нормативно техническая документация, листинги программного кода и т.п., используемые при разработке программного продукта. Пояснительная записка оформляется в соответствии с методическими указаниями, регламентирующими общие положения выполнения, представления и защиты курсового проекта.
 

                 
 

ВВЕДЕНИЕ

    Объектом  исследования работы является разработка программы по представлению логических выражений в виде карт Карно.
    Карты Карно — это альтернативный способ представления таблицы истинности в виде двухмерной сетки. Карты Карно для функций, зависящих от n переменных, представляет собой прямоугольник, разделенный на 2n клеток. Каждой клетке диаграммы ставится в соответствие двоичный n-мерный набор. В карту Карно булевы переменные передаются из таблицы истинности и упорядочиваются с помощью кода Грея, в котором каждое следующее число отличается от предыдущего только одним разрядом. Значения заданной функции f из таблицы истинности вносятся в нужные квадраты, однако если клетке соответствует 0, то обычно она остается пустой[5].
    На  практике представление логических выражений в виде карт Карно используют для формул с малым числом переменных, так как построение карты Карно для большого количества переменных неудобно и сложно. Данный программный продукт предназначен для легкого и быстрого представления логических выражений с большим числом переменных в виде карт Карно.
 
 

АНАЛИЗ
    Основными целями этапа анализа является разрешение противоречий и неточностей задания, определение функциональных требований, которым должен соответствовать программный продукт, множеств входной и выходной информации, типа интерфейса пользователя и т.п.
    В задачи анализа входят:
      анализ предметной области возможного применения проектируемого класса;
      анализ функциональности класса;
      обобщение частной задачи;
      уточнение требований, приведенных в задании на проектирование  (создание всех необходимых полей и методов);
     Согласно  техническому заданию, необходимо реализовать приложение, обеспечивающее представление логических выражений в виде карт Карно. Так как приложение будет иметь пользовательский интерфейс, то целесообразно использование графического интерфейса. Среда разработки приложения является Borland C++ Builder 6.0.
     В силу того, что приложение имеет  графический интерфейс, то необходимо реализовать способы ввода данных, ведение диалога с пользователем. Данный подход позволит пользователю работать с приложением, не читая  документацию, которой является данная пояснительная записка.
 

ПРОЕКТИРОВАНИЕ
 
          Целью этапа проектирования является получение формализованного представления о разрабатываемом  продукте.
    Программа должна выполнять: ввод и представления логических выражений на карте Карно. По заданию необходимо обеспечить ввод нескольких функций, запись исходной информации и результатов в файл произвольного формата.
    Проектирование интерфейса приложения.
    По  заданию необходимо обеспечить одновременный  ввод нескольких функций, для этого  можно использовать поле ввода TEdit или TCSpinEdit. Для выбора текущей функции и количество переменных так же можно использовать эти поля.
      Для отображения доступных переменных, используемых в функции можно  использовать компоненты TMemo или TListBox. Компонент TMemo так же может использовать для отображения рабочей функции.
      Компоненты  TButton можно использовать для подтверждения выбора, для вызова операций «сохранение» и «загрузки», «закрыть», а так же для формирования рабочей функции.
      Для выбора типа функции ДНФ или КНФ можно использовать компоненты: TGroupBox и TCheckBox или TRadioGroup и TRadioButton. Для отображения информации возможно использование компонента TLabel. 
      Проектирование  карты Карно.
      Карты Карно для функций, зависящих от n переменных, представляет собой прямоугольник, разделенный на 2n клеток. Каждой клетке диаграммы ставится в соответствие двоичный n-мерный набор. В карту Карно булевы переменные передаются из таблицы истинности и упорядочиваются с помощью кода Грея, в котором каждое следующее число отличается от предыдущего только одним разрядом[4].
    Пример  карты для четырех переменных:
    Составим  таблицу истинности:
    

    Рис.1 Таблица истинности для 4 переменных.
    Перерисуем  таблицу истинности в 2-х мерный вид:
    

    Рис.2 Таблица истинности в 2-ом виде для 4 переменных.
    Переставим  в ней строки и столбцы в  соответствие с кодом Грея, получаем карту Карно:
    

    Рис.3 Карта Карно для 4 переменных.
    В приложение прорисовка карты может  быть реализована через компонент TStringGrid.
    Каждому набору значений переменных по строкам  и столбцам соответствует своя ячейка, расположенная на их пересечении. Она  заполняется в соответствующее значение из таблицы истинности. Карта заполняется только единицами, остальные ячейки остаются пустыми[3].
 
 
 

     КОДИРОВАНИЕ И ОТЛАДКА
    В процессе кодирования были выявлены те области программы, которые требуют  проверки правильности ввода. Например, отрицательное значение числа переменных, возможность выбора в каждый момент времени только одной функции и ее формы представления. Предусмотрено предупреждение пользователя о возможной потери данных, при закрытии не сохраненной функции. Так же были разработаны ряд следующих функций. Исходный код программы представлен в приложении А.
    Строка №240. int GrayEncode(int g) - Функция преобразования числа в код Грея. Данная функция выполняет преобразование целого числа, представленного в десятичном формате, в код Грея, так же представленного в виде десятичного числа.
    Строка  № 244. AnsiString AddZero (AnsiString, int) - Функция выравнивания строки до указанного числа символов. Для обеспечения возможности корректного сравнения двух строковых переменных, необходимо выровнять длину каждой переменной. Для этих операций была создана данная функция. В качестве формального параметра требуется строка и требуемая длина. Результатов выравнивания будет строка, дополненная нулями до нужной длины.
    Строка  № 251. void DrawGray(void) - Функция прорисовки влияния переменных относительно кода Грея. Данная функция обеспечивает перерисовку события OnDraw() компонента StringGrid. В результате чего становится возможным закрашивать определенную ячейку нужным цветом. Для того, чтобы наглядно показать влияние переменных, соответствующая область, помимо закраски, будет содержать символ «1», информирующий о том, что данная область соответствует влиянию истинного значения переменной. Процесс определения область закрашивания определяется по следующему алгоритму: запускается цикл, перебирающий все индексы столбцов и строк таблицы. Затем каждый индекс преобразуется в код Грея. В результате индекс будет представлен в виде строки, содержащей 0 и 1. Теперь работа производится с полученной строкой. Если i-й элемент строки равен 1, что соответствует истинному значению переменной, то необходимо закрасить индекс текущей строки/столбца. Для этого при помощи стандартной структуры TRect, получаются координаты нужной ячейки (CellRect(i,j)). Затем, устанавливается нужный цвет заливки (Canvas->Brush->Color). Далее по полученным координатам и установленным цветом выполняется заливка нужной ячейки FillRect(Rect). После этого, процесс продолжается, пока индекс не станет равным максимальному значению. Закраска ячеек производится только для «шапки» карты Карно.
    Строка  № 117. AnsiString ImplicantToCode(AnsiString, AnsiString, int) - Функция выделения переменных из строки. Данная функция производит декомпозицию строки, содержащей ДНФ или КНФ. Декомпозиция состоит из двух этапов: выделение импликант, и выделение переменных. В зависимости от формы функции, разделяющим элементом первой декомпозиции будет служить либо знак «+» (для ДНФ) либо «&» (для КНФ). Разделяющим элементом для второй декомпозиции будет служить инверсный символ (+ -> &; & -> +). Выделение импликанты или переменной будет производиться пока не будет достигнут конец строки. Последний параметр необходим для проверки числа переменных в каждой импликанте. Их количество недолжно превышать количество переменных указанных в программе.
    Строка  № 155. int AnsiStrToInt(AnsiString) - Функция преобразования двоичного кода в целое число. Данная функция выполняет преобразование числа, представленного в виде строки, в целое число.
    Строка 186. void VariableToTable(AnsiString) - Функция отображения КНФ или ДНФ на карте Карно. В зависимости от длины переменной ((x)=1 или (!x)=2) функция определяет истинное или ложное значение имеет переменная. Затем определяется местоположение рассматриваемой переменной на карте Карно. Если принимает истинное значение, то в соответствующую ячейку ставится знак «1».
    char *itoa(int value, char *string, int radix) - Функция преобразования десятичного числа в двоичное число. Результат функции будет являться массив, содержащий двоичный код входного числа. Данная функция взята из стандартной библиотеки.
 
 

     ТЕСТИРОВАНИЕ
          Для настройки и  тестирования программы выполним задание и рассмотрим результат программы.
    При запуске программы открывается  рабочее окно в котором производится задание параметров логической функции.
    
    Рис.4  Запущенное приложение
    Задание для тестирования программы:
      Выберем количество функций 3, первая функция двух переменных тип функции КНФ, вторая функция от трех переменных, третья функция от 4 переменных тип функций ДНФ.
    Первая функция: F=a+b&!a+b&!a+!b тип: КНФ
    
    Рис.5  Отображение первой функции
Первая функция  отображается на карте Карно верно.
    Выберем вторую функцию: F=a&b&c+!a&!b&!c тип функции: ДНФ

    Рис.6  Отображение второй функции
Вторая функция  отображается на карте Карно верно.
Выберем третью функцию: F=a&!b&!c&d+!a&b&c&d+a&!b&!c&d тип функции: ДНФ

    Рис.7 Отображение третьей функции
Третья функция  отображается на карте Карно верно.
Сохраним функции  в файл:
Нажмем кнопку «Сохранить», появится диалоговое окно, зададим имя и расширение файла.

    Рис.8 Сохранение в файл
    Откроем сохраненный файл:
    
    Изменим функции:
    
    Загрузим  новые функции в приложение:
    Нажмем  кнопку «Загрузить»
 
    Выберем в диалоговом окне нужный файл и  откроем его.
    

    Рис.9 Диалоговое окно
    

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

    Рис.11 Отображение первой функции
    

    Рис.12 Отображение второй функции
Отображение функций  загруженных из файла на карте  Карно происходит верно.
Протестируем  функцию с большим количеством  переменных равным 8:
F=a&b&c&d&e&f&g&h+a&!b&!c&!d&!e&!f&!g&!h+!a&!b&!c&d&e&f&g&h

    Рис.13 Отображение функции с 8 переменными.
Ошибки, возникающие  при работе с приложением:
1. При неверном  вводе количества функций выводится  сообщение:

    Рис.14 Отображение первого сообщения об ошибке
2. При неверном вводе количества переменных выводится сообщение:

    Рис.15 Отображение второго сообщения об ошибке
3. Если  размерность текущей функции  не соответствует с количеством  переменных введенных в поле, выводится сообщение:

    Рис.16 Отображение третьего сообщения об ошибке
 
4. При нажатие  кнопки «Закрыть» или «крестик» выводится сообщение:

    Рис.17 Отображение предупреждающего сообщения
5. В  данном приложение не были  учтены ошибки при вводе функций с клавиатуры, поэтому пользователю необходимо проверять правильность ввода функций.
6. Для  правильного представления функции  на карте Карно, необходимо  чтобы порядок следования переменных  был в алфавитном порядке. Количество переменных ограниченно, и равно 26 переменных. 
 

РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

Рис. 18 Основное окно
    Для того чтобы отобразить функцию на карте Карно, необходимо:
- правильно ввести функцию:
   для ДНФ функция вводится без скобок;
   для КНФ каждая импликанта должна быть помещена в скобки.
- Правильно указать вид функции (КНФ или ДНФ), которую будем строить.
- Поставить  галочку напротив функции, которую  будем строить.
- Нажать  на кнопку «Построение».
В новом  окне появится карта Карно.

Рис. 19 Карта  Карно
     Для изменения порядка следования переменных на карте Карно необходимо нажать на главной форме кнопку «Порядок переменных». Откроется окно со списком переменных. Переменные перетаскиваются мышкой после установки нужной последовательности нажать кнопку «Ок». Выведется карта Карно с изменой последовательностью переменных.
     Приложение  может 

Рис. 19 Окно настройки последовательности переменых
 
 
    
    Нажимаем  кнопку «Ок», на карте Карно отображается первая функция;
    Для того чтобы представить на карте другие функции, необходимо изменить номер текущей функции, подготовить карту нужного размера, задав необходимое количество переменны и нажать кнопку «Ок»;
    При необходимости можно сохранить рабочие функции нажав кнопку «Сохранить».
 
 
 
АКТ
 
независимого тестирования программного продукта

 
    Объектом  тестирования является Приложение «Представление логических выражений в виде карты Карно»
    Для тестирования предоставлены:
    задание на курсовое проектирование;
    руководство пользователя;
    программный продукт в виде исполняемого файла.
    Тестирование  проводилось в операционной системе Windows, без специальных средств отладки, тестирования и тестового приложения.
    Вид проведенного тестирования: тестирование «черного ящика».
    Программный продукт полностью соответствует  заданию. Все пункты задания реализованы.
    При тестировании обнаружены недостатки:
    Использование большого количества переменных приводит к долгой прорисовке карты Карно, возможно зависание программы;
    При задании переменных больше 8, наблюдается неправильная прорисовка карты для нечетного количества переменных;
    При вводе функции, используя кнопки, возникает ошибки при переходе на другую строку.
 
 
 
 
 
 
 
 
 
    Тестирование  проведено    « 24 » июня 2010 г.
 
    Эксперт:  студент гр. 12-61 _____________ _______________
                                           (подпись)   (Ф.И.О.)
 

    ЗАКЛЮЧЕНИЕ
 
      Результатом выполнения курсового проекта является программный продукт, позволяющий получить представление логических выражений в виде карт Карно.
      Программный продукт удовлетворяет всем требованиям, приведенным в задании. Результаты и исходные данные могут быть сохранены в файл, а так же существует возможность загрузки исходных функций из файла созданного ранее.
      Необходимая информация для работы с программой представлена в разделе руководство пользователя. Данную информацию можно использовать как инструкцию для работы с приложением.
      Было  проведено тестирование программного продукта, которое определило работоспособность приложения и правильность построения карты Карно. После доработки приложение почти все недостатки, обнаруженные при тестировании, были устранены. Для этого был упрощен алгоритм функции прорисовки влияния переменных относительно кода Грея, что позволило уменьшить время представления карты Карно, откорректирован алгоритм прорисовки карты в зависимости от количества переменных, исправлены ошибки при вводе функции. У приложения удобный интерфейс. Он позволят наилучшим образом воспринимать информацию и обрабатывать её.
       

 

      ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА
 
    Разработка  приложений в среде Borland C++ Builder. Методические указания к выполнению лабораторных работ по дисциплине «Технологии разработки программного обеспечения» / Сост.: П.В. Гришмановский. – Сургут: Издательство СурГУ, 2003. – 59 с.
    [Электронный ресурс]: Радиоэлектронная техника. Режим доступа: http://www.reltehnika.ru/index.html
    [Электронный ресурс]: Карта Карно: http://tablica-istinnosti.ru/karty-karno.html
    [Электронный ресурс]: Код Грея:  http://fat-crocodile.narod.ru/gray/gray.html
    [Электронный ресурс]: Карта Карно — Википедия: http://ru.wikipedia.org
 
 
 

    Приложение  А.
    Файл  carno.cpp
    #include <vcl.h>
    #include <math.h>
    #pragma hdrstop
    #include "Carno.h"
    #pragma package(smart_init)
    #pragma link "CSPIN"
    #pragma resource "*.dfm"
    TForm1 *Form1;
    int GrayEncode(int);
    AnsiString AddZero(AnsiString,int);
    __fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
    {
    }
    void __fastcall TForm1::Button6Click(TObject *Sender)
    {
    int f=StrToInt(Edit2->Text);
    if (f<1)
    ShowMessage("неверное количество функций");
    if (f!=1)
    {
    Label2->Visible=true;
    CSpinEdit1->Visible=true;
    CSpinEdit1->MaxValue=f;
    }
    }
    void __fastcall TForm1::Button7Click(TObject *Sender)
    {
    char s[26]={'a','b','c','d','e','f','g','h','i',
    'j','k','l','m','n','o','p','q','r',
    's','t','u','v','w','x','y','z'};
    int n = StrToInt(Edit1->Text);
    if (n>1)
    {
    if ((n%2) == 0)
    {
    StringGrid1->ColCount = pow(2,n/2)+n/2;
    StringGrid1->RowCount = pow(2,n/2)+n/2;
    }
    else
    {
    StringGrid1->ColCount = pow(2,(n+1)/2)+n/2+1;
    StringGrid1->RowCount = pow(2,n/2)+n/2+1;
    }
    }
    else
    {
    ShowMessage("неверное количество переменных");
    return;
    }
    ListBox1->Items->Clear();
    int i=0;
    for (i=0;i<n;i++)
    ListBox1->Items->Add(s[i]);
    }
    void __fastcall TForm1::CloseBtnClick(TObject *Sender)
    {
    Close();
    }
    void __fastcall TForm1::ListBox1DblClick(TObject *Sender)
    {
    if (Memo1->Lines->Count <= CSpinEdit1->Value-1)
    for(int i=Memo1->Lines->Count; i<=CSpinEdit1->Value-1; i++)
    Memo1->Lines->Add("");
    Memo1->Lines->Strings[CSpinEdit1->Value-1]=Memo1->Lines->Strings[CSpinEdit1->Value-1]+ListBox1->Items->Strings[ListBox1->ItemIndex];
    }
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TButton *Btn=(TButton*)Sender;
    int pos = CSpinEdit1->Value-1;
    switch(Btn->Tag)
    {
    case 1:
    Memo1->Lines->Strings[pos]=Memo1->Lines->Strings[pos] + Button1->Caption;
    break;
    case 2:
    Memo1->Lines->Strings[pos]=Memo1->Lines->Strings[pos] + "&";
    break;
    case 3:
    Memo1->Lines->Strings[pos]=Memo1->Lines->Strings[pos] + Button3->Caption;
    break;
    case 4:
    Memo1->Lines->Strings[pos]=Memo1->Lines->Strings[pos].Delete(Memo1->Lines->Strings[pos].Length(),1);
    break;
    case 5:
    Memo1->Lines->Clear();
    for (int i=0; i<StringGrid1->RowCount; i++)
    StringGrid1->Rows[i]->Clear();
    StringGrid1->Repaint();
    break;
    }
    }
    void __fastcall TForm1::BitBtn2Click(TObject *Sender)
    {
    Memo1->Lines->Clear();
    ListBox1->Items->Clear();
    char sn[3]={'a','b'};
    for (int i=0;i<2;i++)
    ListBox1->Items->Add(sn[i]);
    Label2->Visible=false;
    CSpinEdit1->Visible=false;
    Edit2->Text='1';
    Edit1->Text='2';
    CheckBox1->Checked = true;
    CheckBox2->Checked = false;
    }
    void __fastcall TForm1::CheckBox1Click(TObject *Sender)
    {
    if (CheckBox1->Checked==true)
    CheckBox2->Checked=false;
    }
    void __fastcall TForm1::CheckBox2Click(TObject *Sender)
    {
    if (CheckBox2->Checked==true)
    CheckBox1->Checked=false;
    }
    AnsiString ImplicantToCode(AnsiString str, AnsiString symbol, int n)
    {
    if (symbol == "+")
    symbol = "&";
    else
    if (symbol == "&")
    symbol = "+";
    AnsiString temp;
    AnsiString f = "";
    int count_var = 0;
    do
    {
    int number_del = 0;
    int correct = 0;
    if (str.Pos(symbol) > 0)
    {
    number_del = str.Pos(symbol);
    correct = 1;
    }
    else
    {
    number_del = str.Length();
    correct = 0;
    }
    temp = str.SubString(1,number_del-correct);
    count_var++;
    if (count_var >n)
    {
    return "-1";
    }
    if (temp.Length() > 1)
    f += "0";
    else    f += "1";
    str.Delete(1,number_del);
    }
    while (str.Length() > 0);
    return f;
    }
    int AnsiStrToInt(AnsiString s)
    {
    char x[16];
    ZeroMemory(x,sizeof(char[16]));
    bool enable = false;
    int count = 0;
    for(int i= 0; i<s.Length(); i++)
    if (s.c_str()[i] == '1')
    {
    x[count] = '1';
    enable = true;
    count++;
    }
    else
    {
    if (enable)
    {
    x[count] = '0';
    count++;
    }
    }
    char temp[16];
    ZeroMemory(temp,sizeof(char[16]));
    for(int i=0; i<pow(2,s.Length());i++)
    {
    itoa(GrayEncode(i),temp,2);
    if (strcmp(temp, x) == 0)
    return i;
    }
    return 0;
    }
    void TForm1::VariableToTable(AnsiString s)
    {
    char g[8];
    TRect Rect;
    AnsiString temp;
    int n = StrToInt(Edit1->Text);
    int row = AnsiStrToInt(s.SubString(1,n/2));
    int col = AnsiStrToInt(s.SubString(n/2+1,s.Length()));
    Rect = StringGrid1->CellRect(col+n/2,row+n/2+n%2);
    StringGrid1->Canvas->Brush->Color = clWhite;
    StringGrid1->Canvas->FillRect(Rect);
    StringGrid1->Canvas->TextRect(Rect, Rect.Left + 4, Rect.Top + 2, "1");
    }
    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
    StringGrid1->Repaint();
    AnsiString symbol;
    if (Memo1->Modified == true)
    {
    if (CheckBox1->Checked)
    symbol = "+";
    if (CheckBox2->Checked)
    symbol = "&";
    }
    else return;
    AnsiString str = Memo1->Lines->Strings[CSpinEdit1->Value-1];
    AnsiString substr;
    do
    {
    int number_del = 0;
    int correct = 0;
    if (str.Pos(symbol) > 0)
    {
    number_del = str.Pos(symbol);
    correct = 1;
    }
    else
    {
    number_del = str.Length();
    correct = 0;
    }
    substr = str.SubString(1,number_del-correct);
    AnsiString test = ImplicantToCode(substr,symbol,StrToInt(Edit1->Text));
    if (test.AnsiCompare("-1") != 0)
    VariableToTable(test);
    else
    {
    ShowMessage("Количество переменных превышает размерность карты Карно!");
    return;
    }
    str.Delete(1,number_del);
    }
    while (str.Length() > 0);
    }
    int GrayEncode(int g)
    {
    return g ^ (g >> 1);
    }
    AnsiString AddZero (AnsiString str, int len)
    {
    int count = str.Length();
    for (int i = 0; i < len - count; i++)
    str = "0" + str;
    return str;
    }
    void TForm1::DrawGray(void)
    {
    TRect Rect;
    AnsiString str;
    char * s;
    int Y = StrToInt(Edit1->Text)/2;
    int X;
    if (StrToInt(Edit1->Text)%2 == 0)
    X = StrToInt(Edit1->Text)/2;
    else
    X = StrToInt(Edit1->Text)/2 + 1;
    s = new char[8];
    StringGrid1->FixedCols = Y;
    StringGrid1->FixedRows = X;
    for (int i=0; i<StringGrid1->ColCount-Y; i++)
    {
    itoa(GrayEncode(i), s, 2);
    str = s;
    str = AddZero(str,8);
    //Memo1->Lines->Add(str + " " + str.Length());
    if (i<StringGrid1->RowCount-X)
    for (int j=0; j<8; j++)
    if (str.c_str()[j] == '1')
    {
    Rect = StringGrid1->CellRect(j-8+Y,i+X);
    StringGrid1->Canvas->Brush->Color = clLime;
    StringGrid1->Canvas->FillRect(Rect);
    StringGrid1->Canvas->TextRect(Rect, Rect.Left + 4, Rect.Top + 2, "1");
    }
    if (i<StringGrid1->ColCount-Y)
    for (int j=0; j<8; j++)
    if (str.c_str()[j] == '1')
    {
    Rect = StringGrid1->CellRect(i+Y,j-8+X);
    StringGrid1->Canvas->Brush->Color = clSkyBlue;
    StringGrid1->Canvas->FillRect(Rect);
    StringGrid1->Canvas->TextRect(Rect, Rect.Left + 4, Rect.Top + 2, "1");
    }
    }
    }
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
    int ARow, TRect &Rect, TGridDrawState State)
    {
    DrawGray();
    }
    void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
    {
    if (Memo1->Modified)
    {
    switch (MessageDlg("Вы действительно хотите закрыть приложение?\nВсе несохранненые данные будут утеряны.",
    mtInformation, TMsgDlgButtons() << mbYes << mbNo, 0))
    {
    case mrYes: Action = caFree;
    break;
    //case mrNo:  break;
    default:    Action = caNone;
    }
    }
    }
    void __fastcall TForm1::Button9Click(TObject *Sender)
    {
    if (SaveDialog1->Execute())
    {
    Memo1->Lines->SaveToFile(SaveDialog1->FileName);
    label_info->Caption = "Функция была сохранена в файл: "+SaveDialog1->FileName;
    Memo1->Modified=false;
    Button9->Enabled = false;
    }
    }
    void __fastcall TForm1::Memo1Change(TObject *Sender)
    {
    Button9->Enabled = true;
    }
    void __fastcall TForm1::Button8Click(TObject *Sender)
    {
    if (OpenDialog1->Execute())
    {
    Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
    label_info->Caption = "Функция была загружена из файла "+OpenDialog1->FileName;
    Memo1->Modified = true;
    }
    }
 

Приложение Б.
Файл carno.h
    #ifndef CarnoH
    #define CarnoH
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    #include <Dialogs.hpp>
    #include <Menus.hpp>
    #include <Buttons.hpp>
    #include <Grids.hpp>
    #include "CSPIN.h"
    #include <ExtCtrls.hpp>
    class TForm1 : public TForm
    {
    __published: // IDE-managed Components
    TOpenDialog *OpenDialog1;
    TSaveDialog *SaveDialog1;
    TBitBtn *BitBtn1;
    TStringGrid *StringGrid1;
    TEdit *Edit1;
    TButton *CloseBtn;
    TLabel *Label1;
    TLabel *Label2;
    TCSpinEdit *CSpinEdit1;
    TEdit *Edit2;
    TLabel *Label3;
    TListBox *ListBox1;
    TLabel *Label4;
    TButton *Button1;
    TButton *Button2;
    TButton *Button3;
    TButton *Button4;
    TButton *Button5;
    TMemo *Memo1;
    TBitBtn *BitBtn2;
    TButton *Button6;
    TButton *Button7;
    TGroupBox *GroupBox1;
    TCheckBox *CheckBox1;
    TCheckBox *CheckBox2;
    TButton *Button8;
    TLabel *Label5;
    TButton *Button9;
    TLabel *label_info;
    void __fastcall Button6Click(TObject *Sender);
    void __fastcall Button7Click(TObject *Sender);
    void __fastcall CloseBtnClick(TObject *Sender);
    и т.д.................


Перейти к полному тексту работы


Скачать работу с онлайн повышением уникальности до 90% по antiplagiat.ru, etxt.ru или advego.ru


Смотреть полный текст работы бесплатно


Смотреть похожие работы


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