"Информатика. Базовый уровень", Босова Л.Л., Босова А.Ю.
Чтобы компьютер выполнил алгоритм, его записывают на формальном языке с заданными символами и правилами. Такая запись называется программой: действия, условия и повторения в ней представлены командами выбранного языка. Одной правильной записи команд недостаточно: нужно учитывать их смысл и проверить, решает ли программа нужную задачу. Перед запуском программу обрабатывает транслятор — компилятор или интерпретатор.
Текст подготовлен нейронной сетью по теме параграфа и не заменяет учебник — важные факты и формулировки сверяйте с ним.
Язык программирования — формальная система знаков и правил для записи алгоритмов и программ. Он задаёт, какие символы и конструкции можно использовать. Благодаря этому автор и компьютер одинаково понимают запись.
Программа — запись алгоритма на языке программирования, предназначенная для выполнения компьютером. В ней каждый шаг представлен командами, которые можно обработать. Программа позволяет автоматизировать решение задачи и повторять его на разных исходных данных.
Синтаксис языка программирования — правила построения допустимых выражений и команд. Они определяют, например, как записывать присваивание или условие. Соблюдение синтаксиса нужно, чтобы транслятор мог распознать структуру программы.
Семантика языка программирования — смысл команд и конструкций программы. Она объясняет, какое действие выполнит компьютер при встрече с конкретной командой. Понимание семантики помогает проверить, соответствует ли программа задуманному алгоритму.
При переводе алгоритма в программу его шаги заменяют командами выбранного языка. Действия становятся командами вычисления и присваивания, ввод и вывод оформляются специальными средствами, условия — конструкциями ветвления, а повторяющиеся действия — циклами. Такой перевод нужен, потому что компьютер выполняет точные команды, а не понимает бытовое описание решения.
Произвольное описание алгоритма компьютер выполнить не может: слова и рисунки могут быть неоднозначными, а машина должна однозначно распознавать инструкции. Поэтому программа использует символы алфавита языка и соблюдает его синтаксис. Если пропустить скобку или записать команду не по правилам, транслятор не сможет правильно разобрать программу.
Правильность программы зависит и от синтаксиса, и от семантики. Синтаксическая ошибка означает, что конструкция записана с нарушением правил языка; такую запись обычно удаётся обнаружить при обработке. Но формально правильные команды могут быть соединены неверно: например, программа может сравнивать не те величины. Тогда она запускается, но даёт неправильный ответ — это логическая ошибка.
Перед выполнением исходный текст обрабатывает транслятор — программа, переводящая запись на язык программирования в форму, пригодную для исполнения. При компиляции исходную программу заранее преобразуют, а при интерпретации её анализируют и выполняют в ходе работы. Способы различаются тем, когда выполняется обработка, когда проявляются многие ошибки и что сохраняется для запуска.
Язык выбирают с учётом задачи: в одном случае важны нужные конструкции, в другом — удобство записи или способ запуска. Если алгоритм содержит циклы и ветвления, в языке должны быть подходящие средства для их выражения. Выбор влияет на форму программы и её выполнение, но не должен менять логику самого алгоритма.
| Признак | Компиляция | Интерпретация |
|---|---|---|
| Что происходит с исходной программой | Заранее преобразуется целиком или крупными частями | Анализируется в ходе выполнения |
| Когда обнаруживаются многие ошибки | При компиляции, до запуска полученной программы | При анализе соответствующих команд во время работы |
| Как выполняются команды | Выполняется заранее подготовленный код | Команды анализируются и выполняются по ходу работы |
| Что получается в результате обработки | Преобразованный код или исполняемый файл | Как правило, отдельный исполняемый файл не создаётся |
| Особенности повторного запуска | Подготовленную программу можно запускать повторно | Обычно интерпретатор снова обрабатывает исходный текст |
| Преимущества и ограничения | Повторный запуск может быть быстрым; перед запуском требуется компиляция | Удобно выполнять программу без отдельной предварительной сборки; интерпретация может занимать дополнительное время |
Сравнивай способы по тому, когда обрабатывается программа и что требуется для повторного запуска. На практике детали зависят от конкретного языка и среды, поэтому таблица показывает общее различие, а не неизменное правило для всех систем.
Условие. Записать программу, которая вводит длины двух сторон прямоугольника и выводит его периметр. Обозначим стороны a и b, а периметр — p. Формула p = 2 · (a + b) непосредственно задаёт вычисление после ввода данных.
Ответ. Программа должна выполнить ввод сторон, вычислить p = 2 · (a + b) и вывести p. Для проверки можно взять a = 3 и b = 5: результат равен 16.
Условие. По введённым числам a, b и c вывести наибольшее. Нужно учесть равенство чисел, поэтому проверка строится через «больше или равно». Сначала проверим, не является ли a наибольшим, затем сравним b с c.
Ответ. Условные операторы выбирают одно из трёх значений для m. Например, при 4, 9 и 6 программа выведет 9.
Условие. Составить программу для вычисления суммы целых чисел от 1 до введённого n. Повторять одно и то же сложение удобнее циклом, чем записывать отдельную команду для каждого числа. Счётчик i будет по очереди принимать значения от 1 до n.
Ответ. При n = 4 последовательно складываются 1, 2, 3 и 4, поэтому программа выведет 10. Начальное значение суммы, условие i ≤ n и увеличение счётчика обеспечивают включение всех чисел от 1 до n.
Путать синтаксическую и логическую ошибки. Программист может считать любую неудачу ошибкой записи, хотя иногда команды написаны правильно, но неверно решают задачу. Это происходит, когда проверяют только возможность запуска. Проверь ожидаемый результат вручную на простых входных данных и сравни его с ответом программы.
Записывать команды в произвольной форме. Привычные слова или знаки могут не соответствовать синтаксису выбранного языка, поэтому транслятор не распознает команду. Ошибку допускают, когда переносят в код обычные фразы алгоритма без перевода в конструкции языка. Сверяй каждую команду с правилами языка и сообщениями об ошибках.
Смешивать обозначения разных языков. Похожие команды в разных языках могут записываться по-разному, и соединение их правил делает программу непонятной для транслятора. Так бывает при копировании примеров из разных источников. Проверяй, что все команды, знаки и правила оформления взяты из одного языка.
Неполно переводить алгоритм. Если забыть начальное значение переменной, условие цикла или ветвь, некоторые входные данные обработаются неверно либо цикл не завершится. Часто ошибка возникает, когда сразу пишут код и теряют шаги исходного решения. Сопоставь команды с алгоритмом и проверь границы цикла и все возможные случаи ветвления.
Для изучения записи программ нужны понятия алгоритма, исполнителя и команды, а также представления о величинах и присваивании. Ветвление и цикл помогают выразить выбор действий и повторение в коде. Без этих основ трудно понять, как отдельные команды превращаются в работающую программу.
Дальше эти знания применяются при изучении переменных, типов данных, подпрограмм и массивов. Они нужны и для практического программирования: чем сложнее задача, тем важнее точно описать данные и порядок действий. Освоение базовых конструкций создаёт основу для составления больших программ.
Представление о трансляции помогает разобраться, почему программа запускается или сообщает об ошибке. Это связано с отладкой — поиском и исправлением ошибок в коде. Различая синтаксические и логические проблемы, проще выбрать способ проверки и понять, на каком этапе возникла трудность.
Чем алгоритм отличается от программы?
Алгоритм — это описание последовательности действий для решения задачи, не обязательно записанное на языке компьютера. Программа представляет этот алгоритм в форме, которую компьютер может обработать и выполнить.
Почему программа может быть синтаксически правильной, но давать неверный ответ?
Синтаксис проверяет, правильно ли записаны команды, но не гарантирует, что выбран верный способ решения задачи. Например, можно без ошибок языка сложить не те числа или неверно задать условие.
В чём разница между компилятором и интерпретатором?
Компилятор заранее преобразует исходную программу, обычно в код, который затем выполняет компьютер. Интерпретатор анализирует и выполняет программу в процессе работы, поэтому обработка и выполнение связаны.
Можно ли записать один алгоритм на разных языках программирования?
Да, один и тот же алгоритм можно выразить на разных языках, используя их собственные команды и правила. Логика решения останется прежней, но запись и способ её запуска могут отличаться.
Почему нельзя смешивать правила разных языков в одной программе?
У каждого языка свои алфавит, синтаксис и обозначения, поэтому команда одного языка может быть непонятна транслятору другого. Для одной программы нужно выбрать язык и придерживаться его правил.
§ 7. Запись алгоритмов на языках программирования