Что делает оператор присваивания. Оператор присвоения

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

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

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

Форма оператора присваивания:

где A – имя переменной (левая часть оператора присваивания);

B – выражение для вычисления нового значения (правая часть оператора присваивания). Тип результата выражения должен быть совместим с типом переменной A.

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

1) вычисляется выражение правой части оператора присваивания;

2) результат присваивается переменной левой части оператора: копируется в область оперативной памяти, выделенную переменной левой части оператора присваивания.

Примеры. 1. Традиционное представление арифметического выражения

Z:= (X +Y) + (X – Y)

(C – 0.5) (X*A)

На Паскале: Z:= (X +Y) / (C – 0.5) + (X – Y) / (X*A) ;

2. Традиционно: Ai = Bi+1 + Ci, j ; На Паскале: A [ I ] := B [ I + 1 ] + C [ I, J ];

В алгебре нет аналогов следующих операторов: I:= I + 1; X:= X + DX; С помощью данных операторов переменные I и X получают приращения равные соответственно 1 и DX.

Операнды в выражениях соединяются знаками операций, которые могут быть одноместные (например, +X, -Y, NOT Z; где NOT – не) или двухместные (например: X + Y, A * B, C < D, E OR F, где OR – или, E AND F, где AND – и).

Операции различаются по степени приоритета:

1) одноместные операции (+, -, NOT);

2) мультипликативные (размножающие) операции (*, /, DIV (ц/деление), MOD (остаток ц/деления), AND, SHL (сдвиг влево), SHR (сдвиг вправо);

3) аддитивные (суммирующие) операции: +, -, OR, XOR (исключить ИЛИ);



4) операции отношения: =, <>, <, <=, >=, >, IN (В) – принадлежность множеству.

Если нет скобок, операции одного уровня приоритета (ранга) выполняются в последовательности их написания слева направо. Операции различных рангов выполняются в последовательности их приоритета.

Последовательность вычисления выражений:

1) Сначала полностью вычисляются выражения в скобках, начиная с самых внутренних;

2) Операции одного ранга (однородные) выполняются последовательно слева направо;

3) При неоднородных операциях последовательность выполнения операций следующая:

a) значения функций;

b) одноместные операции (например, -х, +а);

c) двухместные операции в порядке их приоритета.

Выражения на Паскале пишут на одном уровне, без изменения уровня написания индексов массивов. При написании выражений нельзя:

1) пропускать знак * - умножения;

2) при переносе выражения на следующую строку повторять знак арифметической операции.

При написании выражений допускается:

1) не писать + в одноместной операции, т.е. можно писать A:= X, а не A:= +X;

2) делать пробелы между операндами, знаками операций и скобками;

3) перенос (продолжение) выражения на следующую строку, не разрывая идентификатора, ключевых слов и чисел;

4) использовать лишние скобки для удобства чтения выражений.

Для использования в программе математических функций необ- ходимо подключить библитеку math.h

Определенную проблему представляет возведение Х в степень n. Функция pow не может возводить отрицательные числа в дробную степень. В этом случае можно воспользоваться формулой n n ln X X e , 0    X , которая программируется с помощью стандартных функций на языке Си – -exp(n*log(fabs(x))) или – pow(fabs(x),y).

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

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

переменная = выражение;

Данный оператор работает следующим образом: вначале вычисляется выражение, записанное справа от символа операции = (равно), затем полученный результат присваивается переменной, стоящей слева от знака = . Тип результата должен совпадать с типом переменной, записанной слева, или быть к нему приводимым.

Слева от знака = может быть только переменная, справа же можно записать и константу, и переменную и вообще выражение любой сложности.

18Множественное присваивание.

Оператор присваивания - это самый употребительный оператор. Его назначение - присвоить новое значение какой-либо переменной. В C++ имеется три формы этого оператора.

переменная = выражение;

Множественное присваивание - в таком операторе последовательно справа налево нескольким переменным присваивается одно и то же значение

19Составное присваивание

Присваивание с одновременным выполнением какой-либо операции в общем виде записывается так:

переменная знак_операции = выражение;

и равносильно записи

переменная = переменная знак_операции выражение ;

20Логические операции и операции отношения

Логические операции выполняются над логическими значениями ИСТИНА (true) и ЛОЖЬ (false). В языке С/C++ ложью является 0, а истина – любое значе- ние, отличное от нуля. Результатами операции отношения или логической опера- ции является ИСТИНА (true, 1) или ЛОЖЬ (false, 0). В С/C++ определены следующие логические операции ИЛИ (||), И(&&), НЕТ (!)

Операция отношения

Операции отношения возвращают в качестве результата логическое значе- ние. Таких операций 6: >, >=, <=, == (равно), !=(не равно).

19. Составное присваивание

Кроме простого присваивания, имеется целая группа операций присваивания, которые объединяют простое присваивание с одной из бинарных операций. Такие операции называются составными операциями присваивания и имеют вид:

(операнд-1) (бинарная операция) = (операнд-2) .

Составное присваивание по результату эквивалентно следующему простому присваиванию:

(операнд-1) = (операнд-1) (бинарное операция) (операнд-2) .

Отметим, что выражение составного присваивания с точки зрения реализации не эквивалентно простому присваиванию, так как в последнем операнд-1 вычисляется дважды.

Каждая операция составного присваивания выполняет преобразования, которые осуществляются соответствующей бинарной операцией. Левым операндом операций (+=) (-=) может быть указатель, в то время как правый операнд должен быть целым числом.

double arr={ 2.0, 3.3, 5.2, 7.5 } ; double b=3.0; b+=arr; /* эквивалентно b=b+arr */ arr/=b+1; /* эквивалентно arr=arr/(b+1) */

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

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

Одним из основных операторов является оператор присвоения. Он используется для присвоения значения переменной. При этом значение выражения, расположенного справа от знака присвоения присваивается переменной, индентификатор которой расположен слева от знака присваивания.

Оператор присваивания можно использовать для присваивания значений

переменной любого типа, кроме файлового. Единственным условием является,

чтобы переменная /или функция/ и выражение имели один и тот же тип. Исключение составляет случай, когда переменная имеет тип real, тогда выражение может быть и действительного и целочисленного типа.

Здесь a – простая или индексная переменная; b – арифметическое или логическое выражение. Выполнение оператора состоит в вычислении выражения, находящегося справа от знака “:=”, и присвоения полученного значения левой части оператора с учетом типа находящейся там переменной. Примеры:

angle:= angle * p1;

AccessOK:= False;

SpherVol:= 4 * p1 * R * R;

3.3.2. Ввод – вывод данных

Ввод данных осуществляется бесформатными операторами ввода:

Read (a 1 ,…,a n); Readln (a 1 ,…,a n);,

где а 1 ,…,а n – список переменных.

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

Ввод значений элементов массива осуществляется как перечислением элементов в списке, так и с использованием операторов цикла, например:

Read (a, a, a,…)

for i:=1 to n do

for j:=1 to m do

read (a);.

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

Пример : ввести значения элементов вектора Х и матрицы А, которые соответственно равны:

Х = (5, 1.2, 0.1, 7, 8.6) А = 3, 0, 6, 14, 5

0, 0, 0, 99, 12

Значения элементов могут быть определены путем их инициализации:

Const X: array of real = (5.0, 1.2, 0.1, 7.0, 8.6);

A: array of integer = ((4, 5, 10, 8, 0),

(7, 9, 25, 0, 1),

(3, 0, 6, 14, 5),

(0, 0, 0, 99, 12));.

Вывод данных на дисплей осуществляется операторами write и writeln, например:

write (‘x=’, x:3, ‘ y=’, y:8:3);

На экран дисплея выводятся: значения переменной целого типа X, для которой выделяется 3 позиции, переменной Y вещественного типа, занимает 8 позиций. При атом под дробную часть переменной Y отводится 3 позиции; у переменной Х выводится только целая часть. Перед числовыми значениями переменных выводятся поясняющие их информации, состоящие из имен переменных.

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

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

Идентификатор: = выражение. Здесь идентификатор – имя переменной, переменная хранится в ячейке памяти с именем – идентификатор. тип ячейки памяти определен в разделе описаний. Выражение может быть арифметическим, логическим или каким-либо другим, в котором уже известны (определены) все входящие в его состав идентификаторы.

Замечание 1. Тип значения выражения и тип идентификатора должны совпадать, иначе error - ошибка.



Замечание 2. При наличии хотя бы одной ошибки программа не выполняется.

Пример. Пусть имеются ячейки памяти с именами a, b, c; ячейки таковы, что в них могут быть помещены величины только целого типа. достигается это описанием: Var a, d, c: integer, где Var - начало раздела описания переменных, a, b, c - идентификаторы. Integer означает целый, т.е. в разделе Var идентификаторы (имена) переменных определены как целые.

Работа описания: встретив такое описание, ЭВМ выдаёт три ячейки памяти с именами a, b, c, причем такие, чтобы туда могли быть помещены целые числа. Запишем оператор присваивания:

Работа оператора: машина должна иметь описание идентификаторов a, b, c.

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

2.2. комментарии

Введем понятие комментария. Комментарий – это всё, что заключено между скобками { }. Символы, заключенные между этими скобками, не воспринимаются машиной, но выдаются пользователю. Комментарии используются пользователем для объяснения алгоритма.

2.3. Программа

Напишем программу вычисления a = c+b. Программа начинается с заголовка Program – имя программы; затем идут разделы описаний (до 5) и раздел операторов, который начинается словом Begin и заканчивается END. (end с точкой, точка – конец программы). Каждое описание и оператор заканчиваются символом ";"

Program Prim1; {заголовок программы}

Var a,b,c:integer; {раздел описания переменных, выделение}

{ячеек памяти для хранения целых величин}

BEGIN {начало раздела операторов}

c:=547; b:=42; {занесение в ячейки c и b начальных значений}

a:=c+b; {вычисление значения и выдача на}

writeln(a); {экран (write - писать) значения a}

END. {конец программы}.

Напоминаем, что тексты, заключённые в скобки { }, являются комментариями, не являются частью программы и могут быть опущены, таким образом, программа для ЭВМ имеет следующий вид:

Программа записывается в виде строк. Максимальная длина строки 255 символов, но не стоит делать строки длиннее строки экрана – 80 символов, иначе строки будут "прятаться" за пределами окна экрана, хотя строки и можно просмотреть, передвигая "окно" (рис. 2.2).



"Хорошее" расположение строк "Плохое" расположение строк

Рис. 2.2

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

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

В программе Prim1 мы задавали исходные данные с помощью оператора присваивания, что не всегда удобно, если одну и ту же программу нужно просчитывать с различными исходными данными. Для присвоения начальных значений можно использовать оператор readln (идентификатор, идентификатор,...,идентификатор); например, readln (c,b). встретив такой оператор, машина остановится и будет ждать, пока пользователь не наберет на клавиатуре значение с, нажмет клавишу "пробел”, наберет значение b и нажмет клавишу ENTER (ввод).значения величин c и b отобразятся на экране и после нажатия клавиши ENTER занесутся в ячейки памяти машины с именами с и b соответственно. тогда программа Prim1 примет вид:

Var a, b, c: integer;

BEGIN readln (c,b);

Замечание 1. Напомним, что машине безразлично, строчные или прописные буквы одинаковых слов end, end и end (но не для вас).

Замечание 2. Удобно ставить Readln перед END, так как после выполнения программы машина выдаёт на экран окно текста программы, а результат "прячется" за этим окном и, чтобы его посмотреть, необходимо убрать окно с программой с помощью нажатия клавиш. Если перед END имеется Readln, то программа не завершит работу, пока вы не нажмете клавишу ENTER, т.е. в данном случае на экран будет выведено значение а. Вы посмотрите результат и нажмете ENTER для входа в редактор языка Паскаль.


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

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

<имя> := <выражение>

Частным случаем выражения может быть константа или переменная.

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

При выполнении оператора вычисляется выражение, и полученный результат записывается в ячейку памяти, выделенную под переменную. Присваивание допускается для всех простых типов, для структурированных типов присваивание выполняется поэлементно. Нельзя использовать присваивание для файловых типов.

Ввод-вывод данных

Для ввода информации с клавиатуры и вывода ее на экран (стандартные устройства ввода-вывода) используются 4 оператора обращения к процедурам. Для ввода используются:

Read (<список параметров ввода>);

ReadLn (<список параметров ввода>);

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

Например, если в программе встретится оператор

то выполнение программы приостановится (будет индицироваться экран данных, стандартно черного цвета), пока не будет введена строка

0.28 32.5 1.0

Для вывода так же используются два оператора

Write (<список параметров вывода>);

WriteLn (<список параметров вывода>);

В списке параметров указываются выражения, в частности переменные и константы, например строковые:

WriteLn ("Сумма=",S," Произведение=",a*b);

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

При выводе вещественные числа имеют 15 цифр мантиссы и 4 цифры порядка, а целые занимают место, равное количеству значащих цифр. Так, при выполнении операторов

Writeln (i,j,k);

на экране данных появится информация:

7.50000000000000Е-0001

Первая строка – это введенные с клавиатуры данные. Гораздо нагляднее использовать форматированный вывод . Здесь параметр выглядит следующим образом:

<выражение>:<количество выделяемых позиций>

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

< выражение>:<общее количество выделяемых позиций>:<количество позиций дробной части>

Внимание! Не путать общее количество выделяемых позиций с количеством позиций целой части вещественного числа!

Аналогично предыдущему примеру:

Writeln (i:4,j:4,k:4);

Writeln (x:7:3);

на экран будет выведена информация в более удобном для восприятия виде:

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

Формат с двумя числами предназначен только для вещественных чисел в форме с фиксированной точкой.

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

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

<оператор 1 >;

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

<оператор n >

Пример: вся программа состоит из одного составного оператора.

Пустой оператор

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