Задача 1: В компьютер с клавиатуры вводятся числа. Компьютер после ввода каждого числа должен печатать, сколько среди них уже введено положительных.
Фрагмент, решающий задачу:
c:=0; {Обнуляем счетчик}
m: ReadLn(a); {Вводим очередное число}
if a>0 then c:=c+1;
WriteLn('Из них положительных - ' ,c);
goto m
Пояснения: В 6.6 мы придумали переменную i, которую назвали счетчиком циклов. Здесь мы тоже придумали переменную c. Она у нас выполняет роль счетчика положительных чисел. Сердце счетчика - оператор c:=c+1. Именно он в нужный момент увеличивает счетчик на 1. Но и без if a>0 then тоже никак нельзя. Если бы его не было, то c подсчитывал бы все числа без разбору, то есть был бы обыкновенным счетчиком циклов. В нашем же фрагменте увеличение с на 1 выполняется не всегда, а лишь при положительном а.
Пусть мы вводим числа 8, -2, 10 . . . В этом случае порядок выполнения операторов будет такой:
Оператор | а | с | Печать |
c:=0 | ? | ||
ReadLn(a) | |||
if a>0 then c:=c+1 | |||
WriteLn('Из них положительных - ' ,c) | Из них положительных 1 | ||
goto m | |||
ReadLn(a) | -2 | ||
if a>0 then c:=c+1 | -2 | ||
WriteLn('Из них положительных - ' ,c) | -2 | Из них положительных 1 | |
goto m | -2 | ||
ReadLn(a) | |||
if a>0 then c:=c+1 | |||
WriteLn('Из них положительных - ' ,c) | Из них положительных 2 | ||
goto m |
Не забывайте обнулять счетчик перед входом в цикл, а не то он начнет считать вам не с нуля, а бог знает с чего. Как бы вам понравилось, если бы таксист в начале поездки не обнулил счетчик?
В нашем фрагменте значения счетчика печатаются при каждом выполнении цикла. Изменим задачу.
Задача 2:В компьютер вводится ровно 200 чисел. Компьютер должен подсчитать и один раз напечатать, сколько среди них положительных.
Программа:
VAR c,i :Integer;
a :Real;