Пример программы вычисления значения функции с использованием разветвляющего алгоритма
Описание з адачи. Составить программу для вычисления значения функции y = (yfx+Т) в заданной точке с проверкой допустимых значений аргумента.
Последовательность выполнения задачи.
- 1. Разработка пользовательского ишперфейса. Для решения поставленной задачи в интерфейсе программы должны быть предусмотрены средства для ввода исходных данных, инициирования вычислений, а также для вывода полученных результатов на экран. При разработке интерфейса воспользуемся тремя типами элементов:
- 1) Text Box (текстовое поле) используется для ввода исходных данных и отображения результатов выполнения программы;
- 2) Label (метка) — для отображения заголовков (названий) текстовых полей;
- 3) Command Button (кнопка) — для активизации функциональных действий программы по щелчку мыши в ее области.
Список необходимых элементов управления и специфические значения их свойств для данной программы приведены в табл. 6.7.
Арифметические вычисления и Вычисление в таблице MS Word c помощью функций
Элементы управления программы вычисления значения функции и значения их свойств
Вычисление значения функции
Текстовое поле аргумента
Текстовое поле функции
Метка для поля аргумента
Метка для поля функции
Метка для заголовка
Функция вида: у=(х+1) Л 0,5
Кнопка для вычисления
Кнопка для выхода
Приступим к созданию пользовательского интерфейса:
- 1) активизируйте приложение MS Excel, создайте (сохраните) новую книгу под именем MyExCalc_?ип;
- 2) войдите в редактор VBA (Alt + FI 1);
- 3) создайте форму UserForm_F. Для этого правой кнопкой мыши в окне проекта выделите объект VBAProject(MyExCalc_Fun) и выберете команду Insert —> UserForm из строки меню или контекстного меню (см. рис. 5.4).
После создания формы нужно установить (изменить) значения ее свойств Name и Caption. Для этого надо обратиться к описанному в параграфе 5.2 окну свойств [1] . Напомним, что оно представлено двумя колонками. Первая колонка содержит названия свойств, вторая — значения этих свойств. Последовательно выбирая необходимые свойства, установите их значения в соответствии с табл. 6.7.
Замечание: имя формы и элементов управления изменяем потому, что для прозрачности исходного кода программы имена объектов должны быть, по возможности, смысловыми;
4) в панели элементов управления ToolBox последовательно выберите элементы управления (метки, текстовые поля и кнопки) в соответствии с табл. 6.7 и поместите их на форму, как это описано в параграфе 5.2.
Рядом с каждым текстовым нолем (слева от него) нужно поместить соответствующий элемент Label (метка). Они необходимы для идентификации текстовых полей, так как пользователь при работе с программой должен знать назначение полей формы. Для изменения положения элемента управления в форме надо просто его перетащить. Для изменения размеров элемента управления его следует сначала выбрать, а затем перетащить маркер размера.
35 Функции (def) в Python. Определение и вызов функции
Сформированные VBA стандартные значения некоторых свойств данных элементов необходимо изменить в соответствии с табл. 6.7. Например, по умолчанию свойству Text текстового поля назначается стандартное значение — имя элемента. В нашем случае нужно очистить это значение, т.е. свойство Text по умолчанию должно быть пустым.
Вид сформированного пользовательского интерфейса приведен на рис. 6.4.
Рис. 6.4. Окно программы вычисления значения функции
2. Разработка кода программы. Напомним, что VBA поддерживает технологию ООП и соответственно содержит средства обработки событий. Это означает, что пользовательский интерфейс программы состоит из набора объектов, таких как элементы управления, формы и др., а выполняемые программой действия зависят от происходящих с этими элементами событий.
Как правило, события возникают в ответ на какое-либо действие пользователя. Реакция же программы на эти события зависит от кода, написанного программистом. Программист определяет действие программы путем написания процедур обработки событий. Для написания кода программы используется окно кода, которое является полноценным текстовым редактором. Активизировать окно кода можно разными способами (см. параграф 5.2).
Первый способ. В дизайнере формы UserForm_F выполните двойной щелчок по кнопке «Выход». Появится окно кода, содержащее шаблон процедуры обработки события, который начинается словами Private Sub CmdExitjClickQ и заканчивается словами End Sub. Введите в эту процедуру всего одну строку кода — оператор End, как это сделано в листинге 6.2.
Второй способ. Выберите из пункта меню View команду Code. Тогда появится окно кода. Обратите внимание на два раскрывающихся списка, расположенных в верхней части окна кода, сразу под строкой заголовка. В левой части расположен список объектов, содержащий имена всех объектов, размещенных в форме.
Поскольку сама форма тоже является объектом, то и она представлена в этом списке. Правый список содержит перечень всех событий, определенных для данного объекта.
В этой программе будут использоваться две глобальные переменные для хранения соответственно значений аргумента и функции. Для их объявления выберите в качестве объекта из левого списка раздел General. Далее в данном разделе окна кода введите следующую строку (листинг 6.2):
Dim х As Single, у As Single.
Действуя подобным образом, создайте обработчики событий: Click для кнопки CmdCalc (вычислить) и KeyPress для поля Гсх?_Х_(аргумент). Тексты этих событий приведены в листинге 6.2. Например, для создания шаблона процедуры обработки события CmdCalcClick нужно в качестве объекта из левого списка выбрать объект CmdCalc, а из правого списка — событие Click.
Заметим, что в процедуру CmdCalc_Click включены блоки операторов проверки корректности введенного значения аргумента (должно быть числом не меньше -1). Обработчик события Text_Х_КеуPress запрещает ввод в текстовом поле Text X недопустимых символов числа. Как известно, допустимыми символами числа являются символы: «.», «,» , «-», «+» и цифры от 0 до 9.
Dim х As Single, у As Single
Private Sub CmdExit_Click()
‘ кнопка выход End
Private Sub CmdCalc_Click()
‘ кнопка вычислить Text_Y.Text = «»
If IsNumeric(Text_X.Text) = False Then MsgBox «Аргумент не число!», vbCritical Text X.SetFocus
Exit Sub End If
If x 0 Then KeyAscii = 0 Case AscAsc(«+»)
If InStr(1, Text_X.Text, <> 0 Or
InStr(l, Text_X.Text, » + «) <> 0 Then KeyAscii = 0 Case Is 57 KeyAscii = 0 End Select End Sub
- 3. Компиляция и запуск программы на выполнение.
- 3.1. Для проверки синтаксических ошибок откомпилируйте программу. Для компиляции проекта выполните команду меню Debug —» Compile VBAProject. Если компилятор выдает ошибку(-и) (рис. 6.5), то нужно в помеченной строке исправить текст в соответствии листингом 6.2. В данном случае (см. рис. 6.5) неправильно написана функция CS ng (надо CSng).
Puc. 65. Результат работы компилятора
3.2. Если ошибок компиляции нет, запустите приложение на выполнение при помощи кнопки ? (Run —» Run Sub) панели инструментов или клавиши F5. В активной форме введите значение аргумента и нажмите на кнопку «Вычислить». Если введены корректные данные, то приложение выведет найденный результат (см. рис. 6.4).
Если введены некорректные данные, то приложение выведет диагностическое сообщение (например, рис. 6.6).
Рис. 6.6. Окно диагностического сообщения
- [1] Кондрашов 10. II., Лебедев В. М., Мещерякова II. A. Visual Basic 6.0. Описание языка.Основные элементы управления.
Источник: studme.org
Подробно про функции на C++
В этом руководстве мы узнаем о функциях и выражениях функций C++ с помощью примеров.
Функция – это блок кода, который выполняет определенную задачу.
Предположим, нам нужно создать программу для создания круга и его окраски. Мы можем создать две функции для решения этой проблемы:
- рисования круга;
- раскраски круга.
Разделение сложной проблемы на более мелкие части делает нашу программу простой для понимания и повторного использования.
Есть два типа функций:
- Стандартные библиотечные функции: предопределены в С++.
- Определяемая пользователем функция (создается пользователями).
В этом руководстве мы сосредоточимся в основном на пользовательских функциях.
Пользовательская функция
C++ позволяет программисту определять свои собственные функции.
Пользовательская функция группирует код для выполнения определенной задачи, и этой группе кода дается имя (идентификатор).
Когда функция вызывается из любой части программы, она выполняет коды, определенные в теле функции.
Объявление функции
Синтаксис объявления функции:
returnType functionName (parameter1, parameter2. ) < // function body >
Вот пример объявления функции:
// function declaration void greet()
- имя функции – greet();
- тип возврата функции недействителен;
- пустые круглые скобки означают, что у него нет параметров;
- тело функции написано внутри <>.
Вызов функции
В приведенной выше программе мы объявили функцию с именем greet(). Чтобы использовать функцию, нам нужно ее вызвать.
int main() < // calling a function greet(); >
#include using namespace std; // declaring a function void greet() < cout int main() < // calling the function greet(); return 0; >
Hello there!
Параметры
Как упоминалось выше, функцию можно объявить с параметрами (аргументами). Параметр – это значение, которое передается при объявлении функции.
void printNum(int num)
Здесь переменная int num является параметром функции.
int main() < int n = 7; // calling the function // n is passed to the function as argument printNum(n); return 0; >
// program to print a text #include using namespace std; // display a number void displayNum(int n1, float n2) < cout int main() < int num1 = 5; double num2 = 5.5; // calling the function displayNum(num1, num2); return 0; >
The int number is 5 The double number is 5.5
В приведенной выше программе мы использовали функцию, которая имеет один параметр типа int и один параметр типа double.
Рекурсия в C++
Примечание. Тип аргументов, передаваемый при вызове функции, должен совпадать с соответствующими параметрами, определенными в объявлении функции.
Заявление о возврате
void displayNumber() < // code >
Это означает, что функция не возвращает никакого значения.
Также возможно вернуть значение из функции. Для этого нам нужно указать returnType функции во время объявления функции.
Затем оператор return может использоваться для возврата значения из функции.
int add (int a, int b)
Здесь у нас тип данных int вместо void. Это означает, что функция возвращает значение типа int.
Код возврата (a + b) возвращает сумму двух параметров, как значение функции.
Оператор return означает, что функция завершена. Любой код после возврата внутри функции не выполняется.
// program to add two numbers using a function #include using namespace std; // declaring a function int add(int a, int b) < return (a + b); >int main() < int sum; // calling the function and storing // the returned value in sum sum = add(100, 78); cout 100 + 78 = 178
В приведенной выше программе функция add() используется для нахождения суммы двух чисел.
Программа для вычисления функции
Отдельно остановимся на рекурсивных функциях. Рекурсивная функция представляет такую конструкцию, при которой функция вызывает саму себя.
Рекурсивная функция факториала
Возьмем, к примеру, вычисление факториала, которое использует формулу n! = 1 * 2 * … * n . То есть по сути для нахождения факториала числа мы перемножаем все числа до этого числа. Например, факториал числа 4 равен 24 = 1 * 2 * 3 * 4 , а факторил числа 5 равен 120 = 1 * 2 * 3 * 4 * 5 .
Определим метод для нахождения факториала:
int Factorial(int n)
При создании рекурсивной функции в ней обязательно должен быть некоторый базовый вариант , с которого начинается вычисление функции. В случае с факториалом это факториал числа 1, который равен 1. Факториалы всех остальных положительных чисел будет начинаться с вычисления факториала числа 1, который равен 1.
На уровне языка программирования для возвращения базового варианта применяется оператор return :
if (n == 1) return 1;
То есть, если вводимое число равно 1, то возвращается 1
Другая особенность рекурсивных функций: все рекурсивные вызовы должны обращаться к подфункциям, которые в конце концов сходятся к базовому варианту:
return n * Factorial(n — 1);
Так, при передаче в функцию числа, которое не равно 1, при дальнейших рекурсивных вызовах подфункций в них будет передаваться каждый раз число, меньшее на единицу. И в конце концов мы дойдем до ситуации, когда число будет равно 1, и будет использован базовый вариант. Это так называемый рекурсивный спуск.
Используем эту функцию:
int Factorial(int n) < if (n == 1) return 1; return n * Factorial(n — 1); >int factorial4 = Factorial(4); // 24 int factorial5 = Factorial(5); // 120 int factorial6 = Factorial(6); // 720 Console.WriteLine($»Факториал числа 4 = «); Console.WriteLine($»Факториал числа 5 = «); Console.WriteLine($»Факториал числа 6 = «);
Рассмотрим поэтапно, что будет в случае вызова Factorial(4) .
-
Сначала идет проверка, равно ли число единице:
if (n == 1) return 1;
Но вначале n равно 4, поэтому это условие ложно, и соответственно выполняется код
return n * Factorial(n — 1);
То есть фактически мы имеем:
return 4 * Factorial(3);
Factorial(3)
Опять же n не равно 1, поэтому выполняется код
return n * Factorial(n — 1);
То есть фактически:
return 3 * Factorial(2);
Factorial(2)
Опять же n не равно 1, поэтому выполняется код
return n * Factorial(n — 1);
То есть фактически:
return 2 * Factorial(1);
Factorial(1)
Теперь n равно 1, поэтому выполняется код
if (n == 1) return 1;
В итоге выражение
Factorial(4)
В реальности выливается в
4 * 3 * 2 * Factorial(1)
Рекурсивная функция Фибоначчи
Другим распространенным показательным примером рекурсивной функции служит функция, вычисляющая числа Фибоначчи. n-й член последовательности Фибоначчи определяется по формуле: f(n)=f(n-1) + f(n-2), причем f(0)=0, а f(1)=1. То есть последовательность Фибоначчи будет выглядеть так 0 (0-й член), 1 (1-й член), 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, . Для определения чисел этой последовательности определим следующий метод:
int Fibonachi(int n) < if (n == 0 || n == 1) return n; return Fibonachi(n — 1) + Fibonachi(n — 2); >int fib4 = Fibonachi(4); int fib5 = Fibonachi(5); int fib6 = Fibonachi(6); Console.WriteLine($»4 число Фибоначчи = «); Console.WriteLine($»5 число Фибоначчи = «); Console.WriteLine($»6 число Фибоначчи = «);
Здесь базовый вариант выглядит следующий образом:
if (n == 0 || n == 1) return n;
То есть, если мы ищем нулевой или первый элемент последовательности, то возвращается это же число — 0 или 1. Иначе возвращается результат выражения Fibonachi(n — 1) + Fibonachi(n — 2);
Рекурсии и циклы
Это простейшие пример рекурсивных функций, которые призваны дать понимание работы рекурсии. В то же время для обоих функций вместо рекурсий можно использовать циклические конструкции. И, как правило, альтернативы на основе циклов работают быстрее и более эффективны, чем рекурсия. Например, вычисление чисел Фибоначчи с помощью циклов:
static int Fibonachi2(int n) < int result = 0; int b = 1; int tmp; for (int i = 0; i < n; i++) < tmp = result; result = b; b += tmp; >return result; >
В то же время в некоторых ситуациях рекурсия предоставляет элегантное решение, например, при обходе различных древовидных представлений, к примеру, дерева каталогов и файлов.
Источник: metanit.com