Способ присваивания значения переменной

§ 17. Оператор присваивания, ввод и вывод данных

Присваивание — это действие, в результате которого переменная величина получает определенное значение. В программе на Паскале существуют три способа присваивания значения переменной:

  1. оператор присваивания;
  2. оператор ввода;
  3. передача значения через параметры подпрограммы.

Оператор присваивания имеет следующий формат:

Сначала вычисляется выражение, затем полученное значение присваивается переменной. В первом примере приведен арифметический оператор присваивания. Здесь х — переменная вещественного типа. Во втором примере — логический оператор присваивания. Здесь b — переменная типа Boolean.

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

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

Под вводом понимается передача данных с внешнего устройства компьютера в оперативную память. При выводе данные передаются из оперативной памяти на внешнее устройство (рис. 3.11).

Рис. 3.11. Ввод и вывод

Операция ввода называется чтением и выполняется с помощью оператора Read. Вывод называется записью, и для его выполнения используется оператор Write.

К внешним устройствам относятся устройства ввода и вывода (клавиатура, монитор, принтер и др.) и устройства внешней памяти (магнитные и оптические диски, флеш-память и др.). Данные на внешних устройствах организованы в файлы.

Для внешних запоминающих устройств (ВЗУ) файл — это поименованная область памяти этого устройства. В файлы на ВЗУ можно записывать данные по команде Write и можно читать данные из файлов по команде Read. На одном устройстве ВЗУ может храниться множество файлов одновременно. Правила именования файлов на ВЗУ определяются операционной системой. Имена для файлов, создаваемых пользователем, задает сам пользователь.

Устройства ввода с клавиатуры и вывода на экран монитора являются однофайловыми устройствами. Считается, что с клавиатурой связан один системный файл с именем INPUT. Поэтому ввод с клавиатуры равнозначен чтению из файла INPUT. С монитором связан системный файл, который называется OUTPUT. Вывод на экран — это запись данных в файл OUTPUT .

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

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

При выполнении этого оператора происходит прерывание исполнения программы, после чего пользователь должен набрать на клавиатуре значения переменных а, Ь, с, d, отделяя их друг от друга пробелами. При этом вводимые значения высвечиваются на экране. В конце нажимается клавиша Enter. Значения следует вводить в строгом соответствии с синтаксисом Паскаля.

Набираем на клавиатуре:

Если в программе имеется несколько подряд идущих операторов Read, то данные для них можно вводить последовательно (на экране отражаются в одной строке) и лишь в конце ввода нужно нажать клавишу Enter.

Читайте также:  Способы ремонта автомобильных дорог

Набираем на клавиатуре и видим на экране:

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

Здесь слово «ReadLn» означает read line — «читать строку». Нажатие клавиши Enter в процессе ввода вырабатывает признак «конец строки», и данные при выполнении следующего оператора ввода будут отражаться на экране с начала новой строки. Если в предыдущем примере заменить операторы Read на ReadLn:

то ввод значений будет происходить из двух строк, отраженных на экране:

Вывод на экран производится по оператору обращения к стандартной процедуре:

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

Например:

Если, например, А = 5 и В = 7, то на экране получим:

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

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

Write line — «писать строку». Его действие отличается от оператора Write тем, что после вывода последнего в списке значения происходит перевод курсора к началу следующей строки. Оператор WriteLn, записанный без параметров, вызывает перевод строки.

В списке вывода могут присутствовать указатели форматов вывода (форматы). Формат определяет представление выводимого значения на экране. Формат отделяется от соответствующего ему элемента двоеточием. Если указатель формата отсутствует, то машина выводит значение по определенному правилу, предусмотренному по умолчанию.

Линейная программа. Следование — простейшая алгоритмическая структура. Программа, реализующая следование, называется линейной программой. В линейной программе могут присутствовать только операторы присваивания, ввода, вывода и обращения к процедурам. Заметим, что операторы Read и Write являются обращениями к стандартным процедурам Паскаля.

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

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

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

Числа 13 и 28 вводятся пользователем с клавиатуры, всё остальное автоматически выводится по программе.

Пример 2. Дано натуральное трехзначное число. Требуется вычислить сумму его цифр. Например, если дано число 325, то в результате должно получиться: 3 + 2 + 5 = 10.

Сначала составим программу, а потом ее прокомментируем.

В этой программе использованы две операции целочисленной арифметики: div — целочисленное деление и mod — остаток от целочисленного деления (см. табл. 3.3). Остаток от деления на 10 (mod) выделяет младшую цифру числа, а целочисленное деление на 10 (div) отбрасывает младшую цифру.

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

Выполнение программы на компьютере приводит к такому же результату.

Заметим, что эту задачу можно решить с помощью всего одного оператора присваивания:

Система основных понятий

Вопросы и задания

  1. Назовите последовательность действий при выполнении оператора присваивания.
  2. Сформулируйте правило соответствия типов для оператора присваивания. Какое существует исключение из этого правила?
  3. Если у — вещественная переменная, а n — целая, то какие из следующих операторов присваивания правильные, а какие — нет?
Читайте также:  Способы обшивки дома вагонкой

  • Напишите линейную программу, в результате выполнения которой целочисленные переменные х и у обменяются значениями. При этом нельзя использовать дополнительные переменные. Найдя такой алгоритм, определите, в чем его недостаток по сравнению с методом обмена через третью переменную. Можно ли его применять для вещественных чисел?
  • Напишите оператор присваивания, в результате выполнения которого целочисленной переменной h присвоится значение цифры, стоящей в разряде сотен в записи положительного целого числа k (например, если k = 28 796, то h = 7).
  • Напишите линейную программу, в результате выполнения которой в целочисленной переменной S получится перевернутое целое четырехзначное число k. Например: если k = 1357, то S = 7531.
  • Напишите линейную программу перевода любого целого четырехзначного двоичного числа в десятичную систему счисления. Например, дано число в двоичной системе счисления: 11012. Перевод в десятичную систему выполняется так: 1•2 3 +1•2 2 + 0•2 1 + 1 = 13.
  • Источник

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

    Синтаксис

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

    assignment-operator: один из следующих операторов:
    = *= /= %= += -= >>= &= ^= |=

    Remarks

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

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

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

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

    Таблица операторов присваивания

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

    Ключевые слова операторов

    Три составных оператора присваивания имеют эквиваленты ключевого слова. К ним относятся:

    Оператор Эквивалентный
    &= and_eq
    |= or_eq
    ^= xor_eq

    C++ задает эти ключевые слова операторов в качестве альтернативного написания для составных операторов присваивания. В языке C альтернативное написание предоставляется в виде макросов в заголовке. В C++ альтернативные слова являются ключевыми словами; использование или эквивалент C++ не рекомендуется. В Microsoft C++ /permissive- /Za параметр компилятора или необходим для включения альтернативного написания.

    Пример

    Простое присваивание

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

    Объекты const и volatile типов могут быть назначены l-значениям только типов volatile , а не const или volatile .

    Присваивание объектам типа класса ( struct типы, union и class ) выполняется функцией с именем operator= . По умолчанию эта функция-оператор производит побитовое копирование; однако такое поведение можно изменить с помощью перегруженных операторов. Для получения дополнительной информации см. раздел Перегрузка операторов. Типы классов также могут иметь операторы присваивания и перемещения копирования. Дополнительные сведения см. в разделе конструкторы копирования и операторы присваивания копирования и конструкторы перемещения и операторы присваивания перемещения.

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

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

    Для объектов типа класса присваивание отличается от инициализации. Для иллюстрации того, насколько сильно присваивание может отличаться от инициализации, рассмотрим код

    В предыдущем коде показан инициализатор; он вызывает конструктор для типа UserType2 , который принимает аргумент типа UserType1 . В коде

    может вызывать одно из указанных ниже действий.

    Вызовите функцию operator= для UserType2 , предоставленную operator= с UserType1 аргументом.

    Вызывать функцию явного преобразования UserType1::operator UserType2 , если такая функция существует.

    Вызывать конструктор UserType2::UserType2 , если он существует, принимает аргумент UserType1 и копирует результат.

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

    Составные операторы присваивания показаны в таблице операторы назначения. Эти операторы имеют форму E1 Op = E2, где E1 — это const неизменяемое l-значение, а E2 —:

    указатель, если Op имеет значение + или

    Форма E1 Op = E2 ведет себя как E1 = E1 Op E2, но E1 вычисляется только один раз.

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

    Результат операторов присваивания

    Операторы присваивания возвращают значение объекта, указанного левым операндом после присваивания. Результирующий тип — это тип левого операнда. Результатом выражения присваивания всегда является l-значение. Эти операторы имеют ассоциативность справа налево. Левый операнд должен быть изменяемым l-значением.

    В ANSI C результат выражения присваивания не является l-значением. Это означает, что юридическое выражение C++ (a += b) += c не допускается в C.

    Источник

    Читайте также:  Основные способы управления качеством
    Оцените статью
    Разные способы