Способы передачи параметров подпрограммы
В стандарте языка Паскаль передача параметров может производиться двумя способами — по значению и по ссылке. Параметры, передаваемые по значению, называют параметрами-значениями, передаваемые по ссылке — параметрами-переменными. Последние отличаются тем, что в заголовке процедуры (функции) перед ними ставится служебное слово var.
При первом способе (передача по значению) значения фактических параметров копируются в соответствующие формальные параметры. При изменении этих значений в ходе выполнения процедуры (функции) исходные данные (фактические параметры) измениться не могут. Поэтому таким способом передают данные только из вызывающего блока в подпрограмму (т.е. входные параметры). При этом в качестве фактических параметров можно использовать и константы, и переменные, и выражения.
При втором способе (передача по ссылке) все изменения, происходящие в теле процедуры (функции) с формальными параметрами, приводят к немедленным аналогичным изменениям соответствующих им фактических параметров. Изменения происходят с переменными вызывающего блока, поэтому по ссылке передаются выходные параметры. При вызове соответствующие им фактические параметры могут быть только переменными.
Выбор способа передачи параметров при создании процедуры (функции) происходит в соответствии со сказанным выше: входные параметры нужно передавать по значению, а выходные — по ссылке. Практически это сводится к расстановке в заголовке процедуры (функции) описателя var при всех параметрах, которые обозначают результат работы подпрограммы. Однако, в связи с тем, что функция возвращает только один результат, в ее заголовке использовать параметры-переменные не рекомендуется.
Локальные и глобальные идентификаторы
Использование процедур и функций в Паскале тесно связано с некоторыми особенностями работы с идентификаторами (именами) в программе. В часности, не все имена всегда доступны для использования. Доступ к идентификатору в конкретный момент времени определяется тем, в каком блоке он описан.
Имена, описанные в заголовке или разделе описаний процедуры или функции называют локальными для этого блока. Имена, описанные в блоке, соответствующем всей программе, называют глобальными. Следует помнить, что формальные параметры прцедур и функций всегда являются локальными переменными для соответствующих блоков.
Основные правила работы с глобальными и локальными именами можно сформулировать так:
- Локальные имена доступны (считаются известными, «видимыми») только внутри того блока, где они описаны. Сам этот блок, и все другие, вложенные в него, называют областью видимости для этих локальных имен.
- Имена, описанные в одном блоке, могут совпадать с именами из других, как содержащих данный блок, так и вложенных в него. Это объясняется тем, что переменные, описанные в разных блоках (даже если они имеют одинаковые имена), хранятся в разных областях оперативной памяти.
Глобальные имена хранятся в области памяти, называемой сегментом данных (статическим сегментом) программы. Они создаются на этапе компиляции и действительны на все время работы программы.
В отличие от них, локальные переменные хранятся в специальной области памяти, которая называется стек. Они являются временными, так как создаются в момент входа в подпрограмму и уничтожаются при выходе из нее.
Имя, описанное в блоке, «закрывает» совпадающие с ним имена из блоков, содержащие данный. Это означает, что если в двух блоках, один из которых содержится внутри другого, есть переменные с одинаковыми именами, то после входа во вложенный блок работа будет идти с локальной для данного блока переменной. Пременная с тем же имнем, описанная в объемлющем блоке, становится временно недоступной и это продолжается до момента выхода из вложенного блока.
Рекомендуется все имена, которые имеют в подпрограммах чисто внутреннее, вспомогательное назначение, делать локальными. Это предохраняет от изменений глобальные объекты с такими же именами.
Волгоградский государственный педагогический университет
Кафедра алгебры, геометрии и информатики
Источник
Способы передачи параметров в подпрограммы
Существует два способа передачи параметров. Первый способ — передача по значению . Смысл этого способа в том, что мы передаём подпрограмме конкретное значение — число, текст, логическое значение и т.д. Подпрограмма каким-либо образом использует это значение. При этом, из внешней программы передавать эти параметры можно было как явным указанием значения (например, указав число прямо в коде программы), так и передавая переменную или константу — использовалось соответствующее значение переменной / константы. Но такой способ не всегда удобен. Более того, в случае, если подпрограмма должна вычислить сразу несколько значений, этот способ не принесёт успеха. Именно поэтому существует другой способ передачи параметров — передача по ссылке. Смысл этого способа в том, что мы передаём не конкретное значение, а ячейку памяти, т.е. переменную. В чём же отличие? А отличие в том, что подпрограмма уже может работать с этой переменной, т.е. не только получать её значение, но и это значение менять! Получается, что мы берём переменную из основной программы, «отдаём» её подпрограмме, та, в свою очередь, производит какие-то манипуляции с ней, и в результате наша переменная получает новое значение и мы можем далее её использовать. Несложно догадаться, что такой подход позволит подпрограмме отдавать сразу несколько значений (причём не обязательно одного типа).Для передачи по значению никаких изменений в подпрограмму вносить не нужно — это способ передачи по умолчанию. А вот для передачи по ссылке нужно всего лишь в описании подпрограммы добавить слово var перед нужными параметрами.
procedure Proc(a: Integer); //Передача по значению procedure Proc(var a: Integer); //Передача по ссылке
Как нетрудно догадаться, если в процедуре требуется передача по ссылке, соответствующий параметр непременно должен быть переменной. Фиксированного значения там быть не должно. Ошибиться здесь трудно — программа просто не скомпилируется, если вместо переменной будет конкретное значение. Примерами функций с передачей по ссылке являются широкоизвестные Inc() и Dec(). Вспомните — ведь не нужно писать a:=Inc(a); — достаточно просто Inc(a).
Билет№24.Интуитивное понятие алгоритма. Его свойства. Формы записи алгоритма. Алгоритмы с линейной, разветвленной и циклической структурой.
Алгоритм — это определенная последовательность логических действий для решения поставленной задачи. Алгоритм – это конечный набор правил, который определяет последовательность операций для решения конкретного множества задач и обладает пятью важными чертами:конечность, определенность, ввод, вывод, эффективность. Алгоритм-точный набор инструкций, описывающих порядок действий исполнителя, для достижения результата решения задачи на конкретное время. Обычно, в качестве исполнителя выступает некоторый механизм(компьютер, станок).Алгоритм является математической абстракцией программы. Метод абстракции применяется для исследования сложных объектов. Входные и выходные данные. Для каждого алгоритма есть некоторые множества объектов, допустимых в качестве входных и выходных данных. Алгоритмизация-процесс систематического составления алгоритмов для решения поставленных прикладных задач. Формальные признаки алгоритма.1)дискретность-алгоритм разбивается на конечное число элементарных шагов.2)понятность-каждое действие является понятным исполнительно (одно действие на каждом шаге).3)детерминированность-каждое действие понимается в строго определенном смысле.4)массивность-по данному алгоритму должна решаться не одна, а целый класс подобных задач.)результативность-алгоритм в процессе выполнения должен приводить к определенному результату за конечное число действий. Отрицательный результат также является результатом. Свойства алгоритма.1)вход-массив вещественных чисел.2)выход-вещественное число. Формы записи алгоритма. Алгоритм, составленный для некоторого исполнителя, можно представить различными способами: графического и словесного описания, в виде таблицы, последовательностью формул, записанным на алгоритмическом языке (язык программирования). Термины алгоритмический язык и язык программирования часто используют как синонимы. При использовании этих языков запись алгоритма совершенно формальна Чтобы выполнить вычислительный алгоритм на компьютере, его записывают на языке программирования. Для подготовки алгоритма, записанного на языке программирования, к выполнению, применяют автоматические средства. Отдельная инструкция языка программирования называется оператором. Программа — это упорядоченная последовательность операторов. Способ отделения операторов друг от друга определяется правилами языка. Запись операторов в языках программирования обычно производится с помощью ключевых слов, хотя некоторые операторы их не требуют. Линейный алгоритм— это такой, в котором все операции выполняются последовательно одна за другой. Схема представляет собой последовательность блоков, соединенных линиями потоков. Схема представляет собой последовательность блоков, соединенных линиями потоков. Направление потока задается стрелкой, но стрелка не ставится, если направление потока сверху вниз и слева направо. В левом верхнем углу в разрыве линий ставится номер блока. Внутри блока ввода записывается слово “Ввод” и перечисляются исходные данные (имена переменных), которые задаются извне. Внутри блока вывода записывается слово “Вывод” и перечисляются переменные, которые являются результатом расчета. Алгоритмы разветвленной структуры применяются, когда в зависимости от некоторого условия необходимо выполнить либо одно, либо другое действие. Ветвление – такая схема, в которой предусмотрено разветвление указанной последовательности действий на два направления в зависимости от итога проверки заданного условия. В схемах такой структуры используется логический блок. Алгоритмы, отдельные действия в которых многократно повторяются, называются алгоритмами циклической структуры (повторение). Совокупность действий алгоритма, связанную с повторением, называют циклом. Блоки 3, 4, образующие тело цикла, повторяются многократно. Бесконечное количество раз
Билет№25 Языки программирования низкого и высокого уровня. Понятие трансляции, компиляции и интерпритации.
Язык программирования-формальная знаковая система, предназначенная для записи программ. Язык программирования определяется синтаксисом(построение языковых конструкций) и семантикой(приписывание действий языковым конструктором). Виды: декларативное-программа описывает нечто, а не реализует алгоритм. Процедурное(императивное)-описывается не задача, а процесс от решения, на каждом шаге решеия состояния характеризуется набором значения переменных.пример:паскаль,С,Fortan?Basic. Низкоуровневый язык программирования— язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, Java, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Иногда одно мнемоническое обозначение соответствует целой группе машинных команд, выполняющих одинаковое действие над разными ячейками памяти процессора. Кроме машинных команд языки программирования низкого уровня могут предоставлять дополнительные возможности, такие как макроопределения (макросы). Как правило, использует особенности конкретного семейства процессоров. Общеизвестный пример низкоуровнего языка — язык ассемблера, хотя правильнее говорить о группе языков ассемблера. Более того, для одного и того же процессора существует несколько видов языка ассемблера. Они совпадают в машинных командах, но различаются набором дополнительных функций (директив и макросов). Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и удобства использования программистом. Основная черта высокоуровневых языков — это абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания. Так, высокоуровневые языки стремятся не только облегчить решение сложных программных задач, но и упростить портирование программного обеспечения. Использование разнообразных трансляторов и интерпретаторов обеспечивает связь программ, написанных при помощи языков высокого уровня, с различными операционными системами и оборудованием, в то время как их исходный код остаётся, в идеале, неизменным. Такого рода оторванность высокоуровневых языков от аппаратной реализации компьютера помимо множества плюсов имеет и минусы. В частности, она не позволяет создавать простые и точные инструкции к используемому оборудованию. Программы, написанные на языках высокого уровня, проще для понимания программистом, но менее эффективны, чем их аналоги, создаваемые при помощи низкоуровневых языков. Одним из следствий этого стало добавление поддержки того или иного языка низкого уровня (язык ассемблера) в ряд современных профессиональных высокоуровневых языков программирования. Компилятор — это программа, обеспечивающая перевод с алгоритмического языка высокого уровня на машинный без одновременного выполнения получаемой программы. Компиляция – перевод исходного текста программы в набор инструкций процессора
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
Источник
Шпаргалки на экзамен / Способы передачи параметров в подпрограммах
Способы передачи параметров в подпрограммах (параметры-значения,параметры-переменные).
Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной, либо параметром-константой. Если параметры определяются как параметры-переменные, перед ними необходимо ставить зарезервированное слово VAR, например:
procedure p (var a : real); Здесь параметр а — параметр-переменная.
Заголовок процедуры может быть устроен так, что некоторые группы формальныхпараметров не содержат слова VAR. Например:
procedure p (a,b,c:real; var s:real);
Формальные параметры, которые входят в группы, не содержащие слова VAR,называются формальными параметрами-значениями.
Определение формального параметра тем или иным способом существенно толькодля вызывающей программы: если формальный параметр объявлен как параметр-переменная, то при вызове подпрограммы ему должен соответствовать фактический параметр в виде переменной определенного типа; если формальный параметр объявлен как параметр-значение, то при вызове ему может соответствовать произвольное выражение. Контроль за неукоснительным соблюдением этого правила осуществляет компилятором ТУРБО ПАСКАЛЯ.
Для того чтобы понять, в каких случаях использовать параметры значения, а вкаких — параметры-переменные, рассмотрим, как осуществляется замена формальных параметров на фактические в момент обращения к подпрограмме.
Если параметр определен как параметр-значение, то перед вызовомподпрограммы это значение вычисляется, полученный результат копируется во временную память и передается подпрограмме. Важно учесть, что даже если в качестве фактического параметра указано простейшее выражение в виде переменной или константы, все равно подпрограмме будет передана лишь копия переменной (константы). Таким образом, назначение параметра-значения – передача данных из программы в подпрограмму. Если же параметр определен как параметр-переменная, то при вызове подпрограммы передается сама переменная, а не ее копия. Любые возможные изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра, в то время как изменение параметра-переменной приводит к изменению самого фактического параметра в вызывающей программе. Параметр-константа схож с параметром-переменной: в подпрограмму передается сама константа, но изменение её невозможно. Назначение такого параметра совпадает с назначением параметра-значения. Формальные параметры-константы указываются в заголовке программы после служебного слова const. Его действие распространяется до ближайшей точки с запятой.
Источник