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

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 12.12.2011
Размер файла 959,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

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

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

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

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

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

УТВЕРЖДАЮ

Заведующий кафедрой

А.В. Ефанов

Пояснительная записка

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

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

Автор проекта И.С. Жилкин

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

Обозначение курсового проекта

КП - НТИ СевКавГТУ - ИСТ -173 - 11

Группа ИС-091

Руководитель проекта Д.В. Самойленко

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

Содержание

Введение

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

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

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

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

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

1.4.1 Требования к системе

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.6.1 Общие сведения

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

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

Заключение

Список используемых источников

Приложение А. Текст простой программы

Приложение Б. Синтаксический анализатор

Приложение В. Основная часть синтаксического анализатора

Приложение Г. Дополнительная часть синтаксического анализатора по разбору алгебраических и логических выражений

Введение

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

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

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

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

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

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

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

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

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

Простая программа на языке С состоит из функции main, переменные типа float, операторы if, else, for, логические и арифметические операции. В ее состав должны входить следующие компоненты:

Описание библиотек;

Описание переменных;

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

Операторы;

Функции ввода и вывода;

Комментарии.

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

Данный проект выполняет проверку простейшей программы на языке С, которая проверяет в программе следующие операторы if...else, for, while и некоторые математические операции с типом данных float, а также удаляет все несущественные вхождения операторов.

использование одной библиотеки iostream;

описание переменных типов float, int;

следующие арифметические и логические выражения: +(сложение),

!= (проверка на неравенства), == (эквиваленция), = (присваивание),< (меньше), > (больше), - (вычитание), ++ (инкремент), -- (декремент), * (умножение);

следующие операторы: if, else, for, do, while;

одно строчные и многострочные комментарии.

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

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

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

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

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

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

Несущественное вхождение операторов происходит при написании программы, вследствие ввода многочисленных операторов.

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

На основе этих знаний и использования определенных правил, выполним удаление несущественных вхождений операторов из заданной простой программы.

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

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

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

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

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

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

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

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

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

Персональный компьютер должен обладать средством ввода и вывода (клавиатура и монитор). Необходимые минимальные требования к ПК для запуска программы является:

Windows. Процессор класса не ниже i386 или X86/64 с тактовой частотой не менее 500 МГц, не менее 256 Мб ОЗУ, не менее 4 Гб на жестком диске для установки ОС.

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

В качестве примера использовалась ОС Microsoft Windows. Для того чтобы программа была полностью рабочей, необходимо:

Windows ХР SР 2 и выше, c библиотеками .NET Framework версии не ниже 3.5.

алгоритм технический тестирование

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

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

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

создание файла;

заполнение его данными;

размещение на носителе доступном для программы;

разрешение доступа для чтения.

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

Структура технологического процесса обработки информации следующая:

считать файл;

удалить из файла все комментарии (сначала многострочные, затем однострочные);

построчно разделить оставшийся текст в массив строк;

осуществить синтаксический анализ каждой строки;

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

Необходимо использование соглашений:

переменные типа int не могут сопровождаться необязательной инициализацией и при этом все переменные должны объявляться отдельно; массивы типа int не могут сопровождаться инициализацией, при этом они только одномерны;

все конструкции языка разделяют произвольным числом пробелов и знаков табуляции, но при этом обязательно разделяются как минимум одним символом переноса строки;

разрешено использование только строчных букв;

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

При соблюдении всех вышеперечисленных требований программа будет признана синтаксически верной.

Отформатированные исходные данные будут выведены в стандартный поток вывода. Синтаксические ошибки исходных данных будут выведены в стандартный поток ошибок с выводом сообщения о каждой найденной ошибке.

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

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

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

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

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

Операторы;

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

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

Для представления входных данных предлагается использовать список. Его описание приведено ниже.

static public List<string> arrText = new List<string>();

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

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

Алгоритм решения задачи, построен по правилам определенным ГОСТ 19.701-90, ГОСТ 19.002-80, ГОСТ 19.003-80 выполнен в приложении1. Алгоритм решения программы будет состоять из двух частей:

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

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

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

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

Выбран язык программирования С# так как в нем есть следующие преимущества, унаследованные от языка С:

обозначения начала/конца блока кода фигурными скобками;

обозначения, ассоциативность и приоритет большинства встроенных операций (присвоение, арифметические, логические, побитовые операции, операции увеличения/уменьшения, тернарная условная операция «?:»);

синтаксис описания и использования переменных и функций (порядок «тип имя», использование модификаторов, обязательность скобок для функций, описание формальных параметров);

наименования встроенных элементарных типов (кроме bool, в Java этот тип называется boolean);

использование точки с запятой;

синтаксис всех основных конструкций: условного оператора, циклов, оператора множественного выбора;

отсутствие процедур (их заменяют функции типа void);

Существуют также уникальные особенности, такие как:

- отдельное понятие именованной типизированной константы и ключевое слово const

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

- можно использовать текстовые строки

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

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

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

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

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

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

для первой как имя файла, который следует считать и обработать;

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

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

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

запуск программы, с указанием файла для анализа;

обработка информации, находящейся в этом файле;

вывод оригинального кода;

вывод форматированного кода;

вывод списка ошибок.

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

о необъявленной переменной в выражении

о нехватке операндов в строке и выражении

о несвоевременном закрытии блока без оператора

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

о нахождении блока за пределами данной функции

о недопустимости объявления переменной в данной строке

о необъявленной переменой

о недопустимости расположения else в данной позиции

о недопустимости расположения while в данной позиции

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

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

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

устройства ввода и вывода информации (клавиатура и монитор);

процессор класса не ниже i386;

объем оперативной памяти не менее 256 Мб;

от 4 ГБ свободного места на жестком диске, для обеспечения запуска и работы программы;

встроенный графический чип или видеоплата.

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

2.6.1 Общие сведения

Главными данными является файл с информацией, который обладает следующими свойствами:

использование одной библиотеки iostream;

описание переменных типов int;

следующие арифметические и логические выражения: + (сложение),!= (проверка на неравенства), = = (эквиваленция), = (присваивание),< (меньше), > (больше), - (вычитание), ++ (инкремент), -- (декремент), * (умножение);

следующие операторы: if, else, for, do, while;

одно строчные и многострочные комментарии;

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

переменные типа int могут сопровождаться необязательной инициализацией, но при этом все переменные должны объявляться отдельно;

алфавит программы состоит только из латинских букв, которые могут быть строчными, а также спецсимволов: умножение(*), деление(/), сложение(+), вычитание(-), пробел( ), символ табуляции( ), фигурные скобки { }. круглые скобки(), точка с запятой(;), символ переноса строки и возврата каретки;

каждый оператор должен сопровождаться «;»;

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

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

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

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

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

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

При соблюдении всех вышеперечисленных требований программа будет признана синтаксически верной.

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

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

записать данные в файл, размещенный на указанном носителе;

запустить программу, указав путь к файлу;

ожидать завершения программы;

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

2.6.3 Оценка надежности

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

Производим серию экспериментов в следствии которой программа показала полное совпадение практических и теоретических данных.

То есть программа отлажена и полностью готова к функционированию.

Заключение

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

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

В отличии от С++, С# много функциональней и расширяет программно-аппаратную совместимость со всем спектров современных компьютеров , UMPC и встроенных систем.

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

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

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

3. Основы программирования на языке С [Электронный ресурс]/ Н.А. Калинин, Н.А. Костюкова. - Интернет-Университет Информационнных технологий. - Электрон. текст. дан. - Режим доступа http//www.INYUIT.ru, свободный.

4. Язык программирования С++ [Электронный ресурс]/ А.Л. Фридман.- Университет Информационнных технологий. - Электрон. текст. дан. - Режим доступа http//www.INYUIT.ru, свободный.

Приложение А

Текст простой программы

/*

Пример простой программы.

Язык программирования

GNU C++ 4.2

Описание метода решения:

Иванова, Ничушкина, Пугачев -- Объектно-ориентированное программирование.

http://www.intuit.ru

*/

int main(){

float q,w,e,r,t,y;

y=5;

if (y==5){

e=e+1;

}else{

w=e+r;

}

for (q=0;q<5;q++){

y=r+t;}

w=2;}

}

Приложение Б

Синтаксический анализатор

Приложение В

Основная часть синтаксического анализатора

/*

Процедура открытия файла, убирания комментариев, синтаксическому разбору и форматированному выводу файла

Язык программирования:

Microsoft Visual С#

Используемые библиотеки:

Microsoft .Net framework 3.5

Входные данные:

Аргументы командной строки, содержащие путь к файлу

Описание метода решения:

Герберт Шилдт C#. Учебный курс

А. В. Фролов, Г. В. Фролов Язык C#. Самоучитель

*/

using System;

using System.Collections.Generic;

using System.IO;

using System.Text;

namespace ConsoleApplication1

{

public class lol{

public int i;

public string variable;

public lol(int u,string g){

i=u;g=variable;

}

}

class Program

{

static List<string> vars = new List<string> ();

static List<lol> uvars = new List<lol> ();

static List<lol> uvars2 = new List<lol> ();

static void test (string expr, string line,int ln)

{

// тестит алгебраические формулы

if (expr.EndsWith ("++") || expr.EndsWith ("--")) {

if (!(vars.IndexOf (expr.Substring (0, expr.Length - 2)) > -1)) {

Console.Error.WriteLine ("Переменая {0} не обьявлена в выражении {1}, строке {2}", expr.Substring (0, expr.Length - 2), expr, line);

}

return;

}

string[] nvars = expr.Split (new String[] { "+", "-", "*", "<", ">", "==", "!=", "=" }, StringSplitOptions.None);

foreach (string var in nvars) {

if (var != "") {

try {

Convert.ToDouble (var);

} catch (FormatException) {

if (vars.IndexOf (var) > -1)

{

int ln2=-1;

foreach(lol B in uvars){

if (B.variable==var)ln2=B.i;

}

if (ln2>-1){

lol A=new lol(ln2, var);

uvars.Remove (A);

}

}

else

Console.Error.WriteLine ("Переменая {0} не обьявлена в выражении {1}, строке {2}", var, expr, line);

}

} else

Console.Error.WriteLine ("В выражении {0} не хватает операндов, в строке {1}", expr, line);

}

}

static void Main (string[] args)

{

// задали путь к файлу

string path = args[1];

// открыли для чтения

StreamReader read = new StreamReader (path);

//считали целиком

string code = read.ReadToEnd ();

// сделали замены

while (code.IndexOf (" (") != -1)

code = code.Replace (" (", "(");

string tmp_code = "", tmp = "";

bool in_for = false;

for (int i = 0; i < code.Length; i++) {

if ((code[i] == '}') || (code[i] == '{')) {

tmp += "\n";

}

tmp += code[i];

if (in_for == true)

if (code[i] == ')') {

tmp_code += "\n" + tmp.Trim ();

tmp = "";

tmp_code = tmp_code.Trim ();

in_for = false;

}

if (in_for == false)

if (tmp.Trim () == "else") {

tmp_code += "\n" + tmp.Trim () + "\n";

tmp_code = tmp_code.Trim ();

tmp = "";

in_for = false;

} else if (code[i] == ';') {

if (tmp.Trim ().StartsWith ("for(")) {

in_for = true;

} else {

tmp_code += "\n" + tmp.Trim ();

tmp_code = tmp_code.Trim ();

tmp = "";

}

}

if ((code[i] == '}') || (code[i] == '{')) {

tmp_code += "\n" + tmp.Trim ();

tmp_code = tmp_code.Trim ();

tmp = "";

}

}

code = tmp_code;

// поделили на строки для обработки

string[] cod = code.Split ('\n');

bool in_main = false;

int incl = 0;

int if_c = 0;

int need_op = 0;

int need_while=0;

int o=0;

foreach (string ln in cod) {

string line = ln.Trim ();

if (line != "") {

o++;

if (line == "int main()")

in_main = true;

else

if (in_main == true) {

if (line.Length > 2) {

if (line.StartsWith ("if(")) {

string expr = line.Substring (3, line.Length - 4);

test (expr, line,o);

if_c++;

need_op = 1;

} else if (line.StartsWith ("else")) {

if_c--;

need_op = 1;

} else if (line.StartsWith ("for(")) {

string[] expr = line.Substring (4, line.Length - 5).Split (';');

foreach (string exp in expr)

test (exp, line,o);

need_op = 1;

}else

if (line=="do")

{

need_op = 1;

need_while++;

}else

if (line.StartsWith("while("))

{

need_while--;

need_op = 0;

}else if (line.StartsWith ("float ")) {

if (need_op == 1)

Console.Error.WriteLine ("Нельзя обьявлять переменые здесь");

string[] varsl = line.Substring (6, line.Length - 7).Split (',');

foreach (string var in varsl)

vars.Add (var);

} else if (line.IndexOf ("=") > -1) {

need_op = 0;

string variable = line.Substring (0, line.IndexOf ('='));

if (vars.IndexOf (variable) > -1) {

string expr = line.Substring (line.IndexOf ('=') + 1, line.Length - line.IndexOf ('=') - 2);

test (expr, line,o);

int ln2=-1;

string q;

foreach(lol B in uvars){

if (B.variable==variable)ln2=B.i;

}

if (ln2<-1){

lol C=new lol(ln2,variable);

uvars2.Add (C);

uvars.Remove(C);

Console.Error.WriteLine("{0}+{1}",line,variable);

}

lol A=new lol(o,variable);

uvars.Add(A);

} else

Console.Error.WriteLine ("Переменая {0} не обьявленна", variable);

} else

Console.WriteLine ("Error, line is wrong");

} else if (line == "{") {

incl++;

need_op = 0;

} else if (line == "}")

if (need_op == 0)

incl--;

else

Console.Error.WriteLine ("Нельзя закрыть блок, требуется оператор"); else if (line == ";")

need_op = 0;

else

Console.Error.WriteLine ("Строка не распознана");

if (incl <0) Console.Error.WriteLine("Код за пределами главной функции");

if ( if_c<0) Console.Error.WriteLine("Else без открывающего If");

if ( need_while<0) Console.Error.WriteLine("While без начального Do");

} else {

Console.Error.WriteLine("Код за пределами главной функции");

}

}

}

foreach (string ln in cod) {

int flag=0;

if (line.IndexOf ("=") > -1)

{

string variable = line.Substring (0, line.IndexOf ('='));

if (uvars2.indexOf(variable)>-1)flag=1;

}

if (flag==0)

Console.WriteLine("{0}{1}",new String(' ',incl*2),line);

} Console.ReadLine ();

} } }

Приложение Г

Дополнительная часть синтаксического анализатора по разбору алгебраических и логических выражений

/*

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

Язык программирования:

Microsoft Visual С#

Используемые библиотеки:

Microsoft .Net framework 3.5

Входные данные:

Выражение и текст в строке содержащей его.

Описание метода решения:

Герберт Шилдт C#. Учебный курс

А. В. Фролов, Г. В. Фролов Язык C#. Самоучитель

*/

static void test (string expr, string line)

{

// тестит алгебраические формулы

if (expr.EndsWith ("++") || expr.EndsWith ("--")) {

if (!(vars.IndexOf (expr.Substring (0, expr.Length - 2)) > -1)) {

Console.Error.WriteLine ("Переменая {0} не обьявлена в выражении {1}, строке {2}", expr.Substring (0, expr.Length - 2), expr, line);

}

return;

}

string[] nvars = expr.Split (new String[] { "+", "-", "*", "<", ">", "==", "!=", "=" }, StringSplitOptions.None);

foreach (string var in nvars) {

if (var != "") {

try {

Convert.ToDouble (var);

} catch (FormatException) {

if (vars.IndexOf (var) > -1)

uvars.Add (var);

else

Console.Error.WriteLine ("Переменая {0} не обьявлена в выражении {1}, строке {2}", var, expr, line);

}

} else

Console.Error.WriteLine ("В выражении {0} не хватает операндов, в строке {1}", expr, line);

}

}

Размещено на Allbest.ru


Подобные документы

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