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