Я з свого досвіду знаю, як хочеться новачку швидше написати яку-небудь програму і відчути себе програмістом. Ну щож, напишемо найпершу програму на Паскалі. Програма на Паскалі оформляється завжди стандартним чином і має наступний вигляд:
ТРОХИ ІСТОРІЇ
В 1970 р. з'явилася нова
мова програмування. Автор мови
швейцарський вчений Ніклаус Вірт назвав
її Паскалем на честь
великого французького математика, філософа і
винахідника 17 століття
Блеза Паскаля. Паскаль винайшов
обчислювальний пристрій, саме
тому новій мові
було дано його ім'я.
Завдяки
своїй чіткості і
логічності Паскаль надовго
зайняв своє місце
серед інших мов
програмування не тільки як
засіб розробки серйозних
програм-додатків. Він також дуже
добре підходить для
навчання програмуванню.
Потім з'явилися різні
версії мови і
його розширення, доповнені новими
можливостями. Найбільш відомим розширенням
став пакет Turbo Pascal фірми Borland, що з'явився в 1983 році і відразу
став подією в світі
комп'ютерних технологій.
Перша згадка про
нього містилася в
рекламі, опублікованій в журналі
BYTE, а сам пакет
призначався для операційної
системи CP/M. На початку 1984
року він був перенесений в
середовище операційної системи
для персональних комп'ютерів MS-DOS і
придбав величезну популярність. З тих пір з'явилося
декілька версій Турбо Паскаля, остання – сьома.
Фірма Borland/Inprise завершила
лінію продуктів Турбо
Паскаль і перейшла
до випуску системи
візуальної розробки для
Windows – Delphi. Не дивлячись на
це, Турбо Паскаль продовжує
грати роль відмінної
мови для першого
знайомства з світом
«серйозного» програмування.
Разом з тим
Турбо Паскаль чудово
працює на порівняно
малопотужних комп'ютерах, і
тому саме цей
пакет часто встановлюють
в комп'ютерних класах
шкіл і гуртків
інформатики.
Як
навчитися програмувати на Паскалі? Немає недоліку
в підручниках, що містять опис
граматики і синтаксису
мови Паскаль, і вони
дійсно необхідні для
засвоєння правил програмування. Проте кращий
спосіб навчитися програмувати – подивитися, як це
роблять інші.
Турбо Паскаль. Чому не просто
Паскаль, а Турбо Паскаль? Слово «Турбо»
в англійському лексиконі
означає прискорення. Транслятор,
що входить до складу Турбо
Паска ля, дуже швидко
перекладає програму з
мови програмування в
машинні коди, помітно швидше, ніж
транслятори в інших
системах програмування. Ось тому – Турбо.
НАЙПЕРША ПРОГРАМА
Я з
свого досвіду знаю, як
хочеться новачку швидше
написати яку-небудь програму
і відчути себе програмістом. Ну
щож, напишемо найпершу програму
на Паскалі. Програма на Паскалі оформляється
завжди стандартним чином
і має наступний
вигляд:
Program < ім'я
програми >;
< розділ
описів >
begin
<
розділ операторів >
end.
Отже напишемо
свою першу програму:
Program s_privetom_1;
begin
Write (‘ Привіт, це я! ‘);
end.
Дійсно це
перша програма яку
пишуть мої учні. І дійсно вони
захоплюються собою, коли одержують
результат виконання її на екрані
монітора.
Це їх надихає
на робочий режим, освоювати ази програмування.
Арифметичні операції на мові ПАСКАЛЬ
Перестановка змінних.
Задача. Поміняти
місцями значення двох змінних а
і b (тобто
щоб в а виявилося те,
що раніше було
у b, і навпаки). Здавалося б, можна записати
так:
а:=b;
b:=a;
проте тут
криється помилка. Перевіримо це на конкретному
прикладі. Хай а було
рівне 10, а значення b рівно 7. Після виконання
оператора а:=b в b залишається 7; а
стане рівним 7, і тепер,
якщо виконати оператор
присвоєння b:=a, там
також виявиться 7. Вихід
полягає у використовуванні додаткової
змінної t, в якій ми
збережемо значення змінної
а до того, як його
доведеться замінити
новим:
t:=a;
а:=b;
b:=t;
Тепер а і
b помінялися
значеннями.
Зворотний
запис числа.
Задача. Дано
трицифрове число х= (а,b,c – його цифри). Вимагається отримати
число, записане тими ж
цифрами, але
в зворотному порядку. Тобто, перед нами
постає задача знаходження
цифр числа – а,b і с. Поставити ці
цифри в зворотному
порядку
легко – результат буде
рівний x=100c+10b+a. Простіше
за все знайти цифру
одиниць с – вона буде рівна
остачі від ділення
числа х на 10
(наприклад, якщо х=128, то xmod 10 буде 8, що нам
і потрібно). Отже
с:=x mod 10;
Щоб знайти
b, поступимо
таким чином: спочатку знайдемо, рівне х, діленому
на 10 (для 128 це буде
12), а потім вже визначимо у
– цифру одиниць числа, що вийшло :
b:=x div 10 mod 10;
Знайти а
просто – це результат ділення
х без остачі на
100;
а:=x div 100;
Тепер можна
написати всю програму:
Program naoborot;
var x,a,b,c: integer;
begin
Write(‘ введіть x’);
Readln(x);
с:=x mod 10;
b:=x div 10 mod 10;
а:=x div 100;
Write(100*c+10*b+a);
end.
НАБІР ЗАДАЧ
ПО ТЕМІ:
“ЛІНІЙНІ ПРОГРАМИ”
(перші заняття)
Задача 1. Якщо на
одну шальку терезів
посадити Даринку, яка важить
n
кілограмів, і Наталку, яка важить
на 5 кілограмів
менше, а на іншу
насипати m кілограмів цукерок, які
набагато важчі за
дівчаток, то скільки кілограмів
цукерок доведеться з’їсти
нещасним, щоб шальки терезів
врівноважились?
Розв’язання (математичне)
Хай вага Даринки n кілограм, тоді вага
Наталки буде n-5 кілограм. Разом вага дівчаток
буде
s=
n+n-5. Щоб терези були в
рівновазі, дівчаткам треба з’їсти таку кількість цукерок, яка
дорівнює різниці між
вагою цукерок і загальною масою
дівчаток, тобто а(кількість
з’їдених цукерок)= m – s.
А тепер запишемо програму розв’язання
цієї задачі:
Program N1;
var n, m, s, а: real;
begin
Writeln (‘введіть вагу Даринки в
кілограмах’);
Readln(n);
Writeln(‘введіть вагу цукерок
в кілограмах’);
Readln(m);
s:=n+n-5;
а:=m-s;
Writeln(‘ доведеться з’їсти a=’, а:1:1);
Readln;
end.
Задача 2.
Невдаха-учень Сашко сів виконувати домашнє завдання і
просидів за столом
2
години. З їх x хвилин він чухав потилицю і дивився у
вікно, у
хвилин
шукав у письмовому
столі гумку, щоб стерти
у підручнику з
англійської мови карикатуру
на свого товариша, на
малювання якої він витратив перед цим z хвилин.
Весь останній час
Сашко перекладав англійські слова. Скільки слів
він встиг перекласти, якщо на перекладення
одного слова у нього йшло 5 хвилин?
Розв’язання:
Хай Сашко чухав потилицю х хвилин, шукав гумку у хвилин,
на малювання карикатури
товариша він витратив z
хвилин, тоді всього він витратив годин:
h=2*60-x-y-z; щоб визначити скільки
Сашко переклав слів, треба весь витрачений ним час
поділити
на 5 (ця операція повинна
виконатись націло). Отже маємо
слідуючи програму:
Program N2;
var x, у, z, h: integer;
begin
Writeln('вкажіть, скільки хвилин Сашко чухав потилицю’);
Readln(x);
Writeln(‘вкажіть, скільки хвилин Сашко шукав гумку’);
Readln(y);
Writeln(‘вкажіть, скільки хвилин Сашко витратив на малювання карикатури’);
Readln(z);
h:=2*60;
h:=h-x-y-z;
h:=h div 5;
Writeln(‘ В решті-решт Сашко
переклавши h=’,h:3, ‘слів’);
Readln;
end.
Задача 3. Петрусь
задумав число і
нікому його не назвав.
Друзі спіймали його і примусили подвоїти задумане число, а
потім додати до нього 5. І
тільки після того, як
друзі пообіцяли Перусеві
благодійну допомогу на
контрольній з математиків, він зізнався, що
вийшло число n. Визначте,
яке число задумав
і приховав від
своїх друзів Петрусь?
Розв’язання
Хай Петрусь задумавши
число n.
(пояснення математичного розв’язку видно із складеної
програми)
Program N3;
var n : integer;
begin
Writeln(‘ яке число вийшло у
Петруся’);
Readln(n);
n:=n-5;
n:=n div 2;
Writeln(‘ Петрусь
задумавши число – ‘, n);
Readln;
end.
Задача 4. На
таксі Дусьці сидить
х бліх, а на
вівчарці Ладі – у. Після того, як
вівчарка і такса
зустрілись і поговорили
одна з однією, 12
Дусьчиних бліх перейшли
на Ладу, а 17
Ладиних – на Дуську. Скільки бліх тепер сидить на Ладі, а
скільки на Дусьці?
Розв’язання:
Program N4;
var x, у, z: integer;
begin
Writeln(‘вкажіть,
скільки бліх сиділо
на Дусьці:’);
Readln(x);
Writeln(‘вкажіть, скільки бліх
сиділо на Ладі:’);
Readln(y);
x:=x+5;
у:=y-5;
Writeln(‘ на Дусьці’,x:5,’, а на Ладі
‘, у:5);
Readln;
end.
Задачі для
самостійного вирішення.
Задача 1.Поменять місцями
значення змінних а і b, не використовуючи додаткову
змінну.
Задача 2. Дано
чотиризначне число х=. Отримати число, записане тими
ж цифрами в
зворотному порядку (у=).
Задача 3.Дано тризначне
число х=. Написати суму квадратів
його цифр.
Задача 4. По
номеру квартири визначити
номер під'їзду і
поверх. Квартира знаходиться в п'ятиповерховому будинку, на кожному
поверсі по чотири
квартири.
УМОВНИЙ ОПЕРАТОР
Процедури введення
і виведення, а також оператор
присвоєння дозволяють писати тільки
лінійні програми, в яких
всі команди виконуються
послідовно, одна за одною. Але
дуже часто виникає
необхідність виконувати різні
команди залежно від виконання
якоїсь умови. Для такої
мети в Паскалі
введений умовний оператор:
If (умова) then (оператор 1) else (оператор 2);
Працює
цей оператор так – спочатку перевіряється
умова, і, якщо вона вірна, виконується оператор 1, в противному випадку
виконується оператор 2.
В найпростіших
випадках умова – це математичне
порівняння двох виразів
по величині
(відношення двох величин). Відношення можна
записати за допомогою наступних
знаків:
Абсолютна величина
Хай вимагається
знайти абсолютну величину (модуль) числа х. Нагадаємо
визначення – модуль числа х
рівний самому числу
х, якщо воно додатнє, і
-х, якщо число від’ємне. Тут
очевидно, є умова, залежно
від виконання або
невиконання якогї слід
виконувати різні дії. Без
умовного оператора в
повній формі не обійтися:
Program absolute;
var x:integer;
begin
Write(‘ введіть ціле
число:’);
Readln(x);
if x>=0 then
Write(‘|’,x,’|’=’,x);
else
Write(‘|’,x,’|’=’, -х);
end.
ЗНАЙОМТЕСЯ – ПАЛІНДРОМ.
Ще
одна, складніша задача. Вимагається визначити, чи
є
задане тризначне число паліндромом (паліндром
читається однаково зліва направо
і справа наліво, наприклад, паліндромами
є
числа 121, 282, 454, слова «шалаш», «наган»). Для вирішення
цієї задачі можна
використовувати просту умову – перша
цифра числа повинна
дорівнювати останній:
Program palindrom;
var x:integer;
begin
Write(‘ введіть ціле
число:’);
Readln(x);
if x mod 10 = x div
100 then
Write(‘ введене число
є паліндромом’)
else
Write(‘ введене число не є
паліндромом’);
end.
Ділимо порівну
Наступна наша
програма повинна перевірити
чи ділиться введене
з клавіатури ціле
число без остачі на
4. Числа а і
b діляться без
остачі якщо залишок від
ділення а на
b рівний 0. Пригадаємо, що в
Паскалі є спеціальна
операція обчислення залишку від
ділення одного числа
на інше. Це – mod:
Program divide;
var m: integer;
begin
Write(‘ введіть ціле число’);
Readln(m);
if m mod
4 = 0 then
Write(‘ введене число ділиться
на 4’ );
else
Write(‘ введене число
не ділиться на 4’ );
end.
ЛІНІЙНЕ РІВНЯННЯ
Розв’язування лінійного
рівняння ax+b=0 залежить від
значень а і b.
Якщо а
не рівно 0, то х=-b/a, якщо
ж а=0, то необхідно
перевірити значення b. При
b=0 розв’язком є
будь-яке число, а при b=0
рівняння не має розв’язку. Тут є
декілька умов, і в
програмі розв’язування лінійного
рівняння використовується умовний
оператор:
Program linear_equation;
var а,b: real;
begin
Write(‘ введіть
коефіцієнти а, b:’);
Readln(а, b);
if a<> 0.0 then
Write(‘’x=’, -b/a)
else
if b=0.0 then
Write(‘ корінь – будь-яке
число’)
else
Write(‘ коренів немає!’);
end.
ВИСОКОСНИЙ РІК
Як
визначити, чи є
вказаний рік високосним? Рік вважається високосним, якщо його номер
ділиться без остачі на
4, окрім тих
випадків, коли він ділиться
на 100. Якщо номер
року ділиться на
400, то він все одно
високосний.
Для вирішення задачі
виберемо наступний алгоритм. Спочатку перевіримо, чи кратний
номер року 400, якщо
так, то
рік високосний,
якщо ні, перевіримо номер
року на кратність
100. Якщо виявиться, що він кратний
100, то рік не високосний, якщо ні, перевіряємо на
кратність 4. Якщо номер
року ділиться на
чотири без остачі, то він високосний, інакше
– ні.
Program February_29;
var а: integer;
begin
Write(‘ введіть рік:’);
Readln(a);
if а mod 400
= 0 then
Write(а, ‘ -високосний рік’)
else
if а mod 100 = 0 then
Write(а, ‘ -не високосний рік’)
else
if а mod 4 = 0 then
Write(а, ‘ -високосний рік ‘)
else
Write(а, ‘ -не високосний рік’);
end.
ЛОГІЧНІ ОПЕРАЦІЇ
При
розв’язуванні різних задач іноді
виникає необхідність перевірити
виконання декількох умов
відразу. Наприклад, в задачі, що
визначає, чи є число
n двозначним, потрібно перевірити
відразу дві умови – n
повинне бути більше
9 і менше
100. Зробити це можна, записавши двох
умовних операторів:
if n > 9 then
if n < 100 then
Write(‘ двозначне’)
else
Write(‘ не двозначне’)
else
Write(‘ не
двозначне’);
Але в цьому
випадку доводиться двічі записувати
рядок Write(‘ не
двозначне’), і, крім
того, таке розв’язання виглядає трохи заплутаним. Для зручності
запису таких і
подібних їм умов
слід використовувати логічні
операції:
and – логічне «і» («логічне
множення»);
or – логічне «або» («логічне додавання»);
xor –
логічне «виключає або»;
not – логічне заперечення.
За допомогою логічних операцій
прості умови можна
об'єднувати в складені. Прості
умови при цьому обов'язково
беруться в дужки, оскільки логічні
операції мають більш
високий пріоритет, ніж операції
порівняння.
ПРАВИЛА ВИКОНАННЯ
ЛОГІЧНИХ ОПЕРАЦІЙ
Складна
умова, складена з двох простих, сполучених операцією
and, вірно тоді і тільки тоді,
коли вірні обидві
прості умови. Значенню «істина» можна
умовно поставити числове
значення 1, а значенню
«брехня» - нульове. В цьому випадку результат
застосування операції
and можна отримати, якщо перемножити
два логічні значення
в їх числовому
виразі. Тільки якщо
обидва вони істинні, в результаті отримаємо
істину. Тому операцію and
і називають ще логічним множенням.
Для
операції or складна
умова істинна, якщо вірно
хоча б одна з
простих умов. Тут також
можна звести виконання
логічної операції до
складання числових еквівалентів
логічних значень, тільки при
цьому результатом буде залишок
від ділення отриманої
суми на два. Операцію
or тому називають
логічним
додаванням.
Результат операції
логічне виключаючи або:
умова_1
xor умова_2
«істина» тоді, коли
вірно тільки одна
з умов – умова_1
або умова_2.
Операція not – це операція
заперечення. Заперечення
істини помилка, а заперечення
брехні – істина, тому not (умова)
істинна тоді, коли умова помилкова.
Пріоритет (послідовність)
виконання логічних операцій
такий – спочатку
виконується заперечення (not),
потім and, а потім нарівні
or і xor.
Якщо
складна умова містить декілька
однакових логічних операцій, то
виконуються вони по порядку
зліва направо, як і
арифметичні операції.
Для зміни порядку обчислення умов
можна використовувати додаткові
дужки.
СКІЛЬКИ ЦИФР В
ЧИСЛІ?
Задача. Скласти
програму яка визначає, чи
є
введене
число двозначним?
Program two_digits;
var n: integer;
begin
Write(‘ введіть ціле число:’);
Readln(n);
if (n>9) and (n<100) then
Write(‘ введене число двозначне’)
else
Write(‘ введене число
не двозначне’);
end.
ЗНОВУ ВИСОКОСНИЙ
РІК
Тепер
складемо програму, яка визначає, чи
є
вказаний рік високосним з використанням логічних
операцій. В першому варіанті (див.вище) цієї програми
ми двічі записували оператори
Write(‘ - високосний рік’) і Write(‘ -не високосний рік’). Позбутися зайвого оператора виводу можна, використовуючи умовний
оператор з
складною умовою:
Program February_29_2;
var а: integer;
begin
Write(‘ ввести рік:’);
Readln(a);
if (а mod
400 = 0) or ((а mod 100 < > 0)
and (а mod
4 = 0))
then
Write(а, ‘ -високосний рік’)
else
Write(а, ‘ -не високосний рік’);
end.
ПОРИ РОКУ.
Наступна
програма, в якій також
використовуються складні умови
і логічні операції, дозволяє по
номеру місяця визначити
пору року:
Program seasons;
var а: integer;
begin
Write(‘ введіть номер місяця’);
Readln(a);
if (а > 2) and (а <
6) then
Write(‘ весна’);
if (а > 5) and (а <
9) then
Write(‘ літо ‘);
if
(а > 8) and
(а < 12) then
Write(‘ осінь’);
if (а <3) or (а = 12) then
Write(‘ зима’);
end.
ШАХИ НА
ЧЕРЗІ.
Шахи – це одна
з складних логічних
ігор, і скласти програму, яка
могла б грати
навіть на рівні початківця
шахіста, нам поки не під силу, тому візьмемося
за задачу простішу.
Задача. Скласти програму, яка
визначає колір вказаної
клітки шахівниці.
Клітка задається
своїми координатами х(номер вертикалі) і у (номер горизонталі). Вважатимемо, що
клітка (1, 1) – чорна.
Ця задача
розв'язується просто, якщо помітити, що
сума номерів рядка
і стовпця парна
для чорних кліток
і непарна для
білих:
Program black_or_white;
var x,y: integer;
begin
Write(‘ введіть номер
вертикалі і номер
горизонталі:’);
Readln(x,y);
if (x+y) mod 2 = 0 then
Write(‘ клітка
чорна’)
else
Write(‘ клітка біла’);
end.
Ще одна
проста шахова задача.
Задача. Визначити, чи
може шахова тура за
один хід потрапити
з клітки з
координатами (х1,у1)
в клітку з
координатами (х2, у2).
Відомо, що тура ходить
тільки в горизонтальному або
вертикальному напрямах.
Для того, щоб
вибрати правильний напрям
ходу, помітимо, що у всіх
кліток горизонталі співпадають
номери рядків, а у
кліток вертикалі – стовпців.
Program chess;
var x1, x2, y1, y2: integer;
begin
Write(‘ введіть координати
першої клітки x1
і у1:’);
Readln(x1, y1);
Write(‘ введіть координати
другої клітки
х2 і у2:’);
Readln(x2, y2);
if (x1=x2) or (y1 = y2) then
Write(‘тура може
за один хід потрапити у
вказану клітку’)
else
Write(‘ тура не може
за один хід потрапити
у вказану клітку’);
end.
ВЛУЧНО СТРІЛЯЄМО
Точка не
повинна належати внутрішньому
прямокутнику, тому друга пара
умов повинна бути
запереченням умов:
Отже, текст програми:
Program v_moloko;
var x,y,x1,x2,x3,x4,y1,y2,y3,y4: real;
begin
x1:= 1.1;
y1:= 1.2;
x2:= 3.9;
y2:= 5.2;
x3:= 2.2;
y3:= 1.3;
x4:= 3.5;
y4:= 4.9;
Write(‘ введіть x, у:’);
Readln(x, у);
if (x >= x1)
and (x <= x2) and (у >= y1) and (у <= y2) and not ((x >=x3) and (x <= x4) and (у >= y3) and
(у <=
y4)) then
Write (‘ попали в
мішень !!!’)
else
Write(‘ мимо.’);
end.
ЛОГІЧНИЙ ТИП ЗМІННИХ
В
Паскалі існує логічний
тип змінних Boolean. Змінні
логічного типу можуть
приймати тільки два
значення: true («істина») і false («брехня»). Таким змінним можна
присвоювати значення,
виводити їх на
екран, застосовувати до них
логічні операції, не можна тільки
вводити їх значення
з клавіатури. Наприклад:
Program bool_boollean;
var а, b: Boolean;
begin
а:=
true;
b:= false;
а:= а and
b
or not true;
Write(а, b);
end.
В результаті
роботи програми буде виведено на
екран два слова false і true. Чому?
Розберіться самостійно.
Логічний тип виник
не випадково. Річ у тому, що логічні
операції як результат
видають значення true або false.
Результат логічної операції
можна присвоювати змінним
логічного типу, наприклад:
а:= true and (2
<=3) or (0.5
<> 7);
Виконавши таке
присвоєння, в умовному операторі
замість умови можна
використовувати змінну логічного
типу. Наприклад:
if а
then b:= b+1;
Тип Boolean звичайно
використовується для зручності
запису умов, щоб, наприклад,
уникнути багатократного написання
однієї і тієї
ж умови або
скоротити запис складної
умови.
ПРОГРАМУЄМО ФОРМУЛУ
В даній
програмі використовується змінна
логічного типу. Задача полягає
в тому, щоб ввести
з клавіатури ціле
число а і, якщо
воно знаходиться між 10 і 100,
обчислити значення виразу
а2 – 2а + 7.
Program expression;
var а: integer;
b: Boolean;
begin
Write(‘ введіть ціле
число:’);
Readln(a);
b:= (а >= 10) and (а <= 100);
if b then Write(a*a-2*a+7);
end.
СКЛАДЕНИЙ ОПЕРАТОР
Часто буває
так, що у результаті виконання
деякої умови треба здійснити декілька
дій, а не одну, як це передбачено в
умовному операторі. З цього
положення можна вийти, написавши декілька
умовних операторів, перевіряючих одну
і ту ж
умову. Але якщо дій
багато, програма вийде громіздка
і складна, а в програмуванні цінується
здатність стисло і
точно висловлювати свої
думки. Є інший
простий вихід, і полягає
він у використовуванні складеного
оператора. Виглядає складений
оператор таким чином:
begin
<оператори>
end;
Зарезервовані слова begin і end називаються
операторними дужками.
Між ними
може бути скільки завгодно інших
операторів, але вважається все
це одним складеним
оператором. В умовному операторі
та і в інших
ситуаціях, з якими
ми зустрінемося потім, там, де передбачено
використовування
одного-єдиного оператора,
можна використовувати складений
оператор.
ЗНАЙТИ ЦИФРИ .
Задача. Вимагається ввести
ціле число n і,
якщо воно тризначне, знайти його
цифри, в противному випадку надрукувати
повідомлення не «можу знайти
цифри». Спробуйте самостійно розібратися
в роботі програми
find_digits:
Program find_digits;
var n,a,b,c : integer;
begin
Write(‘
введіть ціле число:’);
Readln(n);
if (n> 99) and
(n<
1000) then
begin
а:= n div 100;
b:= n div 10 mod 10;
з:= n mod 10;
Write(а, b, з)
end
else
Write(‘ не можу знайти
цифри! ‘);
end.
СУМА АБО
КВАДРАТ.
Задача. Скласти програму, яка
повинна обчислити суму
двох дійсних чисел
х і у, якщо х – додатнє, інакше обчислити
х2. В цій задачі, якщо
х недодатнє, у
вже вводити не треба:
Program sum_or_square;
var x, у: real;
begin
Write(‘ введіть
дійсне число: ‘);
Readln(x);
if x > 0 then
begin
Write(‘ введіть дійсне
число у :’);
Readln(y);
Write(x+y)
end
else
Write(x*x);
end.
ОПЕРАТОР ВИБОРУ
В Паскалі
є ще один
оператор, який дозволяє програмувати складні розгалуження, коли є декілька варіантів
дії (більше двох). Цей оператор
називається оператором вибору
(case) і має наступний
вигляд:
case вираз of
cписок_значень_1 : оператор_1;
cписок_значень_2 : оператор_2;
.
cписок_значень_n :
оператор_n;
else оператор;
end;
Тут між
зарезервованими словами case і of знаходиться
вираз, що приймає значення, яке
може бути присутнє в
одному із списків
значень, що знаходяться зліва
від двокрапок. Кожний оператор, що йде за
двокрапкою, відділяється від наступного
списку значень крапкою
з комою. Гілка else, що
відповідає всім неперерахованим значенням
виразу, необов'язкова. При
виконанні даного оператора
спочатку обчислюється значення
виразу. Потім вибирається той
список значень, в якому
знаходиться отримане значення, і
виконується відповідний йому
оператор.
В
списках значень оператора
case допустимими
є цілі і
деякі інші (але не речовинні) типи. Будь-яке задане
значення виразу може
входити в список
значень неодноразово, але виконуватися
буде лише перша
відповідна гілка. Якщо значення
виразу відсутнє в
списках значень, жоден з
варіантів виконуватися не буде. В цьому випадку виконується
гілка else
оператора case або, якщо
ця гілка відсутня, наступний за case оператор.
Задача. У національному
університеті “Львівська політехніка”
поточні знання студентів
оцінюють за стобальною системою.
На екзамені бали переводять в
оцінки: «відмінно», «добре», «задовільно», «незадовільно». Оцінки визначають так:
Балі Оцінка
88 – 100 «відмінно»
71 –
87 «добре»
50 –
70 «задовільно»
0 –
49 «незадовільно»
Скласти програму,
яка для
конкретного студента (name) і його кількості
балів (bal) виводить його оцінку
(mark).
Program Varks;
var bal: integer;
name, mark : string;
begin
Write(‘введіть прізвище’);
Readln(name);
Write(‘введіть бали ‘);
Readln(bal);
case bal
88..100 : mark := ‘відмінно ‘;
71..87 : mark := ‘ добре’;
50..70 : mark := ‘задовільно’;
0..49 : mark := ‘незадовільно’
else mark := ‘0’
end;
if mark < > ‘0’
then
Writeln( name : 15, mark : 15)
else
Writeln(‘ помилка під час введення кількості
балів’);
end.
Завдання. Віконати алгоритм
для кількох значень
змінної bal.
Зауваження. Від моменту
формулювання умови
задачі до виконання програми можна забути, які значення змінних є допустимими. Саме тому
в алгоритмах прийнято контролювати правильність
вхідних даних і виводити повідомлення
у випадку виявлення помилки, допущеної
під час введення даних. У
наведеній програмі таке
повідомлення буде виведено, якщо ввести від’ємну
кількість балів чи число більше, ніж
100.
Задача. Ціна купальника
у травні
становить а грн.
У червні
ціна буде збільшена
на р%, у
липні дорівнюватиме травневій, а
в серпні буде зменшена на q%
порівняно з травневою. Скласти програму, яка після введення номера літнього
місяця (month) визначатиме ціну (с)
купальника.
Розв’язок
задачі запишемо у такому
вигляді:
Розглянемо програму.
Змінну month оголосимо не
як integer, а як діапазон
6..8 – звуження типу integer згідно
з умовою задачі.
Program Shopping;
var month : 6..8;
а, p, q, з : real;
when: string;
begin
Write(‘введіть ціну, відсотки p та q,
номер місяця:’);
Readln(а, p, q, month);
case month
6:
begin з:= a*(1+p/100);
when := ‘червні’
end;
7 : begin
з:= а:
when :=
‘липні’
end;
8 : begin з := a*(1 – q/100);
when :=
‘серпні’
end
end;
Writeln(‘ купальник у ‘, when, ‘коштує’, з)
end.
Виконаємо програму. Хай нас цікавить
ціна купальника в
серпні (month). Введемо дані так: 9.8
20 30 8.
Отримаємо
результат: Купальник у серпні
коштує 6.86.
Задача.
Змоделювати роботу автомата
з продажу квитків. Хай
населені пункти (k) позначені номерами
1, 2,
3, 4, 5, 6, 7, 8. Вартість одного
квитка (cina) до конкретного
пункту визначена так:
Скільки коштуватимуть m квитків до деякого населеного пункту?
Program kvytky;
var до, m, cina : integer;
begin
Write(‘введіть кількість
квитків та номер
пункту: ‘);
Readln(m, до);
case
до
1 : cina :=22;
2, 3: cina :=35;
4: cina :=50;
5, 6: cina :=72;
else cina :=97
end;
Writeln(m, ‘квитків до пункту’,k, ‘ коштують’, m*cina)
end.
Задача. Виконайте програму Dialog.
Уведіть число – кількість років – і
прочитайте відповідне повідомлення.
Program Dialog;
var vik : integer;
begin
Write(‘ скільки Вам
років?’);
Readln(vik);
case vik
12, 13: writeln(‘ вам ще
рано читати такі книжки’);
14, 15: writeln(‘ вам ще не можна дивитися фільми для дорослих’);
16, 17:writeln(‘ добре вчіться –
батьки будуть пишатися вами’);
18, 19:writeln(‘мінздоров’я
попереджає...’);
20..23: writeln(‘ Паскаль вивчати вже
пізно – пора заміж!’)
else
writeln(‘ Закрийте цю книжку! Читайте Н. Вірта!’);
end;
readln
end.
У
програмі Dialog використано діапазон значень 20..23
замість списку чисел
20, 21, 22, 23.
Завдання. Поєкспериментуйте
з однією з наведених вище програм, модифікувавши
її на свій розсуд та ввівши
свої дані.
ЗАДАЧІ ДЛЯ САМОСТІЙНОГО
ВИРІШЕННЯ
Задача 1.Перевірити, чи є число а
парним.
Задача 2.Знайти найбільше
з трьох
чисел.
Задача 3. Для цілого
числа n знайти
суму його цифр. Знайти
суму квадратів його
цифр у випадку, якщо n
чотиризначне.
Задача 4. Визначити, чи є
число n одночасно
додатним і кратним
3.
Задача 5. Визначити, чи може
шаховий кінь за
один хід потрапити
з клітки з
координатами (х1,у1) в
клітку з
координатами (х2,у2).
Задача 6. Визначити, чи
належить точка з координатами
(х,у) заданій
множині точок на
координатній площині (множини
зображені на малюнку, множини включають
межу).
Задача 7. Хай а і b –
змінні типу Boolean. Знайти значення
а і b
в результаті виконання наступного
фрагмента програми:
а:= ( 2<> 3) or
true;
b:= а
and а
xor (true and
(2
>=7));
а:= b
or false and
(2<7);
Задача 8. Перевірити, чи рівне
ціле число а сумі
кубів своїх цифр (a<100 000).
Задача 9. В
череві вівчарки Лади х
сосисок, а в череві
такси Дуськи – у. Кому дісталося
більше сосисок і на скільки?
Задача 10. На квадратному
городі, довжина всіх сторін
якого дорівнює 80 м,
посадили собаку. Цього собаку
посадили на ланцюг
довжиною n м та m
см і прикріпили
ланцюг до стовпа, який
стирчить в самому
центрі городу. Довжина собаки
від ошийника до
передніх зубів – 30 см. Чи
залишилось на городі
місце, безпечне для злодіїв?
Задача 11. Вовочка твердо
вирішив стукнути старшокласника Єгора
по лобі дошкою
площею S кв.м. Визначити, чи підійде
для цієї справи
дошка прямокутної форми
шириною а
см та довжиною
b см.
Задача 12.Чи
впізнає себе дільник
m у
залишку після ділення
на нього націло
числа n?
Задача 13. Васєчкін прочекав
у черзі на
щеплення х
хвилин. Визначити, скільки
годин і хвилин
він чекав. Порівняти, чого виявилося
більше – годин чи хвилин.
Задача 14. Змій Горинич
застудився. Для його одужання
потрібно не менше
10 та не більше 15
кг вітаміну С або
більше 20 літрів
гарячого чаю. Змій з’їв х яблук (по
0,05 г вітаміну
С в
кожному) та випив у
склянок чаю (по 200
г кожна).
Визначити, чи одужає Змій
Горинич. Якщо ж ні, то
скільки літрів чаю
йому не вистачило
для цього?
Задача 15. На
одному маленькому квадратному
безлюдному острові зі
стороною а
м мешкали k
потерпілих корабельну аварію
Робінзонів. Чи не порушені
їхні права на
житло, якщо на кожного
Робінзона повинно припадати S м2?
Скільком Робінзонам ще
вистачить місця на
острові, якщо поблизу трапиться
нова аварія?
Задача 16. Велосипедист Микола, стартувавши у
точці (х0 ; у0) та
рухаючись по прямій
А(х-х0)
+ В(у-у0) + С = 0, мріє про те, як
він покатає на
своєму велосипеді сусідку
Катрусю. Чи здійсниться мрія
Миколи, якщо недалеко, у точці (p; q), росте дерево?
Задача 17. На
дверях ліфта висіло
загрозливе попередження про
те, що двері зачиняються
самі в той
самий момент, коли зайвий
за вагою пасажир
переступить його поріг. Який
за порядком пасажир
постраждає, якщо ліфт витримує
вагу не більше
S кг, а вага
пасажирів, що стоять у
черзі до ліфта, дорівнює відповідно
а1,
а2, ..., аn ?
Задача 18. Коли Василині
Премудрій виповнилося 18
років, Чахлик Невмирущий вирішив
взяти її заміж, Василиса запитала
Чохлика, скільки у нього
скринь із золотом. Чахлик сказав, що
в нього зараз n скринь
і кожний рік
додається ще по m скринь. Василиса пообіцяла, що
вийде заміж тоді, коли
у Чохлика буде k повних
скринь із золотом. Скільки років
буде у цей
час нареченій?
Задача 19. Компанія бабусь
поїхала на мотоциклах
на курси з
комп’ютерної грамотності.
Попереду на мотоциклі
без глушника їхала
одна бабуся, за нею – дві, потім – три і т.д.
Скільки бабусь їхало
на заняття, якщо приголомшені
пішоходи всього нарахували
N рядів? Чи змогли
бабусі зайняти всі
місця у класі, якщо
там стояло k рядів по m
комп’ютерів у кожному. Скільки вільних
місць залишилось?
Задача 20. Тато, мама і
старша сестра вечеряють, а
молодший брат Василько
сидить під столом
і пиляє ніжку
стола з початковою
швидкістю 2 см
на хвилину. Через скільки
хвилин закінчиться вечеря, якщо
товщина ніжки стола N см, а
швидкість пиляння Василька
з кожною хвилиною
падає на 0,1 см ?
РОЗРОБКИ ПЕРШИХ ЗАНЯТЬ
ДЛЯ СЕКЦІЇ “ЮНИХ
ПРОГРАМІСТІВ”
Заняття 1.
Тема
заняття: Вступ.
Що таке
програмування?
Мета: Дати учням
поняття про програмування, розповісти про
мови програмування.
Хід
заняття
1.
Пояснення
вчителя у формі
розповіді
Програмування можна
порівняти з великою
країною, повною сюрпризів, чудес,
цікавих знахідок і
навіть... неприємностей! Починаючий
користувач або досвідчений
“геймер” – переможець віртуальних чудовищ не
завжди знає, що, оволодівши навіть
основами програмування, він може
заставити комп’ютер малювати
картинки, які не дуже
поступаються по красоті
шедеврам ігрової комп’ютерної
графіки, або виконувати мелодію, підмигуючи при
цьому світловими індикаторами
своєї клавіатури. Ну а
хіба не гарна
перспектива – розв’язання
складної програмістської задачі, розв’язання якої
зміг знайти тільки
ти і ніхто
інший, і ось уже
твою програму “зкачують”
через Інтернет сотні
і тисячі користувачів, передаючи один
одному ім.’я її
створювача! Ну а неприємності? Є і
неприємності. В історію програмування
ввійшла помилка програміста, який створив
управляючу програму для
американського міжпланетного зонда
і “набивного” замість
коми крапку. Кома загубила
хвостик, а міжпланетний зонд
“промахнувся” мимо Венери
на кілька мільйонів
кілометрів. А якщо щось
подібне відбудеться у
програмі, яка управляє,
наприклад, польотом бойової ракети?
Ви вже
знаєте, що програми пишуть
для комп’ютера. Слово “комп’ютер”
в перекладі на
українську мову означає
“обчислювач”. Обчислювальних
пристроїв багато, серед них
різні калькулятори, а також
більш старі, механічні обчислювачі – арифмометри (продемонструвати арифмометр), логарифмічні лінійки, рахівниця (продемонструвати).
Головна відмінність
комп’ютера від всіх
цих пристроїв полягає
в тому, що він
є багатоцільовим обчислювальним пристроєм, тобто пристроєм, який може
розв’язувати самі різні
задачі. Кількість цих задач
дуже велика, неможна зарані
передбачити всі можливі
ситуації, тому треба придумати
спосіб “пояснити” комп’ютеру, яку задачу
і яким чином
слід розв’язувати в
даному випадку. Складання таких
інструкцій-програм і називають
програмуванням.
1.Далі розповісти
учням про історію
створення перших комп’ютерів.
2.Назвати мови
програмування, виділивши
серед них найбільш
популярні.
3.Як пишуть
програми (це повідомлення є у стінгазеті
“Файл”, тому запропонувати учням
прочитати його).
4.Дати учням
поняття алгоритму, нагадати,
що з
таким поняттям вони
зустрічаються дуже і
дуже часто. Навести приклади.
ОСНОВНІ
ПОНЯТТЯ ПРОГРАМУВАННЯ
Досвідчений програміст
знає, а новачку корисно
взнати, що головними елементами
любої програми є змінні, константи (постійні величини)
і оператори.
Змінна – це ячейка
оперативної пам’яті комп’ютера. Такій ячейці
присвоюється певне ім.’я, її
вміст може змінюватися
в ході виконання
програми. Вид інформації,
який міститься в
ячейці, набір перетворень, які можна
виконати над цією
інформацією, і множина допустимих
значень визначаються типом змінної. Константа відрізняється
від змінної тим, що
її значення не змінюється
в ході виконання
програми.
Оператори описують
ті дії, які повинна
виконувати програма. І, нарешті,
у програмах використовуються описання, які
дозволяють перерахувати і
описати властивості змінних, констант і
інших об’єктів, які зустрічаються
в даній програмі.
На закінчення
заняття запропонувати учням
відкрити на комп’ютері
любу гру і
спробувати виграти.
Заняття 2.
Тема заняття: Де пишуться
програми і як
вони пишуться?
Мета: Дати учням
поняття про вікно
редактора Турбо Паскаль. З’ясувати призначення
меню і клавіш.Записати найпростішу
програму і запустити
її на виконання.
Хід заняття
1.Інтегроване середовище. Розповідь учителя.
Для набору
тексту програми на
мові Паскаль (такий текст
часто називають вихідним
текстом програми)
використовується вбудований редактор
текстів інтегрованого середовища
Турбо Паска ля. Інтегроване середовище – це той “ящик з
інструментами”, без якого не
обійтись, тому нам треба
познайомитись з деякими
його можливостями.
Інтегроване середовище
запускається командою turbo. При успішному
виконанні цієї команди
на екрані з’являється
зображення, яке складається з
рядка меню (верхній рядок), робочої області
редактора, що займає більшу
частину поверхні екрану, і
рядка з перерахуванням основних
функціональних клавіш (це клавіші
F1, F2, …), які доступні в
любий момент і
пов’язані з виконанням
різних дій. Його називають
ще рядком статусу (продемонструвати це
на комп’ютері).
Для входу
в головне меню
можна натиснути функціональну
клавішу F10 або
використати ліву кнопку
мишки. Це меню має
слідуючи пункти: File, Edit,
Search, Compile, Run, Debug, Tools, Options, Window, Help. За кожним
з перерахованих пунктів
криється вертикальне підменю, яке
можна розкрити, клацнувши на
потрібному пункті меню
лівою кнопкою миші
або натиснути клавішу
вводу ( Enter), коли пункт
меню підсвічений. Перехід від
пункту до пункту
здійснюється за допомогою
клавіш управління курсором, або
за допомогою миші. (демонстрація на
комп’ютері). Для виходу з
головного меню або
любого підменю треба
натиснути клавішу Esc.
РОЗГЛЯНЕМО ПРИЗНАЧЕННЯ
ДЕЯКИХ ПУНКТІВ ГОЛОВНОГО
МЕНЮ.
Пункт File. Меню File
має команди, які управляють
роботою з файлами.
-New – створює в
редакторі нове вікно, в
яке можна завантажити
існуючий файл або
створити в цьому
вікні новий файл;
-Open – відкриває діалогове
вікно, яке дозволяє завантажити
файл з диска
і перейти в
режим екранного редагування. Цю саму
дію можна виконати
клавішею F3;
-Save –
зберігає на
диску біжучий редагований
файл і продовжує
редагування. Цю саму дію
можна виконати клавішею
F2;
-Save as – відкриває діалогове
вікно, яке дозволяє зберегти
біжучий файл під
новим ім.’ям;
-Print – відкриває діалогове
вікно, яке дозволяє задати
характеристики друку і
відправити файл на
принтер;
-Exit – вихід із
Турбо-середовища.
Сама
перша програма
Програма на
Паскалі оформляється завжди
стандартно і має
слідуючий вигляд:
Program <ім’я програми>;
<розділ описань>
begin
<розділ операторів>
end.
Перший рядок
програми є її
заголовком. Він повідомляє,
що це
за програма, для розв’язання
якої задачі вона
призначена. Для цього після
зарезервованого слова program
пишеться назва програми.
У програмуванні
прийнято надавати програмам
імена, які відображають їх
призначення. Закінчується
заголовок програми символом
“крапка з
комою”.
При написанні
текста програми слід
дотримуватись кількох простих
правил:
1)дозволяється використовувати лише
символи алфавіту мови
програмування;
2)вся програма
може бути записана
в один рядок, але
краще розміщувати кожне
нове висловлювання з
нового рядка
Між begin і end розміщуються оператори, які розділяються
символом “;”. Ця частина
програми називається розділом
операторів. Їх може і
не бути, в такому
випадку програма не
буде нічого виконувати.
Самий простий
і одночасно самий
важливий оператор – оператор виводу, адже
програма повинна повідомляти
користувачу про результати
своєї роботи, тобто вивести
результат на екран
монітора.
Хай наша
програма при виконанні
просто повідомить про
себе. Виглядати вона буде
слідуючим чином:
Program privet;
begin
Write(‘Привіт , це я!’);
end.
Тут Write – оператор, який виводить
на екран все, що
поміщено в круглих
дужках між апострофами. Існує друга
різновидність цього оператора – Writeln, він діє
так само, але після
виводу інформації курсор (мигаюча риска) переходить на
новий рядок. Програма
Program privet;
begin
Write(‘Привіт,
‘);
Write(‘ це я! ‘);
end.
виводить текст
в один рядок, а
Program privet;
begin
Writeln(‘ Привіт, ‘);
Writeln(‘ це я! ‘);
end.
у два:
Привіт,
це я!
У програмі
може бути скільки
завгодно операторів, треба лише
не забувати в
кінці кожного ставити
символ “;”. Символ “;”
у програмах на
Паскалі грає ту
саму роль, що крапка
на письмі.
Після того
як програма набрана
її треба відправити
на компіляцію. Спочатку компілятор
перевірить, чи немає програма
синтаксичних помилок.
Знайшовши помилку, компілятор зупиняє
свою роботу, встановлює курсор
у те місце
програми, де знайдена помилка, і
виводить відповідне повідомлення. Після того
як всі синтаксичні
помилки виправлено програма
відправляється на виконання. Це
здійснюється за допомогою
команди Run.
Пояснити учням
незрозумілі слова (Compile, Run, Ster over, Trace into, Go to cursor, Program reset).
Далі учні
набирають текст вище
написаних програм і
реалізують їх.
В кінці
заняття запропонувати учням
відкрити будь-яку гру
і спробувати виграти.
Заняття
3
Тема
заняття: Арифметика
Паска ля.
Мета: Засвоїти запис
виразів на мові
програмування Паскаль.
Завдання: Перетворення записів
математичних виразів з
алгебраїчної мови на
мову Паскаль.
Хід заняття
Повідомити учням
про запис арифметичних
операцій на мові
Паскаль.
Для цього
за допомогою графопроектора спроектувати
таблицю:
Далі йде
виконання тренувальних вправ
спрямованих на вироблення
навичок запису математичних
виразів мовою Паскаль.
Виконання тренувальних
вправ:
Записати на
мові Паскаль слідуючи
математичні вирази:
Немає коментарів:
Дописати коментар