Вот фрагмент программы, которая складывает два числа:
WriteLn('Введите два числа');
ReadLn(a,b);
WriteLn('Сумма равна ' ,a+b);
Вот фрагмент программы, которая возводит число в квадрат:
WriteLn('Введите число');
ReadLn(a);
WriteLn('Квадрат числа равен ' ,a*a);
Пусть мы хотим сделать программу, которая бы по желанию пользователя или складывала два числа, или возводила одно число в квадрат, то есть выполняла или первый или второй фрагмент.
Начинаться наша программа могла бы примерно так:
Var Otvet: String;
Begin
WriteLn('Чем займемся - сложением или возведением в квадрат?');
ReadLn(Otvet);
if Otvet = 'сложением' then . . . . else . . . .
Здесь после then мы должны бы вставить первый фрагмент, а после else второй. Однако, тут возникает проблема. Каждый из фрагментов состоит из нескольких операторов, а синтаксис оператора if разрешает ставить после then и else только по одному оператору. Чтобы преодолеть эту трудность, в Паскале есть средство превратить последовательность записанных друг за другом операторов формально в один оператор. Для этого последовательность заключается между словами begin и end и получившаяся конструкция называется составным оператором. Можно привести сравнение с математическими скобками, которыми определяют порядок действий. Например, язык программирования php использует вместо begin и end, фигурные скобки – {…}.
Посмотрим на первый фрагмент в виде составного оператора:
begin
WriteLn('Введите два числа');
ReadLn(a,b);
WriteLn('Сумма равна ' , a+b)
end
Компьютер выполняет составной оператор неотличимо от последовательности операторов, из которых он состоит, однако титул составного оператора позволяет ему считаться одним оператором и поэтому быть вхожим в те места программы, в которые разрешен вход только единичным операторам, а не их последовательностям, как, например, имеет место в нашем случае с оператором if.
Вот какая получится программа для нашей задачи:
Var Otvet: String;
a,b :Integer;
Begin
WriteLn('Чем займемся - сложением или возведением в квадрат?');
ReadLn(Otvet);
if Otvet = 'сложением' then
begin
WriteLn('Введите два числа');
ReadLn(a,b);
WriteLn('Сумма равна ', a+b)
end
else
begin
WriteLn('Введите число');
ReadLn(a);
WriteLn('Квадрат числа равен ', a*a)
end;
WriteLn('Счет завершен')
End.
У нашей программы есть недостаток. Если при ответе на вопрос компьютера мы чуть-чуть ошибёмся, например, ответим не «сложением», а «сложение», компьютер будет выполнять возведение в квадрат, так как в условии оператора if сравниваемые строки должны совпадать полностью. Научившись выполнять операции над строками, вы научитесь избегать таких ситуаций.
Условимся, что begin и end составного оператора будем писать с маленькой буквы, а Begin и End тела программы с большой. Это поможет избежать путаницы при написании кода.
При написании программы число служебных слов
beginдолжно совпадать с числом служебных словend.
Пример решение задачи с использованием составного оператора
Задача:
Напишите программу решения квадратного уравнения с проверкой дискриминанта на наличие корней.
Решение:
Var a,b,c: Real;
D: Real;
x1,x2: Real;
Begin
WriteLn('Введите коэффициенты а, b, с ');
Readln(a,b,c);
D:=b*b-4*a*c;
if d<0 then WriteLn('Корней нет');
if d=0 then
begin
x1:=-b/(2*a);
WriteLn('Корень уравнения x=', x1:9:3)
end;
if d>0 then
begin
x1:=(-b + sqrt(D))/(2*a);
x2:=(-b-sqrt(D))/(2*a);
WriteLn('Корни уравнения:');
WriteLn('x1=', x1:9:3 ,' x1=', x2:9:3)
end
End.
Задание 1
Найти значение y, если x вводится с клавиатуры.

Не забудьте проверить выражение внутри корня на равенство отрицательному значению и нулю.
Ступенчатая запись программы
Обратите внимание на то, на что не обращает внимания компьютер, а именно на отступы от левого края листа в записи строк программ. Строки Var, Begin и End записаны без отступа. Между словами Begin и End записаны четыре оператора: WriteLn, ReadLn, if и WriteLn. Все они выполняются по порядку, один за другим, поэтому каждый из них записан с одинаковым отступом. Если оператор сложный, то есть включает в себя другие операторы (мы знаем пока два таких оператора - if и составной), то составляющие его операторы записываются еще правее. Слова, составляющие пару (then и else, begin и end) записываются друг под другом.
Сделано все это для удобства чтения программы, для того, чтобы глаз мог сразу же уловить структуру программы, а именно, из каких частей состоит как сама программа, так и каждый из элементов, ее составляющих. Впрочем, вам с первого взгляда может показаться, что такая запись, наоборот, неудобна для чтения. Однако, заметьте, что ступенчатая запись принята во всем мире и глаза профессиональных программистов привыкли именно к ней. Настолько привыкли, что программа, записанная без соблюдения ступенчатого стиля, вызывает раздражение. Конечно, допустимы и некоторые отклонения от ступенчатого стиля. Например, несколько коротких похожих операторов вполне можно записать в одну строку:
a:=0; b:=0; c:=0; f:=4;
Этим мы экономим дефицитное место по вертикали экрана или листа бумаги.
Турбо-Паскаль 7.0 - Самоучитель
Лукин С.Н.