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

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

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

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

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

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

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

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

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

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

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

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

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

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

Автор проекта А.М.Еременко

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

Невинномысск, 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 Общая постановка задачи

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

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

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

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

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

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

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

4) Операторы;

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

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

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

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

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

- проверка, является ли введенная логическая функция совершенной конъюнктивной нормальной функцией (СКНФ).

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

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

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

- для запуска программы необходимо использовать среду Microsoft Visual Studio 2008.

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

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

В процессе синтаксического анализа обязательно должны проверяться:

- разделение операторов символом «;»;

- парность скобок «(…)», «[…]», «{…}»;

- правильность оформления комментариев «/*…*/»;

- переменные должны состоять из одного символа латинского алфавита «a, b….z»;

- правильность присвоения данных переменным «:=».

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

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

Для проверки функции на правильность написания СКНФ необходимо проверять:

- парность скобок «(…)»;

- правильность написания конъюнкций «…)&(…»;

- правильность написания дизъюнкций «(…|…)»;

- правильность написания отрицания элементов «!a… a».

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

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

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

::= - определение понятия;

?? - ограничители терминалов;

< > - ограничители нетерминалов;

| - конструкция «или»;

[ ] - повторение 0 или 1 раз;

{ } - повторение 0 или более раз;

( ) - группировка;

? - пустая синтаксическая цепочка;

. - завершение формы.

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

Рисунок 1 - Обозначения элементов синтаксических диаграмм

Ниже приведены РБНФ и синтаксические диаграммы упрощенного определения нетерминала «выражения языка С»:

<Выражение языка C> ::=

<Выражение> {(“&” | “|”) <Выражение>}.

<СКНФ> ::=

<Выражение> {“(“ | <выражение дизъюнкции> | “&”}.

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

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

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

К общим требованием в эксплуатации данного программного приложения можно отнести:

- квалификация персонала может находиться на уровне пользователя ПК;

- знание назначения данного программного обеспечения;

- знание основ синтаксиса языка С.

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

Условия эксплуатации:

- знать и правильно указывать путь к файлу программы;

- правильность ввода функции СКНФ, с содержанием специальных символов ( | - дизъюнкция, & - конъюнкция, ! - отрицание);

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

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

Технические требования:

- устройства ввода и вывода информации, такие как клавиатура и монитор;

- процессор класса Pentium 3 и выше;

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

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

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

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

Система должна работать на IBM совместимых персональных компьютерах.

Наличие операционной системы Windows версии 5.1 и выше с установленным Net Framework версии 3.5 и выше. Наличие программного обеспечения для ввода и вывода данных.

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

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

Ввод функции СКНФ для ее проверки осуществляется вручную, загрузка текста программы для проверки осуществляется из файла. Предварительной подготовкой является:

- создание файла с текстом простой программы;

- размещение файла на носителе;

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

Структура технологического процесса:

- считать с экрана пользователя введенную функцию СКНФ;

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

- считать файл .txt с программой;

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

- провести синтаксический и арифметический анализ каждой строки.

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

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

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

- все конструкции языка разделяет один пробел, обязательно ставится «;» в конце строки там, где это предусмотрено синтаксисом языка С;

- наименование всех переменных может обозначаться только одной буквой латинского алфавита [a…z];

- в одной строке может размещаться только один оператор;

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

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

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

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

Алгоритм решения задач приведен в приложении А.

В алгоритме используется 6 блоков подпрограмм:

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

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

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

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

- «проверка скобок» (осуществляется посимвольный разбор теста проверяемой программы, где при обнаружении ошибки может производиться вывод сообщений: «Ошибка: неверное количество скобок! Открытых больше чем закрытых», «Ошибка: неверное количество скобок! Закрытых больше чем открытых», а в случае правильности введенной функции проверка происходит дальше);

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

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

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

Для создания программы использовалась интегрированная среда разработки Microsoft Visual Studio 2008.

Visual Studio 2008 - версия популярной платформы, в которой программисты Microsoft реализовали новейшие достижения для разработчиков, руководителей разработки, тестировщиков и дизайнеров.

Версия 2008 включает в себя Visual Basic .NET, Visual C++, Visual C#. В комплекте с программой идет 3.5-ая версия .NET Framework.

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

Разработка программы производилась с помощью языка программирования C#.

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

Данный язык является прямым наследником двух самых удачных языков программирования: C и С++. Он также имеет тесные родственные связи с другим языком: Java.

Несмотря на то, что C# является самодостаточным языком программирования, у него имеется особая взаимосвязь со средой выполнения .NET Framework. Наличие такой взаимосвязи объясняется двумя причинами. Во-первых, C# первоначально предназначался для создания кода, который должен выполняться в данной среде. И, во-вторых, используемые в C# библиотеки также определены в ней.

Назначение .NET Framework - служить средой для поддержки разработки и выполнения распределенных компонентных приложений. Она обеспечивает совместное использование разных языков программирования, а также, безопасность, переносимость программ и общую модель программирования для платформы Windows. Что же касается взаимосвязи с C#, то среда .NET Framework определяет два важных элемента. Первым из них является общеязыковая среда выполнения (Common Language Runtime - CLR). Это система, управляющая выполнением программ. Вторым элементом среды является библиотека классов. Эта библиотека предоставляет программе доступ к среде выполнения.

Благодаря вышеназванным достоинствам, для разработки программного приложения для решения информационно - логических задач был выбран язык программирования C#.

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

Основными функциями программы является синтаксический и арифметический анализ текста. Программа состоит из частей:

- вывод на экран пользователя меню, для выбора проверки СКНФ или проверки синтаксиса программы;

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

- при выборе пункта меню «проверка синтаксиса программы», пользователю необходимо будет указать место хранения проверяемого файла (d:\programma.txt), после чего программа будет часть программы проверять посимвольно, а часть построчно, после чего на экран пользователя выведется сообщение об ошибке, либо если в случае правильности написания программы будет выдано сообщение о правильности проверяемой программы, затем будет выведено подменю с возможностью повторной проверки программы, либо переход в главное меню.

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

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

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

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

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

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

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

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

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

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

Программа будет всегда выводит пользователю отформатированные данные:

- «Данная функция является СКНФ»;

- «Данная функция не является СКНФ из-за неверного количества скобок»;

- «Данная функция не является СКНФ из-за неверно введенной конъюнкции»;

- «Данная функция не является СКНФ из-за неверно введенной дизъюнкции»;

- «Данная функция не является СКНФ из-за несоответствия элементов функции»;

- «Ошибок нет!»;

- «Ошибка: коментарии - /* */»;

- «Ошибка: фигурные скобки - { }»;

- «Ошибка: с оператором - do while»;

- «Ошибка: в вункциях оператора...»;

- «Ошибка: Break»;

- «Ошибка: с оператором Switch».

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

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

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

- устройства ввода и вывода информации, такие как клавиатура и монитор;

- процессор класса Pentium 3 и выше;

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

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

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

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

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

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

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

- арифметические операции (a|b|c)&(!a|!b|c)&(a|!b|c);

- операторы: if.. goto, do..while, switch;

- комментарии;

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

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

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

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

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

- подождать вывода программы;

- ввести функцию СКНФ;

- подождать вывода программы;

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

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

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

Заключение

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

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

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

Ввод функции СКНФ для ее проверки осуществляется вручную, загрузка текста программы для проверки осуществляется из файла. Предварительной подготовкой является:

- создание файла с текстом простой программы;

- размещение файла на носителе;

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

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

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

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

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

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

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

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

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

3. Теория и реализация языков программирования [Электронный ресурс] / Интернет-Университет Информационных технологий. - Электрон. текст. дан. - Режим доступа: http//www.INTUIT.ru, свободный.

Приложения

Приложение А

Приложение Б

программный интерфейс синтаксический конфигурация

Алгоритм работы подпрограммы «Проверка функции на скобки»

Приложение В

Алгоритм работы подпрограммы «Проверка на конъюнкцию»

Приложение Г

Алгоритм работы подпрограммы «Проверка на дизъюнкцию»

Приложение Д

Алгоритм работы подпрограммы «Проверка элементов СКНФ»

Приложение Е

Алгоритм работы подпрограммы «Проверка скобок»

Приложение Ж

Алгоритм работы подпрограммы «Проверка объявления типа int»

Приложение И

Текст простой программы на языке С

/*

Простая программа на языке C# с использованием переменных типа Int, операторов IF..Goto, While, switch.

*/

using System ;

using System.Collections.Generic ;

using System.Linq ;

using System.Text ;

namespace KP_Lika

{

class Program

{

static void Main (string[] args)

{

int y = 5 ;

int a, b, c, t = 0, j ;

a = 7 ;

b = 2 ;

sting l = "" ;

// proverka otveta

if (y==a-b)

{

j = 0 ;

}

else

{

j = 1 ;

goto n ;

}

do

{

t++ ;

}

while (t);

n :

switch (j)

{

case 0:

l="verno";

break;

default:

l="neverno";

break;

}

}

}

}

Приложение К

Код основной программ

/*

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

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

C#

Программа написана с использованием подпрограмм:

- «проверка функции на скобки»;

- «проверка на конъюнкцию»;

- «проверка на дизъюнкцию»;

- «проверка элементов СКНФ»;

- «проверка скобок»;

- «проверка объявления типа int»

*/

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.Text.RegularExpressions;

// Проверить синтаксический анализ программы с использованием операторов:

// IF..Goto, While, switch тип данных Int.

// Проверить, является ли заданная логическая формула совершенной КНФ(СКНФ).

namespace KP_Lika

{

class Program

{

static string SKNF, Otvet_Skobok, Text, Kol_Skobok11, Kol_Skobok12,

Otvet_Koniunkciya, Otvet_Dizunkciya, Otvet_Elementov, put, str, put2, Otvet_Skobok2,

Otvet_int, Otvet_int2, Otvet_if, int_element = "";

static string[] World, World2, INT;

static int Kol_Skobok, Kol_Skobok1, Kol_1, Kol_2, adres, n_stroki = 0, nach_stroki = 0, konec_stroki = 0, result = 0;

static string massA = "0 1 2 3 4 5 6 7 8 9";

static string massB = "> < >= <= != ==";

static void Main(string[] args)

{

// главное меню

menyu:

Console.ForegroundColor = ConsoleColor.Green;

Console.WriteLine("Выбор функции программы (1, 2 или 3): ");

Console.WriteLine("1. Проверка функции на СКНФ; ");

Console.WriteLine("2. Проверка синтаксиса текста программы. ");

Console.WriteLine("3. Закончить работу с приложением;");

Console.WriteLine();

Console.ForegroundColor = ConsoleColor.White;

string punkt_menu = Console.ReadLine();

if (punkt_menu == "1")

{

menyu1:

Console.ForegroundColor = ConsoleColor.White;

Console.WriteLine("Введите функцию для проверки, является ли она СКНФ:");

Console.WriteLine("Пример: (A|B|!C)&(!A|!B|C):");

Console.WriteLine("где !-отрицание(НЕ), & - коньюнкция, | - дизъюнкция");

Console.WriteLine();

SKNF = Console.ReadLine();

// убираем пробелы

Text = SKNF.Replace(" ", string.Empty);

// подпрограмма «проверка функции на скобки»

Otvet_Skobok = Proverka_Skobok(Text);

Console.ForegroundColor = ConsoleColor.Red;

if (Otvet_Skobok != "")

{

Console.WriteLine(Otvet_Skobok);

goto pod_menyu;

}

// подпрограмма «проверка на конъюнкцию»

Otvet_Koniunkciya = Proverka_Koniunkciya(Text);

Console.ForegroundColor = ConsoleColor.Red;

if (Otvet_Koniunkciya != "")

{

Console.WriteLine(Otvet_Koniunkciya);

goto pod_menyu;

}

// подпрограмма «проверка на дизъюнкцию»

Otvet_Dizunkciya = Proverka_Dizunkciya(Text);

Console.ForegroundColor = ConsoleColor.Red;

if (Otvet_Dizunkciya != "")

{

Console.WriteLine(Otvet_Dizunkciya);

goto pod_menyu;

}

// подпрограмма «проверка элементов СКНФ»

Otvet_Elementov = Proverka_Elementov(Text);

Console.ForegroundColor = ConsoleColor.Red;

if (Otvet_Elementov != "")

{

Console.WriteLine(Otvet_Elementov);

goto pod_menyu;

}

else { Console.WriteLine("Данная функция СКНФ!!!"); };

// подменю....

pod_menyu: ;

Console.ForegroundColor = ConsoleColor.Yellow;

Console.WriteLine();

Console.WriteLine("Выбор функции программы (1,2 или 3): ");

Console.WriteLine("1. Ввести функцию заново;");

Console.WriteLine("2. Перейти в главное меню;");

Console.WriteLine("3. Закончить работу с приложением;");

Console.WriteLine();

Console.ForegroundColor = ConsoleColor.White;

string punkt_menu1 = Console.ReadLine();

if (punkt_menu1 == "1") { goto menyu1; }

else if (punkt_menu1 == "2") { goto menyu; }

else if (punkt_menu1 == "3") { goto vihod; }

else { Console.WriteLine("Вы указали неверный пункт меню!"); goto pod_menyu; }

}

else if (punkt_menu == "2") // работаем над программой

{

pod_menyu2:

;

Kol_1 = 0;

Kol_2 = 0;

Console.WriteLine("Введите путь к файлу .TXT с листингом программы:");

Console.WriteLine("например: d:\\programma.txt");

put = Console.ReadLine();

int indx = put.Length;

put2 = put.Insert(indx - 4, "2");

adres = 0;

// удаление комментарий - работает

StreamReader fs31 = new StreamReader(put);// файл с программой

while (!fs31.EndOfStream)// чтение файла по строкам

{

int dlina = 0;

str = fs31.ReadLine();

World = str.Split(' ');

// удаление многострочного комментария

for (int j = 0; j < World.Length; j++)

{

if (World[j] != "")

{

if (World[j] == "/*")

{

nach_stroki = n_stroki;

}

else if (World[j] == "*/")

{

konec_stroki = n_stroki;

}

}

}

n_stroki++;

}

fs31.Close();

n_stroki = 0;

// Console.WriteLine(nach_stroki+" "+konec_stroki);

StreamReader fs3 = new StreamReader(put);// файл с программой

StreamWriter fs2 = new StreamWriter(put2); // файл с копией программы

while (!fs3.EndOfStream)// чтение файла по строкам

{

str = fs3.ReadLine();

World = str.Split(' ');

World2 = World;

// удаление коментария // - работает

if ((n_stroki < nach_stroki) || (n_stroki > konec_stroki) || (konec_stroki == 0) || (nach_stroki == 0))

{

for (int j = 0; j < World.Length; j++)

{

if (World[j] != "")

{

if (World[j] == "//")

{

int ind = str.IndexOf("//");

str = str.Remove(ind);

goto stroka;

}

}

}

}

else if (n_stroki == nach_stroki)

{

int ind = str.IndexOf("/*");

str = str.Remove(ind);

goto stroka;

}

else if (n_stroki == konec_stroki)

{

int ind = str.IndexOf("*/");

str = str.Remove(0, ind + 2);

goto stroka;

}

else if ((n_stroki >= nach_stroki) || (n_stroki <= konec_stroki))

{

str = "";

goto stroka;

}

stroka: ;

adres++;

if (adres < 10) { fs2.WriteLine("0" + adres + " " + str); }

else fs2.WriteLine(adres + " " + str);

n_stroki++;

}

fs3.Close();

fs2.Close();

str = "";

StreamReader fs = new StreamReader(put2);// файл с программой

while (!fs.EndOfStream)// чтение файла по строкам

{

str = fs.ReadLine();

// подпрограмма «проверка скобок»

Otvet_Skobok2 = Proverka_Skobok2(str);

Console.ForegroundColor = ConsoleColor.Red;

if (Otvet_Skobok2 != "")

{

Console.WriteLine(Otvet_Skobok2);

goto pod_menyu3;

}

// подпрограмма «проверка объявления типа int»

Otvet_int = Proverka_int(str);

Console.ForegroundColor = ConsoleColor.Red;

if (Otvet_int != "")

{

Console.WriteLine(Otvet_int);

goto pod_menyu3;

}

}

fs.Close();

str = "";

string Otvet_funkcii="";

// проверка операторов

fs = new StreamReader(put2);// файл с программой

while (!fs.EndOfStream)// чтение файла по строкам

{

Regex reg = new Regex(@"^if \((.*)\)$");

str = fs.ReadLine();

string text = str;

text = text.Remove(0, 3).Replace(" ", string.Empty);

if (text.StartsWith("if"))

{

if (!reg.IsMatch(text))

{

Otvet_funkcii = "Ошибка: оператора if! " +str;

goto mm;

}

}

else if (text.StartsWith("while"))

{

reg = new Regex(@"^while\((.*)\);$");

if (!reg.IsMatch(text))

{

Otvet_funkcii="Ошибка: оператора do_while! "+str;

goto mm;

}

}

else if (text.StartsWith("do"))

{

reg = new Regex(@"^do$");

if (!reg.IsMatch(text))

{

Otvet_funkcii="Ошибка: оператора do_while! "+str;

goto mm;

}

}

else if (text.StartsWith("goto"))

{

reg = new Regex(@"^goto[a-z];$");

if (!reg.IsMatch(text))

{

Otvet_funkcii="Ошибка: оператора goto! "+str;

goto mm;

}

}

else if (text.StartsWith("switch"))

{

reg = new Regex(@"^switch\((.*)\)$");

if (!reg.IsMatch(text))

{

Otvet_funkcii="Ошибка: оператора switch1! "+str;

goto mm;

}

}

else if (text.StartsWith("case"))

{

reg = new Regex(@"^case(.*):$");

if (!reg.IsMatch(text))

{

Otvet_funkcii="Ошибка: оператора switch2! "+str;

goto mm;

}

}

else if (text.StartsWith("break"))

{

reg = new Regex(@"^break;$");

if (!reg.IsMatch(text))

{

Otvet_funkcii="Ошибка: оператора switch3! "+str;

goto mm;

}

}

else if (text.StartsWith("default"))

{

reg = new Regex(@"^default:$");

if (!reg.IsMatch(text))

{

Console.WriteLine("Ошибка: оператора switch4! "+str);

goto mm;

}

}

else {Otvet_funkcii+="";}

}

fs.Close();

mm:

if (Otvet_funkcii!="")

{

Console.WriteLine(Otvet_funkcii);

}

else

{

Console.WriteLine ("Ошибок в программе нет!");

}

// подменю....

pod_menyu3: ;

Console.ForegroundColor = ConsoleColor.Yellow;

Console.WriteLine();

Console.WriteLine("Выбор функции программы (1,2 или 3): ");

Console.WriteLine("1. Проверить программу заново;");

Console.WriteLine("2. Перейти в главное меню;");

Console.WriteLine("3. Закончить работу с приложением;");

Console.WriteLine();

Console.ForegroundColor = ConsoleColor.White;

string punkt_menu1 = Console.ReadLine();

if (punkt_menu1 == "1") { goto pod_menyu2; }

else if (punkt_menu1 == "2") { goto menyu; }

else if (punkt_menu1 == "3") { goto vihod; }

else { Console.WriteLine("Вы не верно указали пункт меню!!!"); goto menyu; }

}

else if (punkt_menu == "3")

{

goto vihod;

}

else { Console.WriteLine("Вы не верно указали пункт меню!!!"); goto menyu; }

vihod: ;

}

}

}

Приложение Л

Код подпрограммы «Проверка объявления типа Int»

/*

Подпрограмма осуществляет проверку правильности объявления типа int. Проверка осуществляется посимвольно.

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

C#

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

str - строка считываемая из файла

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

Otvet int - программа выдает сообщение об ошибке или если Otvet_int= «», то означает что ошибок не найдено.

*/

// проверка численного типа int - работает

static string Proverka_int(string str)

{

Otvet_int = "";

string text = str;

World = str.Split(' ');

for (int j = 0; j < World.Length; j++)

{

if (World[j] != "")

{

if (World[j] == "int")

{

INT = str.Split(' ', ',', '=', ';', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9');

int_element = int_element + string.Join(" ", INT).Remove(0, 6) + " "; // все переменные числового типа

str = str.Remove(0, 6);// удаляем INT

str = str.Replace(" ", string.Empty);// удаляем пробелы

// ищем позицию элемента

m:

int ind_1 = int_element.IndexOf(str[0]);

if (ind_1 != -1)

{

str = str.Remove(0, 1);// удаляем переменную типа INT

if (str[0] == '=')

{

str = str.Remove(0, 1);// удаляем =

m1:

int ind_2 = massA.IndexOf(str[0]);

if (ind_2 != -1)

{

str = str.Remove(0, 1);

if (str[0] == ',') { str = str.Remove(0, 1); goto m; }

if (str[0] == ';') { goto m3; }

else if (massA.IndexOf(str[0]) != -1) { goto m1; }

else if (massA.IndexOf(str[0]) == -1) { Otvet_int = "Неверный численный тип2: " + text; return Otvet_int; }

else { Otvet_int = "Неверный численный тип1: " + text; return Otvet_int; }

}

else if (ind_2 == -1)

{

Otvet_int = "Неверный численный тип3: " + text;

return Otvet_int;

}

}

else if (str[0] == ';')

{

Otvet_int += " ";

}

else if (str[0] == ',')

{

str = str.Remove(0, 1);

goto m;

}

}

else

{

Console.WriteLine(str);

Otvet_int = "Неверный численный тип4: " + text;

return Otvet_int;

}

}

else { Otvet_int += ""; return Otvet_int; }

}

}

m3:

return Otvet_int;

}

Приложение М

Код подпрограммы «Проверка скобок»

/*

Подпрограмма осуществляет проверку правильности написания скобок. Проверка осуществляется посимвольно.

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

C#

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

str - строка считываемая из файла

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

Otvet_skobok2 - программа выдает сообщение об ошибке или если Otvet_skobok2= «», то означает что ошибок не найдено.

*/

// проверка скобок программы - работает

static string Proverka_Skobok2(string str)

{

Otvet_Skobok2 = "";

World = str.Split(' ');

for (int j = 0; j < World.Length; j++)

{

if (World[j] != "")

{

if (World[j] == "(")

{

Kol_2 = Kol_2 + 1;

}

else if (World[j] == ")")

{

Kol_2 = Kol_2 - 1;

}

else if (Kol_2 < 0)

{

Console.ForegroundColor = ConsoleColor.Red;

Otvet_Skobok2 = "Ошибка: неверное количество скобок! Закрытых больше чем открытых в строке: " + World[0];

return Otvet_Skobok2;

}

}

}

if (Kol_2 > 0)

{

Console.ForegroundColor = ConsoleColor.Red;

Otvet_Skobok2 = "Ошибка: неверное количество скобок! Открытых больше чем закрытых!";

}

else if (Kol_2 == 0)

{

Console.ForegroundColor = ConsoleColor.Red;

Otvet_Skobok2 = "";

}

return Otvet_Skobok2;

}

Приложение Н

Код подпрограммы «Проверка элементов СКНФ»

/*

Подпрограмма осуществляет проверку правильности использования элементов функции СКНФ. Проверка осуществляется посимвольно.

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

C#

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

str - строка считываемая из файла

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

Otvet_Elementov - программа выдает сообщение об ошибке или если Otvet_Elementov = «», то означает что ошибок не найдено.

*/

// проверка Элементов - РАБОТАЕТ

static string Proverka_Elementov(string Text)

{

Otvet_Elementov = "";

string[] element, element3, summa;

int k = 0;

string element2 = "", Text1 = "", text2 = "";

summa = Text.Split('&', '(', ')');// все элементы в скобках

// на равенство слогаемых - работает

for (int i = 0; i < summa.Length - 1; i++) // прогоняем каждую скобку

{

if (summa[i] != "")

{

for (int j = (i + 1); j < summa.Length; j++) // прогоняем каждую скобку

{

if (summa[i] == summa[j])

{

Otvet_Elementov = "Ответ: Данная функция не является СКНФ из-за одинаковых дизъюнкций.";

return Otvet_Elementov;

}

else if (summa[i] != summa[j])

{

Otvet_Elementov = "";

}

}

}

}

// на правильность элементов - работает

element = Text.Split(' ', '(', ')', '|', '!', '&'); // элементы все

element2 = string.Join(" ", element); // набор всех элементов

element3 = summa[1].Split('|', '!');

for (int i = 0; i < element3.Length; i++) // считаем количество элементов в скобке

{

if (element3[i] != "")

{

k++;

}

}

int t = 0;

for (int i = 0; i < element.Length; i++) // считаем количество элементов в скобке

{

if ((element[i] != "") & (t < k))

{

text2 = text2 + element[i];

t++;

}

}

element2 = element2.Replace(" ", string.Empty);

element2 = element2.Remove(k);

for (int i = k; i < element.Length; i++) // считаем количество элементов в скобке

{

if (element[i] != "")

{

int poz = element2.IndexOf(element[i]);

//Console.WriteLine(poz + " " + element[i]);

if (poz == -1)

{

Otvet_Elementov += "Данная функция не является СКНФ из-за неверных элементов!!!";

return Otvet_Elementov;

}

else

{

Otvet_Elementov += "";

}

}

}

return Otvet_Elementov;

}

Приложение П

Код подпрограммы «Проверка на дизъюнкцию»

/*

Подпрограмма осуществляет проверку правильности написания дизъюнкции («|») в функции СКНФ. Проверка осуществляется посимвольно.

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

C#

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

str - строка считываемая из файла

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

Otvet_Dizunkciya - программа выдает сообщение об ошибке или если Otvet_Dizunkciya = «», то означает что ошибок не найдено.

*/

// проверка Дизъюнкции

static string Proverka_Dizunkciya(string Text)

{

Otvet_Dizunkciya = "";

string text2 = "", text3 = "";

int poziciya, kol_plusov = 0;

string[] summa, elem_diz, element;

summa = Text.Split('&', '(', ')');// все что в скобках

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

{

if (summa[i] != "")

{

poziciya = i;

text3 = summa[i];

elem_diz = text3.Split('|'); // - переменные

// проверка на количество +

for (int j = 0; j < text3.Length; j++)

{

if (text3[j] == '|') { kol_plusov++; }

}

// ели вообще нет + - работает

if (kol_plusov == 0)

{

Otvet_Dizunkciya = "Ответ: Данная функция не является СКНФ1.";

return Otvet_Dizunkciya;

}

// если начинается или заканчивается на + - работает

else if ((text3[text3.Length - 1] == '|') | (text3[0] == '|'))

{

Otvet_Dizunkciya = "Ответ: Данная функция не является СКНФ2.";

return Otvet_Dizunkciya;

}

// ели есть +

else

{

elem_diz = text3.Split('|');

// проверка одинаковых элементов - работает

for (int j1 = 0; j1 < elem_diz.Length; j1++)

{

for (int j2 = j1 + 1; j2 < elem_diz.Length; j2++)

{

if (elem_diz[j1] == elem_diz[j2])

{

Otvet_Dizunkciya = "Ответ: Данная функция не является СКНФ3.";

return Otvet_Dizunkciya;

}

else

{

Otvet_Dizunkciya = "";

}

}

}

}

}

}

return Otvet_Dizunkciya;

}

Приложение Р

Код подпрограммы «Проверка на конъюнкцию»

/*

Подпрограмма осуществляет проверку правильности написания конъюнкции («&») в функции СКНФ. Проверка осуществляется посимвольно.

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

C#

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

str - строка считываемая из файла

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

Otvet_Koniunkciya - программа выдает сообщение об ошибке или если Otvet_Koniunkciya = «», то означает что ошибок не найдено.

*/

// проверка Коньюнкции - Работает

static string Proverka_Koniunkciya(string Text)

{

string Otvet_Koniunkciya = "";

string[] poziciya;

int kol_kon = 0;

// проверка на количество &

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

{

if (Text[i] == '&') { kol_kon++; }

}

// если начинается или заканчивается на & - работает

if ((Text[Text.Length - 1] == '&') | (Text[0] == '&'))

{

Otvet_Koniunkciya = "Ответ: Данная функция не является СКНФ.";

return Otvet_Koniunkciya;

}

// ели вообще нет & - работает

else if (kol_kon == 0)

{

Otvet_Koniunkciya = "Ответ: Данная функция не является СКНФ1.";

return Otvet_Koniunkciya;

}

// ели есть &

else

{

poziciya = Text.Split('&');

for (int i = 1; i < poziciya.Length; i++)

{

string simbol = poziciya[i - 1];

string simbol2 = poziciya[i];

if ((simbol[simbol.Length - 1] == ')') & (simbol2[0] == '('))

{

Otvet_Koniunkciya = "";

}

else if ((simbol[simbol.Length - 1] != ')') & (simbol2[0] != '('))

{

Otvet_Koniunkciya = "Ответ: Данная функция не яфляется СКНФ из-за конъюнкции.";

return Otvet_Koniunkciya;

}

}

return Otvet_Koniunkciya;

}

Приложение С

Код подпрограммы «Проверка функции на скобки»

/*

Подпрограмма осуществляет проверку правильности написания скобок в функции СКНФ. Проверка осуществляется посимвольно.

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

C#

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

str - строка считываемая из файла

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

Otvet_Skobok - программа выдает сообщение об ошибке или если Otvet_Skobok = «», то означает что ошибок не найдено.

*/

// проверка Скобок - Работает

static string Proverka_Skobok(string Text)

{

// Проходим по всем символам строки

string Otvet_Skobok = "";

Kol_Skobok = 0;

Kol_Skobok1 = 0;

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

{

if (Text[i] == '(')

{

Kol_Skobok++;

}

else if (Text[i] == ')')

{

Kol_Skobok1++;

}

}

if (Kol_Skobok > Kol_Skobok1) { Otvet_Skobok = "Не закрыта скобка!!!"; }

else if (Kol_Skobok < Kol_Skobok1) { Otvet_Skobok = "Закрытых скобок больше чем открытых!!!"; }

else if (Kol_Skobok == Kol_Skobok1)

{

for (int i = 0; i < Text.Length - 1; i++)

{

if ((Text[i] == '(') & (Text[i + 1] == ')'))

{

Otvet_Skobok += "Постые значения в скобках";

}

else { Otvet_Skobok = ""; }

}

}

string m = Convert.ToString(Kol_Skobok);

string m1 = Convert.ToString(Kol_Skobok1);

if ((Kol_Skobok11 == Kol_Skobok12) & (Kol_Skobok11 == "0"))

{

Otvet_Skobok = "Ответ: Данная функция не является СКНФ.";

}

else if ((Kol_Skobok11 == Kol_Skobok12) & (Kol_Skobok11 == "1"))

{

Otvet_Skobok = ("Ответ: Данная функция не является СКНФ.");

}

return Otvet_Skobok;

}

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


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

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