Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основи програмування Паскаль.docx
Скачиваний:
51
Добавлен:
12.05.2015
Размер:
511.7 Кб
Скачать

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.