Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

7.2. Роль ошибок

Из раздела 2.2 мы знаем, что по ошибочной программе компьютер выдает ошибочные результаты. Например, если в нашей программе мы вместо V:=S*visota напишем V:=S+visota, то результаты будут такими:

Площадь пола=300 Объем зала=304

Площадь пола=600 Объем зала=605

Площадь пола=50 Объем зала=53

Если случайно вместо for i:=1 to N написать for i:=2 to N, то результаты будут такими:

Площадь пола=300 Объем зала=1200

Площадь пола=600 Объем зала=3000

На этом программа закончит работу и не спросит размеров третьего зала. Вам не кажется странным, что она посчитала 1-й и 2-й залы, а не 2-й и 3-й? Если кажется, то учтите, что пользователь ничего не знает об ошибке в программе, а компьютер не говорит ему, размеры какого по счету зала ему нужно вводить.

Задания 44-45

Определите без компьютера, что будет, если

44. строку for i:=t to N do begin поместить под строкой ReadLn(dlina, shirina, visota)

45. поменять местами строки

WriteLn('Площадь пола=',S,' Объем зала=',V) и end

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

7.3. Счетчики

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

Задача 1 В компьютер с клавиатуры вводятся числа. Компьютер после ввода каждого числа должен печатать, сколько среди них уже введено положительных чисел.

Фрагмент, решающий задачу:

с:=0; {Обнуляем счетчик}

m: ReadLn(a); {Вводим очередное число}

if a>0 then с:=с+1; {Если оно подходящее, наращиваем счетчик}

WriteLn('Из них положительных -' ,с);

goto m

Пояснения. В разделе 6.6 мы придумали переменную i, которую назвали счетчиком циклов. Здесь мы тоже придумали переменную с. Она у нас выполняет роль счетчика положительных чисел. Выглядит оператор так: с:=с+1. Именно он в нужный момент увеличивает значение счетчика на единицу. Но и без if a>0 then тоже никак нельзя. Если бы его не было, то с подсчитывал бы все числа без разбору, то есть был бы обыкновенным счетчиком циклов. В нашем же фрагменте увеличение с на единицу выполняется не всегда, а лишь при положительном а.

Пусть мы вводим числа 8, -2, 10... В этом случае порядок выполнения операторов будет такой:

Оператор а с Печать

с:=0 ? 0

ReadLn(a) 8 0

If a>0 then c:=c+1 8 1

WriteLn('Из них положительных -' ,с) 8 1 Из них положительных 1

goto m 8 1

ReadLn(a) -2 1

If a>0 then c:=c+1 -2 1

WriteLn('Из них положительных -' ,c) -2 1 Из них положительных 1

goto m -2 1

ReadLn(a) 10 1

If a>0 then c:=c+1 10 2

WriteLn('Из них положительных -' ,с) 10 2 Из них положительных 2

goto m 10 2

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

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

Задача 2. В компьютер вводится ровно 200 чисел. Компьютер должен подсчитать и один раз напечатать, сколько среди них положительных.

Программа:

VAR c,i :Integer;

a :Real;

BEGIN

с:=0; {Обнуляем счетчик}

for i:=1 to 200 do begin

ReadLn(a);

if a>0 then c:=c+1

end {for};

WriteLn('Из них положительных -' ,c)

END.

Пояснение. Путь рассуждений здесь тот же, что и в первой задаче. В результате применения оператора for фрагмент ReadLn(a); if а>0 then c:=c+1 выполняется ровно 200 раз, благодаря чему счетчик с накапливает нужное значение. Оператор WriteLn выполняется только один раз и печатает это значение.