Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Параметры-значения. 11. Верно ли, что при обращении к процедуре на место формальных параметров-значений подставляются значения соответствующих фактических параметров?






 

11. Верно ли, что при обращении к процедуре на место формальных параметров-значений подставляются значения соответствующих фактических параметров?

12. Можно ли при обращении к процедуре, имеющей формальный параметр-значение, задать в качестве соответствующего фактического параметра некоторую переменную?

13. В программе описана процедура Р с формальными параметрами х, у и процедура Q с формальными параметрами s, t. Среди операторов программы встречаются операторы процедуры P(1, a) и Q(b, d+f). Какие из формальных параметров процедур Р и Q заведомо являются параметрами-значениями?

14. Пусть процедура имеет формальный параметр-значение. Сколько раз, и в какие моменты будет вычисляться значение соответствующего фактического параметра?

15. Пусть программа содержит описание процедуры

procedure mах(х, у: real; var z: real);

Begin

if х < у then z: =у else z: = х

End;

Пусть в ходе выполнения программы переменные а, b и c получили некоторые действительные значения. Верно ли, что после выполнения операторов max(а, b, d); max(d, с, е) будет выполнено e> =а?

16. Выписать составной оператор, который будет выполняться при следующем обращении к процедуре max, описанной в предыдущей задаче: max (a-1, b+1, d).

17. Рассмотрим описание процедуры P:

procedure P(var a, b: integer);

Begin

if a < 0 then a: = a+1;

b: =sqr(a)

End;

и описание процедуры Q:

procedure Q(a: integer; var b: integer);

Begin

if a < 0 then a: =а+1;

b: =sqr(a)

End;

 

будут ли совпадать значения переменной n после выполнения операторов m: = -1; Р(т, п); n: =n + т и, соответственно, операторов m :: =-1; Q(m, n); n: =n+-m? Тот же самый вопрос для операторов m: =1 ; Р(т, п); n: =п+т, m: =1; Q(т, п); п: =п+т.

18. Написать программу вычисления площади многоугольника, изображенного на рис.2. Длины известных отрезков написаны рядам с этими отрезками.

 

рис. 2

Предложить два варианта программы:

а) описав процедуру str4, рассмотренную в теоретической части,

б)описав процедуру вычисления площади треугольника str5 имеющую три параметра - длины сторон треугольника. В результате обращения к этой процедуре вычисленная площадь должна прибавляться к значению переменной s, которая не является параметром и не является локальной переменной по отношению к процедуре.

 

19. В процедуре r,

procedure r(a: Т; va s, t: real);

var i: integer; u: real;

Begin

s: =sqr(a[1]); t: =abs(a[1]);

for i: =2 to n do

Begin

s: =s+sqr(a[i]);

u: =abs(a[i]);

if и > t then t: =u

End

End;

назначение локальной переменной u - уменьшение числа обращений к функции abs. Этой же цели можно добиться, минуя введение дополнительной переменной:

а[1]: =аbs(а[i]);

if a[i] > t then t: =a[i],

 

Благодаря тому, что а является формальным параметром-значением, выполнение оператора а[i]: =аbs(а[i]); не повлечет изменения соответствующего фактического параметра. Убедиться в этом, выписав составной оператор, который будет выполнен при обращении к процедуре с помощью оператора процедуры r(x, р, q). Выписать аналогичный оператор для случая когда а - формальный параметр-переменная. Будет ли изменяться х?

Дополнительно ответить на вопрос, можно ли в описании процедуры без ущерба для дела заменить

s: =sqr(a[1]); t: =abs(a[1]);

for i: =2 to n do

……………………………

на

s: =0; t: =0;

for i: =1 to n do

20. Программа. Даны отрезки a, b, с и d. Для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника. (Определить процедуру печплощ(x, у, z), печатающую площадь треугольника со сторонами x, у и z, если такой треугольник существует.)

 

21. var a, b: real; t: boolean;

Переменной t присвоить значение true, если уравнения х2-6.2x+а2=0 и х2+ах+b-1=0 имеют вещественные корни и при этом оба корня первого уравнения лежат между корнями второго, и присвоить значение false во всех остальных случаях.

 

22. var c, d: integer;

procedure P(x, y: integer);

begin у: =x+1 end;

procedure Q(x; integer, var y: integer);

begin y: =x+1 end;

procedure R(var x, y: integer);

begin y: =x+1 end;

а) Дли каждой из этих процедур указать, какие из ее параметров являются параметрами-значениями, а какие параметрами-переменными.

б) Определить, что будет выдано на печать:

c: =2; d: =0; P(sqr(c)+c, d); writeln(d);

c: =2; d: =0; Q(sqr(c)+c, d); writeln(d);

Почему при изменении в процедуре параметра-значения соответствующий фактический параметр не меняет своего значения? Что надо сделать, чтобы он менял значение?

в) Допустимы ли обращения R(sqr(c)+c, d) и R(c, d)? Почему невыгодно объявлять параметр, не меняющийся в процедуре, параметром-переменной?

23. Что будет напечатано следующей программой?


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.01 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал