"Информатика (базовый и углублённый уровни) (в 2 частях)", Поляков К.Ю., Еремин Е.А.
Простейшая программа на Паскале — это последовательность команд, которая получает данные, выполняет вычисления и показывает результат. Такие линейные программы нужны для автоматизации действий, выполняемых в определённом порядке: например, для расчёта площади или перевода минут в часы. Чтобы программа работала правильно, переменные объявляют заранее, значения вводят с помощью readln, а вычисления записывают оператором присваивания. Результат выводят командами write или writeln.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Линейная программа — программа, в которой команды выполняются последовательно, одна за другой, без ветвлений и циклов. Компьютер выполняет каждую команду, затем переходит к следующей. Такая структура подходит для задач, где порядок действий заранее известен.
Оператор присваивания — команда вида x := выражение, которая вычисляет выражение и записывает результат в переменную. Слева от := указывают имя переменной, справа — то, что нужно вычислить. Этот оператор позволяет сохранять результаты промежуточных и итоговых вычислений.
Оператор ввода — команда read или readln, передающая программе значения, введённые пользователем. В скобках указывают переменные, в которые попадут эти значения. Ввод нужен, чтобы программа могла работать с данными, заранее неизвестными автору.
Оператор вывода — команда write или writeln, отображающая на экране текст и значения переменных. В скобках перечисляют, что именно нужно показать; текст заключают в кавычки, а имя переменной пишут без них. Вывод сообщает пользователю результат работы программы.
У простейшей программы на Паскале есть заголовок, раздел описаний, блок операторов и завершающая точка. Заголовок с ключевым словом program задаёт имя программы, а в разделе описаний перечисляют переменные и их типы. Команды помещают между begin и end, чтобы компилятор видел границы блока; точка после end завершает всю программу.
Переменную объявляют заранее, потому что компилятору нужно знать, какие данные в ней будут храниться и сколько места для них требуется. Например, integer используют для целых чисел, real — для чисел с дробной частью. Тип ограничивает допустимые операции: деление вещественных чисел может дать дробный результат, а целочисленные операции div и mod дают частное без остатка и остаток.
В операторе присваивания действия идут в определённом направлении: сначала полностью вычисляется выражение справа от :=, а затем результат записывается в переменную слева. Поэтому в записи x := x + 1 правая часть использует прежнее значение x, а после вычисления переменная получает новое. Левая часть должна быть переменной подходящего типа, иначе результат нельзя корректно сохранить.
Обмен данными с пользователем обычно начинается с readln: программа получает введённые значения и помещает их в указанные переменные. После вычислений write или writeln показывают результат; writeln дополнительно переводит курсор на следующую строку. Внутри одной команды можно сочетать текст и переменные, например writeln('Ответ: ', y), чтобы результат было проще прочитать.
Арифметические выражения вычисляются с учётом приоритета: сначала выполняют действия в скобках, затем умножение и деление, после этого сложение и вычитание. Если приоритет одинаковый, действия обычно выполняют слева направо. Скобки нужны, когда требуется явно сгруппировать части формулы: например, (a + b) * 2 удваивает сумму, а не только b.
В таблице собраны элементы, из которых складывается простая программа, и их назначение. Синтаксис показывает, как записывают конструкцию, а пример помогает увидеть её в контексте. Сверяйтесь с таблицей, когда составляете программу или ищете ошибку в её записи.
| Конструкция | Синтаксис | Назначение | Пример |
|---|---|---|---|
| Заголовок программы | program Имя; | Задаёт имя программы. | program Calc; |
| Раздел описания переменных | var имя: тип; | Объявляет переменные и их типы. | var a: real; |
| Оператор присваивания | переменная := выражение; | Вычисляет значение и сохраняет его. | y := 3 * a + 5; |
| Оператор ввода | readln(переменные); | Считывает данные пользователя. | readln(a); |
| Оператор вывода | writeln(значения); | Выводит текст и результаты. | writeln('Ответ: ', y); |
| Блок операторов | begin операторы end. | Объединяет команды программы. | begin y := a; end. |
В реальной программе конструкции соединяются в заданном порядке: описания идут до begin, а команды — внутри блока. Точка с запятой отделяет операторы друг от друга; после end всей программы ставят точку. Имена переменных и типы в примерах заменяют теми, которые подходят конкретной задаче.
Задача 1. Составить программу, вычисляющую значение выражения 3 * a + 5 при заданном значении a. Нужно получить a от пользователя, сохранить вычисленный результат и показать его. Поскольку a может быть дробным, для входной и выходной переменных выберем тип real.
Ответ: программа вычислит выражение для введённого значения a. Например, при a = 2 получится y = 11. Проверка подстановкой помогает убедиться, что формула и порядок действий записаны верно.
Задача 2. По длине и ширине прямоугольника вычислить периметр и площадь. Обозначим стороны переменными a и b, а результаты — p и s. Для сторон и результатов возьмём тип real, чтобы допускать не только целые размеры.
Ответ: программа выдаёт периметр и площадь прямоугольника с введёнными сторонами. Например, при a = 4 и b = 3 получатся p = 14 и s = 12. Если убрать скобки в формуле периметра и записать 2 * a + b, результат будет неверным.
Задача 3. По количеству минут определить число полных часов и оставшихся минут. Пусть n — общее число минут, h — часы, m — остаток минут. Здесь нужны целые числа, потому что количество полных часов и остаток считаются в целых минутах.
Ответ: при n = 135 программа получит h = 2 и m = 15, то есть 2 полных часа и 15 минут. Проверка проста: 2 * 60 + 15 = 135. Если использовать обычное деление вместо div, результат для числа часов может оказаться дробным.
Знак = используют вместо :=, смешивая математическое равенство с командой записи значения. В Паскале присваивание выполняет действие, поэтому требуется двоеточие перед знаком равенства. Проверьте себя: если слева стоит переменная, которой задают результат вычисления, пишите :=.
Иногда значение присваивают необъявленной переменной или переменной неподходящего типа. Это происходит, когда забывают раздел var или не учитывают, что выражение может дать дробный результат. Перед запуском сверьте каждое имя с разделом объявлений и проверьте совместимость типов.
Пропущенные скобки и неверная оценка приоритета операций меняют смысл формулы. Например, 2 * a + b не то же самое, что 2 * (a + b), хотя обе записи содержат те же переменные и знаки. Сравните программу с математической формулой и поставьте скобки вокруг тех частей, которые должны вычисляться вместе.
Переменную иногда берут в кавычки или забывают указать в readln. В кавычках имя становится обычным текстом, поэтому writeln('a') напечатает букву a, а не значение переменной. Проверьте команды ввода и вывода: переменные пишут без кавычек, а при вводе обязательно перечисляют имена переменных, которые должны получить данные.
Для составления линейной программы нужны понятия алгоритма и команды, умение работать с переменными и типами данных, а также правила записи арифметических выражений. Эти знания помогают перевести условие задачи в последовательность действий и записать её на языке программирования. Линейные фрагменты входят и в более сложные алгоритмы: при ветвлениях и циклах внутри каждого блока также выполняются последовательности команд. Освоив ввод, вычисления и вывод, легче переходить к программам с ветвлениями, циклами, процедурами и функциями.
Чем оператор присваивания отличается от обычного равенства?
Знак = утверждает, что две величины равны, а := записывает вычисленное значение в переменную. Например, x := x + 1 означает, что к прежнему значению x прибавляют 1 и сохраняют результат в x.
Почему переменную нужно объявлять до начала выполнения программы?
Объявление сообщает компилятору имя переменной и тип данных, который она может хранить. Без этого компилятор не сможет проверить допустимость операций и выделить место для значения.
Когда использовать read, а когда readln?
Обе команды вводят значения, но readln после чтения переводит ввод на следующую строку. Для простых программ обычно удобно использовать readln, а read — когда нужно читать несколько данных из одной строки или продолжать чтение с неё.
Зачем нужны begin и end?
Они обозначают начало и конец блока операторов, то есть последовательности команд программы. Если в блоке несколько действий, begin и end позволяют воспринимать их как единое целое.
Почему программа выдаёт ошибку при вычислении, хотя формула записана правильно?
Причина может быть в типах переменных, пропущенной точке с запятой или неверном синтаксисе Паскаля. Проверьте также, что переменные объявлены, знак присваивания записан как :=, а порядок действий соответствует скобкам и приоритетам операций.
§ 55. Простейшие программы