#3 Типы данных в языке Pascal. Объявление переменных. Целые числа integer. Оператор присваивания. Инициализация в Паскаль

#3 Типы данных в языке Pascal. Объявление переменных. Целые числа integer. Оператор присваивания. Инициализация в Паскаль

Примечание: далее мы начнём говорить о типах данных в Паскале. Выясним следующие:

  • все данные в паскале имеют в определённый момент времени выполнения программы какой-то тип (разные данные -разный);
  • узнаем какие конструкции обладают типом данных;
  • поговорим о первом типе данных, который служит для описания целых чисел и имеет название "integer". А о данный других типов поговорим уже в следующих уроках;

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

Рассмотрим три вида представления данных в коде программы на языке Паскаль ("виды представления данных"):

  1. В виде литералов -- т.е. быть явно записаны в программе, например, как числа или строки в кавычках.
  2. По именам переменных. Переменная -- это псевдоним (имя) для хранящихся в ней данных (например, числа или строки).

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

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

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

Подробнее о переменных мы поговорим далее в этом уроке.

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

Подробнее о выражениях мы поговорим далее.

Таким образом, любые данные к коде программы на языке Паскаль можно отнести к одному из трёх видов:

  • или к переменным
  • или к литералам
  • или к результатам выражений

Сильная типизация

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

Типы данных в Pascal

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

  1. integer -- целые числа.
  2. real -- вещественные числа.
  3. boolean -- логический тип данных (значения типа да/нет, истина/лож).
  4. char -- символьный тип.
  5. string -- строковый тип.

В этом уроке мы будем говорить об понятия общих для всех типов данных на примере конкретного типа данных -- integer (целые числа).

Чем отличаются "виды представления данных" от типов данных

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

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

Объявление переменных

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

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

  1. Имя переменной.
  2. Тип переменной.

Объявление переменных происходит после ключевого слова var, до до тела программы.

В общем виде объявление переменной можно записать так (как схему):

Пример объявления переменных по одной:

То есть сначала идёт имя переменной, потом двоеточие, а потом один из типов данных (integer, string или иной -- смотря какой требуется).

Объявление переменных списком

Также переменные можно объявлять списком (переменные одного типа можно просто перечислить через запятую, а потом после двоеточия указать типа):

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

В этом уроке мы поговорим о типе integer и рассмотрим примеры работы с этим типом данных.

Объявление целочисленных переменных

Integer -- тип данных соответствующий целым числам.

Объявим переменную такого типа:

Можно объявить несколько переменных немного по-разному:

Перед запуском программы, все переменные которые используются в её теле необходимо объявить. Если вы объявите какие-то переменные, но использовать их не будете, то к ошибке это не приведёт, но считается плохим стилем.

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

Оператор -- это знак операции, например знак суммы это "$+$".

Оператор присваивания обозначается знаком (из двух символов): $:=$ Этот оператор позволяет записывать значение в переменную ("запоминать это значение в переменной"), схема его работы такова:

Или, опять же схематично:

А теперь как это выглядит с конкрентыми именами переменных и значениями в коде (пример работы оператора присваивания):

Присваивание переменным литералов и вывод значений переменных на экран

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

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

Целый тип также поддерживает ноль и отрицательные значения:

Присваивание значений одних переменных другим переменным

Можно присваивать одним переменным значение других, например:

Вывод значений переменных на экран

Чтобы узнать чему стало равно значение переменной $a$ можно вывести её значение в консоль, передав как аргумент в стандартную процедуру writeln() или write(). Тогда наш код будет выглядеть так:

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

Переменные тоже можно передавать во writeln() в любом количестве, разделяя запятой, например две шутки:

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

Присваивание переменным результатов выражений

Переменным можно присваивать результаты выражений. Для для переменных числового типа (integer или real) такие выражения называются арифметическими. Целочисленным переменным можно присваивать значения выражений, которые получаются в результате выполнения операций:

  1. $+$ суммы (сложения)
  2. $-$ разности (вычитание)
  3. $*$ произведения (умножение)

-- так как эти операции возвращают тип integer. Операцию же деления $/$ использовать нельзя, так она возвращает другой тип -- real (вещественные числа). В Паскале любая попытка присвоить переменной данные другого типа приводит к ошибке ("падению" программы).

Что определяет тип арифметических выражений

Также в выражения, значения которых можно присваивать переменным типа integer должны входить только:

  • целочисленные литералы
  • или целочисленные переменные.

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

  1. типом операций (допустимые перечислены выше)
  2. типом операндов. Операнды -- это аргументы операций, подобно аргументам процедуры на их основе производятся какие-то действия. Но операнды операций, в отличие от аргументов процедур, записываются не в скобках, а справа и слева от знака операций, так как мы это делаем в математических выражениях:

Таким образом, допустимы выражения:

А также выражения с участием других переменных:

Работа с результатом выражений

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

  1. Присваивать их значения переменным, например: a := 22 + 3* 999;
  2. Делать одни выражения частью других (в этом случае части называют подвыражениями), например сделаем предыдущее выражение подвыражением:

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

Это подвыражение выражения:

Во write() и writeln() также можно передавать любое количество аргументов-выражений, а также аргументов другого вида:

Инициализация переменной

Инициализация переменной -- это первое присваивание какого-то значения переменной. Это может быть:

  1. или значение литерала
  2. или считывание значения для переменной извне (например, пользователь может вводить значение переменных в консоли, но об этом мы поговорим в следующих уроках)
  3. или присваивание данной переменной значения другой, уже инициализированной переменной.
  4. или значение выражения, в котором или одни литералы или инициализированные переменные или и то и то

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

Программа выполняется сверху вниз построчно -- перезапись значений переменных

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

Для одного из приведённых примеров справа в комментариях допишем чему оказываются равны переменные после выполнения очередной строки:

-- то есть (во время выполнения программы) после её выполнения, например:

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

Разбор практических примеров

Пример №1

У вас есть целочисленная переменная $a$ и два строковых литерала:

и второй:

Присвойте переменной $a$ значение и выведете на экран фразу с этим значением -- используя указанные выше литералы (можно не только их, но их обязательно), например для:

Должно выводиться:

Начнём писать код, в теле программы:

-- таким образом мы выполнили первое требование задачи, присвоив значение переменной. Далее от нас хотят, чтобы программа выводила фразу, где число яблок зависит от значения переменной $a$ (а точнее равно ему), при этом про число груш ничего не сказано. Второй момент -- необходимо использовать литералы в точности так как они приведены в условии, что ж попробуем вывести фразу, используя значение переменной и указанные литералы:

-- раз про груши ничего не сказано, то их число выводим просто в составе строкового литерала (оно не будет меняться пока мы не изменим сам литерал), а вот число яблок передаём в процедуру как значение переменной $a$. Заметьте, что литерал: ' и 8 груш' мы начали с пробела, чтобы при выводе он не "склеился" со словом "яблок".

Запустите последний код. Чего-то там не хватает? А именно -- в консоли мы получим:

-- почему склеилось имя и значения? Чтобы понять это нужно внимательно посмотреть на код вызова процедуры:

-- как мы можем видеть, здесь в конце первого аргумента-литерала нет пробела, а значит значение переменной $a$ (которое есть само по себе просто число, а значит содержать пробелов не может) просто выведется вплотную к первому аргументу. Чтобы исправить эту ситуацию, можно было бы изменить первый литерал, добавив в его конец символ-пробел:

НО: таким образом мы бы не следовали строго условию задачи использовать указанные строковые литералы ('У Коли' и ' яблок'), так как фактически

-- это разные литералы (в первом на один символ больше и этот символ -- пробел). А значит, чтобы не модифицировать первый строковый литерал, просто добавим в вызов ещё один аргумент -- символьный литерал (а точнее - пробел):

-- что и будет подходящим вызовом процедуры writeln() для решения задачи.

Пример №2

Пусть у вас есть задача:

Васе $m$ лет, а Паше $k$ лет. Напишите программу, в которая считает разницу между возрастом Васи и Паши (то есть выясняет насколько Вася старше Паши). Конкретные значения возрастов этих двух человек задайте в коде в виде двух переменных, которым присвойте целые численные значения (используя целочисленные литералы). Результат запишите в третью переменную и выведите значение на экран.

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

Далее разницу их возрастов просят записать в третью переменную, что ж сделаем и это:

В самом конце нас просили вывести значение разницы на экран, сделаем и это используя вызов стандартной процедуры writeln(), в качестве пояснения пользователю передав строковый литерал как аргумент перед вторым аргументом-переменной:

То есть в данный момент мы имеем код:

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

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

Видео-пояснения

К этому уроку есть следующие видео:

Задачи для самостоятельного решения

Теоретические вопросы:

Объясните что здесь происходит.

И ещё один вопрос: Будет ли работать код:

Объясните что здесь происходит.

Два задания к этому коду:

  • Ответьте на вопросы в комментариях письменно.
  • Запустите этот код, предварительно объявив используемые переменные, и выведите в консоль с write() или writeln() значения переменных, в строках, где в комментариях к коду задан вопрос.
  • Запишите строку, в которой с помощью одного writeln() выводятся результаты трёх разных (любых) арифметических выражений.
  • Сделайте то же самое, но выводя уже три переменные, каждой из которых предварительно присвойте значение одного из арифметических выражений.
Задачи:

(напишите код и продемонстрируйте его работу):

двумя способами (чтобы в консоли получилось оба варианта):

  • в столбик, разделив пробелами
  • в строчку

Подсказка: если не получается решить самостоятельно и/или есть желание посмотреть на другие варианты решения - смотрите этот разбор.

Присвойте переменной $a$ значение и выведете на экран фразу с этим значением -- используя указанные выше литералы (можно не только их, но их обязательно), например для:

Подсказка: если не получается решить самостоятельно и/или есть желание посмотреть на другие варианты решения - смотрите этот разбор.

📎📎📎📎📎📎📎📎📎📎