- § 17. Оператор присваивания, ввод и вывод данных
- Ввод и вывод данных
- Вопросы и задания
- #3 Типы данных в языке Pascal. Объявление переменных. Целые числа integer. Оператор присваивания. Инициализация в Паскаль
- Primary tabs
- Forums:
- Деление данных на виды «по представлению в коде программы» на языке Pascal
- Сильная типизация
- Типы данных в Pascal
- Чем отличаются «виды представления данных» от типов данных
- Объявление переменных
- Объявление переменных списком
- Объявление целочисленных переменных
- Оператор присваивания
- Присваивание переменным литералов и вывод значений переменных на экран
- Присваивание значений одних переменных другим переменным
- Вывод значений переменных на экран
- Присваивание переменным результатов выражений
- Что определяет тип арифметических выражений
- Работа с результатом выражений
- Инициализация переменной
- Программа выполняется сверху вниз построчно — перезапись значений переменных
- Разбор практических примеров
- Пример №1
- Пример №2
- Видео-пояснения
- Задачи для самостоятельного решения
- Теоретические вопросы:
- Задачи:
§ 17. Оператор присваивания, ввод и вывод данных
Присваивание — это действие, в результате которого переменная величина получает определенное значение. В программе на Паскале существуют три способа присваивания значения переменной:
- оператор присваивания;
- оператор ввода;
- передача значения через параметры подпрограммы.
Оператор присваивания имеет следующий формат:
Сначала вычисляется выражение, затем полученное значение присваивается переменной. В первом примере приведен арифметический оператор присваивания. Здесь х — переменная вещественного типа. Во втором примере — логический оператор присваивания. Здесь 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 таблица будет выглядеть следующим образом:
Выполнение программы на компьютере приводит к такому же результату.
Заметим, что эту задачу можно решить с помощью всего одного оператора присваивания:
Система основных понятий
Вопросы и задания
- Назовите последовательность действий при выполнении оператора присваивания.
- Сформулируйте правило соответствия типов для оператора присваивания. Какое существует исключение из этого правила?
- Если у — вещественная переменная, а n — целая, то какие из следующих операторов присваивания правильные, а какие — нет?
Источник
#3 Типы данных в языке Pascal. Объявление переменных. Целые числа integer. Оператор присваивания. Инициализация в Паскаль
Primary tabs
Forums:
Примечание: далее мы начнём говорить о типах данных в Паскале. Выясним следующие:
- все данные в паскале имеют в определённый момент времени выполнения программы какой-то тип (разные данные -разный);
- узнаем какие конструкции обладают типом данных;
- поговорим о первом типе данных, который служит для описания целых чисел и имеет название «integer«. А о данный других типов поговорим уже в следующих уроках;
Деление данных на виды «по представлению в коде программы» на языке Pascal
Рассмотрим три вида представления данных в коде программы на языке Паскаль («виды представления данных«):
- В виде литералов — т.е. быть явно записаны в программе, например, как числа или строки в кавычках.
- По именам переменных. Переменная — это псевдоним (имя) для хранящихся в ней данных (например, числа или строки).
Любая переменная похожа на звание чемпиона — конкретный человек носящий это звание меняется, но само звание звучит одинаково (не меняется) для разных людей в разные годы.
Здесь звание чемпиона — это имя переменной, а конкретный человек — данные, в данный момент записанные в неё. Значения переменных в программе можно менять сколько угодно раз.
В отличие от литерала, переменная может сколько угодно раз в теле программы менять своё значение.
Подробнее о переменных мы поговорим далее в этом уроке.
Как результаты выражений, в которые входят переменные или литералы.
Выражение — последовательность действий над фрагментами данных, приводящая к каком-то результату. В Паскале этот результат всегда имеет определённый тип. Выражения работающие с числами называют арифметическими выражениями. Существуют и другие типы выражений.
Подробнее о выражениях мы поговорим далее.
Таким образом, любые данные к коде программы на языке Паскаль можно отнести к одному из трёх видов:
- или к переменным
- или к литералам
- или к результатам выражений
Сильная типизация
Паскаль — язык т.н. статической («сильной» .»постоянной») типизации. Это значит, что для каждой переменной требуется, чтобы переменная было объявлена с указанием к какому типу она принадлежит до использования этой переменной в теле программы. Далее мы изучим базовые типы данных и, как следствие, переменные, которые используются в Паскале.
Типы данных в Pascal
В Паскале выделяют 5 типов данных (в списке сразу укажем ключевые слова, с помощью которых обозначаются эти типы в программном коде):
- integer — целые числа.
- real — вещественные числа.
- boolean — логический тип данных (значения типа да/нет, истина/лож).
- char — символьный тип.
- string — строковый тип.
В этом уроке мы будем говорить об понятия общих для всех типов данных на примере конкретного типа данных — integer (целые числа).
Чем отличаются «виды представления данных» от типов данных
Если виды представление данных — это просто различная форма записи обращения к какой либо информации в коде программы, то деление на типы данных — позволяет отнести к одной группе данные вне зависимости от их вида.
Как мы увидим позднее одного и того же типа могут быть и переменные и литералы и результаты выражений, а , в связи с чем, можно нарисовать такую диаграмму, иллюстрирующую соотношение между типами данных и видами представления данных:
Объявление переменных
Объявление переменных — это уведомление компилятора Паскаль о том, что в вашей программе будут использоваться переменные с указанными именами, каждая из которых имеет определённый (указанный в секции объявления) тип.
При объявлении переменной всегда указывают:
Объявление переменных происходит после ключевого слова var, до до тела программы.
В общем виде объявление переменной можно записать так (как схему):
Пример объявления переменных по одной:
То есть сначала идёт имя переменной, потом двоеточие, а потом один из типов данных (integer, string или иной — смотря какой требуется).
Объявление переменных списком
Также переменные можно объявлять списком (переменные одного типа можно просто перечислить через запятую, а потом после двоеточия указать типа):
— в списке имена переменных разделяются запятой, переносы строк между элементами списка значения не имеют.
В этом уроке мы поговорим о типе integer и рассмотрим примеры работы с этим типом данных.
Объявление целочисленных переменных
Integer — тип данных соответствующий целым числам.
Объявим переменную такого типа:
Можно объявить несколько переменных немного по-разному:
Перед запуском программы, все переменные которые используются в её теле необходимо объявить.
Если вы объявите какие-то переменные, но использовать их не будете, то к ошибке это не приведёт, но считается плохим стилем.
Оператор присваивания
Оператор — это знак операции, например знак суммы это «$+$».
Оператор присваивания обозначается знаком (из двух символов):
$:=$
Этот оператор позволяет записывать значение в переменную («запоминать это значение в переменной»), схема его работы такова:
Или, опять же схематично:
А теперь как это выглядит с конкрентыми именами переменных и значениями в коде (пример работы оператора присваивания):
Присваивание переменным литералов и вывод значений переменных на экран
Далее, в теле программы мы можем записывать в данную переменную значения, например:
— если это литералы, то они должны быть целочисленными, так как типы данных при присваивании в Паскаль всегда должны совпадать.
После операции присваивания ставится точка с запятой.
Целый тип также поддерживает ноль и отрицательные значения:
Присваивание значений одних переменных другим переменным
Можно присваивать одним переменным значение других, например:
Вывод значений переменных на экран
Чтобы узнать чему стало равно значение переменной $a$ можно вывести её значение в консоль, передав как аргумент в стандартную процедуру writelen() или write(). Тогда наш код будет выглядеть так:
Что мы получим в консоли? Запустите код, объявив обе переменные и оформив тело программы (его содержимое это и есть последние 3 строчки).
Переменные тоже можно передавать во writeln() в любом количестве, разделяя запятой, например две шутки:
в том числе и вперемежку с литералами, например символьными:
Присваивание переменным результатов выражений
Переменным можно присваивать результаты выражений. Для для переменных числового типа (integer или real) такие выражения называются арифметическими.
Целочисленным переменным можно присваивать значения выражений, которые получаются в результате выполнения операций:
- $+$ суммы (сложения)
- $-$ разности (вычитание)
- $*$ произведения (умножение)
— так как эти операции возвращают тип integer. Операцию же деления $/$ использовать нельзя, так она возвращает другой тип — real (вещественные числа). В Паскале любая попытка присвоить переменной данные другого типа приводит к ошибке («падению» программы).
Что определяет тип арифметических выражений
Также в выражения, значения которых можно присваивать переменным типа integer должны входить только:
- целочисленные литералы
- или целочисленные переменные.
Можно сказать что тип, который возвращается выражением (тип его результата) определяется двумя моментами:
- типом операций (допустимые перечислены выше)
- типом операндов. Операнды — это аргументы операций, подобно аргументам процедуры на их
основе производятся какие-то действия. Но операнды операций, в отличие от аргументов процедур, записываются не в скобках, а справа и слева от знака операций, так как мы это делаем в математических выражениях:
Таким образом, допустимы выражения:
А также выражения с участием других переменных:
Работа с результатом выражений
Результат выражения представляет собой данные, которые в Паскале всегда обладают с каким-то конкретным типом, потому с выражениями можно делать то же что и с переменными и литералами, а именно:
- Присваивать их значения переменным, например: a := 22 + 3* 999;
- Делать одни выражения частью других (в этом случае части называют подвыражениями), например сделаем предыдущее выражение подвыражением:
Подвыражение — это любая часть основного выражения, в которой есть хотя бы один оператор (как и выражение всегда обладает каким-то возвращаемым значение известного типа). Например:
Это подвыражение выражения:
Передавать результаты выражения (и как следствие — их результаты) в процедуры, например:
Во write() и writeln() также можно передавать любое количество аргументов-выражений, а также аргументов другого вида:
Инициализация переменной
Инициализация переменной — это первое присваивание какого-то значения переменной. Это может быть:
- или значение литерала
- или считывание значения для переменной извне (например, пользователь может вводить значение переменных в консоли, но об этом мы поговорим в следующих уроках)
- или присваивание данной переменной значения другой, уже инициализированной переменной.
- или значение выражения, в котором или одни литералы или инициализированные переменные или и то и то
Таким образом один из примеров выше мы могли бы переписать с такими комментариями:
Программа выполняется сверху вниз построчно — перезапись значений переменных
Программа выполняется сверху вниз построчно, т. е. сначала первая строка тела программы потом вторая и т.д. — а потому значение переменной в каждой строке программы (по мере её достижения) меняется в случае если очередной раз присваивается какое-то другое значение, отличное от того, что было раньше.
Для одного из приведённых примеров справа в комментариях допишем чему оказываются равны переменные после выполнения очередной строки:
— то есть (во время выполнения программы) после её выполнения, например:
— с помощью комментариев для последней строки показано, что значение меняется после выполнения операции присваивания «сразу после точки с запятой», и если в следующих строках переменной не присваивают какое-то другое значение, то оно и не меняется.
Разбор практических примеров
Пример №1
У вас есть целочисленная переменная $a$ и два строковых литерала:
Присвойте переменной $a$ значение и выведете на экран фразу с этим значением — используя указанные выше литералы (можно не только их, но их обязательно), например для:
Начнём писать код, в теле программы:
— таким образом мы выполнили первое требование задачи, присвоив значение переменной. Далее от нас хотят, чтобы программа выводила фразу, где число яблок зависит от значения переменной $a$ (а точнее равно ему), при этом про число груш ничего не сказано.
Второй момент — необходимо использовать литералы в точности так как они приведены в условии, что ж попробуем вывести фразу, используя значение переменной и указанные литералы:
— раз про груши ничего не сказано, то их число выводим просто в составе строкового литерала (оно не будет меняться пока мы не изменим сам литерал), а вот число яблок передаём в процедуру как значение переменной $a$.
Заметьте, что литерал:
‘ и 8 груш’
мы начали с пробела, чтобы при выводе он не «склеился» со словом «яблок«.
Запустите последний код. Чего-то там не хватает? А именно — в консоли мы получим:
— почему склеилось имя и значения? Чтобы понять это нужно внимательно посмотреть на код вызова процедуры:
— как мы можем видеть, здесь в конце первого аргумента-литерала нет пробела, а значит значение переменной $a$ (которое есть само по себе просто число, а значит содержать пробелов не может) просто выведется вплотную к первому аргументу. Чтобы исправить эту ситуацию, можно было бы изменить первый литерал, добавив в его конец символ-пробел:
НО: таким образом мы бы не следовали строго условию задачи использовать указанные строковые литералы (‘У Коли’ и ‘ яблок’), так как фактически
— это разные литералы (в первом на один символ больше и этот символ — пробел). А значит, чтобы не модифицировать первый строковый литерал, просто добавим в вызов ещё один аргумент — символьный литерал (а точнее — пробел):
— что и будет подходящим вызовом процедуры writeln() для решения задачи.
Пример №2
Пусть у вас есть задача:
Васе $m$ лет, а Паше $k$ лет. Напишите программу, в которая считает разницу между возрастом Васи и Паши (то есть выясняет насколько Вася старше Паши).
Конкретные значения возрастов этих двух человек задайте в коде в виде двух переменных, которым присвойте целые численные значения (используя целочисленные литералы). Результат запишите в третью переменную и выведите значение на экран.
Начнём решать данную задачу. В начале условия сказано, что возраста обоих героев надо задать как значения переменных, давайте сделаем это с помощью оператора присваивания:
Далее разницу их возрастов просят записать в третью переменную, что ж сделаем и это:
В самом конце нас просили вывести значение разницы на экран, сделаем и это используя вызов стандартной процедуры writeln(), в качестве пояснения пользователю передав строковый литерал как аргумент перед вторым аргументом-переменной:
То есть в данный момент мы имеем код:
Осталось объявить все используемые в теле программы переменные. В данном случае их 3 штуки, объявим их через запятую в секции var до начала тела программы:
Запустите этот код и посмотрите как он работает, если консоль закрывается сразу после выполнения кода, используйте вызов для задержки консоли.
Видео-пояснения
К этому уроку есть следующие видео:
Задачи для самостоятельного решения
Теоретические вопросы:
Объясните что здесь происходит.
И ещё один вопрос:
Будет ли работать код:
Объясните что здесь происходит.
Есть программный код:
Два задания к этому коду:
- Ответьте на вопросы в комментариях письменно.
- Запустите этот код, предварительно объявив используемые переменные, и выведите в консоль с write() или writeln() значения переменных, в строках, где в комментариях к коду задан вопрос.
- Запишите строку, в которой с помощью одного writeln() выводятся результаты трёх разных (любых) арифметических выражений.
- Сделайте то же самое, но выводя уже три переменные, каждой из которых предварительно присвойте значение одного из арифметических выражений.
Задачи:
(напишите код и продемонстрируйте его работу):
двумя способами (чтобы в консоли получилось оба варианта):
- в столбик, разделив пробелами
- в строчку
Присвойте переменной $a$ значение и выведете на экран фразу с этим значением — используя указанные выше литералы (можно не только их, но их обязательно), например для:
Источник