Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

11 / тп / Prots_i_funktsii

.doc
Скачиваний:
30
Добавлен:
19.05.2015
Размер:
49.15 Кб
Скачать

Лабораторная работа 9

ПРОЦЕДУРЫ

Цель работы: Изучить способы реализации процедур.

  1. Краткие теоретические сведения

Алгоритм задачи проектируется путем декомпозиции всей задачи в отдельные подзадачи. Обычно подзадачи реализуются в виде подпрограмм.

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

Подпрограммы решают 4 важные задачи:

  1. Избавляет от необходимости многократно повторять в тексте программы аналогичные фрагменты.

  2. Улучшают структуру программы, облегчая ее понимание.

  3. Повышает устойчивость к ошибкам программирования.

  4. Позволяет использовать принцип программирования сверху вниз или снизу вверх.

Подпрограммы бывают двух видов: процедуры и функции.

Формат определения процедуры следующий:

[Private | Public] Sub <имя процедуры> (список аргументов)

<тело процедуры>

End Sub

В VB аргументы могут передаваться двумя способами:

  1. как ссылки (ByRef). В этом случае подпрограмма получает физический адрес памяти передаваемой переменной.

  2. как значение (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. Варианты индивидуальных заданий

  1. Упорядочить элементы массивов A и B в порядке возрастания. Массив передавать в качестве параметра-переменной процедуре Sort.

  2. Используя процедуру вычисления факториала, составить программу для вычисления .

  3. Составить программу для нахождения суммы элементов каждого из трех массивов, введенных с клавиатуры, определив процедуру.

  4. Составить программу, позволяющую преобразовать массивы А и В следующим образом: из каждого элемента массива вычитается среднее значение элементов этого массива.

  5. Используя процедуру SQ(x: integer), найти среди чисел a, b, c такие, которые можно представить в виде суммы квадратов двух натуральных чисел.

  6. Составить программу, которая для двух целых чисел находит наибольший общий делитель.

  7. Составить программу, которая проверяет, являются ли два введенных числа простыми.

  8. Составить программу, позволяющую преобразовать массивы А и В следующим образом: из каждого элемента массива вычитается максимальный элемент этого массива.

  9. Транспонировать матрицы A и B размера M*N.

  10.  Найти среднее арифметическое массивов X и Y с N элементами каждый.

  11.  Составить процедуру, позволяющую преобразовать массивы А и В следующим образом: каждый элемент массива возводится в квадрат.

  12.  Используя процедуру вычисления факториала, составить программу для вычисления

  13.  Используя процедуру, напечатать делители числа M, вводимого с клавиатуры. Реализовать для произвольного количества чисел. Признак конца ввода — число 0.

  14.  Составить программу, позволяющую преобразовать массивы А и В следующим образом: из каждого элемента массива вычитается минимальный элемент соответствующего массива.

  15.  Используя процедуру, найти среди чисел 1,2,...,N такие, которые можно представить в виде суммы кубов двух натуральных чисел.

  16.  Используя процедуры умножения и сложения массивов, найти C = A*A + A*B , где A и В — квадратные матрицы размера mхm.

  17. Составить программу для вычисления 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 аргументы могут передаваться двумя способами:

  1. как ссылки (ByRef). В этом случае подпрограмма получает физический адрес памяти передаваемой переменной.

  2. как значение (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. Варианты индивидуальных заданий.

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

  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).

  4. Составить программу для расчета значений гипотенузы треугольника, определив функцию, выполняющую этот расчет.

  5. Найти периметр выпуклого десятиугольника, координаты вершин которого заданы.

  6. Найти площадь выпуклого шестиугольника, координаты вершин которого заданы.

  7. Составить программу вывода на экран всех натуральных чисел, не превосходящих N и делящихся на каждую из своих цифр.

  8. Используя функцию, составить программу для нахождения максимального из трех чисел.

  9. Используя функцию, составить программу для печати знаков трех чисел, введенных с клавиатуры.

  10. Используя функцию, составить программу для возведения вводимых с клавиатуры чисел в целую положительную степень.

  11. Используя функцию, составить программу для вычисления функции Z=(X1+Y1)/(X1*Y1), где X1 — первый корень уравнения X2-4*X-1=0; Y1 — первый корень уравнения 2*Y2 + A*Y - A2 = 0 (А — произвольное число).

  12. Используя функцию, вывести на печать среднее арифметическое элементов массива, введенного с клавиатуры.

  13. Задав функцию, рассчитать и вывести на печать максимальные значения в трех парах чисел, вводимых с клавиатуры. Пара чисел передается функции в качестве параметра.

  14. Даны четыре пары чисел. Получить с использованием функции пользователя наибольший общий делитель для каждой пары.

  15. Даны числа х = 1, 2,..., N. Получить с использованием функции пользователя значения 3*P(X+3)*P(X) для заданных х, где

P(X) = 10*X3 - 14*X2 + 12*X - 2.

  1. Используя функцию, составить программу для расчета значений катета треугольника, определив функцию, выполняющую этот расчет.

  2. Даны целые числа a, b, c, d. Написать функцию проверки числа на четность. Очередное число для проверки передается в функцию в качестве параметра.

  3. Даны числа 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).

  1. Напишите функцию, определяющую, какой целой степенью числа 2 является ее аргумент (если число не является степенью двойки - выдать соответствующее сообщение).

  2. Используя функцию, напишите программу, подсчитывающую сумму N первых элементов целочисленного массива А.

  3. Вычислить количество простых чисел, не превосходящих заданного числа N. Для этого использовать функцию, возвращающую значение true, если аргумент — простое число и false в противном случае.

  4. Используя функцию, составить программу для вычисления значения функции F(X,Y) = (2X3-4*X2+X+1)/(9*Y3+Y+4) + 3*Y2+5*Y.

  5.  Ввести значения переменных 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. Способ передачи массива в функцию.

Соседние файлы в папке тп