Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
infa.docx
Скачиваний:
0
Добавлен:
25.09.2019
Размер:
99.7 Кб
Скачать

Вопрос 4.

В теле любого оператора цикла (внешнего) могут находиться другие операторы цикла (внутренние). Все операторы внутреннего цикла должны

полностью располагаться в теле внешнего цикла.

Пример. Вывод на экран таблицы умножения:

var

i, j: integer; {счетчики}

begin

for i:=1 to 9 do {внешний цикл}

begin

for j:=1 to 9 do {внутренний цикл}

write(i,’ * ’,j,’ = ’,i*j:2);

writeln; {перевод строки - во внешнем цикле}

end;

end.

Задачи на перебор всех вариантов

Старинная задача о покупке скота. Сколько можно купить быков, коров и

телят (бык стоит 10 рублей, корова – 5 рублей, теленок – 0,5 рубля), если на 100 рублей надо купить 100 голов скота. Обозначим: b – количество быков, k – количество коров, t– количество телят.

var

b, k, t: integer;

begin

for b:=0 to 10 do

for k:=0 to 20 do

begin

t:=100-(b+k);

if (20*b+10*k+t=200) then

writeln(’быков ’,b,’ коров ’,k,’ телят ’,t);

end;

end.

Правило для вложенных циклов: по возможности следует делать цикл с наибольшим числом повторений самым внутренним, а цикл с наименьшим числом повторений – самым внешним.

Иногда производительность программы целиком зависит от того, как запрограммирован цикл.

Вопрос 5.

если в программе имеется несколько повторяющихся одинаковых фрагментов, то их можно оформить в виде отдельного блока, а

затем обращаться к нему столько раз, сколько потребуется.

Подпрограмма должна иметь уникальное имя (идентификатор), которое употребляется для ее вызова. Такой вызов подпрограммы можно выполнять многократно. Подпрограмма позволяет скомпоновать группу операторов для выполнения

единого действия. Подпрограмме можно передавать данные и она можетвозвращать результаты вычислений.

Процедуры и функции делятся на стандартные и определенные пользователем. Стандартные процедуры и функции являются частью языка, они уже описаны в соответствующих стандартных модулях (например, процедура writeln).

Пользовательские процедуры и функции описываются после ключевых слов procedure

и function

в описательной части программы.

Разделы описания (кроме раздела uses) могут встречаться в программе любое количество раз (или отсутствовать) и следовать в произвольном порядке В общем случае подпрограммы имеют ту же структуру, что и программа.

Формальные параметры – это параметры, которые описываются в заголовке подпрограммы (вместе с указанием их типа).

Переменные, константы и другие данные, описанные внутри подпрограммы, называются локальными по отношению к основной программе.

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

Количество уровней вложенности не ограничено.

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

Фактические параметры – это параметры, которые передаются подпрограмме при ее вызове. Количество, тип и порядок следования

формальных и фактических параметров должны совпадать.

При вызове подпрограммы работа главной программы приостанавливается, и управление вычислительным процессом передается на

участок кода, занимаемый данной подпрограммой. После окончания выполнения

подпрограммы, управление возвращается в точку вызова, и работа главной программы продолжается.

В основной программе вызов процедуры оформляется как отдельный оператор вызова процедуры:

ИмяПроцедуры(ФактическиеПараметры);

После выполнения процедуры работа основной программы продолжится с оператора, следующего за оператором вызова процедуры.

Функция во всем аналогична процедуре, но она возвращает в точку вызова

определенное значение – результат.

В теле (разделе операторов) функции должен находиться хотя бы один

оператор, который присваивает имени функции значение результата. Тип результата должен совпадать с ТипомРезультата, указанным в заголовке функции.

В основной программе функция вызывается посредством ее использования в некотором выражении.

Составим функцию power

для возведения вещественного числа в целую

неотрицательную степень. В функцию передаются два параметра: x– число, n–степень. Функция возвращает значение результата операции x в ст n

function power(x:real; n:byte):real; {заголовок функции}

var i:integer; {i– счетчик (локальн.)}

res:integer; {res– промежуточный результат (локальн.)}

begin

res:=1;

for i:=1 to n do res:=res*x;

power:=res; {присваивание имени функции значения результата}

end;

var side, cube, m_byte :real;

m_Kb : integer;

begin

{Различные способы вызова функции:}

write('Введите длину стороны куба:'); readln(m_Kb);

cube:=power(side,3); {в операторе присваивания}

writeln('Объем куба = ',cube);

end.

Процедура вычисления суммы двух чисел, введенных пользователем:

program ProcSumm;

procedure summ(x, y :integer); {заголовок

процедуры}

var s :longint; {s – локальная переменная}

begin

s := x + y;

writeln('Сумма = ', s);

end;

var a, b :integer;

begin

write('Введите a:'); readln(a);

write('Введите b:'); readln(b);

summ(a,b); {вызов процедуры - отдельный

оператор}

write('Значение вычислено.');

end.

Функция вычисления суммы двух чисел, введенных пользователем:

program FuncSumm;

function summ(x, y :integer):longint; {заголовок

функции}

var s :longint; {s – локальная переменная}

begin

s := x + y;

summ := s; {присваивание имени функции значения

результата}

end;

var a, b :integer;

c :longint;

begin

write('Введите a:'); readln(a);

write('Введите b:'); readln(b);

c := summ(a,b); {вызов функции из оператора присваивания}

writeln('Сумма = ', c);

write('Значение вычислено.');

{Функцию можно вызвать также из оператора

writeln:}

writeln('Сумма = ', summ(a,b));

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]