Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на ЯП.docx
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
661.54 Кб
Скачать

Позиционное сопоставление

• Соответствие устанавливаются на основе их позиций в списках фактических и формальных параметров - два параметра, которые занимают одинаковые позиции списках, образуют пару.

• Обычно количество формальных и фактических параметров должны обладать, чтобы соответствие между ними было взаимно однозначным.

• Питон, Ruby, php, с++ формальные параметры могут иметь значения по умолчанию.

• Используется если формальному параметру не передается никакого фактического параметра.

Питон:

Def salary(hours, tax_freee=1, hour_rate)//tax_free задан

My_money=salary(120, hour_rate=10.0)//можно вызвать так

Сопоставление по имени

Можно явно указать, какой формальныйпараметр должен соответствовать данному фактическому параметру.

Недостаток - пользователь подпрограммы должен знать имена формальных параметров.

Питон:

Adder(size=the_size, #size, list, sum - формальные

List=the_list, #the size, the list, the sum – фактические ( конкретные значения)

Sum=the_sum)

Методы передачи параметров:

  1. Передача параметров по значению

• При передаче формальный параметр x подпрограммы p(x) получает значение фактического параметра.

X:=e; передать значение е, присвоить его х

Sq:=x*x выполнить тело функции

Return sq вернуть результат

- Любые изменения значения формального параметра, произошедшие во время выполнения подпрограммы, теряются, когда подпрограмма завершает свое выполнение.

• В паскале и с она рассматривается как основной метод передачи параметров.

  1. Передача параметров по ссылке

• Формальный параметр превращается в синоним места размещения фактического параметра. Т.е подпрограмме становится доступным указатель на местоположение этого объекта.

С++:

Void sw(int *px, int *py){

Int z;

Z= *px; *px=*py; *py=z}

Px=&a;передача адреса а в рх

Py=&b

Z=*px;присваивание z начального значения a

*px=*py; присваивание a Значения переменной b

*py =z; присваивание b начального значения a, сохраненного в z

+ Высокая эффективность как времени, так и памяти. Не надо копировать значения фактических параметров, а затем отдельно обновлять их.

- Доступ к обрабатываемым параметрам замедляется, поскольку используется косвенная адресация.

- Могут возникнуть неумышленные и ошибочные изменения фактических параметров.

- Появляется возможность возникновения псевдонимов (алиасов) фактических параметров. Псевдонимы снижают читабельность и надежность программ, а также усложняют их проверку.

  1. Передача параметров по значению-результату

• Фактические параметры, не имеющие места размещения, передаются по значению.

• Фактические параметры, имеющие место размещения обрабатываются так:

  1. Этап copy-in. Вычисляются значения и места размещения фактических параметров. Значения присваивают формальные параметры.

  2. Выполнение тела подпрограммы. Здесь обрабатываются формальные параметры.

  3. Этап cory-out. После выполнения тела подпрограммы конечные значения формальных параметров копируются обратно в места размещения, вычисленные на этапе 1.

+ Доступ к обрабатываемым в подпрограмме параметрам ускоряется, поскольку в косвенной адресации нет необходимости.

+ Безопасность хранения фактических параметров повышается, т.к канал связи с ними открывается перед началом обработки в режиме приема и после окончания обработки в режиме записи. Во время выполнения тела подпрограммы канал закрыт.

- Необходимость хранить параметры в нескольких местах и тратить время на копирование их значений и адресов.

- Сохраняется проблема псевдонимов.