Оператор присвоения. Программирование на языке Паскаль. Оператор присваивания

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

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

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

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

где 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) использовать лишние скобки для удобства чтения выражений.

Присваивание

Присва́ивание - механизм в программировании , позволяющий динамически изменять связи объектов данных (как правило, переменных) с их значениями. Строго говоря, изменение значений является побочным эффектом операции присвоения, и во многих современных языках программирования сама операция также возвращает некоторый результат (как правило, копию присвоенного значения). На физическом уровне результат операции присвоения состоит в проведении записи и перезаписи ячеек памяти или регистров процессора .

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

Set <целевая_переменная> <выражение>

Данная запись эквивалентна вызову функции . Аналогично, в КОБОЛе старого стиля:

MULTIPLY 2 BY 2 GIVING FOUR.

Алгоритм работы

  • Вычислить левостороннее значение первого операнда. На этом этапе становится известным местонахождение целевого объекта, приёмника нового значения.
  • Вычислить правостороннее значение второго операнда. Этот этап может быть сколь угодно большим и включать другие операторы (в том числе присвоения).
  • Присвоить вычисленное правостороннее значение левостороннему значению. Во-первых, при конфликте типов должно быть осуществлено их приведение (либо выдано сообщение об ошибке ввиду его невозможности). Во-вторых, собственно присваивания значения в современных языках программирования может быть подменено и включать не только перенос значений ячеек памяти (например, в «свойства » объектов в , перегрузка операторов).
  • Возвратить вычисленное правостороннее значение как результат выполнения операции. Требуется не во всех языках (например, не нужно в Паскале).

Обозначение

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

Общеизвестным плохим примером является выбор знака равенства для обозначения присваивания, восходящий к языку Fortran в 1957 году и слепо повторяемый до сих пор массой разработчиков языков. Эта плохая идея низвергает вековую традицию использования знака « = » для обозначения сравнения на равенство, предиката, принимающего значения « истина » или « ложь ». Но в Fortran этот символ стал обозначать присваивание, принуждение к равенству. В этом случае операнды находятся в неравном положении: левый операнд, переменная, должен быть сделан равным правому операнду, выражению. Поэтому x = y не означает то же самое, что y = x.

Оригинальный текст (англ.)

A notorious example for a bad idea was the choice of the equal sign to denote assignment. It goes back to Fortran in 1957 and has blindly been copied by armies of language designers. Why is it a bad idea? Because it overthrows a century old tradition to let “=” denote a comparison for equality, a predicate which is either true or false. But Fortran made it to mean assignment, the enforcing of equality. In this case, the operands are on unequal footing: The left operand (a variable) is to be made equal to the right operand (an expression). x = y does not mean the same thing as y = x.

Выбор символа оператора равенства в языке при использовании = как присваивания решается:

  • Введением нового символа языка для оператора проверки равенства.
А = В = С

переменной А присваивается булевское значение выражения отношения В = С. Такая запись приводит к снижению читабельности и редко используется.

Семантические особенности

Далеко не всегда «интуитивный» (для программистов императивных языков) способ интерпретации присваивания является единственно верным и возможным.

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

A = b = a a = 1000

После этого b будет иметь значение - просто потому, что фактически его значение - это и есть значение a . Число ссылок на один и тот же объект данных называется его мощностью, а сам объект погибает (уничтожается или отдаётся сборщику мусора), когда его мощность достигает нуля. Языки программирования более низкого уровня (например, Си) позволяют программисту явно управлять тем, используется ли семантика указателей или семантика копирования.

Подмена операции

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

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

Расширенные конструкции

Конструкции присвоения в различных языках программирования

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

Множественные целевые объекты

Одной из альтернатив простого оператора является возможность присвоения значения выражения нескольким объектам . Например, в языке ПЛ/1 оператор

SUM, TOTAL = 0

одновременно присваивает нулевое значение переменным SUM и TOTAL . В языке Ада присвоение также является оператором, а не выражением, поэтому запись множественного присвоения имеет вид:

SUM, TOTAL: Integer:= 0;

Аналогичное присвоение в языке Python имеет следующий синтаксис:

Sum = total = 0

В отличие от ПЛ/1, Ады и Питона, где множественное присвоение считается только сокращённой формой записи, в языках Си , Лисп и других данный синтаксис имеет строгую основу: просто оператор присвоения возвращает присвоенное им значение (см. выше). Таким образом, последний пример - это на самом деле:

Sum = (total = 0)

Строчка такого вида сработает в Си (если добавить точку с запятой в конце), но вызовет ошибку в Питоне.

Параллельное присваивание

a ||= 10

Данная конструкция присваивает переменной a значение только в том случае, если значение ещё не присвоено или равно false .

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

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

А = а + b

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

sum += value; sum = sum + value;

В языках программирования, поддерживающих составные операторы (C++ , , Python , Java и др.), обычно существуют версии для большинства бинарных операторов этих языков (+= , -= , &= и т. п.).

Унарные операторы

В языке программирования Си и большинстве производных от него есть два специальных унарных (то есть имеющих один аргумент) арифметических оператора, представляющих собой в действительности сокращённые присваивания. Эти операторы сочетают операции увеличения и уменьшения на единицу с присваиванием. Операторы ++ для увеличения и -- для уменьшения могут использоваться как префиксные операторы (то есть перед операндами) или как постфиксные (то есть после операндов), означая различный порядок вычислений. Оператор префиксной инкрементации возвращает уже увеличенное значение операнда, а постфиксной - исходное.

Пример использования оператора инкрементации для формирования завершённого оператора присвоения:

Хоть это и не выглядит присваиванием, но таковым является. Результат выполнения приведённого выше оператора равнозначен результату выполнения присваивания.

Операторы инкрементации и декрементации в языке Си часто являются сокращённой записью для формирования выражений, содержащих индексы

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 для входа в редактор языка Паскаль.


Для сокращённой записи выражений в языке программирования С++ есть специальные операции, которые называются операциями присваивания. Рассмотрим фрагмент кода, с использованием операции присваивания.

Int value = 256; value = value + 256; // обычное выражение с использованием двух операций: = и + value += 256; // сокращённое эквивалентное выражение с использованием операции присваивания

В строке 2 переменной value присваивается значение 512, полученное в результате суммы значения содержащегося в переменной value с числом 256. В строке 3 выражение выполняет аналогичную операцию, что и в строке 2 , но выражение записано в упрощённом виде. В этом выражении присутствует операция присваивания со знаком плюс += . Таким образом, операция += суммирует значение переменной value co значением, которое находится правее: 256, и присваивает результат суммы этой же переменной. Как видно из примера оператор в строке 3 короче оператора в строке 2 , хоть и выполняет аналогичную операцию. Так что, если некоторую переменную нужно изменить, то рекомендуется использовать операции присваивания.

В С++ существует пять операций присваивания, не считая основную операцию присваивания: = .

  1. += операция присваивания-сложения;
  2. -= операция присваивания-вычитания;
  3. *= операция присваивания-умножения;
  4. /= операция присваивания-деления;
  5. %= операция присваивания-остатка от деления;

Договоримся называть операции присваивания через дефис, чтобы было понятно о какой именно операции идёт речь. В таблице 1 наглядно показаны примеры использования операторов присваивания в языке программирования С++.

Операции присваивания в С++
Операция Обозначение Пример Экв.пример Пояснение
операция присваивания-сложения += var += 16 var = var + 16 Прибавляем к значению переменной var число 16, результат суммирования сохраняется в переменной var
операция присваивания-вычитания -= var -= 16 var = var — 16 Вычитаем из переменной var число 16, результат вычитания сохраняется в переменной var
операция присваивания-умножения *= var *= 16 var = var * 16 Умножаем значение переменной var в 16 раз, результат умножения присваивается переменной var
операция присваивания-деления /= var /= 16 var = var / 16 Делим значение переменной var на 16, результат деления присваивается переменной var
операция присваивания-остатка от деления %= var %= 16 var = var % 16 Находим остаток от деления и сохраняем его в переменной var

Разработаем программу, которая будет использовать операции присваивания.

// assignment.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; int main(int argc, char* argv) { int value = 256; cout << "value = " << value << endl; value += 256; // сокращённое выражение с использованием операции присваивания - сложения cout << "value += 256; >> " << value << endl; value -= 256; // сокращённое выражение с использованием операции присваивания - вычитания cout << "value -= 256; >> " << value << endl; value *= 2; // сокращённое выражение с использованием операции присваивания - умножения cout << "value *= 2; >> " << value << endl; value /= 8; // сокращённое выражение с использованием операции присваивания - деления cout << "value /= 8; >> " << value << endl; system("pause"); return 0; }

Для начала в строке 9 была объявлена переменная value , и инициализирована значением 256. В строках 11, 13, 15, 17, прописаны операции присваивания – сложения, вычитания, умножения и деления соответственно. После выполнения каждой операции присваивания оператор cout печатает результат. Результат работы программы (см. Рисунок 1).

Value = 256 value += 256; >> 512 value -= 256; >> 256 value *= 2; >> 512 value /= 8; >> 64 Для продолжения нажмите любую клавишу. . .

Рисунок 1 – Операции присваивания в С++

На рисунке 1 наглядно показаны примеры выполнения операций присваивания, а также показан результат выполнения соответствующей операции присваивания.

Тип урока:

  • обучающий. Учащиеся знакомятся с новым оператором языка Паскаль;
  • повторение темы «Внутренняя память компьютера»;
  • закрепляющий приобретенные знания.

Тема урока: «Программирование на языке Паскаль. Оператор присваивания».

Цели:

  • Ввести понятие «Оператор присваивания».
  • Различать операции, допустимые для целых и вещественных чисел.
  • Правильно составлять и вычислять выражения с использованием оператора присваивания.
  • Писать программы для простейших задач.

Длительность урока: 1 час 30 минут.

ХОД УРОКА

Первый урок

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

Учитель и обучающиеся работают в форме «вопрос-ответ» (10 минут).

2. Учитель объясняет новую тему, используя мультимедийный урок-презентацию «Программирование на языке Паскаль. Оператор присваивания». Дается определение понятия «оператор присваивания», приводится общая и структурная форма оператора. Прежде, чем рассмотреть работу оператора присваивания, вспоминаем и повторяем тему «Оперативная память, свойства Оперативной памяти».

Сопровождается показом презентации. Приложение 1 (15 минут).

3. Обучающиеся работают самостоятельно, читая и конспектируя новую тему (урок-презентация предварительно записан на компьютеры обучающихся, вопросы для конспектирования определены учителем). Здесь же ученики могут познакомиться с текстами программ, в которых используется оператор присваивания Приложение 2 (20 минут).

Второй урок

4. Обучающиеся работают у доски, выполняя упражнения (12-15 минут).
1. Учитель проводит контроль знаний в форме теста. Программа-тест предварительно записывается на компьютеры обучающихся. Оценка выставляется программой. Приложение 5 (10 минут).
5. Ученики выполняют небольшую самостоятельную работу по карточкам, либо пишут и отлаживают программу на АЯП Паскаль, в которой используется оператор(ы) присваивания (учитель называет номера карточек с заданиями). За работу учащиеся получают оценку. Приложение 3 . Приложение 4 (15 минут).
Домашнее задание. Ученикам предлагается написать текст простой программы на АЯП Паскаль, в которой используется оператор(ы) присваивания (для тех учеников, которые не успели выполнить задание в классе).

Выводы:

  • Через блок 1 повторение темы предыдущего урока.
  • Через блоки 2, 3 и 4 дается и закрепляется новая тема «Оператор присваивания».
  • Через блоки 5 и 6 выполняется контроль знаний.

Программирование на языке Паскаль

Урок № 1 (2 часа). Переменные и константы. Оператор присваивания

  1. Проверка домашнего задания.
  2. Новая тема.
  3. Домашнее задание.

Проверка домашнего задания.

2. Новая тема: «Переменныые и константы. Опреатор присваивания»

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

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

Выражение может быть и конкретным значением (т.е. число целое или вещественное, например, 22 или 2.5, символьная величина: "ABC", логическая величина: TRUE или FALSE), и некоторым выражением (величины + операции над ними), результат которого будет присвоен переменной в левой части.

ПРИМЕРЫ:

PAG:= 10; (конкретное значение в виде числа);
X:= X + 1; (выражение);
C:= B; (имя переменной);
G:= ‘ПРИВЕТ‘; (конкретное значение символьное);
X:= (-A + SIN(Y) – 4 * B * X) / (2 * C); (математическое выражение);
Y:= TRUE; (конкретая логическая величина).

Отличие операции присваивания в математике и программировании.

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

А: = 5;
В: = 9

а) Результат операции А:= В;

б) Результат операции В:= А;

Далее ещё одно существенное различие между знаком равенства и оператором присваивания: А = А + 1;
В математике такое выражение просто бессмысленно, поскольку тождество ложно. Не существует таких числовых значений А, для которых оно было бы справедливо. В программировании это означает, что к значению, хранимому в ячейке А, прибавляется 1, и вновь получаемое значение заменяет старое в ячейке А. Например, если до выполнения этого оператора А имело значение 5, то после выполнения будет равно 6.

Следующее отличие: математическое выражение А + 9 – В = Х вполне обосновано и может означать, что при подстановке некоторых чисел вместо А и В в левую часть выражения вы получите Ч. В то же время в программировании это выражение лишено смысла, поскольку левая часть выражения должна содержать имя области памяти, которой присваивается значение, вычисляемое в правой части. Если же вы попытаетесь вставить такое выражение в свою программу, то получите сообщение об ошибке, поскольку имя переменной А + 9 – В не поймёт .

записать в общепринятой форме:

(– b + sqrt(sqr(b) – 4 * a * c))/(2 * a);
a/b * (c + d) – (a – b)/b/c + 1E – 8;

Список литературы:

  • В.Б. Попов «TURBO PASCAL для школьниковI», «Финансы и статистика», Москва, 1996 г.
  • А.А. Черно в «Конспекты уроков информатики в 9 – 11 классах», «Учитель», Волгоград, 2004.
  • Д.М. Златопольский «Я иду на урок информатики. Задачи по программированию, 7 – 11 классы», «Первое сентября», Москва, 2001.


Есть вопросы?

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: