процедура цикла без параметров
Процедуры без параметров.
Дата добавления: 2015-01-16 ; просмотров: 3641 ; Нарушение авторских прав
Описание процедуры имеет вид:
procedure имя;
Begin
Процедура без параметров может реализовывать любой алгоритм. Все переменные, над которыми производят действия операторы процедуры, определяются в вызывающей программе, им присваиваются необходимые для выполнения процедуры значения.
Рассмотрим пример вычисления наименьшего общего кратного двух натуральных чисел НОК (X, Y), которое можно вычислить, используя наибольший общий делитель этих чисел, по формуле:
При составлении программы оформим как процедуру без параметров программу Р7 — вычисление НОД по алгоритму Евклида. Результат работы процедуры будет заносится в ячейку с именем М, переменная М описана как глобальный параметр и используется и главной программой, и процедурой. В программе будем вычислять НОК нескольких чисел, занеся их в массив С. Этот массив формируется в разделе констант главной программы. Если данные определяются в разделе констант, то они не требуют дополнительного описания в разделе переменных (var). Переменная Х сначала содержит значение первого числа, а затем ей присваивается результат — НОК двух первых чисел. Переменная Y имеет своим значением второе число из пары, для которой вычисляется наименьшее общее кратное. Таким образом, при каждом шаге цикла вычисляется НОК двух чисел, первое из которых Х содержит результат предыдущего шага.
Вызов процедуры НОД вычисления наибольшего общего делителя осуществляется только по имени: NOD;
Рассмотрим пример выполнения программы вычисления НОК нескольких чисел.
Х := НОК (X, Y) |
Y:=C[i] |
М := НОД (X, Y) |
Текст программы имеет вид:
program Р21;
var x, y, i, m:integer;
procedure NOD;
vara, b:integer;
Begin
while а <> b do
ifa > bthen a: = a — b
else b: = b — a;
begin
fori: = 2to5 do
Begin
write (‘ НОК = ‘, x)
Процедуры с параметрами. Для удобства передачи данных в процедуру и получения из нее результата используютсяформальные и фактические параметры. Формальные — условные обозначения в описании процедуры — описываются в ее заголовке, фактические — с которыми требуется выполнить процедуру — перечисляются при вызове процедуры, формальные и фактические параметры должны соответствовать по количеству, типу и порядку следования. Формальные параметры описываются только в заголовке процедуры и больше нигде. Их описание похоже на описание данных в разделе переменных и может также содержать словоvar. Словоvar в заголовке процедуры ставится перед теми параметрами, имена которых соответствуют выходным данным. Фактические параметры, соответствующие формальным, перед которыми стоит словоvar, могут быть только именами переменных. Перед именами формальных переменных, являющимися входными данными процедуры, словоvar указывать не обязательно. Если перед формальным параметром в заголовке процедуры нет словаvar, то ему может соответствовать формальный параметр, имеющий вид выражения соответствующего типа. Если для входных данных процедуры при описании формальных параметров указано словоvar, то им также соответствуют фактические параметры — имена переменных.
Например, процедураNOD с параметрами может иметь заголовок:
procedure NOD (a, b: integer; var k: integer);
Вызов этой процедуры:NOD (x, у, m);
или:NOD (36, 54, m);
Переменные в заголовке процедуры — формальные параметры, заменяемые при выполнении процедуры на конкретные значения переменных х и у или числа 36 и 54. В заголовке процедуры NOD описаны формальные параметры: a и b — входные данные, для которых находится наибольший общий делитель; k — результат работы процедуры. При вызове процедуры переменная а примет значение x, а переменная b — значение у. Результат работы процедуры при вызове попадет в ячейку с именем т, которой соответствует формальный параметр k.
Программа при использовании процедуры с параметрами примет вид:
program Р22;
varx, у, i, m:integer;
procedureNOD (a, b: integer; vark :integer);
while a <> b do
begin
fori: = 2 to5do
Begin
write (‘ НОК = ‘, х)
Например. Найдем с помощью процедуры среднее арифметическое, наибольший и наименьший элементы массива.
program Р23;
constn = 10;
varY: R; A, B, C:real;i:integer;
procedureStat (X : R; var S, min, max:real);
Begin
S: = 0; min: = x [1]; max: = x [1];
fori: = 1tondo
Begin
ifx [ i ] maxthenmax: = x [ i ]
begin
fori: = 1ton do
read(Y [ i ]);
writeln;
write(‘среднее = ‘, А, ‘наименьшее = ‘, В, ‘наибольшее = ‘,C);
В программе Р23 появился новый раздел описаний — раздел типов данныхtype. В этом разделе можно описать новый тип данных через уже известные типы, которые могут быть так же ранее описаны в данном разделе. Тип данных R — это массивы из n вещественных чисел, R — имя типа. В дальнейшем этот тип позволяет сократить описания, он используется в главной программе при описании исходного массива Y и в заголовке процедуры при описании формального параметра — массива X.
Главная программа состоит из трех основных этапов: 1) ввода данных — массива Y; 2) вызова процедурыStat с фактическими параметрами — массивом Y и получаемыми результатами, попадающими соответственно в ячейки А (среднее значение), В (наименьшее) и С (наибольшее); 3) печати результатов работы программы.
Подпрограмма, имеющая единственный результат, может быть оформлена, как функция. Описание функции имеет вид:
function имя_функции (описание входных данных):
тип_результата;
Begin
имя_функции: = результат;
После описания формальных параметров, которые являются аргументами функции, в заголовке указывается тип результата, т. е. тип самой функции. Это описание относится к имени функции, которому необходимо присвоить значение результата работы подпрограммы. Как и процедура, функция может содержать все четыре раздела описаний локальных переменных.
Имя функции нельзя использовать для промежуточных вычислений.
Функция вызывается с помощью указателя. Указатель — это имя функции, после которого в круглых скобках перечислены фактические параметры — аргументы функции. Указатель имеет вид:
имя_функции(список фактических параметров)
Указатель может появиться в выражении соответствующего типа, в условиях операторов if, while и repeat после словаuntil,а также в операторе печатиwrite. Примерами являются встроенные арифметические функции, такие, как sin(x):
write (sin(x));
Рассмотрим третий вариант программы вычисления наименьшего общего кратного. Поскольку наибольший общий делитель двух натуральных чисел — единственное число, то вычисляющую его подпрограмму можно оформить, как функцию. Программа имеет вид:
program Р24;
varx, у, i:integer;
functionNOD (a, b: integer): integer;
Begin
whilea bdo
NOD: = а
begin
fori: = 2to5 do
Процедура цикла без параметров
Процедуры и функции, написанные программистом, предназначены для оптимизации программ.
Основным их преимуществом является возможность многократного использования, более легкого и удобного тестирования и отладки независимо от других модулей.
В Паскале главная программа начинается с декларативной части, в которую, в частности, входят и описания всех процедур и функций. Обычно, в Паскале декларативная часть состоит из раздела определения констант, за которым следует раздел объявления переменных, а затем все процедуры и функции. Главное правило – любой объект должен быть описан до его первого использования.
Пример задачи: написать программу, которая определяет сумму квадратов n первых натуральных чисел. Сумма определяется в функции пользователя.
function powers (n: integer) : integer;
write (‘Сколько чисел нужно cложить?’);
writeln (‘сумма квадратов ‘,e,’ чисел’);
writeln (‘Число членов = ‘,e,’. Сумма = ‘,f);
Функции обычно применяются в расчетных задачах, когда необходимо выполнить ряд вычислений и передать их значения основной программе.
Первая строка описания функции называется заголовком. Она включает в себя имя функции, имя и тип каждого формального параметра, а также тип результата.
Например: function powers (n:integer):real;
Здесь имя функции – powers, у нее один формальный параметр – n, принадлежит типу integer. Функция возвращает результат типа integer.
За заголовком функции следует объявление локальных переменных подпрограммы.
Например: var i, sum:integer;
Локальные переменные, объявленные в подпрограмме, никак не связаны с объектами главной программы, даже если у них одинаковые имена.
За объявлениями, если они есть, следует пара ограничителей begin-end, окружающих набор предложений, составляющих саму функцию. При этом самым последним должно быть выполнено предложение, которым имени функции назначается некоторое значение, оно будет возвращено в главную программу.
Процедуры применяются, когда приходится решать задачи, в которых интересует не вычисление какого-то конкретного значения, а выполнение некоторой совокупности действий, например, отпечатать список чисел. Процедура обычно не возвращает в основную программу никакого значения. А если и передает данные, то только через глобальные переменные. Но существуют, так называемы, процедуры с параметрами, в которые (и даже из которых) можно передавать данные. В этой теме будут рассмотрены и примеры таких процедур. В Электронном задачнике даются задачи именно на такие процедуры.
Между функцией и процедурой имеется несколько различий. Наиболее существенное состоит в том, что функция всегда возвращает одно конкретное значение, тогда как процедура нет. Это различие отражается в особенности объявления процедур и функций.
Заголовок процедуры оформляется почти так же, как заголовок функции с той разницей, что в нем отсутствует указание о типе возвращаемого значения.
Пример: procedure test (a: real; var b: integer);
где test – заголовок процедуры, параметр – a типа real, параметр b типа integer.
Вызов процедуры из главной программы представляет собой просто имя процедуры со списком аргументов. Например: test (x,y). Процедуры вообще могут не иметь параметров.
Например, сумма n первых натуральных чисел:
program primer; // процедура без параметров
var a,k,sum : integer;
writeln(‘последовательное сложение натуральных чисел’);
write(‘сколько первых натуральных чисел сложить? ‘);
Пример решения задач из Электронного задачника:
Program Proc1; // процедура с параметрами
procedure powerA3(a:real;var b:real);
writeln(‘Вычисление 3-й степени числа:’);
writeln(3-я степень числа:’,c:2:1);
Program Proc3; // процедура с параметрами
procedure Mean(x,y:real;var AMean,GMean:real);
writeln(‘Введите числа a,b,c,d’);
program Proc16; // функция
writeln (‘sign(a)+sign(b) = ‘,sign(a)+sign(b));
program Proc17; // функция
if d=0 then RootsCount:=’один корень’;
if d>0 then RootsCount:=’два корня’;
writeln (‘введи коэффициенты квадратного уравнения a, b,c’);
Наберите и отладьте следующие программы, разберитесь в их работе:
1. Программа «Неповторяющиеся случайные числа» с использованием массива и процедуры без параметров.
q:array[1..15] of integer;
if a=b then continue;
if q[a]=q[b] then begin q[a]:=random(20); qw; end;
2. Проверка целого числа на четность (использование функции).
if (n mod 2)= 0 then Chet:=TRUE else Chet:=FALSE;
writeln(‘Введите целое число и нажмите Enter’);
writeln(‘Для завершения введите 100’);
3. Вычисление длины и площади окружности (использование процедуры с параметрами).
writeln(‘Вычисление длины окружности и площади круга:’);
write(‘Задайте радиус и нажмите Enter ‘);
writeln(‘Радиус окружности: ‘,t:3:1);
writeln(‘Длина окружности: ‘,l:3:1,’,площадь: ‘,s:3:1);
Выполните задания с Proc2 по Proc15 по электронному задачнику (стр.37) и с Proc18 по Proc22 по электронному задачнику (стр.39). Открыть его можно в режиме Помощь – Электронный задачник РТ.
Процедуры без параметров.
В практике программирования часто встречаются ситуации, когда во время выполнения программы приходится производить одни и те же вычисления или действия. Чтобы не набирать одинаковых записей и сделать программу проще и понятнее, можно выделить эти повторяющиеся фрагменты в отдельную часть программы, которая может быть использована многократно по мере необходимости. Такая автономная часть программы, реализующая определённый алгоритм и допускающая обращение к ней из различных частей программы, называется подпрограммой. При этом более сложная и громоздкая задача разбивается на ряд простых и маленьких задач, решение которых сводится к написанию подпрограмм, объединяемых, в конечном итоге, в одну программу. Написание больших программ можно разделить между несколькими программистами одновременно, объединив после этого подпрограммы, написанные ими, в одну программу.
Procedure ; Uses ; Label ;
Одесский колледж компьютерных технологий “СЕРВЕР”
Вызов процедуры без параметров осуществляется по имени данной процедуры в теле программы. Имя процедуры воспринимается как оператор. При выполнении этого оператора выполняется вся подпрограмма.
Допускается использование в одной программе сразу нескольких подпрограмм. Также допускается использование вложенных подпрограмм. То есть, каждая подпрограмма может содержать в себе описание других подпрограмм, которые являются таким образом подпрограммами подпрограмм. Эти подпрограммы, в свою очередь, тоже могут содержать описание своих подпрограмм и так далее. В результате общую структуру Pascal-программы можно изобразить в виде следующей схемы:
Схематически Pascal-программа, содержащая подпрограммы может выглядеть следующим образом:
Одесский колледж компьютерных технологий “СЕРВЕР”
Структура подпрограмм (блоков) Pascal-программ достаточно традиционна для многих языков и требует определённой дисциплины для доступа к объектам (например, переменным, константам, типам пользователя), описанным в различных блоках. Например, переменные, описанные в блоке B, известны (видимы), кроме самого блока B, ещё и в блоках D и E. Имена из блока C известны только в пределах блока С, имена из блока D известны только в пределах блока D, а имена из блока E известны только в пределах блока E. Наконец, имена переменных из самого внешнего блока A (то есть блока, соответствующего программе в целом) известны во всех вложенных блоках. Причём, если и в блоке A, и в блоке D описана переменная с именем x, то в блоке D переменная x, описанная в A, становится невидной.
Переменная, объявленная внутри подпрограммы, будет доступна только внутри этой подпрограммы. Такие переменные называются локальными переменными.
Кроме процедур без параметров, с которыми вы познакомились ранее, существуют процедуры с параметрами. Начинается описание заголовком
PROCEDURE имя (параметры);
где имя — то имя, которое программист решил дать своей функции; параметры — список переменных с указанием их типов.
Вслед за заголовком располагается тело процедуры, которое по структуре ничем не отличается от программы, но заканчивается не точкой, а точкой с запятой. Вот примеры заголовков процедур с параметрами:
PROCEDURE ALPHA (X: INTEGER; Y: REAL; Z: CHAR); PROCEDURE BETA (M: ARR);
В том месте программы, где нужно выполнить действия, предусмотренные в описании процедуры, ставят оператор процедуры:
Одесский колледж компьютерных технологий “СЕРВЕР”
Ранее мы познакомились со стандартными функциями Паскаля. Кроме них програм-мист может воспользоваться своими собственными функциями, предварительно описав их в программе. В отличие от процедур, функция должна быть определённого типа:
FUNCTION имя (параметры):тип;
тип — это тип значения, которое возвращает функция (типы в заголовке функции можно обозначать только именами).
Существенное отличие тела процедуры от тела функции состоит в том, что в теле функции обязательно должен присутствовать оператор присваивания, в левой части которого стоит имя функции, а в правой — выражение для возвращаемого значения.
После описания функции ее можно использовать в выражениях наряду со стандартными функциями. Аргументами при обращении могут быть любые выражения. Порядок следования и типы аргументов должны быть такими же, как у параметров в заголовке функции.
Процедуры и функции без параметров
Как процедуры, так и функции могут не иметь входных параметров. Если параметры отсутствуют то либо информация в процедуру не передается, либо передается через глобальные переменные.
При использовании глобальных переменных, обрабатывается информация, заданная в разделе “Var”, основной программы. В этом случае, процедура или функция используются всегда для обработки одних и тех же массивов. Обратиться к процедуре для обработки других массивов нельзя.
Пример, использования процедуру без параметров.
Представленная процедура обеспечивает выдачу справочной информации по кафедре «Математического обеспечения и технологий программирования».
Пример использования функции без параметров.
Имеется документ, содержащий информацию о реализованной продукции. Документ содержит следующие реквизиты.
Во-первых, «Шифр плательщика». Реквизит представлен в виде символьной строки длиной 10 символов;
Во-вторых, «Наименование изделия». Реквизит представлен в виде символьной строки длиной 20 символов;
В-третьих, «Дата оплаты». Реквизит представлен в виде символьной строки длиной 8 символов (два символа определяют день, два символа определяют месяц, четыре символа определяют год);
В-четвертых, «Количество оплаченных изделий». Реквизит представлен в виде числа, не имеющего дробной части;
В-пятых, «Цена изделия». Реквизит представлен в виде числа, имеющего дробную часть;
В-шестых, «Сумма оплаты». Реквизит представлен в виде числа, имеющего дробную часть.
Программный код, включает функцию, которая обеспечивает тестирование введенного документа на корректность занесения значения суммы. Значение суммы сравнивается на совпадение с произведением количества на цену. Функция не имеет входных параметров.
Объявление процедур и функций без параметров
I. Процедуры и функции
Объявление процедур и функций без параметров
Вызов процедуры без параметров осуществляется по имени данной процедуры в теле программы. Имя процедуры воспринимается как оператор. При выполнении этого оператора выполняется вся подпрограмма.
function MyCoolFunc: String;
begin
MyCoolFunc := ‘Hello, world!’;
end;
Правила определения функций без параметров (из процедуры без параметров): В процедуре определяется локальная переменная, в которой хранится вычисляемый в этой процедуре параметр. Эта переменная в процедуре заменяет соответствующую ей глобальную переменную. Слово Procedure заменяется словом Function. После имени функции вставляется двоеточие и тип возвращаемого значения. В конце тела функции необходимо присвоить имени функции значение локальной переменной, хранящей вычисленный параметр.
Определение процедуры, основные особенности работы
В заголовке процедуры определяются ее идентификатор и набор формальных параметров (если таковые есть).
Процедура вызывается с помощью процедурного оператора.
Заголовок процедуры сопровождается:
· разделом описаний, в котором объявляются локальные объекты
· операторами, находящимися между Begin и End, которые определяют, что должно быть выполнено при вызове процедуры.
procedure ( );
Определение функции, основные особенности работы
function ( ) : ;
Функция в Паскале — это подпрограмма, которая в отличие от процедуры всегда возвращает какое-либо значение. Для этого в теле функции её имени присваивается вычисленное значение — результат, который она возвращает.
Тип, который принимает вычисляемое значение, указывается в заголовке функции через двоеточие.
Вызывается функция в теле основной программы только если ее имя фигурирует в каком-либо выражении. В отличие от процедуры, которая вызывается отдельно.
Рассмотрим синтаксис:
var …; function название (параметры): тип результата; var…; begin … название:=результат; end; begin … end. |
Области видимости процедур и функций
Пример:
Program X;
Var
I,j:integer;
z:real;
Procedure x1(i:integer;);
Var
j:integer;
begin
End;
Begin
End;
Procedure x2;
Var
z:integer;
Procedure x3(z:string);
Begin
End;
Function y4(z:string):integer;
Begin
End;
Оформление исходного текста процедур и функций
Структурирование текста отступами («лесенка»). Правильно подобранные («мнемонические») имена пользовательских типов, процедур и функций, переменных, констант.
Все глобальные имена – пользовательские типы, процедуры и функции, глобальные переменные, глобальные константы, модули, имена программ, имена файлов и т.п. – обязательно должны быть достаточно длинными и осмысленными. Причем чем реже в программе используется имя, тем больше оно должно содержать символов. Локальные имена должны быть осмысленными. Существует ряд имен, использование которых общепринято: счетчики цикла – i, j, k …, сумма – s (или sum), координаты – x, y и т.п.
Комментарии следует писать: При объявлении пользовательских типов данных каждый тип поясняется отдельно. При объявлении глобальных переменных каждая переменная комментируется отдельно. При объявлении глобальных констант – по мере надобности. При определении процедур и функций – перед каждой процедурой и функцией. При этом указывается назначение подпрограммы, получаемые и возвращаемые значения, используемые глобальные переменные. «Нестандартные» локальные переменные – по мере надобности. Сложные места в программе – сложные алгоритмы или какие-то программистские хитрости
Явная и неявная рекурсия
Прямая или явная рекурсия характеризуется существованием в теле процедуры оператора обращения к самой себе.
Косвенная или неявная рекурсия образуется в случае цепочки вызовов других процедур, которые в конечном итоге приведут к вызову начальной.
Для описания на Паскале прямой рекурсии никаких дополнительных операторов не требуется. При описании неявной рекурсии возникает проблема: при определении первой из нескольких взаиморекурсивных процедур или функций возникает необходимость обращения к подпрограмме, которая еще не определена, что в Паскале недопустимо. В этом случае используется специальная директива Паскаля forward, которая позволяет выполнять предописание:
сначала задаются прототипы подпрограмм с параметрами, за которыми вместо тела подпрограммы следует forword;
затем описываются тела этих подпрограмм (причем параметры второй раз можно уже не описывать).
Типизированные константы
Типизированные константы представляют собой фактически переменные с начальным значением, которые инициализируются (принимают указанное в описании значение) при запуске программы.В отличие от значений локальных переменных, которые теряются при выходе из подпрограммы, типизированные константы сохраняют свои значения между вызовами подпрограммы.Это связано с тем, что типизированные константы размещаются в памяти так же, как и глобальные переменные программы. Локальные же переменные располагаются во временной области памяти, называемой стеком.
В Паскале типизированные константы задаются в разделе объявления констант следующим образом:
Здесь – идентификатор константы;
Типизированные константы могут быть любого типа, кроме файлов. Фактически они ничем не отличаются от переменных и могут использоваться в левой части оператора присваивания. Их нельзя использовать в качестве значения при объявлении других констант или границ типа-диапазона.
II. Файлы
III. Модули
Стандартные модули Паскаль
Пример стандартного модуля Паскаля
Uses printer;
Begin
Writeln(lst, ‘ Турбо Паскаль ‘);
End.
Модуль Паскаля CRT. В нем сосредоточены процедуры и функции, обеспечивающие управление текстовым режимом работы экрана. С его помощью можно перемещать курсор в любую точку экрана, менять цвет выводимых символов и фона, создавать окна. Кроме того, в данный модуль включены также процедуры «слепого» чтения клавиатуры и управления звуком.
IV. Указатели
Основные понятия, типы указателей, объявление
Рано или поздно каждый программист, работающий на Паскале, попадает в ситуацию, требующую использования указателей. Указатели требуется применять в следующих случаях:
* Если ваша программа работает с большими объемами данных (общий объем которых превышает 64К).
* Если ваша программа во время компиляция использует данные неизвестного размера.
* Если программа использует временные буферы данных.
* Если ваша программа работает с несколькими типами данных.
* Если ваша программа использует связанные списки данных или объектов.
Давайте подробнее рассмотрим каждую причину использования указателей.
Указатель представляет собой динамическую переменную, значение которого является адрес другой переменной, т.е. прямой адрес ячейки памяти.
Для описания используется символ ^.
Схема объявления указателя:
Нетипизированные указатели — указатели, базовый тип которых не фиксируется. Такие указатели задают только место (адрес оперативной памяти), без конкретизации типа значения, содержащегося по этому адресу.
Такие указатели определяются с помощью предопределенного идентификатора Pointer.
2. Способы задания значений переменных
Таким образом, чтобы использовать тот же пример SomeNumber, вы можете присвоить его адрес переменной-указателю:
Нетипизированные указатели в Паскале не используются, поскольку они очень ограничены. Они наиболее полезны, когда указываемый элемент будет изменяться, так как нетипизированный указатель совместим с любым другим указателем. Типизированные указатели значительно более полезны, и как вы узнаете в следующем разделе, они более надежны.
V. Объекты
1. ООП, основные понятия и определения
Объектно-ориентированное программирование – это методология программирования, которая основана на представлении программы в виде совокупности объектов, каждый из которых является реализацией определенного класса, а классы образуют иерархию на принципах наследуемости. В частности, программирование не основанное на иерархических отношениях, относится не к ООП, а к программированию на основе абстрактных типов данных. Можно сказать, что язык программирования является объектно- ориентированным тогда и только тогда, когда выполняются следующие условия:
• Имеется поддержка объектов в виде абстракции данных, имеющих интерфейсную часть в виде поименованных операций и защищенную область локальных данных.
• Объекты относятся к соответствующим типам (классам).
• Типы (классы) могут наследовать атрибуты от супертипов (суперклассов).
К базовым принципам объектно-ориентированного стиля программирования относятся:
пакетирование или инкапсуляция ;
Достоинства и недостатки
1. спользование более естественных с точки зрения обычной повседневной практики понятий, простота введения новых понятий;
2. упрощение разработки многократно используемых компонент приложений;
3. некоторое сокращение размера программ за счет того, что повторяющиеся (наследуемые) свойства и действия можно не описывать многократно; кроме того, использование динамических объектов позволяет более эффективно распределять оперативную память;
4. возможность создания библиотеки классов; в частности, библиотека визуальных компонент Delphi и является примером такой библиотеки;
5. сравнительно простая возможность внесения изменений в программу без изменения уже написанных частей, а в ряде случаев и без перекомпиляции этих написанных и уже скомпилированных частей, используя свойства наследования и полиморфизма;
6. возможность написания подпрограмм с различными наборами формальных параметров, но имеющих одно и то же имя;
7. более четкая локализация свойств и поведения объектов конкретного класса в одном месте (используется свойство инкапсуляции), позволяющая проще разбираться со структурой программы, отлаживать ее, находить ошибки;
8. возможность разделения доступа к различным объектам программы и т. д.
1. Умеренное быстродействие программы
2. Эффективна для больших программ
Наследование
Если объектный тип создается «на базе» другого существующего объекта, то имя родительского типа должно быть указано в скобках после слова object при описании потомка:
Как уже говорилось выше, такие объекты автоматически наследуют от родителя его поля и методы. Поля могут быть добавлены (но не переопределены), а методы переопределены и добавлены.
Теперь напишем реализацию методов:
Procedure TPoint.Init (InitX, InitY:Word; InitColor:Byte); begin X := InitX; Y := InitY; Clr := InitColor; Visib := False end;
Procedure TPoint.Init (InitX, InitY:Word; InitColor:Byte); begin inherited Init(InitX, InitY); Clr := InitColor; Visib := False end;
Procedure TPoint.Init (InitX, InitY:Word; InitColor:Byte); begin inherited Init(InitX, InitY); Clr := InitColor; Visib := False end;
Текст стал несколько короче. Это будет особенно заметно при дальнейшем наследовании. Вместо слова inherited можно указать имя объекта-родителя: TLocation.Init(InitX, InitY);
Function TPoint.GetColor : Byte; begin GetColor := Clr; end; Procedure TPoint.Show; begin Graph.PutPixel(X, Y, Clr); Visib := True end; Procedure TPoint.Hide; begin Graph.PutPixel(X, Y, Graph.GetBkColor); Visib := False end; Procedure TPoint.IsVisib : Boolean; begin IsVisib := Visib end; Procedure TPoint.ChangeColor(NewColor : Byte); begin Clr := NewColor; If IsVisib then Show end; Procedure TPoint.MoveTo(NewX, NewY : Word); Var Status : Boolean; begin Status := IsVisib; Hide; X := NewX; Y := NewY; If Status then Show end; Procedure TPoint.Done; begin Hide; Clr := Graph.GetBkColor end;
I. Процедуры и функции
Объявление процедур и функций без параметров
Вызов процедуры без параметров осуществляется по имени данной процедуры в теле программы. Имя процедуры воспринимается как оператор. При выполнении этого оператора выполняется вся подпрограмма.
function MyCoolFunc: String;
begin
MyCoolFunc := ‘Hello, world!’;
end;
Правила определения функций без параметров (из процедуры без параметров): В процедуре определяется локальная переменная, в которой хранится вычисляемый в этой процедуре параметр. Эта переменная в процедуре заменяет соответствующую ей глобальную переменную. Слово Procedure заменяется словом Function. После имени функции вставляется двоеточие и тип возвращаемого значения. В конце тела функции необходимо присвоить имени функции значение локальной переменной, хранящей вычисленный параметр.
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.