Разработка brand book - брендбук. Брендбук от 75000 руб.
При вызове формальных параметров

При вызове формальных параметров по наименованию эти формальные параметры исчезают из тела процедуры, вместо них появляются соответствующие фактические параметры. Если эти фактические параметры — переменные или массивы, то они могут в результате выполнения процедуры получить новые значения.
Отсюда вытекает важное следствие — если некоторый формальный параметр представляет результат (или один из результатов) работы-процедуры, то такой параметр следует вызывать только по наименованию. Таковы параметр s процедуры ft, параметр s процедуры sigma и параметр а процедуры gauss.
Другой важный случай, требующий вызова параметров по наименованию, был продемонстрирован выше на примере процедуры sigma. Это случай, когда в качестве фактического параметра требуется задать выражение, зависящее от некоторой переменной, заданной в качестве другого фактического параметра. При изменении значения переменной должно меняться и значение выражения, поэтому оно должно вычисляться многократно. Этого можно достичь, только если и выражение и использованное в нем обозначение переменной войдут в состав тела процедуры при его выполнении. Для этого формальные параметры, соответствующие обоим фактическим параметрам (в случае процедуры sigma — параметры ui и 0, должны вызываться по наименованию.
В прочих случаях для процедуры и для обращающейся к ней программы безразлично, вызывается ли формальный параметр, выступающий в теле процедуры в роли простой переменной или идентификатора массива, значением или наименованием. Здесь следует руководствоваться соображениями экономии. При переводе описания процедуры на машинный язык вызов значением формальных параметров — переменных реализуется, как правило, экономнее, чем вызов по наименованию. Для такого формального параметра выделяется всего одна ячейка, в которую помещается значение соответствующего фактического параметра, вычисляемое один раз — в момент обращения к процедуре. Для формальных параметров — массивов, наоборот, проще и экономнее организуется вызов наименованием. Для этого достаточно передать процедуре (точнее — реализующему ее участку машинной программы) информацию о месте расположения в памяти массива — фактического параметра и о его размерах. При вызове массивов значением необходимо выделить участок памяти и разместить на нем копию массива — фактического параметра. Поэтому не рекомендуется без особой нужды вызывать параметры-массивы значением, а параметры-переменные — по наименованию.
Упражнение 1. Составить процедуру, вычисляющую произведение двух комплексных чисел, и с ее помощью — программу, которая находит п-ю степень (п :> 1) данного комплексного числа (комплексные числа задаются своими вещественными и мнимыми частями).