русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Що таке ідентифікатор? За якими правилами утворюються ідентифікатори? Наведіть приклади.


Дата додавання: 2014-11-28; переглядів: 6736.


 

1 Миловская О.С. Дизайн архитектуры и интерьера в 3ds Max – Спб.: БХВ – Петербург, 2007. - 320 с.: ил. + Видеокурс (на CD- ROM).

2 3DS Max 7 и 8. Волшебный мир трехмерной графики (+ 2 CD-ROM): М. М. Соловьев — Санкт-Петербург, Солон-Пресс, 2006 г.- 528 с.

3 Внутренний мир 3ds Max 9: Шон Бонни, Стив Анзовин — Москва, Вильямс, 2007 г.- 1072 с.

4 Autodesk 3ds Max 2008. Самоучитель с электронным справочником (+ CD-ROM): М. В. Бурлаков — Москва, Диалектика, Вильямс, 2008 г.- 512 с.

Таблиця 1. Алфавіт мови програмування Паскаль

Літери латинського алфавіту A –Z, a – z
Арабські цифри 0, 1, 2, …, 9
Спеціальні символи < > [ ] . , ( ) : ; ^ @ { } $ # '  
Знаки операцій – (віднімання), + (додавання), * (множення), / (ділення), := (присвоювання)
Знаки відношень < (менше), <= (не менше), > (більше), >= (не більше), = (дорівнює), <> (не дорівнює), in (є елементом множини)

 


 

Таблиця 1. Алфавіт мови програмування Паскаль

Розділові знаки . (для відокремлення цілої частини числа від дробової), , (для відокремлення елементів списків), ; (для відокремлення операторів), (* *) або { } (для запису коментарів), ' ' (лапки для запису символьних констант), ( ) (відкриваюча та закриваюча дужки), .. (задання діапазону), [ ] (для звернення до елементів масиву) : (для відокремлення міток) $ (шістнадцятковий код), ^ (для задання посилального типу) @ (для вказання адреси певної величини) #(для отримання символу за його кодом)

Слова

Слово – це послідовність літер алфавіту, яка у даній мові має певне значення. ТР має велику кількість зарезервованих (службових) слів, які несуть певне смислове навантаження при написанні програми.

Службове слово – це послідовність літер, яка трактується транслятором як одне ціле, і завжди в одному розумінні.

Приклади. Begin, End, if, then, else, Array, for, to, do, of, Array, Set, Record, File.

Об’єкти програми на ТР (типи, змінні, константи, процедури, функції, модулі, мітки) мають імена, або ідентифікатори.

Правила утворення ідентифікаторів

1. Ідентифікатор – послідовність латинських літер та цифр (можна використовувати знак підкреслювання).

2. Обов'язково починається з літери.

3. Не може бути службовим словом.

4. Значимими є перші 64 символи ідентифікатора.

5. Бажано, щоб ідентифікатор відображав зміст величини.

Приклади. Max3, a, ALPHA, M34, Zavd1_3.

Зауваження. В ідентифікаторах мови ТР великі і малі літери не розрізняються.

Програма на ТР оперує з даними (величинами), над якими виконуються певні дії для отримання кінцевого результату. В програмі кожний елемент даних (величина) є або константою, або змінною. Основними характеристиками величини є її ім'я (ідентифікатор), значення і тип.

Поняття типу даних є одним з фундаментальних понять будь–якої мови програмування. Об'єкти, якими оперує програма (константи, змінні, функції, вирази) відносяться до певного типу. Типмножина значень, яких можуть набувати об'єкти програми, і сукупність операцій над цими значеннями.

ТР є мовою з сильною системою типізації. Це означає, що всі дані, які опрацьовує програма, повинні належати до якогось заздалегідь відомого типу. У мові ТР визначено багато стандартних типів даних, і передбачена можливість оголошення нових типів, які відповідають конкретній задачі.

Приклади. Integer (цілі числа), Real (дійсні числа), Char (одиничні символи), Boolean (логічні значення – TRUE (істина), FALSE (хибність)).

Константа – елемент даних, значення якого відоме до виконання програми і в процесі її виконання не змінюється. Для визначення констант у ТР використовується службове слово Const (від англ. Constant – константа).

Змінна – елемент даних, який може змінювати своє значення в процесі виконання програми. Для визначення змінних у ТР використовується службове слово Var (від англ. Variable – змінна).

Ідентифікатори і типи змінних, які будуть використовуватись у програмі, вказуються у розділі визначення змінних:

Var

ідентифікатор: тип;

або

Var

список ідентифікаторів: тип;

Приклад.

Var a: Integer; Var a,b,c:Integer;

Var a,b: Integer; c,d: Real;

Значення змінним надаються в основному блоці програми.

Ідентифікатори констант і їх значення вказуються у розділі опису констант:

Const

ідентифікатор=вираз;

приклад.

Const

Max=1000;

Min=0;

Interval=Max-Min+1;

Ok=TRUE;

SpecChar=’\’;

Типи констант автоматично визначаються компілятором і тому явно не вказуються.

Вирази

Вираз – це записане у вигляді тексту правило, що задає обчислення одного значення певного типу.

Якщо в результаті реалізації виразу дістають число, вираз називається арифметичним, якщо текст – текстовим (літерним), якщо логічне значення “істина” або “хибність” – логічним (булевим).

Оператори

Оператор – це вказівка для виконання певної дії чи скінченної послідовності дій.

Розрізняють прості і складені оператори. Прості оператори програми на ТР розділяються крапкою з комою. Складений оператор – це послідовність простих операторів, взятих в операторні дужки – службові слова Begin (початок) і End (кінець). Перед словом End крапку з комою ставити не обов’язково.

 

 

Паскаль-програма

Програма на ТР складається з двох основних розділів:

- розділ (блок) описів;

- розділ операторів (виконуваний блок), якій обмежується операторними дужками – Begin і End. Після слова End, яке завершує програму, ставиться крапка.

Найкоротша програма на ТР має вигляд:

Begin

End.

Повний варіант програми на ТР:

program ім’я_програми;

uses

список використовуваних бібліотек (модулів);

label

список міток;

Const

визначення констант програми;

Type

визначення типів;

Var

визначення глобальних змінних програми;

Begin

основний блок програми;

End.

 

Крім конструкцій мови, програма може містити коментарі.

Коментар – це довільний текст у будь-якому місці програми (де дозволений пропуск), взятий у дужки { } або (* *).

Коментарі містять пояснювальні тексти і полегшують читання і розуміння програм.

Турбо Паскаль дозволяє програмі (тексту) управляти режимом компіляції: включати або відключати контроль помилок, використовувати або емулювати математичний сопроцесор, змінювати розподіл пам’яті і ін. Для зміни режиму використовуються ключі (директиви) компіляції: спеціальні коментари, які містять символ "$" і літеру–ключ, за якою ставиться "+" (включити режим) або "–" (відключити). Можна об’єднувати кдючі в один коментар.

Приклад. {$R–} – відключити перевірку діапазонів індексів масивів;

{$N+} – використовувати сопроцесор 80Х87 і т.д.

{$N+,R–}

Відкриваючі дужки, символ "$" і ключ повинні бути написані без пропусків між ними.

Такі конструкції можна вставляти в програму, і при компіляції вона сама буде задавати режим роботи компілятора. Ключі поділяються на глобальні (раз встановлений режим вже не може бути змінений) та локальні (можна змінювати режими для різних частин програми). Глобальні ключі повинні стояти на початку програми, а локальні – де потрібно програмісту.

Деякі ключі задають не режим, а компонування програми із зовнішніх складових частин.

Наприклад, ключ {$I Ім’яФайлуВключення} називається командою включення в програму зовнішнього текстового файла. Тут замість знаків "+" або "–" стоїть пропуск і ім’я файла. Ця команда вказує компілятору вважати заданий зовнішній файл частиною програми. Це дещо уповільнює процес компіляції, але може зекономити багато місця в програмі, так як вона перетворюється в "ланцюжок" різних файлів на диску.

Приклад. {$I incproc.pas}

Тексти, що включаються, самі можуть містити команди включення. Максимальний рівень вкладеності при цьому дорівнює восьми.

Питання для самоконтролю.

1. Які символи входять до алфавіту мови ТР?

2. Що називається службовим словом? Наведіть приклади.

3. Для чого потрібні ідентифікатори? Назвіть правила утворення ідентифікаторів.

4. Які основні характеристики мають величини, якими оперує програма?

5. Що таке тип даних?

6. Що називається константою? Як визначаються константи у програмі на ТР?

7. Що називається змінною? Як визначаються змінні у програмі на ТР?

8. Що таке вираз? Наведіть приклади виразів.

9. Що таке оператор?

10. Що таке простий і складений оператори? Що таке операторні дужки?

11. Яку структуру має Паскаль-програма?

12. Що таке коментар? Для чого призначені коментарі? Як вони записуються?


Основні оператори мови Паскаль. Оператор присвоювання

Оператор присвоювання призначений для надання значень змінним.

Формат оператора:

ім’я_змінної := вираз;

Тип змінної повинен співпадати з типом виразу. Винятком є випадок, коли змінній дійсного типу присвоюється значення цілочисельного виразу.

Приклад.

Var A,B: Real; C, D: Integer; E: Char;

Begin

A:=3.5; B:=-10; C:=4; D:=0; E:=’*’; {правильні присвоювання}

A:=(B-3*C)/(D+54); D:=(C+15)*3; {правильні присвоювання}

C:=A; D:=C/10; E:=B; {неправильні присвоювання}

 

Оператори введення і виведення

Крім оператора присвоювання, змінним надаються значення за допомогою операторів введення.

Формат операторів:

Read(список введення);

Readln(список введення);

Список введення = ім’я_змінної1[, ім’я_змінної2, …, ім’я_змінноїN]

В квадратних дужках вказуються необов’язкові параметри.

Виконання оператора:

Елементи списку введення вводяться з клавіатури через пропуск або Enter. При використанні оператора Read після введення останнього елемента списку позиція введення (курсор) залишається в тому ж рядку. При використанні Readln позиція введення поміщується на початок наступного рядка.

Список введення може бути відсутнім. В цьому випадку програма зупиняє свою роботу до введення з клавіатури будь–якої інформації. Ця властивість використовується для затримки на екрані результатів роботи програми.

Приклад. Read(A,B,C); Readln(m,n); Readln;

Для виведення результатів роботи програми на екран монітора використовуються оператори виведення.

Формат операторів:

Write(список виведення);

Writeln(список виведення);

Список виведення = вираз1[, вираз2, виразN]

Елементом списку виведення може бути вираз цілого, дійсного, символьного, рядкового, логічного типу, або типів, утворених з них. Якщо список виведення відсутній (Writeln;), на екран виводиться порожній рядок.

Різниця між операторами Write і Writeln аналогічна різниці між Read і Readln.

Розглянемо особливості дії операторів Write і Writeln при різних форматах елементів списку виведення (таблиця 2)

Таблиця 2. Виведення даних операторами Write і Writeln

Тип виразу Формат Дія оператора виведення
INTEGER(I) (цілочисель-ний) I виводиться десяткове подання значення I
INTEGER(I) (цілочисель-ний) I:N виводиться десяткове подання значення I і вирівнюється за правою межею поля шириною N символів
REAL (R) (дійсний) R виводиться десяткове подання значення R, вирівнюється за правою межею поля шириною 18 символів у форматі з плаваючою крапкою
R:N виводиться десяткове подання значення R, вирівнюється за правою межею поля шириною N символів у форматі з плаваючою крапкою
R:N:M виводиться десяткове подання значення R, вирівнюється за правою межею поля шириною N символів у форматі з фіксованою крапкою з M цифрами після десяткової крапки
CHAR (CH) (символьний) CH виводиться символ CH
CH:N символ CH виводиться з правого боку поля шириною N символів (символу CH передує N–1 пропусків)
STRING (S) (рядковий) S виводиться рядок S
S:N рядок S виводиться вирівняним за правою межею (йому передує N – LENGTH(S) пропусків)
BOOLEAN(L) (логічний) L в залежності від значення виводиться TRUE або FALSE
L:N в залежності від значення виводиться TRUE або FALSE, вирівняне за правою межею поля N символів

Питання для самоконтролю.

1. Для чого призначений оператор присвоювання? Вкажіть його формат і наведіть приклади використання.

2. Для чого призначений оператор введення? Які існують його модифікації? Як вони виконуються?

3. Для чого призначений оператор виведення? Які існують його модифікації? Як вони виконуються?

 

Стандартні типи даних та операції над ними

Стандартні типи даних описані в стандартній бібліотеці ТР, яка автоматично підключається до кожної програми. Тому такі типи не потребують опису в розділі визначення типів Паскаль-програми. Всі допустимі в мові ТР типи поділяються на прості (скалярні, неструктуровані) і складені (структуровані).

Таблиця 3. Стандартні скалярні типи

Тип Позначення Приклади
Цілі числа Integer 5 –3 0 +123
Цілі довжиною 1 байт Byte 2 67 125
Короткі цілі ShortInt –127 25 100
Довгі цілі LongInt 200000 340005
Цілі довжиною 1 слово Word 65534 345
Дійсні числа Real 23.56 12Е2 –3Е–13
Дійсні одинарної точності Single 1.45 –2Е+33
Дійсні подвійної точності Double 0.00005 34565.565
Зовнішні або розширені Extended  
Логічний (булевський) тип Boolean TRUE FALSE
Символьний (літерний) тип Char 'd' 'v' '$' '5' 'ф'
Посилальний тип Pointer  

Таблиця 4. Структуровані типи

Рядковий тип String 'Computer' '12345'
Масиви Array  
Записи Record  
Множини Set [2,3,5,7,11] ['s', 'r', 'd']
Файли File, File of  
Списки    
Черги    
Стеки    

Числа у ТР подаються:

1. В десятковій системі числення (діапазон для цілих –32768..32767, для дійсних

1Е–38..1Е+38).

2. В шістнадцятковій системі числення (діапазон $0000..$FFFF).


 

Таблиця 5. Подання цілих чисел

Тип цілих Діапазон Формат
Byte (коротке довжиною 1 байт) 0..255 1 байт без знаку
ShortInt (коротке ціле) –128..128 1 байт зі знаком
Word (ціле довжиною 1 слово) 0..65535 2 байти без знаку
LongInt (довге ціле) –2147483648.. 4 байти зі знаком
Integer (ціле) –32768..32767 2 байти зі знаком

 

Таблиця 6. Подання дійсних чисел

Тип дійсних Діапазон Кількість значущих цифр, формат
Real (дійсне) 2.9Е–39..1.7Е+38 11–12, 6 байтів
Single (одинарна точність) 1.5Е–45..3.4Е+38 7–8, 4 байти
Double (подвійна точність) 5Е–324..1.7Е308 15–16, 8 байтів
Extended (зовнішні або розширені) 3.4Е–4932..1.1Е4932 19–20, 10 байтів

 

Змінні і константи всіх типів використовуються у виразах. Вираз задає порядок виконання дій над величинами і складається з операндів (констант, змінних, звернень до функцій), круглих дужок і знаків операцій. Операції визначають дії, які треба виконати над операндами. Наприклад, у виразі (X+Y–10) X, Y і 10 – операнди, "+" і "–" – знаки операцій додавання і віднімання. У найпростішому випадку вираз може складатися з одної змінної або константи. Круглі дужки ставляться так, як у звичайних арифметичних виразах для управління порядком виконання операцій. Використання круглих дужок навіть там, де в них немає необхідності з точки зору синтаксису, є прийнятним, якщо вони роблять порядок обчислень візуально більш чітким і зрозумілим.

 

Таблиця 7. Операції для величин цілого типу

Назва Призначення Приклади
NOT інверсія числа NOT 0 = +1; NOT –15 = 14
SHL циклічний зсув вліво 3 SHL 2 = 12; 2 SHL 7 = 256
SHR циклічний зсув вправо 3 SHR 2 = 0; 257 SHR 7 = 2
* множення 4 * 2 = 8; 134 * 12 = 1608
DIV ділення націло 5 DIV 2 = 2; 2 DIV 3 = 0
/ ділення (результат – не ціле!) 10 / 2 = 5; 997 / 4 = 249.25
MOD знаходження остачі від ділення 13 MOD 5 = 3; –13 MOD 5=–3

 


Таблиця 7. Операції для величин цілого типу

Назва Призначення Приклади
AND логічне множення 5 AND 2 = 0; 15 AND 7 = 7
XOR виключаюче "АБО" 5 XOR 2 = 7; 15 XOR 7 = 8
+ додавання 5 +2 = 7; –3+2 = –1
віднімання 11 – 7 = 4; –4 – 9 = –13
OR логічне додавання 5 OR 2 = 7; 15 OR 7 = 15
=; <>; <; >; <=; >= операції відношення 3 > 4 ® FALSE; 5 <= 8 ® TRUE

 

Таблиця 8. Функції для величин цілого типу

Назва Призначення Приклади
ABS(i) Знаходження абсолютного значення величини ABS(–48) = 48; ABS(48) = 48
SQR(r) Піднесення до квадрату SQR(4) = 16; SQR(11) = 121
TRUNC(r) Знаходження цілої частини числа TRUNC(8.53) = 8; TRUNC(–9.2) = –9
ROUND(r) Знаходження найближчого цілого (з округленням) ROUND(8.53) = 9; ROUND(8.3) = 8; ROUND((–8.53) = –9
PRED(i) Знаходження попереднього значення PRED(6) = 5; PRED(–6) = –7
SUCC(i) Знаходження наступного значення SUCC(6) = 7; SUCC(–6) = –7
ODD(i) Перевірка на непарність ODD(11) = TRUE; ODD(20) = FALSE

 

Таблиця 9. Операції для величин дійсного типу

Назва Призначення Приклади
* множення 1.3 * 2.4 = 3.12
/ ділення (результат – не ціле!) 1.3 / 2.4 = 0.5416
+ додавання 1.3 + 2.4 = 3.7
віднімання 1.3 – 2.4 = –1.1
=; <>; <; >; <=; >= операції відношення 1.3 > 2.4 ® FALSE

 


 

Таблиця 10. Функції для величин дійсного типу

Назва Призначення Приклади
ABS(r) Знаходження абсолютного значення величини ABS(–48) = 48; ABS(48) = 48
SQR(r) Піднесення до квадрату SQR(4) = 16; SQR(11) = 121
SQRT(r) Знаходження квадратного кореня (r³0) SQRT(2.48)=6.1504; SQRT(4)=2.0
TRUNC(r) Знаходження цілої частини числа TRUNC(8.53) = 8; TRUNC(–9.2) = –9
ROUND(r) Знаходження найближчого цілого (з округленням) ROUND(8.53) = 9; ROUND(8.3) = 8; ROUND((–8.53) = –9
FRAC(r) Знаходження дробової частини FRAC(2.4)=0.4; FRAC(–2.4)=–0.4
SIN(r) Знаходження значення синуса SIN(2.48)=0.61437
COS(r) Знаходження значення косинуса COS(2.48)=–0.789
ARCTAN(r) Знаходження значення арктангенса ARCTAN(2.48)=1.1857
LN(r) Знаходження значення значення натурального логарифма (r>0) LN(2.48)=0.090825
EXP(r) Знаходження значення експоненціальної функції EXP(2.48)=11.9412
INT(r) Знаходження найближчого цілого числа (без округлення) INT(2.98)=2.0; INT(–1.3)=–1.0

 

Таблиця 11. Операції для величин логічного типу

Назва Призначення Приклади
NOT заперечення NOT TRUE = FALSE; NOT FALSE = TRUE
AND кон’юнкція (логічне множення) TRUE AND FALSE = FALSE; TRUE AND TRUE = TRUE
OR диз’юнкція (логічне додавання) FALSE OR FALSE = FALSE; TRUE OR FALSE = TRUE

 


Таблиця 11. Операції для величин логічного типу

Назва Призначення Приклади
XOR виключаюче "або" TRUE XOR TRUE = FALSE; TRUE XOR FALSE = TRUE
=; <>; <; >; <=; >= операції відношення FALSE<TRUE –> TRUE

 

Таблиця 12. Функції для величин логічного типу

Назва Призначення Приклади
PRED(L) знаходження попереднього значення для L PRED(TRUE) = FALSE; PRED(FALSE) = TRUE
SUCC(L) знаходження значення, наступного за L SUCC(TRUE) = FALSE; SUCC(FALSE) = TRUE
ORD(L) знаходження порядкового номера значення L ORD(FALSE)=0; ORD(TRUE)=1

 

Таблиця 13. Операції для величин символьного типу

Назва Призначення Приклади
=; <>; <; >; <=; >= операції відношення 'A' < 'B' –> TRUE

 

Таблиця 14. Функції для величин символьного типу

Назва Призначення Приклади
ORD(c) порядковий номер символа c в заданому символьному наборі ORD('A') = 65; ORD(#4) = 4
CHR(i) символ, що відповідає числу i згідно з кодами ASCII CHR(65)='A'
PRED(c) символ, що передує символу c PRED('B') = 'A'
SUCC(c) символ, що є наступним за символом c SUCC('A')='B'
UPCASE(c) символ верхнього регістру, відповідний ‘a’..’z’ UPCASE(‘a’)=’A’

 

Питання для самоконтролю.

1. Які типи даних називаються стандартними?

2. Які типи даних мови ТР призначені для подання цілих чисел?

3. Які операції і функції ТР застосовні до цілих чисел?

4. Які типи даних мови ТР призначені для подання дійсних чисел?

5. Які операції і функції ТР застосовні до дійсних чисел?

6. Які операції і функції ТР застосовні до даних символьного типу?

7. Які операції і функції ТР застосовні до даних логічного типу?


 

Класифікація типів даних. Типи даних, що визначаються програмістом

 

Всі типи даних, що використовуються у ТР, поділяються на прості і складені.

Простий тип даних визначає тип одного окремого значення.

Складений тип даних визначає структуру з простих типів.

До простих типів даних відносять цілочисельні, дійсні типи, логічний, символьний, перелічувальний тип та діапазон.

До складених типів відносяться масив, запис, множина, файл, посилання, об’єкт.

Прості типи даних, в свою чергу, поділяються на дискретні та неперервні.

Дискретний тип даних – такий тип даних, кількість можливих значень якого обмежена (скінченна). Наприклад, тип Byte має 256 значень.

Неперервний тип даних – тип даних, кількість можливих значень якого нескінченна.

Неперервними у Турбо Паскалі є лише дійсні типи. Решта простих типів є дискретними.

Як уже зазначалося, у ТР передбачена можливість створювати нові типи даних на основі існуючих. Нові типи описуються в розділі визначення типів програми:

Type ім’я_типу = опис типу;

Ім’я_типу – ідентифікатор, опис типу надається у відповідності з синтаксисом мови.

До простих типів, що визначаються програмістом, відносяться перелічувальний тип та діапазон.

Перелічувальний тип даних – простий дискретний тип, який визначає скінченний набір констант. Змінні цього типу можуть набувати значення лише з визначеного набору.

Формат опису перелічувального типу:

Type ім’я_типу = (константа1[, константа2, …константаN]);

Імена констант є ідентифікаторами.

Приклад.

Type Rainbow = (Red, Orange, Yellow, Green, LightBlue, Blue, Magenta);

Var A: Rainbow;

Begin

A:= Orange;

End.

Будь–який перелічувальний тип має внутрішню нумерацію, перший елемент має номер 0, другий – 1 і т.д. Отже, вважається, що кожна константа більша за попередню і менша наступної.

До змінних перелічувального типу можна застосовувати операції порівняння =; <>; <; >; <=; >=, функції PRED, SUCC, ORD.

Приклади. PRED(Green) = Yellow; SUCC(Blue) = Magenta; ORD(Orange)=1; ORD(Red)=0;

Існує можливість перетворити ціле число у константу перелічувального типу. Для цього використовується функція, ім’я якої співпадає з назвою перелічувального типу.

Приклад. A := Rainbow(3); {A=Green}

До даних перелічувального типу не застосовні стандартні операції введення–виведення.

Діапазон – простий дискретний тип, який визначає підмножину значень певного базового типу. Базовим може бути будь–який простий дискретний тип, в тому числі і перелічувальний, введений програмістом.

Формат опису типу діапазон:

Type ім’я_типу = мінімальне_значення .. максимальне_значення;

Приклад.

Type Century20=1901..2000; {для цього типу базовим є тип Integer}

HotColors=Red..Yellow; {для цього типу базовим є тип Rainbow}

Var C: HotColors;

C:=Red; {правильне присвоювання}

C:= Green; {помилка}

До даних типу діапазон застосовні всі дії, які застосовні до даних базового типу.

Питання для самоконтролю.

1. Наведіть загальну класифікацію типів даних мови ТР.

2. Які характеристики мають прості типи даних?

3. Чим розрізняються дискретні і неперервні типи даних?

4. Які характеристики мають складені типи даних?

5. Що таке перелічувальний тип даних? Як він описується в програмі на ТР?

6. Які операції і функції застосовні до даних перелічувального типу? Наведіть приклади.

7. Що таке тип даних діапазон? Як він описується в програмі на ТР?

8. Які операції і функції застосовні до даних типу діапазон? Наведіть приклади.


Основні оператори мови Паскаль. Умовний оператор та оператор варіанту

При необхідності змінити порядок виконання операторів програми в залежності від виконання певних умов, тобто здійснити розгалуження процесу обчислень, використовують умовний оператор і оператор варіанту. При програмуванні розгалуження на дві гілки доцільно використовувати умовний оператор (його також називають оператором розгалуження), на більшу кількість гілок – оператор варіанту.

Умовний оператор застосовується в двох формах – повній і скороченій.

Формат скороченої форми оператора:

if логічний_вираз then оператор1;

if (якщо), then(то) – службові слова, оператор1 – довільний оператор мови ТР.

Виконання оператора: обчислюється значення логічного виразу. Якщо воно дорівнює TRUE, виконується оператор1, якщо FALSE – відбувається перехід до виконання наступного оператора програми. Оператор1 може бути як простим, так і складеним. В останньому випадку він береться в операторні дужки.

Формат повної форми оператора:

if логічний_вираз then оператор1 else оператор2;

Виконання оператора: обчислюється значення логічного виразу. Якщо воно дорівнює TRUE, виконується оператор1, якщо FALSE – виконується оператор2, після чого відбувається перехід до виконання наступного оператора програми. Оператор1 і оператор2 можуть бути як простими, так і складеними. Перед службовим словом else крапка з комою не ставиться.

Приклад. Розв’язування квадратного рівняння.

Var a,b,c,D,x1,x2:Real;

Begin

Writeln('Введіть коеф–ти рівняння a,b,c:');

Readln(a,b,c);

D:=b*b–4*a*c;

if D>=0 then

Begin

x1:=(–b–sqrt(D))/(2*a);

x2:=(–b+sqrt(D))/(2*a);

Writeln('x1=',x1:4:2,'x2=',x2:4:2)

End

else

Writeln('Дійсних коренів немає');

Readln;

End.

 

Оператор варіанту дозволяє виконувати ті чи інші дії в залежності від значення виразу дискретного типу.

Формат оператора:

case вираз­­_дискретного_типу of

список1: оператор1;

список2: оператор2;

списокN: операторN

[else

операторN+1]

End;

Сase(варіант), of(з) – службові слова, список1 – перелік значень виразу_дискретного_типу, розділених комами, оператор1 – довільний оператор мови ТР. Вираз дискретного типу називається також селектором.

Виконання оператора: обчислюється значення виразу, якщо воно входить до списку1, виконується оператор1 і відбувається перехід до виконання наступного оператора програми, якщо до списку2 – оператор2 і т.д. Якщо значення виразу не входить в жоден список, то при наявності частини else виконується операторN+1, а при її відсутності – виконання оператора варіанту завершується.

Приклад. Визначення природи введеного символу: цифра, голосна або приголосна літера.

Var c: Char;

Begin

Writeln('Введіть символ:');

Readln(c);

case c of

'0'..'9' : Writeln('Цифра');

'a','e','i','o','u','y' : Writeln('Голосна')'

'b'..'d','f'..'h','j'..'n','p'..'t','v'..'x','z' : Writeln('Приголосна')

else Writeln('Інший символ')

End;

End.

Питання для самоконтролю.

1. Які оператори мови ТР призначені для організації розгалужень?

2. Вкажіть формат повної та скороченої форм умовного оператора. Як виконується умовний оператор? Наведіть приклади.

3. Вкажіть формат оператора варіанту. Як виконується цей оператор? Наведіть приклади.


 

Основні оператори мови Паскаль. Циклічні оператори

Цикл у програмуванні – це повторюване виконання одних і тих самих простих або складених операторів. У Паскалі реалізовані три способи організації циклічних обчислень.

 

Оператор циклу з передумовою

Формат оператора:

while логічний_вираз do оператор;

while (поки), do (виконувати) – службові слова, оператор – довільний оператор мови ТР, який називається тілом циклу. Складений оператор береться в операторні дужки.

Виконання оператора: обчислюється значення логічного виразу, якщо воно дорівнює TRUE, виконується оператор і відбувається повернення до умови. Процес продовжується доти, поки значення логічного виразу не стане рівним FALSE. Після цього виконання циклу закінчується.

Якщо при першому обчисленні значення логічного виразу його значення дорівнює FALSE, тіло циклу не виконується жодного разу.

Зауваження. 1. Щоб цикл коли-небудь закінчив роботу, в його тілі повинен бути оператор, що впливає на значення логічного виразу. Краще, якщо цей оператор останній у тілі циклу.

2. Логічний вираз має бути коректним, тобто його значення повинно бути визначеним ще до першого виконання тіла циклу.

Приклад. Обчислити значення з точністю до 10-6.

Const eps=1E-6;

Var n: Integer; {сумування проводиться до тих пір,}

x,S: Real; {поки черговий доданок не стане менше}

Begin {заданої точності обчислень}

n:=1; S:=0; x:=1;

while abs(x) >= eps do

Begin

S:=S+x;

n:=n+1;

x:=1/sqr(n)

End;

Writeln(‘S=’, S)

End.

 

Оператор циклу з післяумовою

Формат оператора:

repeat оператор until логічний_вираз;

repeat (повторювати), until (до) - службові слова; оператор - довільний оператор мови ТР, в тому числі порожній. Складений оператор в операторні дужки не береться.

Виконання оператора: виконується тіло циклу, потім обчислюється значення логічного виразу. Якщо воно дорівнює FALSE, відбувається повернення до виконання тіла циклу, якщо TRUE – виконання циклу закінчується.

На відміну від циклу з передумовою, тіло циклу з післяумовою завжди виконується принаймні один раз. Це треба враховувати при виборі оператора для виконання циклічних обчислень.

Для циклу з післяумовою також справедливе зауваження 1.

Приклад. Фрагмент програми, в якому від користувача вимагається ввести ціле додатне число.

repeat

Write(‘Введіть додатне число: ’);

Readln(n)

until n>0;

Приклад. Перепишемо попередню програму підрахунку суми, використовуючи оператор циклу з післяумовою:

Const eps = 1E-6;

Var n: Integer;

x, S : Real;

Begin

n:=1; S:=0; x:=1;

repeat

S:=S+x;

n:=n+1;

x:=1/sqr(n)

until abs(x) < eps;

Writeln(‘S=’,S)

End.

 

Цей приклад показує, що оператор циклу з передумовою вигляду while B do S; може бути переписаний як оператор циклу з післяумовою repeat S until not B;

 

Оператор циклу з параметром

За умови, коли відома кількість повторень тіла циклу, зручно використовувати оператор циклу з параметром.

Формат оператора:

for параметр_циклу:= вираз1 to вираз2 do оператор;

for (для), to (до), do (виконувати) – службові слова, параметр_циклу (або лічильник циклу) - ім’я змінної дискретного типу, вираз1 і вираз2 – вирази, тип яких співпадає з типом параметра циклу. Оператор – довільний оператор мови ТР. Складений оператор береться в операторні дужки.

Виконання оператора: обчислюється значення виразу1, це значення присвоюється параметру циклу. Потім обчислюється значення виразу2. Якщо значення параметра не перевищує значення виразу2, виконується тіло циклу, до параметра застосовується функція SUCC, отримане значення знову порівнюється зі значенням виразу2 і т.д. Після того як значення параметра перевищить значення виразу2, виконання оператора циклу закінчується.

Кількість повторень тіла циклу =
значення_виразу2 - значення_виразу1 + 1

Якщо значення виразу1 більше значення виразу2, тіло циклу не виконується жодного разу.

Різниця між двома сусідніми значеннями параметра циклу називається кроком циклу.

Крок циклу з параметром завжди постійний і залежить від типу параметра.

Розглянутий формат оператора циклу використовується, коли параметр циклу зростає. Якщо параметр циклу спадає, використовується модифікований формат:

for параметр_циклу := вираз2 downto вираз1 do оператор;

На відміну від попереднього формату циклу, при виконанні оператора до параметра циклу застосовується функція PRED. Значення виразу2 повинно бути більше значення виразу1.

Приклад. Вивести у порядку спадання коди латинських літер.

Var ch :Char;

Begin

for ch:=’z’ downto ‘a’ do

Writeln(ch, ‘ - ‘, ord(ch))

End.

 

Узагальнимо отримані відомості про оператори циклу в ТР (таблиця 15)

 

Таблиця 15. Циклічні оператори ТР

Оператор Умови застосування Особливості
WHILE …DO невідома кількість повторень (³ 0) тіло циклу може не виконатись жодного разу
REPEAT…UNTIL невідома кількість повторень (³ 0) тіло циклу виконується хоча б один раз
FOR…TO…DO відома кількість повторень тіло циклу може не виконатись жодного разу; крок циклу фіксований

 

Приклад. Обчислення факторіалу заданого натурального числа з використанням різних операторів циклу.

Var N, Fact: Integer; i: Byte;

Begin

Write( ‘N>0:’); Readln(n);

{ for}

Fact:=1;

for i:=1 to N do

Fact:=Fact*i;

Writeln(N,’! = ‘, Fact);

{while}

i:=1; Fact:=1;

while i<=N do

Begin

Fact:=Fact*i;

i:=i+1

End;

Writeln(N,’! = ‘, Fact);

{repeat}

i:=1; Fact:=1;

repeat

Fact:=Fact*i;

i:=i+1

until i>N;

Writeln(N,’! = ‘, Fact);

End.

 

Приклад. Обчислити суму ряду для заданого n;

Var i,n: Integer;

S:Real;

Begin

Readnl(n);

S:=0;

for i:=1 to n do

S:=S+i/(2*i+1);

Writeln(‘S=’, S:6:2)

End.

 

Приклад. Обчислити суму ряду ;

Var S:Real;

n, w: Integer;

Begin

S:=0;

w:=-1; {чисельник першого доданку}

for n:=1 to 20 do

Begin

S:=S+w/(n*(n+1));

w:=-w {зміна знаку доданка}

End;

Writeln(’S=’,S)

End.

 

Табулювання функцій

При проведенні обчислювальних експериментів часто виникає необхідність протабулювати певну функцію.

Табулювання функції f(x) на відрізку [a,b] з кроком h полягає у побудові таблиці значень функції f(x) в точках x=a, x=a+h, x+2h,…, x=b:

 

x f(x)
a f(a)
a+h f(a+h)
b f(b)

 

Функція f(x) має бути визначена на відрізку [a,b].

Відрізок [a,b] називається відрізком табулювання, h – кроком табулювання, точки a+hi (i=0,1,2,…) – вузлами табулювання, відрізки [a+hi, a+h(i+1)] – відрізками розбиття.

Може статися, що a-b не ділиться націло на h, тобто точка b не є вузлом табулювання, наприклад при a=1, b=5, h=1.5.

Якщо така ситуація небажана, задачу формулюють інакше:

Дано відрізок [a,b] (a<b), функція f(x), натуральне n (кількість відрізків розбиття).

Побудувати таблицю значень функції f(x): yi=f(xi), де xi=a+(b-a)i/n, i=0,1,…,n.

Приклад. Протабулювати функцію y(x)=x2+sin(x) на відрізку [a,b], якщо задана кількість відрізків розбиття.

Var x,y,a,b,h : Real;

n:Byte;

Begin

Write(‘Введіть a,b(a<b)’);

Readln(a,b);

Write(‘Введіть n>0’);

Readln(n);

h:=(b-a)/n;

x:=a;

Writeln(‘ x y(x) ‘);

while x<=b do

Begin

y:=sqr(x)+sin(x);

Writeln(x:6:2, y:6:2);

x:=x+h

End

End.

 

Приклад. Протабулювати функцію y(x)=cos(x)-x на відрізку [a,b] з кроком h. Якщо на [a,b] функція набуде заданого значення K, вивести його на екран і припинити табулювання.

Var x,y,a,b,h,k: Real;

Begin

Write(a,b (a<b)’); Readln(a,b);

Write(’h>0’); Readln(h);

Write(‘k’); Readln(k);

x:=a;

repeat

y:=cos(x)-x;

Writeln(x:6:2, y:6:2);

x:=x+h

until (x>b) or (y=k);

End.

 

Приклад. Дано a,b (a<b), натуральне n, функція y(x)=x5. Для xi=a+ih (i=0,1,…,n), h=(b-a)/n обчислити значення функції y(xi) (i=0,1,…,n).

Var i,n:Integer;

a,b,x,y,h: Real;

Begin

Readln(a,b,n);

h:=(b-a)/n;

for i:=0 to n do

Begin

x:=a+i*h;

y:=exp(5*ln(x));

Writeln(x:7:4, y:7:4)

End;

End.

 

Вкладені цикли

В усіх операторах циклу мови ТР оператор, який є тілом циклу, може сам бути оператором циклу або містити у собі оператор циклу. Утворена конструкція називається вкладеним циклом.

Приклад. Обчислити суму ряду .

Var S: Real;

i,j: Integer;

Begin

S:=0;

for i:=1 to 10 do

for j:=1 to 5 do

S:=S1/(i+j*j);

Writeln(‘S=’,S);

End.

Питання для самоконтролю.

1. Що називається циклом у програмуванні? Які оператори мови ТР призначені для організації циклів?

2. Вкажіть формат оператора циклу з передумовою. Як виконується цей оператор? Які особливості його виконання?

3. Вкажіть формат оператора циклу з післяумовою. Як виконується цей оператор? Які особливості його виконання?

4. Вкажіть формат оператора циклу з параметром. Які існують модифікації цього оператора? Як вони виконуються?

5. Що називається кроком циклу?

6. Порівняйте особливості виконання трьох операторів циклу мови ТР.

7. Що таке табулювання функції? Наведіть приклади.

8. Що називається вкладеним циклом? Наведіть приклади.


Структури даних. Масиви

Особливістю мови Паскаль є вимога чіткого опису всіх використовуваних в програмі об’єктів. Так, блок описів програми відокремлений від виконуваного блоку, у блоці описів відокремлені розділи опису констант, типів, змінних тощо. Кожний елемент даних (константа чи змінна) повинен бути описаний перед використанням. Кожна підпрограма (процедура чи функція) має бути визначена перед її викликом.

Такий чіткий опис об’єктів полегшує програмісту написання програми, а транслятору – її перевірку і виконання.

Для зрозумілості програми не лише автору, а й іншим особам, Паскаль вимагає чіткої структуризації програми - щоб та чи інша інформація знаходилася у визначеному для неї місці.

Особливу роль відіграє структуризація даних. Програма задає правила обробки даних. Отже, поки не визначені самі дані, неможливо вдало розробити правила їх обробки.

Для спрощення написання і виконання програми окремі дані часто буває зручно об’єднувати в певні структури. Від того, наскільки вдало будуть вибрані ці структури, суттєво залежить ефективність програми.

В Паскалі та чи інша структура даних задається за допомогою певного типу даних.

Прості типи даних задають тривіальні структури даних – окреме значення.

Більш складні структури даних задаються за допомогою складених (структурованих) типів.

Значення складеного типу в загальному випадку є нетривіальною структурою, тобто містить більш ніж одну компоненту. При цьому кожна компонента структури може бути значенням як простого, так і складеного типу.

Найбільш уживаним складеним типом даних є регулярний тип, або масив.

Масив – це скінченний упорядкований набір однотипних значень (компонентів або елементів масиву).

Тип елементів масиву називається базовим типом масиву.

Кожен елемент масиву має принаймні один індекс – адресу, за якою можна звернутися до цього елемента.

Формат опису масиву у розділі опису типів:

Type ім’я_масиву = Array[ список типів індексів ] of базовий_тип;

Array (масив), of( з) – службові слова, ім’я_масиву – ідентифікатор, тип індексів – діапазон (підмножина значень простого дискретного типу).

Приклад.

Type Dim3 = Array[1..3] of Real;

Var W,V: Dim3;

Змінна V є структурою з трьох дійсних чисел: V[1], V[2], V[3]. Числа 1,2,3 – індекси.

Якщо базовим типом масиву є інший масив, утворюється структура, яка називається багатовимірним масивом.

Приклад.

Type Vector = Array [1..4] of Integer;

Matrix = Array [1..4] of Vector;

Var Matr: Matrix;

Таку ж структуру можна отримати, використовуючи іншу форму запису:

Type Matrix = Array [1..4,1..4] of Integer;

Var Matr: Matrix;

або

Var Matr: Array [1..4,1..4] of Integer;

Останній запис показує, що тип можна задавати безпосередньо при описі змінних.

Елементи масиву Matr: Matr[1,1], Matr[2,3], Matr[4,4] (всього 16 елементів)

Для звернення до окремого елемента масиву треба вказати ім’я масиву і в квадратних дужках індекси елемента. Елемент одновимірного масиву має один індекс, багатовимірного – стільки індексів, яка вимірність масиву.

Двовимірні масиви широко використовуються для подання матриць.

 

В загальному випадку матриця записується так:

 

У ТР така матриця є масивом типу Array[1..m,1..n] of Real;

Якщо кількість рядків матриці дорівнює кількості стовпців, матриця називається квадратною. Головна діагональ квадратної матриці проходить з верхнього лівого кута до правого нижнього. Побічна діагональ – з нижнього лівого кута до правого верхнього.

 

Над змінними типу масив в цілому можна виконувати операції присвоювання (якщо змінні однотипні) і перевірки на рівність: W:= V; V=W (?)

Решта операцій над масивами виконується поелементно.

Приклад. Надання значень елементам масиву:

а) V[1]:=10; V[2]:=20; V[3]:=45.7;

б) for i:=1 to 3 do V[i]:=0;

в) for i:=1 to 3 do Readln(V[i]);


Приклад. Описи масивів.

Type

Month = (January, February, March, April, May);

DaysInMonth = Array[Month] of Byte; {кількість днів у місяці}

SpringType = Array[March..May] of Byte;

Var

Days: DaysInMonth;

Spring: SpringType;

Alpha: Array[‘A’..’Z’] of Char;

Vector: Array[1..10] of Real;

Matrix: Array[1..5,1..5] of Real;

Vector1: Array[-10..10] of Byte;

Begin

Days[January]:=31;

Spring[April]:=30;

Alpha[‘A’]:=’1’;

Vector[10]:=0.5;

Matrix[1,1]:=4;

Vector1[-5]:=0

End.

 

Загальна схема розв’язування задач на опрацювання масивів:

1) введення масиву (надання елементам масиву початкових значень);

2) опрацювання елементів масиву;

3) виведення результатів.

Оскільки масиви містять фіксовану кількість елементів з індексами дискретних типів, то для їх опрацювання зручно використовувати цикл з параметром.

 

Приклад. Дано масив з 10 дійсних чисел. Підрахувати суму, добуток і середнє арифметичне елементів масиву.

Const maxV=10;

Type mas = Array[1..maxV] of Real;

Var v: mas; {масив}

D,S,A: Real; {добуток, сума, середнє арифметичне}

i:Byte; {лічильник}

Begin

{введення елементів масиву}

Writeln(‘Введіть’, maxV, ‘чисел:’);

for i:=1 to maxV do

Begin

Write(‘V[‘,i,’]=’);

Readln(v[i])

End;

{опрацювання елементів масиву}

D:=1; S:=0; A:=0;

for i:=1 to maxV do

Begin

D:=D*v[i];

S:=S+v[i]

End;

A:=S/maxV;

Writeln(‘Сума = ’,S:4:1, ‘добуток = ’,D:4:1, ‘сер. арифм. = ’, A:4:1);

End.

 

Приклад. Дано масиви A, B (кожний з 10 цілих чисел). Побудувати масив C за правилом:

ci= ai2 + bi2, i=1,..,10.

Type mas = Array[1..10] of Integer;

Var A,B,C: mas;

i: Byte;

{введення масивів A і B}

Begin

for i:=1 to 10 do

Begin

Write(‘A[‘,i,’]=’);

Readln(A[i])

End;

for i:=1 to 10 do

Begin

Write(‘B[‘,i,’]=’);

Readln(B[i])

End;

{формування масиву C}

for i:=1 to 10 do

C[i]:=sqr(A[i])+sqr(B[i]);

{виведення масиву C}

Writeln(‘Масив C:’);

for i:=1 to 10 do

Write(C[i]:3);

еnd.

Питання для самоконтролю.

1. В чому полягає структуризація програм і даних у ТР?

2. Що таке тривіальні і нетривіальні структури даних?

3. Що називається масивом?

4. Що таке базовий тип масиву, індекс масиву?

5. Як описуються масиви у програмі на ТР?

6. Що таке вимірність масиву? Як описуються багатовимірні масиви?

7. Які операції можна виконувати над масивами в цілому? Над елементами масивів? Наведіть приклади.

Масиви. Приклади розв’язування задач

Приклад. Дано масив з 15 дійсних чисел;

а) знайти максимальне значення елемента масиву;

б) підрахувати кількість елементів масиву з таким значенням.

Type mas=Array[1..15] of Real;

Var A: mas; N,i: Byte; Max: Real;

Begin

{ведення масиву A}

Begin

for i:=1 to 15 do

Begin

Write(‘A[‘,i,’]=’);

Readln(A[i])

End;

{знаходження максимуму}

Max:=A[1];

for i:=2 to 15 do

if A[i]>Max then Max:=A[i];

{знаходження кількості максимальних елементів}

N:=0;

for i:=1 to 15 do

if A[i]=Max then N:=N+1;

Writeln(‘макс. ел-т ‘, Max:4:1, ‘зустрічається у масиві ’, N ‘ разів’);

End.

 

Приклад. Упорядкувати за зростанням масив з n дійсних чисел методом "бульбашки".

Const n=10;

Type mas=Array[1..n] of Real;

Var a: mas; c:Real; i,j:Byte;

Begin

{введення масиву}

for i:=1 to n do

Begin

Write('a[',i,']=');

Readln(a[i,j])

End;

{упорядкування масиву}

for i:=1 to n–1 do {фіксація елементів з 1–ї по n–1 позицію}

for j:=i+1 to n do {перегляд елементів, що стоять праворуч}

if a[i]>a[j] then {від зафіксованого}

Begin

c:=a[i]; {обмін значеннями елементів }

a[i]:=a[j]; {на i–й і j–й позиціях}

a[j]:=c

End;

{виведення упорядкованого масиву}

Writeln('упорядкований масив:');

for i:=1 to n do

 

Write(a[i]:3)

End.

 

Приклад. Дано квадратну матрицю розмірності 4. Обчислити слід матриці – суму елементів її головної діагоналі.

Const n=4;

Type mas=Array[1..n,1..n] of Real;

Var a:mas; i,j:Byte; trace:Real;

Begin

{введення матриці}

Writeln('Введіть елементи матриці 4х4 порядково,');

Writeln('в кінці кожного рядка – Enter');

for i:=1 to n do {цикл по рядках}

Begin

for j:=1 to n do {цикл по стовпцях}

Read(a[i,j]); {введення елемента рядка}

Writeln; {перехід на новий рядок}

End;

{знаходження сліда матриці}

trace:=0;

for i:=1 to n do

trace:=trace + a[i,j];

Writeln('Trace(A)=', trace:4:1)

End.

 

Приклад. Дано цілочисельну матрицю розміром m´n. Знайти мінімальний елемент матриці та його індекси.

Const m=4; n=3;

Type mas=Array[1..m,1..n] of Integer;

Var a:mas; min:Integer; i,j,imin,jmin:Byte;

Begin

for i:=1 to m do

Begin

for j:=1 to n do

Read(a[i,j]);

Writeln;

End;

min:=a[1,1]; imin:=1; jmin:=1;

for i:=1 to m do

for j:=1 to n do

if a[i,j]<=min then

Begin

min:=a[i,j];

imin:=i;

jmin:=j

End;

Writeln(min елемент матриці = ',min,'[',imin,',',jmin,']');

End.

 

Приклад. Сформувати і надрукувати одиничну матрицю порядку n (n<6).

Type mas= Array[1..n,1..n] of Byte;

Var e:mas; n,i,j:Byte;

Begin

Write('Введіть порядок матриці n (n<6): ');

Readln(n);

{формування матриці E}

for i:=1 to n do

for j:=1 to n do

if i=j then e[i,j]:=1

else e[i,j]:=0;

{виведення матриці E}

Writeln('Матриця E:);

for i:=1 to n do

Begin

for j:=1 to n do

Write(e[i,j]:2);

Writeln;

End;

End.

 

Приклад. Дано дійсну матрицю розміром m´n. Сформувати масиви з:

а) максимальних елементів рядків матриці;

б) сум елементів стовпців матриці;

в) середніх арифметичних рядків матриці.

Const m=5; n=7;

Type mas=Array[1..m,1..n] of Real;

vect1=Array[1..m] of Real; {для а) і в)}

vect2=Array[1..n] of Real; {для б)}

Var a:mas; b1,b3:vect1; b2:vect2; i,j:Byte;

Begin

{введення матриці А}

for i:=1 to m do

Begin

for j:=1 to n do

Read(a[i,j]);

Writeln;

End;

{а) побудова масиву з макс. ел–тів рядків матриці}

for i:=1 to m do {цикл по рядках}

Begin

b1[i]:=a[i,1];

for j:=2 to n do

if a[i,j]>b1[i] then

b1[i]:=a[i,j];

End;

{б) побудова масиву з сум ел–тів стовпців матриці}

for j:=1 to n do {цикл по стовпцях}

Begin

b2[j]:=0;

for i:=1 to m do

b2[j]:=b2[j]+a[i,j];

End;

{в) побудова масиву з середніх арифметичних рядків м–ці}

for i:=1 to m do

Begin

b3[i]:=0;

for j:=1 to n do

b3[i]:=b3[i]+a[i,j];

b3[i]:=b3[i]/n;

End;

{виведення результатів}

Writeln('Макс. ел–ти рядків м–ці:');

for i:=1 to m do Write(b1[i]:3); Writeln;

Writeln('Суми ел–тів стовпців м–ці:');

for i:=1 to n do Write(b2[i]:3); Writeln;

Writeln('Середні арифм. рядків м–ці:');

for i:=1 to m do Write(b3[i]:3); Writeln;

End.


 

Процедури і функції у мові Паскаль

У практиці програмування часто виникає ситуація, коли одну й ту саму групу операторів, які реалізують певну частину загальної задачі, треба повторити без змін в різних місцях програми. Для вирішення цієї проблеми була запропонована концепція підпрограми, вперше описана М.Уілксом у 1957 р. Вона отримала широке розповсюдження практично у всіх мовах програмування.

Підпрограмою називається поіменована логічно завершена група операторів мови, яку можна викликати для виконання за іменем довільну кількість разів у різних місцях програми.

Програма, яка використовує підпрограми, по відношенню до них називається головною або основною.

У мові Паскаль для організації підпрограм використовуються процедури і функції.

Всі процедури і функції мови Паскаль поділяються на дві групи: вбудовані і визначені користувачем.

Вбудовані (стандартні) процедури і функції є частиною мови і можуть викликатися за іменем без попереднього опису (наприклад, Read, Write, Sin, Cos, Pred, Succ тощо).

Процедури і функції користувача обов’язково описуються в програмі у розділі визначення процедур і функцій.

Використання процедур і функцій забезпечує структурованість програми, полегшує її написання і читання.

 

Процедури користувача

Процедура – це іменована група операторів, яка реалізує певну частину загальної задачі і викликається за іменем з будь–якої позиції у головній програмі.

Формат опису процедури:

Procedure ім’я_процедури [(список формальних параметрів)]; – заголовок процедури

розділи описів; ù

Begin ô

оператори ô – тіло процедури

End; û

Procedure (процедура) – службове слово, ім’я_процедури – ідентифікатор,

список формальних параметрів = форм_пар1: Тип1, форм_пар2: Тип2, …

розділ описів – опис локальних об’єктів процедури (за синтаксисом співпадає з розділом описів програми на ТР).

Приклад. Заголовки процедур:

Procedure Sort(A:Integer; B:Real); Procedure Gauss;

Procedure Kvadr(Alpha, Beta: Integer; Gamma: Boolean);

Тіло процедури за структурою аналогічне програмі на ТР, ім’я процедури – ідентифікатор, унікальний у межах програми.

Для звернення до процедури в головній програмі використовується оператор виклику процедури.

Формат оператора виклику процедури:

Ім’я_процедури[(список фактичних параметрів)];

список фактичних параметрів = факт_пар1, факт_пар2, …

Приклад. Оператори виклику процедур:

Sort(a1,b1); Gauss; Kvadr(14, 25, TRUE);

Параметри використовуються для обміну інформацією між процедурою і основною програмою.

Параметри, які використовуються при описі процедури, називаються формальними.

Параметри, які використовуються при виклику процедури, називаються фактичними.

Кількість, тип і порядок слідування фактичних параметрів повинні бути такими, як у формальних параметрів. Параметри можуть мати будь-який тип, але визначений заздалегідь. Процедура може взагалі не мати параметрів.

При введенні у програму підпрограм виникає поділ даних і їх типів на глобальні і локальні.

Глобальні змінні (константи, типи) – ті, які описані в головній програмі. Ними можна користуватися і в головній програмі, і в підпрограмі.

Локальні змінні (константи, типи) – ті, які описані всередині підпрограми: або у списку параметрів (тільки змінні), або у розділах Const, Type, Var тіла підпрограми. За межами підпрограми локальні об’єкти недоступні.

У мові Паскаль є два способи передавання параметрів: за значенням і за посиланням.

Параметри, які передаються за значенням, називаються параметрами–значеннями, параметри, які передаються за посиланням, називаються параметрами–змінними.

Параметри-значення передаються з головної програми в процедуру, але не повертаються з неї. Фактичний параметр, відповідний формальному параметру-значенню, може бути будь-яким виразом того ж типу. Характерна риса параметрів-значень – зміна формальних параметрів не викликає зміни фактичних параметрів. Тому параметри-значення використовуються в процедурах для подання їх аргументів (вхідних даних).

Приклад. Procedure P1(A,B,C: Integer; D: Real);

Параметри-змінні і передаються в процедуру, і повертаються з неї в основну програму. Фактичний параметр, відповідний параметру-змінній, може бути тільки іменем змінної. Характерна риса параметрів-змінних – будь-яка зміна формального параметра означає зміну фактичного параметра. Параметри-змінні використовуються в процедурах для подання їх результатів, для того щоб результати могли бути передані і використані в основній програмі. У списку формальних параметрів перед іменами параметрів-змінних ставиться службове слово Var.

Правильно написана підпрограма спілкується з основною програмою тільки через параметри.

Приклад. Procedure MN(Var R,T:Real);

Procedure NSD(a,b:Integer; Var k: Integer);

Procedure A(a,x:Byte; Var M:Integer; Var p,k: Real);

Приклад. Знайти площу трикутника зі сторонами a,b,c за формулою Герона, використавши процедуру.

Var a,b,c,S:Real; {глобальні змінні}

Procedure Geron(x,y,z: Real; Var pl:Real);

{x,y,z – параметри-значення, pl – параметр-змінна}

Var p:Real; {локальна змінна }

Begin

p:=(x+y+z)/2;

pl:=sqrt(p*(p–x)*(p–y)*(p–z));

End;

{основна програма}

Begin

Writeln('Введіть довжини сторін трикутника: ');

Readln(a,b,c);

Geron(a,b,c,S);

Writeln('Площа трикутника = ', S:4:1);

End.

Приклад. Скласти процедуру обміну значеннями двох дійсних змінних

Procedure swap(Var a,b:Real);

Var tmp: Real;

Begin

tmp:=a;

a:=b;

b:=tmp

End;

 

Процедури і функції у мові Паскаль. Функції користувача

У ТР є досить широкий вибір вбудованих функцій, проте користувач має можливість створювати необхідні йому функції і використовувати їх у своїх програмах.

Функція – це іменована група операторів, яка реалізує певну частину загальної задачі і має своїм результатом одне значення простого типу. Ім’я функції використовується у виразах як операнд.


Формат опису функції:

Function Ім’я_функції [(список форм. пар–рів)]: тип_результату; – заголовок функції

розділи описів; ù

Begin ½ – тіло функції

оператори ½

End; û

Function (функція) – службове слово, тип_результату –


<== попередня лекція | наступна лекція ==>
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ | Дифференцированный зачет


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн