Компиляция и исправление синтаксических ошибок

После подготовки текста программы необходимо откомпилировать программу, связать ее с библиотекой стандартных процедур и функций, загрузить в оперативную память и передать ей управление. Эта последовательность действий называется исполнением программы и реализуется командой Ctrl-F9. Этап компиляции может быть произведен командой F9.

Компиляция (трансляция программы, записанной на исходном языке, в объектный модуль осуществляется опциями Compile, Make и Build меню раздела COMPILE. В опции Compile компиляция заканчивается созданием объектного модуля с расширением .OBJ. а компиляция в режимах Make и Build - созданием исполняемого файла с расширением .ЕХЕ.

Вызов компилятора в режиме Compile-(Alt-F9) приводит к компиляции программного модуля, находящегося в редакционном окне.

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

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

Если в программе нет синтаксических ошибок, то на экране высвечивается сообщение о количестве строк в откомпилированной программе и объеме доступной оперативной памяти (окно Compiling). Окно редактора на экране восстанавливается нажатием клавиши Esc.

Далее, производится отладка с тестированием программы, в процессе которой выявляются семантические и алгоритмические ошибки.

В оставшейся части программы – между служебными словами Begin и End (содержится её тело (или раздел операторов). Здесь описанные средствами Turbo Pascal представлены все действия, позволяющие получить нужные результаты.

Первая строка тела программы в примере представляет собой оператор чтения Read, который служит для ввода значений переменных A, B и С. На практике это выглядит так:

Дойдя до оператора Read, программа приостанавливает работу и от пользователя программы требуется ввести значения соответствующих переменных. Пользователь вводит значение переменной A и нажимает клавишу Enter, азатем аналогично вводит значения переменныхB и C.

После операторов, позволяющих ввести значения переменных, следует оператор присваивания

x1:=(-b+sqrt(sqr(b)-4*a*c))/(2*a);

Знак присваивания делит его на две части. В правой части представлено выражение, которое необходимо вычислить. Затем полученное значение присваивается переменной, содержащейся в левой части оператора. Данный оператор вычисляет значения одного из корней (x1) квадратного уравнения и присваивает его переменной x1.

Если в традиционной форме записи, принятой в математике, это выражение выглядит как

Компиляция и исправление синтаксических ошибок - student2.ru Компиляция и исправление синтаксических ошибок - student2.ru

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

x1:=(-b+sqrt(sqr(b)-4*a*c))/(2*a);

x2:=(-b-sqrt(sqr(b)-4*a*c))/(2*a);

К сказанному можно добавить, что операторы в теле программы следует располагать определённым образом и при этом в меру использовать отступы и пустые строки. Отступы предназначены для того, чтобы показать, где одна структура включается в другую – для отделения основных разделов программы.

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

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

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

Теперь попробуем выполнить нашу программу. Для этого в меню Runвыберем одноименный пункт Run(Ctrl+F9)

После запуска на выполнение нашей программы (свободной от ошибок) экран имеет вид:

Turbo Pascal Version 7.0 Copyright (c) 1983,92 Borland International

-2.76889002637745E-0001-7.22311099736544E+0000

Здесь мы имеем дело с представлением чисел с плавающей запятой, известное также как экспоненциальный формат чисел.

-2.76889002637745 - мантисса

-0001 – порядок

Т.е. это число равносильно числу -2.76889002637745·10-1 или -0.276889002637745

Это не наглядно и не совсем понятно.

Во-первых, не помешало бы сделать так, чтобы программа отображала текстовое сообщение, приглашающее ввести значение каждой из переменной.

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

Процедура Write осуществляет вывод заданного значения и переводит курсор на следующую позицию в той же строке, процедура Writeln осуществляет вывод заданного значения и переводит курсор в начало следующей строки.

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

Получим программу:

Program kvadr2;

var

d,a,b,c,x1,x2:real;

begin

writeln('Вычисление корней квадратного уравнения'); {Процедура вывода текста}

writeln('введите значение A'); {Процедура вывода текста}

read(a); {Процедура ввода}

writeln('введите значение B'); {Процедура вывода текста}

read(b); {Процедура ввода}

writeln('введите значение C'); {Процедура вывода текста}

read(c); {Процедура ввода}

d:=sqrt(sqr(b)-4*a*c);

x1:=(-b+d)/(2*a);

x2:=(-b-d)/(2*a);

writeln('x1=',x1:6:2); {Процедура вывода}

writeln('x2=',x2:6:2); {Процедура вывода}

end.

x1:6:2 – означает, что после вывода выражения ‘x1=’ курсор должен сдвинуться на шесть позиций от края экрана, :2– оставить два числа после запятой (т.к. тип real)

В результате на экране получим (после последовательности действий:

(F9 → ctrl+F9 → ввели данные → enter → alt+F5)

Debug(отладка) - User screen – Alt+F5(экран пользователя)

В результате выполнения программы (ctrl+F9)на экран выводится сообщение:

Вычисление корней квадратного уравнения

введите значение A

введите значение B

введите значение C

x1= -0.12

x2=-21.88

Кстати, можно сделать так, чтобы на экране одновременно были видны исходный текст программы и результаты её работы. Для этого в меню Debug (отладка) среды разработчика выберем пункт Output(вывод). На экране появилось окно Outputс отображением результатов работы программы. Если не видна вся информация – воспользоваться полосами прокрутки окна Output.

Наши рекомендации