Информационные структуры

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

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

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

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

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

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

Федеральное Государственное Бюджетное Образовательное Учреждение Высшего Профессионального Образования

Тульский Государственный Университет

Лабораторная работа №1

по дисциплине Базы данных и экспертные системы

Информационные структуры

Выполнила студентка гр. 520291 Алешина А.Д.

Принял доцент каф. ПМиИ Смирнов О.И.

Тула 2012

1. Цель работы

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

2. Задание

Вариант 1.

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

Алгоритм перевода, предложенный Э. Дейкстрой, основывается на использовании стека с приоритетами. Все символы операций и скобки имеют определенный приоритет. Для построения польской записи продвигаются вдоль выражения слева направо. Операнды переписываются в выходную строку, а операции запоминаются в стек. Если приоритет помещаемой в стек операции меньше приоритета операции, находящейся в вершине стека, то происходит выталкивание операций из стека по одной до тех пор, пока в вершине не окажется операция с меньшим приоритетом или стек не окажется пустым. Закрывающая скобка вызывает выталкивание всех символов до открывающей скобки (скобки в выходное выражение не переписываются). Операции имеют следующие приоритеты:

Операция

(

+, -

*, /

^

Приоритет

0

1

2

3

3. Выполнение

Алгоритм работы программы на примере.

программный инженерный ориентированный арифметический

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

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace lab1Console

{

class Program

{

enum ActionName

{

Addition,

Substration,

Multiplication,

Division,

OpenBracket,

CloseBracket,

Involution

}

class Action

{

public ActionName Name { get; set; }

public int Priority { get; set; }

public char Value;

Action(ActionName name, int priority, char value)

{

Name = name;

Priority = priority;

Value = value;

}

public override string ToString()

{

return Value.ToString();

}

public static Action Addition = new Action(ActionName.Addition, 1, '+');

public static Action Substration = new Action(ActionName.Substration, 1, '-');

public static Action Multiplication = new Action(ActionName.Multiplication, 2, '*');

public static Action Division = new Action(ActionName.Division, 2, '/');

public static Action OpenBracket = new Action(ActionName.OpenBracket, 0, '(');

public static Action CloseBracket = new Action(ActionName.CloseBracket, 0, ')');

public static Action Involution = new Action(ActionName.Involution, 3, '^');

}

static void Main(string[] args)

{

Console.WriteLine(GetPolIZ(GetStringFromFile("C:\\Input\\example_1.txt")));

}

static string GetStringFromFile(string path)

{

FileStream inputFile = null;

StreamReader strReader = null;

string inputString = null;

try

{

inputFile = new FileStream(path, FileMode.Open);

strReader = new StreamReader(inputFile);

inputString = strReader.ReadToEnd();

strReader.Close();

inputFile.Close();

}

catch (Exception e)

{

if (inputFile != null)

inputFile.Close();

if (strReader != null)

strReader.Close();

Console.WriteLine("Error in GetStringFromFile: " + e.Message);

}

if (inputString != null)

{

return inputString;

}

else

{

return "";

}

}

static string GetPolIZ(string str)

{

string retVal = "";

Stack<Action> stack = new Stack<Action>();

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

{

if (IsChar(str[i]))

{

retVal += str[i];

}

else

{

switch (str[i])

{

case '+':

retVal += ChangeStack(stack, Action.Addition);

break;

case '*':

retVal += ChangeStack(stack, Action.Multiplication);

break;

case '/':

retVal += ChangeStack(stack, Action.Division);

break;

case '-':

retVal += ChangeStack(stack, Action.Substration);

break;

case ')':

retVal += ChangeStack(stack, Action.CloseBracket);

break;

case '(':

retVal += ChangeStack(stack, Action.OpenBracket);

break;

case '^':

retVal += ChangeStack(stack, Action.Involution);

break;

default:

Console.WriteLine("Incorrect symbol: " + str[i]);

return "";

}

}

}

while (stack.Count != 0)

{

retVal += stack.Pop().ToString();

}

return retVal;

}

static string ChangeStack(Stack<Action> stack, Action action)

{

string retVal = "";

if (action.Name != ActionName.CloseBracket)

{

while (stack.Count != 0 && stack.Peek().Priority >= action.Priority && action.Priority!=0)

{

if (stack.Peek().Name != ActionName.OpenBracket && stack.Peek().Name != ActionName.CloseBracket)

{

retVal += stack.Peek().ToString();

}

stack.Pop();

}

stack.Push(action);

}

else

{

while (stack.Count != 0 && stack.Peek().Name != ActionName.OpenBracket)

{

if (stack.Peek().Name != ActionName.OpenBracket && stack.Peek().Name != ActionName.CloseBracket)

{

retVal += stack.Peek().ToString();

}

stack.Pop();

}

if (stack.Count != 0)

stack.Pop();

}

return retVal;

}

static bool IsChar(char ch)

{

return ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'));

}

5. Результат работы программы

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


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

  • Виды записи выражений. Особенности обратной польской записи. Вычисления на стеке. Преобразование из инфиксной нотации. Операторы входного языка. Описание выходной информации. Алгоритмические аспекты программы-распознавателя арифметических выражений.

    курсовая работа [2,1 M], добавлен 26.11.2011

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

    лабораторная работа [282,7 K], добавлен 30.01.2015

  • Рaзрaботка программного приложения (синтаксического aнaлизaторa), которое производит проверку синтaксисa простейшей программы на языке С++. Процедура проверки арифметических и логический выражений. Механизм удаления всех фиктивных переменных из программы.

    курсовая работа [27,2 K], добавлен 28.06.2011

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

    дипломная работа [1,5 M], добавлен 19.06.2015

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

    курсовая работа [2,4 M], добавлен 12.12.2011

  • Использование таблиц Excel и математической программы Mathcad при решении инженерных задач. Сравнение принципов работы этих пакетов программ при решении одних и тех же задач, их достоинства и недостатки. Обоснование преимуществ Mathcad над Excel.

    курсовая работа [507,0 K], добавлен 15.12.2014

  • Примеры инженерных и экономических задач, технологию их решения с использованием MS Excel. Задача максимизации прибыли предприятия. Модель Леонтьева, схема межотраслевого баланса. Предельный анализ и оптимизация прибыли, издержек и объема производства.

    лабораторная работа [891,0 K], добавлен 05.06.2012

  • Особенности способов описания языков программирования. Язык программирования как способ записи программ на ЭВМ в понятной для компьютера форме. Характеристика языка Паскаль, анализ стандартных его функций. Анализ примеров записи арифметических выражений.

    курсовая работа [292,0 K], добавлен 18.03.2013

  • Использование пакета прикладных программ MS Office при решении экономических задач. Разработка баз данных при помощи Microsoft Access. Интернет-технологии и применение языка гипертекста HTML. Построение и вычисление финансовых функций с помощью MS Excel.

    курсовая работа [3,2 M], добавлен 19.03.2010

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

    контрольная работа [259,8 K], добавлен 22.05.2010

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