Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы алгоритмизации и программирования. Часть 1. Конспект лекций.pdf
Скачиваний:
0
Добавлен:
09.08.2026
Размер:
465 Кб
Скачать

Program Summa; var i,S:word;

begin S:=0;

for i:=1 to 100 do S:=S+i; writeln(S)

end;

Замечание. В операторах цикла for инкремент переменной цикла (в нашем примере это i:=i+1) осуществляется автоматически и писать в явном виде нет нужды.

Сумму можно просчитать в обратном порядке: S = 100+99+98+...+ +3+2+1. В таком случае удобней использовать цикл с обратным отсчетом.

Формат записи. for <нач. знач-е> downto <кон. знач-е> do <оператор>; Перепишем код:

Program Summa; var i,S:word;

begin S:=0;

for i:=100 downto 1 do S:=S+i; writeln(S)

end;

Оператор цикла while

Формат записи: While <условие> do <оператор>;

Понимать нужно так: Пока(while) <условие> истинно, выполнять(do) <оператор>. Перепишем наш пример с использованиемwhile:

20

var i,S:word; begin

S:=0;

i:=1;

while i<=100 do begin S:=S+i;

i:=i+1

end;

writeln(S)

end;

Внимание: В формате записи указано, что используется только один <оператор>. Когда нужно использовать сразу несколько операторов, их нужно заключать между ключевыми словами begin и end, объединив в один составной оператор.

Оператор цикла repeat

Формат записи: Repeat <операторЫ> until <условие>;

Понимать нужно так: Повторять(repeat) <операторЫ> до тех пор (until), пока <условие> не станет истинным. Перепишем наш пример:

Program

Summa;

var i,S:word; begin

S:=0;

i:=1; Repeat

S:=S+i;

i:=i+1 until i>100;

writeln(S)

end;

Вопрос. Циклы for и while называются циклами с предусловием (с предпроверкой условия), а цикл repeat – циклом с постусловием (с после проверкой). Может ли цикл for или while ни разу не выполниться?

А цикл repeat?

21

Подпрограммы в ТР

Подпрограммой в ТР называется особым образом оформленный фрагмент программы, имеющий свое собственное имя и вызываемый из кода программы для ее исполнения. Обычно часто повторяемые фрагменты программы выделяют в отдельную подрограмму, за счет чего достигаются компактность и наглядность всей программы. В ТР различают два вида подпрограмм: процедуры и функции. Они имеют одно принципиальное различие: процедура может просто выполнить свой код и не сообщить о результатах своей работы, а функция после выполнения своего кода выдает на выход результат своей работы.

Примеры. Readln, Writeln – процедуры;

Random – функция, возвращающая случайное число. Подпрограммы Readln, Writeln, Random и другие встроены в ТР и

являются стандартными. На практике, как правило, программист вынужден разрабатывать собственные подпрограммы и для этого в ТР имеется поддержка написания подпрограммы. Подпрограммы описываются в разделе «Описания».

Формат описания: процедуры: Procedure <имя п/п> [<список параметров и их типы>];

функции: function <имя п/п> [<список пар-в и их типы>]:<тип рез-та>;

Пример. Получить сумму двух слагаемых a и b в отдельной подпрограмме.

var a,b,s:integer;

var a,b,s:integer;

Procedure Sum-

function Summa(a,b:integer):integer;

ma(a,b:integer);

begin

begin

Summa:=a+b

s:=a+b

end;

end;

begin

begin

Readln(a,b);

Readln(a,b);

s:=Summa(a,b);

Summa(a,b);

Writeln(s)

Writeln(s)

end.

end.

 

Пусть у нас имеется программа по упорядочиванию N случайных чисел:

Program Sorting;

CONST N=10;

var a:array[1..N] of integer;

22

i,j,c:integer; begin

for i:=1 to N do a[i]:=Random(N);{зададим случ. значения эл-там ai} for i:=1 to N do write(a[i],’ ’);{выводим на экран исходный массив}

{------------------ Производим сортировку...

-------------------}

for i:=1 to N-1 do

 

for j:=i+1 to N do

 

if a[i]>a[j] then begin c:=a[i]; a[i]:=a[j]; a[j]:=c end;

{-------------------------------------------------------------------------

}

for i:=1 to N do write(a[i],’ ’);{выводим на экран упоряд. массив}

end.

Как видим, в программе есть дублирующийся код – код вывода элементов массива на экран. Выделим его в отдельную подпрограмму и назовем его, скажем, DisplayArray. Можно также выделить функционально автономный код в подпрограмму InitArray (задание первоначальных значений массиву А), в подпрограмму сортировки массива SortArray и в подпрограмму обмена двух переменных Swap. В итоге у нас программа, разбитая на подпрограммы, могла бы выглядеть так:

Program Sorting;

CONST N=10;

var a:array[1..N] of integer; i,j,c:integer;

Procedure DisplayArray; begin

for i:=1 to N do write(a[i],’ ’);

writeln {переход на следующую строку} end;

Procedure InitArray; begin

for i:=1 to N do a[i]:=Random(N) end;

function Swap(var a,b:integer):integer; var c:integer;

begin

c:=a; a:=b; b:=c end;

Procedure SortArray; begin

for i:=1 to N-1 do

23

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