Автор работы: Пользователь скрыл имя, 14 Июня 2013 в 17:52, лабораторная работа
Цель
Создать программу, которая бы помогла быстро проверить правильность созданных вручную таблиц истинности.
Задание
Написать программу, которая будет строить таблицы истинности для исходных и упрощенных форм, и проверять их тождественность. Таблицы истинности выводить на экран.
case "*":
summ = a & b;
case "!":
bool a = ConvertToBool(stack.Pop());
case "|":
}
case "~":
break;
case "@":
case "v":
bool a = ConvertToBool(stack.Pop());
}
case "<":
case "<<":
bool a = ConvertToBool(stack.Pop());
case ">":
}
case ">>":
}
}
// Обрабатываем исключение
catch (Exception ex)
{
// Выводим сообщение о возникшей ошибке
Console.WriteLine(ex.Message);
}
// заносим вычисленное число в стек
stack.Push(summ.ToString());
// если в очереди содержатся элементы
if (queue.Count > 0)
// то извлекаем элемент с очереди
// и заносим в текущую переменную
str = queue.Dequeue();
else // иначе прекращаем выполнения цикла
break;
}
}
return Convert.ToBoolean(stack.Pop())
}
// Возвращает перечисление строк, содержащие результат
// выполнения каждого выражения, в соответствии с таблицой истинности
// Или набор результатов, каждой строчки таблицы истинности
public List<string> SetOfResults(string input, out List<string> rowsCountOrLogicalNumbers, out List<string> columnsCountOrVariables)
{
List<string> listResult = new List<string>();
List<string> setOfString = new List<string>(Separate(input));
List<string> setOfChangesVariables = OutputForAssignValue2.
for (int i = 0; i < setOfChangesVariables.Count; i++)
listResult.Add(
return listResult;
}
// Конвертирует строковое логическое число в соответствующие логическое значение
private bool ConvertToBool(string digitString)
{
try
{
switch (digitString.ToLower())
{
case "1":
case "true":
return true;
case "0":
case "false":
return false;
default:
return false;
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return false;
}
}
// Конвертирует логическое true или false в
// строковое "1" или "0"
private string ConvertBoolToString(bool result)
{
switch (result)
{
case true:
return "1";
case false:
return "0";
default:
return "0";
}
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using OPN2;
namespace MyLogicalCalculator
{
public partial class Form1 : Form
{
PostfixNotationExpression convertExpression;
public Form1()
{
InitializeComponent();
convertExpression = new PostfixNotationExpression();
Console.ReadLine();
}
private void buttonCalculate_Click(object sender, EventArgs e)
{
UpdateForm();
}
private TextBox FocusStringForTextBox(TextBox textBoxInput, int selectionStart)
{
// Задаем фокус для нашей строки
textBoxInput.Focus();
// Так после задания фокуса остаются выделенные символы,
// то убираем выделение
textBoxInput.SelectionLength = 0;
// Возращаем положение курсора
textBoxInput.SelectionStart = selectionStart;
return textBoxInput;
}
private TextBox InputSymbolInTextBox(TextBox textBoxInput, string symbol = "", bool isDelete = false)
{
//TextBox textOutput;
// Если курсор находится в конце строки
if (textBoxInput.SelectionStart == textBoxInput.Text.Length)
{
// если нажата клавиша backspace, то
if (isDelete == true)
// удаляем один символ с конца строки
textBoxInput.Text = textBoxInput.Text.Remove(--
else
// иначе добавляем символ в конец строки
textBoxInput.Text += symbol;
// Задаем фокус ввода элемента управления или показываем курсор
return FocusStringForTextBox(
}
else // Иначе, значит, что курсор находится где-то в середине или в начале
// Если есть выделенный текст
if (textBoxInput.SelectionLength != 0)
{
// Сохраняем текущие положение курсора
// так как после вставки символа в строку, его положение сбивается
int selectionStart = textBoxInput.SelectionStart;
// то удаляем те символы, которые выделены
textBoxInput.Text = textBoxInput.Text.Remove(
// Если была нажата клавиша backspace,
// то вставку символа мы пропускаем
if (isDelete == false)
{
// Вставляем символ на место удаленных символов
textBoxInput.Text = textBoxInput.Text.Insert(
// Выводим курсор и возращаем значение форматированной строки
selectionStart++;
}
return FocusStringForTextBox(
}
else // иначе курсор просто находится где-то в тексте
{
// Сохраняем текущие положение курсора
// так как при вставке символа положение курсора сбивается
int selectionStart = textBoxInput.SelectionStart;
// Если была нажата клавиша backspace
if (isDelete == true)
// то удаляем один символ в заданной позиции
textBoxInput.Text = textBoxInput.Text.Remove(--
else
{
// Вставляем тектс в заданную позицию
textBoxInput.Text = textBoxInput.Text.Insert(
selectionStart++;
}
// Выводим форматированную строку вместе с курсором
return FocusStringForTextBox(
}
}
private void UpdateForm()
{
try
{
List<string> rowsOrLogicalNumbers;
List<string> columnsOrVariables;
List<string> results = convertExpression.
dataGridView1.RowCount = rowsOrLogicalNumbers.Count + 1;
dataGridView1.ColumnCount = columnsOrVariables.Count + 1;
// Наполняем первую строку именами переменных
string variablesForTable = String.Empty;
Queue<string> variables = new Queue<string>(
for (int i = 0; i < dataGridView1.ColumnCount; i++)
{
if (variables.Count != 0)
{
// задаем ширину столбцов, коэффициент 9*(... + 4) нужен для правильного расширения столбца
dataGridView1.Columns[i].Width = 9*(variables.Peek().Length + 4);
variablesForTable += variables.Peek() + ",";
dataGridView1.Rows[0].Cells[i]
}
else
{
// Выводим в последнюю колонку первой строки функцию с нашими переменными
// Так как после каждой переменной стоит запятая, то перед закрывающейся скобкой удаляем её
string func = "f(" + variablesForTable.Remove(
dataGridView1.Rows[0].Cells[i]
// задаем ширину столбцов, коэффициент 9 нужен для правильного расширения столбца
dataGridView1.Columns[i].Width = 9*func.Length;
}
}
// заполняем остальные ячейки таблицы
int k = 0; // создаем переменную для поэлементного отображения результата
for (int i = 1; i < dataGridView1.RowCount; i++)
for (int j = 0; j < dataGridView1.ColumnCount; j++)
{
// если номер столбца соотвествует последнему,
if (j == dataGridView1.ColumnCount - 1)
{
// то заносим в него результат
dataGridView1.Rows[i].Cells[j]
k++;
}
else
// иначе, продолжаем заполнять таблицу истинности
dataGridView1.Rows[i].Cells[j]
}
}
catch (Exception)
{
}
}
private void textBoxOutputExpression_
{
if (e.KeyCode == Keys.Enter)
UpdateForm();
}
private void buttonEquivalence_Click(object sender, EventArgs e)
{
textBoxOutputExpression = InputSymbolInTextBox(
}
Информация о работе Создание программы для построения таблицы истинности