v Приступая к написанию программы, четко определять, что является ее исходными данными и что требуется получить в результате.

V Выбирать тип переменных с учетом диапазона и требуемой точности представления данных.

V Давать переменным имена, отражающие их назначение.

v Ввод с клавиатуры предварять приглашением, а выводимые значения – пояснениями. Для контроля сразу же после ввода выводить исходные данные на дисплей (по крайней мере, в процессе отладки).

V До запуска программы подготовить тестовые примеры, содержащие исходные данные и ожидаемые результаты. Отдельно проверить реакцию программы на неверные исходные данные.

V При записи выражений обращать внимание на приоритет операций.

V Разделять данные при вводе пробелами, символами перевода строки или табуляции.

V Тщательно форматировать текст программы и снабжать его содержательными комментариями.

ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ

Составить алгоритм и программу для предложенного варианта. Исходные данные необходимо подобрать самостоятельно, исходя из допустимой области значений исследуемой функции. (Теоретический материал по данной теме изложен в лекциях № 6, 13 и 14).

Номер варианта ЗАДАНИЕ
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.

Приложение № 1.

СТИЛЬ И ЗАПИСИ ПРОГРАММ НА ЯЗЫКЕ ПАСКАЛЬ

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

ü Стандартизация стиля программирования. Если существует более одного способа реализации программы, то необходимо остановиться на каком-то одном способе (лучше всего общепринятом) и всегда его придерживаться. Это позволит избежать ошибок и путаницы и будет понятно другим.

ü Размещение текста программы. Не следует операторы программы писать сплошным текстом. Программу необходимо размещать структурировано:

o конструкции языка (описания, операторы, блоки) более глубоких уровней вложенности сдвигать от начала строки вправо;

o конструкции языка одинаковых уровней располагать друг под другом;

o каждое описание и каждый оператор писать с новой строки;

o продолжение описаний и операторов в следующих строках сдвигать вправо относительно начала;

o избегать слишком длинных строк.

Под уровнем вложенности понимается расположенность конструкций внутри других. Уровень Program принимается за нулевой, конструкции Label, Const, Type, Var, описания процедур и функций, а также составной оператор, заключенный в операторные скобки Begin и End, имеют уровень 1, все операторы составного оператора – уровень 2.

ü Комментарии. Комментарии – это пояснительные тексты в фигурных скобках { }. Они могут вставляться в любое место программы, где допустимо размещение пробела. Выбор комментариев полностью зависит от программиста. Однако не следует ими слишком увлекаться. Рекомендуется любую программу сопровождать вводными комментариями, поясняющими назначение программы и сообщающими некоторые сведения о программисте. После служебных слов Begin и End рекомендуется указывать в качестве комментариев имя программы.

ü Выбор имени. Имена надо выбирать так, чтобы они наилучшим образом соответствовали тем величинам, которые они представляют.

ü Упорядочение списков. Во всех списках (например, в описаниях) числа следует располагать в порядке роста их значений, а имена – по алфавиту.

ü Программирование «сверху вниз». Вначале строится общая схема алгоритма, где описываются этапы решения задачи в общем виде. Затем уточняются и детализируются отдельные ее блоки.

ü Эхо-печать исходных данных. Контрольный вывод исходных данных (эхо-печать) целесообразно производить в начале программы, сразу же после оператора ввода этих данных.

Приложение № 2.

ПРИМЕР СОСТАВЛЕНИЯ ПРОГРАММЫ

Пусть требуется составить программу вычисления общей поверхности и объема конуса по заданным радиусу основания R и длине образующей L. При вычислениях использовать равенства:

,

где H – высота конуса, определяемая по формуле: .

Общий вид схемы алгоритма для рассматриваемого примера показан ниже:

Рис.1. Алгоритм вычисления площади и объема конуса

Программа на языке Турбо Паскаль в общем случае содержит вводные комментарии, заголовок, раздел определения констант, раздел описания переменных, раздел операторов. Определение исходных данных может быть осуществлено с помощью операторов присваивания либо с помощью специальных операторов ввода. Вычисления по формулам реализуются в порядке определения числовых значений переменных H, S и V соответственно, после чего значения S и V выводятся на экран дисплея.

Для удобства пользования следует ввести комментарии, которые позволяют записать нужную учетную и поясняющую информацию (фамилию студента, номер группы и выполняемого варианта, фамилию преподавателя и цель написания программы).

При вычислениях будет использована константа , которой в Турбо Паскале соответствует имя PI. В качестве имен переменных следует использовать переменные, обозначения которых максимально совпадают с именами и обозначениями переменных самой задачи.

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

 

{***************************************************}

{Программа: CONUS. }

{Цель: вычисление площади и объема конуса. }

{Описание параметров и переменных: }

{ R – радиус; L – длина образующей; }

{ H – высота; S – площадь поверхности; }

{ V – объем. }

{Требуемые подпрограммы: нет. }

{Метод: вычисление по формулам. }

{Программист: Иванов И.И. }

{Дата выполнения: 10 апреля 2006 г. }

{***************************************************}

ProgramCONUS;

Var H, L, R, S, T, V : real;

Begin

Writeln(‘Введите радиус и длину образующей’);

Read(R,L);

Wriyeln(‘R=’, R, ’L=’, L);

H:=Sqrt(L*L-R*R);

T:=PI*R*R;

S:=T+PI*R*L;

V:=T*H/3;

Writeln(‘Параметры конуса:’);

Writeln(‘H=’, H, ‘V=’, V, ‘S=’, S)

End.{CONUS}

 

Исходные данные для просчета контрольного варианта выбираются таким образом, чтобы вычисления были достаточно простые и в то же время обеспечивали полные вычисления по всем формулам. Примем R=3 см, L=5 см. Тогда получим: H=4 см, S=75,36 см2, V=37,68 см3.

Результаты просчета контрольного варианта на ЭВМ дают следующие значения:

параметры конуса:

R=3.000000E+00 L=5.000000E+00 H=4.000000E+00

V=3.767990E+01

S=7.539820E+01

Откуда видно, что они совпадают с результатами ручного просчета.

Приложение № 3.

 

ПОНЯТИЕ ОБ ОТЛАДКЕ ПРОГРАММЫ

Отладка программы является итеративным процессом обнаружения и исправления ошибок, обычно требует последовательного выполнения четырех этапов:

Ø выявление ошибки;

Ø локализация ошибки в тексте программы;

Ø установление причины ошибки;

Ø исправление ошибки.

Процесс поиска ошибок в программе называется тестированием. Некоторые ошибки проявляются после первого же запуска программы на выполнение, и для их обнаружения не надо прибегать ни к каким специальным средствам. Некоторые ошибки проявляются в случайные моменты работы программы. С такими ошибками справиться труднее всего – зафиксировать условия возникновения ошибки, понять причину ошибки и устранить ее. С целью обнаружения подобных ошибок осуществляется тестирование – выполнение программы для специально подобранных представительных контрольных примеров – тестов. Тест – это такой набор исходных данных, для которого вручную или другим способом просчитаны промежуточные и конечные результаты и который может быть использован для получения информации о надежности проверяемой программы. Тестирование программы должно включать в себя прогон трех видов контрольных примеров: нормальных ситуаций, граничных ситуаций и случаев неправильных данных. Нормальные случаи – это примеры с правильными входными данными. Если программа не работает в подобных случаях, она требует серьезных переделок. Граничные контрольные примеры помогают установить, способна ли программа нормально реагировать на особые случаи во входных данных. Граничные примеры представляют собой данные, которые, будучи математически корректными, приводят программу к необходимости работать особым образом. Неправильными являются такие данные, которые расположены вне допустимого диапазона. Примеры с неправильными данными должны быть обработаны соответствующим образом, поскольку в повседневной эксплуатации программе придется иметь дело и с неверными входными данными.

После того как ошибка обнаружена, необходимо найти в исходном тексте программы то место, в котором она возникла, – локализировать ошибку. Можно использовать ряд различных методов отладки, позволяющих обнаружить расположение ошибки; выбор существенно зависит от особенностей ситуации. Большинство программистов начинают с неформального метода, известного под названием проверка за столом. Используя контрольный пример, который привел к ошибке в программе, программист аналитически трассирует листинг программы в надежде локализовать ошибку. Проверка за столом – это хороший метод, поскольку он заставляет программиста детально понять работу программы. Если применение метода проверки за столом оказалось бесплодным, нужно использовать специальные методы и способы отладки, позволяющие наблюдать за передачей управления в программе и за изменением значений наиболее важных переменных. Полученная отладочная информация позволит локализовать подозрительные ситуации, провести анализ и выявить причину ошибки, устранить ее, а затем продолжить поиск других ошибок.

ПРИЧИНЫ И ТИПЫ ОШИБОК

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

Ø синтаксические ошибки;

Ø семантические ошибки;

Ø логические ошибки.

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

Семантические ошибки – это ошибки, проявляющиеся на этапе выполнения программы при ее попытке вычислить недопустимые значения параметров или выполнить недопустимые действия. Причина возникновения ошибок данного типа связана с нарушением семантических правил написания программ (примером является ситуация, когда программа пытается открыть несуществующий файл для ввода или выполнить деление на нуль). Если программа обнаруживает ошибку такого типа, то она завершает свое выполнение и выводит сообщение:

Run-time error <nnn> at <xxxx : yyyy>

Это значит: «Ошибка времени выполнения nnn по адресу xxxx : yyyy», где nnn – номер ошибки, а xxxx : yyyy –адрес ошибки (сегмент : смещение) в загрузочном модуле. При выполнении программы из Турбо-среды далее автоматически выбирается соответствующий исходный файл и в нем находится местоположение ошибки. Если же программа выполнялась вне Турбо-среды и в ней появилась ошибка данного типа, то необходимо запустить Турбо Паскаль и найти вызвавший ошибку оператор, используя команду Search/Find Error (после того как активизируется команда Search/Find Error, она запросит адрес сегмента и смещения оператора, вызвавшего ошибку). При этом опция Destination должна быть установлена как Disk.

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

Ошибки первого типа легко выявляются с помощью компилятора. Обычно устранение синтаксических ошибок не вызывает особых трудностей. Более сложно выявить ошибки второго и особенно третьего типа. Для обнаружения и устранения ошибок второго и третьего типа обычно применяют специальные способы и средства отладки программ. Выявлению ошибок второго типа часто помогает использование контролирующих режимов компиляции с проверкой допустимых значений тех или иных параметров (границ индексов элементов массивов, значений переменных типа диапазона, ситуаций переполнения, ошибок ввода-вывода). Устанавливаются эти режимы с помощью ключей компилятора, задаваемых либо в программе, либо в меню Options/Compiler.

СПОСОБЫ И СРЕДСТВА ОТЛАДКИ

В ходе отладки программа должна быть проверена в двух измерениях: в пространстве и во времени. Первое представляет собой контроль содержимого памяти в конкретные моменты работы программы, отслеживание текущих значений всех или выбранных групп переменных, проверку на соответствие их значений декларированным диапазонам (типам). Второе – это отслеживание хода выполнения алгоритма для проверки правильности заданной последовательности операций и передач управления при различных значениях параметров. Самым распространенным и полезным приемом отладки, позволяющим объединить обе формы контроля, являются отчеты о трассировке. Трассировка программы – это регистрация логического пути выполнения программы – последовательности выполнения ее операторов/блоков с контрольной выдачей информации о результатах каждого шага – обо всех изменениях значений рабочих переменных и параметров связи. Сам принцип трассировки – слишком общий. На практике реализуют трассировку программы в том или ином объеме, используя различные способы и средства отладки.

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

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

Встроенный отладчик Турбо Паскаля (Debugger) позволяет контролировать ход выполнения программы – выполнять трассировку программы без изменения самой программы с помощью следующих действий:

§ выполнение программы построчно/по шагам;

§ остановки выполнения программы в заданной точке – точке останова;

§ перезапуска программы, не закончив ее выполнение;

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

Автономный отладчик (Turbo Debugger – файл td.exe) предоставляет большие возможности: позволяет осуществить трассировку программу/блока на уровне ассемблерных и машинных инструкций, просмотреть содержимое/дамп памяти и пр., что требует особого режима компиляции исходного текста. Использование дополнительных возможностей автономного отладчика целесообразно при отладке и тестировании больших по объему и сложных программ и при наличии у программиста достаточно высокого уровня квалификации. (В данном курсе автономные средства отладки не рассматриваются).

СООБЩЕНИЯ ОБ ОШИБКАХ

СИНТАКСИЧЕСКИЕ ОШИБКИ

НОМЕР ОШИБКИ НАИМЕНОВАНИЕ ОШИБКИ КОММЕНТАРИЙ
Out of memory Компилятору не хватает памяти
Identifier expected Ожидается идентификатор. Возможно, что вы пытаетесь неправильно использовать зарезервированное слово.
Unknown identifier Идентификатор не описан.
Duplicate identifier Данный идентификатор уже использован.
Syntax error Недопустимый символ. Возможно, строка не ограничена апострофами.
Error in real constant Ошибка в константе вещественного типа.
Error in integer constant Ошибка в константе целого типа.
String constant exceeds line Выход строки за допустимые границы. Возможно не закрыт апостроф строки.
Unexpected end of file Неожиданный конец. Возможно, несбалансированны операторные скобки BEGIN и END или не закрыт комментарий.
Line too long Слишком длинная строка программы.
12, 33 Type identifier expected Ожидается тип идентификатора.
Variable identifier expected Ожидается идентификатор переменной.
Error in type Ошибка в указании типа.
Type mismatch Несоответствие типов: переменной и выражения в операторе присваивания, фактического и формального параметров в обращении к подпрограмме, операндов в выражении.
Ordinal type expected Ожидается порядковый номер.
30 .. 32 Constant expected Ожидается константа.
Invalid function result type Недопустимый тип функции.
36, 37 Begin (End) expected Ожидается BEGIN (END).
38 .. 40 Integer (ordinal, Boolean) expression expected Данное выражение должно быть целого (порядкового, логического) типа.
Operand types do not match operator Тип операндов не соответствует типу знака операции.
Error in expression Ошибка в выражении.
IIIegal assignment Неправильное употребление присваивания.
50, 54, 57, 58 DO (OF, THEN, TO, DOWNTO) expected Ожидается зарезервированное слово DO (OF, THEN, TO, DOWNTO).
Division by zero Деление на нуль.
Cannot Read or Write variables of type Нельзя вводить или выводить переменные этого типа.
Constant and case types do not match Константа и тип селектора в операторе CASE несовместимы.
Constant out of range Константа выходит за границы допустимого диапазона.
Integer or real expression expected Данное выражение должно быть типа INTEGER или REAL.
85 .. 95 “;”, “:”, “,”, “=”, “:=”, “[“ or “(.”, “]” or “).”, “.”, “..” expected Ожидается указанный знак препинания.
Invalid FOR control variable Неправильный параметр в операторе FOR.
98, 102, 103, 104, 106 Integer (String, Real, Ordinal, Character) variable expected Данная переменная должна быть целой (типа STRING, типа REAL, порядкового типа, типа CHAR).
Overflow in arithmetic operation Переполнение. Результат выходит за границы типа LONGINT.
Case constant out of range Константа оператора CASE выходит за границы целого типа.
Error in statement С данного символа оператор начинаться не может.
Invalid floating point operation Данная операция над вещественными величинами привела к переполнению или делению на нуль.
Invalid procedure or function reference Неправильное обращение к подпрограмме.

АЛГОРИТМИЧЕСКИЕ ОШИБКИ

НОМЕР ОШИБКИ НАИМЕНОВАНИЕ ОШИБКИ КОММЕНТАРИЙ
Invalid numeric format Введенное значение не соответствует правильному числовому формату.
Division by zero Деление на нуль.
Range check error Выход значения за границы диапазона.
Floating point overflow Переполнение. При операции с вещественными числами возникает чересчур большое число.
Invalid floating point operation Неправильная операция с вещественным числом.
Arithmetic overflow error Выход результата целочисленной арифметической операции за допустимые границы.

СПИСОК ЛИТЕРАТУРЫ

1. Аболрус С. Программирование на Pascal, 3-е издание. – Пер. с англ. – СПб.: Символ-Плюс, 2003. – 328 с.

2. Адаменко А.Н. Pascal на примерах из математики. – СПб.: БХВ-Петербург, 2005. – 416 с.

3. Глинський Я.М., Анохін В.Є., Ряжська В.А. Паскаль. Turbo Pascal і Delphi. 3-є вид. – Львів: «Деол», 2002. – 144 с.

4. Культин Н.Б. Программирование в Turbo Pascal 7.0 и Delphi. – СПб.: BHV – Санкт-Петербург, 1997. – 240 с.

5. Новиков В.С., Парфилова Н.И., Пылькин А.Н. Алгоритмизация и программирование на Турбо Паскале: Учебное пособие. – М.: Горячая линия – Телеком, 2005. – 438 с.

6. Павловская Т.А. Паскаль. Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер, 2003. – 393 с.

7. Павловская Т.А. Паскаль. Программирование на языке высокого уровня: Практикум. – СПб.: Питер, 2006. – 317 с.

8. Попов В.Б. Turbo Pascal для школьников. Версия 7.0: Учеб. Пособие. – М.: Финансы и статистика, 1996. – 464 с.

9. Решение задач средствами языка Turbo Pascal 7.0 / А.Н. Моргун – К.: Юниор, 2002. – 216 с.

10. Турбо Паскаль 7.0 / Е.Р.Алексеев и др. – М.: ООО «Издательство АСТ»: Издательство «НТ Пресс», 2004. – 270 с.