Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Локальные и глобальные переменные и подпрограммы.Содержание книги
Поиск на нашем сайте
Если переменная или константа описана в основной программе, она считается глобальной, и ее могут использовать любые процедуры и функции данной программы. Переменные, описанные внутри подпрограммы, называются локальными и могут быть использованы только внутри данной подпрограммы. Локальные переменные могут быть описаны как в заголовке программы, так и в разделе описания переменных. при совпадении имен глобальных и локальных переменных, локальные определения в пределах своего действия отменяют действия глобальных, и эти переменные никак не связаны между собой. Рассмотрим две почти одинаковые программы. Program Variant1; Program Variant2; Var Var X: real; X: real;
Procedure writeX; Procedure writeX; Var x: real; Begin Begin write(x) write(x) End; End;
Begin Begin X:= Pi; X:= Pi; writeX writeX End. End. Нетрудно догадаться о решаемой задаче: присвоить глобальной переменной х некоторое значение, а затем напечатать это число через специальную процедуру. Во втором варианте программы переменная с именем Х описана только в основной программе, поэтому она, как глобальная переменная, доступна в подпрограмме. В результате будет напечатано значение числа П. В первом варианте переменная х переопределена в подпрограмме, таким образом, в подпрограмме имеется локальная переменная х, ничем не связанная с переменной Х основной программы. Поскольку этой локальной переменной не присвоено значение, будет напечатано случайное число, содержащееся в соответствующей ячейке памяти. Возникает вопрос, какова роль локальных переменных, нельзя ли все переменные описать как глобальные? Процедура должна быть, по возможности, независима от основной программы, поэтому все переменные, нужные только в пределах процедуры, должны описываться как локальные. Общение основной программы с подпрограммой должно, как правило, идти через список параметров процедуры, что придает подпрограммам необходимую гибкость. Вместе с тем, излишне большое число параметров, передаваемое в подпрограмму при ее вызове, замедляет работу программы, поэтому не следует пренебрегать использованием в подпрограммах глобальных переменных. Кроме локальных переменных, в программах могут быть и локальные подпрограммы. Это подпрограммы, текст которых размещен внутри текста подпрограммы более высокого уровня. Использование таких подпрограмм, как и локальных переменных, ограничивается подпрограммой, к которой они принадлежат. Локальность или глобальность являются понятиями относительными. Программа с вложенными в нее подпрограммами представляет собой иерархическое дерево. Объект, локальный по отношению к более высокому уровню иерархии, ведет себя как глобальный по отношению к подпрограммам более низкого уровня. Задание. Найдите в приведенных выше примерах локальные и глобальные переменные, формальные и фактические параметры, какие параметры переданы по ссылке, а какие – по значению. Занятие 3. Процедуры. Структура процедуры имеет следующий вид: Procedure <имя процедуры> (формальные параметры: их тип); Var (локальные переменные) Begin ... end; Процедура вызывается по имени: <имя процедуры> (фактические параметры); Значение каждого фактического параметра при вызове процедуры передаётся формальному параметру. Временно управление передаётся процедуре. После завершения работы процедуры управление возвращается в основную программу. Каждый формальный параметр указывается вместе со своим типом. Соответствующий ему фактический параметр указывается без типа. Между формальными и фактическими параметрами должно быть соответствие по количеству параметров, по их типу и порядку следования. Заголовок процедуры может выглядеть так: PROCEDURE GG(a,b,c:integer); вызываться так: GG(3,n,m) Здесь a,b,c–формальные параметры, а 3, n, m–фактические параметры Таким образом в процедуру передаются значения: a=3, b=n, c=m Переменные описанные в процедуре после слова Var, являются внутренними переменными процедуры или промежуточными, они не являются данными для операций внутри процедуры и не являются результатом её выполнения, а нужны лишь для промежуточных действий. Данные и результаты описываются в круглых скобках после имени процедуры. Перед описанием переменных–результатов пишут служебное слово var. Например: Procedure express(a,b,c: real; var x,y:real); Var z: real; begin z:=a+ b+ c; x:=sqr(z); y:=sqrt(z); end; Эту процедуру можно вызвать следующим образом: express(7.6, 6.8, 9.5, x1, x2); Формальные входные параметры a, b, c принимают значения соответствующих фактических параметров a=7.6; b=6.8; c=9.5. При этих значениях выполняется процедура. Результатом выполнения процедуры являются x, y, которые передают свои значения соответствующим фактическим параметрам x1, y1. Таким образом в основной программе будем иметь x1=20, y1=22. В качестве фактических параметров могут быть константы, переменные, выражения, массивы. В качестве формальных параметров могут быть только переменные(константы и выражения недопустимы). Рассмотрите примеры решения задач. Задача 1. Описать пpоцедуpу "аналитического" сложения обыкновенных дpобей, вычисляющую по числам P1,Q1,P2,Q2, являющимися числителями и знаменателями дробей и последняя дpобь несокpатима. Результат вывести в виде P1 P2 P ---- + ---- = --- Q1 Q2 Q Program Kudashev_Artem; Uses Crt; Var P1, Q1, P2, Q2, P, Nod_2, Celaya: Longint; Dop_1, Dop_2: integer; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure Nod(A,B: Longint;Var Nod_2: Longint); Begin Nod_2:=A*B; End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure Vivod_Otveta(Celaya,P1,Q1,P2,Q2,P,Nod_2,X,Y:integer); Var i: integer; Begin if P > Nod_2 then begin Celaya:=P div Nod_2; P:=P mod Nod_2; end else begin Gotoxy(X+1,Y); write(P1); Gotoxy(X+10,Y); write(P2); if P = 0 then begin Gotoxy(X+1,Y+1); write('---- + ---- = ',Celaya,''); Gotoxy(X+1,Y+2); write(Q1); Gotoxy(X+10,Y+2); write(Q2); end else begin for I:=10 downto 2 do begin if ((P mod I) = 0) and ((Nod_2 mod I) = 0) then begin P:=P div I; Nod_2:=Nod_2 div I; end; end; Gotoxy(X+19,Y); write(P); Gotoxy(X+1,Y+1); write('---- + ---- = ',Celaya,' ------'); Gotoxy(X+1,Y+2); write(Q1); Gotoxy(X+10,Y+2); write(Q2); Gotoxy(X+19,Y+2); write(Nod_2); end; end; End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure Podshet(P1, Q1, P2, Q2: Longint); Begin Nod(Q1,Q2,Nod_2); Dop_1:=Nod_2 div Q1; Dop_2:=Nod_2 div Q2; P:=(Dop_1*P1)+(Dop_2*P2); if P > Nod_2 then begin Celaya:=P div Nod_2; P:=P mod Nod_2; end; End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Begin Clrscr; Q1:=0; Q2:=0; Textcolor(LightCyan); writeln(' P1 P2 P'); writeln('---- + ---- = ---'); writeln(' Q1 Q2 Q'); writeln; write('Введите P1 -> '); readln(P1); while Q1 = 0 do begin write('Введите Q1 -> '); readln(Q1); if Q1 = 0 then writeln('Число Q1 не должно pавнятся 0'); end; write('Введите P2 -> '); readln(P2); while Q2 = 0 do begin write('Введите Q2 -> '); readln(Q2); if Q2 = 0 then writeln('Число Q2 не должно pавнятся 0'); end; Podshet(P1,Q1,P2,Q2); Vivod_Otveta(Celaya,P1,Q1,P2,Q2,P,Nod_2,2,10); readkey; End. Задача 2. Для заданного N составить алгоритм вычисления значения выражения: (1*1) (2*2) (3*3) (N*N) ----------- * ------------ * ----------- * * ----------- (1+(3*3)) (2+(3*3)) (3+(3*3))... (N+(3*3)) Program Kudashev_Artem; Uses Crt; Var N, Ch, Zn, Celaya: Longint; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Procedure Podshet(N: Longint; Var Chislitel, Znamenatel: Longint); Var A, Z: integer; Begin Chislitel:=1; Znamenatel:=1; for A:=1 to N do begin Chislitel:=Chislitel*(A*A); Znamenatel:=Znamenatel*(9+A); for Z:=2 to 10 do begin if ((Chislitel mod Z) = 0) and ((Znamenatel mod Z) = 0) then begin Chislitel:=Chislitel div Z; Znamenatel:=Znamenatel div Z; end; end; end; End; {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -} Begin Clrscr; TextBackground(Black); Textcolor(Yellow); write('Введите N -> '); read(N); Podshet(N,Chl,Zn); Celaya:=Ch div Zn; Chislitel:=Ch mod Zn; writeln('Ответ'); writeln(' ',Ch); writeln('',Celaya,' ---------'); writeln(' ',Zn); readkey; End.
Задание. Приготовьтесь объяснить решение задач учителю. Задачи для самостоятельного решения 1. Написать программу подсчета суммы М введенных с клавиатуры чисел. 2. Составить программу поиска большего из трёх чисел, с использованием процедуры поиска большего из двух чисел. 3. Напишите программу (процедуру), которая будет возвращать значение среднего арифметического двух своих параметров а и b. 4. Написать процедуру, меняющую значения двух переменных а и b местами. 5. Используя процедуру обмена значений двух переменных, упорядочьте по возрастанию переменные a, b, c. 6. Определить длину окружности L и площадь круга S. Радиус окружности задается с клавиатуры. Вычисление S и L оформить в виде процедуры. 7. Постройте диалоговой алгоритм, позволяющий выводить несколько графиков по выбору в одной системе координат. Для построения графиков используйте подпрограммы. 8. Напишите подпрограмму, которая будет вычислять сумму правильных делителей заданного числа n. Правильными делителями числа n, являются все делители этого числа, за исключением его самого.
|
||||
Последнее изменение этой страницы: 2016-08-12; просмотров: 192; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.117.52 (0.008 с.) |