Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Параметры-значения. 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. Что будет напечатано следующей программой?
|