Оператор безусловного перехода
Помимо операторов условного перехода существует также оператор безусловного перехода goto. Формат:
goto метка;
Оператор goto переходит при выполнении программы к определенному оператору программы, перед которым находится метка. Метка должна быть описана в разделе описания меток той программы (процедуры или функции), в которой она используется. Нельзя перейти из одной процедуры или функции в другую. Необходимо, чтобы в программе существовал оператор, отмеченный указанной меткой. Она записывается перед оператором и отделяется от него двоеточием.
Пример: label 1; begin ... goto 1; ... 1: WriteLn('Переход к метке 1'); end.
Само понятие структурного программирования и общепринятый стиль программирования на структурных языках НЕ ПРИВЕТСТВУЕТ применение меток и операторов перехода в программах. Это затрудняет понимание программы, как автором, так и потребителями, кроме того, применение меток отрицательно сказывается на эффективности генерируемого кода. Операторы повторений В языке Турбо Паскаль имеются три оператора, позволяющих запрограммировать повторяющиеся фрагменты программ (циклы). Это операторы while, repeat, for. Оператор цикла while-do (цикл с предусловием) Общий вид записи:
While <условие> do begin <оператор 1>; ... < оператор n> End;
Запись означает «пока выполняется <условие>, делать». Инструкция while-do означает «пока выполняется <условие>, делать» и выполняется следующим образом: сначала проверяется условие. Если оно истинно, выполняются < оператор 1>...< оператор n> и так далее. Если же условие ложно, выполнение считается законченным, и программа переходит к обработке следующих команд. Таким образом, если условие с самого начала оказалось ложным, < оператор 1>...< оператор n> не будут выполнены ни разу. В цикле while-do <условие> - это условие выполнения цикла: пока оно истинно, программа из цикла не выйдет. В том случае, если внутри цикла стоит только один оператор, пара begin - end может отсутствовать, если операторов больше одного, то пара begin - end обязательна, так как иначе будет выполняться только один оператор, стоящий сразу после слова do.
Пример: Надо вычислить сумму S=1+1/2+1/3+...+1/50
VAR S: REAL; N:INTEGER; BEGIN S:=0; N:=1; WHILE N<=50 DO BEGIN S:=S+1/N; N:=N+1; END; WRITELN(' S=',S); END. Оператор цикла repeat-until (цикл с постусловием) Общий вид записи:
Repeat < оператор 1>; ... < оператор n> until <условие>;
Инструкция repeat-until означает «повторять до тех пор, пока не будет выполнено <условие>» и выполняется следующим образом : сначала выполняются < оператор 1>...< оператор n>. Затем проверяется условие. Если оно ложно, происходит возврат с выполнению <оператор 1>...<оператор n>. Если условие истинно, цикл считается выполненным и программа переходит к обработке следующих команд. Таким образом, в цикле repeat-until <условие> - это условие завершения цикла: цикл повторяется, пока оно ложно.
Пример: VAR S: REAL; N:INTEGER; BEGIN S:=0; N:=1; REPEAT S:=S+1/N; N:=N+1; UNTIL N>50; WRITELN(' S=',S); END. Оператор цикла for (цикл с параметром) Общий вид:
For I:=N1 toN2 do <простой или составной оператор>;
I - переменная цикла (параметр цикла), N1- начальное значение цикла, N2- конечное значение цикла, I,N1,N2 должны быть одного и того же типа, но не real. I принимает последовательные значения данного типа от N1 до N2. Если N1 и N2 - целые числа, а I - целая переменная, то шаг всегда равен единице. Инструкция for означает «для I, изменяющегося от N1 до N2 делать» и выполняется следующим образом: вначале вычисляется значение N1 и оно присваивается I. После этого циклически повторяется: - проверка условия I <=N2. Если условие не выполнено, оператор for завершает свою работу; - если условие I <=N2 выполнено, то исполняется конструкция «<простой или составной оператор>»; - наращивание переменной I на единицу.
Пример: VAR S: REAL; N:INTEGER; BEGIN S:=0; FOR I:=1 TO 50 DO S:=S+1/I; WRITELN(' S=',S); END.
Цикл по убывающим значениям параметра I от N2 до N1 имеет вид:
For I:=N2 downto N1 do <простой или составной оператор>;
Пример 1: For I:=20 downto 1 do A:=A+1; I изменяется от 20 до 1 с шагом -1. Массивы Массив – упорядоченный набор однотипных значений – компонент массива. Тип компонент называется базовым типом массива. В Паскале массив рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое, так и на любую из его компонент. Переменная с индексом – идентификатор компоненты массива. Формат записи:
<имя массива> [<индекс>],
где <индекс> может быть выражением порядкового типа. Описание массива определяет имя, размер массива и базовый тип. Формат описания в разделе переменных:
Var <имя массива> : array [<тип индекса>] of <базовый тип>
<тип индекса> – любой порядковый тип, кроме longint, чаще всего в качестве <типа индекса> используется интервальный целый тип. <базовый тип > – любой тип Турбо Паскаля.
Линейныйодномерный массив - массив, у которого элементы – простые переменные. В одномерных массивах хранятся значения линейных таблиц.
Примеры описания одномерных массивов:
Var B: array [0 . . 5] of real; R: array [1 . . 34] of char; N: array [‘A’ . . ‘Z’] of integer;
Ввод и вывод массива производится поэлементно. Обычно для этого используется цикл с параметром, где в качестве параметра применяется индексная переменная.
Пример 1. Заполнить случайными числами из диапазона [0, 1] вещественный линейный массив из N чисел. Найти максимальное значение и его индекс (первый, если таких значений несколько).
Решение. Поскольку размер массива в программе должен быть однозначно задан, определим N в разделе констант, например, N = 20. При изменении размера массива достаточно будет отредактировать в программе лишь описание константы N. Const N=20; Var X : array [1 .. N] of real; k: integer; Max : real; Kmax : integer; Begin For k:=1 to N do X[k] :=random; {заполнение случайными числами} Max :=X[1] ; Kmax := 1 ; {инициализация вычисляемых переменных} For k:= 2 to N do {поиск максимального значения} If X[k] > Max then begin max := X[k] ; Kmax := k end; Writeln (‘Первое максимальное значение: X[‘, Kmax, ’]=’, max) End.
В Турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа, например: Var А, B : array [1..5] of integer; …… A:=B; После этого присваивания все элементы массива А получат те же значения, что и в массиве В.
Так как <базовый тип > – любой тип Турбо Паскаля, то он может быть и другим массивом, например: Var B : array [1 . . 5] of array [1..10] of real; Такую запись можно заменить более компактной: Var B : array [1 . . 5, 1..10] of real; Число вложений ограничено только объемом памяти. В приведённом примере массив двухмерный. В двумерных массивах хранятся значения двумерных таблиц (матриц), состоящих из строк и столбцов. Пример описания двумерных массивов: Var a: array [1..5,1..2] of integer;
Пример 2. Дан массив из 5-ти строк и 2-х столбцов, содержащий элементы целого типа.Вычислить произведение отрицательных элементов.
Решение. Var a: array [1..5,1..2] of integer; i,j,P:integer; begin {Ввод элементов массива с клавиатуры} For i:=1 to 5 do For j:=1 to 2 do begin Write(‘Ведите a[‘,i,’,’,j,’]=‘); Readln(a[i,j]); end; {Печать элементов массива в виде таблицы} Writeln(‘ Массив a’); For i:=1 to 5 do begin For j:=1 to 2 do Write(a[i,j]:4); Writeln; end; {Вычисление произведения отрицательных элементов} P:=1; For i:=1 to 5 do For j:=1 to 2 do if a[i,j]<0 then P:=P*a[i,j]; Writeln(‘Произведения отрицательных элементов P=’, P); End. Подпрограммы Понятие подпрограммы Если часть программы используется более одного раза, то можно не повторять текст программы, а оформить эту часть программы в виде процедуры или функции. Они вызываются на исполнение каждый раз, когда нужно выполнить эту часть программы. При этом саму программу называют основной программой, а процедуру или функцию подпрограммой. Отличие функции от процедуры заключается в том, что функция вычисляет одно единственное значение простого, строкового или ссылочного типа. Если результатом работы подпрограммы не может быть единственное значение, то лучше использовать процедуру. Процедуры и функции являются самостоятельными фрагментами программы, связанными с основной программой лишь с помощью нескольких параметров. Структура подпрограммы повторяет структуру всей программы, но вместо заголовка программы содержит заголовок подпрограммы, который является обязательным. Формат заголовка:
FUNCTION <имя> [ (<список формальных параметров>) ] : <тип> ; PROCEDURE <имя> [ (<список формальных параметров>) ]
Здесь: <имя> - имя подпрограммы (правильный идентификатор); <тип> - тип возвращаемого функцией результата.
Например, FUNCTION F(a, b: Real): Real; PROCEDURE SB (a: Real; b: Integer; c: Char);
Переменные, описанные в основной программе, являются глобальными для подпрограмм. Все переменные из списка формальных параметров подпрограмм могут использоваться в любых выражениях внутри подпрограммы и являются локальными. Любой из формальных параметров подпрограммы может быть либо параметром–значением, либо параметром–переменной, либо, наконец, параметром–константой. Например, PROCEDURE MyProcedure (var a: Real; b: Real; const c: String);
Здесь А – параметр-переменная, В – параметр-значение, а С - параметр-константа.
Так как любое имя в программе обязательно описывается перед тем, как оно появится среди исполняемых операторов, то и подпрограмма должна быть предварительно определена в разделе описаний основной программы. Описанием (определением) основной программы является её собственный текст, который содержит заголовок и тело подпрограммы. Например, PROGRAM A; Var x,y: integer; PROCEDURE REV(a,b: integer); Begin Writeln(b:3, a:3); End; Упоминание имени подпрограммы в тексте основной программы приводит к активации подпрограммы и называется её вызовом. Сразу после активации подпрограммы начинают выполняться, входящие в неё операторы. После выполнения последнего из них управление возвращается обратно в основную программу и далее выполняются операторы, стоящие непосредственно за оператором вызова подпрограммы. Для вызова подпрограммы на исполнение используется оператор, который состоит из её имени и списка фактических параметров (если при определении подпрограммы был указан список формальных параметров). Например, Begin REV (x,y); REV (4,5*SQRT(x-y)); End. Каждый раз при вызове подпрограммы вычисляются фактические параметры, которые могут быть константами (4), переменными (x,y) или выражениями (5*Sqrt(y-x)). При вызове подпрограммы необходимо соблюдать следующее правило: количество, тип и порядок следования фактических параметров должен строго соответствовать количеству, типу и порядку следования соответствующих формальных параметров. Подпрограмма–функция В теле функции должен присутствовать хотя бы один оператор присваивания с идентификатором функции в левой части.
Пример1. Реализовать функцию с именем POWER, осуществляющую возведение любого вещественного числа в любую вещественную степень. Решение. .В программе вводится пара чисел X и Y и выводится на экран дисплея результат возведения X сначала в степень +Y, а затем – в степень –Y. Для выхода из программы нужно ввести Ctrl-Z и Enter.
Var X, y: Real; {-----------} Function Power (a, b : Real) : Real; Begin {Power} If a > 0 then Power := exp (b * ln(a)) Else if a < 0 then Power := exp (b * ln(abs(a))) Else if b = 0 then Power := 1 Else Power := 0 End {Power}; {--------------} Begin {main} Repeat Readln (x, y); Writeln (Power (x, y): 12:10, Power(x, -y):15:10); Until EOF End {main}.
Для вызова функции POWER мы просто указали ее в качестве параметра при обращении к встроенной процедуре WRITELN. Параметры X и Y в момент обращения к функции – это фактические параметры. Они подставляются вместо формальных параметров A и B в заголовке функции и затем над ними осуществляются нужные действия. Полученный результат присваивается идентификатору функции – именно он и будет возвращен как значение функции при выходе из нее. В программе функция POWER вызывается дважды сначала с параметрами X и Y, а затем X и –Y, поэтому будут получены два разных результата.
Популярное: Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (775)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |