Разработка программного приложения для решения информационно-логических задач

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    615,15 kb
  • Опубликовано:
    2011-12-12
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка программного приложения для решения информационно-логических задач

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

Северо-Кавказский государственный технический университет»

Факультет Инженерно-экономический

Кафедра Информационных систем, электропривода и автоматики

Специальность 230201.65 - Информационные системы и технологии



ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту по технологии программирования

на тему

Разработка программного приложения для решения информационно-логических задач


Автор проекта Бардиловский Р.С.

Группа ИС-091

Руководитель проекта Д.В. Болдырев




Невинномысск, 2011

Содержание

Аннотация

Введение

. Разработка технического задания на проектирование

.1 Общая постановка задачи

.2 Определение требований к программе

.3 Предварительный выбор метода решения задачи

.4 Определение требований к системе

.4.1 Требования к системе в целом

.4.2 Требования к техническому обеспечению

.4.3 Требования к программному обеспечению

. Проектирование программного приложения

.1 Разработка технологии обработки информации

.2 Разработка структуры и формы представления данных

.3 Разработка алгоритма решения задачи

.4 Разработка программы решения задачи

.4.1 Выбор инструментальных средств

.4.2 Разработка структуры программы

.4.3 Проектирование программных модулей

.4.4 Проектирование программного интерфейса

.4.5 Обеспечение надежности программы

.5 Определение конфигурации технических средств

.6 Тестирование программы

.6.1 Общие сведения

.6.2 Процесс тестирования программы

.6.3 Оценка надежности программы

Заключение

Список использованных источников

Приложение А

Аннотация

В курсовом проекте разработана программа, реализующая синтаксический анализ простой программы на языке С.

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

Пояснительная записка содержит 38 страниц машинописного текста, 9 рисунков, 3 таблиц, 1 приложений. Список использованных источников включает 3 наименования.

Введение


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

Широкий круг задач проектирования различного рода технических объектов, в том числе и компьютеров, относятся к классу информационно-логических задач. В настоящее время для решения таких задач используются приближенные методы и алгоритмы, которые требуют различных вычислительных ресурсов и обеспечивают разную точность решения.

Создание системы позволит как оценить и исследовать отдельные методы и алгоритмы, так и сравнить их с точки зрения затрат вычислительных ресурсов и точности получаемых результатов.

1. Разработка технического задания на проектирование

 

.1 Общая постановка задачи


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

­  синтаксический анализ простой программы на языке С;

­    форматирование текста программы на языке С.

Простая программа содержит переменные типа float, операторы if, while, do, логические и арифметические операции. Необходимо в каждой паре следующих друг за другом операторов А и В, с одинаковыми левыми частями, удалить оператор А, если его правая часть на совпадает с правой частью В.

1.2 Определение требований к программе


Программа должна обеспечивать возможность анализа простой программы и форматирования ее текста.

Результатом выполнения программы является вывод информации об ошибках, найденных при анализе программы и отформатированный текст программы.

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

Необходимо предусмотреть блокировку некорректных действий пользователей при работе с системой.

Требования к информационной и программной совместимости

Система должна работать под управлением операционной среды Windows’95 и выше

1.3 Предварительный выбор метода решения задачи


Для решения задачи синтаксического анализа был выбран метод Бэкуса-Наура

1.4    Определение требований к системе

 

.4.1 Требования к системе в целом

Система должна обеспечивать корректное выполнение всех предусмотренных техническим заданием функций.

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

Для надежного функционирования системы необходима бесперебойная работа компьютеров в соответствии с правилами их эксплуатации. Правила эксплуатации системы соответствуют общим требованиям техники электробезопасности.

Система не должна предъявлять специальных требований к эксплуатации и обслуживанию.

К системе не предъявляются особые требования по сохранности информации при возникновении аварийных ситуаций.

При разработке системы не должны приниматься проектные решения, которые могут в дальнейшем рассматриваться как объекты интеллектуальной собственности.

1.4.2 Требования к техническому обеспечению

Требования к техническому обеспечению определяются требованиями к программному обеспечению.

1.4.3 Требования к программному обеспечению

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

При создании информационной системы главным критерием выбора программных средств разработки должны являться:

-  скорость выполнения программы менее 1 секунды;

-       возможность быстрого внесения изменений в программу;

-       время создания разработанного программного обеспечения должно укладываться в график работы над проектом;

-       наличие опыта разработки с использованием данного программного продукта;

-       удобство эксплуатации.

2. Проектирование программного приложения

 

.1 Разработка технологии обработки информации


Технология обработки информации определяет содержание этапов выполнения информационных операций. Она предусматривает следующие процедуры:

–  получение первичной информации;

–       обработка первичной информации с целью получения результатной информации;

–       выдача варианта решения.

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

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

Структурная схема технологического процесса обработки информации показана на рисунке 1.

Рисунок 1 - Технологический процесс обработки информации

2.2 Разработка структуры и формы представления данных


Основной единицей входной информации является простая программа, состоящая из следующих атрибутов:

­  Объявление переменных;

­    Арифметические выражения;

­    Логические выражения;

­    Операторы;

­    Функции ввода и вывода.

Все приведенные атрибуты по смыслу должны быть строковыми переменными.

Для представления входных данных предлагается использовать список. Его описание приведено ниже.public List<string> arrText = new List<string>();

Для представления входной информации используется глобальная переменная arrText. Ее характеристики приведены в таблице 1.

Таблица 1

Входные информационные объекты

Объект

Назначение

Тип

arrText

Список, содержащий простую программу

string


Внутренние информационные объекты предполагается представлять с помощью переменных стандартных типов языка C#. Внутренние локальные переменные используются для хранения результатов промежуточных расчетов, в качестве счетчиков цикла, сумматоров и т. п.

Выходные информационные объекты предполагается представлять с помощью переменных стандартных типов языка C#. Их характеристики приведены в таблице 2.

Таблица 2

Выходные информационные объекты

Объект

Назначение

Тип

arrText

Список, содержащий отформатированную простую программу

string


2.3 Разработка алгоритма решения задачи


Алгоритм главной программы Main() представлен на рисунке 2. После объявления глобальных переменных, программа начинает выполнять главную функцию Main(), в которой происходит открытие файла, запись информации из файла построчно в список, закрытие файла и вызов необходимых функции.

На рисунке 2 представлен алгоритм функции RemoveSpace(), которая убирает пробелы из текста. Так же он добавляет пробелы после основных операторов, а именно float, while, do, if, else. Для того, чтобы удалить все пробелы необходимо определить, есть ли они в данной строке. Организуется цикл, который перебирает все строки в списке. Далее проверяется условие наличия пробелов в строке, пока они присутствуют, будет повторяться цикл while. После обнаружения пробела в строке он заменяется отсутствием пробела. Для того, чтобы добавить пробел после операторов, необходимо определить, есть ли данное вхождение символов в данную строку. Если она обнаруживается, то заменяется на оператор с пробелом.

На рисунке 3 представлен алгоритм функции Split_String(). Функция выполняет разделение фигурных скобок таким образом, чтобы каждая скобка была на отдельной строке. Так как предполагается, что исходная программа простая, то разделение будет происходить из расчета, что на строке не больше одной скобки. Для разделения открывающихся фигурных скобок организуется цикл до конца списка. Производится проверка, если в строке оказывается открывающаяся фигурная скобка, то происходит деление строки на части, каждая часть записывается в свои элемент массива. Разделителем является {. После разделения исходная строка удаляется. Производится проверка, если первая часть содержит элементы, то они записываются в данную строку, и увеличивается индекс строки. В следующую строку записывается {. Далее так же производится проверка второй части и ее запись в случае существования. Для закрывающейся скобки и; производятся аналогичные действия.

На рисунке 4 представлен алгоритм функции Format_Text(), которая выполняет форматирование текста. организуется цикл до конца списка. При обнаружении знака “{” переменная step становится меньше на 2. После чего в строку добавляется step пробелов.

На рисунке 5 представлен алгоритм функции Bracket(). Функция анализирует правильность расстановки скобок в главной программе. Организуется цикл до конца списка. Проверяется каждая строка на наличие скобок, при обнаружении открывающейся скобки переменная, соответствующая данному виду скобок увеличивается на 1, при обнаружении закрывающейся - уменьшается на 1. Далее производится сравнение переменных с 0, и если какое-либо условие не выполняется, то выдается ошибка.

На рисунке 6 представлен алгоритм функции Del(). Данная функция выполняет удаление одного из двух одинаковых операторов. Организуется цикл до конца списка. Производится сравнение, если на двух соседних строках обнаруживается операции присваивания, то далее производится сравнение левых частей. При выполнении условии, первая операция удаляется из списка.

На рисунке 7 представлен алгоритм функции Operator(). Данная функция выполняет анализ операторов, таких как if, else, while, do. Организуется цикл до конца списка. Далее начинается проверка, если в строке находится подстрока “do”, начинается проверка фигурных скобок. Находится открывающаяся скобка, если ее нет, выдается ошибка. Если условие выполняется, то находится оператор while, после чего происходит проверка закрывающейся скобки на предыдущей строчке. Если она не обнаруживается, выдается ошибка. Далее происходит проверка оператора while. Находятся круглые скобки, проверяется, есть ли между ними выражение. Если выражения нет, выдается ошибка. Иначе происходит проверка выражения. Для оператора if и else алгоритм анализа происходит аналогично.

Рисунок 1 - Алгоритм главной функции

Рисунок 2 - Алгоритм функции RemoveSpace()

синтаксический программа модуль интерфейс

Рисунок 3 - Алгоритм функции Split_String()

Рисунок 4 - Алгоритм функции Format_Text()

Рисунок 5 - Алгоритм функции Bracket()

Рисунок 6 - Алгоритм функции Del()

Рисунок 7 - Алгоритм функции Operator()

2.4    Разработка программы решения задачи

 

.4.1 Выбор инструментальных средств

В качестве средства разработки информационной системы будет использован язык программирования Microsoft Visual C# , как наиболее оптимальное средство разработки. Используя Microsoft Visual C# можно создавать приложения для MS Windows 2000/XP с минимальными затратами времени, т.к. в ее основе лежит концепция быстрого создания приложений (RAD). Интегрированная среда разработки приложений - позволяет создавать, компилировать, тестировать и редактировать проект или группу проектов в единой среде программирования.

2.4.2 Разработка структуры программы

Структура программного комплекса представлена на рисунке 8. Она включает в себя следующие компоненты:

­  загрузка текста простой программы из файла;

­    синтаксический анализ текста простой программы;

­    вывод результата

Рисунок 8 - Структура программного комплекса

2.4.3 Проектирование программных модулей

В ходе разработки программы создан проект под названием «kurs», содержащий файлы: Program.cs.

Программа состоит из следующих подпрограмм:

-  Main() - главная программа;

-       RemoveSpace () - удаление пробелов из текста программы;

-       Split_String () -разделение фигурных скобок;

-       Format_Text () - форматирование текста простой программы;

-       Bracket() - проверка правильности расстановки скобок;

-       Del() - удаление одного из рядом стоящих одинаковых операторов;

-       Operator() - проверка правильности операторов if, else, do, while;

-       IsExpr() - проверка правильности введенного выражения;

-       IsOper() - проверка правильности знаков операций;

-       IsAdd() - проверка правильности слагаемых;

-       IsMul() - проверка правильности произведений;

-       IsID() - проверка правильности идентификаторов;

-       IsConst() - проверка правильности констант;

-       IsAlpha() - проверка правильности буквенных выражений;

-       IsDigit() - проверка правильности цифр;

2.4.4 Проектирование программного интерфейса

Сценарии диалога с пользователем организован с помощью вывода на экран результата. Экран вывода представлен на рисунке 9

2.4.5 Обеспечение надежности программы


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

Рисунок 9 - Экран вывода результатов

2.5 Определение конфигурации технических средств


Для нормальной эксплуатации данной работы необходимо соблюдать следующие требования, представленные в таблице 3.

Таблица 3

Требования к комплексу технических средств

Технические характеристики

Конфигурация


Минимальная

Рекомендуемая

Процессор

1200 МГц

1500 МГц

Оперативная память

128 Мб

256 Мб

CD-ROM

32х

52х

Свободное место на жестком диске

200 Мб

400 Мб

Монитор

17”

17”

Клавиатура

Наличие

Наличие

Мышь

Наличие

Наличие


2.6    Тестирование программы

 

.6.1 Общие сведения

Для проверки работоспособности программы были произведены следующие действия:

-  изменение входных параметров;

-       проверка правильности расчетов пути;

-       проверка правильности вывода расчетной информации на экран;

-       вывод результатов.

2.6.2 Процесс тестирования программы

В процессе тестирования проверялись следующие функции программы:

-  правильность отработки алгоритма программы;

-       правильность функционирования программы;

-       проверка выхода из программы.

2.6.3 Оценка надежности программы

В результате тестирования ошибок в работе программы не выявлено. Программа полностью работоспособна и готова к непосредственному функционированию.

Заключение


В данной работе разработана программа, позволяющая произвести синтаксический анализ простой программы и отформатировать ее текст.

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

Список использованных источников


1. Иванова, Г.С. Технология программирования [Текст]: Учебник для вузов/ Иванова Г.С. - М.: Изд-во МГТУ им. Н.Э.Баумана, 2002. - 320 с.: ил. - (Информатика в техническом университете). - ISBN 5-7038-2077-4.

. Полный справочник по С. Четвертое издание [Текст]: Пер. с англ./ Шилдт, Герберт. - М.: Издательский дом «Вильямс», 2002. - 704 с.: ил. - Парал. тит. англ. - ISBN 5-8459-0226-6(рус.).

. Кормен, Т., Лейзерсон, Ч., Ривест, Р., Штайн, К. Алгоритмы. Построение и анализ [Текст]: Пер. с англ./ Кормен Томас Х., Лейзерсон Чарльз И., Риверс Роналд Л, Штайн Клиффорд. - М.: Издательский дом «Вильямс», 2005. - 1296 с.: ил. - Парал. тит. англ. - ISBN 5-8459-0857-4(рус.).

Приложение А

System;System.Collections.Generic;System.IO;System.Linq;System.Text;System.Collections;kurs

{Program

{public string s_0 = " ";public List<string> arrText = new List<string>();public StreamReader objReader = new StreamReader("d:\\text.txt");public string expr;public int pos;void Main(string[] args)

{objReader = new StreamReader(@"d:\text.txt");(s_0 != null)

{_0 = objReader.ReadLine();(s_0 != null).Add(s_0.ToLower());

}public void RemoveSpace(List<string> txt)

{(int i = 0; i < txt.Count; i++)

{(txt[i].IndexOf(" ") != -1)[i] = txt[i].Replace(" ", "");(txt[i].IndexOf("float") > -1)[i] = txt[i].Replace("float", "float ");(txt[i].IndexOf("do") > -1)[i] = txt[i].Replace("do", "do ");(txt[i].IndexOf("while") > -1)[i] = txt[i].Replace("while", "while ");(txt[i].IndexOf("if") > -1)[i] = txt[i].Replace("if", "if ");(txt[i].IndexOf("else") > -1)[i] = txt[i].Replace("else", "else ");

}

}private void Split_String()

{(int k = 0; k < arrText.Count; )

{(arrText[k].IndexOf("{") > -1)

{[] tmp = arrText[k].Split('{');.RemoveAt(k);(tmp[0].Length != 0).Insert(k++, tmp[0]);.Insert(k++, "{");(tmp[1].Length != 0).Insert(k, tmp[1]);

}++;

}(int k = 0; k < arrText.Count; )

{(arrText[k].IndexOf("}") > -1)

{[] tmp = arrText[k].Split('}');.RemoveAt(k);(tmp[0].Length != 0).Insert(k++, tmp[0]);.Insert(k++, "}");(tmp[1].Length != 0).Insert(k, tmp[1]);

}++;

}(int k = 0; k < arrText.Count; )

{(arrText[k].IndexOf(";") > -1)

{(arrText[k].IndexOf(";") > -1)

{[] tmp = arrText[k].Split(';');.RemoveAt(k);(int i = 0; i < tmp.Length; i++)(tmp[i].Length != 0).Insert(k++, tmp[i] + ";");

}

}++;

}

}private void Format_Text()

{blank = " ";step = 0;(int i = 0; i < arrText.Count; i++)

{(arrText[i].IndexOf("}") > -1)-= 2;indent = blank.Substring(0, step);[i] = indent + arrText[i];(arrText[i].IndexOf("{") > -1)+= 2;

}(int i = 0; i < arrText.Count; i++)

{.WriteLine(arrText[i]);

}

}public void Bracket(List<string> txt)

{c = 0;f= 0;s = 0;(int i = 0; i < txt.Count; i++)

{(txt[i].IndexOf("{") > -1) f++;(txt[i].IndexOf("}") > -1) f--;(txt[i].IndexOf("[") > -1) s++;(txt[i].IndexOf("]") > -1) s--;(txt[i].IndexOf("(") > -1) c++;(txt[i].IndexOf(")") > -1) c--;

}(f != 0) Console.WriteLine("Ошибка в фигурных скобках");(c != 0) Console.WriteLine("Ошибка в круглых скобках");(s != 0) Console.WriteLine("Ошибка в квадратных скобках");

}public void Del(List<string> txt)

{(int i = 0; i < txt.Count - 1; i++)

{((txt[i].IndexOf("=") >= 0) && (txt[i+1].IndexOf("=") >= 0))

{(txt[i][0] == txt[i + 1][0]).RemoveAt(i);

}(txt[i].IndexOf("=") > -1)

if (txt[i].IndexOf(";") == -1).WriteLine("Ошибка: не хватает ; после операции присваивания");

}

}private void Operator()

{a, b;(int i = 0; i < arrText.Count; i++)

{(arrText[i].IndexOf("do") > -1)

{(arrText[i + 1].IndexOf("{") > -1)

{(int j = i; j < arrText.Count; j++)

{(arrText[j].IndexOf("while") > -1)

{(arrText[j - 1].IndexOf("}") == -1).WriteLine("Ошибка: отсутствует фигурная скобка в конце оператора do");

}

}

}Console.WriteLine("Ошибка: отсутствует фигурная скобка перед началом оператора do");

}(arrText[i].IndexOf("while") > -1)

{(arrText[i][arrText[i].IndexOf("while") + 2] == '(')

{(arrText[i].IndexOf(")") > -1)

{= arrText[i].IndexOf("(");= arrText[i].LastIndexOf(")");((b - a) <= 1)

Console.WriteLine("Ошибка: пустой оператор while");

else

{= 0;= arrText[i].Substring(a + 1, b - a - 1);(IsExpr()).WriteLine("Ошибка");

}(arrText[i][b + 1] != ';')

Console.WriteLine("Ошибка: не хватает ; после оператора while");

}

}

}(arrText[i].IndexOf("if") > -1)

{(arrText[i][arrText[i].IndexOf("if") + 2] == '(')

{(arrText[i].IndexOf(")") > -1)

{= arrText[i].IndexOf("(");= arrText[i].LastIndexOf(")");((b - a) <= 1) Console.WriteLine("Ошибка: пустой оператор if");

{= 0;= arrText[i].Substring(a + 1, b - a - 1);(IsExpr()).WriteLine("Ошибка");

}(arrText[i + 1].IndexOf("{") > -1)

{(int j = i; j < arrText.Count; j++)

{(arrText[j].IndexOf("else") > -1)

{(arrText[j - 1].IndexOf("}") == -1).WriteLine("Ошибка: отсутствует фигурная скобка после if");if (arrText[j-2].IndexOf(";") == -1)

Console.WriteLine("Ошибка: не хватает ; после if");

}

}

}

}

}(arrText[i].IndexOf("else") > -1)

{(arrText[i + 1].IndexOf("{") > -1)

{(int j = i; j < arrText.Count; j++)

{(arrText[j].IndexOf("}") != -1)

{.WriteLine("Ошибка: отсутствует фигурная скобка после else");(arrText[j - 2].IndexOf(";") == -1).WriteLine("Ошибка: не хватает ; после else");

}

}

}Console.WriteLine("Ошибка: отсутствует фигурная скобка в начале else");

}

}

}public bool IsExpr()

{(IsOper(0)) pos++;(; ; pos++)

{(!IsAdd())

{.WriteLine("Неверное слагаемое"); return false;

}(!IsOper(0)) return true;

}

}public bool IsAdd()

{(; ; pos++)

{(!IsMul())

{.WriteLine("Неверный множитель"); return false;

}(!IsOper(1)) return true;

}

}public bool IsMul()

{tmp = pos;(IsID()) return true;= tmp;(IsConst()) return true;(expr[pos] != '(') return false;++;(!IsExpr())

{.WriteLine("Неверное выражение"); return false;

}(expr[pos] != ')')

{.WriteLine("Пропуск )"); return false;

}true;

}public bool IsID()

{(!IsAlpha()) return false;(; IsAlpha() || IsDigit(); pos++) ;true;

}public bool IsConst()

{(!IsDigit()) return false;(; IsDigit(); pos++) ;true;

}public bool IsAlpha()

{(pos >= expr.Length) return false;((expr[pos] >= 'a' && expr[pos] <= 'z') || expr[pos] == '_') return true;return false;

}public bool IsDigit()

{(pos >= expr.Length) return false;(expr[pos] >= '0' && expr[pos] <= '9') return true;return false;

}public bool IsOper(int oper)

{(pos >= expr.Length) return false;(oper == 1)

{(expr[pos] == '*' || expr[pos] == '/' || expr[pos] == '%') return true;return false;

}

{(expr[pos] == '+' || expr[pos] == '-') return true;return false;

}

}

}

}


Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!