Операторы присваивания, операторы ввода-вывода

Содержание: 

  1. Операторы присваивания
  2. Операторы ввода-вывода
  3. Составной оператор
  4. Условный оператор
  5. Условный оператор Case (оператор варианта)

 

Поскольку язык Pascal алгоритмический, то для записи шагов алгоритмов, для наглядного однозначного представления алгоритмов в стиле структурного программирования существует набор операторов. Основные операторы считаются простыми, остальные – структурными, т.е. в их состав могут входить другие операторы, причем глубина «вложенности» операторов не ограничена.

 

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

Оператор присваивания предназначен для присваивания переменной значения выражения. Оператор обозначается символом «:=», в левой части указывается имя переменной, в правой – вычисляемое выражение. Выражение может составлять число, знаки арифметических действий, круглые скобки, переменные и константы, процедуры и функции, допускаемое вложение друг в друга. Обязательное условие — совместность типов данных. Оператор считается синтаксически правильным, если тип выражения в правой части совпадает с типом переменной. Исключение составляет случай, когда выражение имеет целый тип, а переменная – вещественный. Допускается использование этого оператора с переменными любого типа, кроме файлового. Синтаксис:

<Оператор присваивания> :: = < Переменная> : = <Выражение>

Если в левой части оператора присваивания указана переменная типа Boolean, то в правой части оператора должно быть задано логическое выражение, задающее правило вычисления логического значения (true или false). Синтаксис:

<Логич. оператор присваивания> ::= < Логическая переменная> := <Логическое выражение>

Логическое выражение есть логическая формула, записанная на языке программирования. Логическое выражение состоит из логических операндов, связанных логическими операциями и круглыми скобками. Результатом вычисления логического выражения является булева величина (true или false). Логическими операндами могут быть логические константы, переменные, функции, операции отношения. Один логический операнд является простейшей формой логического выражения.

 

Примеры использования оператора присваивания:

с переменными целого типа:  x := 200;

вещественного:  y := Sin(Pi/3);

символьного:      с := ‘6’;

булевского:         test := false;

Примеры:

  1. Вычисление длины окружности L (тип — real):
L := 2 * Pi * R

 

R – радиус окружности (тип – integer или real)

Pi – константа, равная значению p.

  1. Присвоить переменной Flag (тип — Boolean) значение true, если переменная X (тип — real) находится в интервале (0; 1), и false – в противном случае:

                 

Flag := (X>0) and (X<1)

 

  1. Присвоить переменной Rect (тип — Boolean) значение true, если из отрезков длиной X, Y, Z (тип — real) можно построить треугольник, и false – в противном случае:

                     

Rect := (X < Y + Z) and (Y < X + Z) and (Z < X + Y)

 

Операторы ввода-вывода

Ввод данных – это передача информации от внешних устройств в оперативную память. Вводятся, как правило, исходные данные решаемой задачи.

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

Основными устройствами ввода-вывода у ПК являются клавиатура и экран монитора. Именно через эти устройства главным образом осуществляется диалог между человеком и ПК.

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

Существует две формы оператора ввода: Read и ReadLn. Процедура ввода с клавиатуры имеет следующий формат:

                     Read (<список ввода>),

где <список ввода> – это последовательность имен переменных, разделенных запятыми.

Оператор обеспечивает ввод данных разных типов с клавиатуры. В скобках указываются имена переменных, которым присвоятся введенные значения. При вводе нескольких значений с помощью одного оператора они разделяются символом <пробел>. Для окончания ввода (завершения работы оператора Read) нажимается клавиша <Enter>. Если же в программе есть несколько подряд идущих операторов Read, то данные вводятся потоком, т.е. без нажатия <Enter>.

Другой вариант оператора ввода с клавиатуры имеет вид:

                     ReadLn (<список ввода>)   

Оператор ReadLn аналогичен предыдущему, отличие заключается в том, что при выполнении одного оператора ReadLn курсор на экране монитора переходит на новую строку.

Примеры:

Read (a);

Read (a, b, c);

ReadLn (x, y);

 

Аналогично существует две формы оператора вывода. Оператор вывода на экран (обращение к стандартной процедуре вывода) имеет следующий формат:

           

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

 

Здесь элементами списка вывода могут быть выражения различных типов. В результате выполнения данного оператора значения списка будут выведены на экран монитора.

Примеры:

Write (234);   {выводится целая константа}

Write (A + B - 2);   {выводится результат вычисления выражения}

Write (X, SUMMA, ARG1, ARG2);   {выводятся значения переменных}

 

 Если необходимо вывести на экран какой-либо текст, то внутри оператора Write этот текст записывается в апострофах.

Пример:

x:=5;

Write (‘x=’, x);   {результат выполнения этих операторов: x=5}

 

Второй вариант процедуры вывода на экран:

       

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

 

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

Примеры:

  1. WriteLn;
                      WriteLn;         {выполнение этой последовательности команд приведет к тому, что курсор опустится на 3 строки вниз}
    
                      WriteLn;
    
    WriteLn (‘Hello World!’);
    Write (‘a=’, a, ‘b=’, b, ‘c=’, c);
    x:=4;
    y:=3;
    
    WriteLn (‘Значение выражения =’, x + sqr(y)); { Значение выражения =13 }

     

В операторах вывода Write и WriteLn имеется возможность установить ширину поля вывода. Если X и I – целочисленные выражения, а Y — вещественное выражение, то вызов

Write ( X : I, Y : I ) — печатает значения X и Y каждое в крайние правые позиции полей шириной I;

Write ( Y : I : X) – вызовом в крайние правые позиции поля шириной I символов выводится десятичное представление значения Y в формате с фиксированной точкой, причем после десятичной точки выводится X цифр, представляющих дробную часть числа.

Составной оператор

Для того чтобы задать последовательное выполнение (по порядку, один за другим) нескольких операторов, в языке Pascal существует составной оператор. Операторы, входящие в составной, разделяются символом «;», в начале ставится служебное слово Begin, в конце – End.

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

Пример:

Begin

            X:=10;

            WriteLn (‘Y=’, X* SQR(X))

End

 

Обратите внимание: перед служебным словом End разделитель (символ «;») не ставится.

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

Очень часто так же, как и в жизни, при решении задач некоторые действия выполняются в зависимости от истинности каких-либо условий. Например, мы берем с собой зонт, если идет дождь или на небе тучи. Или часто встречающиеся в математике определения функций:

если x<0, то f(x)=x+1;

если x>=0, то f(x)=2x.

Здесь значение функции f вычисляется в зависимости от величины x по разным формулам.

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

Полная форма:

                 

if  <условие>  then <оператор1>

                  else <оператор2>;

 

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

Если значение логического выражения – true, то выполняется <оператор1>, если false, то выполняется <оператор2>.

И по ветке then, и по ветке else должен выполняться единственный оператор. Если по смыслу задачи необходимо выполнить несколько операторов, тогда следует использовать составной оператор.

Часть условного оператора, начинающаяся со слова else, может отсутствовать, такая форма оператора называется сокращенной и выглядит следующим образом:

if  <условие>  then <оператор>;

 

Оператор в этом случае выполняется, если условие истинно, иначе программа переходит к следующему оператору.

Пример полной формы: рассмотрим определение функции f(x):

if x<0 then f:=x+1

            else f:=2*x;

 

Если в нашем примере описать логическую переменную В, значение которой будет равно true, если x<0, и false иначе, то можно записать так:

B:=x<0;

If B then f:=x+1

        else f:=2*x;

 

Пример краткой формы:

if not((x<3) and (x>1))  then  y:=sqr(x);

 

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

if <условие1> then if <условие2> then <оператор1> else <оператор2>

 

.

В данном случае необходимо помнить, что служебное слово else всегда ассоциируется с ближайшим по тексту программы словом if, которое еще не связано с else. А чтобы такая двусмысленность не возникала, лучше всего пользоваться составным оператором:

if <условие1> then

begin

if <условие2> then <оператор1>

else  <оператор2>

 end;

 

Теперь дадим строгое описание условного оператора в форме синтаксической диаграммы:

123

То, что мы раньше называли условием, есть логическое выражение, которое вычисляется в первую очередь. Если его значение равно true, то будет выполняться <Оператор1>, если false, то <Оператор2> для полной формы или сразу следующий оператор после условного для неполной формы.

Пример: По длинам трех сторон треугольника a, b, c вычислить его площадь.

Для решения задачи используется формула Герона: , где  — полупериметр треугольника. Исходные данные должны удовлетворять основному соотношению для сторон треугольника: длина каждой стороны должна быть меньше длин двух других сторон.

Program Geron;

Var A, B, C, P, S: Real;

Begin

WriteLn(‘Введите длины сторон треугольника:’);

Write (‘a=’); ReadLn(A);

Write (‘b=’); ReadLn(B);

Write (‘c=’); ReadLn(C);

If (A>0) And (B>0) And (C>0) And (A+B>C) And (B+C>A) And (A+C>B)

Then Begin

P:= (A+B+C) / 2;

S:= Sqrt (P*(P-A)*(P-B)*(P-C));

WriteLn(‘Площадь=’, S)

End

Else WriteLn(‘Неверные исходные данные’)

End.

 

Условный оператор Case (оператор варианта)

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

case <выражение> of

            <значение1> : <оператор1>;

            <значение2> : <оператор2>;

            <значение3> : <оператор3>;

                        …                        …

      else <оператор N>

end;

 

<оператор N> выполнится только в том случае, если значение выражения не совпадет ни с одним из <значений I>. При использовании оператора Case необходимо помнить о том, что значение выражения и <значения I> должны быть одного типа.

Пример:

Присвоить строке S значение дня недели для заданного числа D при условии, что в месяце 31 день и 1-ое число – понедельник.

Для построения алгоритма воспользуемся операцией mod, позволяющий вычислить остаток от деления двух целых чисел, и с условием, что 1-ое число – понедельник. Тогда можно записать следующий оператор Case:

case D mod 7 of                                                case D mod 7 of

1 : S:= ‘понедельник’;                                            1 : S:= ‘понедельник’;   

2 : S:= ‘вторник’;                                                2 : S:= ‘вторник’;

3 : S:= ‘среда’;                                                  3 : S:= ‘среда’;

4 : S:= ‘четверг’;                                                4 : S:= ‘четверг’;

5 : S:= ‘пятница’;                                                5 : S:= ‘пятница’;

6 : S:= ‘суббота’;                                                6 : S:= ‘суббота’;

7 : S:= ‘воскресенье’;                                           else : S:= ‘воскресенье’;

end;                                                             end;

 

Чтобы завершить построение алгоритма решения поставленной задачи, необходимо ограничить область возможных значений переменной D (тип — integer):

If (D>=1) and (D<=31) then

case D mod 7 of

1 : S:= ‘понедельник’;                                            

2 : S:= ‘вторник’;            

3 : S:= ‘среда’;                                                  

4 : S:= ‘четверг’;                                              

5 : S:= ‘пятница’;                                             

6 : S:= ‘суббота’;                                              

else : S:= ‘воскресенье’;

end;

   

В качестве <значения> можно также задать список и (или) диапазон значений.

Пример:

case X of

1 .. 2 : F:=5;

3, 4, 10 .. 20 : F:=10;

5, 6 : F:=15;

else WriteLn (‘Введен неправильный параметр!’)

end;

 

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

  1. Как работает оператор присваивания?
  2. Приведите синтаксис оператора присваивания.
  3. Что такое ввод данных?
  4. Что такое вывод данных?
  5. Перечислите формы операторов ввода данных.
  6. Перечислите формы операторов вывода данных.
  7. Сформулируйте правила записи оператора IF.
  8. Что такое вложенный оператор IF?
  9. Что представляет собой оператор варианта?