Вычислить значение выражения программирование

Методы программирования

Задание состоит из двух частей, первая из которых обязательна для выполнения, вторую необходимо выполнить для получения отличной оценки. Срок сдачи задания — 9 октября.

а. Вычисление значения арифметического выражения, заданного в инфиксной форме.

Теория

Говорят, что выражение записано в инфиксной форме, если знак операции (сложения, умножения, вычитания либо деления) стоит между своими аргументами, например, 5 + 7 . Каждая операция имеет приоритет выполнения (сначала выполняются умножение и деление, затем сложение и вычитание). Для изменения приоритета выполнения операций используются круглые скобки.

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

Для перевода выражения из инфиксной формы в постфиксную с учетом приоритетов операций и скобок существует простой алгоритм (Дейкстры). Алгоритм работает со стеком, в котором хранятся знаки операций. Сначала стек пуст. На вход алгоритму подается последовательность лексем (числа, скобки или знаки операций), представляющая некоторое арифметическое выражение, записанное в инфиксной форме. Результатом работы алгоритма является эквивалентное выражение в постфиксной форме. Вводятся приоритеты операций: открывающая скобка имеет приоритет 0 , знаки + и – — приоритет 1 и знаки * и / — приоритет 2 .

  1. Если не достигнут конец входной последовательности, прочитать очередную лексему.
    1. Если прочитан операнд (число), записать его в выходную последовательность.
    2. Если прочитана открывающая скобка, положить ее в стек.
    3. Если прочитана закрывающая скобка, вытолкнуть из стека в выходную последовательность все до открывающей скобки. Сами скобки уничтожаются.
    4. Если прочитан знак операции, вытолкнуть из стека в выходную последовательность все операции с большим либо равным приоритетом, а прочитанную операцию положить в стек.

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

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

    1. Если не достигнут конец входной последовательности, прочитать очередную лексему.
      1. Если прочитан операнд (число), положить его в стек.
      2. Если прочитан знак операции, вытолкнуть из стека два операнда и положить в стек результат применения прочитанной операции к этим операндам, взятым в обратном порядке.

      Ясно, что эти два алгоритма можно объединить, если в первом алгоритме вместо вывода в выходную последовательность передавать лексему сразу на вход второму алгоритму и обрабатывать «на лету» (придется поддерживать одновременно два стека).

      Формулировка задания

      Во входном файле input.txt в единственной строке находится арифметическое выражение, записанное в инфиксной форме (используются только целые положительные числа и четыре операции + , – , * , / . В выходной файл output.txt записать значение этого выражения. Стеки реализовывать при помощи связанных списков (операции добавления в начало списка и удаления первого элемента, см. теорию по заданию 1.

      Примеры

      b. * Выполнение программы вычислений

      Формулировка задания

      Во входном файле input.txt находится программа, написанная на специальном языке программирования. В языке существуют два вида операторов: оператор присваивания VARIABLE=EXPRESSION , где VARIABLE — имя переменной, состоящее из букв и цифр, не начинающееся с цифры и длиной не более 5 символов, а EXPRESSION — выражение в инфиксной форме, содержащее целые числа, скобки, знаки операций ( + , – , * , / ) и переменные и не содержащее пробелов. Значением любой переменной изначально считается 0 , оператор присваивания изменяет значение переменной на значение выражения. Второй вид оператора — оператор вывода на экран: PRINT EXPRESSION , где PRINT — служебное слово, а EXPRESSION определяется так же, как и для оператора присваивания. Этот оператор выводит в файл output.txt значение выражения EXPRESSION и переводит строку.

      Примеры

      Источник

      1.3.2. Правила вычисления выражений

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

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

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

      Операции, входящие в группы с данным приоритетом

      1.3.3. Встроенные функции в Турбо Паскаль

      Кроме этих стандартных операций, в Паскаль встроены специальные подпрограммы-функции, которые программисты могут использовать в выражениях как готовые элементы. Библиотека Турбо Паскаля содержит значительный набор внешних функций, которые подключаются автоматически при компиляции или при исполнении программы. Эти внешние процедуры и функции сгруппированы в системный блок – модуль System. Для пользователя внешний блок System, входящий в состав библиотеки Турбо Паскаль, — «прозрачный», то есть его функции применяются аналогично встроенным операторам. Функции системного блока System, применяемые при обработке числовых значений приведены в таблице 4.

      Математические функции

      Функции Турбо Паскаля

      Рассмотрим дополнительные операции над вещественными числами:

      Trunc (x) – дробная часть вещественного числа отбрасывается и выдается целый остаток;

      Int (x) – возвращает целую часть аргумента;

      Round (x) – округляет вещественное число до целого порядкового типа;

      Frac (x) – результатом является дробная часть значения аргумента.

      1.3.4. Описание констант и переменных

      Описание констант имеет вид:

      Описание переменных имеет вид:

      1. integer – целый;
      2. real – вещественный;
      3. char – символьный;
      4. string – строковый;
      5. Boolean – логический:
              1. false – ложь;
              2. true – истина.

              1.3.5. Операторы в Турбо Паскаль

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

              1. простые:
                1. оператор присваивания;
                2. пустой оператор;
                3. оператор ввода;
                4. оператор вывода;
                5. составной оператор;
              2. сложные:
                1. условный оператор;
                2. циклические операторы;
                3. оператор выбора (варианта);
                4. оператор присоединения в записях;
                5. оператор перехода.

              Оператор присваивания Оператор присваивания обозначается знаком “:=”. Формат оператора присваивания: V := A; где V – имя переменной, := — знак присваивания, A – выражение. Тип выражения должен соответствовать типу переменной. Допускается присваивание переменной вещественного типа значения выражения целого типа, но не наоборот! Для преобразования значения вещественного типа в значение целого типа предназначены функции TRUNC(X) – нахождение целой части X и ROUND(X) – округление X в сторону ближайшего целого. Например, A := 5; B := A*A-2; C := ‘A’; Операторы ввода и вывода Операторы ввода и вывода служат для организации обмена информацией между внешними устройствами (дисплей, клавиатура, принтер) и памятью ЭВМ. Оператор ввода имеет следующие форматы:

              1. READ (a1, a2. ak), где a1, a2. ak – список вводимых параметров. Здесь, каждое вводимое значение присваивается последовательно данным переменным.
              2. READLN (a1, a2. ak) – каждое вводимое значение присваивается последовательно переменным a1, a2. ak, после чего происходит переход на новую строку.
              3. READLN – обеспечивает пропуск одной строки и переход к началу новой строки.

              Примечание. Ввод переменных логического типа недопустим. Числовые значения задаются после запуска программы через пробел (или ввод). Например, ввести данные A=5, B=1.7, C = ‘L’. … READ (A, B, C); … 5_1.7_L /после запуска программы на выполнение/ Оператор вывода имеет следующие форматы:

              1. WRITE (b1, b2. bk), где b1, b2. bk – список переменных подлежащих выводу. Выводимые значения размещаются в одной строке.
              2. WRITELN (b1, b2. bk) – осуществляется вывод значений b1, b2. bk и после вывода последнего значения осуществляется переход на новую строку.
              3. WRITELN – обеспечивает пропуск строки в файле и переход к новой строке.

              Примечание. В качестве выводимых параметров могут быть целые, вещественные, символьные и логические переменные и константы. Пример1.1. Вычислить значение выражения по формуле. Рекомендуется числитель и знаменатель вычислить как отдельные выражения: A := exp (abs(x-z)) + sqr (sin (sqr(z)*z)); B := sin (x) / cos (x) – sqrt (abs(cos (sqr(x))-exp(z))); Y := A/B; Задача1.1. Рассмотрим разработку алгоритма и программы вычисления площади треугольника по формуле Герона. Блок-схема алгоритмаЛистинг программы PROGRAMTREUG; USESCRT; VAR A, B, C, P, S : REAL; BEGIN CLRSCR; WRITELN(‘Введите стороны треугольника’); READLN (A, B, C); P := (A+B+C)/2; S := SQRT(P*(P-A)*(P-B)*(P-C)); WRITELN(‘Площадь треугольника равна — ’,S); READLN; END. Задача1.2. Ввести с клавиатуры четырёхзначное число и найти произведение цифр этого числа. Листинг программы PROGRAM PRIMER1; USES CRT; VAR A, A1, A2, A3, A4, A5, A6, A7 : INTEGER; BEGIN WRITELN(‘Введите целое 4-хзначное число’); READLN (A); // 4375 A1 := A MOD 10; // 5 WRITELN (A1); A2 := A DIV 10; // 437 A3 := A2 MOD 10; // 7 WRITELN (A3); A4 := A2 DIV 10; // 43 A5 := A4 MOD 10; // 3 WRITELN (A5); A6 := A DIV 1000; // 4 WRITELN (A6); A7 := A1 * A3* A5*A6; // 420 WRITELN (A1, ‘*’, A3, ‘*’, A5, ‘*’, A6, ‘=’, A7); WRITELN; END.

              Источник

              1. Операции вычисления

              сложение — \(+\) \(5+5=10\)
              вычитание — \(-\) \(9-4=5\)
              деление обычное — \(/\) \(5/2=2.5\)
              целочисленное деление, определяет целую часть от деления — \(//\) \(5//2=2\)
              определяет остаток от деления — % 5 % 2 = 1
              возведение в степень — \(**\) \(3**\) \(2=9\)

              рис1.jpg

              рис2.jpg

              Знаки \(>>>\) — это приглашение к работе. В таком режиме научимся записывать выражения и определять результат.

              После значков \(>>>\) запишем выражение на языке программирования, оно будет выглядеть так: 5 + 2 \(/6~\) − 4 ∗ ∗ 2 .

              рис3.jpg

              Источник

              Читайте также:  Стандарты языка программирования python
Оцените статью