Главная страница

М. В. Ломоносова Факультет вычислительной математики и кибернетики Е. И. Большакова, Н. В. Груздева Основы программирования на языке Рефал Учебное пособие


Скачать 0.92 Mb.
НазваниеМ. В. Ломоносова Факультет вычислительной математики и кибернетики Е. И. Большакова, Н. В. Груздева Основы программирования на языке Рефал Учебное пособие
Анкорqewqe
Дата02.01.2022
Размер0.92 Mb.
Формат файлаdoc
Имя файлаRefalP-1.doc
ТипУчебное пособие
#323127
страница19 из 22
1   ...   14   15   16   17   18   19   20   21   22

5.Задания практикума


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

5.1.Дифференцирование выражения


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

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

Dy:sin(x+2*y)*y^-4+(8*a-b)*sqrt(sin(y-2)+cos(y+9))

Синтаксис дифференцируемого выражения описывается с помощью следующих БНФ-правил:

выражение ::= слагаемое | выражение знак_суммирования слагаемое

знак_суммирования ::= + |

слагаемое ::= множитель | слагаемое знак_умножения множитель

знак_умножения ::= * | /

множитель ::= целое_без_знака | переменная | переменная^степень

| имя_функции(выражение) | (выражение) |

(выражение)^степень

переменная ::= идентификатор

степень ::= знак целое_без_знака

знак ::= пусто | + |

имя_функции ::= sin | cos | ln | exp | sqrt |
arcsin | arccos

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

  • Проверку синтаксической правильности заданного выражения согласно приведённым БНФ;

  • дифференцирование введённого выражения по заданной переменной;

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

  • вывод на экран результирующего выражения.

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

    • нарушен баланс открывающих и закрывающих скобок;

    • пропущен знак операции или её операнд;

    • употребление неизвестной функции;

    • неправильная запись выражения со степенью;

    • неверная запись множителя – числа, идентификатора, обращения к функции.



5.2.Решение системы линейных уравнений


Дана система из n линейных уравнений с m неизвестными, n и m ≥ 1, например (m=2, n=2):

3*x+2*x-16/(1+7)*y=11

x+2*y=7

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

Необходимо составить рефал-программу, решающую эту систему методом исключения переменных.

В общем случае решение системы включает в себя следующие шаги:

  1. Все уравнения системы преобразуются к каноническому виду: a*x+b*y+c*z+...+d=0
    где a, b, c, d – числа.

  2. В одном из уравнений некоторая переменная выражается через другие переменные:
    x=-(b*y+c*z+...+d)/a = -b/a*y-c/a*z-...-d/a.

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

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

Противоречие (неверное равенство) возникает, когда система не имеет решения (например, в ходе преобразований получено уравнение 6‑4=0). В этом случае рефал-программа должна в качестве ответа выдать сообщение

Система уравнений не имеет решения

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

Если в ходе преобразований системы получено одно уравнение с одной переменной, то из этого уравнения вычисляется значение этой переменной. Значения остальных переменных вычисляются по полученным в ходе преобразований формулам. В этом случае рефал-программа должна выдать решение системы уравнений в виде строк вида имя_переменной=значение, например, для системы уравнений, приведённой выше в качестве примера, ответом будет:

x=3

y=2

Если же в результате преобразований системы уравнений остаётся одно уравнение, но оно содержит более одной переменной (например, x+y+2=0), то это означает, что исходная система имеет бесконечное множество решений. В этом случае рефал-программа должна вывести на печать имена свободных переменных (которые могут принимать любые значения) и формулы для вычисления остальных переменных системы по значениям этих свободных переменных. Например, для заданной системы уравнений:

x+2*y-z=2

2*x-y+3*z=-6

рефал-программа может выдать результат в виде:

x=-z-2

y=z+2

z – свободная переменная

1   ...   14   15   16   17   18   19   20   21   22


написать администратору сайта