- •Содержание
- •Алгоритм. Блок-схема. Элементы блок-схемы
- •Циклы
- •Массивы. Работа с массивами
- •Сортировка данных
- •Матрица. Работа с матрицами
- •Язык программирования Turbo Pascal
- •Алфавит языка Turbo Pascal
- •Вещественные типы данных
- •Логический тип данных
- •Символьный тип данных
- •Массивы в ТР
- •Cтроки в ТР
- •Оператор присваивания в ТР
- •Целочисленные типы данных
- •Условный оператор
- •Составной и пустой оператор
- •Оператор выбора
- •Оператор перехода и метка
- •Циклы в ТР
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла repeat
- •Подпрограммы в ТР
- •Локальность имен в ТР
- •Формальные и фактические параметры
- •Рекурсия. Рекурсивные функции
- •Модули в ТР
- •Стандартные модули в ТР
- •Использование модуля GRAPH
- •Файлы в ТР
- •Общие принципы работы с файлами в ОС
- •Элементы объектно-ориентированного программирования
- •Инкапсуляция
- •Наследование
- •Полиморфизм
- •Список литературы
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
