Иногда появляется повод задуматься над, казалось бы, привычными и понятными вещами. А когда задумаешься, выясняется, что все не очень просто, потому что остальные тоже считают, что это привычно и понятно. И тогда приходится разбираться.
В ходе подготовки учебника к экспертизе у редактора возникли сомнения по поводу моей фразы: «Оператор «:=» — это оператор присваивания». По её мнению, оператор присваивания — это всё выражение вида «переменная := выражение;», а символы «:=» — это знак присваивания.
Как оказалось, этот терминологический вопрос совсем не прост. Изучение источников как на русском, так и на английском языках, даёт противоречивые результаты.
Поскольку речь идет о Паскале, обратимся, прежде всего, к отчёту «The Programming Language Pascal», который написал Никлаус Вирт, создатель этого языка. Он пишет:
«The most fundamental statement is the assignment statement. It specifies that a newly computed value be assigned to a variable (or a component of a variable).»
Информатика 8 класс: Оператор присваивания и выражения в Паскале
«Assignment statement» — это оператор присваивания, здесь слово «statement» действительно переводится на русский как оператор в значении «инструкция», «команда».
Но вопрос в другом — как назвать символ «:=»? Вирт в своих работах не дает ему никакого названия, такой же подход принят и в стандарте ISO7185.
Часто утверждается, в Паскале вообще нет оператора присваивания, такого как в Си и Си++, потому что присваивание — «это утверждение, а не выражение». Однако существует и другое мнение. Например, в книге М. Канту «Essential Pascal» видим термин «colon-equal operator». А Н. Дейл прямо использует термин «assignment operator» (см. «Programming in Pascal», глава 2).
Итак, мы добрались до сути: «:=» — это оператор или не оператор? Чтобы ответить на этот вопрос, нужно понять, какое значение слова «оператор» имеется в виду. В английском языке используется два совершенно разных слова, которые переводятся на русский одним и тем же словом «оператор» — это «statement» и «operator». С оператором-statement вроде бы всё понятно. Оператор-operator — это другой термин, который связан с математическим понятие оператора — правила преобразования одного объекта в другой.
Выражение «assignment operator» широко используется в таких языках, как Си и Си++, где оператор присваивания обозначается знаком «=». Его суть в том, что оператор присваивания создает новый объект на основе двух существующих объектов, записывая новое значение в переменную.
Таким образом, для того, чтобы разобраться, является ли символ «:=» оператором в этом смысле, нужно выяснить, могут ли при присваивании выполняться какие-то преобразования.
Считается, что в «классическом» Паскале оператора присваивания (в смысле operator) нет. Но это не совсем верно. Вот пример программы, которая работает во всех современных версиях Паскаля:
var a: integer; b: longint; begin a := 5; b := a; b := 25; a := b; end.
Очевидно, что здесь перед записью значения в переменную некоторые преобразования данных (приведение к другому типу) автоматически выполняются.
Паскаль с Нуля. Переменные, Оператор присваивания, Оператор ввода. Урок 2
Кроме того, в современной версии Free Pascal символ «:=» вполне законно называется оператором присваивания, потому что его можно перегружать, как и в Си++. В программе, приведенной ниже, показан пример такой перегрузки.
type complex = record re,im: real; end; var z: complex; operator :=(r: double) z: complex; begin z.re:=r; z.im:=0; end; begin z:=3; end.
Выводы: Таким образом, в современном Паскале «X:=Y;» — это оператор присваивания (statement), а «:=» — это тоже оператор присваивания (operator).
Автор благодарит О.А. Полежаеву за интересное обсуждение, в результате которого появилась эта заметка.
3 комментария:
Напишите, пожалуйста, заметку о том, как правильно по отношению к переменным:
«присваивание, присваивать» или «присвоение, присвоить». Везде по разному. Ответить Удалить
В том, что у «:=» нет отдельного имени по сравнению с «переменная := выражение» (без точки с запятой – она частью оператора не является) нет ничего странного. И знак «:=», и указанная грамматическая конструкция присваивания, и конкретные ее овеществления как «x := a+b» – все три и есть «оператор присваивания».
Конечно, речь идет о разных сторонах данного понятия, но нужды именовать их по разному нет. Впрочем, точно так же и «выражениевыражение», и «p
Далее, Ваше утверждение «Часто утверждается, в Паскале вообще нет оператора присваивания, такого как в Си и Си++ …» вводит в заблуждение: на самом деле цитированный Вами текст утверждает, что у Паскаля нет «operator»-а, т.е.
операции присваивания. Что и верно – операцией «:=» в Паскале не является, тогда как «=» в Си есть как раз операция. И неряшливость того или иного англоязычного – точно так же как и любого другого – автора, назвавшего «:=» operator, суть дела не меняет. В стандарте же языка таких оплошностей не найти.
Еще далее, Ваше утверждение «В английском языке используется два совершенно разных слова, которые переводятся на русский одним и тем же словом „оператор“» неточно. Английское слово operator в литературе на русском по программированию принято переводить как «операция». Не заметили? По этому поводу отмечу, что в учебниках и монографиях советского времени я ни разу не видел путаницы между операциями и операторами – они так же четко отличаются друг от друга, как и operator и statement в английском. (С другой стороны, возможно, термины тогда были выбраны неудачно. Может, лучше называть operator оператором, а statement – командой. Будь то так или иначе, но важнее всего понимать и соблюдать различие между понятиями.)
На цитированную вами «заметку Листера» ссылатся не стоит, тем более говорить, что суть присваивания «чётко сформулирована». Нет, «формулировка» эта нечетка, неполна и даже неверна, так что формулировкой и не назовешь. Более того, в оригинале часть предложений (а их всего несколько) мистера Листера попросту лишены смысла – перечитайте сами. Вообще, там полная чушь, я мог бы комментировать подробно, но пока воздержусь.
Кроме того, злосчастная заметка Листера отношения к затронутому Вами вопросу не имеет, да и Вы ее неправильно толкуете. Присваивание в Си является операцией (operator) не потому что оно допускает выполнение преобразований. Присваивание в Си (в отличие от Паскаля) выдает в свой контекст значение, подобно +, < и т.д. Можно написать, скажем, такое выражение: 3*(b=x+y). Вот поэтому «=» в Си и числится среди операций, а «:=» в Паскале – нет.
Так что формулированное Вами «могут ли при присваивании выполняться какие-то преобразования», равно как и соображения о приведениях типа и о «перегружении», к вопросу о толковании «:=» как операции отношения не имеет.
Кстати, по поводу вашего примера «программы, которая работает во всех версиях Паскаля». Там используется тип чисел longint, которого в Паскале, строго говоря, нет. У языка два стандарта – Pascal (ISO 7185:1990), т.е. Паскаль Н.Вирта, и Extended Pascal (ISO 10206:1990) – Расширенный Паскаль. Ни один из этих стандартов longint не определяет.
Правда, есть еще и такое понятие как «Object Pascal», но оно не стандартизовано и вообще весьма расплывчато – скорее, это семейство реализаций чем язык, так что сказать что в нем есть в принципе невозможно. В частности, в отношении longint можно говорить лишь о реализациях того или иного нестандартного расширения языка Паскаль. Ответить Удалить
Источник: kpolyakov.blogspot.com
Как обозначается команда присваивания в pascal
Оператором называется предложение языка программирования, задающее полное описание некоторого, необходимого для исполнения, действия.
Последовательность операторов представляет собой основную часть программы на языке Паскаль. Разделителем операторов в программе является символ «точка с запятой».
Оператор присваивания
Для записи в именованные ячейки памяти различных значений используется оператор присваивания. В общем виде этот оператор имеет следующий вид:
переменная := выражение
где оператор присваивания обозначается неразрывным знаком := (в Паскале не следует путать с операцией отношения = ).
Механизм выполнения оператора присваивания: вычисляется выражение в правой части от оператора и его результат заносится в ячейку памяти, определяемую именем переменной в левой части. Например:
Рассмотрим работу оператора присваивания в данном примере пошагово:
- Из ячейки памяти с именем k выбирается текущее значение.
- К текущему значению прибавляется 10.
- Результат записывается в ту же самую ячейку памяти (предыдущее значение восстановить после новой записи невозможно!)
ВНИМАНИЕ: выражение должно быть совместимо по типу данных с переменной.
В PascalABC.NET определены также операторы присваивания со значками +=, -=, *=, /= . Действие этих операторов заключается в изменении значения переменной в правой части оператора с учетом обозначенной арифметической операции (перед знаком равенства) и значения в правой части. Например:
- k += 100;
- n -= 8;
- m *= 10;
- b /= 2;
Гіпермаркет Знань>>Інформатика>>Інформатика 7 клас>> Інформатика: Тема 33. Восьминіжка і команда циклу Повтори N разів
Практична робота до предмету Інформатика 7 клас.
Розгляд теми: Практична робота № 15: «Складання програм з циклами»
Тест: Команда присваивания. Ввод и вывод данных.
Вопрос №1: Как обозначается команда присваивания в PascalABC?
Выберите один из вариантов ответа:
Вопрос №2: Укажите неверный оператор
Выберите один из вариантов ответа:
Вопрос №3: С помощью какой команды мы можем ввести в переменную а значение во время выполнении программы?
Выберите один из вариантов ответа:
• С помощью команды присваивание
• С помощью команды write(a);
• С помощью команды read(a);
Вопрос №4: Алгоритм это .
Выберите один из вариантов ответа:
• Последовательность команд, выполнение которых приводит нас к решению поставленной задачи.
• Последовательность действий, выполнив которые мы можем запустить программу.
• Задача, которую можно решить.
Вопрос №5: С помощью какой команды мы можем вывести на экран текст?
Выберите один из вариантов ответа:
• write(‘текст’)
• read(‘текст’)
• написать(‘текст’)
• вывести(‘текст’)
• отобразить на экран(‘текст’)
Вопрос №6: Каждое выражение(каждый оператор) в программе отделяется друг от друга .
Выберите один из вариантов ответа:
• точкой с запятой
• точкой
• запятой
• тире
• дефисом
Вопрос №7: Раздел var это .
Выберите один из вариантов ответа:
• Раздел описания переменных
• Начало программы
• Конец программы
• Раздел имя программы
• Раздел подключения библиотек
Вопрос №8: Выберите правильные операторы с помощью которых мы можем вывести в окне выполнения программы текст «Номер 1», учитывая что а:=1.
Выберите несколько вариантов ответа:
• write(‘Номер 1’);
• write(«Номер 1»);
• write(‘Номер ‘); write(a);
• write(‘Номер ‘ + inttostr(a));
• write(‘Номер ‘ + strtoin(a));
Вопрос №9: Установите соответствие:
1. Присвоить;
2. Начало;
3. Описание;
4. Прочитать (ввести);
5. Вывести.
Укажите порядок следования вариантов ответа:
Вопрос №10: С помощью какой команды можно вывести на экран значение переменной sum с переходом на следующую строку в окне вывода?
Выберите один из вариантов ответа:
• writeln(sum);
• write(sum);
• read(sum);
• readln(sum);
Надіслано учителем інформатики Міжнародного ліцею «Гранд» Чебаном Л.І.
Матеріали з інформатики онлайн, завдання та відповіді по класам, плани конспектів уроків з інформатики скачати
Ответы
for i: =1 to 1000 do
if i mod 2=0 then s: =s+i;
for i: =1 to 1000 do
if odd(i) then s: =s+i;
a: array[1..500] of integer;
for i: =1 to 1000 do
if odd(i) then a[i]: =i;
for i: =1 to n do
слева сколько воды находится в кувшинах
8 — 0 : 1. наливаем в кувшин 8 л
5 — 3 : 2. переливаем из 8 л кувшина в 3 литровый, и выливаем в реку
2 — 3 : 3. переливаем из 8 л кувшина 3 литровый и выливаем в реку
0 — 2 : 4. переливаем оставшиеся 2 л из 8 литрового в 3 литровый кувшин
8 — 2 : 5. наливаем воду в 8 л кувшин
7 — 3 : 6. наливаем воду из 8 л кувшина в 3 л пока он не заполниться, т.е. наливаем туда 1 л, в 8 л кувшине остается 7 литров.
Нет связанных сообщений
Источник: technicspace.ru
Как обозначается команда присваивания в Pascal ABC?
Найди верный ответ на вопрос ✅ «Как обозначается команда присваивания в Pascal ABC? . » по предмету Информатика, а если ответа нет или никто не дал верного ответа, то воспользуйся поиском и попробуй найти ответ среди похожих вопросов.
Новые вопросы по информатике
Сколько всего различных символов может быть в восьмибитной текстовой кодировке? 1) 8 2) 512 3) 256 4) 65536
Паскаль. Написать программу подсчета количества отрицательных чисел среди любых 10 вводимых. 1 программа с использованием while, 2 программа — repeat
Сколько кб информации содержит сообщение объемом 2^20 бит?
Информатика пользователь создад сообщение из 256 символов в кодировке Unicode в которой каждый символ кодируется 16 битами после редактирования информационный объем сообщения составил 3072 бит Определите сколько символов удалили сообщение если его
Источник: urokam.net