Cтраница 3
На менее формальном уровне программа полностью правильна относительно S, когда вычисляемые ею решения в точности совпадают с решениями, специфицируемыми S. Программа 29 дает пример полностью правильной программы. Если программа не является полностью правильной, то либо она вычисляет некоторое неправильное решение, либо оказывается не в состоянии вычислить какое-то правильное; первый случай означает, что ее процедуры представляют собой неверные утверждения о проблемной области, а второй - что они содержат недостаточно информации о ней. При нормальных условиях первый случай более серьезен, хотя и второй может также быть важным, когда в программе содержатся отрицательные вызовы, и их решение основывается на методе отрицание как неудача. [31]
В дискретных устройствах программного управления ошибки могут возникнуть при считывании первичной информации; возможны ошибки при подготовке первичной информации и ряд других. С целью ввода в устройство управления правильной программы желательно контрольное устройство, регистрирующее ошибки при введении программы. Как правило, для контроля предусматривается специальная контрольная дорожка. В простейшем случае контрольное устройство является счетчиком, просчитывающим импульсы с дорожки, на которой записаны перемещения по координате. [32]
Вы гораздо больше узнаете, как писать правильные программы на Модуле-2, сначала проделав это самостоятельно, а затем сравнив свою работу с программой в этом приложении. [33]
На этапе трансляции производятся синтаксический анализ исходной программы и устранение ошибок, обнаруженных транслятором. Объектный модуль, полученный в результате трансляции синтаксически правильной программы, передается Редактору для дальнейшей обработки. [34]
![]() |
Метод трапеций. [35] |
Для выбранного вычислительного процесса алгоритм Эйткена достаточно применить только один раз определения порядка метода, а затем использовать формулу Рунге, требующую только двукратного вычисления искомой величины. Априорный и апостериорный порядки должны получаться совпадающими для правильных программ. Конечно, это совпадение будет приближенным, так как при получении алгоритмов Рунге и Эйткена учитывались только главные члены погрешности. [36]
Поэтому транслятор может сам внести соответствующие исправления в текст программы, заменив предыдущую запись на z: sin ( x) cos ( y), сообщить пользователю об этом факте и ( если не было обнаружено более серьезных ошибок) довести трансляцию до конца. Если все сделанные предположения оказались правильными, то транслятор выработает правильную программу, так что пользователю даже не нужно будет вносить изменения в текст программы. В некоторых случаях транслятор может сделать разумное предположение о характере ошибки и продолжить анализ текста программы, но внести достаточно обоснованное исправление он не может, поскольку для этого необходимо знать существо решаемой задачи, а такой информацией транслятор, естественно, не располагает - такие ошибки можно назвать полуфатальными. Если, например, в алгол-программе встретился оператор перехода go to ММ, но в ней отсутствует оператор, помеченный меткой ММ, то транслятор может предположить, что пользователь забыл пометить нужный оператор этой меткой ММ. ММ какой-либо оператор, конечно, невозможно без знания существа алгоритма. [37]
![]() |
Примеры построения структурограмм. [38] |
Синтаксис языка программирования - это набор правил которые определяют способы построения правильных программ из символов алфавита. Зная синтаксис языка, можно построить алгоритм, который определяет, является ли данный текст правильной программой или нет. Этот алгоритм позволяет компьютеру проверять синтаксическую правильность вводимых в него программ. [39]
![]() |
Примеры построения структурограмм. [40] |
Синтаксис языка программирования - это набор правил которые определяют способы построения правильных программ из Символов алфавита. Зная синтаксис языка, можно построить алгоритм, который определяет, является ли данный текст правильной программой или нет. Этот алгоритм позволяет компьютеру проверять синтаксическую правильность вводимых в него программ. [41]
Создавать программы размером до 1000 операторов, в которых отсутствуют ошибки, хотя и можно, но достаточно трудно. Однако теоретически и практически в девяти случаях из десяти несложно составить правильную программу из 50 операторов. С помощью методов структурного программирования можно программу из 1000 операторов записать в виде 20 блоков по 50 операторов в каждом, причем не в виде автономных подпрограмм, а как последовательно выполняющиеся части программы. Если 18 из этих 20 блоков не содержат первичных ошибок, а в остальные два могут быть внесены исправления, то можно получить очень высокую степень доверия к результирующей программе, состоящей из 1000 операторов. [42]
Подобные проверки неизбежно замедляют работу как компилятора, так и рабочей программы. Однако в конечном итоге время работы машины будет сэкономлено, потому что правильные программы быстрее получаются тогда, когда у нас есть развитая система диагностики ошибок. [43]
Будьте кратки - ведь помимо своей прогрессивной роли комментарии удлиняют текст программы, так что чрезмерная словоохотливость комментатора может, наоборот, затруднить понимание. Относитесь к написанию грамотного комментария не менее серьезно, чем к написанию правильной программы. [44]
Существует множество больших и сложных программ, которые, хотя и прошли весьма тщательное тестирование, иногда сбиваются. Например, компиляторы работают сотни раз в день, но вдруг могут отказаться компилировать правильную программу. Многие операционные системы непрерывно работают целыми днями, но могут вдруг неожиданно сбиваться и останавливаться. [45]