Лабораторная работа 9
ПРОЦЕДУРЫ
Цель работы: Изучить способы реализации процедур.
-
Краткие теоретические сведения
Алгоритм задачи проектируется путем декомпозиции всей задачи в отдельные подзадачи. Обычно подзадачи реализуются в виде подпрограмм.
Подпрограмма - это последовательности операторов, которые определены и записаны в только одном месте программы, однако их можно вызывать для выполнения из нескольких точек программы.
Подпрограммы решают 4 важные задачи:
-
Избавляет от необходимости многократно повторять в тексте программы аналогичные фрагменты.
-
Улучшают структуру программы, облегчая ее понимание.
-
Повышает устойчивость к ошибкам программирования.
-
Позволяет использовать принцип программирования сверху вниз или снизу вверх.
Подпрограммы бывают двух видов: процедуры и функции.
Формат определения процедуры следующий:
[Private | Public] Sub <имя процедуры> (список аргументов)
<тело процедуры>
End Sub
В VB аргументы могут передаваться двумя способами:
-
как ссылки (ByRef). В этом случае подпрограмма получает физический адрес памяти передаваемой переменной.
-
как значение (ByVal). В этом случае вызванная подпрограмма получает копию значения
Различие состоит в том, что при передаче аргумента как ссылки при изменении значения аргумента в подпрограмме, значение переменной в вызывающей части программного кода изменится.
Процедуры в отличие от функций не имеют возвращаемого значения.
Однако значения из процедуры можно возвращать с помощью аргументов, передаваемых как ссылки.
Например, процедура вычисления площади круга будет иметь вид:
Sub SKr(ByVal R As Single, ByRef S As Single)
S=3.14*R^2;
End Sub
Аргумент R является входным (передается по значению), а S — выходным (передается по ссылке).
Массив в подпрограмму всегда передается в виде ссылки. Процедура, вычисляющая сумму элементов массива, имеет следующий вид:
Sub Sum(ByRef m() As Single, ByRef S As Single)
S=0
For i=LBound(m) To UBound(m)
S=S+m(i)
Next i
End Sub
Переменные, описанные внутри подпрограммы, являются локальными и доступны только из этой подпрограммы. Переменные, описанные вначале модуля до описания подпрограмм, являются глобальными и видны во всем модуле. Область видимости переменной — часть программы, в которой имеется доступ к значению этой переменной.
2. Задание. Разработать программу с процедурой.
3. Вопросы, требующие изучения, перед выполнением задания
1. Назначение процедур.
2. Правила декларации заголовка процедуры и реализации ее тела.
3. Локальные переменные и их декларация. Отличие локальных переменных от глобальных. Область видимости переменных.
4. Различие в передаче аргументов по ссылке и по значению.
4. Варианты индивидуальных заданий
-
Упорядочить элементы массивов A и B в порядке возрастания. Массив передавать в качестве параметра-переменной процедуре Sort.
-
Используя процедуру вычисления факториала, составить программу для вычисления .
-
Составить программу для нахождения суммы элементов каждого из трех массивов, введенных с клавиатуры, определив процедуру.
-
Составить программу, позволяющую преобразовать массивы А и В следующим образом: из каждого элемента массива вычитается среднее значение элементов этого массива.
-
Используя процедуру SQ(x: integer), найти среди чисел a, b, c такие, которые можно представить в виде суммы квадратов двух натуральных чисел.
-
Составить программу, которая для двух целых чисел находит наибольший общий делитель.
-
Составить программу, которая проверяет, являются ли два введенных числа простыми.
-
Составить программу, позволяющую преобразовать массивы А и В следующим образом: из каждого элемента массива вычитается максимальный элемент этого массива.
-
Транспонировать матрицы A и B размера M*N.
-
Найти среднее арифметическое массивов X и Y с N элементами каждый.
-
Составить процедуру, позволяющую преобразовать массивы А и В следующим образом: каждый элемент массива возводится в квадрат.
-
Используя процедуру вычисления факториала, составить программу для вычисления
-
Используя процедуру, напечатать делители числа M, вводимого с клавиатуры. Реализовать для произвольного количества чисел. Признак конца ввода — число 0.
-
Составить программу, позволяющую преобразовать массивы А и В следующим образом: из каждого элемента массива вычитается минимальный элемент соответствующего массива.
-
Используя процедуру, найти среди чисел 1,2,...,N такие, которые можно представить в виде суммы кубов двух натуральных чисел.
-
Используя процедуры умножения и сложения массивов, найти C = A*A + A*B , где A и В — квадратные матрицы размера mхm.
-
Составить программу для вычисления Z = (X1+Y1)/(X1*Y1)+X2*Y2, где X1, X2 — корни уравнения X2 - 4*X - 1 = 0; Y1, Y2 — корни уравнения 2*Y2 + A*Y - A2 = 0. Если корни не существуют, то выдавать соответствующее сообщение.
Лабораторная работа 10
ФУНКЦИИ
1. Цель работы: Изучить способы реализации функций.
Формат определения функции следующий:
[Private | Public ] Function <Имя функции> (список аргументов)
As <тип возвращаемого результата>
<тело функции>
<имя функции> = <возвращаемое значение>
В VB аргументы могут передаваться двумя способами:
-
как ссылки (ByRef). В этом случае подпрограмма получает физический адрес памяти передаваемой переменной.
-
как значение (ByVal). В этом случае вызванная подпрограмма получает копию значения
Различие состоит в том, что при передаче аргумента как ссылки можно изменять значения этого аргумента.
Функции в отличие от процедур имеют результат – возвращаемое значение. Возвращаемое значение необходимо присваивать идентификатору, соответствующему имени функции.
Например, функция, вычисляющая сумму массива имеет вид:
Function Sum(ByRef m() As Single) As Single
Dim S As Single
S=0
For i=LBound(m) To UBound(m)
S=S+m(i)
Next i
Sum = S
End Sub
2. Задание. Разработать программу с функцией.
3. Варианты индивидуальных заданий.
-
Составить программу для нахождения суммы элементов каждого из трех массивов, введенных с клавиатуры, определив функцию, выполняющую это действие, и передавая массивы в качестве параметра.
-
Составить программу перевода двоичной записи натурального числа в десятичную, описав соответствующую функцию с параметром. Числа вводятся с клавиатуры.
-
Даны числа S, T. Получить с использованием функции пользователя с параметрами значение выражения G(1,sin(S))+2G(T*S,24)-G(5,-S), где G(A,B)=(2A+B*B)/(A*B*2+B*5).
-
Составить программу для расчета значений гипотенузы треугольника, определив функцию, выполняющую этот расчет.
-
Найти периметр выпуклого десятиугольника, координаты вершин которого заданы.
-
Найти площадь выпуклого шестиугольника, координаты вершин которого заданы.
-
Составить программу вывода на экран всех натуральных чисел, не превосходящих N и делящихся на каждую из своих цифр.
-
Используя функцию, составить программу для нахождения максимального из трех чисел.
-
Используя функцию, составить программу для печати знаков трех чисел, введенных с клавиатуры.
-
Используя функцию, составить программу для возведения вводимых с клавиатуры чисел в целую положительную степень.
-
Используя функцию, составить программу для вычисления функции Z=(X1+Y1)/(X1*Y1), где X1 — первый корень уравнения X2-4*X-1=0; Y1 — первый корень уравнения 2*Y2 + A*Y - A2 = 0 (А — произвольное число).
-
Используя функцию, вывести на печать среднее арифметическое элементов массива, введенного с клавиатуры.
-
Задав функцию, рассчитать и вывести на печать максимальные значения в трех парах чисел, вводимых с клавиатуры. Пара чисел передается функции в качестве параметра.
-
Даны четыре пары чисел. Получить с использованием функции пользователя наибольший общий делитель для каждой пары.
-
Даны числа х = 1, 2,..., N. Получить с использованием функции пользователя значения 3*P(X+3)*P(X) для заданных х, где
P(X) = 10*X3 - 14*X2 + 12*X - 2.
-
Используя функцию, составить программу для расчета значений катета треугольника, определив функцию, выполняющую этот расчет.
-
Даны целые числа a, b, c, d. Написать функцию проверки числа на четность. Очередное число для проверки передается в функцию в качестве параметра.
-
Даны числа S и T. Получить с использованием функции пользователя Y(T,S)=G(12,S)+G(T,S)-G(2S-1,S*T),
где G(A,B)=(2*A+B*B)/(A*B*2+B*5).
-
Напишите функцию, определяющую, какой целой степенью числа 2 является ее аргумент (если число не является степенью двойки - выдать соответствующее сообщение).
-
Используя функцию, напишите программу, подсчитывающую сумму N первых элементов целочисленного массива А.
-
Вычислить количество простых чисел, не превосходящих заданного числа N. Для этого использовать функцию, возвращающую значение true, если аргумент — простое число и false в противном случае.
-
Используя функцию, составить программу для вычисления значения функции F(X,Y) = (2X3-4*X2+X+1)/(9*Y3+Y+4) + 3*Y2+5*Y.
-
Ввести значения переменных S и T. Получить с использованием функции G(12, S)+G(T, S)-G(2S-1, S*T) ,
где G(A, B) = (2*A+B*B)/(A*B*2+B*5).
4. Вопросы, требующие изучения, перед выполнением задания
1. Назначение функций.
2. Правила декларации заголовка функции и реализации ее тела.
3. Возможный тип результата функции.
4. Отличие процедуры от функции.
5. Способ передачи массива в функцию.