Алгоритм организации счетчика
Этот алгоритм применяется, когда требуется подсчитать количество элементов данных, отвечающих какому-либо условию или условиям. В общем виде алгоритм описывается следующим образом: 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.
Читайте также: I. Показатели контингента обучающихся в образовательной организации Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|