Как исправить ошибку в программе паскаль

Автор материалов — Лада Борисовна Есакова.
Самая распространенная ошибка, которую нужно найти и исправить – это неправильное использование вложенных условных операторов. Для усложнения поиска возможно неправильное форматирование текста (неправильно поставленные отступы).

Для того, чтобы найти ошибку, нужно поставить в соответствие друг другу все части условного оператора if и else.

Помним, что часть else относится к ближайшему if. При этом наличие части else не обязательно.

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

Особого внимания требует инициализация переменных.

Формат книги не позволяет рассмотреть все основные типы задач 2 части, рассмотрим лишь те, которые встречались на проверочных и экзаменационных работах последних двух лет.

На об­ра­бот­ку по­сту­па­ет по­ло­жи­тель­ное целое число, не пре­вы­ша­ю­щее 109. Нужно на­пи­сать про­грам­му, ко­то­рая вы­во­дит на экран сумму цифр этого числа, мень­ших 7. Если в числе нет цифр, мень­ших 7, тре­бу­ет­ся на экран вы­ве­сти 0. Про­грам­мист на­пи­сал про­грам­му не­пра­виль­но. Ниже эта про­грам­ма для Ва­ше­го удоб­ства при­ве­де­на на пяти язы­ках про­грам­ми­ро­ва­ния.

По­сле­до­ва­тель­но вы­пол­ни­те сле­ду­ю­щее.

1. На­пи­ши­те, что вы­ве­дет эта про­грам­ма при вводе числа 456.

2. При­ве­ди­те при­мер та­ко­го трёхзнач­но­го числа, при вводе ко­то­ро­го про­грам­ма выдаёт вер­ный ответ.

3. Най­ди­те все ошиб­ки в этой про­грам­ме (их может быть одна или не­сколь­ко). Из­вест­но, что каж­дая ошиб­ка за­тра­ги­ва­ет толь­ко одну стро­ку и может быть ис­прав­ле­на без из­ме­не­ния дру­гих строк. Для каж­дой ошиб­ки:

1) вы­пи­ши­те стро­ку, в ко­то­рой сде­ла­на ошиб­ка;

2) ука­жи­те, как ис­пра­вить ошиб­ку, т.е. при­ве­ди­те пра­виль­ный ва­ри­ант стро­ки.

До­ста­точ­но ука­зать ошиб­ки и спо­соб их ис­прав­ле­ния для од­но­го языка про­грам­ми­ро­ва­ния. Об­ра­ти­те вни­ма­ние, что тре­бу­ет­ся найти ошиб­ки в име­ю­щей­ся про­грам­ме, а не на­пи­сать свою, воз­мож­но, ис­поль­зу­ю­щую дру­гой ал­го­ритм ре­ше­ния. Ис­прав­ле­ние ошиб­ки долж­но за­тра­ги­вать толь­ко стро­ку, в ко­то­рой на­хо­дит­ся ошиб­ка.

Ре­ше­ние ис­поль­зу­ет за­пись про­грам­мы на Пас­ка­ле. До­пус­ка­ет­ся ис­поль­зо­ва­ние про­грам­мы на любом из четырёх дру­гих язы­ков.

1. Про­грам­ма вы­ве­дет число 4.

2. При­мер числа, при вводе ко­то­ро­го про­грам­ма выдаёт вер­ный ответ: 835.

3. В про­грам­ме есть две ошиб­ки.

Пер­вая ошиб­ка. Не­вер­ное уве­ли­че­ние суммы.

Стро­ка с ошиб­кой:

sum := sum + digit;

Вто­рая ошиб­ка. Не­вер­ный вывод от­ве­та на экран.

Для за­дан­но­го по­ло­жи­тель­но­го ве­ще­ствен­но­го числа A не­об­хо­ди­мо найти мак­си­маль­ное целое число K, при ко­то­ром вы­пол­ня­ет­ся не­ра­вен­ство

(при K = 0 сумма счи­та­ет­ся рав­ной 0).

Для ре­ше­ния этой за­да­чи уче­ник на­пи­сал такую про­грам­му.

1. На­пи­ши­те, что вы­ве­дет эта про­грам­ма при вводе числа 1.2.

2. При­ве­ди­те при­мер числа, при вводе ко­то­ро­го про­грам­ма даст вер­ный ответ.

3. Най­ди­те в про­грам­ме все ошиб­ки (их может быть одна или не­сколь­ко).

Для каж­дой ошиб­ки вы­пи­ши­те стро­ку, в ко­то­рой она до­пу­ще­на, и при­ве­ди­те эту же стро­ку в ис­прав­лен­ном виде.

Об­ра­ти­те вни­ма­ние: вам нужно ис­пра­вить при­ведённую про­грам­му, а не на­пи­сать свою. Вы мо­же­те толь­ко ис­прав­лять оши­боч­ные стро­ки; уда­лять стро­ки или до­бав­лять новые стро­ки нель­зя. По­ста­рай­тесь также не вне­сти новые ошиб­ки – за это оцен­ка сни­жа­ет­ся.

Ре­ше­ние ис­поль­зу­ет за­пись про­грам­мы на Пас­ка­ле. До­пус­ка­ет­ся ис­поль­зо­ва­ние про­грам­мы на дру­гих язы­ках.

1. При вводе числа 1.2 про­грам­ма вы­ве­дет число 2.

2. При­ме­ры чисел, при вводе ко­то­рых про­грам­ма вы­во­дит вер­ный ответ: 1.6, 2.05.

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

В не­ко­то­рых слу­ча­ях эти ошиб­ки ком­пен­си­ру­ют друг друга, и ответ ока­зы­ва­ет­ся пра­виль­ным. Это про­ис­хо­дит, если зна­че­ние A по­па­да­ет в один из сле­ду­ю­щих диа­па­зо­нов: 1.5 < A < 1.83, 2 < A < 2.08.

3. Про­грам­ма со­дер­жит две ошиб­ки.

1) Не­вер­ная ини­ци­а­ли­за­ция. На­чаль­ное зна­че­ние S долж­но быть равно нулю.

В при­ведённом ва­ри­ан­те вы­чис­лен­ная сумма ока­зы­ва­ет­ся на 1 боль­ше пра­виль­но­го зна­че­ния.

2) Не­вер­ное опре­де­ле­ние от­ве­та. При­ведённая про­грам­ма на­хо­дит не мак­си­маль­ное K, при ко­то­ром вы­пол­ня­ет­ся не­ра­вен­ство, а ми­ни­маль­ное, при ко­то­ром оно не вы­пол­ня­ет­ся, то есть уве­ли­чи­ва­ет вер­ное зна­че­ние на 1.

Кроме того, ис­поль­зо­ван­ный по­ря­док дей­ствий в цикле (уве­ли­че­ние K после уве­ли­че­ния S) при­во­дит к уве­ли­че­нию ещё на 1. Это можно было бы ис­пра­вить, из­ме­нив по­ря­док дей­ствий в цикле и умень­шив K после за­вер­ше­ния цикла, но эти дей­ствия не раз­ре­ше­ны по усло­вию за­да­чи.

По­это­му для ис­прав­ле­ния ошиб­ки можно про­сто скор­рек­ти­ро­вать зна­че­ние при вы­во­де.

Благодарим за то, что пользуйтесь нашими статьями.
Информация на странице «Задача №24. Исправление ошибок в программе.» подготовлена нашими авторами специально, чтобы помочь вам в освоении предмета и подготовке к ЕГЭ и ОГЭ.
Чтобы успешно сдать нужные и поступить в высшее учебное заведение или техникум нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий.
Также вы можете воспользоваться другими материалами из данного раздела.

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

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

  • Нажатие клавиши F4 выполнит программу до той строки, на которой установлен курсор, затем приостановит выполнение.
  • Нажатие клавиши F7 или F8 позволяет выполнять программу пошагово: по одному оператору (различие между этими функциями состоит в том, производится или нет текстов подпрограмм).

Более подробно эти возможности описаны в руководствe по среде Turbo Pascal.

Можно дать несколько полезных советов, касающихся локализации ошибок в программе.

Совет 16. Пользуйтесь всеми доступными инструментами .

Совет 17. На всех ключевых участках, а также на границах логически самостоятельных блоков вставляйте в программу печати, которые позволят вам проследить изменение состояния основных переменных. Эта процедура не всегда может быть заменена просмотром изменений, который можно осуществить с помощью окна Watch. Зачастую бывает необходимо иметь перед собой для сравнения результаты нескольких последовательных итераций, либо нужно видеть одновременно первые и последние результаты, либо в процессе прогонки возвращаться по списку выдачи назад, к предыдущим результатам. Ничего этого параллельный просмотр в Watch сделать не позволяет.

Если отладочная выдача настолько объёмна, что не помещается целиком на экран, её приходится производить в файл.

Совет 18. Следите за тем, чтобы отладочная печать выдавала именно то, что нужно. Совершенно невозможно отловить ошибку в программе, если под именем проверяемой переменной вам выдаётся значение другой переменной!

Самый легкий случай, — когда из–за опечатки полностью меняется вид вывода. Например, правильный оператор (a + 1) должен выдать число, если же вместо числа на экране вдруг появляется слово FALSE, то это явный признак того, что произошла опечатка и выдаётся результат сравнения переменной а с единицей: (a = 1).

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

Совет 19. Если вы уже локализовали небольшой участок программы, в котором находится ошибка, удалите операторы отладочной печати из остальных частей программы, а в отлаживаемом участке, наоборот, увеличьте их количество.

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

Совет 21. За один раз исправляйте ровно одну ошибку. Нет ничего хуже, чем гадать, которое из внесённых исправлений оказало решающее влияние на поведение программы.

Правила составления тестов

Для того, чтобы отладить программу, нужно проверить её работоспособность на каких–то входных данных. Следовательно, эти входные данные нужно каким–то образом подобрать. Затем, после выполнения программы на этих входных данных, нужно сравнить полученный результат с тем, который должен получиться, если программа работает правильно. Этот процесс и называется тестированием.

Заметим, что если полученный результат отличается от эталонного, то считается удачным (!), потому что он помог обнаружить ошибку. А если полученный ответ совпал с правильным — радоваться рано. Один не может полностью проверить всю программу, ошибка вполне могла затаиться в той части, которая осталась на сей раз невыполненной. Для того, чтобы протестировать всю программу, проверить все возможные частные случаи, составляют не один , а набор .

И здесь существуют следующие правила.

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

Проверяйте вручную результаты , с помощью которых вы отлаживаете программу. Немногого можно добиться, если выдаваемый программой правильный ответ вы считаете неверным и продолжаете поиск несуществующей ошибки. Хуже того — если вы всё–таки добьётесь, чтобы программа выдавала ожидаемый вами неверный результат, объяснить её неправильное поведение на других вам будет ещё сложнее.

Из двух предыдущих абзацев вытекает очень важный вывод: нельзя строить тесты при помощи генератора случайных чисел. Конечно, вы можете случайным образом составить входные данные, но как быть с правильным ответом? Откуда его взять, если вы сами понятия не имеете, что там подаётся на вход?

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

Правило 3. Не ограничивайтесь только похожими .

Все можно разделить на три группы: регулярные, граничные и критические. Например, при заданных ограничениях на параметр 0 <= x <= 100 регулярными будут все , где 1 <= x <= 99; граничными, где и х = 100; остальные — критическими. Если ваша программа правильно работает для пяти–шести из какой–либо группы, можно предположить, что она выдаст правильный результат и для всех остальных из этой группы.

В , составленном для проверки программ, обязательно должны присутствовать первых двух групп, а для проверки работоспособности «защиты от дурака» (см. ) — и третьей тоже. Если входных параметров несколько — комбинируйте! Пусть в одном и том же первый параметр будет граничным, второй — регулярным, а третий — критическим. Всегда интересно посмотреть, достаточно ли надёжна ваша программа, справится ли она с таким заданием.

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

Правило 4. Исправления, вносимые в программу, могут повлиять на результаты нескольких .

После того, как вы нашли и исправили ошибку, вновь выполните программу на всех тех , которые раньше не были успешными (то есть, выдавали правильные ответы) — а вдруг найдётся новая ошибка?

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

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

Основная часть процесса приходится на этап выбора наилучшего алгоритма. Однако даже при правильном неграмотное кодирование может привести к неэффективно работающему результату. Чтобы такого не происходило, внимательнее относитесь к тому, что и как вы пишете, реализуя выбранный вами алгоритм. Не всегда те действия, которые кажутся оптимальными с точки зрения логики алгоритма, стоит пытаться запрограммировать «в лоб».

Если же алгоритм выбран и запрограммирован «почти» правильно, можно попытаться улучшить его, внося изменения, сокращающие его работу.

В первую очередь стоит оптимизировать часто повторяющиеся куски программы, то есть циклы. Старайтесь не допускать ситуаций, когда в теле цикла раз за разом производятся одни и те же вычисления, никак не изменяющие состояние переменных. И вообще, избегайте вносить в повторяющиеся участки «тяжёлые» операции.

Например, ясно, что из двух эквивалентных кусков

k i b   k k i b (b )

a b (b )k i b   k k i a

второй является и более быстрым (особенно если b = 10000), и более компактным, чем первый.

Лишние вычисления, лишние действия с файлами или структурами, лишние пересылки элементов из одной ячейки памяти в другую (и список этот далеко не полон!) — всё это снижает эффективность программы. Старайтесь помнить о том, что лаконичность приветствуется всегда и везде, а особенно в программировании.

Успехов вам в написании красивых и полезных программ!

Сообщения об ошибках периода компиляции

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

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

Ниже приводятся сообщения об ошибках в том виде, в каком они появляются в верхней строке редактора, а также перевод сообщений справочной службы.

На экране после кода ошибки (цифры) нет точки, поэтому ее нет и в соответствующем месте текста.

1 Out of memory (Выход за границы памяти).

Компилятору не хватает памяти. Имеется ряд возможных решений этой проблемы:

  • если в опции COMPILE/DESTINATION установлено значение MEMORY, замените эту опцию на DISK;
  • если в опции OPTIONS/LINKER/LINK BUFFER установлено значение MEMORY, замените эту опцию т DISK;
  • если Вы используете резидентные обслуживающие программы, такие как SIDEKICK, NORTON, удалите их из памяти;
  • если Вы используете интегрированную среду TVRBO.EXE, то попробуйте воспользоваться компилятором ТРС.ЕХЕ – он занимает меньше памяти.

Если ни одна из рекомендаций не помогает, то, возможно, Ваша программа просто слишком велика, чтобы компилировать ее в таком объеме памяти. В этом случае Вы должны разбить ее на два или более модулей.

2 Identifier expected (Не указан идентификатор).

В этом месте должен находиться идентификатор. Возможно, Вы пытаетесь использовать в качестве идентификатора зарезервированное слово.

3 Unknown identifier (Неизвестный идентификатор).

Этот идентификатор не был описан.

4 Duplicate identifier (Двойной идентификатор).

Попытка дважды описать один и тот же идентификатор.

5 Syntax error (Синтаксическая ошибка).

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

6 Error in real constant (Ошибка в вещественной константе).

7 Error in integer constant (Ошибка в целой константе).

Синтаксис констант целого типа описан в гл.4. Учтите, что после целых действительных чисел, превышающих диапазон представления целых чисел (-2147483648..+2147483647), должны ставиться точка и ноль, например, 12345678912.0.

8 String constant exceeds line (Строковая константа превышает допустимые размеры).

Вероятно, Вы забыли поставить апостроф в конце строковой константы.

9 Too many nested files (Слишком много вложенных файлов).

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

Ошибки в программировании. Примеры ошибок в языке Паскаль

Ошибки в программировании бывают двух типов: синтаксические и логические. Синтаксические ошибки это неправильное написание ключевых слов и символов языка программирования. Все виды синтаксических ошибок могут быть найдены компьютером в 99 % случаев.

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

Примеры синтаксических ошибок в языке Паскаль и их исправление:

1) Не поставлена точка с запятой. После пуска программы, нажатием клавиш + , в верхней строке экрана появится написанное красным цветом сообщение:

Error 85: «;» expected.

(Ошибка 85: «;» отсутствует.)

Редактор установит курсор на следующий символ после пропущенного знака. После нажатия любой клавиши, сообщение об ошибке исчезает, и редактор переходит в режим вставки. Надо подвести курсор к нужному месту, поставить точку с запятой — “;” и продолжить работу.

2) В описании переменных не записана переменная, а в программе она присутствует. После пуска программы, будет выдано сообщение:

Error 3: Unknown identifier.

(Ошибка 3: Неизвестный идентификатор.)

Курсор будет установлен на эту переменную. Надо исправить ошибку, т.е. записать переменную в раздел описаний переменных и продолжить работу.

3) Не поставлена точка после оператора end в конце программы. Сообщение компилятора будет таким:

Error 10: Unexpected end of file.

(Ошибка 10: Неправильный конец файла.),

Курсор установится на букву «e» в слове «end». Надо поставить точку и снова выполнить программу.

Выполнение программы. Ключевые кнопки

После того, как программа набрана, можно попробовать ее выполнить.

Для этого нажимаем клавиши + (удерживая клавишу , нажать клавишу ). Эту же операцию можно выполнить, перейдя в основное меню, нажав клавишу , а затем перемещением указателя выбрать опцию Run и нажать клавишу .

Теперь надо найти в новом меню опцию RUN (пуск) и нажать клавишу .

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

После завершения прогона (работа программы часто называется ее прогоном) на экране вновь появится окно редактора с текстом программы. Если Вы не успели разглядеть изображение окна программы, то нажмите Alt-F5. При этом окно редактора скроется и вы сможете увидеть результаты работы программы. Чтобы вернуть экран в режим воспроизведения окна редактора, надо нажать на любую клавишу.

Первые ошибки и их исправление

1. Не поставлена точка с запятой, например, после оператора readln(a). После пуска программы, нажатием клавиш + , в верхней строке экрана появится написанное красным цветом сообщение:

Редактор установит курсор на следующий символ после пропущенного знака, в нашем примере на переменную b. После нажатия любой клавиши, сообщение об ошибке исчезает и редактор переходит в режим вставки. Надо подвести курсор к нужному месту, поставить точку с запятой — “;” и продолжить работу.

2. В описании переменных не записана переменная, а в программе она присутствует, например переменная c. После пуска программы, будет выдано сообщение:

Курсор будет установлен на эту переменную, в нашем примере на переменную c. Надо исправить ошибку, т.е. записать переменную c в раздел описаний переменных и продолжить работу.

3. Не поставлена точка после оператора end в конце программы. Сообщение компилятора будет таким:

Помощь в “PASCAL”.

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

Меню опции HELP

CONTENTS. Выводит на экран содержание справочной службы.

INDEX. Выводит на экран алфавитный список всех ссылок справочной службы. Вызывается из редактора командой Shift-F1.

TOPIC SEARCH. Осуществляет поиск в окрестности курсора зарезервированного слова или имени стандартной процедуры (функции) и дает соответствующую справку. Вызывается из редактора командой Ctrl-F1.

PREVIOUS TOPIC. Выводит на экран предыдущее справочное сообщение. Вызывается из редактора командой Alt-F1.

HELP ON HELP. Дает справку о том, как пользоваться справочной службой. Отметим, что в сообщениях справочной службы все перекрестные ссылки выделяются цветом. Вы можете подвести к любой из них указатель мыши и двойным нажатием на ее левую кнопку вызвать на экран соответствующее справочное сообщение (или сместить к ней указатель с помощью клавиш перевода курсора и нажать Enter).

FILES. С помощью этой опции Вы можете установить нужные файлы справочной службы.

COMPILER DIRECTIVES. Показывает справку о директивах компилятора.

RESERVED WORDS. Показывает справку о зарезервированных словах.

STANDARD UNITS. Показывает справку о стандартных модулях.

TURBO PASCAL LANGUAGE. Показывает справку о языке Турбо Паскаль.

ERROR MESSAGES. Показывает справку о сообщениях об ошибках.

ABOUT. Выводит информацию об авторских правах и версии Турбо Паскаля.

Лекция №7 Процедуры. Программирование рекурсивных алгоритмов.

Дедуктивный метод программирования

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

Итак, весь творческий процесс можно разбить (разумеется, чисто условно) на следующие этапы:

1) основная идея решения задачи;

2) общая конструкция программы;

3) выделение отдельных, элементарных частей программы;

4) практическая реализация на языке программирования этих частей программы;

5) объединение их в единую программу.

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

Подпрограммой называется группа операторов, к которой обращаются из основной программы несколько раз. Иногда это может быть 2, 3 раза, а очень часто, каждый раз из выполняемого цикла основной программы.

Читать также:  Что такое Start10.exe? Это безопасно или вирус? Как удалить или исправить это

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

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

Использование подпрограмм позволяет:

1) сделать основную программу более наглядной и компактной;

2) уменьшить объем используемой памяти ЭВМ;

3) сократить время отладки программы.

На языке Паскаль подпрограммы бывают двух видов, — это процедуры и функции.

Рассмотрим следующий простой пример, с помощью которого попробуем разобраться в конструкции процедур на Паскале.

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

Мы знаем, что числа называются взаимно простыми, если их наибольший общий делитель (НОД) равен 1. Значит, для решения этой задачи нам придется дважды находить НОД чисел. Если заданы три числа: a, b, c, то найти НОД(a, b), а затем найти НОД(НОД(a, b), c).

Дважды писать операторы для нахождения НОД нам не хочется, поэтому оформим операторы для НОД в виде процедуры.

Посмотрите, как это будет выглядеть в программе:

a, b, c, k : integer;

Procedure nod(a, b : integer; var n : integer);

write(‘Введите три натуральных числа ‘); readln(a, b, c);

if k = 1 then writeln(‘Числа взаимно простые’)

else writeln(‘Числа не взаимно простые’)

В разделе описаний, после описания переменных, записывается заголовок процедуры: Procedure

Это слово является служебным и зарезервировано в Паскале. В одной строке с ним, через пробел, записывается имя процедуры, которое должно удовлетворять всем требованиям, предъявляемым к именам, основными из которых являются: начинаться с буквы и не иметь пробелов, т. е., требования такие же, как и к имени программы (имя нашей процедуры — nod):

Далее, в скобках, записываются имена переменных и их типы, значения которых будут вводиться в процедуру из основной программы, в нашем случае, их две (a, b) и они имеют тип integer.

Сразу надо заметить, что имена этих переменных могут не совпадать с именами переменных в основной программе, скажем мы могли их обозначить m, n или любыми другими именами.

После точки с запятой и зарезервированного слова var, записываются переменные и их типы, значения которых будет являться результатом работы процедуры и выводятся из нее в основную программу. Такая переменная в нашем примере одна — n. Она выведет значение НОД чисел a и b. Ее имя также может иметь одноименное в основной программе и это нисколько не отразится на работе процедуры.

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

Так, если поставить var перед a и b, то компилятор будет воспринимать эти переменные как выходные и вводимые для них значения воспринимать не будет, и, наоборот, если var не будет записано перед выходной переменной, то компилятор воспримет ее как входную и выводить ее значение в основную программу не будет.

Дальнейшее построение процедуры строится также, как и основная программа на Паскале.

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

В нашем примере процедура nod будет такой:

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

Для этого обращаются к ней по имени, а в скобках записывают фактические значения входных переменных (в нашем случае для переменных a и b), а также имена выходных переменных (в нашем случае k).

Из приведенного ниже участка программы видно, что при первом обращении к процедуре nod определяется НОД чисел a и b (nod(a, b, k)) и результат запоминается в переменную k, далее, изменяются значения переменных a и b

Как исправить ошибку в программе паскаль

Как исправить ошибку в программе паскаль

и снова вызывается процедура nod, которая уже находит НОД чисел k и c и результат присваивает переменной k.

Вы можете видеть основную часть программы:

Сделаем общие выводы для построения и работы процедур

Процедуры помещаются в разделе описаний и начинается зарезервированным (служебным) словом

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

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

Выходные параметры — это те переменные, в которых получается результат выполнения процедуры.

Входные и выходные параметры процедуры называются формальными параметрами.

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

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

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

Надо заметить, что процедура может быть такой, что в ней не будет вообще параметров, достаточно тех, которые будут введены из программы.

Описание процедуры имеет вид:

Она помещается в основной программе в разделе описаний.

По входным и выходным параметрам процедуры могут быть следующих типов:

1) иметь и входные и выходные параметры:

Мы только познакомились с программой такого типа.

2) иметь входные параметры, но не иметь выходных:

3) иметь выходные параметры, но не иметь входных:

4) не иметь ни входных, ни выходных параметров:

В зависимости от этого различаются процедуры по своей конструкции и выполняемым функциям.

Далее следует раздел операторов, который составляется по тем же правилам, как и в других программах.

Процедура описана и после этого начинается основная программа.

Как происходит вызов подпрограммы — процедуры?

Обязательно указывается имя процедуры. В скобках задаются фактические значения входных параметров и те переменные, в которые будут «запоминаться» выходные значения.

Рассмотрим пример, где может быть использована процедура второго типа: имеет входные параметры, но не имеет выходных.

Процедуру составим по следующему способу. Пусть задано число n. Нам необходимо найти такие два числа a и b, чтобы сумма их квадратов была равна n, т.е. решить в целых числах уравнение:

Как исправить ошибку в программе паскаль

Возникает естественное желание испытывать натуральные числа от 1 и до . А вот до какого значения неизвестно. Если их брать до числа n, то это будет слишком много лишней и бесполезной работы.

Чтобы выяснить этот вопрос, можно организовать цикл, в котором проверять сколько чисел a надо, чтобы выполнялось неравенство:

Как исправить ошибку в программе паскаль

Здесь, в качестве b взято наименьшее натуральное число 1. Организовав такой цикл, и подсчитав, сколько чисел a потребуется, мы узнаем сколько чисел надо просматривать, чтобы найти решение уравнения.

Этот цикл может быть таким:

while a*a + 1 2 + 4 2 = 20 и 4 2 + 2 2 = 20.

Чтобы избежать повторения чисел, цикл для чисел b можно организовать либо от 1 до a, либо от k до а.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *