- •Основи програмування мовою Паскаль
- •Часть 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. Рекомендована література
7.9. Приклади програм з умовним оператором
Приведемо кілька прикладів закінчених програм, що використовують РВП.
Пр.Перевірити, чи може бути побудований прямокутний трикутник по довжинах сторін a,b,c.
Проблема з розв'язком цього завдання – не в перевірці умови теореми Піфагора, а в тому, що в умові не сказане, яка зі сторін може бути гіпотенузою. Розв'язків можливо трохи – запитувати в користувача введення даних по зростанню довжини сторін, перевіряти всі три можливі умови теореми Піфагора й т.п. Використовуємо найбільш природній розв'язок – перед перевіркою умови теореми Піфагора впорядкуємо величини a,b,c так, щоб виконувалися співвідношення a≤b≤c. Для цього використовуємо приймання з обміном значень змінних із глави 4.
var a,b,c, { Довжини сторін }
s:real; { Буферна змінна для обміну }
begin
{ СЕКЦІЯ ВВЕДЕННЯ ДАНИХ }
writeln;
write ('Уведіть довжину 1 сторони (більше 0):');
readln (a);
write ('Уведіть довжину 2 сторони (більше 0):');
readln (b);
write ('Уведіть довжину 3 сторони (більше 0):');
readln (c);
{ РОБИМО СТОРОНУ a МІНІМАЛЬНОЇ, А СТОРОНУ c - МАКСИМАЛЬНОЇ }
if (a>b) then begin
s:=a; a:=b; b:=s;
end;
if (a>c) then begin
s:=a; a:=c; c:=s;
end;
if (b>c) then begin
s:=b; b:=c; c:=s;
end;
{ ПЕРЕВІРЯЄМО УМОВУ ТЕОРЕМИ ПИФАГОРА Й РОБИМО ВИВІД }
if abs(a*a+b*b-c*c)<1e-8 then writeln
('Прямокутний трикутник може бути побудований!')
else writeln
('Прямокутний трикутник не може бути побудований!')
end.
Пр.Визначити, чи попадає крапка площини, задана координатами (a,b) у прямокутник, заданий координатами двох кутів (x1,y1) і (x2,y2).
Як і в попередньому завданні, було б не зовсім коректно вимагати від користувача вводити дані в певному порядку – набагато краще при необхідності поміняти x- і y-координати прямокутника так, щоб пари змінних (x1,y1) містила координати лівого нижнього кута прямокутника, а (x2,y2) – правого верхнього.
var x1,y1,x2,y2,a,b:real;
begin
writeln ('Уведіть координати першого кута:');
read (x1,y1);
writeln ('Уведіть координати другого кута:');
read (x2,y2);
if x1>x2 then begin
a:=x1; x1:=x2; x2:=a;
end;
if y1>y2 then begin
a:=y1; y1:=y2; y2:=a;
end;
writeln ('Уведіть координати крапки:');
read (a,b);
if (x1<=a) and (a<=x2) and (y1<=b) and (b<=y2) then
writeln ('Крапка попадає в прямокутник')
else
writeln ('Крапка НЕ попадає в прямокутник');
end.
Пр.Уводиться грошова сума в рублях і копійках. Програма друкує введену суму із правильною формою слів "рублі" і "копійки", наприклад, "123 рубля 15 копійок".
Закінчення, використовуване для слів "рублі" і "копійки", залежить від останньої цифри суми, яку можна одержати, побравши залишок від розподілу на 10 (1058 рублів, 38рубліві т.д.). Виключення – суми з останніми двома цифрами від 11 до 19 включно, які завжди вимовляються "рублів" і "копійок" (511рублів, але 51рубль). Використовуючи цю інформацію, складемо програму.
var r,k,o10,o100:integer;
begin
writeln;
write ('Уведіть кількість рублів, потім пробіл і кількість копійок:');
read (r,k);
writeln;
o10:=r mod 10; {Побрали останню цифру}
o100:=r mod 100; {...і 2 останніх цифри}
write ('Правильно сказати: ',r,' ');
{Друкуємо число рублів, потім пробіл}
if (o100>10) and (o100<20) or (o10>4) or (o10=0) then write ('рублів')
else if (o10>1) and (o10<5) then write ('рубля')
else write ('рубль');
{аналогічно для копійок:}
o10:=k mod 10;
o100:=k mod 100;
write (' ',k,' '); {друкуємо число копійок із пробілом до й послу}
if (o100>10) and (o100<20) or (o10>4) or (o10=0) then write ('копійок')
else if (o10>1) and (o10<5) then write ('копійки')
else write ('копійка');
end.