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

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

Какие условия необходимо вставить вместо многоточия в приведенном алгоритме для корректного решения следующей задачи: «С клавиатуры последовательно вводятся N целых чисел, подсчитать среди них количество чисел не превосходящих M».

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

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

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

p := 1 i := 1

пока , повторять

i := i + 1 p := p * i

3.15. Тема 15. Языки программирования

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

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

сть выполнения программы в системе программирован ия

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

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

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

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

Error 85: «;»
expected.

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

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

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

Error 3: Unknown identifier.

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

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

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

Error 10: Unexpected end of
file.

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

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

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

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

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

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

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

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

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

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

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

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

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 раза, а очень часто, каждый раз из
выполняемого цикла основной программы.

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

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

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);

r := a mod b;

a := b; b := r

n := a

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

a
:= k;
b
:= c;

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

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

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

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

Читать также:  Ошибка прекращена работа программы internet explorer

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читать также:  В статье рассматривается вопрос чтения в современной культуре

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

a
:= 1; k := 1;

while
a*a + 1<=n do

Теперь ясно, что
для испытания чисел, следует устроить
цикл от 1 до k:

for a := 1 to k do

Второй
цикл должен
быть для значений b. Но если его организовать
тоже от 1 до k, тогда могут повторяться
дважды одинаковые значения, только на
разных местах, например, для числа 20
могут быть выданы следующие значения:

22
+ 42
= 20 и 42
+ 22
= 20.

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

Нами выбран первый
вариант.

Procedure to_square(n :
integer);

a, b, k : integer;

a := 1; k := 1;

while a*a + 1<=n
do

for b := 1 to a do

if a*a + b*b =
n

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

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

a, b, i : integer;

a,
b, k : integer;

while a*a + 1 <=
n do

for b := 1 to a
do

write(‘Введите конец
промежутка ‘); readln(b);

write(‘Числа,
которые можно представить в виде суммы
‘);

for i := a to b do
to_square(i);

Шумилова
А.А. «Тесты PASCAL»

Тест
№ 1 «Основы языка Pascal»

Фамилия
Имя __________________________________ класс
____________________

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

  • x-х***3/abs
    x + sin (x)
  • целочисленное
    деление можно выразить следующей
    функцией:

    A mod B
    A
    div
    B

  • A mod B
  • A
    div
    B
  • математическое
    выражение х2-7х+6
    можно записать:

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

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