Главная » Просмотр файлов » Р.У. Себеста - Основные копцепции языков программирования (2001)

Р.У. Себеста - Основные копцепции языков программирования (2001) (1160794), страница 96

Файл №1160794 Р.У. Себеста - Основные копцепции языков программирования (2001) (Р.У. Себеста - Основные копцепции языков программирования (2001)) 96 страницаР.У. Себеста - Основные копцепции языков программирования (2001) (1160794) страница 962019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 96)

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

В описании языка Ада 83 указывается, что скалярные (неструктурированные) пара"ззры должны передаваться как копии, т.е. параметры, передаваемые с помощью метов ьа и оик, должны быть локальными переменными, которые инициализируются ко-; ячи значений соответствующих фалтических параметров. Копии простых параметров, -еэелаваемых с помощью методов оик и до оик, должны копироваться обратно в со-ветствуюший фактический параметр при завершении подпрограммы. Порядок получе-. я этих копий в случае, если их несколько, не определяется описанием языка.

Вычисле-: е параметров, передаваемых с помощью методов оик и дп оак, выполняется до не-сдачи управления в вызываемую подпрограмму. Допустим, что фактический параметр, -ередаваемый методом оие, имеет вид: -'.зрес этого параметра вычисляется в момент вызова. Если бы оказалось, что перемен-зя '.ЦЭЕХ является видимой в вызываемой подпрограмме и подпрограмма изменила ее, адрес параметра не изменился бы. При использовании формальных параметров, являющихся массивами или записями, : шатали средств реализации языка Ада 83 имеют выбор между передачей параметров по :-.ачению и результату и передачей по ссылке.

Не указывая метод реализации передачи ;-р) ктурированных параметров, разработчики языка Ада 83 создают одну неявную про.,ему. которая состоит в том, что два метода реализации в некоторых случаях могут при-сяги к разным результатам работы прсярамм. Это различие может возникнуть вследствие - зго. что метод передачи параметров по ссылке обеспечивает доступ к ячейке в вызываюей программе, и такой же доступ к этой ячейке обеспечивается.

если фактический пара"етр одовременно является вилимым как глобальная переменная. Таким образом, создаетя альтернативное имя. Если вместо передачи параметров по ссылке используе'гся передача -зраметров по значению и результату, такой двойной доступ невозможен. Кроме того, возникает следующая дополнительная проблема. Допустим, что подпро-",амма завершилась аварийно (возникла исключительная ситуация). В этом случае фак-ический параметр, передаваемый по значению и результату, не изменится.

в то время -зк при передаче параметров по ссылке соответствующий фактический параметр может ::зчениться до появления ошибки. Снова возникает различие между двумя методами сеализации передачи параметров. Программы на языке Аба 83, вычисляющие разные результаты в зависимости от того, ьзким именно образом реализован метод до оак. называются ошибочными (епопеоцз), Несмотря на такой ярлык, однако, не существует способа, с помощью которого компилятор мог бы находить ошибочное условие.

Таким образом, ошибка обычно обнаруживается, только когда пользователь переносит программу с одной реализации языка на другую и выясняет, что эта программа не дает больше того же самого результата. Философия разработки языка Ада 83 в этой ситуации состоит в том, что если программисты создают совмещение имен, то они сами должны бороться с потенциальными проблемами.

8.5. Методы передачи параметров Разработчики языка Аг(а 95 исключили из описания языка возможность выбора метода передачи структурированных параметров самим пользователем. Все структурированные параметры передаются по ссылке. 8.5.6. Многомерные массивы в качестве гзар аметров Функции отображения памяти, используемые для отображения индексных значений ссылок на элементы многомерных массивов в адреса памяти, обсуждались в главе 5. В некоторых языках, например, С и С++, при передаче многомерных массивов как параметров в подпрограмму компилятор должен быть способен построить отображающую функцию для этою массива прямо по тексту подпрограммы, поскольку подпрограммы могут компилироваться отдельно от программ, их вызывающих.

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

Это иллюстрируется следующей скелетной программой на языке С: чосгд Гцп (Спс тасгдх (] [10] ) [ чодс( тадп() ( дпк пас(5][10]г йип(вас]г Проблема, связанная с этим методом передачи матрицы как параметра, состоит в том, что такой способ передачи не позволяет программисту написать функцию, которая могла бы получать матрицу с разными количествами столбцов; лля каждой новой матрицы с другим количеством столбцов нужно писать новую функцию.

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

Тогда функция вычисляет функцию отображения памяти, определенную пользователем, на основе арифметики указателей каждый раз, когда нужно сослаться на элемент матрицы. Рассмотрим следующий прототип функции: чодс[ йцп(г1оац *пас рсг, Спе пот гона, Спс пот со1в)Г Для присвоения значения переменной х элементу [гон] (со1] матрицы, являющейся параметром функции лип, можно использовать следующий оператор: *(жаг ргг + (гон * пцп со1я) + со1) = х; Несмотря на то что этот оператор работает, он очевидно труден для восприятия и вследствие своей сложности подвержен ошибкам.

Трудность, связанную с чтением этого оператора, можно обойти, используя макрос лля определения функции отображения памяти, например: 366 Глово 8. Подпрограммы =.е=дпе маг ргг(г,с) (*(вас ргг + (( г ) * пцж со1в) + ( с ))) четом этого оператор, приведенный выше, можно переписать в виде; .— а= рсг(гон,со1) = хг В других языках проблема передачи многомерных массивов в качестве параметров эется иначе. Компиляторы языка Аг(а способны определять указанные размеры всех .;ивов, используемых как параметры, во время компиляции подпрограмм. В языке ' формальными параметрами могут быть неограниченные массивы.

Неограниченный . нв — это такой массив, в котором диапазон изменения инлексов в описании массива -: задается. Диапазоны изменения индексов должны содержаться в определениях пере:чных. представляющих собой неограниченные массивы. Подпрограмма, в которую -;: граниченный массив передается как фактический параметр, может получать инфорпю о диапазоне изменения индексов вместе с самим параметром. Рассмотрим сле- шие определения: "урв МАТК1Х ТУРЕ де аггау (1)(ТЕОЕК гапдв <>, 1МТЕОЕК саиде <>) оЕ ГЬОАТг ::А.К1Х 1 : МАТР1Х ТУРЕ(1..100, 1..20)) чкция, возвращающая сумму элементов массива типа ИАТК1Х ТУРЕ, привелена ниже: Ецпсцдоп ЯОИЕК(МАТ: дп МАТК1Х ТУРЕ) гвццгп ГЬОАТ 1е БОМ : ГЬОАТ := 0.0; Ьвддп Рог КОЬ) злз МАТ'гапде(1) 1оор Рог СОЬ з.п МАТ'саиде(2) 1оор ЯОМ := БОМ + ИАТ(КОМ,СОг); впс( 1оор; — бог СОЬ впс( 1оорз -Тог КОИ геццгп Я()МГ а БОМЕКг -'.=1ибут гапде возвращает диапазон изменения указанного индекса массива, являюше:;я фактическим параметром, при этом он действует независимо от размера или диапа: -ов изменения индексов этого параметра.

В версиях языка ГОКТКА)Ч, созданных до )990 года, эта проблема решается сле—,юшим образом. Формальные параметры, являющиеся массивами, должны иметь объ:зление после заголовка. В одномерных массивах индексы в таких объявлениях не игра- - - никакой роли. Однако лля многомерных массивов индексы в таких объявлениях по.:-. лают компилятору построить функцию отображения памяти. Рассмотрим слелуюший -гивер скелетной подпрограммы на языке РОКТКАМ: Г"ВКООТ1МЕ ЯОВ(ИАТК1Х, КОНЯ, СОЬЯ, КЕБОЬТ) 1ЫТЕОЕК КОЫЯ, СОЬЯ КЕАЬ ИАТК1Х(КОЫБ, СОЬЯ), КЕЯОЬТ ча превосходно работает, поскольку фактический параметр СОЬЯ имеет значение, ис- льзующееся как количество столбцов в определении передаваемой матрицы.

Если зссиа, поллежаший передаче. пока еше не заполнен полезными данными. чтобы опре- 367 3.5. Методы передачи параметров делить его размер. то в подпрограмму могут передаваться как определенные пользователем размеры массива, так и размеры его заполненной части. В таком случае определенные пользователем размеры используются в локальном объявлении массива, а размеры его заполненной части используются для управления вычислениями, в которых имеются ссылки на элементы массива.

Характеристики

Тип файла
DJVU-файл
Размер
9,5 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6417
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее