Пустой и составной операторы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Пустой и составной операторы



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

Составным оператором считается последовательность произвольных операторов, заключенная в операторные скобки – зарезервированные слова begin... end. Допускается произвольная глубина вложенности составных операторов. Составной оператор применяется там, где по синтаксическим правилам языка может стоять только один оператор, а нам надо выполнить несколько действий. В этом случае набор необходимых команд должен быть оформлен как составной оператор. По сути, все тело программы представляет собой один составной оператор.

Оператор присваивания

Оператор присваивания (рис. 10.1.) используется для задания значения переменных и имеет следующий синтаксис:

 
 

 


Рис. 10.1. Синтаксическая диаграмма оператора присваивания

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

x:= y + z;

done:= (i >= 1) and (i < 100);

hl:= [blue, succ(c)];

i:= sqr(j) – i * k;

Простейший ввод и вывод

Рассмотрим простейшие процедуры ввода и вывода. По умолчанию ввод осуществляется с клавиатуры, а вывод на экран.

К операторам ввода относятся:

read (<список переменных через запятую>);

readln (<список переменных>);

readln;

Второй отличается от первого тем, что после ввода переводит курсор на новую строку, точнее, в конце своей работы считывает с клавиатуры код клавиши < enter >. Третий оператор используется для организации паузы – выполнение программы продолжится, как правило, только после нажатия на клавиатуре клавиши < enter >.

Синтаксическая диаграмма оператора вызова стандартной процедуры read, организующей ввод данных в программу с клавиатуры (рис. 10.2.):

 

 
 

 

 


Рис. 10.2. Синтаксическая диаграмма оператора ввода

К операторам вывода относятся:

write (<список вывода>);

writeln (<список вывода>);

Синтаксическая диаграмма вызова стандартной процедуры write (рис. 10.3.):

 
 

 


Рис. 10.3. Синтаксическая диаграмма оператора вывода

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

Существует так называемый форматированный вывод. Можно задать количество позиций, отводимых под число. Для целых – после выражения или переменной через двоеточие указывается меньше какого количества позиций не может быть выделено значению. Для вещественных – дополнительно через двоеточие можно указать количество цифр в дробной части. При этом происходит округление в ближнюю сторону.

Пример 10.1: Простые вычисления.

program vvod_vyvod;

const n = 1.5;

var y 1, y 2: real; x: byte;

Begin

writeln ('Введите натуральное число <= 255');

readln (x);

y 1:=cos(n); y 2:=cos(x);

write ('Результаты вычислений: ');

writeln ('n=', n, ' y1=', y 1:7:4, cos(Pi/2):8:4);

{оператор выведет на экран:

Результаты вычислений: n= 1.50000000000000E+0000

y1= 0.0707 1.0000}

writeln ('x=', x:3, ' y2=', y 2:7:4);

end.

Контрольные вопросы

1. Сформулируйте определение линейного алгоритма.

2. Дайте определение пустого и составного оператора.

3. Сформулируйте назначение оператора присваивания.

4. Перечислите операторы ввода и вывода.

5. Дайте определение форматированного вывода.

Разветвляющиеся алгоритмы

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

Оператор перехода

Оператор безусловного перехода имеет вид (рис. 6.1.):

 
 

 


Рис. 11.1. Синтаксическая диаграмма оператора перехода

Он позволяет передать управление непосредственно на нужный оператор программы. Перед этим оператором должна располагаться метка, отделенная от него двоеточием. В Турбо Паскале в качестве меток выступают либо целые числа от 0 до 9999, либо идентификаторы. Все метки должны быть описаны в разделе объявления меток (рис. 11.2.) следующим образом:

 

 
 

 

 


Рис. 11.2. Синтаксическая диаграмма метки

 

Каждой меткой в программе может быть помечен только один оператор. Операторов перехода с одной и той же меткой можно писать любое количество. Необходимо, чтобы раздел описания метки, сама метка и оператор перехода с ее использованием располагались в пределах одного блока программы (см. тему процедуры и функции). Кроме того, нельзя передавать управление внутрь структурированных операторов (например, if, for, while, repeat и др.).

Условный оператор

Условный оператор if позволяет изменить порядок выполнения команд в зависимости от значения некоторого логического выражения, т.е. он осуществляет ветвление вычислительного процесса. Условный оператор имеет вид (рис. 11.3.):

 

 


Рис. 11.3. Синтаксическая диаграмма условного оператора

В случае истиности логического выражения, стоящего в условии, выполняется <оператор1>, а <оператор2> пропускается. При ложном значении логического выражения пропускается <оператор1> и выполняется <оператор2>.

Оператор if может быть полным (присутствуют обе ветви) или неполным (else –ветви нет, при ложном условии ничего не делается). По правилам каждая из ветвей может содержать либо один выполняемый оператор, либо несколько, объединенных в составной. Точка с запятой перед else считается ошибкой.

Пример 11.1:Ввести целое число. Вывести соответствующий ему символ ASCII–таблицы, либо сообщить, что такого символа нет (0–31 –коды управляющих символов, затем до 256 – коды печатаемых символов).

program ascii_symbol;

var i: word;

Begin

write ('Введите целое число: ');

readln (i);

if (i >31) and (i <256) then

writeln ('Соответствующий символ – ', chr(i))

else writeln ('Такого символа нет');

Readln

end.

Оператор выбора

Если у вас не два возможных варианта выполнения программы, а больше, то может использоваться оператор выбора CASE (рис. 6.4.).


-

       
 
 
   

 


 

Рис. 11.4. Синтаксическая диаграмма оператора выбора

Выражение после ключевого слова case называется селектором. Селектор должен иметь упорядоченный тип, кроме типа longint. Константы называются метками случаев. они должны относиться к тому же типу, что и переключатель.

Работа оператора case заключается в следующем. Вычисляется значение селектора. Если это значение совпадает с одной из меток случаев, то выполняется оператор, записанный после нее. Если значение селектора не совпало ни с одной из меток случаев, то выполняется оператор, следующий за else. Если ветвь else отсутствует, то управление передается оператору, следующему за переключателем. Диапазоны и метки случаев не должны пересекаться.

Пример 11.2:Вводится целое число, если это цифра, то определить четная она или нет, а если число, то определить попадает ли оно в диапазон от 10 до 100, если нет, то выдать соответствующее сообщение.

program chislo;

var i: integer;

Begin

write ('Введите целое число: ');

readln (i);

case i of

0, 2, 4, 6, 8: writeln ('Четная цифра');

1, 3, 5, 7, 9: writeln ('Нечетная цифра');

10...100, 200: writeln ('Число от 10 до 100 или 200');

else writeln ('Число либо отрицательное, либо > 100, но не 200');

end;

Readln

end.

Контрольные вопросы

1. Сформулируйте определение разветвляющегося алгоритма.

2. Перечислите виды алгоритмов ветвления.

3. Дайте определение условного оператора.

4. Охарактеризуйте работу оператора выбора.

5. Приведите пример использования операторов ветвления.

Циклические алгоритмы

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

Циклы с параметром

Оператор цикла for организует выполнение одного оператора заранее определенное число раз. Его еще называют цикл со счетчиком (рис. 12.1.).

 

 
 

 


Рис. 12.1. Синтаксическая диаграмма цикла с параметром

Идентификатор после ключевого слова for называется управляющей переменной или параметром цикла. Управляющая переменная должна иметь упорядоченный тип, совместимый по присваиванию с первым (начальным) и вторым (конечным) выражениями в заголовке цикла. Следовательно, начальное и конечное выражения также должны быть упорядоченного типа.

На первом шаге цикла параметр принимает начальное значение (н.з.). В этот же момент происходит вычисление (к.з.) – значения параметра на последнем шаге цикла. После каждого выполнения тела цикла, если параметр цикла не равен к.з., происходит изменение параметра на следующее большее или меньшее значение в зависимости от формы оператора for, т.е. неявно происходит выполнение одного из двух операторов:

<параметр>:= succ(<параметр>);

<параметр>:= pred(<параметр>);

В случае н.з. > к.з. в первой форме оператора или н.з. < к.з. во второй его форме ошибки не происходит, но цикл не выполняется ни разу. После завершения работы цикла значение параметра остается равным к.з.

Использовать цикл for при заранее известном количестве повторений. Не изменять параметр в теле цикла. При использовании кратных (вложенных) циклов применять разные переменные в качестве параметров. Определять до цикла значения всех используемых в нем переменных. Не ставить точку с запятой после do.

Пример 12.1: Вводятся 10 чисел, найти среди них количество положительных.

program cycle_for1;

var i, kn: byte; x: real;

Begin

kn:=0;

for i:=1 to 10 do

Begin

writeln ('Введите ', i,' число: ');

readln (x);

if x >0 then kn:= kn +1 {увеличиваем количество на 1}

end;

writeln ('Вы ввели ', kn, ' положительных чисел.');

Readln

end.

Пример 12.2: Напечатать буквы от 'Z' до 'A'.

program cycle_for2;

var c: char;

Begin

for c:='Z' downto 'A' do write (c);

End.

Пример 12.3:Вычислить n –е число Фиббоначчи. Числа Фиббоначчи строятся следующим образом: f(0)=f(1)=1; f(i +1)=f(i)+f(i –1); для i >=1. Это пример вычислений по рекуррентным формулам.

program fib;

var a, b, c: word; i, n: byte;

Begin

write ('введите номер числа Фиббоначчи ');

readln (n);

a:=1; { a =f(0), a соответствует f(i –2)}

b:=1; { b =f(1), b соответствует f(i –1)}

for i:=2 to n do

Begin

c:= a + b; { c соответствует f(i)}

a:= b; b:= c; {в качестве a и b берется следующая пара чисел}

end;

writeln (n, '–е число Фиббоначчи =', b); {для n >=2 b = c }

end.

Циклы с условием

Если заранее неизвестно число повторений цикла, то используются циклы с условием. В паскале имеется два типа таких циклов. Циклы while называют циклами с предусловием. Они имеют вид (рис. 12.2.):


Рис. 12.2. Синтаксическая диаграмма цикла с предусловием

Цикл while организует выполнение одного (возможно составного) оператора пока истинно логическое выражение, стоящее в заголовке цикла. Поскольку значение логического выражения проверяется в начале каждой итерации, то тело цикла может не выполниться ни разу. Таким образом, в этом цикле логическое выражение – это условие продолжения работы в цикле.

Другой вариант циклов с условием – это циклы Repeat. Их называют циклами с постусловием. Они имеют вид (рис. 12.3.):

 


Рис. 12.3. Синтаксическая диаграмма оператора цикла

Оператор repeat организует повторяющееся выполнение нескольких операторов до тех пор, пока не станет истинным условие, стоящее в until –части. Тело цикла обязательно выполняется хотя бы один раз. Таким образом, в этом цикле логическое выражение – это условие выхода из цикла.

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

Для того чтобы избежать зацикливания программы необходимо обеспечить изменение на каждом шаге цикла значения хотя бы одной переменной, входящей в условие цикла. После выхода из цикла со сложным условием (с использованием операций and, or, xor), как правило, необходима проверка того, по какому условию цикл завершен.

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

program cycle_while;

var x, y, sum: real; otv: char;

Begin

sum:=0;

otv ='Д';

while (otv ='Д') or (otv ='д') do

Begin

write ('Введите числа x, y > 0 ');

readln (x, y);

writeln ('Их произведение = ', x * y:8:3);

sum:= sum + x + y;

write ('Завершить программу (Д/Н)? ');

readln (otv);

end;

writeln ('Общая сумма = ', sum:8:3);

Readln

End.

Пример 12.5: Втой же задаче можно использовать другой вид оператора цикла с условием:

program cycle_repeat;

var x, y, sum: real; otv: char;

Begin

sum:=0;

Repeat

write ('Введите числа x, y > 0 ');

readln (x, y);

writeln ('Их произведение = ', x * y:8:3);

sum:= sum + x + y;

write ('Завершить программу (Д/Н)? ');

readln (otv);

until (otv ='Д') or (otv ='д');

writeln ('Общая сумма = ', sum:8:3);

Readln

end.

Пример 12.6:Нахождение наибольшего общего делителя двух целых чисел с помощью Алгоритма Эвклида.

program Evklid;

var a, b, c: integer;

Begin

write ('введите два целых числа: ');

readln (a, b);

while b <> 0 do

Begin

c:= a mod b;

a:= b;

b:= c;

end;

writeln ('наибольший общий делитель = ', a);

Readln

end.

Контрольные вопросы

1. Перечислите виды операторов цикла.

2. Охарактеризуйте оператор цикла for.

3. Укажите требования к управляющей переменной.

4. Охарактеризуйте оператор цикла while.

5. Охарактеризуйте оператор цикла repeat.



Поделиться:


Последнее изменение этой страницы: 2016-09-19; просмотров: 504; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.90.50.252 (0.099 с.)