Организация данных в ЭВМ и основы программирования (1017140), страница 6
Текст из файла (страница 6)
При определении ограниченного типа указываются начальные и конечные значения диапазона, разделённые двумя точками.
Общий вид описания ограниченного типа:
Type имя типа = константа 1 .. константа N;
Общий вид описания переменных ограниченного типа:
Var имя переменной: имя типа;
Пример.
Type T = 1... 100;
Var A, B: T;
Переменные А и В могут принимать любые значения из диапазона 1..100.
При использовании ограниченного типа должно выполняться следующее
Правила:
1) обе граничные константы должны быть одинакового типа;
2) начальное значение не должно быть больше конечного;
3) тип констант может быть любой простой, кроме действительного (целый, символьный, логический, перечислимый).
Пример. К= 15 ... 70; - целый
Lit = ‘A’ ... ‘ z’ ; - символьный
Summer = Jun ... Aug ; - переменный
Если константы имеют стандартный типа можно делать непосредственно в разделе переменных.
Пример. Var S1, S2: 1..100;
Sim : ‘A’..’R’;
Тип констант называется базовым. Над переменными ограниченного типа разрешается выполнять все операции, которые допустимы для данных его базового типа.
Пример. Если переменная К принимает только целые значения 4,5,6,7,8,9, то лучше дать описание: Var K: 4..9; чем Var K: Integer; И вот почему. В случае выхода ‘K’ за диапазон 4..9 в первом варианте (ограниченный тип) будет выдано диагностическое сообщение об ошибке. Во втором варианте (целый тип) может быть выдан неверный результат.
Целый тип описания переменных рекомендуется использовать только тогда , когда диапазон значения переменной либо заранее неизвестен, либо занимает весь допустимый в языке Паскаль диапазон для целого типа.
Пример. Вычислить W = A ln |x| при |x| <1
Program usl;
Var A,X,W : Real;
Label : Error;
Begin
Writeln (‘ввести данные’);
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 Error
End.
Else Writeln (‘W=’, Sqrt (A-Sqrt(X)));
Error: End.
Пример. Составить программу для вывода возможных значений координат X и Y в зависимости от № квадранта.
Program Kvadrant;
Var Number : Integer;
Begin
Writeln (‘N=’);
Readln (Number);
Case Number of
1: 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;
Const KN = 10;
Var N:Integer;
Begin
For N:=1 To KN Do
Write (N:6);
Writeln;
End.
Program Num 10;
Const KN = 10;
Var N:Integer;
Begin
N:=0;
Rеpeat
N:=N+1;
Write (N);
Until N>=KN;
End.
Пример. Определить к, при котором функция становится меньше или равна а.
Program Inter;
Var X,A,P:Real;
K: Integer;
Begin
Writeln (‘ввести X,A’);
Read (X,A);
K:=1;
P:=X;
Write P/K >A Do
Begin
K: = K+1;
P: = P*X;
End;
Writeln (‘K = ‘, K);
End.
Program Inter;
Var X,A,P : Real;
K: Integer;
Begin
Writeln (‘Ввести X,A’);
Readln (X,A);
K: = 0;
P: = 1;
Repeat
K : = K+1;
P : = P*X;
Until P/K <=A;
Write(‘K = ‘,K);
End.
Пример. Вычислить сумму бесконечного ряда с точностью до члена ряда, меньшего Е: Z = 1+
Рекуррентная формула Yn = Y n-1 * X / n
Program Ryad;
Var X, Eps,Y,Z:Real;
N:Integer;
Begin
Writeln (‘Ввести X, Eps’);
Readln (‘X, Eps’);
N: = 0’
Y: = 1;
Z: = 1;
While Y > = Eps Do Begin
N: = N+1;
Y: = Y*X/N;
Z: = Z+Y;
End;
Write (‘Z = ‘Z);
End.
4. ПРОЦЕДУРЫ И ФУНКЦИИ
Как записывается текст песни? Припев даётся один раз. Если нужно повторять его, то указывается одно слово – припев. Зачем же повторять несколько раз одно и тоже? Этот же принцип действует и в программировании. Если какая-нибудь часть программы многократно повторяется, то её оформляют отдельно от основной программы и называют подпрограммой. К ней обращаются при необходимости ее использования.
Более того, рекомендуется большую задачу разбивать на отдельные смысловые места, и программировать их отдельно, а затем объединять в единую программу.
Подпрограммы располагаются в разделе описания основной программы. Выполнение программы начинается с выполнения операторов основной программы. При необходимости выполнения программы, она вызывается по имени. Данные из основной программы передаются в подпрограмму (входные данные), которая начинает выполняться. Затем результаты подпрограммы (входные данные) передаются в основную программу в то место, откуда был сделан вызов подпрограммы, и продолжает выполняться основная программа.
Подпрограмма оформляется подобно основной программе, то есть состоит из заголовка, раздел описаний и раздел операторов. Все имена, представленные в разделе описаний основной программы, называются глобальными. Они действуют как в разделе операторов основной программы, так и в любой подпрограмме.
Имена, представленные в разделе описаний подпрограммы, называются локальными. Они действуют только в рамках подпрограммы и недоступны операторам основной программы.
В языке программирования Паскаль есть два вида подпрограмм:
Procedure – процедура и
Function - функция.
Процедуры и функции аналогичны программам в миниатюре и имеют общее название – подпрограммы. Применение подпрограмм дает возможность уменьшить число повторений одной и той же последовательности операторов, а также конструировать программу как набор отдельных подпрограмм (модулей), т.е. по принципу структурного программирования.
4.1. Описание процедур
Описание каждой процедуры начинается с заголовка, где задаются имя процедуры и список формальных параметров с указанием их типов. Оформление процедур в общем виде выглядит следующим образом:
Procedure имя (список формальных параметров);
Раздел описаний
Begin
Раздел операторов
End;
Раздел описаний процедуры подобен разделу описаний программы и состоит из разделов меток, констант, типов, переменных, процедур и функций. Он может отсутствовать вообще. Раздел операторов заключён в операторные скобки Begin End;
Процедура может быть и без параметров, тогда в заголовке указывается только её имя. С помощью параметров осуществляется передача исходные данных в процедуру, а также передача результатов работы в вызвавшую её программу. Список формальных параметров может включать в себя:
параметры – значений
параметры - переменных (перед ними должно стоять слово var),
параметры – процедуры (перед ними должно стоять служебное слово Procedure),
параметры – функции (перед ними должно стоять служебное слово Function)
Выполнение процедуры происходит при её вызове по имени:
Имя (фактические параметры).
Между формальными и фактическими параметрами должно быть полное соответствие:
- количество формальных и фактических параметров должно быть одинаково,
- порядок следования формалтных и фактических параметров должен быть один и тот же,
- тип каждого фактического параметра жлдэен совпадать с типом соответствующего ему формального параметра.
С помощью формальных и фактических параметров данные передаются из программы в процедуру и наоборот. В качестве формальных параметров могут использоваться только переменные с указанием их типа. В качестве фактических параметров могут использоваться константы, переменные, выраженные без указания их типа. При вызове процедуре сначала передаются параметры, при этом параметры-значения передаются по значению, а параметры-переменные – по ссылке. Основное отличие этих способов передачи заключается в том, что присвоение значений параметру переменной внутри процедуры одновременно выполняются и для соответствующего аргумента. То есть параметры, в которые записываются результаты работы процедуры, должны передаваться только по ссылке. Параметры, через которые в процедуру передаются исходные данные, передаются по значению.
Хотя параметры процедуры делятся на отдельные виды, но в простых программах чаще всего используются параметры-значения и параметры-переменные. Данные этих параметров передаются в обоих направлениях, из программы в процедуру и наоборот.
Параметры–значения (перед ними не стоит слово var) можно передавать только в одном направлении: из программы в процедуру. То есть, параметры-значения могут быть только входным для процедуры, а параметры-переменные как входными, так и выходными.
Процедура может содержать несколько операторов и несколько результатов выполнения. Каждый результат обозначается своим именем. В основной программе после вызова процедуры мы можем использовать эти результаты, сохраняя те же имена или давая другие.
Пример: Пусть в программе необходимо многократно вычислять площадь квадрата sк=а^2 и площадь прямоугольника sp=a*b при различных значениях сторон а и b.
Procedure Place (x, y: real);
Begin
Sk:=x*x
Sp:=x*y
End;
Вызвать эту процедуру можно, используя фактические переменные:
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 EOLN
End;
Begin Readln;
Podchet (Tochka,S);
Writeln (‘Кол-во точек=’,S:3);
Podchet (Tochka’A’,S);
Writeln (‘Кол-во букв А’,S:3);
End.
Здесь процедура Podschet имеет два формальных пар-ра:
Sim - входной параметр (параметр значения), определяет символ, который подсчитывается в строке;
Kol - выходной параметр, через который передаётся количество подсчитанных символов.
Для того, чтобы результаты работы процедуры Podschet был доступен в программе, он передается по ссылке.
Фактический параметр, соответствующий формальному параметру sim, при первом вызове процедуры задается именем константы, определенной в основной программе, а при втором вызове – в явном виде. Обе формы задания правильны, так как в качестве фактического параметра, передаваемого по значению, м. использоваться произвольное выражение соответствующего типа.
Процедуры возвращают результат в основную программу не только при помощи параметров – переменных, но непосредственно изменяя глобальные переменные. Переменные, описанные в основной программе, являются глобальными по отношению к внутренним процедурам и функциям. Переменные, описанные внутри процедур и функций, являются локальными. Локальные переменные существуют только при выполнении процедуры и недоступны в основной программе. Переменная с символьного типа, описанная в процедуре Podschet, является локальной, а переменная s целого типа, описанная в основной программе, является глобальной.
Изменим процедуру Podschet, чтобы она передавала результат своей работы через глобальную переменную.
Program Pod1;
Const Tochka=’.’;
Var s:integer;
Procedure Podshet (Sin:Char);
Var c:char;
Begin s:=0
Writeln (‘Введите строку’);
Repeat Read (c);
If c=sim then S:=s+1;
Until EOLN