Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
учебники по паскалю / паскаль уч.doc
Скачиваний:
85
Добавлен:
25.03.2015
Размер:
659.97 Кб
Скачать

11.2. Алгоритм организации счетчика

 

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

1.     в разделе var описать переменную целочисленного типа, с помощью которой будет вестись подсчет;

2.     до цикла присвоить ей начальное значение 0;

3.     в теле цикла, если очередной элемент данных отвечает условию подсчета, увеличить эту переменную на 1 оператором вида k:=k+1;.

Необходимость присваивания начальных значений на шаге 2 этого и последующих алгоритмов связана с тем, что после описания в разделе var значение переменной еще не определено. "Пока мы не начали подсчитывать количество, оно равно нулю" -- этот очевидный для человека факт не очевиден для компьютера! Поэтому любой переменной, которая может изменяться в теле цикла, необходимо присвоить до цикла начальное значение, что и делает оператор вида k:=0;.

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

Inc(X,N); -- увеличивает значение переменной.

Здесь параметр X -- переменная порядкового типа, а N -- переменная или выражение целочисленного типа. Значение X увеличивается на 1, если параметр N не определен, или на N, если параметр N определен, то есть Inc(X); соответствует X:=X+1;, а Inc(X,N); соответствует X:=X+N;.

Dec(X,N);  -- уменьшает значение переменной.

Параметр X -- также переменная порядкового типа, N -- целочисленное значение или выражение. Значение X уменьшается на 1, если параметр N не определен, или на N, если параметр N определен, то есть Dec(X); соответствует X:=X-1;, а Dec(X,N); соответствует X:=X-N;.

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

В качестве примера реализации алгоритма рассмотрим следующую задачу.

 Последовательность z(i) задана соотношениями , i=1,2,...,100. Найти количество элементов последовательности, больших значения 0.5.

Обозначив искомое количество за k, составим программу:

var z:real;

 i,k:integer;

begin

 k:=0;

 for i:=1 to 100 do begin

  if i mod 2 = 0 then z:=sqr(i)*cos(i)

  else z:=sin(i/2);

  if z>0.5 then inc(k);

 end;

 writeln ('Количество=',k);

end.

Так как шаг по переменной i равен 1, в программе использован цикл for, для проверки того, является ли значение i четным, использована операция mod.

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

Известны оценки за экзамен по информатике для группы из n студентов, 2≤n≤25. Оценить количественную и качественную успеваемость группы по формулам:

, , где k1 -- количество "троек", "четверок" и "пятерок", k2 -- количество только "четверок" и "пятерок".

Для ввода текущей оценки используем целочисленную переменную a, в качестве счетчика цикла for введем переменную i ("номер студента"), остальные величины описаны в условии задачи. При вводе значения n и очередного значения a для простоты не будем контролировать корректность вводимых данных.

var a,i,n,k1,k2:integer;

    ykol,ykach:real;

begin

 writeln;

 writeln ('Введите количество студентов:');

 read (n);

 k1:=0;

 k2:=0;

 for i:=1 to n do begin

  write ('Введите оценку ',i,' студента:');

  read (a);

  if a>2 then begin

   inc(k1);

   if a>3 then inc(k2);

  end;

 end;

 ykol:=k1/n*100;

 ykach:=k2/n*100;

 writeln

('Количественная успеваемость=',ykol:6:2);

 writeln

('Качественная успеваемость  =',ykach:6:2);

 reset (input); readln;

end.