Разработать схему алгоритма, составить C++ Builder-проект (оконный и консольный вид) вычисления таблицы значений функции: y(x,a,b). Аргумент X принимает N значений от Xn с шагом Dx, а параметр А принимает значения от An до Аk с шагом Da. Параметр B принимает значение, численно равное корню нелинейного уравнения, вычисленного на интервале c = 0 и d = 8 с заданной погрешностью ɛ=10−3÷10−6. (Табулирование функции и нахождение корня нелинейного уравнения методом дихотомии (половинного деления) в C++ Builder (оконное и консольное приложения))
Решение:
Вся работа выполнена в соответствии с требованиями Кошельковой ЛВ. Прилагаю отчёт, код программы, все скриншоты, проверки и блок-схемы.
Предпросмотр отчёта:
Московский авиационный институт
(национальный исследовательский университет)
Разработка алгоритмов и программ решения
алгебраических задач численными методами
по дисциплине «Информатика»
студент группы М4О-103Б-17
преподаватель кафедры 403
Excel график функции
Оглавление
- Условие задачи
- Анализ задания
- Теоретические сведения
- Схемы алгоритмов
- Описание C++ Builder-программы
- Текст программы
- Пример выполнения программы
- Консольное приложение
- Набор тестов
- Выводы
- Список использованной литературы
1. Условие задачи
Разработать схему алгоритма, составить C++ Builder-проект вычисления таблицы значений функции:
Аргумент X принимает N значений от Xn с шагом Dx, а параметр А принимает значения от An до Аk с шагом Da. Параметр B принимает значение, численно равное корню нелинейного уравнения:
вычисленного на интервале c = 0 и d = 8 с заданной погрешностью ε = 10 -3 ÷ 10 -6 .
2. Анализ задания
- Xn – начальное значение аргумента, тип – с плавающей точкой;
- Dx – шаг изменения аргумента, тип – с плавающей точкой;
- N – число значений аргумента, тип – целый;
- An – начальное значение параметра A, тип – с плавающей точкой;
- Ak – конечное значение параметра A, тип – с плавающей точкой;
- Da – шаг изменения параметра A, тип – с плавающей точкой;
- C, D – интервал изоляции, тип – с плавающей точкой;
- Eps – погрешность вычисления корня нелинейного уравнения, тип – с плавающей точкой;
- Km — максимальное количество итераций, тип – целый;
- Mx – массив (одномерный) значений аргумента X, тип – с плавающей точкой;
- My – массив (двумерный) значений функции Y, тип – с плавающей точкой;
- Ma – массив (одномерный) значений параметра A, тип – с плавающей точкой;
- B – численное значение корня нелинейного уравнения, тип – с плавающей точкой;
- Zt – Погрешность вычисления корня по невязке, тип – с плавающей точкой
- Er – массив (двумерный) признака ошибки при вычислении функции, тип – целый;
- Equat() – признак ошибки при вычислении корня нелинейного уравнения, тип – bool.
В алгоритме выполняются следующие функции:
Урок 4. Формулы Excel для начинающих
- Ввод исходных данных;
- Вычисление корня нелинейного уравнения;
- Вычисление таблицы значений функции;
- Проверка значения подкоренного выражения и формирование признака ошибки, если оно имеет отрицательный знак;
- Вывод результатов вычислений.
3. Теоретические сведения
Метод дихотомии
Метод половинного деления, или иначе метод дихотомии. Метод дихотомии получил свое название от древнегреческого слова διχοτομία, что в переводе означает деление надвое. Его мы используем довольно часто. Допустим, играя в игру «Угадай число», где один игрок загадывает число от 1 до 100, а другой пытается его отгадать, руководствуясь подсказками «больше» или «меньше».
Логично предположить, что первым числом будет названо 50, а вторым, в случае если оно меньше — 25, если больше — 75. Таким образом, на каждом этапе неопределенность неизвестного x3 x1 x2 X Y y=f(x) уменьшается в 2 раза. Т.е. даже самый невезучий в мире человек отгадает загаданное число в данном диапазоне за 7 предположений вместо 100 случайных утверждений.
Алгоритм метода половинного деления основан на теореме Больцано — Коши о промежуточных значениях непрерывной функции и следствии из неё.
Теорема Больцано — Коши: если непрерывная функция принимает два значения, то она принимает любое значение между ними.
Следствие (теорема о нуле непрерывной функции): если непрерывная функция принимает на концах отрезка положительное и отрицательное значения, то существует точка, в которой она равна 0.
- Задать отрезок [a,b] и погрешность e.
- Вычислить c=(a+b)/2
- Определить интервал дальнейшего поиска: если f(a) и f(c) имеют разные знаки, т.е. f(a)*f(c)
- Если длина нового отрезка |b-a|
4. Схемы алгоритмов
В соответствии с принципами структурного программирования каждый функционально законченный фрагмент программы оформлен в виде подпрограммы. В результате программа включает главную программу и набор подпрограмм, предназначенных соответственно для табулирования функции (Tab), вычисления корня нелинейного уравнения (Equat), вывода результатов выполнения программы (RezOut).
Схема алгоритма главной программы представлена на рис. 1, а таблица обозначения переменных главной программы – в табл. 1.
Главная программа начинается с ввода значений входных данных.
Xn | xn | Начальное значение аргумента, тип – с плавающей точкой |
Dx | dx | Шаг изменения аргумента, тип – с плавающей точкой |
N | n | Число значений аргумента, тип – целый |
An | an | Начальное значение параметра A, тип – с плавающей точкой |
Ak | ak | Конечное значение параметра A, тип – с плавающей точкой |
Da | da | Шаг изменения параметра A, тип – с плавающей точкой |
C, D | c, d | Интервал изоляции, тип – с плавающей точкой |
eps | Погрешность вычисления корня нелинейного уравнения, тип – с плавающей точкой | |
km | Максимальное количество итераций, тип – целый | |
Mx | Массив значений аргумента X, тип – с плавающей точкой | |
My | Массив значений функции Y, тип – с плавающей точкой | |
Ma | Массив значений параметра A, тип – с плавающей точкой | |
B | b | Параметр функции, тип – с плавающей точкой |
Zt | zt | Погрешность вычисления корня по невязке, тип – с плавающей точкой |
Er | Массив признака ошибки при вычислении функции, тип – целый | |
Equat() | Признак ошибки при вычислении определённого интеграла, тип – целый | |
X | x | Аргумент, тип – с плавающей точкой |
Y | y | Функция, тип – с плавающей точкой |
m | Количество значений параметра A, тип – целый | |
i, j | Счётчики числа повторений циклов, тип – целый |
Рис. 1. Схема алгоритма главной программы
Вычисление значения корня уравнения производится путём обращения к ПФ Equat, возвращающей также признак ошибки в случае, если значение корня уравнения не найдено за предельно допустимое число итераций Km. При этом выводится диагностическое сообщение «Решение н найдено за Km итераций», иначе происходит табулирование функции (ПП Tab) и вывод результатов выполнения программы (ПП RezOut). Значение m определяет количество значений параметра A.
Схемы алгоритмов подпрограмм, используемых в данной программе, с указанием их назначения и списков формальных параметров приведены на рис. 2 – 5.
Подпрограмма-функция F (рис. 2) предназначена для вычисления значения функции уравнения, представляет собой один оператор присваивания и используется в ПП вычисления значения корня уравнения Equat.
Рис. 2. Схема алгоритма подпрограммы-функции F
Подпрограмма-функция F предназначена для вычисления значения функции F.
Список формальных параметров: X.
x – аргумент функции, тип – с плавающей точкой.
Подпрограмма-процедура табулирования Tab (рис. 4), выполненная в виде двойного цикла, определяет функциональную зависимость вида y = f(a,x) при различных значениях параметров, поэтому внутренний цикл должен быть связан с изменением аргумента X, а внешний – с изменением параметра A. Во внутреннем цикле имеются две развилки: одна из них обусловлена тем, что функция задаётся разными формулами на разных участках изменения аргумента (проверка условия X < 1), вторая – проверяет знак подкоренного выражения и при условии A*X+B 2 >0 вычисляет значение функции, в противном случае – формирует признак ошибки Er[I][J] = 1.
Подпрограмма-процедура RezOut (рис. 5) выводит результаты выполнения программы. По структуре она построена аналогично подпрограмме Tab: представляет собой двойной цикл арифметического типа, но в отличие от ПП Tab она получает количество значений параметра A в качестве входных данных.
Рис. 3. Схема алгоритма подпрограммы-функции Equat
Подпрограмма-функция Equat предназначена для вычисления значения корня нелинейного уравнения с заданной погрешностью методом половинного деления.
Список формальных параметров: c, d, eps, km, b, zt.
c, d – интервал изоляции, тип – с плавающей точкой;
eps – погрешность вычисления корня уравнения, тип – с плавающей точкой;
km – предельно допустимое количество итераций, тип – целый.
b – значение корня нелинейного уравнения, тип – с плавающей точкой;
zt – погрешность вычисления корня по невязке, тип – с плавающей точкой;
Equat() – признак ошибки, тип – bool.
Рис. 4. Схема алгоритма подпрограммы-процедуры Tab
Подпрограмма-процедура Tab предназначена для вычисления таблицы значений функции Y.
Список формальных параметров: an, ak, da, xn, dx, n, b, er, Mx, My, Ma.
an – начальное значение параметра A, тип – с плавающей точкой;
ak – конечное значение параметра A, тип – с плавающей точкой;
da – шаг изменения параметра A, тип – с плавающей точкой;
xn – начальное значение аргумента, тип – с плавающей точкой;
dx – шаг изменения аргумента, тип – с плавающей точкой;
n – количество значений аргумента, тип – целый;
b – параметр функции, тип – с плавающей точкой.
Er – массив признака ошибки, тип – целый;
Mx – массив значений аргумента X, тип – с плавающей точкой;
My – массив значений функции Y, тип – с плавающей точкой;
Ma – массив значений параметра A, тип – с плавающей точкой;
Рис. 5. Схема алгоритма подпрограммы-процедуры RezOut
Подпрограмма-процедура RezOut предназначена для вывода результатов выполнения программы на внешние носители информации.
Список формальных параметров: Mx, My, Ma, Er, n, m.
Mx – массив значений аргумента X, тип – с плавающей точкой;
My – массив значений функции Y, тип – с плавающей точкой;
Ma – массив значений параметра A, тип – с плавающей точкой;
Er – массив признака ошибки, тип – целый;
n – количество значений аргумента, тип – целый;
m – количество значений параметра A, тип — целый.
5. Описание C++ Builder-программы
Рис. 6. Форма C++ Builder-приложения (структура проекта)
Разработка приложения в визуальной среде программирования C++ Builder включает два этапа:
- разработка интерфейса приложения;
- определение функциональности приложения, т.е. написание кода.
Интерфейс определяет способ взаимодействия пользователя и приложения, т.е. внешний вид формы при выполнении приложения и то, каким образом пользователь управляет приложением.
Разработка интерфейса состоит в создании главного окна, т.е. в расположении на форме необходимых компонентов редактирования, отображения и управления. Внешний вид формы для задачи табулирования функции представлен на рисунке 6. На форме расположены следующие визуальные компоненты: Label, Edit, Button, StringGrid, Chart, Image.
Функциональность приложения определяется процедурами, которые выполняются при возникновении определенных событий. Структура C++ Builder-проекта соответствует рассмотренным в предыдущем разделе схемам алгоритмов, но дополнительно включает процедуры или функции преобразования данных символьного типа в арифметические при вводе и обратного преобразования арифметических данных в строковые – при выводе. Текст модуля формы представлен в следующем пункте.
Обработчик кнопки «Выполнить» по событию OnClick реализует процедуры (Equat, Tab, RezOut), необходимые для выполнения задачи. Обработчик включает в себя: функции преобразования входных данных типа String, полученных из компонентов Edit, в числа с плавающей точкой типа double или целые числа типа int; вызов процедур Equat, Tab, RezOut; заполнение таблицы StringGrid – вывод данных; функции преобразования выходных данных типа double (значения корня уравнения и невязки) в данные типа String для вывода в компоненты Edit; вывод сообщений об ошибках, если они присутствуют; вывод графика с использованием компонента Chart.
Обработчик кнопки «Очистить» по событию OnClick включает в себя: очистку компонентов Edit, используемых для получения входных (выходных – для значения корня уравнения и невязки) данных, очистку серий компонента Chart, очистку компонента StringGrid в цикле.
Обработчик кнопки «Закрыть» по событию OnClick включает в себя метод Close, обеспечивающий закрытие приложения.
6. Текст программы
Код модуля UnitRGR.cpp:
Источник: 5stu.ru
Вычисление таблицы значений функции — Turbo Pascal
Ребята, всем привет! Передо мной стоит задача такого рода — необходимо написать программу вычисления таблицы значений функции z=sin(y*y)-ln(x)-ln(y). Один аргумент изменяется с определенным шагом в заданном интервале, а остальные аргументы не меняются. Значения аргумента следует выбирать самостоятельно из области его допустимых значений.
А шаг изменения аргумента выбирать таким образом, чтобы аргумент принимал 10…20 значений в заданном интервале. У меня получается какая-то шляпа, честно признаться. Помогите исправить! Я буду очень благодарна вам!
uses crt; var n,i:integer; y,x0,h,x,z:real; begin writeln(‘vvedite Y’); readln(y); if y>0 then begin write(‘vvedite nachalnoe znachenie x0 = ‘); readln(x0); write(‘vvedite kolichestvo reshenii n = ‘); readln(n); write(‘vvedite shag izmeneniya h = ‘); readln(h); writeln; writeln(‘Tablica znachenii funkcii’); writeln(‘pri y= ‘,y:0:2); x:=x0; for i:=1 to n do begin z:=sin(y*y)-ln(x)-ln(y); writeln(x:5:2,’ F(x)=’,z:7:4); end; x:=x+h; end; end.
Код к задаче: «Вычисление таблицы значений функции»
Листинг программы
uses crt; var n,i:integer; y,x0,h,x,z:real; begin writeln(‘vvedite Y’); readln(y); if y>0 then begin write(‘vvedite nachalnoe znachenie x0 = ‘); readln(x0); write(‘vvedite kolichestvo reshenii n = ‘); readln(n); write(‘vvedite shag izmeneniya h = ‘); readln(h); writeln; writeln(‘Tablica znachenii funkcii’); writeln(‘pri y= ‘,y:0:2); x:=x0; for i:=1 to n do begin z:=sin(y*y)-ln(x)-ln(y); writeln(x:5:2,’ F(x)=’,z:7:4); x:=x+h; end; end; end.
Источник: studassistent.ru
Составить схему алгоритма и написать программу вычисления таблицы значений функции f x на промежутке
Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
Наши условия использования и конфиденциальности
Public user contributions licensed under cc-wiki license with attribution required
Источник: stepik.org