metod_15.03.04_atppp_oaip_up_2016 (Методические документы), страница 9
Описание файла
Файл "metod_15.03.04_atppp_oaip_up_2016" внутри архива находится в папке "Методические документы". PDF-файл из архива "Методические документы", который расположен в категории "". Всё это находится в предмете "абитуриентам" из 1 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "абитуриентам" в общих файлах.
Просмотр PDF-файла онлайн
Текст 9 страницы из PDF
Новое значение В передается в программу, азначение А нет. Поэтому в основной программе будет А=5, В=8.Если в процедуру нужно передать в качестве параметра не просто однозначение, а массив, то в этом случае фактически параметрами является имямассива. При этом формальный параметр указывается после слова VAR вместе стипом массива. Само же описание массива делается в разделе TYPE основнойпрограммы.В языке программирования Паскаль допускается использование процедурбез параметров.
В этом случае отсутствует как формальные, так и фактическиепараметры.Пример: Определить длину окружности С, площадь круга S, (радиуса = R)удаление L центра окружности от начала координат. X, Y – координаты центраокружности.1й вариантyRyLxxProgram Ex;Var R:Real;(*радиус*)X,Y,:Real; (*центр*)C:Real; (*длина окружности*)S:Real; (*S круга *)L:Real; (*Удаление центра*)Procedure Round;BeginC:=2*Pi*R;S:=Pi*SQR(R);L:=SQRT (SQR(X)+SQR(Y));46End;BeginWriteln (‘Ввод);Read (r,x,y);Round; (*вызов процедуры*)Writeln (‘Длина окр-ти=’,C:6:2);Writeln (‘S круга=’,S:6:2);Writeln (‘Удал-е центра=’,L:6:2);End.2й вариантProgram Ex;Var R,X,Y,C,S,L:Real;Procedure Round (R,X,Y:Real; Var C,S,L);BeginC:2*Pi*R;S:=Pi*SQR (R);L:=SQRT (SQR (X)+ SQR (Y));End:BeginWriteln (‘Ввод’);Read (R,X,Y);Round (R,S,Y,S,L,C);Writeln (‘Длина окружности=’,C:6:2);Writeln (‘S круга=’,S:6:2);Writeln (‘Удаление центра’,L:6:2);End.5.2.
Стандартные процедурыЭто, в первую очередь, процедуры ввода и вывода Read, readln, write,writeln. С ними вы знакомы.В циклах Repeat, While и For можно использовать еще две процедуры –Break и Continue. Процедура Break позволяет досрочно выйти из цикла, недожидаясь выполнения условий выхода.Процедура Continue позволяет начать новую итерацию цикла, даже еслипредыдущая не завершена.Пример: В массиве целых чисел найти первое отрицательное число и вывести егона экран.Фрагмент программыFor I:=1 to N do {поиск отрицательного числа}BeginIf A[i]>=0 thenContiniue; {не отр.=> на след.
число}Writeln (‘1-ое отриц. число=’, A[i]);BreakEnd;47Процедура Exit служит для досрочного выхода из программы. Дело в том,что безусловный переход с использованием оператора goto можно осуществлятьдалеко не из каждого места программы и не в любое место программы. Так,например, нельзя с его помощью перейти из основной программы вподпрограмму или выйти из подпрограммы. Для этой цели используетсяпроцедура Exit.Пример: Функция, обращает первое отрицательное число в массиве.Function Minus--------------------BeginMinus:=0For i:=1 to N doIf T[i]<0 thenBeginMinus:=T[i];Exit{досрочный выход из фун-и}ENDEnd;Существует множество стандартных процедур, которые работают с файлами:Halt(1) - остановка,Halt(0) - завершение,Halt=Halt(0).5.3.
Описание функцийОписание функции в основном аналогично описанию процедуры, однакоесть и отличия. Результатом работы функции является одно значение. Типрезультата задается в заголовке.Общий вид заголовка функции:Function имя функции (список формальных параметров):тип результата.Если функция изменяет значения формальных параметров – переменныхили значения глобальных по отношению к данной функции переменных, тоговорят, что функция имеет побочный эффект.Применениефункцииспобочнымэффектомнарушаетструктурированность программы, поэтому их использование нежелательно.Среди входящих в функцию операторов должен обязательноприсутствовать хотя бы один оператор присваивания, в левой части которогостоит имя функции.
Этот оператор и определяет значение, вырабатываемоефункцией. При вызове функции передача фактических параметров производитсятак же, как и при вызове параметра.Пример: Найти разность двух факториалов: F=m!-k!Program P1;Var F,M,K:Integer;Function Fact (N:Integer):Integer;Var P,I:Integer;BeginP:=1;48For I:=2 to N doP:=P*I;Fact:=P;End;BeginWriteln (‘Ввод М,К’);Readln (M,K);F:=Fact (M) – Fact (K);Writeln (‘F=’,F:5);End.Внутри функции имена N,P,I являются локальными.
Результат вычисленияфакториала обозначается именем функции Fact. В основной программепеременные F,M,K являются глобальными. При вычислении значения F дваждыпроисходит обращение к функции Fact(M) и Fact(k) прямо в правой частиоператора присваивания. При этом вызов функции м. делать непосредственновнутри выражения, подобно тому, как используются стандартные встроенныефункции, например Sin(x).Пример: вычислить длину гипотенузы.S=h/tgНProgram Dlina;Const Pi=3.14159;Var H:Real;Betta:Real;Function S(M:Real;Betta:Real):Real;Var x:Real;Begin x:=Betta*Pi/180;S:=H/(sin(x)/cos(x));End;Begin x:=Betta*Pi/180;S:=H/9sin(x)/cos(x));End;Begin Write (‘Ввести Betta,H’);Readln (Betta,H);Write (‘S=’,s(H,Betta):10:4);End;Вызов функции осуществляется непосредственно в операции ввода.5.4. Стандартные функцииОнивамизвестны:этоарифметические,алгебраическиеитригонометрические функции.
Кроме того, есть функция конца строки: Eoln - endof line.5.5. Итерация и рекурсияИтерация (от лат. повторение) - повторение, применение какой – либоматематической.49Пример: Вычислить сумму ряда:S=a1+a2+….+anS1=a1S2=a1+a2S3=a1+a2+a3S4=a1+a2+a3+a4…………………S=a1+a2+…+anРекурсия (от лат. возвращение) - вычисление последующего значения рядачерез предыдущее. Последовательность, в которой соседние значения связаныформулой, называется рекурсивной.Пример: Арифметическая прогрессия: a1, a2=a1+d, a3=a2+d, an=an-1+dПример.BeginIf (n=0) or (n=1) then Factorial:=1Else begin F:=1For i:=2 to n doF:=f*i;Factorial:=f;End;End;Begin Writeln (‘Введите N’);Readln (N);Writeln (‘факториал=’,Fact);End.Пример.Program Rekursion;Var fact:real;N:integer;Function Factorial (N:integer):real;BeginIf (N=0) or (N=1) then factorial:=1Else factorial:=factorial (N-1)*n;End;Beginwriteln (‘Введите N’);Readln (N);Fact:=factorial (N);Writeln (‘факториал=’,fact);End.Здесь первый вызов функции происходит в основной программе, а затем,начинается рекурсивный вызов внутри функции.В языке программирования Паскаль есть возможность обращенияпроцедуры или функции к самой себе.
При этом циклическую часть программыможно составить без операторов цикла. Способ обращения процедуры или50функции к самой себе называется рекурсией. С помощью рекурсии удобнопредставлять те задачи, которые сводятся к подзадачам того же типа, но меньшейразмерности.Вычисление факториала можно представить опять через факториал.N!=n(n-1)!-рекурсивная формула.Представление факториала в виде последовательности операций умножения – этоитерационный процесс. n!= 1*2*3…n-итерационная формула. Итерацияпрограммируется с помощью циклов.Пример: Вычисление факториала.Program Iteracion ;Var fact: real;N:integer;Function factorial (n: integer):real;Var f:real;I: integer;Пример.
В 13 веке итальянский математик Фибоначчи сформулировал задачу:”Некто поместил пару кроликов в некое место, огороженное со всех сторонстеной, чтобы узнать, сколько пар кроликов родится в течении года, если черезмесяц пара кроликов производит на свет другую пару, а рожают со второгомесяца после своего рождения.Program Krolik;Var kr:integer; (*число кроликов*)N:Integer; (*число месяцев*)Function fib(n:integer):integer;BeginIf (n=1) or (n=2) then fib:=1Else fib:=fib(n-1)+fib(n-2)End;BeginWriteln(‘ввести N’);Readln (N);Kr:=fib (N); (*вызов ф-и*)Writeln (kr:5);End.5.6.
Побочный эффект рекурсииВ теле подпрограммы известны, то есть доступны все объекты, описанные вобъемлющем блоке, в том числе и имя самой подпрограммы. Внутри телаподпрограммы возможен вызов самой подпрограммы. Параметры и функциииспользующие вызовы “самих себя“, называются рекурсивными. Допустиматакже косвенная рекурсия, при которой параметр А вызывает параметр В, а тот, всвою очередь, вызывает С, который вызывает первоначальный параметр А.Рекурсия достаточно широко применяется в программировании, чтоосновано на рекурсивной природе многих математических алгоритмов.
В языкепрограммирования Паскаль нет никаких ограничений на рекурсивные вызовыподпрограмм, необходимо только понимать, что каждый очередной рекурсивный51вызов приводит к образованию новой копии локальный объектов подпрограммы ивсе эти копии, соответствующие цепочке активизированных и неактивизированных рекурсивных вызовов, существующих независимо друг отдруга.При выполнении функций возникает один неожиданный эффект, причинойкоторого является изменение значений нелокальных переменных в теле функции.Если в некоторой функции имеются конструкции, например, операторыприсваивания, изменяющие значения переменных, описанных в объемлющихблоках, то может возникнуть ситуация, при которой значения выражения,использующего вызов такой функции, зависит от порядка следования операторов,что является потенциальным источником ошибок и поэтому крайненежелательно.
Описанная ситуация называется побочным эффектом рекурсии.Пример:Program Side Effect;Var a,z :integer;Function change (x: integer): integer;BeginZ:=z-x; {изменяем значение нелокальной переменной}Change:= sqr (x)End;BeginZ:=10; a:=change (z); writeln(a,z);Z:=10; a:=change (10)*change (z);Writeln(a,z);Z:=10; a:=change (z) * change(10);Writeln (a,z)End.Выполнение этой программы приводит к следующему результату на дисплее:100010000-1000Т.е.
два последних присваивания переменной а дают различный результат,хотя правила вычисления выражений предлагают равноправные сомножители.Следует всячески избегать такой зависимости функции от глобальных поотношению к ней переменных. Заметим, что современные языки, например, Adaсодержит прямые запреты на подобные действия.5.7. Предварительное описание (ссылки вперед)Объявления констант и переменных в любом блоке располагаются передскобками Begin ...End (в этих скобках заключены сами операторы). Поэтомукомпилятору никогда не приходится иметь дело с оператором, содержащимконстанты и переменные, которых он не знает, это вызовет во время компиляциисообщение об ошибке.
Все это справедливо и в отношении подпрограмм (т.е.функций и процедур). Программист обязан следить за правильным порядкомследования определений (описаний).Пример :52Program Demo;Var a, b ,c : real ;Procedure Ring (var s , l : real ; d : real);Begin L:=3.14 *d; {длина окружности }S:=cir (d) ; {компилятор еще не знает о функции cir}End;Function Cir (d: real): real; {площадь круга }Begin cir:= 3.14* sqr(d) / 4;End;………………………………………………………………………Очевидный выход – поменять порядок строк так, чтобы функция Cir былаопределена перед процедурой Ring(…) .Однако можно и иначе.Действия:1. Оставить подпрограмму (функцию cir) на своем месте, вычеркнув из еезаголовка все параметры: Function cir;2. Вставить полный заголовок там, где ему надлежит бытью, т.е. передподпрограммой, которая его вызывает.Function cir (d: real): real;1.
После полного заголовка добавить слово Forward.6. РЕГУЛЯРНЫЕ ТИПЫ6.1. Одномерный массив, или переменные с индексамиМассив – это упорядоченный набор однотипных элементов. Под массивомпонимается конечная совокупность данных одного типа, упорядоченных позначениям индекса. Каждый элемент массив обозначается именем массива ииндексом. Индекс заключается в квадратные скобки.Если в программе используется массив, он должен быть описан в разделетипов или в разделе переменных.Описание в разделе переменных:Var имя массива: Array [тип индекса] of тип элемента;Тип индекса может быть любым простым типом, кроме Real и Integer (Boolean,Char, перечислимый, ограниченный).Тип элементов массива – это базовый тип, из которого составлен массив.Это может быть любой простой или сложный тип – вообще любой допустимый вязыке программирования Паскаль.Var A: Array [1..5] of Real;Это массив из пяти действительных чисел: А[1], А[2], А[3], А[4], А[5].Обычно нумерация начинается с единицы и заканчивается каким-нибудьположительным числом.