Шпаргалки на экзамен / Способы передачи параметров в подпрограммах
Способы передачи параметров в подпрограммах (параметры-значения,параметры-переменные).
Любой из формальных параметров подпрограммы может быть либо параметром-значением, либо параметром-переменной, либо параметром-константой. Если параметры определяются как параметры-переменные, перед ними необходимо ставить зарезервированное слово VAR, например:
procedure p (var a : real); Здесь параметр а — параметр-переменная.
Заголовок процедуры может быть устроен так, что некоторые группы формальныхпараметров не содержат слова VAR. Например:
procedure p (a,b,c:real; var s:real);
Формальные параметры, которые входят в группы, не содержащие слова VAR,называются формальными параметрами-значениями.
Определение формального параметра тем или иным способом существенно толькодля вызывающей программы: если формальный параметр объявлен как параметр-переменная, то при вызове подпрограммы ему должен соответствовать фактический параметр в виде переменной определенного типа; если формальный параметр объявлен как параметр-значение, то при вызове ему может соответствовать произвольное выражение. Контроль за неукоснительным соблюдением этого правила осуществляет компилятором ТУРБО ПАСКАЛЯ.
Для того чтобы понять, в каких случаях использовать параметры значения, а вкаких — параметры-переменные, рассмотрим, как осуществляется замена формальных параметров на фактические в момент обращения к подпрограмме.
Если параметр определен как параметр-значение, то перед вызовомподпрограммы это значение вычисляется, полученный результат копируется во временную память и передается подпрограмме. Важно учесть, что даже если в качестве фактического параметра указано простейшее выражение в виде переменной или константы, все равно подпрограмме будет передана лишь копия переменной (константы). Таким образом, назначение параметра-значения – передача данных из программы в подпрограмму. Если же параметр определен как параметр-переменная, то при вызове подпрограммы передается сама переменная, а не ее копия. Любые возможные изменения в подпрограмме параметра-значения никак не воспринимаются вызывающей программой, так как в этом случае изменяется копия фактического параметра, в то время как изменение параметра-переменной приводит к изменению самого фактического параметра в вызывающей программе. Параметр-константа схож с параметром-переменной: в подпрограмму передается сама константа, но изменение её невозможно. Назначение такого параметра совпадает с назначением параметра-значения. Формальные параметры-константы указываются в заголовке программы после служебного слова const. Его действие распространяется до ближайшей точки с запятой.
Источник
Способы передачи параметров в подпрограммы
Существует два способа передачи параметров. Первый способ — передача по значению . Смысл этого способа в том, что мы передаём подпрограмме конкретное значение — число, текст, логическое значение и т.д. Подпрограмма каким-либо образом использует это значение. При этом, из внешней программы передавать эти параметры можно было как явным указанием значения (например, указав число прямо в коде программы), так и передавая переменную или константу — использовалось соответствующее значение переменной / константы. Но такой способ не всегда удобен. Более того, в случае, если подпрограмма должна вычислить сразу несколько значений, этот способ не принесёт успеха. Именно поэтому существует другой способ передачи параметров — передача по ссылке. Смысл этого способа в том, что мы передаём не конкретное значение, а ячейку памяти, т.е. переменную. В чём же отличие? А отличие в том, что подпрограмма уже может работать с этой переменной, т.е. не только получать её значение, но и это значение менять! Получается, что мы берём переменную из основной программы, «отдаём» её подпрограмме, та, в свою очередь, производит какие-то манипуляции с ней, и в результате наша переменная получает новое значение и мы можем далее её использовать. Несложно догадаться, что такой подход позволит подпрограмме отдавать сразу несколько значений (причём не обязательно одного типа).Для передачи по значению никаких изменений в подпрограмму вносить не нужно — это способ передачи по умолчанию. А вот для передачи по ссылке нужно всего лишь в описании подпрограммы добавить слово 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) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Иногда одно мнемоническое обозначение соответствует целой группе машинных команд, выполняющих одинаковое действие над разными ячейками памяти процессора. Кроме машинных команд языки программирования низкого уровня могут предоставлять дополнительные возможности, такие как макроопределения (макросы). Как правило, использует особенности конкретного семейства процессоров. Общеизвестный пример низкоуровнего языка — язык ассемблера, хотя правильнее говорить о группе языков ассемблера. Более того, для одного и того же процессора существует несколько видов языка ассемблера. Они совпадают в машинных командах, но различаются набором дополнительных функций (директив и макросов). Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и удобства использования программистом. Основная черта высокоуровневых языков — это абстракция, то есть введение смысловых конструкций, кратко описывающих такие структуры данных и операции над ними, описания которых на машинном коде (или другом низкоуровневом языке программирования) очень длинны и сложны для понимания. Так, высокоуровневые языки стремятся не только облегчить решение сложных программных задач, но и упростить портирование программного обеспечения. Использование разнообразных трансляторов и интерпретаторов обеспечивает связь программ, написанных при помощи языков высокого уровня, с различными операционными системами и оборудованием, в то время как их исходный код остаётся, в идеале, неизменным. Такого рода оторванность высокоуровневых языков от аппаратной реализации компьютера помимо множества плюсов имеет и минусы. В частности, она не позволяет создавать простые и точные инструкции к используемому оборудованию. Программы, написанные на языках высокого уровня, проще для понимания программистом, но менее эффективны, чем их аналоги, создаваемые при помощи низкоуровневых языков. Одним из следствий этого стало добавление поддержки того или иного языка низкого уровня (язык ассемблера) в ряд современных профессиональных высокоуровневых языков программирования. Компилятор — это программа, обеспечивающая перевод с алгоритмического языка высокого уровня на машинный без одновременного выполнения получаемой программы. Компиляция – перевод исходного текста программы в набор инструкций процессора
Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет
Источник
Способы передачи параметров в подпрограммы
Существует два способа передачи параметров в подпрограммы – передача по значению и передача по наименованию. Способ передачи указывается при объявлении параметра в списке формальных параметров.
По умолчанию предполагается, что параметры обычных типов, например, Real, Integer, String, передаются по значению, а параметры таких типов как визуальные компоненты, динамические массивы передаются по наименованию. Если возникает необходимость явно указать, что параметр передается по наименованию, то перед именем параметра, или перечнем имен одного типа, пишется слово var.
3.1.2.1 Передача параметров по значению
Передача параметров по значению предполагает, что при вызове подпрограммы в памяти будет выделена специальная область для записи копий значений фактических параметров, с которыми и будет работать подпрограмма.
Такой способ передачи защищает переменные, передаваемые в подпрограмму в качестве параметров, от непредусмотренного изменения, так как подпрограмма работает с копиями. Кроме того, такой способ позволяет в качестве фактических параметров задавать выражения. При передаче параметров будет вычислено значение этого выражения и передано в подпрограмму.
Недостаток такого способа передачи состоит в том, что при передаче параметров, требующих много памяти, например, большие массивы чисел или длинные строки, копии занимают много места в памяти и требуется много времени для пересылки данных из одного места памяти в другое.
3.1.2.2 Передача параметров по наименованию
При передаче параметров по наименованию в подпрограмму передаются адреса фактических параметров. Поэтому такой способ передачи называется еще передачей параметров по адресу или по ссылке.
При таком способе передачи в качестве фактических параметров можно передавать только переменные. Выражение и даже отдельное число или символ передать по наименованию нельзя.
Передача параметров по наименованию экономит память и сокращает время обращения к подпрограммам. Однако это имеет и побочный эффект. Так как подпрограмма работает непосредственно с фактическими параметрами, то любое изменение формального параметра является изменением фактического параметра. Для исключения такого эффекта нужно в объявлении формальных параметров вместо слова var использовать слово const.
Но побочный эффект имеет и положительную сторону. Передачу параметров по наименованию можно использовать для возвращения результатов работы подпрограммы через фактические параметры. Такой способ возвращения особенно эффективен, когда требуется вернуть несколько параметров. Ведь функция возвращает только одно значение.
Выше, в пункте 3.1.1 уже рассматривался пример процедуры с передачей параметра по наименованию.
Рассмотрим еще один пример использования передачи параметров по наименованию для возвращения результатов работы подпрограммы.
В создаваемом ниже приложении для расчетов по формуле используется процедура считывания коэффициентов уравнения. Исходный текст этой процедуры приведен ниже.
ProceduregetKoef (var kA, kB, kC:Real);
В этой процедуре содержимое текстовых полей преобразуется в вещественные числа, и результаты преобразования присваиваются формальным параметрам, которые объявлены как передаваемые по наименованию. На это указывает слово varперед именами параметров.
Обращение к этой процедуре происходит в другой процедуре, которая обрабатывает событие onClick кнопки «Расчет по формуле». Фрагмент этой процедуры приведен ниже.
До вызова процедуры значения переменных a, b, c были неопределенными (мусор). При вызове процедуры getKoef адреса этих переменных были переданы в качестве фактических параметров. При выполнении процедуры, по этим адресам были записаны результаты преобразования данных. В результате, после окончания работы процедуры getKoef переменные a, b, c приобрели новые значения, которые были вычислены в процедуре
procedure TfrmSubroutine.btnCalculateRootsClick(Sender: TObject);
// До вызова процедуры getKoefKvUr
// значения переменных a,b,c не определены
//После вызова процедуры значения переменных
// a,b,c соответствуют содержиммому тектовых полей
Передача параметров в функцию по значению. Параметры функции. Передача аргументов в функцию. #34
Источник