metod_15.03.04_atppp_oaip_up_2016 (1016600), страница 8
Текст из файла (страница 8)
К= 15 ... 70; - целыйLit = ‘A’ ... ‘ z’ ; - символьныйSummer = Jun ... Aug ; - переменныйЕсли константы имеют стандартный типа можно делать непосредственнов разделе переменных.Пример. Var S1, S2: 1..100;Sim : ‘A’..’R’;Тип констант называется базовым. Над переменными ограниченного типаразрешается выполнять все операции, которые допустимы для данных егобазового типа.38Пример. Если переменная К принимает только целые значения 4,5,6,7,8,9, толучше дать описание: Var K: 4..9; чем Var K: Integer; И вот почему.
В случаевыхода ‘K’ за диапазон 4..9 в первом варианте (ограниченный тип) будетвыдано диагностическое сообщение об ошибке. Во втором варианте (целыйтип) может быть выдан неверный результат.Целый тип описания переменных рекомендуется использовать толькотогда , когда диапазон значения переменной либо заранее неизвестен, либозанимает весь допустимый в языке Паскаль диапазон для целого типа.Пример. ВычислитьW = a ln |x| при |x| <1W = A х 2 при |x| >=1Program usl;Var A,X,W : Real;Label : Error;BeginWriteln (‘ввести данные’);Write (‘A=’);Readln (A);Write (‘X=’);Readln (X);If Abs (X) <1 Then Writeln (‘W=’, A*ln (Abs(X)))Else If Sqr (X) >A Then begin Writeln (‘ошибка’);goto ErrorEnd.Else Writeln (‘W=’, Sqrt (A-Sqrt(X)));Error: End.Пример.
Составить программу для вывода возможных значений координат X иY в зависимости от № квадранта.Program Kvadrant;Var Number : Integer;BeginWriteln (‘N=’);Readln (Number);Case Number of1: Writeln (‘X и Y >0/’)2: Writeln (‘X < 0/ , Y > 0/’);3: Writeln (‘X и Y <0/’);4: Writeln (‘X >0/ , Y <0/’);End;End.Пример. Вывод первых дести натуральных чисел в возрастающем порядке.Program Num 10;Write (N:6);Const KN = 10;Writeln;Var N:Integer;End.BeginFor N:=1 To KN Do39Program Num 10;Const KN = 10;Var N:Integer;BeginN:=0;RеpeatN:=N+1;Write (N);Until N>=KN;End.40Пример. Определить к, при котором функцияхлстановится меньше или равна а.кProgram Inter;Var X,A,P:Real;K: Integer;BeginWriteln (‘ввести X,A’);Read (X,A);K:=1;P:=X;Write P/K >A DoBeginK: = K+1;P: = P*X;End;Writeln (‘K = ‘, K);End.Program Inter;Var X,A,P : Real;K: Integer;BeginWriteln (‘Ввести X,A’);Readln (X,A);K: = 0;P: = 1;RepeatK : = K+1;P : = P*X;Until P/K <=A;Write(‘K = ‘,K);End.Пример.
Вычислить сумму бесконечного ряда с точностью до члена ряда,меньшего Е: Z = 1+ х 2 х2 х3хn ... ...2! 3!n!Рекуррентная формула Yn = Y n-1 * X / nProgram Ryad;Var X, Eps,Y,Z:Real;N:Integer;BeginWriteln (‘Ввести X, Eps’);Readln (‘X, Eps’);N: = 0’Y: = 1;Z: = 1;While Y > = Eps Do BeginN: = N+1;41Y: = Y*X/N;Z: = Z+Y;End;Write (‘Z = ‘Z);End.5. ПРОЦЕДУРЫ И ФУНКЦИИКак записывается текст песни? Припев даётся один раз. Если нужноповторять его, то указывается одно слово – припев. Зачем же повторять несколькораз одно и тоже? Этот же принцип действует и в программировании.
Если какаянибудь часть программы многократно повторяется, то её оформляют отдельно отосновной программы и называют подпрограммой. К ней обращаются принеобходимости ее использования.Более того, рекомендуется большую задачу разбивать на отдельныесмысловые места, и программировать их отдельно, а затем объединять в единуюпрограмму.Подпрограммы располагаются в разделе описания основной программы.Выполнение программы начинается с выполнения операторов основнойпрограммы. При необходимости выполнения программы, она вызывается поимени.
Данные из основной программы передаются в подпрограмму (входныеданные), которая начинает выполняться. Затем результаты подпрограммы(входные данные) передаются в основную программу в то место, откуда былсделан вызов подпрограммы, и продолжает выполняться основная программа.Подпрограмма оформляется подобно основной программе, то есть состоит иззаголовка, раздел описаний и раздел операторов. Все имена, представленные вразделе описаний основной программы, называются глобальными. Онидействуют как в разделе операторов основной программы, так и в любойподпрограмме.Имена, представленные в разделе описаний подпрограммы, называютсялокальными.
Они действуют только в рамках подпрограммы и недоступныоператорам основной программы.В языке программирования Паскаль есть два вида подпрограмм:Procedure – процедура иFunction - функция.Процедуры и функции аналогичны программам в миниатюре и имеютобщее название – подпрограммы. Применение подпрограмм дает возможностьуменьшить число повторений одной и той же последовательности операторов, атакже конструировать программу как набор отдельных подпрограмм (модулей),т.е. по принципу структурного программирования.5.1. Описание процедурОписание каждой процедуры начинается с заголовка, где задаются имяпроцедуры и список формальных параметров с указанием их типов.
Оформлениепроцедур в общем виде выглядит следующим образом:Procedure имя (список формальных параметров);42Раздел описанийBeginРаздел операторовEnd;Раздел описаний процедуры подобен разделу описаний программы исостоит из разделов меток, констант, типов, переменных, процедур и функций. Онможет отсутствовать вообще. Раздел операторов заключён в операторные скобкиBegin End;Процедура может быть и без параметров, тогда в заголовке указываетсятолько её имя.
С помощью параметров осуществляется передача исходныеданных в процедуру, а также передача результатов работы в вызвавшую еёпрограмму. Список формальных параметров может включать в себя:параметры – значенийпараметры - переменных (перед ними должно стоять слово VAR),параметры – процедуры (перед ними должно стоять служебное слово Procedure),параметры – функции (перед ними должно стоять служебное слово Function)Выполнение процедуры происходит при её вызове по имени:Имя (фактические параметры).Между формальными и фактическими параметрами должно быть полноесоответствие:- количество формальных и фактических параметров должно быть одинаково,- порядок следования формалтных и фактических параметров должен быть один итот же,- тип каждого фактического параметра жлдэен совпадать с типомсоответствующего ему формального параметра.С помощью формальных и фактических параметров данные передаются изпрограммы в процедуру и наоборот.
В качестве формальных параметров могутиспользоваться только переменные с указанием их типа. В качестве фактическихпараметров могут использоваться константы, переменные, выраженные безуказания их типа. При вызове процедуре сначала передаются параметры, при этомпараметры-значения передаются по значению, а параметры-переменные – поссылке. Основное отличие этих способов передачи заключается в том, чтоприсвоение значений параметру переменной внутри процедуры одновременновыполняются и для соответствующего аргумента.
То есть параметры, в которыезаписываются результаты работы процедуры, должны передаваться только поссылке. Параметры, через которые в процедуру передаются исходные данные,передаются по значению.Хотя параметры процедуры делятся на отдельные виды, но в простыхпрограммах чаще всего используются параметры-значения и параметрыпеременные. Данные этих параметров передаются в обоих направлениях, изпрограммы в процедуру и наоборот.Параметры–значения (перед ними не стоит слово VAR) можно передаватьтолько в одном направлении: из программы в процедуру.
То есть, параметрызначения могут быть только входным для процедуры, а параметры-переменныекак входными, так и выходными.43Процедура может содержать несколько операторов и несколько результатоввыполнения. Каждый результат обозначается своим именем. В основнойпрограмме после вызова процедуры мы можем использовать эти результаты,сохраняя те же имена или давая другие.Пример: Пусть в программе необходимо многократно вычислять площадьквадрата sк=а^2 и площадь прямоугольника sp=a*b при различных значенияхсторон а и b.Procedure Place (x, y: real);BeginSk:=x*xSp:=x*yEnd;Вызвать эту процедуру можно, используя фактические переменные:Place (A, B); где значения параметра А и В передаются в процедуру параметромX, Y.Другой вариант:Procedure Place (x, y: real; Var Sk, Sp: real);Тогда обращение к ней: Place (A, B, S1, S2);При вызове процедуры вместо переменных А, В можно указать конкретныезначения: Place (2.5, 4, S1, S2).Допускается одинаковое обозначение соответствующих формальных ифактических параметров.Пример: В 1-ой вводимой с терминала строке подсчитать количество точек, а во2-ой – количество букв ‘A’.
Подсчёт символов реализовать в процедуре Podshet.Program Pod;Const Tochka =’.’;Var S:Integer;Procedure Podchet (Sim: Char; Var Kol:Integer);Var C:char;Begin kol:=0;Writeln (‘Введите строку’);Repeat read (c);If c=sim then kol:=kol+1;Until EOLNEnd;Begin Readln;Podchet (Tochka,S);Writeln (‘Кол-во точек=’,S:3);Podchet (Tochka’A’,S);Writeln (‘Кол-во букв А’,S:3);End.Здесь процедура Podschet имеет два формальных пар-ра:Sim - входной параметр (параметр значения), определяет символ, которыйподсчитывается в строке;Kol - выходной параметр, через который передаётся количество подсчитанныхсимволов.44Для того, чтобы результаты работы процедуры Podschet был доступен впрограмме, он передается по ссылке.Фактический параметр, соответствующий формальному параметру sim, припервом вызове процедуры задается именем константы, определенной в основнойпрограмме, а при втором вызове – в явном виде.
Обе формы задания правильны,так как в качестве фактического параметра, передаваемого по значению, м.использоваться произвольное выражение соответствующего типа.Процедуры возвращают результат в основную программу не только припомощи параметров – переменных, но непосредственно изменяя глобальныепеременные. Переменные, описанные в основной программе, являютсяглобальными по отношению к внутренним процедурам и функциям. Переменные,описанные внутри процедур и функций, являются локальными.
Локальныепеременные существуют только при выполнении процедуры и недоступны восновной программе. Переменная с символьного типа, описанная в процедуреPodschet, является локальной, а переменная s целого типа, описанная в основнойпрограмме, является глобальной.Изменим процедуру Podschet, чтобы она передавала результат своей работычерез глобальную переменную.Program Pod1;Const Tochka=’.’;Var s:integer;Procedure Podshet (Sin:Char);Var c:char;Begin s:=0Writeln (‘Введите строку’);Repeat Read (c);If c=sim then S:=s+1;Until EOLNEnd;Begin Readln;Podshet (tochka);Writeln (‘Кол-во точек=’s:3);Podshet (‘A’);Writeln (‘Кол-во букв A=’,S:3);End.Программы Pod и Pod1 работают одинаково. Для конкретной задачипрограммист можно выбирать тот или иной способ передачи результатов работыпроцедуры и вызвавшую её программу.Однако в сложных программных комплексах не рекомендуется использоватьглобальные переменные, т.к.
это ухудшает структурированность программы.Пример:Procedure Summa (A:integer;var B:Integer);Begin A:=A+3;B:=B+3;End;В основной программе: A:=5; B:=5;Summa (A,B);45Write (A,B);Здесь значения A:=5; B:=5 передаются в процедуру, где вычисляются новыезначения A=5+3=8 и B=5+3=8.