Какие условия должны выполняться для правильного использования инструкции присваивания

Инструкция присваивания

В
результате выполнения инструкции
присваивания переменная получает
значение. В общем виде инструкция
присваивания выглядит так:

Имя Переменной
:= Выражение

где
двоеточие и следующий за ним знак
равенства — это символ инструкции
присваивания.

В
Паскале после каждой инструкции программы
ставится символ “точка с запятой”.

Примеры:
Counter := 0 ;

`D := B*B — 4*A*C ;

pi := 3.141592 ;

Z := (R1 + R2)/(R1*R2) ;

Выражение

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

Таблица 5.

Оператор

Действие

+

сложение

вычитание

*

умножение

/

деление

DIV

деление нацело

MOD

вычисление
остатка от деления

В простейшем случае
выражение — это константа или переменная.

Примеры выражений:

452

0.0001

k

F*G/D

Summa*0.5

(X1+X2+X3)/1000

Cena MOD 100

При
вычислении значений выражений важен
порядок выполнения операторов. Приняты
следующие правила выполнения операторов.
Операторы *,
/, DIV, MOD
имеют
более высокий приоритет, чем операторы
+ и
.
Операторы с более высоким приоритетом
выполняются раньше операторов, приоритет
которых ниже. Если приоритет операторов
одинаков, то оператор, стоящий левее,
выполняется раньше.

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

(S1+S2+S3)/(S1*S2*S3)

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

Тип выражения

Тип
выражения определяется типом операндов,
входящим в выражение и зависит от
операций, выполняемых над ними.

Тип
константы определяется видом самой
константы. Например, константы 4, 9 и -312
целого типа (INTEGER), а 2.0, 0.0, 2.1e-04 — вещественного
типа (REAL).

Тип переменной
задается в ее объявлении.

Операторы
*, +, -.
Если хотя бы один операнд имеет тип
REAL, то результат имеет тип REAL; если оба
операнда типа INTEGER, то результат имеет
тип INTEGER.

Оператор
/. Результатом
всегда является выражение типа REAL.

Операторы
DIV
и MOD.
Операнды этих операторов всегда должны
быть типа INTEGER.

Выполнение инструкции присваивания

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

Например, в
результате выполнения инструкций:

а) j:= 1; Значение
переменной j становится равным 1;

б) d := c + b ; Значением
переменной d будет число, равное сумме
значений c и b;

в) n := n + 1 ; Значение
переменной n увеличивается на 1.

Инструкция
присваивания считается верной, если
тип выражения соответствует, или может
быть приведен к типу переменной.
Переменной типа REAL можно присвоить
значение выражения типа REAL или INTEGER.
Переменной типа INTEGER можно присвоить
значение выражения только типа INTEGER.

Например,
если переменные i и n типа INTEGER, а d типа
REAL, то инструкции

i := n/10 ;

i := 2.0;

неправильные, а
инструкция

d := i ;

правильная.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Инструкция присваивания

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

В результате
выполнения инструкции присваивания значение переменной меняется, ей
присваивается значение.

В общем виде
инструкция присваивания выглядит так: Имя : = Выражение;

где:

  • Имя — переменная,
    значение которой изменяется в результате выполнения инструкции
    присваивания;
  • : = — символ инструкции
    присваивания.
  • Выражение — выражение,
    значение которого присваивается переменной, имя которой указано слева от символа
    инструкции присваивания.

Пример:

Surama := Сеnа * Kol;
Skidka := 10; Found := False;

Выражение

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

Таблица
1.4.
Алгебраические операторы

Оператор

Действие

+

Сложение


Вычитание

*

Умножение

/

Деление

DIV

Деление
нацело

MOD

Вычисление остатка от
деления

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

Результат
применения операторов +, -, * и / очевиден.

Оператор DIV
позволяет получить целую часть результата деления одного числа на другое.
Например, значение выражения is DIV i равно 2.

Оператор MOD,
деление по модулю, позволяет получить остаток от деления одного числа на другое.
Например, значение выражения 15 MOD 7 равно 1.

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

Примеры
выражений:

123 0.001
i+1

А + В/С Summa*0.75
(В1+ВЗ+ВЗ)/3 Cena MOD 100

При вычислении
значений выражений следует учитывать, что операторы имеют разный приоритет. Так
у операторов *, /, DIV, MOD более высокий приоритет, чем у операторов + и
-.

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

Для задания
нужного порядка выполнения операций в выражении можно использовать скобки,
например:

(r1+r2+r3)/(r1*r2*r3)

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

Тип выражения

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

Важно уметь
определять тип выражения. При определении типа выражения следует иметь в виду,
что тип константы определяется ее видом, а тип переменной задается в инструкции
объявления. Например, константы о, 1 и -512 — целого типа (integer), а константы
1.0, 0.0 и 3.2Е-05 — вещественного типа (real).

В табл. 1.5
приведены правила определения типа выражения в зависимости от типа операндов и
вида оператора.

Таблица
1.5.
Правила определения типа выражения

Оператор

Тип
операндов

Тип
выражения

*, +,

Хотя бы один из операндов
real

real

*, +,

Оба операнда
integer

integer

/

real или
integer

Всегда
real

DIV,
MOD

Всегда
integer

Всегда
integer

Выполнение инструкции присваивания

Инструкция
присваивания выполняется следующим образом:

1. Сначала
вычисляется значение выражения, которое находится справа от символа инструкции
присваивания.

2. Затем
вычисленное значение записывается в переменную, имя которой стоит слева от
символа инструкции присваивания.

Например, в
результате выполнения инструкций:

  • i:=0; — значение
    переменной i становится равным нулю;
  • а:=b+с; — значением
    переменной а будет число, равное сумме значений переменных ь и с;
  • j :=j+1; — значение
    переменной j увеличивается на единицу.

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

Так, например,
если переменные i и п имеют тип integer, а переменная d — тип real, то
инструкции

i:=n/10;
i:=1.0;

неправильные, а
инструкция

d:=i+1;
правильная.

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

Incompatible types … and

где вместо
многоточий указывается тип выражения и переменной. Например, если переменная п
целого типа, то инструкция n: = m/2 неверная, поэтому во время компиляции будет
выведено сообщение :

Incompatible types
‘Integer’ and.’Extended’

Стандартные функции

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

Значение
функции связано с ее именем. Поэтому функцию можно использовать в качестве
операнда выражения, например в инструкции присваивания. Так, чтобы вычислить
квадратный корень, достаточно записать k:=Sqrt(n), где Sqrt — функция вычисления
квадратного корня, п — переменная, которая содержит число, квадратный корень
которого надо вычислить.

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

Математические функции

Математические
функции (табл. 1.6) позволяют выполнять различные вычисления.

Таблица
1.6.
Математические функции

Функция

Значение

Аbs
(n)

Абсолютное значение
n

Sqrt
(n)

Квадратный корень из
n

Sqr
(n)

Квадрат
n

Sin
(n)

Синус
n

Cos
(n)

Косинус
n

Arctan
(n)

Арктангенс
n

Ехр(n)

Экспонента
n

Ln(n)

Натуральный логарифм
n

Rardom(n)

Случайное целое число в
диапазоне от 0 до n- 1

Величина угла
тригонометрических функций должна быть выражена в радианах. Для преобразования
величины угла из градусов в радианы используется формула (а*з.141525б)/180, где:
а— величина угла в градусах; 3.1415926 — число л. Вместо дробной константы
3.1415926 можно использовать стандартную именованную константу PI. В этом случае
выражение пересчета угла из градусов в радианы будет выглядеть так:
a*Pi/180.

Функции преобразования

Функции
преобразования (табл. 1.7) наиболее часто используются в инструкциях,
обеспечивающих ввод и вывод информации. Например, для того чтобы вывести в поле
вывода (компонент Label) диалогового окна значение переменной типа real,
необходимо преобразовать число в строку символов, изображающую данное число. Это
можно сделать при помощи функции FloatToStr, которая возвращает строковое
представление значения выражения, указанного в качестве параметра
функции.

Например,
инструкция Labeii.caption := FioatTostr(x) выводит значе-ние переменной х в поле
Labeii.

Таблица
1.7.
Функции преобразования

Функция

Значение
функции

Chr(n) IntToStr
(k)

Символ, код которого равен
n Строка, являющаяся изображением целого k

Функция

Значение
функции

FloatToStr
(n)

Строка, являющаяся
изображением вещественного n

FloatToStrF(n, f ,
k,m)

Строка, являющаяся
изображением вещественного п. При вызове функции указывают: f — формат (способ
изображения); k — точность (нужное общее количество цифр); m — количество цифр
после десятичной точки

StrToInt
(s)

Целое, изображением
которого является строка s

StrToFloat
(s)

Вещественное, изображением
которого является строка s

Round
(n)

Целое, полученное путем
округления n по известным правилам

Trunc
(n)

Целое, полученное путем
отбрасывания дробной части n

Frac(n)

Дробное, представляющее
собой дробную часть вещественного n

Int
(n)

Дробное, представляющее
собой целую часть вещественного

Использование функций

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

n :=
Round((x2-x1)/dx);

x1:= (-b + Sqrt(d)) /
(2*а);

m :=
Random(10);

cena :=
StrToInt(Edit1.Text);

Edit2.Text :=
IntToStr(100);

mes := ‘x1=’ +
FloatToStr(xl);

Присваивание в Python и его каноническая форма

В Python, как и во многих других языках программирования, каноническая форма операции присваивания имеет вид a = b,
где слева от оператора присваивания записывается целевое имя переменной или компонент объекта, а в качестве правого операнда выступает произвольное выражение, которое в результате
вычислений дает объект (см. пример №1).

# Присвоили выражение. 
a = 5 + 0.3
# Выведет 5.3.
print(a, end='nn')

# Присвоили список.
b = [1, 1, 2]
print(b, end='nn')        

# Изменили первый эл-т списка.
b[0] = 0
# Выведет [0, 1, 2].
print(b, end='nn')       

# Объявили ф-цию со значением по умолчанию.
def my_func(li=[]):
    return li

# Присвоили объект функции.
f = my_func        
# Выведет [0, 1, 2].
print(f(b))          
        
# Присвоили вызов функции.
e = my_func(b)        
# Выведет [0, 1, 2].        
print(e)
5.3

[1, 1, 2]

[0, 1, 2]

[0, 1, 2]
[0, 1, 2]
















	
	
	

Пример №1. Каноническая форма присваивания.

Как видим, присваивание действительно выполняется достаточно просто. Однако при этом хотелось бы обратить внимание на следующие особенности присваивания
в Python:

  • Инструкции присваивания всегда сохраняют ссылки на объекты, например, в переменных или в элементах структур данных, и никогда не создают копии присваиваемых объектов.
    Как следствие, переменные в Python больше напоминают указатели, чем области хранения данных.
  • Объявлять переменные заранее нельзя, т.к. интерпретатор создает переменные в момент присваивания им значений (то есть ссылок на объекты). После инициализации, когда
    имя переменной будет встречаться в выражениях, оно будет автоматически замещаться объектом, на который ссылается данная переменная. Если же интерпретатор
    встретит в программе неинициализированную переменную, он возбудит исключение вместо того, чтобы вернуть какое-либо значение по умолчанию (такое поведение призвано
    облегчить поиск ошибок и опечаток в коде).
  • Некоторые инструкции пусть и неявно, но тоже выполняют операцию присваивания. Примерами могут служить импорт модуля, определение функции или класса, указание
    переменной в цикле for или же передача аргументов функции. В любом случае результатом явных или неявных инструкций присваивания будет
    связывание имен с ссылками на объекты.

Ну, и в конце пункта еще раз напомним, что в программировании знак равно (=) обычно означает не равенство двух величин, а присваивание
значения переменной. Если же нужно указать на равенство двух значений, то используется комбинация символов из двух знаков равно (==).

Комбинированные инструкции присваивания

В дополнение к базовой инструкции присваивания в Python имеется и целый ряд комбинированных инструкций присваивания, которые объединяют
операцию присваивания с другой операцией. В общем виде инструкцию присваивания с комбинированным оператором x operator= y можно считать
сокращенной записью инструкции x = x operator y. Например, x += y является сокращенной записью
инструкции присваивания x = x + y, в которой к значению переменной x прибавляется значение переменной
y, а результат присваивается переменной x (см. пример №2).

# Присвоили начальное значение.
a = 3   
print('a = 3 ->', a, end='nn')
 
# Теперь a == 9, что равнозначно a = a + 6.
a += 6   
print('a += 6 ->', a, end='nn')
 
# Теперь a == 18, что равнозначно a = a*2.
a *= 2  
print('a *= 2 ->', a, end='nn')
 
# Теперь a == 9.0, что равнозначно a = a/2.
a /= 2  
print('a /= 2 ->', a, end='nn')
 
# Теперь a == 81.0, что равнозначно a = a**2.
a **= 2 
print('a **= 2 ->', a, end='nn')
 
# Теперь a == 1.0, что равнозначно a = a%2.
a %= 2  
print('a %= 2 ->', a)
a = 3 -> 3

a += 6 -> 9

a *= 2 -> 18

a /= 2 -> 9.0

a **= 2 -> 81.0

a %= 2 -> 1.0









	
	
	

Пример №2. Комбинированная форма присваивания.

Таким образом, комбинированная инструкция присваивания объединяет в себе выражение и присваивание, являясь по сути краткой формой записи кода. И хотя, например,
инструкции num += 25 и num = num + 25 дадут один и тот же результат, первая из них выглядит явно
компактнее. Кроме того, если объект справа относится к категории изменяемых объектов и поддерживает указанную операцию, комбинированная инструкция присваивания может
выполняться даже быстрее за счет непосредственного изменения объекта вместо создания и изменения его копии (см. пример №3).

# Импортируем модуль time.
import time
        
# Получаем стартовое значение времени.
t_1 = time.time()

# Размер начнет быстро расти, что с 
# увеличением кол-ва итераций приведет в 
# данном случае к замедлению работы. 
li = [0]

# Запускаем цикл 10 млн. раз.
for i in range(0, 10**5):	
    # Обычное присваивание.
    li = li + [1]
    
# Получаем конечное значение времени.
t_2 = time.time()
# Вывело 1.7589106559753 сек.
print(round((t_2 - t_1), 13), 'сек', end='nn')

# Тоже самое, но для комбинированного присваивания.

# Получаем стартовое значение времени.
t_1 = time.time()

# Здесь список тоже будет расти, но список будет 
# изменяться напрямую, а не через создание копии.
li = [0]

# Запускаем цикл 10 млн. раз.
for i in range(0, 10**5):	
    # Комбинированное присваивание.
    li += [1]
    
# Получаем конечное значение времени.
t_2 = time.time()
# Вывело 1.4650475978851 сек.
print(round((t_2 - t_1), 13), 'сек')
21.4193923473358 сек

0.0101900100708 сек
































	
	
	
 

Пример №3. Преимущества комбинированной формы присваивания.

Метод time() одноименного модуля time стандартной библиотеки Python
возвращает время, выраженное в секундах с начала эпохи. В операционных системах Unix, например, за начало эпохи принимается
1 января 1970,
00:00:00 (UTC). Но поскольку в
программах в основном используются интервалы времени между двумя событиями, а не время, прошедшее с начала эпохи, знать дату начала эпохи какой-либо конкретной
операционной системы вовсе необязательно, т.к. разница между двумя временными точками для всех платформ получается совершенно одинаковой.

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

  • a += b – тоже самое, что и a = a + b;
  • a -= b – тоже самое, что и a = a — b;
  • a *= b – тоже самое, что и a = a * b;
  • a **= b – тоже самое, что и a = a**b;
  • a /= b – тоже самое, что и a = a / b;
  • a //= b – тоже самое, что и a = a // b;
  • a %= b – тоже самое, что и a = a % b.

Позиционное присваивание

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

# Позиционное присваивание кортежа значений кортежу переменных.
a, b = 3, 5   
# Выведет a == 3, b == 5.
print('a ==', a, ', b ==', b, end='nn')
 
# Позиционное присваивание списка значений кортежу переменных.
a, b = [3, 5]   
# Выведет a == 3, b == 5.
print('a ==', a, ', b ==', b, end='nn')               

# Позиционное присваивание списка значений списку переменных.
[a, b] = [3, 5]   
# Выведет a == 3, b == 5.
print('a ==', a, ', b ==', b, end='nn')       

# Позиционное присваивание строки списку переменных.
[a, b] = 'AB'   
# Выведет a == A, b == B.
print('a ==', a, ', b ==', b, end='nn')          

# Кол-во присв-ых значений должно совпадать с кол-м переменных.
a, b = 'ABC'   
# too many values to unpack (expected 2).
print('a ==', a, ', b ==', b) 
a == 3 , b == 5

a == 3 , b == 5

a == 3 , b == 5

a == A , b == B

too many values to unpack (expected 2)












	
	
	

Пример №4. Позиционное присваивание (часть 1).

Как видим, данная форма присваивания позволяет смешивать последовательности разных типов. Здесь главное, чтобы количество присваиваемых значений совпадало с количеством переменных, которым
эти значения будут присваиваться. Но и эта проблема может быть решена за счет имеющейся возможности использования в присваивании расширенного синтакиса распаковывания последовательностей
(см. пример №5).

# Используем синтаксис распаковывания последовательности.
a, b, *c = [1, 2, 3, 4, 5]  
# Выведет a == 1, b == 2, c == [3, 4, 5].
print('a ==', a, ', b ==', b, ', c ==', c, end='nn')
 
*a, b, c = [1, 2, 3, 4, 5]   
# Выведет a == [1, 2, 3], b == 4, c == 5.
print('a ==', a, ', b ==', b, ', c ==', c, end='nn')               

a, *b, c = [1, 2, 3, 4, 5]   
# Выведет a == 1, c == [2, 3, 4], b == 5.
print('a ==', a, ', b ==', b, ', c ==', c, end='nn')       

# Граничный случай.
a, b, *c = [1, 2, 3]  
# Выведет a == 1, b == 2, c == [3].
print('a ==', a, ', b ==', b, ', c ==', c, end='nn')  

# Еще один граничный случай.
a, b, *c = [1, 2]  
# Выведет a == 1, b == 2, c == [].
print('a ==', a, ', b ==', b, ', c ==', c, end='nn')        

# Еще один граничный случай.
*c, = [1, 2]  
# Выведет c == [1, 2].
print('c ==', c, end='nn') 

# Использовать несколько звездочек запрещено.
# *a, b, *c = [1, 2]  
# Так тоже нельзя, нужна последовательность имен.
# *c = [1, 2]
a == 1 , b == 2 , c == [3, 4, 5]

a == [1, 2, 3] , b == 4 , c == 5

a == 1 , b == [2, 3, 4] , c == 5

a == 1 , b == 2 , c == [3]

a == 1 , b == 2 , c == []

c == [1, 2]


















	
	
	

Пример №5. Позиционное присваивание (часть 2).

Благодаря наличию имени со звездочкой все лишние значения автоматически помещаются в соответсвующий список именно так, как и ожидается. Однако нужно не забывать, что можно использовать
только одну переменную со звездочкой, а сама переменная должна принадлежать последовательности даже в том случае, если она будет одна (поставив запятую в инструкции
*c, = [1, 2] мы автоматически получили кортеж и смогли избежать ошибки).

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

Групповое присваивание одного значения

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

# Используем 3 инструкции присваивания по отдельности.
a = 'Ok'  
b = a
c = b
# Выведет a == 'Ok', b == 'Ok', c == 'Ok'.
print('a ==', a, ', b ==', b, ', c ==', c, end='nn')

# Или 1 эквивалентную инст-цию группового присваивания.
c = b = a = 'Ok'  
# Опять же выведет a == 'Ok', b == 'Ok', c == 'Ok'.
print('a ==', a, ', b ==', b, ', c ==', c) 
a == Ok , b == Ok , c == Ok

a == Ok , b == Ok , c == Ok





	
	
	

Пример №6. Присваивание одного значения группе переменных (часть 1).

Следует иметь в виду, что при групповом присваивании в памяти создается всего лишь один объект, разделяемый всеми переменными группы. Поэтому такая форма присваивания будет полезна для
неизменяемых объектов, например, чисел или строк. А вот при использовании изменяемых объектов типа списков или словарей нужно быть осторожными, т.к. изменение объекта через одну из переменных
группы будет оказывать влияние и на другие переменные (см. пример №7). Это связано с тем, что переменные в Python хранят
не сами объекты, а ссылки на них. А раз так, то даже после изменения объекта через одну из ссылок все остальные по-прежнему будут указывать на тот же, пусть и модифицированный, объект.

# Используем число (неизменяемый объект).
c = b = a = 0  
# Изменим b и c.
b = 1
c = 2
# Выведет a == 0, b == 1, c == 2.
print('a ==', a, ', b ==', b, ', c ==', c, end='nn')        
       
# Используем список (изменяемый объект).
c = b = a = []  
# Пробуем изменить b и c.
b += [1]
c += [2]
# Выведет для всех [1, 2].
print('a ==', a, ', b ==', b, ', c ==', c)
a == 0 , b == 1 , c == 2

a == [1, 2] , b == [1, 2] , c == [1, 2]









	
	
	

Пример №7. Присваивание одного значения группе переменных (часть 2).

Таким образом, во избежание проблем с изменяемыми объектами, их инициализацию лучше производить в отдельных инструкциях, как было показано в первой части примера
№6.

Выражения присваивания в Python

Все рассмотренные нами формы присваивания относятся к инструкциям. Но их запрещено использовать в выражениях, что иногда может быть весьма полезным. Поэтому начиная с версии
Python 3.8 было решено ввести новую конструкцию NAME := expr с возможностью использования в выражениях
(см. пример №8). Конструкция получила название выражение присваивания или же
именованное выражение, а оператор := стал неофициально называться моржовым оператором.

# В выражении инициализируются сразу 3 переменные.       
a = (b := 3) + (c := 5)
# Выведет a == 8, b == 3, c == 5.
print('a ==', a, ', b ==', b, ', c ==', c, end='nn') 

# Список функций (для однозначности используем скобки).       
li = [(x_2 := lambda y: y**2), (x_3 := lambda y: y**3)]
# Выведет li[0](5) == 25, li[1](5) == 125.
print('li[0](5) ==', li[0](5), ', li[1](5) ==', li[1](5))
# Выведет те же результаты: x_2(5) == 25, x_3(5) == 125.
print('x_2(5) ==', x_2(5), ', x_3(5) ==', x_3(5), end='nn')
a == 8 , b == 3 , c == 5

li[0](5) == 25 , li[1](5) == 125
x_2(5) == 25 , x_3(5) == 125




	
	
	

Пример №8. Использование выражений присваивания (часть 1).

Использовать выражение присваивания в коде верхнего уровня без скобок запрещается. Например, инструкция x = y := 5 не пройдет, нужно использовать скобки:
x = (y := 5). И вообще, использование скобок с моржовым оператором следует сразу же взять на вооружение, т.к. это поможет избежать многих досадных ошибок.

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

# Выводим сообщение и призыв к вводу.
print('Введите 2 положительных числа.')
x = float(input('Введите 1-е число: '))       
y = float(input('Введите 2-е число: '))

# Для уменьшения объема кода.
mess = 'Разрешены только положительные числа!'

# Осуществляем проверки и вывод результатов.
if y > 0:
    res = x/y
    if res > 0:
        print('x/y =', res)
    else:
        print(mess, end='nn')             
else:
    print(mess, end='nn')
	
# Выводим сообщение и призыв к вводу.
print('Введите 2 положительных числа.')
x = float(input('Введите 1-е число: '))       
y = float(input('Введите 2-е число: '))

# Проверка в одном if.
if y > 0 and (res := x/y) > 0:
    # Выводим результат.
    print('x/y =', res)
# Иначе сообщение об ошибке.             
else:
    print('Разрешены только положительные числа!')
Введите 2 положительных числа.
Введите 1-е число: 5			
Введите 2-е число: 10
x/y = 0.5

Введите 2 положительных числа.
Введите 1-е число: 5			
Введите 2-е число: 10
x/y = 0.5




















			

Пример №9. Использование выражений присваивания (часть 2).

Подробнее о выражениях присваивания можете почитать на официальном сайте в документации к
PEP 572 – Assignment Expressions.

Краткие итоги параграфа

  • В Python инструкции присваивания всегда сохраняют ссылки на объекты, например, в переменных или в элементах структур данных, и никогда не создают
    копии присваиваемых объектов.
  • Классическая форма присваивания имеет вид NAME = expr, что соответствует синтаксису многих других языков программирования. Однако в
    Python доступны и другие формы инструкций присваивания: комбинированные инструкции присваивания (например, y **= 3),
    позиционное присваивание (например, x, y = [3, 5] или x, *y = ‘abcdef’), а также групповое присваивание одного значения
    (например, a = b = c = 33).
  • При групповом присваивании одного значения в памяти создается всего лишь один объект, разделяемый всеми переменными группы. Поэтому такая форма присваивания будет полезна для
    неизменяемых объектов, например, чисел или строк. А вот при использовании изменяемых объектов типа списков или словарей нужно быть осторожными, т.к. изменение объекта через одну из
    переменных группы будет оказывать влияние и на другие переменные.
  • Поскольку в Python запрещается использовать инструкции в выражениях, начиная с версии 3.8 была введена специальная
    конструкция NAME := expr, получившая название выражения присваивания и предназначенная для присваивания значений внутри выражений, например,
    a = (b := 3) + (c := 5).

Вопросы и задания для самоконтроля

1. Перечислите основные формы инструкций присваивания в Python.

Показать решение.

Ответ. Классическая форма NAME = expr, комбинированные инструкции присваивания
NAME operator= expr, позиционное присваивание NAME_1, …, NAME_n = expr_1, …, expr_n, а также групповое
присваивание одного значения NAME_1 = … = NAME_n = expr.

2. Имеются две инициализированные переменные a = ‘one’ и b = ‘two’. Поменяйте значения
переменных местами, использовав позиционную форму инструкции присваивания.

Показать решение.

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

# Инициализируем переменные.       
a = 'one'
b = 'two'

# Производим замену значений.       
a, b = 'two', 'one'
print('a == ', a, ', b == ', b, sep='')
a == two, b == one





			

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

Показать решение.

Ответ. Если, например, выполнить присваивание следующим образом: a = b = c = [], то все три переменные
будут ссылаться на один и тот же объект. Поэтому непосредственное изменение объекта с помощью одной переменной (например, A.append(5)) отразится и на
других. Однако это справедливо только для изменений, производимых непосредственно в изменяемых объектах, таких как списки или словари. Для неизменяемых объектов, вроде чисел и строк,
такой проблемы не возникает.

4. Какие из представленных фрагментов кода содержат ошибки:
a, b = [3, ‘3’]
x, *y = 1, 2, 3
*x, = 1, 2, 3
*x, y, *z = 1, 2, 3, 4? Объясните ответ.
Показать решение.

Ответ. Все фрагменты кода, кроме последнего, верны. А вот последняя инструкция содержит две переменные со звездочкой, что
расширенным синтаксисом распаковывания последовательностей не допускается.

Быстрый переход к другим страницам

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

Что такое алгоритм

Алгоритм — понятие, имеющее несколько определений:

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

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

Виды

Алгоритмы бывают:

  1. Линейными. Отвечают за описание действия, которое многократно выполняется в заданном порядке. Самый простой и распространенный вариант.
  2. Разветвляющимися. Помогают определить несколько последовательностей в зависимости от условий.
  3. Циклическими. Определяют действия, которые должны выполняться некоторое количество раз подряд. Происходит это до тех пор, пока не закончится заданный порядок.

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

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

Присваивание или присвоение – это механизм в разработке программных продуктов, который позволяет динамически менять связи объектов данных (обычно – переменных) с их значениями. Изменение значений – это «побочный эффект» операции присвоения. В большинстве языков программирования сама операция будет возвращать некоторый результат.

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

Общий вид

Информатика за 8 класс объясняет основы алгоритмизации, а также знакомит с командой присваивания впервые. Она нужна для вычисления значений выражений и присваивания их значений переменным.

Форма записи: <имя_переменной> := <выражение>. Также можно воспользоваться конструкцией типа: <выражение слева> <команда присваивания> <выражение справа>.

Здесь:

  1. Выражение, записанное в левой части, после вычислений приводит к местоположению объекта данных, к целевой переменной, идентификатору ячейки памяти, в которую производится запись. Они носят название «левосторонние».
  2. Выражение, записанное справа, обозначает тем или иным способом величину, которая будет присвоена объекту данных. Называется «правосторонним».
  3. Остальные ограничения на правосторонние записи накладываются конкретным языком программирования.

Команда присваивания записывается при помощи различных символов (операторов). Форма представления этого «алгоритма» зависит непосредственно от языка разработки. Информатика за 8 класс указывает оператор :=. Также рассматриваемая команда записывается как =, == или ←. Иногда специальный синтаксис не вводится.

В информатике := и = – это разные знаки. Первый присваивает новое значение переменной, второй указывает на равенство двух элементов.

Как работает

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

  1. Вычисляется левостороннее значение первого операнда. Тут становится известно местоположение итогового объекта.
  2. Узнать правостороннее значение второго операнда. Этап бесконечно большой. Он может включать в себя иные операторы.
  3. Присвоить полученное правостороннее значение левостороннему.
  4. Возвратить правостороннее значение в качестве результата выполнения операции. Этот этап требуется не везде. Пример – Pascal. Там он вовсе отсутствует.

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

Свойства

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

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

Данные свойства сохраняются для всех языков программирования.

Расширенные операторы

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

Как обозначается Значение
= Сохранение второго операнда в первый. Это и есть простое присваивание.
*= Умножение. Результатом записывается вычисление произведения первого операнда на второй.
/= Итог деления
%= Деление по модулю. Сохранение производится в первый записанный в выражении операнд.
+= Сложение
-= Вычитание
<<= Сдвиг значения первого операнда влево на количество битов, заданное вторым
>>= Аналогичная операция, но со сдвигом вправо
&= Побитовое И для первого и второго операндов
^= Побитовое исключающее ИЛИ
|= Побитовое включающее ИЛИ

Команды присваивания в некоторых языках программирования имеют не просто символьную запись, но и буквенную. Примеры в C++:

  • &= – and_eq;
  • |= – or_eq;
  • ^= – xor_eq.

В языке разработки C альтернативные варианты написания – это макросы в заголовке <iso646.h>.

Также стоит обратить внимание на работу с текстом при применении в программном коде изучаемого алгоритма. Изначально он считывается большинством сред разработки в качестве части приложения. Тестовое значение присваивается при помощи указанных операторов, но заключается в кавычки ‘ ’ или “ ” . Обычно компиляторы воспринимают все, что написано внутри них, как обычный текст.

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

В некоторых языках программирования команда «Присвоить» может быть параллельной. Это расширенный синтаксис присвоения, который поддерживается в Ruby и Python.

a, b = 1, 11

Выше – форма записи параллельного присвоения. Она позволяет коротко реализовывать обмен значений нескольких переменных.

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

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

Содержание

  • 1 Определение присваивания
    • 1.1 Алгоритм работы оператора присваивания
    • 1.2 Символ присваивания
    • 1.3 Семантические особенности
      • 1.3.1 Неоднозначность присваивания
      • 1.3.2 Семантика ссылок
      • 1.3.3 Подмена операции
  • 2 Расширения конструкции присваивания
    • 2.1 Множественные целевые объекты
    • 2.2 Параллельное присваивание
    • 2.3 Условные целевые объекты
    • 2.4 Составные операторы присваивания
    • 2.5 Унарные операторы присваивания
  • 3 Реализация
  • 4 Примечания
  • 5 См. также
  • 6 Литература

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

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

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

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

Определение присваивания

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

<выражение слева> <оператор присваивания > <выражение справа>

«Выражение слева» должно после вычисления привести к местоположению объекта данных, к целевой переменной, идентификатору ячейки памяти, в которую будет производиться запись. Такие ссылки называются «левосторонними значениями» (англ. lvalue). Типичные примеры левостороннего значения — имя переменной (x), путь к переменной в пространстве имён и библиотеках (Namespace.Library.Object.AnotherObject.Property), путь к массиву с выражением на месте индекса (this.a[i+j*k]), но ниже в данной статье приведены и более сложные варианты.

«Выражение справа» должно обозначать тем или иным способом ту величину, которая будет присвоена объекту данных. Таким образом, даже если справа стои́т имя той же переменной, что и слева, интерпретируется оно иначе — такие ссылки называются «правосторонними значениями» (англ. rvalue). Дальнейшие ограничения на выражение накладывает используемый язык: так, в статически типизированных языках оно должно иметь тот же тип, что и целевая переменная, либо тип, приводимый к нему; в некоторых языках (например, Си или a=b=c).

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

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

MULTIPLY 2 BY 2 GIVING FOUR.

Алгоритм работы оператора присваивания

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

Символ присваивания

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

Так, Никлаус Вирт утверждал[1]:

Эта плохая идея низвергает вековую традицию использования знака «=» для обозначения сравнения на равенство, предиката, принимающего значения «истина» или «ложь».

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

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

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

  • Использованием этого же символа, значение определяется в зависимости от контекста.

Например, в выражении языка ПЛ/1:

А = В = С	

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

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

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

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

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

Следствием чего можно провести присваивание данных, сформированных(расположенных) далеко от операции присваивания.

Рассмотрим простой пример для вышесказанного:

 Определение переменной AAA и следующей строкой присваивание ей значения 10
VARIABLE AAAA
10 AAA ! 

или так то же самое(семантически):

10
VARIABLE AAA
AAA !

Неоднозначность присваивания

Рассмотрим пример:

X = 2 + 1

Это можно понять как «результат вычисления 2+1 (то есть 3) присваивается переменной X» или как «операция 2+1 присваивается переменной X». Если язык статически типизирован, то двусмысленности нет, она разрешается типом переменной X («целое число» или «операция»). В языке Пролог типизация динамическая, поэтому существуют две операции присвоения: is — присвоение эквивалентного значения и = — присвоение образца. В таком случае:

X is 2 + 1, X = 3
X = 2 + 1, X = 3

Первая последовательность будет признана верной, вторая — ложной.

Семантика ссылок

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

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

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

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

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

Расширения конструкции присваивания

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

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

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

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

SUM, TOTAL = 0

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

SUM, TOTAL: Integer := 0;

Аналогичное присвоение в языке

sum = total = 0

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

sum = (total = 0)

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

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

Некоторые языки, например Руби и

a, b = 1, 11

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

запись с использованием параллельного присваивания «традиционное» присвоение: требует дополнительной переменной и трёх операций
a, b = b, a
t = a
a = b
b = t

Некоторые языки (например,

list($a, $b) = array($b, $a);

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

Некоторые языки программирования, например, C++ и

flag ? countl : count2 = О 

присвоит 0 переменной count1 если flag истинно и count2, если flag ложно.

Другой вариант условного присваивания (Руби):

a ||= 10

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

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

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

а = а + b

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

sum += value; 
sum = sum + value;

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

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

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

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

увеличение значения переменной на единицу эквивалентная расширенная запись
count ++; 
count =  count + 1;

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

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

Реализация

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

Примечания

  1. Никлаус Вирт. Хорошие идеи: взгляд из Зазеркалья. Пер. Сергей Кузнецов (2006). Проверено 23 апреля 2006.
  2. В целях оптимизации многие операции совмещаются в присваиванием. Для сокращённых записей присвоения зачастую есть эквивалент в машинных инструкциях. Так, увеличение на единицу реализуется машинной инструкцией inc, уменьшение на единицу — dec, сложение с присвоением — add, вычитание с присвоением — sub, команды условной пересылки — cmova, cmovno и т. д.

См. также

  • Подстановка

Литература

  • Роберт В. Себеста. Основные концепции языков программирования = Concepts of Programming Languages. — 5-е изд. — М.: «Вильямс», 2001. — 672 с. — ISBN 0-201-75295-6
  • М. Бен-Ари. Языки программирования. Практический сравнительный анализ. — М.: Мир, 2000. — 366 с. С. 71—74.
  • В. Э. Вольфенгаген. Конструкции языков программирования. Приёмы описания. — М.: АО «Центр ЮрИнфоР», 2001. — 276 с. ISBN 5-89158-079-9. С. 128—131.
  • Э. А. Опалева, В. П. Самойленко. Языки программирования и методы трансляции. — СПб.: БХВ-Петербург, 2005. — 480 с. ISBN 5-94157-327-8. С. 74—75.
  • Т. Пратт, М. Зелковиц. Языки программирования: разработка и реализация. — 4-е изд. — СПб: Питер, 2002. — 688 с. ISBN 5-318-00189-0, ISBN 0-13-027678-2. С. 201—204.

Wikimedia Foundation.
2010.

1. Инструкция присваивания. Вывод информации на экран.

Лекция №3

2. Инструкция присваивания.

Инструкция присваивания (:=)используется
для изменения значений переменных, в том
числе и для вычислений по формулам;
Тип выражения, находящегося в правой
части инструкции присваивания, должен
соответствовать типу переменной, имя
которой стоит слева.
Type miss match – ошибка несоответствия
типов.

3. Задание №10

Запишите инструкцию, которая присваивает
переменной х значение -1,5.
Х:=-1,5

4. Задание №11

Запишите инструкцию, которая присваивает
переменной summa нулевое значение
summa:=0

5. Задание №12

Запишите инструкцию, которая увеличивает
на единицу значение переменной n
n:=n+1

6. Задание №13

Запишите в виде инструкции присваивания
формулу вычисления значения функции
y=-2,7×3+0,23×2-1,4
y:=-2,7*x*x*x+0,23*x*x-1,4

7. Задание №14

Запишите в виде инструкции присваивания
формулу вычисления объёма полного
цилиндра.
v h (r r )
2
1
2
2
v:=pi*h*(r1*r1-r2*r2)

8. Задание №15

Запишите в виде инструкции присваивания
формулу вычисления сопротивления
электронной цепи, состоящей из двух
параллельно соединенных резисторов
r1 r2
r
r1 r2
r:=r1*r2/(r1+r2)

9. Вывод информации на экран.

Инструкция write и writeln предназначены,
для вывода на экран монитора сообщений
и значений переменных;
Ода инструкция write (writeln)
может
вывести на экран значения нескольких
переменных и (или) несколько сообщений;
Инструкция
writeln
без
параметров
переводит курсор в начало следующей
строки экрана.

10. Задание №16

Написать программу, которая выводит на
экран Ваше имя и фамилию.
Program FIO; {мое имя и фамилия}
Begin
Write (’Имя и фамилия’);
Readln;
End.
Сохраните программу в файле с именем
16_класс_буквагруппа.

11. Задание №17

Написать программу, которая выводит на
экран четверостишие:
Унылая пора! Очей очарованье!
Приятна мне твоя прощальная краса –
Люблю я пышное природы увяданье,
В багрянец и золото одетые леса.
А.С.Пушкин
Сохраните программу в файле с именем
17_класс_буквагруппа.

12. Задание №18

Написать программу
переменной а=4.2789
вывода
значений
Сохраните программу в файле с именем
18_класс_буквагруппа.

13. Задание №19

Используя задачу №18 определите, что
делают инструкции:
Write (a);
Writeln (‘a’);
Writeln (a:1:1,‘ ‘, a:3:1,’ ‘,a:1:3);

14. Домашнее задание

Инструкция присваивания.
Вывод информации на экран.

Понравилась статья? Поделить с друзьями:
  • Имудон сироп для детей инструкция по применению
  • Smart watch x5 pro инструкция по применению на русском языке
  • Ао центральное пго руководство
  • Должностная инструкция медицинской сестры онкологического кабинета поликлиники
  • Печь борк w500 инструкция по применению