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

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

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

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

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

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

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

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

УТВЕРЖДАЮ

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

А.В. Ефанов



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

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

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

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

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

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

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

Группа ИС-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 Оценка надежности программы

Заключение

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

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

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

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

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

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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

Операторы;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Windows. Процессор класса не ниже <#"519964.files/image001.gif">




Приложение В

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

/*

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

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

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

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

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

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

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

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

*/System;System.Collections.Generic;System.IO;System.Text;

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;

                                                               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;

                               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) {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;

  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 ();

               }    }   }

Приложение Г

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

/*

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

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

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

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

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

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

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

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

*/

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);

     }

   }


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