- •Основи програмування мовою Паскаль
- •Часть 1. Основы языка Паскаль 2
- •Часть 2. Элементы профессионального программирования на Паскалі 62
- •Частина 1. Основи мови Паскаль
- •1. Алгоритм і програма
- •1.1. Алгоритм
- •1.2. Властивості алгоритму
- •1.3. Форми запису алгоритму
- •1.4. Програма й програмне забезпечення
- •1.5. Етапи розробки програми
- •2. Дані в мові Паскаль
- •2.1 Константи
- •2.2 Змінні й типи змінних
- •3. Арифметичні вирази
- •4. Лінійний обчислювальний процес
- •4.1 Оператор присвоювання
- •4.2 Оператор уведення
- •4.3 Оператор виведення
- •4.4 Керування виводом даних
- •4.5 Вивід на друк
- •5. Структура простої програми на Паскалі
- •6. Компілятор і оболонка Turbo Pascal
- •7. Обчислювальний процес, що розгалужується, і умовний оператор
- •7.4. Короткий умовний оператор
- •If логічний_вираз then оператор1;
- •7.5. Повний умовний оператор
- •If логічний_вираз then оператор1
- •7.7. Вкладені умовні оператори
- •7.9. Приклади програм з умовним оператором
- •8. Директиви компілятора й обробка помилок уведення
- •9. Оператор циклу. Цикли із передумовою і після-умовою
- •10. Цикл із лічильником і дострокове завершення циклів
- •11. Типові алгоритми табулювання функцій, обчислення кількості, суми й добутку
- •11.1 Алгоритм табулювання
- •11.2 Алгоритм організації лічильника
- •11.3 Алгоритми нагромадження суми й добутку
- •12. Типові алгоритми пошуку максимуму й мінімуму
- •13. Розв'язок навчальних завдань на цикли
- •14. Одномірні масиви. Опис, уведення, вивід і обробка масивів на Паскалі
- •15. Розв'язок типових завдань на масиви
- •Частина 2. Елементи професійного програмування на Паскалі
- •16. Кратні цикли
- •16.1 Подвійний цикл і типові завдання на подвійний цикл
- •16.2 Оператор безумовного переходу
- •17. Матриці й типові алгоритми обробки матриць
- •18. Підпрограми
- •18.1 Процедури
- •18.2 Функції
- •18.3 Масиви як параметри підпрограми
- •18.4 Відкриті масиви
- •19. Безлічі й перечислимые типи
- •20. Обробка символьних і строкових даних
- •20.1. Робота із символами
- •20.2 Робота з рядками
- •21. Текстові файли
- •21.1 Загальні операції
- •21.2 Приклади роботи з файлами
- •21.3 Робота з параметрами командного рядка
- •22. Записи. Бінарні файли
- •23. Модулі. Створення модулів
- •23.1. Призначення й структура модулів
- •Implementation
- •23.2. Стандартні модулі Паскаля
- •24. Модуль crt і створення простих інтерфейсів
- •25. Модуль Graph і створення графіки на Паскалі
- •Додаток 1. Таблиці Ascii-Кодів символів для операційних систем dos і Windows
- •Додаток 2. Основні директиви компілятора Паскаля
- •Додаток 3. Основні повідомлення про помилки Паскаля
- •Додаток 4. Додаткові лістинги програм
- •Додаток 5. Розширені коди клавіатури
- •Ascii‑ коди
- •Розширені коди
- •Додаток 6. Правила гарного коду
- •Додаток 7. Рекомендована література
11.2 Алгоритм організації лічильника
Цей алгоритм застосовується, коли потрібно підрахувати кількістьелементів даних, що відповідають якій-небудь умові або умовам. У загальному виді алгоритм описується в такий спосіб:
у розділі varописати змінну целочисленного типу, за допомогою якої буде вестися підрахунок;
до циклу привласнити їй початкове значення 0;
у тілі циклу, якщо черговий елемент даних відповідає умові підрахунку, збільшити цю змінну на 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.