Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
основы программирования на Паскале.doc
Скачиваний:
260
Добавлен:
25.03.2016
Размер:
4.34 Mб
Скачать

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.