- •Реферат
- •Содержание
- •Решение задач с использованием математического пакета MathCad
- •Построение графика функции одной переменной в декартовой системе координат
- •Построение поверхности
- •Построение графика параметрически заданной функции
- •Построение графика кусочно-непрерывной функции
- •Решение слау методом Крамера
- •Матричные операции
- •Решение слау методом Гаусса
- •Неопределённый интеграл
- •Неопределенный интеграл
- •Дифференцирование
- •Сплайн-интерполяция
- •Решение задачи «Функция Аккермана без рекурсии» с использованием языка программирования Pascal.
- •Условие
- •Анализ задачи
- •Реализация программы
- •Выбор среды программирования
- •Основные процедуры и функции
- •Интерфейс программы
- •Руководство пользователя
- •Список литератур
- •Приложение а – листинг программы «функция Аккермана без рекурсии»
Интерфейс программы
Программа имеет три диалоговых сообщения:
предупреждение, в котором описано, что необходимо знать для правильного использования программы (рисунок 2.1);
запрос коэффициента m (рисунок 2.1);
запрос коэффициента n (рисунок 2.1);
по окончании выполнения программа выдает значение элемента функции Аккермана как показано на рисунке 2.2;
Рисунок 2.1 – Ввод коэффициентов
Рисунок 2.2 – Вывод результата выполнения программы
На рисунке 2.2 представлен пример правильного выполнения программы при вводе коэффициентов m=1 и n=2.
Руководство пользователя
Для запуска откомпилированного исполнимого файла (.exe) требуется ядро .NETFramework. Для запуска файла с исходным кодом (.pas) можно использовать любую из систем программирования PascalABC или PascalABC.NET
Перед запуском программы пользователю необходимо прочитать информацию о функции Аккермана.
Запуск производится двойным щелчком на ярлыке программы под названием “akkerman.exe”или файл под названием “akkerman.pas” через компилирующую систему с последующим запуском из этой системы.
Перед демонстрацией решения поставленной задачи программа запросит у пользователя коэффициенты m и n. После нажатия клавиши Enter, программа отобразит Элемент функции Аккермана. Пример выполнения программы представлен на рисунке 2.2.
Вывод
В ходе выполнения вычислительной практики были выполнены задания, посредством которых были опробованы новые способы вычисления в среде Mathcad, а именно вычисление интегралов, дифференциалов, матриц, построение графиков параметрической, кусочно-непрерывной функций и поверхностей. Был освоен метод построения сплайнов для заданного набора точек функциями. Также была решена задача «Функция Аккермана без рекурсии» на языке программирования Pascal. В ходе решении задачи были подробно изучены способы работы с условными операторами. Так же применение переменных типа record.
Список литератур
Зариковская Н.В. Прикладная информатика. Учебное пособие. – Томск: Томский государственный университет систем управления и радиоэлектроники (ТУСУР), 2012. - 93 с.
Зариковская Н.В. Информатика. Учебное пособие. – Томск: Томский государственный университет систем управления и радиоэлектроники (ТУСУР), 2012. – 194 с.
Н. Культин. Turbo Pascal в задачах и примерах. – БХВ-Петербург: 2006. - 256 с.
Приложение а – листинг программы «функция Аккермана без рекурсии»
uses crt;
type stack = ^el; // организация типа стек
el=record
m,n:integer;
pr:stack;
end;
label met;
var s:stack;
m,n,m1,n1:integer;
otv:integer;
procedure add_stack(m,n:integer); // процедура добавления элемента в стек
var a:stack;
begin
new(a); // создание нового элемента
a^.pr:=s; // установка элемента в список
a^.m:=m; // заполнение данных
a^.n:=n;
s:=a;
end;
function return_stack(var m,n:integer):boolean; // извлечение элемента из стека
var a:stack;
begin
if s = nil then begin // если нет элемента в стеке
m:=0;
n:=0;
return_stack:=false; // ответить отрицательно
end
else begin // если етсь элемент в стеке
m:=s^.m; // извлечь информацию
n:=s^.n;
a:=s;
s:=s^.pr; // переключить метку стека
dispose(a); // удалить извлечённый элемент из стека
return_stack:=true; // ответить об удачном извлечении
end;
end;
begin
writeln('Убедительная просьба!!');
writeln('Прочитать сначала о функции Аккермана, перед запуском программы!!');
writeln();
writeln('Эта функция растёт очень быстро, например, число A(4,4) настолько велико,');
writeln('что количество цифр в порядке этого числа многократно превосходит');
writeln('количество атомов в наблюдаемой части Вселенной.');
writeln();
s:=nil; // "зануление" стека
met:
write('Введите коэффициент m :');
readln(m); // ввод коэффициента m ( смотреть информацию о функции Аккермана )
write('Введите коэффициент n :');
readln(n); // ввод коэффициента n
n1:=n; // переменная для запоминания начального значения n
m1:=m; // переменная для запоминания начального значения m
if n<0 then
begin
writeln('Неверный коэффициент n');
if m<0 then
begin
writeln('Неверный коэффициент m');
end;
goto met;
end;
add_stack(m,n); // добавляем первый элемент в стек
otv:=0;
while s<>nil do // пока стек не пустой
begin
if return_stack(m,n) then // удачное извлечение элементов
begin
if (n=-1) then n:=otv; // -1 характеризует, что предыдущие вычисления проводились над вложенным элементом и otv является коэффициентом n
if m=0 then otv:=n+1 else // если первое условие функции Аккермана выполняется, то запомнить ответ
begin
if (m>0)and(n=0) then add_stack(m-1,1) // если второе условие функции Аккермана выполняется, то поставить в стек элемент, требуемый по условию
else begin // если никакое условие не выполняется
add_stack(m-1,-1);// поставить в стек элемент, ожидающий коэффициен n
add_stack(m,n-1); // поставить в стек элемент, который должен дать коэффициент n
end;
end;
end
else break; // если извлечение элемента из стека прошло неудачно, то аварийно выйти из цикла ( проверка на ошибку )
end;
writeln('A(', m1, ',', n1, ') = ', otv); // вывод результата
readkey;
end.
