рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Наведіть приклади об’єктів, їх властивостей та значень цих властивостей

Наведіть приклади об’єктів, їх властивостей та значень цих властивостей - раздел Образование, Розділ 2. Основи Алгоритмізації Та Програмування ...

Розділ 2. Основи алгоритмізації та програмування

У цьому розділі ви дізнаєтеся про:

· поняття моделі та моделювання, типи моделей;

· створення інформаційних моделей;

· алгоритми та їхні властивості, основні алгоритмічні структури;

· етапи розв’язування задач з використанням комп’ютера;,

· комп’ютерне моделювання;

· комп’ютерні програми;

· створення і налагодження комп’ютерних програм в інтегрованому середовищі візуальної розробки;

· методи опрацювання даних з використанням комп’ютерних програм.

2.1. Моделі та моделювання. Типи моделей

Пригадайте!

1. Наведіть приклади об’єктів, їх властивостей та значень цих властивостей.

2. Хто такі модельєри? Що створюють представники цієї професії?

3. Які моделі об’єктів ви знаєте? Для чого вони створюються? На яких уроках і як використовувалися моделі об’єктів?

4. Які процеси або явища можуть бути описані функцією y = кx?

Поняття моделі. Моделювання

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

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

Моделі об’єктів створюють не тільки тоді, коли вони недоступні або дорого коштують, а й тоді, коли потрібно дослідити конкретну властивість або групу властивостей об’єкта. У таких випадках створюють модель об’єкта, яка обов’язково має ті властивості, що досліджуються, а інші властивості, що є несуттєвими для даного дослідження, можуть бути в моделі відсутні.

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

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

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

Запам’ятайте!

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

 

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

Запам’ятайте!

Модель об’єкта – це новий об’єкт, який відображає властивості об’єкта, суттєві для даного дослідження.

Процес створення і дослідження об’єктів на основі їхніх моделей називається моделюванням.

 

Зазначимо, що в різних науках досліджують різні властивості об’єктів. І тому для кожного об’єкта можуть існувати різні моделі. Це залежить від того, які саме властивості досліджуються. Так різними будуть моделі людини у дослідженнях фізика, хіміка, біолога, лікаря, модельєра.

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

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

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

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

 

Типи моделей

Моделі класифікують за різними ознаками:

· за способом представлення;

· за галузями використання;

· за фактором часу

та ін.

За способом представлення моделі розподіляють на матеріальні (предметні) та інформаційні.

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

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

Запам’ятайте!

Матеріальна модель об’єктаце модель об’єкта, подана у вигляді матеріального об’єкта (предмета).

Інформаційна модельоб’єктаце модель об’єкта, подана у вигляді його опису.

 

Як і матеріальні моделі, інформаційні моделі одного й того ж об’єкта будуть різні, залежно від мети дослідження. Так, наприклад, інформаційна модель об’єкта «помідор» для постачальника буде містити дані про розміри, умови зберігання, фактори і терміни дозрівання, максимальні терміни зберігання тощо. А для фермера інформаційна модель цього ж об’єкта буде містити дані про час сіяння, регулярність прополювання і поливання, раціональне використання добрив тощо.

Інформаційні моделі у свою чергу розподіляють за формою представленняна:

· словесні(усні і письмові описи);

· графічні(рисунки, креслення, піктограми, карти та ін.);

· структурні(таблиці, графіки залежностей, діаграми, схеми та ін.);

· алгоритмічні(правила, плани дій та ін.);

· математичні(формули, рівняння, нерівності, функції та ін.);

· спеціальні(хімічні формули і рівняння, нотні записи, записи шахових партій та ін.).

Для створення інформаційної моделі об’єкта потрібно:

1. Визначити об’єкт дослідження, для якого створюється модель, і мету дослідження.

2. Виділити ті властивості об’єкта, які є суттєвими для вказаного дослідження.

3. Встановити взаємозв’язки між вибраними властивостями і виразити їх, використавши одну з форм представлення.

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

· навчальні (наочні посібники, навчальні комп’ютерні програми, навчальні тренажери, наприклад, тренажер літака для навчання пілотів, тренажер для імітації перевантажень при виведенні на орбіту в космічному польоті для навчанні і тренування космонавтів та ін.);

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

· науково–технічні (модель ядерного реактора, прилад, що імітує розряд блискавки, стенд для тестування комп’ютерів, адронний коллайдер та ін.);

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

За фактором часу моделі розподіляють на:

· статичні –це моделі, в яких зафіксовано стан об’єкта в певний момент часу і подальші зміни цього об’єкта не враховуються, наприклад, гіпсова модель піраміди Хеопса;

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

 

Рис. 2.2. Типи моделей

Перевірте себе

1. º Що таке предметна область дослідження? Наведіть приклади.

2. º Що таке модель? Наведіть приклади моделей.

3. · Для чого створюються моделі? Наведіть приклади.

4. · Поясніть, у чому полягає процес моделювання.

5. · Чим модель об’єкта відрізняється від реального об’єкта?

6. · Поясніть, чому один той самий об’єкт може мати різні моделі. Наведіть приклади

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

8. · Як класифікують моделі за способом представлення? Охарактеризуйте їх.

9. º Які моделі називають матеріальними?Наведіть приклади.

10. º Які моделі називають інформаційними? Наведіть приклади.

11. · Як класифікують інформаційні моделі? Опишіть різні види інформаційних моделей.

12. · Як класифікують моделі за галузями використання? Наведіть приклади.

13. · Як класифікують моделі за фактором часу? Наведіть приклади.

14. · Що таке комп’ютерне моделювання?

Виконайте завдання

1. · Впишіть вказані моделі об’єктів до відповідного стовпчика таблиці залежно від способу представлення моделі:


а) рисунок піраміди;

б) накреслений план школи;

в) формула площі прямокутника;

г) нотний запис пісні;

д) макет забудови площі;

е) кулінарний рецепт;

є) хімічний дослід;

ж) модель літака;

з) комп’ютерна модель автомобіля;

и) модель атома;

і) запис шахової партії;

ї) проведення фізичного досліду;

й) рівняння хімічної реакції;

к) опудало птаха;

л) сценарій проведення свята;

м) фотографія місцевості;

н) глобус.


 

Матеріальні моделі Інформаційні моделі
   

 

2. · (ДЗ) До якої групи відносяться вказані моделі в класифікації за способом представлення:

а) список учнів вашого класу з відомостями про кожного;

б) іграшкова залізна дорога;

в) макет шкільного будинку;

г) план проведення Новорічного свята;

д) звіт про похід;

е) список необхідних покупок в магазині;

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

а) графік чергування;

б) сценарій п’єси;

в) формула закону Ома;

г) ноти нової пісні;

д) реклама по телебаченню;

е) словесне формулювання теореми Піфагора;

ж) рівняння хімічної реакції;

з) таблиця результатів чемпіонату України з баскетболу;

и) автобіографія.

4. · Створіть інформаційну модель об’єктів «квітка» і «кавун» з точки зору художника, медика, ботаніка, постачальника, покупця.

5. · (ДЗ) Створіть інформаційну модель об’єкта «дачний будинок» з точки зору художника, будівельника, покупця.

6. · Відстань між містами А і В 50 км. З цих міст одночасно назустріч один одному виїхали двоє велосипедистів зі швидкостями 15 км/год. і 12 км/год. відповідно. Створіть математичну модель для визначення відстані між ними в будь-який момент часу до їхньої зустрічі.

7. · (ДЗ) Одна з друкарок може надрукувати рукопис за 20 год., а друга – за 30 год. Створіть математичну модель для визначення частини рукопису, яку вони надрукують через х год., якщо працюватимуть одночасно.

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


 

2.2. Алгоритми та їх властивості. Форми подання алгоритмів

Пригадайте!

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

2. Чи готували ви якусь страву, користуючись рецептом її приготування? Як ви це робили?

3. На яких уроках ви користувалися інструкціями? Якими саме?

4. Наведіть приклади правил української мови, в яких використана конструкція якщо ..., то ... .

Поняття алгоритму

Люди щоденно користуються різноманітними правилами, інструкціями, рецептами тощо, що складаються з певної послідовності команд (вказівок). Деякі з них настільки увійшли до нашого життя, що ми виконуємо їх майже не замислюючись, іноді кажуть, автоматично.

Так для приготування яєчні потрібно виконати послідовність команд:

1. Поставити сковороду на плиту.

2. Покласти на сковороду шматочок вершкового масла.

3. Увімкнути конфорку.

4. Чекати, поки масло на сковороді розтане.

5. Розбити два яйця і вилити їх вміст на сковороду.

6. Посолити.

7. Чекати, поки загусне білок.

8. Вимкнути конфорку.

А для того, щоб визначити вид трикутника за його кутами, якщо відомі його три сторони, потрібно виконати таку послідовність команд:

1. Визначити сторону трикутника, яка не менша кожної з двох інших.

2. Обчислити косинус кута трикутника, що лежить проти сторони, визначеної як результат виконання команди 1.

3. Якщо визначений косинус кута від’ємний, то повідомити, що даний трикутник тупокутний, якщо ні, то якщо визначений косинус кута дорівнює нулю, то повідомити, що даний трикутник прямокутний, якщо ні, то повідомити, що даний трикутник гострокутний.

Такі послідовності команд (вказівок) називають алгоритмами.

 

Запам’ятайте!

Алгоритм — це скінченна послідовність команд (вказівок), що визначає, які дії і в якому порядку потрібно виконати, щоб досягти поставленої мети.

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

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

1. Порівняти довжини сторін трикутника і вибрати з них не меншу.

2. Обчислити косинус кута трикутника за відомими трьома сторонами.

3. Порівняти число з нулем (більше нуля, менше нуля або дорівнює нулю).

4. Вивести повідомлення.

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

Цікаві факти з історії!

Слово алгоритм походить від імені видатного вченого середньовічного Сходу Мухаммеда ібн Муси аль-Хорезмі (783 — 850) (рис. 2.3), який в своїх наукових працях з математики, астрономії та географії описав і використовував індійську позиційну систему числення, а також сформулював у загальному вигляді правила виконання чотирьох основних арифметичних дій: додавання, віднімання, множення і ділення. Європейські вчені ознайомились з його працями завдяки їхнім перекладам на латину. При перекладі ім’я автора було подано як Algorithmus. Звідси й пішло слово алгоритм. А розроблені ним правила виконання арифметичних дій вважають першими алгоритмами

Властивості алгоритму

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

Дискретність(лат. discretus – розділений, розривний) алгоритму означає, що його виконання зводиться до виконання окремих дій (кроків) у певній послідовності. Причому, кожна команда алгоритму повинна виконуватися за скінченний проміжок часу.

Визначеність (або детермінованість(лат. determinans – визначальний)) алгоритму означає, що для заданого набору значень початкових (вхідних) даних алгоритм однозначно визначає порядок дій виконавця і результат цих дій. Алгоритм не повинен містити команди, які можуть сприйматися виконавцем неоднозначно, наприклад, «Узяти дві-три ложки цукру», «Трохи підігріти молоко», «Вимкнути світло через кілька хвилин», «Поділити число x на одне з двох даних чисел a або b» тощо. Крім того, в алгоритмах недопустимі ситуації, коли після виконання чергової команди виконавцю неясно, яку команду він повинен виконувати наступною.

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

Зазначимо, що виконавець повинен лише вміти виконувати кожну команду зі своєї системи команд, і не важливо, розуміє він її, чи ні. Говорять, що виконання алгоритмів виконавцем носить формальний характер: виконавець може не розуміти жодну з команд, може не знати мети виконання алгоритму, і все одно отримає результат. Так, наприклад, верстат з програмним керуванням не розуміє жодної з команд, яку він виконує, але завдяки своїй конструкції успішно виготовляє деталі.

Скінченність алгоритму означає, що його виконання закінчиться після скінченної (можливо, досить великої) кількості кроків і за скінченний час при будь-яких допустимих значеннях початкових даних. Наведені вище послідовності команд є скінченними, а наступна послідовність команд – нескінченна:

1. Взяти число 2.

2. Помножити взяте число на 10.

3. Додати до одержаного числа 5.

4. Якщо одержане число додатне, то виконати команду 3, якщо ні, то припинити виконання алгоритму.

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

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

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

Однак, крім масових алгоритмів, складаються і застосовуються алгоритми, які не є масовими. Таким, наприклад, є алгоритм розв’язування конкретного квадратного рівняння, наприклад, 2+5х+2=0 або алгоритм приготування конкретного салату (наприклад, грецького) на конкретну кількість осіб.

 

Форми подання алгоритмів

Розглянемо алгоритми розв’язування такої задачі.

Задача 1. Є повна посудина рідини місткістю 8 літрів і дві порожні посудини місткістю 5 літрів і 3 літри. Потрібно одержати в одній з посудин 1 літр рідини.

Розглянемо виконавця, який має таку систему команд:

1. Узяти вказану посудину.

2. Перелити вміст вказаної посудини в іншу вказану посудину.

3. Наповнити вказану посудину рідиною з іншої вказаної посудини.

Для такого виконавця алгоритм розв’язування цієї задачі буде таким:

1. Узяти повну 8–літрову посудину.

2. Наповнити 3-літрову посудину рідиною з 8-літрової.

3. Перелити вміст 3-літрової посудини в 5-літрову.

4. Наповнити 3-літрову посудину рідиною з 8-літрової.

5. Наповнити 5-літрову посудину рідиною з 3-літрової.

6. Узяти 3-літрову посудину.

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

Але словесна форма подання алгоритму не завжди є зручною і наочною. Тому, крім такої форми подання, часто використовують графічну форму подання алгоритму, або подання алгоритму у вигляді блок-схеми.

У блок-схемі алгоритму кожна команда записується в геометричній фігурі (блоці) певного вигляду. Блоки з’єднуються між собою стрілками, які вказують напрям переходу для виконання наступної команди алгоритму. Наведемо деякі елементи (блоки) блок-схеми алгоритму (табл. 2.1).

 

Таблиця 2.1. Деякі елементи (блоки) блок-схеми алгоритму

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

 

Ось як виглядає блок-схема алгоритму розв’язування задачі 1 (рис. 2.4).

Запам’ятайте!

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

Розглянемо ще одну задачу – задачу на обчислення значення виразу, і складемо алгоритм її розв’язування.

Задача 2. Обчислити значення виразу (a – b) * (c – d), де a, b, c, d – дійсні числа

 

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

 

Запишемо алгоритм розв’язування задачі 2 для такого виконавця в словесній формі.

1. Увести значення змінних a, b, c, d. (У результаті виконання цієї команди виконавець запам’ятовує введені дані як значення відповідних змінних).

2. Обчислити значення виразу a – b і результат присвоїти змінній х (запам’ятати як значення цієї змінної).

3. Обчислити значення виразу c – d і результат присвоїти змінній у (запам’ятати як значення цієї змінної).

4. Обчислити значення виразу х*у і результат присвоїти змінній z.

5. Повідомити значення змінної z.

У командах 2, 3 і 4 обчислюється значення виразу і результат обчислення присвоюється (запам’ятовується як значення) певній змінній. Такі команди називаються командами присвоювання.Для них прийнято використовувати таку форму запису:

2. х := a – b (читається: змінній х присвоїти значення виразу a – b)

3. у := c – d (читається: змінній y присвоїти значення виразу c – d)

4. z := х* у (читається: змінній z присвоїти значення виразу x * y)

Знак := називається знаком присвоювання і складається з двох символів: двокрапка і дорівнює, які записуються без пропуску між ними.

Наведемо блок-схему цього алгоритму (рис. 2.5).

Цей алгоритм також є лінійним, бо при кожному наборі значень змінних a, b, c, d кожна його команда обов’язково виконується, причому тільки 1 раз.

 

Проілюструємо виконання алгоритму розв’язування задачі 2 для значень змінних a = 3; b = 4; c = –2; d = –5.

Команда Результат виконання
Увести значення змінних a, b, c, d a = 3; b = 4; c = –2; d = –5
х : = a – b х = 3 – 4 = –1
у := c – d у = –2 – (–5) = 3
z := x*y z = –1*3 = –3
Повідомити значення змінної z z = –3

Аналогічно можна виконати цей алгоритм при іншому наборі значень змінних a, b, c, d.

Перевірте себе

1. º Наведіть приклади речень, які є командами, і приклади речень, які не є командами.

2. º Що таке алгоритм? Наведіть приклади.

3. º Що таке система команд виконавця? Наведіть приклади виконавців і системи їх команд.

4. · Назвіть властивості алгоритму. Поясніть кожну з них.

5. *Наведіть приклад послідовності команд, яка не є виконуваною.

6. Наведіть приклад послідовності команд, яка не є результативною.

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

8. · Назвіть елементи блок-схеми алгоритму і поясніть їх призначення.

9. · Який алгоритм (фрагмент алгоритму) називається лінійним?

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

11. ·Що таке команда присвоювання? Як вона позначається?

Виконайте завдання

1. · Вкажіть команди серед наступних речень:

а) Закрий вікно.

б) Котра година?

в) 3 + 2 = 5.

г) Не заважай читати.

д) Якщо йде дощ, візьми парасольку.

е) Я живу в Києві.

2. * Сформулюйте лінійні правила–алгоритми, які ви вивчали на уроках:

а) української мови;

б) математики;

в) (ДЗ) інших предметів.

Подайте ці алгоритми блок-схемами.

3. º Виконайте алгоритм:

1. Знайти суму чисел 1 і 3.

2. Додати до одержаної суми число 5.

3. Додати до одержаної суми число 7.

4. Додати до одержаної суми число 9.

5. Додати до одержаної суми число 11.

6. Повідомити результат.

Яку б назву ви дали цьому алгоритму? Складіть його блок-схему.

4. º (ДЗ) Виконайте алгоритм:

1. Накреслити відрізок АВ.

2. Поставити ніжку циркуля в точку А.

3. Побудувати коло, радіус якого дорівнює довжині відрізка АВ.

4. Поставити ніжку циркуля в точку В.

5. Побудувати коло, радіус якого дорівнює довжині відрізка АВ.

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

Яку б назву ви дали цьому алгоритму? Які геометричні задачі можна розв’язувати за цим алгоритмом? Складіть його блок-схему.

5. º Складіть алгоритм приготування бутерброду з сиром. Подайте його в словесній формі.

6. º (ДЗ) Складіть алгоритм приготування вашого улюбленої страви. Подайте його в словесній формі.

7. · Є координатна пряма з позначеними на ній цілими числами. На цій прямій мешкає виконавець Коник,якийвміє переміщуватися по ній, виконуючи команди: 1) стрибни на 3 одиниці праворуч; 2) стрибни на 2 одиниці ліворуч. Початкове положення Коника – точка 0. Складіть блок-схему алгоритму, за яким Коник за найменшу кількість стрибків опиниться в точці: а) 24; б) 7; в) –3.

8. · Є повна посудина місткістю 8 літрів і дві порожні посудини місткістю 3 літри і 5 літрів. Складіть алгоритм одержання в одній з посудин 2 літри рідини для виконавця, система команд якого описана в даному пункті. Подайте його в словесній формі і у формі блок-схеми.

9. * Необхідно приготувати суп з концентрату. У нашому розпорядженні є пісочні годинники на 3 хвилини і 8 хвилин. Складіть блок-схему алгоритму відліку часу для приготування супу, якщо його треба готувати рівно: а) 5 хвилин; б) 7 хвилин; в) 10 хвилин.

10. · Візнику потрібно перевезти в човні через річку вовка, козу і капусту. У човні, крім візника, вміщується або тільки вовк, або тільки коза, або тільки капуста. На березі не можна залишати козу з вовком або козу з капустою. Складіть алгоритм перевезення. (Ця старовинна задача вперше зустрічається в математичних рукописах VIII століття). Подайте його в словесній формі.

11. · (ДЗ) Двом солдатам потрібно переправитися з одного берега річки на інший. Вони побачили двох хлопчиків на маленькому човні. У ньому можуть переправлятися або один солдат, або один чи двоє хлопчиків. Складіть алгоритм переправлення солдатів. (Після переправлення солдатів човен повинен залишитися в хлопчиків) Подайте його в словесній формі.

12. · Складіть блок-схему алгоритму побудови бісектриси кута з використанням циркуля і лінійки.

13. · (ДЗ) Складіть блок-схему алгоритму побудови трикутника за трьома його сторонами з використанням циркуля і лінійки.

14. * Потрібно підсмажити 3 скибки хліба на сковороді, що вміщує одночасно тільки 2 такі скибки. На смаження однієї сторони витрачається 2 хвилини. Складіть систему команд для виконавця, який би зміг досягти поставленої мети. Складіть алгоритм для цього виконавця. Подайте його в словесній формі. Який час витрачається при виконанні вашого алгоритму? Складіть алгоритм, на виконання якого витрачається 6 хвилин.

15. * (ДЗ) Придумайте виконавця. Задайте його систему команд. Сформулюйте задачу і складіть алгоритм її розв’язування для цього виконавця.

16. · Складіть блок-схему алгоритму обчислення на калькуляторі значення виразу: 52 + (69 – 35) × 5.

17. · (ДЗ) Складіть блок-схему алгоритму обчислення на калькуляторі значення виразу: (81–12) × (58+84).

18. º Складіть блок-схему алгоритму обчислення значення виразу: (a + b) – c × a. Виконайте його при різних значеннях a, b, c.

19. · Складіть блок-схему алгоритму знаходження x з рівняння: 2x + a = c. Виконайте його при: 1) a = 5; c = 7; 2) a = –15; c = 105; 3) a = 5; c = 5.


 

2.3. Комп’ютерні програми і мови програмування. Етапи розв’язування задач з використанням комп’ютера

Пригадайте!

1. Для чого призначене і з чого складається програмне забезпечення комп’ютера?

2. Що таке алгоритм? Що таке система команд виконавця алгоритму? У чому полягає формальність виконання алгоритму виконавцем?

3. У чому полягає процес кодування даних? Для чого воно використовується? Що таке двійкове кодування?

4. Що таке модель об’єкта? Які види моделей ви знаєте?

5. Назвіть основні галузі застосування сучасних комп’ютерів.

Комп’ютерні програми

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

 

Запам’ятайте!

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

 

Програми складаються для виконання комп’ютером алгоритмів. Ці алгоритми утворюють логіку програми (програмну логіку).

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

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

 

Цікаві факти з історії!

Першим у світі програмістом вважається Ада Лавлейс (1815 – 1852) (рис. 2.6), дочка відомого англійського поета Джорджа Гордона Байрона. Вона працювала з Чарльзом Беббіджем (1791 – 1871) (рис. 2.7), розробником механічної обчислювальної машини (аналітичної машини), і вперше описала основні принципи розробки програм для обчислювальних машин. На жаль, ця обчислювальна машина так і не була створена. На честь Ади Лавлейс одна з мов програмування названа Ada..

 

Мови програмування

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

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

 

Запам’ятайте!

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

 

Кожна мова програмування має такі компоненти:

1) алфавіт –множину символів, з яких можна утворювати слова і речення цієї мови;

2) словник – набір спеціальних (зарезервованих, ключових) слів.

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

4) семантику – встановлене однозначне тлумачення мовних конструкцій, правил їх виконання.

Використання символів, що не входять до алфавіту, неправильне написання словникових слів, порушення синтаксичних правил призводить до неможливості виконання комп’ютером відповідної команди. Такі порушення називаються синтаксичними помилками.

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

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

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

 

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

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

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

 

Для тих, хто хоче знати більше!

Описаний вище спосіб виконання програм, написаних не машинною мовою програмування, є не єдиний, що використовується в сучасних комп’ютерах.

Для деяких мов програмування створено інші спеціальні програми – інтерпретатори. Ці програми не створюють виконуваних файлів, а аналізують програму покомандно і одразу ж ці команди виконують. Тому виконати програму, яка інтерпретується, а не компілюється, можна лише на тому комп’ютері, де встановлена відповідна програма-інтерпретатор.

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

 

Класифікація мов програмування

Існують різні класифікації мов програмування. Наведемо одну з них (рис. 2.8):

 


додати до рис. 2.8 після ЛОГІЧНІ ще два блоки – Функціональні та Інші

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

На відміну від машинно-орієнтованих мов програмування, машинно-незалежні мови програмування не орієнтовані на процесори конкретної архітектури.

Процедурні мови програмування дозволяють поділити програму на окремі фрагменти (процедури), кожна з яких є певною послідовністю команд і призначена для розв’язання деякої частини задачі (підзадачі). Процедури можна викликати на виконання з інших процедур або з основної частини програми. Зі створених процедур можна утворювати бібліотеки і використовувати їх при складанні інших програм. Прикладами таких мов є мови Fortran (англ. Formula Translator — перекладач формул), Basic (англ. Beginner’s All-purpose Symbolic Instruction Code — загальноцільовий (універсальний) код символічних інструкцій для початківців), Pascal (названа на честь видатного французького математика, фізика, інженера та філософа XVII століття Блеза Паскаля (1623 - 1662)),С.

Об’єктно-орієнтовані мови програмування оперують об’єктами, їх властивостями, значення яких можуть змінюватися під час виконання програми, і методами, які можуть виконуватися над об’єктами або які можуть виконувати самі ці об’єкти. Прикладами таких мов є мови Delphi, С++, С#, Java.

Логічні мови програмування застосовуються для розв’язування логічних задач, для аналізу великих обсягів даних і розробки експертних рішень та ін. Прикладом такої мови є мова Prolog (англ. Programming in Logic — програмування в логіці).

Функціональні мови програмування зводять весь процес обчислень до обчислення значень різноманітних функцій. Прикладом такої мови програмування є мова Lisp (англ. List Processing — опрацювання списків), яка широко використовується для пошуку даних у великих списках.

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

Етапи розв’язування задач з використанням комп’ютера

Вам вже відомо, що перші ЕОМ були створені для швидкого виконання громіздких обчислень. А сучасні комп’ютери здатні розв’язувати не тільки обчислювальні задачі, а й створювати і редагувати малюнки, текстові документи, презентації, мультфільми і кінофільми, вибирати потрібні дані з великих масивів даних, керувати роботою різноманітних пристроїв та багато іншого. Використовувати комп’ютер для розв’язування деяких з цих задач ви вже навчилися в 10 класі, деякі з них будуть розглянуті в 11 класі.

Усі ці задачі різні за своєю суттю, кожна з них вимагає свого, індивідуального підходу. Але все ж таки хід розв’язування кожної із задач можна поділити на кілька етапів, які є спільними для всіх задач, що розв’язуються з використанням ПК . Розглянемо ці етапи на прикладі такої задачі.

Задача 1. Використовуючи комп’ютер, розробити проект спортивного майданчика.

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

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

Далі потрібно вибрати засіб, який буде використано для створення цього проекту. У даному випадку це може бути одна з прикладних програм: векторний чи растровий графічний редактор, спеціальний пакет програм для креслення тощо. А можна скласти власну програму, яка за вхідними даними задачі на основі інформаційної моделі запропонує один чи кілька варіантів проектів такого майданчика. Цей етап називається вибір програмних засобів для розв’язування задачі.

Якщо ми вирішимо використати одну з прикладних програм, то далі потрібно:

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

2. Скласти алгоритм його створення, враховуючи вибрані засоби програми

3. Виконати складений алгоритм і отримати комп’ютерну модель проекту майданчика.

Ці етапи називаються вибір засобів в середовищі прикладної програми, складання алгоритму, виконання алгоритму і отримання комп’ютерної моделі об’єкта.

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

1. Скласти алгоритм (алгоритми) розв’язування задачі.

2. Скласти програму вибраною мовою програмування відповідно до складених алгоритмів, розробити інтерфейс користувача програми.

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

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

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

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

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

З розглянутого прикладу можна виділити такі основні етапи розв’язування задач з використанням комп’ютера (рис. 2.9):

 

Стрілка від блока "Налагодження програми ..." має йти не до лінії перед блоком "Помилки ...", а на 1 блок вище, перед блоком "Виконання алгоритму ..."

 

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

 

Задача 2. На торговельній базі зберігаються товари, які виготовлені в Україні і імпортуються до різних країн. Відомі їхні назви і ціни в гривнях. Перевести ціни товарів у долари, євро і фунти стерлінгів.

 

І етап. Аналіз умови задачі, визначення вхідних даних і кінцевих результатів

Вхідні дані:

· назви товарів;

· ціни товарів у гривнях;

· курси долара, євро і фунта стерлінгів по відношенню до гривні.

Кінцеві результати:

· ціни товарів у доларах, євро і фунтах стерлінгів.

 

ІІ етап. Побудова інформаційної моделі

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

Ці формули виглядатимуть так:

G – ціна товару в гривнях, D, E, F – ціни товару відповідно в доларах, євро і фунтах стерлінгів, KD, KE, KF – курси долара, євро і фунта стерлінгів по відношенню до гривні відповідно.

Крім того, одержані ціни бажано округлити до сотих.

 

ІІІ етап. Вибір програмних засобів для розв’язування задачі

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

 

ІV етап. Створення алгоритму розв’язування задачі

Якщо буде вибрано прикладний програмний засіб табличний процесор Excel 2007, то алгоритм розв’язування цієї задачі може бути такий:

1. Увести в клітинку А3 текст "Курс долара".

2. Увести в клітинку А4 текст "Курс євро".

3. Увести в клітинку А5 текст "Курс фунта".

4. Увести в клітинку В3 значення курсу долара.

5. Увести в клітинку В4 значення курсу євро.

6. Увести в клітинку В5 значення курсу фунта.

7. Увести в клітинку D2 текст "Ціна в гривнях".

8. Увести в клітинку E2текст " Ціна в доларах".

9. Увести в клітинку F2 текст " Ціна в євро".

10. Увести в клітинку G2 текст " Ціна в фунтах".

11. Увести в клітинки стовпця С, починаючи з клітинки С3, назви товарів, наявних на базі.

12. Увести в клітинки стовпця D, починаючи з клітинкиD3 ціни товарів у гривнях.

13. Увести в клітинку E3 формулу =ROUND(D3/$В$3;2).

14. Увести в клітинку F3 формулу =ROUND(D3/$В$4;2).

15. Увести в клітинку G3 формулу =ROUND(D3/$В$5;2).

16. Виділити клітинки діапазону Е3:G3.

17. Скопіювати вміст клітинок виділеного діапазону у відповідні в клітинки стовпців Е:G.

V етап. Отримання комп’ютерної моделі

У результаті ми одержимо таблицю, фрагмент якої ми бачимо у табл. 2.2.

Таблиця 2.2. Таблиця розв’язування задачі в табличному процесорі Excel 2007

A B C D E F G
      Ціна в гривнях Ціна в доларах Ціна в євро Ціна в фунтах
Курс долара 5,12   154,34 30,14 23,93 16,78
Курс євро 6,45   346,3 67,64 53,69 37,64
Курс фунта 9,2   2234,6 436,45 346,45 242,89
      124,61 98,91 69,35

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

VІ етап. Дослідження отриманих результатів на реальність і на відповідність умові

Після одержання підсумкової таблиці ми повинні проаналізувати її реальність. Наприклад, якщо курс долара до гривні 5,12, то ціна в доларах має бути приблизно в 5 разів менша, ніж ціна в гривнях. Можна також перевірити кілька значень, використавши інші обчислювальні засоби. Можна ввести до таблиці такі контрольні вхідні значення, для яких результат заздалегідь відомий, наприклад, 512 грн. = $100. Аналогічно потрібно перевірити роботу формул і в інших стовпцях.Після макетування внести зміни в цей фрагмент відповідно до нових значень!

 

Якщо таке дослідження виявляє помилки, потрібно шукати їх причини, виправляти їх і знову проходити етапи, наступні за тим, на якому виявилися помилки.

 

Якщо б на ІІІ етапі було вибрано як засіб розв’язування цієї задачі складання спеціальної програми, то далі етапи розв’язування цієї задачі виглядали так:

 

IV етап. Складання алгоритму розв’язування задачі

Алгоритм розв’язування цієї задачі, на основі якого складалась би комп’ютерна програма, був би, наприклад, такий (рис. 2.10):

Намалювати на стрілці, що йде до ІІІ блоку зверху, в кінці стрілку!

 

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

V етап. Складання комп’ютерної програми

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

 

VІ етап. Налагодження програми, дослідження отриманих результатів на реальність і на відповідність умові.

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

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

  1. Тестові приклади повинні бути такими, щоб можна було б нескладно визначити кінцеві результати і порівняти їх з тими, що видає комп’ютерна програма.
  2. Набір цих прикладів має бути таким, щоб він охоплював всі випадки, які можуть зустрітися при використанні програми для реальних даних.

VІІ етап. Використання програми

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

 

Перевірте себе

1. º Що таке комп’ютерна програма?

2. º Що таке програмна логіка і інтерфейс користувача?

3. º Які дані називають вхідними, вихідними, проміжними?

4. º Що таке мова програмування?

5. º Назвіть компоненти, з яких складається мова програмування.

6. · Опишіть кожний з компонентів мови програмування.

7. · Що таке синтаксична помилка?

8. ·Що таке машинна мова програмування? Який вигляд мають команди в цій мові програмування?

9. · Які програми називаються компіляторами? Опишіть загальний принцип їх роботи.

10. * (Додатковий матеріал) Які програми називаються інтерпретаторами? Опишіть загальний принцип їх роботи.

11. * Наведіть класифікацію мов програмування. Опишіть характерні риси кожного з типів мов програмування. Наведіть приклади мов програмування.

 

12. º Назвіть етапи розв’язування задач з використанням ЕОМ, якщо буде використано прикладне програмне забезпечення.

13. º Назвіть етапи розв’язування задач з використанням ЕОМ, якщо буде використано спеціально складене програмне забезпечення.

14. · Опишіть кожний з етапів розв’язування задач з використанням ЕОМ, якщо буде використано прикладне програмне забезпечення.

15. · Опишіть кожний з етапів розв’язування задач з використанням ЕОМ, якщо буде використано спеціально складене програмне забезпечення.

Виконайте завдання

1. · (ДЗ) Знайдіть інформацію про роки створення перших версій мов програмування Basic, PL/1, Cobol, ALGOL, Fortran, Prolog, Lisp, Java, С, С ++, С#, Smalltalk. Коротко запишіть основні характерні риси кожної з них.

2. * (ДЗ) Підготуйте повідомлення про мови програмування, якими складалися програми для комп’ютерів українського виробництва у 50-60 роках ХХ ст.

3. * (ДЗ) Підготуйте повідомлення про характерні риси декларативних мов програмування.

4. Для кожної з наступних задач деталізуйте кожний з етапів її розв’язування з використанням комп’ютера:

а) º Визначити вартість фарби для фарбування підлоги в класній кімнаті.

б) · Визначити вартість шпалер для кабінету інформатики.

в) · Два потяги вийшли одночасно з пунктів А і В назустріч один одному. Відомі відстань між пунктами і швидкості потягів. Визначити відстань між ними через 2 години після виходу; через 3 години. Через скільки годин вони зустрінуться?

г) · (ДЗ) Два потяги вийшли одночасно з пунктів А і В у протилежних напрямках. Відомі відстань між пунктами і швидкості потягів. Визначити відстань між ними через 1 годину після виходу; через 3 години.

д) · У трикутнику відомі довжини двох сторін і міра кута між ними. Знайти довжину третьої сторони і його площу.

е) · (ДЗ) У паралелограмі відомі довжини двох суміжних сторін і міра кута між ними. Знайти його площу і довжини його діагоналей.

 


 

Мова програмування Delphi та середовище розробки Turbo Delphi 2006

1. Що таке комп’ютерна програма? 2. Що таке програмна логіка та інтерфейс користувача? 3. Що таке мова програмування? Назвіть основні компоненти мови програмування. Поясніть призначення кожної з них.

Begin

End;

 

Перший рядок процедури – рядок заголовка. Він складається зі стандартного слова procedure (англ. procedure – процедура), імені процедури TForm1.Button1Clickі круглих дужок, в яких указується, що дана процедура буде виконуватися в результаті настання певної події з певним об’єктом, у даному випадку, події Click з кнопкою Button1. Закінчується рядок заголовка крапкою з комою (;).

Команди процедури, які будуть виконуватися при настанні подіїOnClick, записуються між двома стандартними словами begin(англ. begin – початок) і end(англ. end – кінець). Команди процедури утворюють тіло процедури. Слова beginі end визначають, де починається і де закінчується тіло процедури. Можна сказати, що вони відіграють роль відкриваючої та закриваючої дужки, між якими записується тіло процедури, тому їх називають операторними дужками. Після слова endповинна стояти крапка з комою (;). Кожна команда процедури також повинна закінчуватися крапкою з комою (;).

 

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

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

<ім’я об’єкта>.<ім’я властивості> := <значення або вираз>;

Наприклад,

Form1.Color := clGreen; –встановити колір фону вікна – зелений

Form1.Left := 300; –встановитивідступ лівої межі вікна – 300 пікселів

Form1.Width := Form1.Width*2;– збільшити поточну ширину вікна вдвічі

Button1.Caption := 'Збільшити'; – встановити текст заголовка на кнопці – Збільшити(якщо значенням властивості є текст, то його потрібно брати в одинарні лапки)

Label1.Font.Color := clRed; –встановити колір символів, яким буде відображатися текст у написі, – червоний.

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

 

Наведемо приклад процедури TForm1.Button1Click, виконання якої змінить колір вікна на синій, змінить текст у рядку заголовка, зменшить його ширину на 150 пікселів, змінить положення кнопки і текст на ній:

procedure TForm1.Button1Click(Sender: TObject);

Begin

Form1.Color := clBlue;

Form1.Caption := 'Значення властивостей змінилися';

Form1.Width := Form1.Width - 150;

Button1.Left := 60;

Button1.Top := 100;

Button1.Caption := 'Змінити!';

End;

На рисунку 2.29 зліва наведено вигляд вікна після запуску проекту, а справа – після вибору кнопки Button1.

 

 

 

Середовище розробки Turbo Delphi 2006має зручні засоби допомоги при введенні тексту проекту:

· після введення першої букви імені об’єкта можна натиснути сполучення клавіш Ctrl+Пропуск і відкриється список імен об’єктів, властивостей, процедур, які починаються з цієї букви (рис. 2.30); з цього списку можна вибрати потрібне і цей текст буде вставлено в текст проекту;

· у ході написання тексту проекту середовище розробки слідкує за синтаксичними правилами написання команд; якщо ці правила порушуються, то текст з помилками або текст одразу після нього підкреслюється червоною хвилястою лінією (рис. 2.30, підкреслюється буква L; рис. 2.31, слово Label1 написано правильно, але після крапки не вказана властивість цього об’єкта; тому підкреслюється наступне слово); потрібно уважно слідкувати за цим і вчасно виправляти всі синтаксичні помилки;

· Turbo Delphi 2006не розрізняє великі і малі літери; але якщо слово утворено з кількох слів, прийнято (і зручно) писати першу літеру кожного слова великою; наприклад, TForm1.Button1Click;

· після введення крапки, що розділяє ім’я об’єкта та ім’я властивості, автоматично відкривається список властивостей даного об’єкта (рис. 2.31); далі ім’я властивості можна не вводити з клавіатури, а знайти в списку і натиснути клавішу Enter; такий спосіб введення запобігає допущенню синтаксичних помилок, особливо тими, хто не знає англійської мови;

· після запуску проекту на виконання компілятор аналізує текст на наявність синтаксичних помилок; якщо такі помилки будуть знайдені, то після аналізу всіх помилок компіляція проекту переривається і червоним кольором виділяється фон першого з тих рядків тексту проекту, який містить синтаксичні помилки, або наступного за ним рядка (на рис 2.32 неправильно написане слово Label, тому червоним фоном позначено саме цей рядок, а на рис. 2.33 пропущено крапку з комою в кінці першої команди, у таких випадках червоним фоном позначається наступний рядок); усі інші помилки підкреслюються червоною хвилястою лінією; крім того, у вікні Structureз’являються повідомлення-підказки про вид помилки; потрібно виправити в тексті програми всі синтаксичні помилки і знову запустити проект на виконання.

Ми розглянули, як створити і використати процедуру TForm1.Button1Click - обробник події OnClick. Аналогічно можна створити інші процедури - обробники інших подій.

Уведення і виведення даних під час виконання проекту

Ми розглянули, як змінити значення властивостей елементів керування під час виконання проекту, використовуючи процедуру TForm1.Button1Click – обробник подіїOnClick. Але в розглянутому прикладі при кожному виборі кнопки будуть виконуватися одні й ті самі команди процедури, а значить кожного разу однаково змінюватимуться значення вказаних у командах процедури властивостей об’єктів. Якщо необхідно під час виконання проекту кожного разу по-іншому змінювати значення властивостей вказаних об’єктів, то потрібно значення цих властивостей якимось чином уводити в програму під час її виконання.

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

Створимо таку процедуру TForm1.Button1Click – обробник подіїOnClick, виконання якої дозволить встановити довільний колір вікна і збільшити його висоту на довільну цілу кількість пікселів.

Для цього потрібно:

1. Розмістити на формі 2 поля – перше для введення значення кольору вікна, а друге – для введення кількості пікселів.

2. Змінити значення властивості Text обох цих полів на порожнє.

3. Розмістити зліва від кожного поля по напису, змінити значення властивості Caption першого на Колір, а другого на Розмір.

4. Розмістити на формі у правому нижньому куті кнопку, змінити значення її властивості Caption на Змінити.

5. Створити заготовку процедуриTForm1.Button1Click, яка виконуватиметься після вибору кнопки.

6. Увести текст процедуриTForm1.Button1Click:

procedure TForm1.Button1Click(Sender: TObject);

Begin

Form1.Color := Edit1.Text;

Form1.Hight := Form1.Hight + StrToInt(Edit2.Text);

End;

 

Після запуску проекту відкриється вікно його виконання (рис. 2.34). У відповідні поля потрібно увести потрібні значення кольору форми, наприклад, clRed, і кількості пікселів для збільшення висоти форми, наприклад, 300, після чого вибрати кнопку.

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

Не зважаючи на те, що в друге поле буде введено число, програма сприйматиме його як текст, тобто не зможе виконувати з ним математичних операцій. Тому потрібно спочатку перевести цей текст у ціле число. Для цього використовується функція StrToInt (англ. string to integer – рядок у ціле). Після цього це число додається до поточного значення висоти вікна.

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

 

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

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

Для створення такого проекту потрібно (рис. 2.35):

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

2. Встановити порожні значення властивості Text двох полів і властивості Caption напису для виведення суми.

3. Встановити відповідні значення властивості Caption для інших трьох написів і кнопки.

4. Створити заготовку процедуриTForm1.Button1Click, яка виконуватиметься після вибору кнопки.

5. Увести текст процедуриTForm1.Button1Click(рис. 2.36).

Розглянемо призначення кожної команди наведеної процедури.

Як ми вже зазначали вище, число, яке вводиться в поле, стає значенням його властивості Text і сприймається програмою як текст. Тому перші дві команди процедури є команди присвоювання, які призначені для переведення текстового представлення дійсних чисел у самі дійсні числа (для цього використана функція StrToFloat(англ. string to float – рядок у число з плаваючою десятковою комою, тобто у дійсне число) і присвоювання цих чисел змінним х і у відповідно.

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

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

П’ята команда переводить результат додавання (значення змінної z) з числа в текст, використовуючи функцію FloatToStr (англ. float to string – число з плаваючою десятковою комою у рядок) і присвоює цей текст значенню властивості Caption напису з іменем Label1 для виведення результату.

При виконанні створеного проекту користувач уводить у поля числа (наприклад,
-34,7 і 8,15), вибирає кнопку Додати і одержує результат –26,55 (рис. 2.37).

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

 

Іноді зручно виводити повідомлення не в написи на формі, а в спеціальне окреме вікно. Це можна здійснити, включивши до тексту програми команду ShowMessage(<текст>) (англ. showmessage – показати повідомлення). За цієї команди відкривається спеціальне вікно виведення повідомлення, в якому виводиться текст, указаний у команді. Якщо таку команду включити до процедури, що розглядалася вище, для виведення суми двох уведених дійсних чисел замість останньої команди виведення результату в напис або після цієї команди, то вона виглядатиме так:
ShowMessage('Сума '+FloatToStr(z));.Знак плюс у дужках означає з’єднання двох указаних текстів.Пропуски після слова Сума використовуються для того, щоб у вікні відокремити число від тексту. Результат виконання цієї команди подано на рис. 2.37.

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

 

Змінні та їхні властивості. Правила запису математичних виразів у Delphi

В останній розглянутій процедурі були використані три змінні - х, у, z. У мові програмування Delphi кожна змінна має ім’я, значення і тип.

Запам’ятайте!

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

 

Змінні х, у, z, які використали в останній процедурі, за умовою задачі можуть набувати довільні дійсні значення. Таким значенням відповідає тип Real (англ. real – дійсний). Змінні цього типу можуть набувати цілі й дробові значення від –5×10-324 до 1,7×10308, для кожного значення змінних цього типу виділяється 8 байтів пам’яті.

Типи змінних, які використовуються в процедурі, вказуються після ключового слова var (англ. variable – змінна) у рядку, що знаходиться між рядком заголовку процедури і рядком зі словом begin (рис. 2.36). Цей рядок називається рядком оголошення змінних. Загальний вигляд рядка оголошення змінних такий:

var <список імен змінних одного типу, розділених комою>: <ім’я типу>; <список імен змінних іншого типу, розділених комою>: <ім’я типу>;і т. д.

 

Якщо змінні набуватимуть тільки цілі значення, то для них доцільно використовувати тип Integer (англ. integer – цілий). Змінні цього типу можуть набувати цілі значення від –2 147 483 648 (–232) до 2 147 483 647(232–1), для кожного значення змінних цього типу виділяється 4 байти пам’яті.

Вище тексту складеної процедури знаходиться ще один рядок var. На рис. 2.36 у цьому рядку вказано ім’я однієї змінної Form1 типу TForm. Ця змінна відповідає формі, що використовується у цьому проекті. У цьому рядку вказуються імена і типи тих змінних, які є доступними в будь-якій частині програми. Такі змінні називаються глобальними. На відміну від глобальних змінних, ті змінні, імена і типи, яких описані в рядку заголовку процедури і в рядку var у тексті певної процедури, доступні тільки командам цієї процедури. Такі змінні називаються локальними. Про локальні та глобальні змінні ми поговоримо детальніше в наступних пунктах.

Об’єктам, які ми розташовуємо на формі, також відповідають змінні, імена яких співпадають з іменами відповідних об’єктів, наприклад, Button1, Edit1. Кожна з цих змінних теж має свій тип, наприклад, Button1: TButton,Edit1: TEdit. Імена і типи цих змінних середовище розробки вносить до тексту проекту автоматично в розділ type (англ. type – тип) (рис. 2.36).

 

Загальний вигляд команди присвоювання в Delphi такий:
<ім’я змінної> := <вираз>. Вираз може складатися із значення (константи: число, текст в одинарних лапках та ін.), з імені змінної, або містити кілька значень та імен змінних, поєднаних знаками арифметичних операцій, функції, дужки.

Позначення арифметичних дій і правила запису виразів у Delphi схожі на аналогічні правила, які ви розглядали при вивченні табличного процесора Excel. Але й є певні особливості:

а) при введенні в текст проекту десяткових дробів цілу й дробову частину потрібно розділяти крапкою;

б) при введенні при виконанні проекту в поле десяткового дробу розділювач цілої й дробової частини залежить від налаштувань Windows (в українській версії Windows ХР за замовчуванням встановлена кома);

в) ні в тексті проекту, ні при введенні в поле не можна використовувати звичайні дроби;

г) у Delphi немає операції піднесення до степеня; для піднесення до степеня використовується спеціальна функція, яку ми розглянемо пізніше, а поки що степінь з натуральним показником можна замінювати добутком;

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

 

 

Перевірте себе

1. · Що таке обробник події? Як пов’язати з певною подією її обробник?

2. · Що таке процедура? Опишіть структуру процедури – обробника події.

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

4. ·Як позначаються синтаксичні помилки в середовищі розробки? Наведіть приклади.

5. º Які елементи керування можна використати для введення і виведення даних?

6. º Як вивести повідомлення в окреме спеціальне вікно?

6. · Для чого призначені функції StrToFloat, FloatToStr, StrToInt, IntToStr?

7. ·Що визначає тип змінної? Які типи змінних ви знаєте?

8. º Які значення можуть набувати змінні типу Realі типу Integer? Який розмір ділянки пам’яті виділяється для зберігання змінних кожного з цих типів?

9. · Як описуються типи змінних, які використовуються в процедурі; в усій програмі?

10. º Які змінні називаються локальними і які глобальними?

11. ·Який загальний вигляд команди присвоювання в Delphi?

Виконайте завдання

1. ·Запишіть команди присвоювання змінній х значень наведених виразів:

а) 72 – (15∙(–5)+ 23):7;

б) – 55 + 123+(–4)4:22;

в)

г) (ДЗ) ;

д) (–3,15)3∙5,15+3,12 : (–18);

е) (ДЗ) –31,3:2,15+9,152∙(–3,76).

2. · Запишіть команди присвоювання змінній с значень наведених виразів:

а) 3x2–5y3+7z;

б) (x+y+z):3;

в)

г) (ДЗ)

д)

е) (ДЗ)

3. · Відкрийте новий проект. Змініть заголовок форми на Я змінюю значення властивостей форми. Розмістіть на формі кнопку. Змініть заголовок кнопки Змінити. Змініть ім’я форми на MyForm1. Створіть для події OnClick кнопки заготовку обробника цієї події. Уведіть до процедури команди, які змінять колір вікна на clPurple, зменшать ширину вікна на 100 пікселів і збільшать його висоту на 200 пікселів. Виконайте проект. Виберіть кнопку. Переконайтеся, що змінилися розміри і колір вікна. Створіть у власній папці папку Проект 2.5.3 і збережіть у ній проект.

4. · (ДЗ) Відкрийте новий проект. Змініть заголовок форми на Я вмію змінювати значення властивостей кнопки. Розмістіть на формі кнопку у правому нижньому куті. Змініть заголовок кнопки на Плаваюча кнопка. Створіть для події OnClick кнопки заготовку обробника цієї події. Уведіть до процедури команди, які перемістять кнопку на 30 пікселів угору і на 50 пікселів уверх. Виконайте проект. Виберіть кнопку. Переконайтеся, що змінилося її положення. Виберіть кнопку ще кілька разів. Спостерігайте, що відбуватиметься. Створіть у власній папці папку Проект 2.5.4 і збережіть у ній проект.

5. · Створіть проект для множення двох дійсних чисел. Встановіть жовтий колір фону і синій колір тексту для виведення результату. Передбачте виведення результату ще й у спеціальне вікно для повідомлень. Виконайте проект кілька разів для різних чисел, слідкуйте за правильністю результату. Створіть у власній папці папку Проект 2.5.5 і збережіть у ній проект.

6. · (ДЗ) Створіть проект для знаходження суми квадратів двох цілих чисел вибором однієї кнопки, а різниці квадратів цих самих чисел вибором іншої кнопки. Встановіть блакитний колір фону і червоний колір тексту для виведення результату. Передбачте виведення результату ще й у спеціальне вікно для повідомлень. Виконайте проект кілька разів для різних чисел, слідкуйте за правильністю результату. Створіть у власній папці папку Проект 2.5.6 і збережіть у ній проект.

7. · Відкрийте новий проект. Установіть заголовок форми Доступний/Недоступний. Розмістіть на формі дві кнопки. Для першої встановіть такі значення властивостей: Caption – Кнопка 1, Enabled – True. Для другої відповідно: Caption – Кнопка 2, Enabled – False. Створіть для події OnClick першої кнопки заготовку обробника цієї події і введіть до нього такі команди:

Button2.Enabled := True;

Button1.Enabled := False;

Створіть для події OnClick другої кнопки заготовку обробника цієї події і введіть до нього такі команди:

Button1.Enabled := True;

Button2.Enabled := False;

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

8. · (ДЗ) Відкрийте новий проект. Установіть заголовок форми Видимий/Невидимий. Розмістіть на формі дві кнопки. Для першої встановіть такі значення властивостей: Caption – Кнопка 1, Visible – True. Для другої відповідно: Caption – Кнопка 2, Visible – False. Створіть для події OnClick першої кнопки заготовку обробника цієї події і введіть до нього такі команди:

Button2.Visible := True;

Button1.Visible := False;

Створіть для події OnClick другої кнопки заготовку обробника цієї події і введіть до нього такі команди:

Button1.Visible := True;

Button2.Visible := False;

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

9. · Створіть проект, у якому подія OnClick форми викличе зміну розмірів вікна, його кольору, заголовка і положення на екрані. Створіть у власній папці папку Проект 2.5.9 і збережіть у ній проект.

10. ·Створіть проект, у якому подія OnMouseMove кнопки викличе зміну її розмірів, заголовка і положення у вікні. Створіть у власній папці папку Проект 2.5.10 і збережіть у ній проект.

11. · Створіть проект, у якому подія OnClick поля викличе зміну його розмірів, кольору його фону і появи в полі тексту з вашим прізвищем та іменем символами червоного кольору. Створіть у власній папці папку Проект 2.5.11 і збережіть у ній проект.

12. · (ДЗ) Створіть проект, у якому подія OnClick для напису викличе зміну його розмірів, кольору його фону, положення у вікні і появи тексту Вітаю синім кольором. Колір фону, напис і нові розміри вводити в поля. Створіть у власній папці папку Проект 2.5.12 і збережіть у ній проект.

13. · Створіть проект, який за довжиною, шириною і висотою вашої кімнати обчислюватиме площу підлоги і площу поверхні стін. Створіть у власній папці папку Проект 2.5.13 і збережіть у ній проект.

14. · (ДЗ) Створіть проект для знаходження суми, різниці і добутку двох довільних дійсних чисел. Створіть у власній папці папку Проект 2.5.14 і збережіть у ній проект.

15. * Створіть проект, у якому розташуйте на формі три кнопки. Встановіть такі значення їх властивостей, щоб на початку виконання проекту перша кнопка була видима і доступна, друга – видима і недоступна, третя – невидима і недоступна. Для кожної кнопки створіть процедуру для події OnClick, щоб:

а) вибір першої кнопки робив її невидимою і недоступною, другу кнопку – видимою і доступною, третю кнопку – видимою і недоступною;

б) вибір другої кнопки робив її невидимою і недоступною, третю кнопку – видимою і доступною, першу кнопку – видимою і недоступною;

в) вибір третьої кнопки робив її невидимою і недоступною, першу кнопку – видимою і доступною, другу кнопку – видимою і недоступною.

Створіть у власній папці папку Проект 2.5.16 і збережіть у ній проект.

Практична робота № 6

«Введення й виведення даних. Робота із змінними»

Увага! Під час роботи з комп’ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.

 

1. Відкрийте середовище Turbo Delphi 2006 і створіть новий проект.

2. Установіть для форми колір фону жовтий, розміри 1000 на 600 пікселів, текст заголовка Практична 6.

3. Розмістіть на формі дві кнопки, три поля і два написи.

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

5. Розмістіть на формі біля кожного поля і кожного напису додаткові написи із текстами, що будуть пояснювати їхні призначення.

6. Складіть обробник події OnClick першої кнопки, виконання якого приведе до переміщення форми на 50 пікселів управо і на 30 пікселів униз, кожного поля – на 20 пікселів уліво і на 30 пікселів уверх і зробить їхній фон червоним.

7. Виберіть першу кнопку і переконайтеся у правильності результатів.

8. Складіть обробник події OnClick другої кнопки, виконання якого приведе до знаходження об’єма і площі повної поверхні прямокутного паралелепіпеда, вважаючи, що у поля будуть уведені довжини його ребер.

9. Виберіть другу кнопку і переконайтеся у правильності результатів.

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

11. Створіть у власній папці папку Практична 6 і збережіть у ній проект.

 


 

Налагодження програм

1. Що входить до складу середовища розробки? 2. Яке призначення компіляторів? Які особливості їх роботи? 3. Які помилки у програмному коді виявляються на етапі компіляції? У чому вони полягають? Як вони позначаються…

Then begin

< послідовність команд 1>

End

Else begin

< послідовність команд 2>

End;

(англ. if – якщо, then – тоді, else – інакше)

Є в Delphiй команда неповного розгалуження:

If <логічний вираз>

Then begin

<послідовність команд >

End;

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

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

Звертаємо вашу увагу:

  • якщо після ключових слів Thenі Elseслідують тільки по одній команді, то операторні дужки begin і end можна не ставити;
  • перед Else ставити крапку з комою не можна.

 

Якщо записати в Delphiфрагмент програми розв’язування задачі 1 (блок-схема відповідного алгоритму наведена на рис. 2.46), то він виглядатиме так:

a := StrToFloat(Edit1.Text);

b := StrToFloat(Edit2.Text);

c := StrToFloat(Edit3.Text);

d := StrToFloat(Edit4.Text);

x := c–d;

If x = 0

Then Label1.Caption := 'Вираз значення не має: ділення на нуль'

Else begin

y := a–b;

z := y/x;

Label1.Caption := FloatToStr(z);

End;

Звертаємо вашу увагу: обчислення значення виразу можна було б записати не двома командами, а однією: z := (a–b)/x.

 

Логічний вираз у команді розгалуження може бути простим або складеним. Складені логічні вирази утворюються з простих шляхом використання розглянутих у попередньому пункті операцій кон’юнкції (and), диз’юнкції (or), заперечення (not). Порядок виконання цих операцій в Delphi такий самий, як і в математичній логіці.

 

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

Задача 4. Обчислити значення заданої функції

 

Фрагмент програми для розв’язування цієї задачі виглядатиме так:

x := StrToFloat(Edit1.Text);

If (x > –3) and (x <5)

Then y := 2*x – 12

Else y := 7 – 8*x;

Label1.Caption := FloatToStr(y);

 

 

Команда розгалуження в Delphi може містити в собі іншу команду розгалуження. Ось як виглядатиме команда розгалуження для алгоритму, наведеному на рис. 2.49:

If x = у

Then Label1.Caption := 'Числа рівні'

Else If x > у

Then Label1.Caption := 'Перше число більше'

Else Label1.Caption := 'Перше число менше';

Перемикачі та прапорці

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

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

Для розміщення на формі перемикача потрібно встановити вказівник на рядок TRadioButton (англ. radio button – кругла кнопка) вікна Tool Palette і двічі клацнути ліву кнопку миші, а для розміщення прапорця – встановити вказівник на рядок TCheckBox (англ. check box – коробка для перевірки) і також двічі клацнути ліву кнопку миші.

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

 

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

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

Для цього розмістимо на формі кнопку і три перемикачі (рис. 2.51). При розміщенні перемикачів на формі для кожного з них за замовчуванням встановлюється значення властивості CheckedFalse. До запуску проекту змінимо у першого перемикача значення цієї властивості на True. Після цього на формі він виглядатиме вибраним (рис. 2.51). Таким він буде і після запуску проекту на виконання.

Створимо процедуру для опрацювання події OnClick кнопки, і до її тексту помістимо таку команду:

If RadioButton1.Checked

Then Form1.Caption := ‘Заголовок змінений’

Else If RadioButton2.Checked

Then Form1.Color := clRed

Else begin

Form1.Width := 600;

Form1.Height := 300;

End;

Розпочинатися виконання цієї команди буде з визначення значення властивості RadioButton1.Checked.

Якщо при настанні події OnClick кнопки вибраним буде перший перемикач, то RadioButton1.Checked = true. Тому виконається команда змінення заголовка форми, а інші частини всієї цієї команди виконуватися не будуть.

Якщо при настанні події OnClick кнопки вибраним буде другий перемикач, то RadioButton1.Checked = false. Тому будуть виконуватися команди після першого ключового слова Else, тобто внутрішня команда розгалуження. При її виконанні визначається значення властивості RadioButton2.Checked. Оскільки вибраний другий перемикач, то це значення дорівнює true. Тому виконається команда змінення кольору форми, а інші частини команди виконуватися не будуть.

Якщо ж при настанні події OnClick кнопки вибраним буде третій перемикач, то RadioButton1.Checked = false. Тому будуть виконуватися команди після першого ключового слова Else, тобто внутрішня команда розгалуження. При її виконанні визначається значення властивості RadioButton2.Checked. Оскільки другий перемикач не вибраний, то її значення false. Тоді будуть виконуватися команди після другого ключового слова Else, тобто дві команди змінення розмірів форми.

 

Якщо перед запуском проекту на виконання у жодного перемикача не змінювати значення властивості Checked, встановлені за замовчуванням, то при запуску проекту жоден з них не буду вибраним. Якщо і під час виконання проекту не вибрати жоден з перемикачів і вибрати кнопку, то зміняться розміри форми (подумайте самостійно, чому відбудуться саме такі змінення). Щоб так не сталося, потрібно або обов’язково вибирати один з перемикачів, або після другого ключового слова Else вставити ще одну команду розгалуження:

If RadioButton1.Checked

Then Form1.Caption := ‘Заголовок змінений’

Else If RadioButton2.Checked

Then Form1.Color := clRed

Else If RadioButton2.Checked

Then

Begin

Form1.Width := 600;

Form1.Height := 300;

End;

 

Поясніть, як виконуватиметься ця команда, якщо жоден з перемикачів не буде вибраний, і чому.


Розглянемо тепер, як можна використати прапорці для реалізації розгалуження.

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

Для цього розмістимо на формі кнопку і три прапорці (рис. 2.52). При розміщенні прапорців на формі для кожного з них за замовчуванням автоматично встановлюється значення властивості CheckedFalse. Оскільки при виконанні проекту позначка жодного прапорця може бути не встановлена, то доцільно залишити такі початкові значення властивості Checked усіх прапорців.

Створимо процедуру для опрацювання події OnClick кнопки, і до її тексту помістимо такі три послідовні (не вкладені одна в одну) команди розгалуження:

If CheckBox.Checked

Then Form1.Caption := ‘Заголовок змінений’;

If CheckBox.Checked

Then Form1.Color := clRed;

If CheckBox.Checked

Then begin

Form1.Width := 500;

Form1.Height := 200;

End;

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

З розглянутих вище прикладів можна зробити такі висновки:

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

Перевірте себе

1. ºЯке значення може бути результатом виконання команди перевірки умови (обчислення значення логічного виразу)?

2. º Як позначається команда перевірки умови в блок-схемі алгоритму?

3. º Назвіть характерні особливості розгалуження.

4. · Зобразіть блок-схеми повного і неповного розгалуження. Опишіть особливості їх виконання

5. · Поясніть відмінності повного і неповного розгалуження.

6. * Наведіть приклади правил з української мови, математики, інших предметів, що містять розгалуження.

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

8. º Наведіть загальний вигляд команд повного і неповного розгалуження в Delphi.

9. · Поясніть виконання команд повного і неповного розгалуження в Delphi.

10. º Які операції використовують для утворення складених логічних виразів у Delphi?

11. · Для чого використовують прапорці та перемикачі?

12. º Що визначає властивість Checked для перемикачів і прапорців?

13. ·. Поясніть відмінності використання команд розгалуження при складанні проектів з прапорцями та перемикачами.

14. · Поясніть хід виконання команди:

If <логічний вираз 1>

Then begin

<команди 1>

End

Else If < логічний вираз 2>

Then begin

<команди 2>

End

Else begin

<команди 3>

End;

15. · Поясніть хід виконання послідовності команд:

If < логічний вираз 1>

Then begin

<команди 1>

End;

If < логічний вираз 2>

Then begin

<команди 2>

End;

Виконайте завдання

1. º Виконайте алгоритм:

1. Задумати два цілих числа.

2. Обчислити суму задуманих чисел.

3. Порівняти "Знайдена сума більша, ніж 30?".

4. Якщо істина, то повідомити "Більше" і виконати команду 8; якщо хиба, то виконати команду 5.

5. Порівняти "Знайдена сума менша, ніж 30".

6. Якщо істина, повідомити "Менше" і виконати команду 8, якщо хиба і, виконати команду 7.

7. Повідомити "Дорівнює".

8. Закінчити виконання алгоритму

Які числа ви задумали і який результат отримали? Яку назву можна дати цьому алгоритму або яку задачу розв’язує цей алгоритм?

2. (ДЗ)· Складіть блок схему алгоритму, наведеного в № 1. Виконайте цей алгоритм для трьох різних пар цілих чисел. Підберіть ці пари так, щоб кожного разу виконання алгоритму йшло по-іншому.

3. · Складіть блок-схему алгоритму обчислення значення виразу: (a + b) – c : a. Виконайте його при різних значеннях a, b, c. Підберіть числа так, щоб кожного разу виконання алгоритму йшло по-іншому.

4. (ДЗ) · Складіть блок-схему алгоритму обчислення значення виразу: (a + b) – c : ( a–2b). Виконайте його при різних значеннях a, b, c. Підберіть числа так, щоб кожного разу виконання алгоритму йшло по-іншому.

5. · Складіть блок-схему алгоритму знаходження x з рівняння: ax = b. Виконайте його при: 1) a = 2; b = –8; 2) a = 20; b = 0; 3) a = 0; b = 12; 4) a = 0; b = 0.

6. (ДЗ) · Складіть блок-схему алгоритму знаходження x з рівняння: ax + b = c. Виконайте його при: 1) a = 2; b = – 8; c = 18; 2) a = 20; b = 5; c = 5; 3) a = 0; b = 12; c = 3; 4) a = 0; b = 10; c = 10.

7. * Складіть блок-схему алгоритму розв’язування квадратного рівняння. Виконайте його при різних значеннях коефіцієнтів рівняння.

8. (ДЗ) * Є деяка кількість однакових на вигляд монет. Відомо, що серед них є одна фальшива і вона важча за справжню. Складіть алгоритм виявлення фальшивої монети найменшою кількістю зважувань на шалькових терезах без гир, якщо кількість монет дорівнює: 1) 3; 2) 9; 3) 27; 4) 30.

9. · (ДЗ) Створіть проект, який визначає більше з двох нерівних дійсних чисел. Створіть у власній папці папку Проект 2.8.9 і збережіть у ній проект.

10. · Створіть проект, який визначає менше з двох довільних дійсних чисел або виводить повідомлення, що числа рівні. Створіть у власній папці папку Проект 2.8.10 і збережіть у ній проект.

11. º (ДЗ) Створіть проект, який обчислює модуль довільного дійсного числа. Створіть у власній папці папку Проект 2.8.11 і збережіть у ній проект.

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

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

14. * Створіть проект, в якому кнопка буде переміщуватися на 20 пікселів вправо при наведенні на неї вказівника. Після того, як кнопка зникне за правою границею вікна, вона повинна з’явитися біля лівої його границі. Створіть у власній папці папку Проект 2.8.14 і збережіть у ній проект.

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

16. · (ДЗ) Створіть проект, в якому можна обчислити значення функції .

Створіть у власній папці папку Проект 2.8.16 і збережіть у ній проект.

17. · Створіть проект, в якому можна обчислити суму, або різницю, або добуток або частку двох довільних дійсних чисел у залежності від вибраного перемикача. Створіть у власній папці папку Проект 2.8.17 і збережіть у ній проект.

18. ·(ДЗ) Створіть проект, в якому можна обчислити суму, різницю, добуток, частку двох довільних дійсних чисел у залежності від встановлених позначок прапорців. Створіть у власній папці папку Проект 2.8.18 і збережіть у ній проект.

19. · Робітник виготовляє деталі. Відомо, скільки деталей він повинен виготовити за місяць (план), кількість реально виготовлених ним деталей і вартість однієї деталі. Якщо робітник виконує план, то він одержує премію в розмірі 10% від заробленої в результаті виготовлення деталей суми. Якщо робітник перевиконує план, то його премія становить 30% від заробленої суми. А якщо він недовиконає план, то з нього знімається 20% від заробленої суми. Створіть проект, який визначає суму, зароблену робітником за місяць. Створіть у власній папці папку Проект 2.8.19 і збережіть у ній проект.

Практична робота № 8

«Складання програм з розгалуженнями»

Увага! Під час роботи з комп’ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.

 

1. Відкрийте середовищерозробки Turbo Delphi 2006 і створіть новий проект.

2. Розмістіть на формі елементи керування для розв’язання задачі: Відомо довжини сторін двох прямокутників. Обчислити площі прямокутників та порівняти їх. Визначити, чи є прямокутники квадратами. З’ясувати, чи вміститься один прямокутник у середину другого. Повідомити визначені результати. У проекті:

а) складіть обробник події OnClick першої кнопки для обчислення площ прямокутників та виведення повідомлення про те, у якого прямокутника більша площа;

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

в) складіть обробник події OnClick третьої кнопки, виконання якого приведе до визначення, чи вміститься перший прямокутник у середину другого або другий прямокутник у середину першого залежно від вибраного перемикача;

г) виконайте складені процедури і переконайтеся, що результати їх роботи правильні.

3. Створіть у власній папці папку Практична 8 і збережіть у ній проект.


 

2.9. Цикли в алгоритмах і в програмах

Пригадайте!

1. Які процеси називаються циклічними? Наведіть приклади.

2. Опишіть характерні властивості лінійних алгоритмів (фрагментів алгоритмів), алгоритмів з розгалуженням.

3. Як виглядає і як виконується команда повного розгалуження в Delphi?

4. Як виглядає і як виконується команда неповного розгалуження в Delphi?

5. Як і для чого використовуються перемикачі та прапорці?

Цикли в алгоритмах

У лінійних алгоритмах і в алгоритмах з розгалуженням кожна команда алгоритму могла бути виконана не більше одного разу.

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

 

Задача 1. Є діжка і відро. Використовуючи відро, наповнити діжку водою. (Вважаємо, що існує джерело води, з якого можна наповнювати відро, і води у джерелі достатньо для наповнення діжки.)

Розглянемо виконавця з такою системою команд:

1. Наповнити відро водою.

2. Вилити воду з відра в діжку.

3. Перевірити умову «Діжка неповна?».

Оскільки з умови задачі невідомо, чи є в діжці вода, виконавець повинен спочатку перевірити умову «Діжка неповна?». Якщо результат цієї перевірки true, то він повинен наповнити відро водою, вилити її з відра в діжку і знову перевірити умову «Діжка неповна?». І так до тих пір, поки результат перевірки цієї умови стане false. Після цього можна припинити виконання алгоритму.

Подамо алгоритм розв’язування цієї задачі для розглянутого виконавця у словесній формі і у формі блок-схеми (рис. 2.53).

1. Перевірити умову «Діжка неповна?»

2. Якщо результат виконання попередньої команди true, то виконати команду 3, якщоfalse, то закінчити виконання алгоритму.

3. Наповнити відро водою.

4. Вилити воду з відра в діжку.

5. Перейти до виконання команди 1.

У цьому алгоритмі команди 3-5 можуть бути виконані більше одного разу. Чергове виконання цих команд залежить від результату перевірки умови в команді 1. Якщо цей результатtrue, то команди 3-5 виконуються ще раз, якщо жfalse, то ці команди більше не виконуватимуться.

Звертаємо вашу увагу: команди 3-5 саме «можуть бути виконані більше одного разу», а не «обов’язково виконуються більше одного разу». Адже можливо, що після першого ж виливання води з відра в діжку вона наповниться і виконання алгоритму закінчиться. Крім того, якщо діжка з самого початку є повною, то ці команди не виконаються жодного разу.

Запам’ятайте!

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

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

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

Загальний вигляд циклу з передумовою наведено на рис. 2.54. Виконання такого циклу відбувається так: виконавець виконує команду перевірки умови (обчислення значення логічного виразу); якщо результат виконання цієї команди true, то виконавець виконуєкоманди тіла циклу, після чого знову виконуєкоманду перевірки умови (обчислення значення логічного виразу); якщо ж результат виконання команди перевірки умови (обчислення значення логічного виразу) false, то виконавець переходить до виконання першої команди наступного фрагмента алгоритму.

Верстальнику: на рис. 2.54 в ромбі написати «Перевірка умови (обчислення значення логічного виразу)

 

Якщо б в умові задачі 1 було відомо, що діжка порожня, то виконавцю не потрібно було б одразу перевіряти умову «Діжка неповна?». Він мав би хоча б один раз наповнити відро водою, перелити воду з відра в діжку і лише після цього перевірити умову «Діжка неповна?» (або умову «Діжка повна?», якщо вона входить до системи його команд).

Блок-схема алгоритму розв’язування такої задачі з використанням умови «Діжка повна?» виглядає так (рис. 2.55):

Верстальнику: на рис. 2.55 Стрілку Так пустити справа від ромба і вниз, а Ні – зліва від ромба і вгору!

 

Рис. 2.55. Блок-схема алгоритму розв’язування модифікованої задачі 1

 

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

Загальний вигляд блок-схеми циклу з післяумовою наведено на рис. 2.56. Верстальнику: на рис. 2.56 Стрілку Так пустити справа від ромба і вниз, а Ні – зліва від ромба і вгору! І в ромбі написати «Перевірка умови (обчислення значення логічного виразу)

Виконання такого циклу відбувається так: виконавець виконує команди тіла циклу, після чого виконує команду перевірки умови (обчислення значення логічного виразу); якщо результат виконання цієї команди false, то виконавець знову виконуєкоманди тіла циклу; якщо ж true, то виконавець переходить до виконання першої команди наступного фрагмента алгоритму.

Звертаємо вашу увагу: якщо в алгоритмі, блок-схема якого наведена на рис. 2.55 використати умову «Діжка неповна?», то виконання циклу продовжувалося б при результаті true виконання команди перевірки умови і припинялося б при результаті false виконання цієї команди.

 

 

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

Зауважимо, що більшість алгоритмів містять і лінійні фрагменти, і розгалуження, і цикли.

 

Команда циклу з лічильником в Delphi

У мові програмуванні Delphi є кілька команд, які можуть реалізувати цикл. Одна з них – команда циклу з лічильником. Її доцільно використовувати в тих випадках, коли кількість повторень команд тіла циклу відома до початку виконання команди циклу. Загальний вигляд цієї команди такий:

for <ім′я змінної> := <вираз1> to <вираз2> do

Begin

<команди тіла циклу>

End;

Рядок for … to … do (англ. for – для, to – до,do – робити, виконувати)називається рядком заголовку команди циклу з лічильником. Змінна в рядку заголовка команди циклу з лічильником, що стоїть перед знаком присвоювання, називається лічильником циклу.

Лічильник циклу, вираз1 і вираз2 мають набувати тільки цілих значень. Якщо тіло циклу складається лише з однієї команди, операторні дужки begin і end можна не ставити.

Виконується команда циклу з лічильником так:

1. Надати лічильнику циклу значення виразу1.

2. Обчислити значення логічного виразу i £ вираз 2

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

4. Збільшити значення лічильника циклу на 1.

5. Перейти до виконання команди 2.

Блок-схема виконання команди циклу з лічильником наведена на рис. 2.57 (і – лічильник циклу).

 

Для ілюстрації виконання команди циклу з лічильником розглянемо фрагмент програми, в якому обчислюється сума 1! + 2! + 3! +4! (нагадаємо, що n! = 1×2×3×...×n):

var a, s, i: Integer;

Begin

s := 0; a := 1;

For i := 1 to 4 do

Begin

a := a*i;

s := s + a;

End;

Label1.Caption := IntToStr (s);

End;

Функція IntToStr(англ. integerto string– ціле в рядок) використовується для переведення цілого числа в його текстове представлення для виведення в напис.

Виконаємо цей фрагмент програми.

Команда Результат виконання
s := 0 s = 0
a := 1 a = 1
i := 1 i = 1
і <= 4 (1 <= 4) = true
a := a*i a = 1*1= 1
s := s + a s = 0 + 1 = 1
i := i + 1 i = 2
і <= 4 (2 <= 4) = true
a := a*i a = 1*2= 2
s := s + a s = 1 + 2 = 3
i := i + 1 i = 3
і <= 4 (3 <= 4)= true
a := a*i a = 2*3= 6
s := s + a s = 3 + 6 = 9
i := i + 1 i = 4
і <= 4 (4 <= 4) =true
a := a*i a = 6*4= 24
s := s + a s = 9 + 24 = 33
i := i + 1 i = 5
і <= 4 (5 <= 4) = false
Label1.Caption := IntToStr (s) Label1.Caption = 33

Звертаємо вашу увагу:

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

2. Існує різновид команди циклу з лічильником, який змінюється в зворотному порядку:

For <ім′я змінної> := <вираз1> downto <вираз2> do

Begin

<команди тіла циклу>

End;

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

 

Команди циклу з передумовою і циклу з післяумовою в Delphi

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

Загальний вигляд команди циклу з передумовою такий:

while <логічний вираз> do

Begin

<команди тіла циклу>

End;

(англ. while – поки). Якщо тіло циклу складається лише з однієї команди, операторні дужки begin і end можна не ставити.

 

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

6. Обчислити значення логічного виразу.

7. Якщо це значення true, то виконати команди тіла циклу і перейти до команди 1, а якщо false, то виконати команду, наступну за командою циклу.

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

Задача 2. Обчислити суму додатних членів арифметичної прогресії з додатним першим членом і від’ємною різницею.

 

Домовимося вводити перший член прогресії в поле Edit1, а її різницю – в поле Edit2.

var a, d, s: Real;

Begin

a := StrToFloat (Edit1.Text);

d := StrToFloat (Edit2.Text);

s := 0;

While a > 0 do

Begin

s := s + a;

a := a + d;

End;

Label1.Caption := FloatToStr (s);

End;

Виконаємо цей фрагмент програми для деякого набору значень a і d.

Команда Результат виконання
a := StrToFloat (Edit1.Text) a = 7
d := StrToFloat (Edit2.Text) d = -3
s := 0 s = 0
a > 0 (7 > 0) = true
s := s + a s = 0 + 7 = 7
a := a + d a = 7 +(-3) = 4
a > 0 (4 > 0) = true
s := s + a s = 7 + 4 = 11
a := a + d a = 4 +(-3) = 1
a > 0 (1 > 0) = true
s := s + a; s = 11 + 1 = 12
a := a + d a = 1 +(-3) = -2
a > 0 (-2 > 0) = false
Label1.Caption := FloatToStr (s) Label1.Caption = 12

 

Загальний вигляд команди циклу з післяумовою такий:

Repeat

<команди тіла циклу>

until <логічний вираз>;

(англ. repeat – повторити, until – доки, не раніше як).

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

1. Виконати команди тіла циклу.

2. Обчислити значення логічного виразу.

3. Якщо це значення false, то виконати п.1, а якщоtrue, то виконати команду, наступну за командою циклу.

 

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

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

var a, d, s: Real;

Begin

a := StrToFloat (Edit1.Text);

d := StrToFloat (Edit2.Text);

s := 0;

Repeat

s := s + a;

a := a + d;

until a <= 0;

Label1.Caption := FloatToStr (s);

End;

Виконаємо цей фрагмент програми для деякого набору значень a і d.

Команда Результат виконання
a := StrToFloat (Edit1.Text) a = 7
d := StrToFloat (Edit2.Text) d = -3
s := 0 s = 0
s := s + a s = 0 + 7 = 7
a := a + d a = 7 +(-3) = 4
а <= 0 (4 <= 0) = false
s := s + a s = 7 + 4 = 11
a := a + d a = 4 +(-3) = 1
а <= 0 (1 <= 0) = false
s := s + a s = 11 + 1 = 12
a := a + d a = 1 +(-3) = -2
а <= 0 (-2 <= 0) = true
Label1.Caption := FloatToStr (s) Label1.Caption = 12

Звертаємо вашу увагу:

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

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

Приклади програм з використанням циклів

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

При розв’язуванні багатьох задач доцільно використовувати ще 2 арифметичні операції: знаходження неповної частки і остачі при діленні цілого числа на натуральне. Нагадаємо, що для будь-якого цілого числа m і натурального числа n існує єдина пара цілих чисел q і r (0 ≤ r < n), таких що m = nq + r. Число q називається неповною часткою, а число rостачею. Для знаходження неповної частки в Delphi використовується операція div(англ. divide – поділити), а для знаходження остачі – mod(англ. modulo – остача від ділення). Наприклад,

23 div 5 = 4, 23 mod 5 = 3,

28 div 4 = 7, 28 mod 4 = 0,

2 div 3 = 0, 2 mod 3 = 2.

Задача 3. Дано натуральне числоn, більше 1. З’ясувати, чи є це число простим.

 

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

var i, k, n: Integer;

Begin

n := StrToInt(Edit1.Text);

k := 0;// Кількість дільників числаn

for i := 1 to n do

if n mod i = 0 //Перевірка, чи є число i дільником числа n

then k := k+1;//Збільшення на 1 кількості дільників числа n, якщо число i є його дільником

if k = 2

then Label1.Caption := 'просте'

else Label1.Caption := 'не просте';

End;

Функція StrToInt(англ. stringto integer– рядок в ціле) використовується для переведення текстового представлення цілого числа в саме ціле число.

 

Але час виконання програми для розв’язування цієї задачі можна суттєво зменшити, якщо врахувати такі властивості натуральних чисел:

1. Будь-яке натуральне число, більше 1, завжди має 2 дільники (одиницю і саме це число). Тому простим буде таке натуральне число, яке не матиме інших дільників.

2. Серед натуральних чисел тільки одне парне число є простим (2), всі інші прості числа – непарні.

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

Якщо при складання програми використати вказані властивості, то відповідний фрагмент програми може бути таким:

var i, k, n: Integer; f: Boolean;

Begin

n := StrToInt(Edit1.Text);

f := true;// Будемо поки що вважати число nпростим, адже дільників у нього поки що не знайшлося

if (n mod 2 = 0) and (n <> 2)

then f := false// Якщо число n парне і не дорівнює 2, то воно не просте

Else

Begin

k := 3;// Якщо число непарне, то будемо шукати його дільники, починаючи з числа 3

while (k <= sqrt(n)) and f do // Шукати дільники числа будемо серед чисел, які не перевищують арифметичний квадратний корінь з числа n, і поки такий дільник не знайшовся

if n mod k = 0// перевірка, чи є число k дільником числа n

then f := false

else k := k + 2;// Якщо k не є дільником n, то наступний можливий дільник – наступне непарне число

End;

If f

then Label1.Caption := 'просте'

else Label1.Caption := 'не просте';

End;

У наведеному фрагменті програми використана логічна змінна f. Її значення визначатиме, чи є число n простим чи ні: true – просте, false– не просте. Тип логічної змінної в Delphi позначається Boolean, на честь Джорджа Буля. Для обчислення арифметичного квадратного кореня використана стандартна функція sqrt (англ. square root – квадратний корінь).

 

Задача 4. Знайти найбільший спільний дільник (НСД) двох даних натуральних чисел aіb (a > b).

 

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

Але більш простою виявляється програма, яка реалізує інший метод знаходження НСД, що базується на такому математичному твердженні: якщо a > b, то НСД (a, b) = НСД (b, r), де r – остача від ділення a на b. Ідея цього методу полягає в тому, що послідовно замінюються числа, для яких потрібно знайти НСД: більше з них замінюється на менше, а менше – на остачу від ділення більшого числа на менше. Закінчується цей процес замінювання тоді, коли остача від ділення стає рівною нулю. Тоді НСД дорівнює останній відмінній від 0 остачі від ділення.

Наприклад,

НСД(80, 12) = НСД(12, 8) = НСД(8, 4) = НСД(4,0) = 4,

НСД(125, 54) = НСД(54, 17) = НСД(17, 3) = НСД(3,2) = НСД(2,1) = НСД(1, 0) = 1.

Цей метод знаходження НСД називається алгоритмом Евкліда. Перевірте цей метод знаходження НСД для різних пар натуральних чисел.

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

var a, b, r: Integer;

Begin

a := StrToInt(Edit1.Text);

b := StrToInt(Edit2.Text);

r := a mod b;

while r <> 0 do

Begin

a := b;

b := r;

r := a mod b;

End;

Label1.Caption := IntToStr (b);

End;

 

Звертаємо вашу увагу, що наведений фрагмент програми працює правильно і в тих випадках, коли
a ≤ b. Спробуйте самостійно з’ясувати, чому.

 

Цікаві факти з історії

Евклід(біля300 р. до н. е. – біля 265 р. до н.е.) (рис. 2.58) – відомий давньогрецький математик. Основною заслугою Евкліда вважається його величезна робота по збиранню і систематизації усіх відомих на той час математичних фактів геометрії та арифметики у 13 книгах, які він назвав «Початки».

Історики математики знайшли підтвердження того, що алгоритм Евкліда для знаходження НСД був відомий ще й до Евкліда. А причиною того, що його назвали на честь Евкліда, напевне є те, що Евклід уперше його детально описав у своїх «Початках».

Рис. 2.58. Евклід

 

Перевірте себе

1. º Що таке цикл в алгоритмі?

2. · Наведіть блок-схему циклу з передумовою. Поясніть виконання цього циклу. Наведіть приклади циклів з передумовою.

3. · Наведіть блок-схему циклу з післяумовою. Поясніть виконання цього циклу. Наведіть приклади циклів з післяумовою.

4. · Чи можуть команди тіла циклу не виконуватись жодного разу? Поясніть свою відповідь. Наведіть приклади.

5. * Чи може виконання циклу ніколи не закінчитися? Поясніть свою відповідь. Наведіть приклади.

6. · Поясніть відмінності у виконанні основних алгоритмічних структур: слідування, розгалуження, цикл.

7. º Наведіть загальний вигляд команди циклу з лічильником в Delphi.

8. · Поясніть виконання команди циклу з лічильником в Delphi.

9. º Наведіть загальний вигляд команди циклу з передумовою і команди циклу з післяумовою в Delphi.

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

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

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

 

Виконайте завдання

1. Виконайте алгоритми:

а)º б) ·

 


 

2. (ДЗ) Виконайте алгоритми:

а) º б) ·

 

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

а) р := 1; a := 2; б) k := 1; a := 12; в) s := 0; a := 1; k := 1;

for i := 1 to 5 do while a < 100 do repeat

begin begin s := s + a;

a := 3*a + 1; а := 2*а – 4; k := k + 1;

р := р * a; k := k + 1; a := k * k;

end; end; until a > 50;

4. (ДЗ) · Виконайте фрагмент програми та з’ясуйте, якими будуть значення змінних після його завершення:

а) p := 1; a := 8; б) k := 1; a := 100; в) s := 0; a := 5428;

for i := 1 to 4 do while a > 10 do repeat

begin begin c := a mod 10;

a := 2*a – 5; а := а div 2; s := s + c;

р := р * a; k := k + 1; a := a div 10;

end; end; until a < 1;

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

6. (ДЗ) · Виконайте в таблиці фрагмент програми для задачі 4, наведеної в тексті пункту.

7. º Складіть блок-схему алгоритму знаходження суми перших 5 членів послідовності, перший член якої х = 7, а кожен наступний обчислюється на основі попереднього значення за формулою х := 2*х + 3. Виконайте алгоритм.

8. (ДЗ) º Складіть блок-схему алгоритму знаходження добутку перших 8 членів арифметичної прогресії з першим членом, рівним 9 та різницею 4. Виконайте алгоритм.

9. · Складіть блок-схему алгоритму знаходження кількості додатних членів арифметичної прогресії з відомим першим членом та різницею -5. Виконайте алгоритм для трьох різних значень першого члену прогресії. Підберіть ці значення так, щоб команди тіла циклу виконались кілька разів; один раз; жодного разу.

10. (ДЗ) · Складіть блок-схему алгоритму знаходження суми двоцифрових членів арифметичної прогресії з першим членом 25 та відомою різницею. Виконайте алгоритм для трьох різних значень різниці прогресії. Підберіть ці значення так, щоб команди тіла циклу виконались кілька разів; один раз; жодного разу.

11. * Складіть блок-схему алгоритму розв’язання задачі: визначити, на скільки квадратів можна розрізати прямокутну смужку паперу з заданими довжиною та шириною, якщо на кожному кроці від смужки відрізати квадрат, сторона якого дорівнює менший із сторін смужки, що залишилась після попереднього відрізу. Виконайте алгоритм для двох різних значень початкових даних. Підберіть ці значення так, щоб команди тіла циклу виконались кілька разів; один раз.

12. · Створіть проект, в якому можна обчислити добуток перших N членів послідовності чисел, перше з яких дорівнює x, а кожне наступне удвічі менше попереднього. Створіть у власній папці папку Проект 2.9.12 і збережіть у ній проект.

13. (ДЗ) · Створіть проект, в якому можна обчислити суму перших N членів послідовності чисел, перше з яких дорівнює x, а кожне наступне дорівнює квадрату попереднього. Створіть у папці Мої документи папку Проект 2.9.13 і збережіть у ній проект.

14. · Створіть проект, в якому можна обчислити кількість двоцифрових чисел у арифметичній прогресії. Перший член прогресії більший від 10, різниця більше нуля. Створіть у власній папці папку Проект 2.9.14 і збережіть у ній проект.

15. (ДЗ) · Створіть проект, в якому можна обчислити середнє арифметичне членів геометричної прогресії, що більші за одиницю. Перший член прогресії більший від 100, знаменник менше від одиниці, але більший нуля. Створіть у папці Мої документи папку Проект 2.9.15 і збережіть у ній проект.

16. · Створіть проект, в якому можна знайти кількість дільників заданого натурального числа. Створіть у власній папці папку Проект 2.9.16 і збережіть у ній проект.

17. * Створіть проект, в якому можна обчислити кількість простих чисел серед перших 100 натуральних чисел. Створіть у власній папці папку Проект 2.9.17 і збережіть у ній проект.

18. · Створіть проект для розв’язання задачі: Людина поклала у банк певну суму грошей. Щорічно банк додає до суми наперед визначений відсоток від суми, що зберігається на рахунку після попереднього року. Яка сума буде на рахунку через N років? Створіть у власній папці папку Проект 2.9.18 і збережіть у ній проект.

19. (ДЗ) · Створіть проект для розв’язання задачі: Людина поклала у банк певну суму грошей. Щорічно банк додає до суми наперед визначений відсоток від суми, що зберігається на рахунку після попереднього року. Через скільки років сума на рахунку стане не меншою від S грн? Створіть у папці Мої документи папку Проект 2.9.19 і збережіть у ній проект.

20. * Створіть проект для обчислення суми цифр заданого натурального числа, кількість цифр якого не більше 9. Створіть у власній папці папку Проект 2.9.20 і збережіть у ній проект.

 

Практична робота № 9

«Програмування циклічних обчислень»

Увага! Під час роботи з комп’ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.

 

1. Відкрийте середовище візуального проектування Turbo Delphi 2006.

2. Створіть проект для розв’язування задачі: Перед початком повені рівень води у річці становив Н метрів. Під час повені кожну годину рівень води зростав на Р відсотків від рівня попередньої години. Яким буде рівень води через N годин після початку повені? Через скільки годин після початку повені рівень води буде не менше, ніж К метрів?

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

2. Установіть на першій кнопці напис Питання 1, на другій – Питання 2, на третій – Спочатку, у полів – порожній текст.

3. Складіть обробник події OnClick першої кнопки, виконання якого приведе до виведення у вікно повідомлення відповіді на перше запитання задачі.

4. Виконайте складену процедуру і переконайтеся, що результати її роботи правильні.

5. Складіть обробник події OnClick другої кнопки, виконання якого приведе до знаходження відповіді на друге запитання задачі і виведення його в окремий напис.

6. Виконайте складену процедуру і переконайтеся, що результати її роботи правильні.

7. Складіть обробник події OnClick третьої кнопки, виконання якого призведе до очищення тексту у полях та напису з відповіддю на друге запитання задачі.

3. Створіть у власній папці папку Практична 9 і збережіть у ній проект.

 


 

2.10. Процедури і функції користувача та стандартні процедури і функції в Delphi

Пригадайте!

1. Що таке процедура?

2. Що таке обробник події? Як створити обробник події?

3. Який загальний вигляд процедур-обробників подій, які ви створювали в Delphi?

4. Які змінні називаються локальними, а які глобальними? Поясніть різницю між ними.

5. Як у Delphi змінити числовий тип змінної на текстовий і навпаки?

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

У попередніх пунктах ви створювали і використовували процедури, які були пов’язані з певними подіями і були методами певних об’єктів. Заготовки цих процедур середовище розробки створювало автоматично, а ви доповнювали ці заготовки командами і рядком varопису змінних.

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

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

Процедури користувача можуть бути:

· без аргументів і без результатів;

· з аргументами і без результатів;

· без аргументів і з результатами;

· з аргументами і з результатами.

Запам’ятайте!

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

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

 

Найчастіше використовують процедури останнього типу. Загальний вигляд цих процедур у Delphiтакий:

procedure <ім’я> (<списки аргументів з їхніми типами>; var <списки результатів з їхніми типами>);

var (<списки локальних змінних процедури з їхніми типами>);

Begin

<команди>

End;

Загальний вигляд команди виклику процедури з аргументами і результатами такий:

<ім’я> (<списки виразів, значення яких передаються аргументам процедури>, <списки змінних, яким передають свої значення результати процедури>);

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

Оформимо як процедуру фрагмент програми, який обчислює НСД двох натуральних чисел. У цієї процедури два аргументи – два натуральні числа, НСД яких потрібно знайти, і один результат – їхній НСД. Виглядатиме ця процедура так:

procedure МCD (a, b: Integer; var c: Integer);

var r: Integer;

Begin

r := a mod b;

while r <> 0 do

Begin

a := b;

b := r;

r := a mod b;

End;

c := b;

End;

Викликати на виконання цю процедуру для одержання значення НСД двох конкретних натуральних чисел можна, наприклад, такою командою: МCD (35, 77, х). Виконуватися ця команда буде так:

1. Змінні a і b (аргументи процедури) одержують значення 35 і 77 відповідно.

2. Виконуються команди процедури.

3. Змінна с (результат процедури) передає своє значення змінній х, вказаній у команді виклику процедури.

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

У команді виклику цієї процедури в дужках на перших двох місцях, що відповідають аргументам процедури, можуть стояти не тільки константи, а й змінні, які на момент виконання команди виклику мають певні натуральні значення. Тобто при виконанні команди МCD (к, р, х) аргументи процедури a і b одержать значення змінних кірвідповідно. На цих місцях можуть стояти також арифметичні вирази, значення яких будуть обчислені на початку виконання команди виклику процедури і ці значення будуть передані аргументам процедури, наприклад, МCD (2*к+3, 3*р-1, х).

Звертаємо вашу увагу:

1. Аргументи та результати процедури можуть бути одними й тими самими змінними, тобто допустима процедура із заголовком Procedure One (var a, b:Integer). У такої процедури змінні aіb є одночасно і аргументами і результатами. Команда виклику цієї процедури виглядатиме так: One (x, y).

2. Процедура може серед своїх команд мати команду виклику іншої процедури.

Запам’ятайте!

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

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

 

Проілюструємо зручність використання процедур користувача (зокрема, процедури знаходження НСД двох натуральних чисел) на прикладі такої задачі.

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

Задача 1. Знайти суму двох звичайних дробів.

 

У наведеному тексті проекту (рис. 2.59) процедура викликається двічі. Перший раз для знаходження НСД знаменників дробів. Цей НСД у наступній команді використовується для знаходження найменшого спільного знаменника дробів (НСК (х, у) = х*у/НСД(х, у)). Другий – для знаходження НСД чисельника і знаменника дробу-суми з метою його подальшого скорочення. Без використання процедури текст цього проекту збільшився б, погіршилась би його структурованість.

Функції користувача в Delphi

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

Функція користувача, як і процедура користувача ­– це відокремлена частина програми, яка має своє ім’я і яка може бути викликана для виконання в будь-якій іншій частині програми.

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

1. Рядок заголовка функції виглядає так:

function <ім’я> (<списки аргументів з їхніми типами>): <тип результату >;

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

3. Функція може бути викликана або в правій частині команди присвоювання, або в команді виведення.

Якщо обчислення НСД оформити як функцію, то програма виглядатиме так (рис. 2.61):

Рис. 2.61. Програма додавання двох звичайних дробів з використанням функції НСД

 

Зверніть увагу не тільки на відмінності в оформленні процедури і функції, а й на відмінності в їх виклику і використанні в програмах, наведених на рис. 2.59 і 2.61 (табл. 2.3):

 

Таблиця 2.3. Відмінності у виклику процедури і функції

1. Використання процедури МCD 2. Використання функції МCD
3. MCD(den1, den2,z); 4. den := den1*den2/z; 5. den := den1*den2/ MCD(den1, den2);
6. MCD(den, nom, k); 7. k :=MCD(den, nom);

 

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

 

Стандартні процедури і функції в Delphi

У мові програмування Delphi можна використовувати великій набір стандартних процедур і функцій, призначених для виконання різноманітних операцій над числами, текстами, елементами керування, графічними об’єктами, файлами та ін.

Деякі з них ви вже використовували, наприклад, функцію StrToInt для переведення тексту в ціле число, функцію FloatToStr для переведення дійсного числа в текст, функцію sqrt для обчислення арифметичного квадратного кореня з дійсного числа.

Розглянемо ще кілька стандартних математичних функцій та їхнє призначення (табл. 2.4).

Таблиця 2.4. Приклади стандартних математичних функцій у Delphi

Функція Кількість аргументів та їх типи Результат Тип результату
Abs 1, цілий або дійсний Модуль числа Той самих, що й в аргументу
Arctan 1, дійсний Арктангенс числа (в радіанах) Дійсний
Cos 1, дійсний Косинус числа Дійсний
Exp 1, дійсний Експонента числа (ех) Дійсний
Frac 1, дійсний Дробова частина числа Дійсний
Int 1, дійсний Ціла частина числа Дійсний
Ln 1, дійсний Натуральний логарифм числа Дійсний
Pi Число p Дійсний
Power 2, дійсні І аргумент у степені ІІ аргумент Дійсний
Random Випадкове число від 0 до 1 Дійсний
Random 1, цілий Випадкове ціле число від 0 до значення аргументу–1 Цілий
Sin 1, дійсний Синус числа Дійсний
Sqr 1, дійсний Квадрат числа Дійсний

 

Звертаємо вашу увагу:

1. При виклику функції без аргументів потрібно вказувати лише її ім’я, наприклад, х := Pi.

2. Перед першим використанням функції Random потрібно включити до тексту проекту команду виклику процедури Randomize без аргументів і без результатів, яка запустить генератор випадкових чисел.

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

Перевірте себе

1. º Що таке процедури користувача? Якими вони можуть бути?

2. · У яких випадках доцільно використовувати процедури користувача? У чому полягають переваги їхнього використання?

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

4. º Що таке аргументи процедури; результати процедури?

5. · Який вигляд має команда виклику процедури з аргументами і результатами?

6. º Що таке формальні параметри процедури і фактичні параметри процедури? Поясніть різницю між ними.

7. º Що таке функція користувача?

8. · Чим функція користувача відрізняється від процедури користувача?

9. * Який загальний вигляд функції?

10. · Які ви знаєте стандартні процедури і функції в Delphi?Охарактеризуйте їх.

11. * Знайдіть у Довідці інформацію про процедури без аргументів і без результатів, з аргументами і без результатів, з аргументами і без результатів. Наведіть приклади їхнього використання.

Виконайте завдання

1. º Запишіть заголовок процедури з іменем stepin, аргументами якої є змінна a дійсного типу і змінна b цілого типу, а результатом – змінна с дійсного типу, і приклад команди її виклику.

2. (ДЗ) º Запишіть заголовок процедури з іменем chastka, аргументами якої є дві змінні дійсного типу a, b, а результатами – змінна с дійсного типу та змінна f логічного типу, і приклад команди її виклику.

3. · Запишіть процедуру з іменем simp, яка здійснює перевірку, чи є дане натуральне число простим і повертає як результат значення змінної f логічного типу – ознаку того, чи є число простим, і значення змінної k цілого типу – кількість дільників даного числа.

4. (ДЗ) · Запишіть процедуру з іменем square, яка виконує обчислення площі трикутника за відомими довжинами його сторін, значення яких передаються до процедури як аргументи. Для обчислення площі використайте формулу Герона.

5. · Створіть проект, в якому обчислюється площа трикутника за відомими координатами його вершин. Для обчислення площі використайте формулу Герона. Використайте процедуру обчислення довжини відрізка за координатами його кінців. Створіть у власній папці папку Проект 2.10.5 і збережіть у ній проект.

6. (ДЗ) · Створіть проект, в якому для двох заданих на площині точок з цілими координатами визначається, чи лежать вони в одній координатній чверті. Використайте процедуру для визначення координатної чверті, у якій розміщена точка з заданими координатами. Створіть у власній папці папку Проект 2.10.6 і збережіть у ній проект.

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

8. (ДЗ) º Запишіть заголовок функції з іменем step, аргументами якої є змінна a дійсного типу і змінна b цілого типу, а результат має дійсний тип, і приклад команди її виклику.

9. º Запишіть функцію, яка виконує обчислення довжини відрізка за відомими координатами його кінців. Запишіть команду виклику цієї функції для обчислення довжини відрізка а з координатами кінців (0, 0) та (20, 30).

10. (ДЗ) · Запишіть функцію, в якій обчислюється значення факторіалу заданого натурального числа n (n! = 1*2*3*…*n). Запишіть команду використання цієї функції для обчислення суми факторіалів перших п’яти натуральних чисел.

11. º Створіть проект, в якому можна знайти максимальне з чотирьох заданих різних цілих чисел. Використайте функцію для знаходження більшого з двох заданих цілих чисел. Створіть у власній папці папку Проект 2.10.11 і збережіть у ній проект.

12. · Створіть проект, в якому для двох заданих цілих чисел визначається, яке з них має більшу суму цифр. Використайте функцію для знаходження суми цифр заданого цілого числа. Створіть у власній папці папку Проект 2.10.12 і збережіть у ній проект.

13. (ДЗ) · Створіть проект, в якому для двох заданих цілих чисел визначається, яке з них має більшу суму дільників. Використайте функцію для знаходження суми дільників заданого цілого числа. Створіть у папці Мої документи папку Проект 2.10.13 і збережіть у ній проект.

14. * Створіть проект, в якому для заданого цілого числа визначається, чи є одночасно простим саме число і число, записане тими самими цифрами, взятими у зворотньому порядку. Використайте функцію для визначення того, чи є число простим. Створіть у власній папці папку Проект 2.10.14 і збережіть у ній проект.

15. · Запишіть з використанням стандартних функцій Delphiкоманди для обчислення дискримінанту та коренів квадратного рівняння з коефіцієнтами a, b, c.

16. · Створіть проект, в якому обчислюється сума 11 + 22 + 33 + 44 + 55 + ... + nn. Використайте стандартну функцію для піднесення числа до степеня. Створіть у власній папці папку Проект 2.10.16 і збережіть у ній проект.

17. (ДЗ) · Створіть проект, в якому обчислюється сума . Створіть у власній папці папку Проект 2.10.17 і збережіть у ній проект.

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

 

Практична робота № 10

«Використання підпрограм»

Увага! Під час роботи з комп’ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.

 

1. Відкрийте середовище розробки Turbo Delphi 2006.

2. Створіть проект, в якому двома способами обчислюється площа опуклого чотирикутника:

а) За відомими довжинами сторін АВ, ВС, CD, DA та довжиною діагоналі АС. Використайте процедуру обчислення площі трикутника за формулою Герона. Складіть обробник події OnClick першої кнопки, виконання якого приведе до виведення розв’язку задачі у вікно повідомлення.

б) За відомими координатами вершин чотирикутника, поданими у порядку обходу. Використайте функцію обчислення довжини відрізка за координатами його кінців. Складіть обробник події OnClick другої кнопки, виконання якого приведе до виведення розв’язку задачі у окремий напис.

3. Створіть у власній папці папку Практична 10 і збережіть у ній проект.


 

2.11. Одновимірні масиви

Пригадайте!

1. Що визначає тип змінної? Які типи змінних вам відомі?

2. Який загальний вигляд команд розгалуження в Delphi? Як вони виконуються?

3. Який загальний вигляд команди циклу з лічильником в Delphi? Як вона виконується?

4. Який загальний вигляд команди циклу з передумовою в Delphi? Як вона виконується?

5. Де зустрічаються впорядковані набори даних? У чому зручність їхнього використання?

Поняття одновимірного масиву

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

Наприклад, якщо потрібно скласти програму для знаходження середньої ваги ста учнів 11-х класів, то очевидно потрібно використати 100 змінних, значенням кожної з яких буде вага відповідного одинадцятикласника, знайти суму значень цих змінних і поділити її на 100.

Якщо використати 100 змінних з довільними іменами, наприклад, a, b, c, ..., z, aa, ab, ac, ..., az, ba, bb, bc, ..., bz, ca, cb, cc, ..., cv (як в електронних таблицях), то команда знаходження суми їхніх значень буде містити в правій своїй частині 100 доданків, або потрібно включити до тексту програми 100 команд, які по черзі додають до значення змінної summa значення ваги наступного одинадцятикласника:

summa := a;

summa := summa + b;

summa := summa + c;

...

summa := summa + cv;

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

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

Запам’ятайте!

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

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

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

 

Так для прикладу, розглянутого вище, замість ста окремих змінних варто розглядати масив, що складається зі 100 елементів. Якщо надати ім’я масиву a, то імена змінних – елементів цього масиву будуть такі: a[1], a[2], a[3], ..., a[100]. Кожна з цих змінних матиме тип Real.

Тоді, щоб знайти суму значень усіх цих 100 змінних, достатньо записати такі команди:

summa := 0;

for i := 1 to 100 do

summa := summa + a[i];

 

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

 

Виконання цього фрагменту програми відбуватиметься так:

Команда Результат виконання
summa := 0 summa = 0
i := 1 i = 1
i £ 100 (1 £ 100) = true
summa := summa + a[i] summa = 0 + a[1] = a[1]
i := i +1 i = 2
i £ 100 (2 £ 100) = true
summa := summa + a[i] summa = a[1] + a[2]
i := i +1 i = 3
i £ 100 (3 £ 100) = true
summa := summa + a[i] summa = a[1] + a[2]+a[3]
... ...
i := i +1 i = 100
i £ 100 (100 £ 100) = true
summa := summa + a[i] summa = a[1] + a[2] + a[3] + a[4] + ... + a[100]
i := i +1 i = 101
i £ 100 (101 £ 100) = false

 

У результаті виконання наведеного фрагмента програми значення змінної summa дорівнюватиме сумі значень усіх 100 змінних – елементів одновимірного масиву, тобто сумарній вазі даних 100 учнів.

У тексті програми мовою Delphi у рядку varзмінна a типу одновимірний масив записується описується так: var a: array [1..100] of Real (англ. array – масив). У квадратних дужках вказується діапазон номерів елементів масиву: від 1 до 100. За цим записом компілятор виділяє в пам'яті комп’ютера 100 ділянок під кожну зі 100 змінних – елементів масиву. Розмір кожної ділянки залежить від типу елементів масиву.

Звертаємо вашу увагу, що інколи зручно нумерувати елементи масиву, починаючи не з першого номера. Так, наприклад, для змінних, значення яких – чисельність населення України в період з 1990 по 2011 роки можна використати масив a: array [1990..2011] of Integer. Взагалі, номери елементів одновимірного масиву можуть буди елементами довільного діапазону цілих чисел.

Уведення і виведення значень елементів одновимірного масиву

 

Для введення і виведення значень елементів одновимірного масиву можна скористатися багаторядковим полем (компонент типу TMemo), який можна розмістити на формі так само, як й інші компоненти (рис. 2.62).

 

Серед властивостей цього компонента є багато таких, які мали раніше розглянуті нами компоненти: Name, Color, Font, Enabled, Visible, Height, Width, Top, Left та ін. Серед властивостей, яких не мали попередні компоненти, розглянемо такі:

ScrollBars (англ. scroll – прокручування, bars – прямокутні смуги) – значення цієї властивості визначає наявність чи відсутність на цьому компоненті смуг прокручування (горизонтальної – ssHorizontal, вертикальної – ssVertical, обох – ssBoth) для перегляду тексту, який виходить за границі компонента;

ReadOnly(англ. read – читати, only – тільки) – значення цієї властивості визначає можливість редагування рядків компонента: False – можна редагувати, True – не можна (тільки для читання)

Lines (англ. lines – лінії, рядки) – значенням цієї властивості є набір значень, розташованих у рядках цього компонента; кожен рядок має номер, нумерація рядків починається з 0.

Lines.Count (англ. count – підрахунок) – значення цієї властивості дорівнює кількості заповнених даними рядків компонента; зазначимо, що ця властивість відсутня у списку властивостей вікна Object Inspector.

Розглянемо задачу, в якій проілюструємо, як увести елементи одновимірного масиву з багаторядкового поля і як вивести елементи одновимірного масиву в багаторядкове поле.

 

Задача 1. Сформувати одновимірний масив з 10 дійсних чисел, які вводяться в рядки багаторядкового поля, піднести ці числа до квадрата і вивести ці квадрати в інше багаторядкове поле.

 

Розмістимо на формі два багаторядкових поля з іменами Memo1 і Memo2, розташуємо їх на формі одне поруч з іншим та встановимо для них значення властивостей: Height = 150, ScrollBars= ssVertical, ReadOnly =False. Розмістимо на формі також кнопку, встановимо для неї Caption = 'До квадрата' і створимо процедуру, пов’язану з подією OnClick для цієї кнопки.

На рис. 2.63 наведено текст цієї процедури і вікно її виконання. У тексті процедури використані два стандартні методи, що пов’язані з багаторядковим полем: процедура Clear (англ. clear – очищувати), що очищує всі рядки цього компонента, і процедура Append (англ. append – додавати), що додає до багаторядкового поля новий рядок і виводить у нього значення параметра, вказаного в дужках.

 

 

 
 

Звертаємо вашу увагу: у наведеному на рис. 2.63 прикладі процедури розв’язування задачі 1 уведення значень елементів, піднесення їх до квадрата і виведення нових значень елементів масиву організовано трьома окремими циклами лише для кращого розуміння. Очевидно, що усі ці операції можна було б організувати в одному циклі.

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

Можна увести числа в багаторядкове поле до запуску проекту, змінюючи значення властивості Linesцього поля. Це зручно робити, наприклад, на етапі налагодження програми.

Для цього потрібно:

1. Вибрати багаторядкове поле.

2. Вибрати кнопку в кінці рядка Lines вікна Object Inspector (рис. 2.64).

3. У вікні String List Editor(англ. string – рядок тексту, list – список, editor – редактор), що відкрилося, видалити текст першого рядка і ввести дані 10 чисел, натискаючи після кожного клавішу Enter.

4. Вибрати кнопку ОК.

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

 

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

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

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

 

Задача 2. Визначити, скільки разів зустрічається дане дійсне число серед значень елементів даного масиву з 10 дійсних чисел.

 

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

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; i, k: Integer; x: Real;

Begin

x := StrToFloat (Edit1.Text); //Уведення числа, з яким потрібно порівнюватизначення елементів масиву

k := 0;// Лічильник кількості елементів масиву, що дорівнюють даному числу х – їх поки що не зустрілося жодного

for i := 1 to 10 do

Begin

a[i] := StrToFloat (Memo1.Lines[i-1]);// Уведення значень елементів одновимірного масиву з багаторядкового поля

if a[i] = x then k := k+1;// Якщо значення чергового елемента масиву дорівнює заданому числу, то значення лічильника збільшується на 1

End;

Label1.Caption := IntToStr (k) + ' разів'// Виведення результату в напис з додаванням пояснювального тексту

End;

 

Звертаємо вашу увагу: якщо не включити перед початком другого циклу команду k := 0, то перше виконання команди k := k+1 може виявитися некоректним.

Задача 3. Визначити, чи зустрічається дане дійсне число серед значень елементів даного масиву з 10 дійсних чисел.

 

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

Для реалізації раціонального методу розв’язування цієї задачі використаємо змінну логічного типу f і присвоїмо їй початкове значення false (дане число в масиві поки ще не зустрілося). Порівнюватимемо послідовно значення елементів масиву з даним числом і якщо один з них дорівнює даному числу, то змінимо значення змінної f на true і перервемо виконання циклу командою break (англ. break – переривати). Виведення результату реалізуємо залежно від значення змінної f.

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; i: Integer; x: Real; f: Boolean;

Begin

for i := 1 to 10 do

a[i] := StrToFloat (Memo1.Lines[i-1]);

x := StrToFloat (Edit1.Text);

f := false;// Дане число в масиві поки що не зустрілося

for i := 1 to 10 do

if a[i] = x

Then begin

f := true;// Дане число в масиві зустрілося

break;// Перериваємо виконання циклу, бо число зустрілося в масиві

End;

If f

then Label1.Caption := 'зустрічається'

else Label1.Caption := 'не зустрічається';

End;

 

Задача 4. У даному масиві з 10 дійсних чисел визначити найбільше значення.

 

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

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; i: Integer; max: Real;

Begin

for i := 1 to 10 do

a[i] := StrToFloat (Memo1.Lines[i-1]);

max := a[1];// Вважаємо, що найбільший елемент – перший

for i := 2 to 10 do

if a[i] > max then max := a[i];// Замінюємо значення найбільшого елемента

Label1.Caption := FloatToStr (max) + ' – найбільше значення';

End;

 

Задача 5. У даному масиві з 10 різних дійсних чисел визначити найбільше значення і найменше значення і обміняти їх місцями.

 

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

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

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; i, nmax, nmin: Integer; max, min: Real;

Begin

for i := 1 to 10 do

a[i] := StrToFloat (Memo1.Lines[i-1]);

max := a[1]; nmax := 1;// Значення першого елемента приймається за найбільше

min := a[1]; nmin := 1;// Значення першого елемента приймається за найменше

for i := 2 to 10 do

if a[i] > max// Порівняння значення чергового елемента з найбільшим на цей момент

Then

Begin

max := a[i];// Замінюємо значення найбільшого елемента

nmax := i;// Замінюємо номер найбільшого елемента

End

Else

if a[i] < min// Порівняння значення чергового елемента з найменшим на цей момент

Then

Begin

min := a[i];// Замінюємо значення найменшого елемента

nmin := i;// Замінюємо номер найменшого елемента

End;

a[nmax] := min; a[nmin] := max;// Обмін значеннями найбільшого і найменшого елементів

for i := 1 to 10 do

Memo1.Lines.Append(FloatToStr(a[i]);// Виведення значень елементів масиву з переставленими найбільшим і найменшим значеннями

End;

Задача 6. Визначити елементи даного масиву з 10 дійсних чисел, значення яких більше даного дійсного числа.

Очевидно, що як і в Задачі 2, потрібно переглянути послідовно значення всіх елементів масиву і з’ясувати, які з них більші, ніж задане число. Виникає питання, де зберігати значення цих елементів масиву. Адже залежно від значень елементів масиву і від даного числа, кількість таких елементів може бути різна: від 0 до 10.

Було б доцільно заносити значення шуканих елементів до іншого масиву, але нам заздалегідь невідома кількість його елементів.

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

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

У рядку var динамічний масив b, елементами якого будуть дійсні числа, описується так: var b: array of Real;.

 

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Real; b: array of Real; i, k: Integer; x: Real;

Begin

for i := 1 to 10 do

a[i] := StrToFloat (Memo1.Lines[i-1]);

x := StrToFloat (Edit1.Text);

k := 0;// Лічильник кількості елементів масиву b (спочатку в масиві b немає елементів)

for i := 1 to 10 do

if a[i] > x

Then begin

k := k+1;// Збільшення на 1 значення лічильника кількості елементів масиву b

SetLength (b, k);// Встановлення нового розміру (кількості елементів) динамічного масиву b

b[k-1] := a[i];// Занесення відповідного елемента масиву a до масиву b

End;

Memo2.Lines.Clear;

if k = 0

then Memo2.Lines[0] := 'Таких чисел не існує'

Else

for i := 1 to k do

Memo2.Lines.Append(FloatToStr(b[i-1]));

End;

SetLength(англ. set – встановлювати, length – довжина).

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

k := Memo1.Lines.Count;//Визначається кількість заповнених рядків поля

SetLength (a, k);// Встановлюється відповідна кількість елементів динамічного масивуa і виділяється для його елементів відповідна ділянка пам’яті

For i := 0 to k-1 do a[i] := StrToFloat(Memo1.Lines[i]); // Уведення даних з рядків поля до масиву

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

 

Сортування одновимірного масиву і пошук даного числа у впорядкованому масиві

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

Існує більше 10 різноманітних методів сортування одновимірного масиву. Одні з них виконуються швидше, інші повільніше, одні – більш складні за своєю логічною структурою, інші – простіші. Ми розглянемо один з методів сортування одновимірного масиву – метод вибору.

Пояснимо сутність цього методу на прикладі. Нехай нам потрібно впорядкувати за зростанням такий одновимірний масив з 6 елементів (табл. 2.5, рядок 0):

 

Таблиця 2.5. Упорядкування масиву методом вибору

a[1] a[2] a[3] a[4] a[5] a[6]

 

На першому кроці визначимо значення найменшого елемента в усьому масиві (a[4] = 2) і обміняємо його зі значенням першого елемента. Одержуємо масив у рядку 1, в якому найменший елемент зайняв своє місце. На другому кроці визначимо значення найменшого елемента серед усіх елементів масиву, крім першого, (a[6] = 4) і обміняємо його зі значенням другого елемента. Одержуємо масив у рядку 2, в якому перші 2 елементи зайняли своє місце. На третьому кроці визначимо значення найменшого елемента серед усіх елементів масиву, крім перших двох, (a[5] = 6) і обміняємо його зі значенням третього елемента. Одержуємо масив у рядку 3, в якому перші 3 елементи зайняли своє місце. Повторивши аналогічні дії ще 2 рази разів, одержуємо масив, впорядкований за зростанням.

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

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

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

procedure TForm1.Button2Click(Sender: TObject);

var a: array [1..10] of integer; i, j, min, nmin: integer;

Begin

for i := 1 to 10 do

a[i] := StrToInt(Memo1.Lines[i-1]);

for i := 1 to 9 do

Begin

min := a[i]; nmin := i;

for j := i+1 to 10 do

if a[j] < min Then

Begin

min := a[j]; nmin := j;

End;

a[nmin] := a[i];

a[i] := min;

End;

Memo2.Lines.Clear;

for i := 1 to 10 do

Memo2.Lines.Append (IntToStr(a[i]))

End;

 

Продемонструємо той факт, що пошук потрібного значення серед значень елементів масиву (задача 3) відбуватиметься значно швидше, якщо масив упорядкований.

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

Якщо ж масив впорядкований, то можна з’ясувати, чи є дане число в масиві, іншим способом, значно ефективнішим. Пояснимо його на прикладі. Нехай маємо впорядкований за зростанням масив з 10 чисел: 2, 5, 8, 12, 13, 16, 17, 20, 22, 30 і деяке дане число х. Порівняємо це число із значенням елемента масиву, який знаходиться посередині масиву (з числом 13). Якщо дане число х дорівнює 13, то воно в масиві є, якщо ні, то з’ясуємо, чи більше дане число числа 13 (х>13). Якщо так, то його потрібно шукати тільки серед правої половини масиву, якщо ні, то тільки серед лівої половини масиву. Таким чином область пошуку звужується вдвічі. На наступному кроці поступаємо так саме: порівнюємо дане число із значенням елемента масиву, який знаходиться посередині тієї частини масиву, яка залишилися для пошуку. Знову або дане число дорівнює значенню цього елемента масиву, або залишаємо для пошуку або ліву, або праву половини тієї частини масиву, що залишилася, тобто область пошуку знову зменшується вдвічі.

Такий метод пошуку є значно ефективнішим, ніж попередній, бо значно швидше приводить до результату, особливо для великих N (максимум за [log2N] +1 кроків, де N – кількість елементів у масиві, а квадратними дужками тут позначена ціла частина числа).

Такий метод пошуку заданого числа в одновимірному масиві називається методом половинного (бінарного) пошуку.

Відповідна процедура, в якій реалізується цей метод для впорядкованого масиву з 10 цілих чисел, виглядає так:

procedure TForm1.Button1Click(Sender: TObject);

var a: array [1..10] of Integer; i, x, left, right, m: Integer; f: Boolean;

Begin

for i := 1 to 10 do

a[i] := StrToInt(Memo1.Lines[i-1]);

x := StrToInt(Edit1.Text);

left := 1;// Початковий номер елемента тієї частини масиву, де відбуватиметься пошук

right:= 10;// Кінцевий номер елемента тієї частини масиву, де відбуватиметься пошук

f := false;// Задане число в масиві поки що не знайдене

while (left <= right) and not f do

Begin

m := (left + right) div 2;// Номер елемента посередині тієї частини масиву, де далі продовжуватиметься пошук

if x > a[m]

then left := m+1// Змінюється початковий номер елемента тієї частини масиву, де відбуватиметься пошук

else if x < a[m]

then right := m-1// Змінюється останній номер елемента тієї частини масиву, де відбуватиметься пошук

else f := true;// Число в масиві знайшлося

End;

If f

then Edit1.Text := 'Число в масиві є'

else Edit1.Text := 'Числа в масиві немає';

End;

Цікаві факти з історії

Метод половинного поділу використовували в своїх логічних міркуваннях, класифікаціях, методах розв’язування задач ще стародавні греки. Вони називали цей метод дихотомією (грец. δῐχῆ – навпіл, τομή – поділ). Може й ви використовували цей метод у грі "Відгадай задумане число".

Перевірте себе

1. º Що таке одновимірний масив?

2. º З чого складається ім’я елемента масиву?

3. · Що може використовуватись як номер елемента масиву?

4. * При складанні проектів для розв’язуванні яких задачах зручно використовувати масиви?

5. · Як записати змінну типу одновимірний масив у рядку var?

6. º Яким може бути діапазон номерів елементів масиву?

7. · Назвіть та охарактеризуйте відомі вам властивості багаторядкового поля.

8. · Назвіть та поясніть відомі вам стандартні методи багаторядкового поля.

9. · Як увести числа в багаторядкове поле до запуску проекту?

10. · Опишіть різні способи визначення, чи зустрічається задане число серед значень елементів масиву.

11. · Опишіть послідовність дій для визначення найбільшого значення серед значень елементів масиву.

12. º Який масив називається динамічним? Як описується динамічний масив у рядку var?

13. ·Поясніть, у чому полягають відмінності між статичним та динамічним масивами.

14. · Поясніть сутність методу вибору при сортуванні масиву.

15. · Поясніть сутність методу половинного (бінарного) пошуку даного числа в одновимірному масиві.

16. * Поясніть, у чому перевага пошуку заданого елемента у впорядкованому масиві порівняно з не впорядкованим. Наведіть приклади такого пошуку у вашій навчальній діяльності.

 

Виконайте завдання

1.º Складіть таблицю виконання фрагмента програми та визначте значення змінної dob після його завершення для масиву, значеннями елементів якого є числа 2; -3,5; 1,2; 0,25; -4:

dob := 1;

for i := 1 to 5 do

dob := dob * a[i];

2. (ДЗ) º Cкладіть таблицю виконання фрагмента програми та визначте значення змінної sum після його завершення для масиву, значеннями якого є числа 0,2; -1,5; 2; -1,4:

sum := 0;

for i := 1 to 4 do

if a[i] mod 2 =0 then sum := sum + a[i]*a[i];

3. · Запишіть рядок оголошення змінних типу одновимірний масив:

а) масив змінних цілого типу з іменем х та діапазоном номерів від 1 до 50;

б) масив змінних дійсного типу з іменем mas та діапазоном номерів від 10 до 35;

в) масив змінних цілого типу з іменем tab та діапазоном номерів від -7 до 12.

4. º Запишіть фрагмент програми, що здійснює введення в масив восьми чисел, що знаходяться в рядках багаторядкового поля.

5. (ДЗ) º Запишіть фрагмент програми, що здійснює виведення вже відомих значень елементів масиву з 11 чисел у рядки багаторядкового поля.

6. º Створіть проект, в якому потрібно сформувати масив з 10 цілих чисел, що знаходяться в рядках багаторядкового поля, знайти середнє арифметичне значень елементів масиву та вивести результат у напис. Створіть у власній папці папку Проект 2.11.6 і збережіть у ній проект.

7. · Створіть проект, в якому потрібно сформувати масив з 12 дійсних чисел, що знаходяться в рядках багаторядкового поля, збільшити значення кожного елемента масиву в 3 рази і вивести нові значення в інше багаторядкове поле. Створіть у власній папці папку Проект 2.11.7 і збережіть у ній проект.

8. (ДЗ) · Створіть проект, в якому потрібно сформувати масив з 9 чисел, що знаходяться в рядках багаторядкового поля, зменшити значення кожного елемента масиву на 5 і вивести нові значення в інше багаторядкове поле. Створіть у папці Мої документи папку Проект 2.11.8 і збережіть у ній проект.

9. · Випускник 11-го класу може отримати грамоту за особливі успіхи у навчанні з певного предмету, якщо його річна оцінка з цього предмету – 12. Річні оцінки з інформатики учнів класу введені у багаторядкове поле. Створіть проект для визначення кількості грамот, які можуть отримати учні цього класу. Створіть у власній папці папку Проект 2.11.9 і збережіть у ній проект.

10. (ДЗ) · Створіть проект, в якому потрібно сформувати масив з 7 цілих чисел, що знаходяться в рядках багаторядкового поля, визначити суму парних чисел серед значень елементів цього масиву і вивести результат у напис. Створіть у папці Мої документи папку Проект 2.11.10 і збережіть у ній проект.

11. · Створіть проект, в якому потрібно сформувати масив з 9 цілих чисел, що знаходяться в рядках багаторядкового поля, визначити, чи зустрічаються серед значень елементів цього масиву числа, кратні числу 3, і вивести результат у напис. Створіть у власній папці папку Проект 2.11.11 і збережіть у ній проект.

12. · Створіть проект, в якому потрібно сформувати масив з 10 дійсних чисел, що знаходяться в рядках багаторядкового поля, визначити найменше серед значень елементів цього масиву і обміняти його місцями з першим елементом масиву. Отриманий масив вивести в інше багаторядкове поле. Створіть у власній папці папку Проект 2.11.12 і збережіть у ній проект.

13. * Створіть проект, в якому потрібно сформувати масив з 10 дійсних чисел, що знаходяться в рядках багаторядкового поля, визначити найбільше серед значень елементів цього масиву і порахувати, скільки елементів з таким значенням зустрічається в масиві. Отриманий результат вивести в напис. Створіть у власній папці папку Проект 2.11.13 і збережіть у ній проект.

14. (ДЗ) · Створіть проект, в якому потрібно сформувати масив з 9 дійсних чисел, що знаходяться в рядках багаторядкового поля, визначити найбільше серед значень елементів цього масиву і обміняти його місцями із значенням елемента масиву, що знаходиться посередині масиву. Отриманий масив вивести в інше багаторядкове поле. Створіть у папці Мої документи папку Проект 2.11.14 і збережіть у ній проект.

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

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

17. * Створіть проект, в якому потрібно сформувати два масиви з дійсних чисел, що знаходяться в рядках багаторядкових полів, і визначити, чи співпадають ці масиви. Створіть у власній папці папку Проект 2.11.17 і збережіть у ній проект.

 

 

Практична робота № 11

«Опрацювання одновимірних масивів»

Увага! Під час роботи з комп’ютером дотримуйтеся правил безпеки та санітарно-гігієнічних норм.

 

1. Відкрийте середовище розробки Turbo Delphi 2006.

2. Створіть проект для розв’язування задачі: Відома середня температура кожного дня тижня. Визначте середню температуру за весь тиждень. З’ясуйте, скільки разів на тиждень температура була вище нуля. Відсортуйте значення температур за спаданням та з’ясуйте, чи була однаковою температура кілька днів на тиждень. У проекті:

а) Розмістіть на формі потрібні елементи керування: багаторядкові поля, написи, кнопки.

б) Складіть обробник події OnClick першої кнопки, виконання якого призведе до виведення у напис середньої температури за тиждень.

в) Складіть обробник події OnClick другої кнопки, виконання якого призведе до визначення, скільки разів на тиждень температура була вище нуля і виведення результату у напис.

г) Складіть обробник події OnClick третьої кнопки, виконання якого призведе до сортування значень температур і визначення, чи є в масиві однакові значення, виведення відсортованого масиву у багаторядкове поле, повідомлення про наявність однакових елементів – у напис.

д) Виконайте складені процедури і переконайтеся, що результати їх роботи правильні.

3. Створіть у власній папці папку Практична 11 і збережіть у ній проект.

 

– Конец работы –

Используемые теги: Наведіть, клади, єктів, властивостей, значень, цих, властивостей0.112

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Наведіть приклади об’єктів, їх властивостей та значень цих властивостей

Что будем делать с полученным материалом:

Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Еще рефераты, курсовые, дипломные работы на эту тему:

Квадрат суми двох виразів дорівнює квадрат першого виразу додати подвоєний добуток цих виразів додати квадрат другого виразу
квадрат суми двох виразів дорівнює квадрат першого виразу додати подвоєний добуток цих виразів додати квадрат другого виразу... квадрат різниці двох виразів дорівнює квадрат першого виразу відняти... різниця квадратів двох виразів дорівнює добутку різниці та суми цих виразів...

Тема: Створення динамічного класу Array. Створення об’єктів , які мають необмежену кількість елементів динамічного масиву
Тема Створення динамічного класу Array Створення об єктів які мають... Мета опанувати навички створення динамічних об єктів які мають необмежену кількість елементів динамічного масиву...

Основи автоматики і автоматизації теплогенеруючих об’єктів
Конспект лекцій Вступ основні терміни визначення поняття АВТО з грецької autos... З єднання ланок... Всі складні комбінації промислових САР утворюються з допомогою лише трьох типів зєднань паралельного послідовного та...

Лекція 4 Тема: Вставка графічних об’єктів та математичних формул у середовищі MS Word 2010
Тема Вставка графічних об єктів та математичних формул у середовищі MS Word... Мета Ознайомитися зі вставкою графічних об єктів та математичних формул у текстовому редакторі Word Здобути навички...

Вивчити методичні рекомендації щодо функціональних можливостей програми 1С: Документообіг далі 1С і загальної характеристики її об’єктів
Порядок виконання лабораторних робіт... Вивчити завдання до лабораторної роботи... Вивчити методичні рекомендації щодо функціональних можливостей програми С Документообіг далі С і загальної...

Розфарбуй однакові предмети в однаковий колір Розташуй цифри у фігурах згідно прикладу
Розташуй цифри у фігурах згідно прикладу... Розташуй знаки згідно з цифрами...

Квадрат суми двох виразів дорівнює квадрат першого виразу додати подвоєний добуток цих виразів додати квадрат другого виразу
квадрат суми двох виразів дорівнює квадрат першого виразу додати подвоєний добуток цих виразів додати квадрат другого виразу... квадрат різниці двох виразів дорівнює квадрат першого виразу відняти... різниця квадратів двох виразів дорівнює добутку різниці та суми цих виразів...

Тематичні індивідуальні завдання та приклади розв’язання типових завдань з курсу „Вища математика
ХАРКІВСЬКИЙ ДЕРЖАВНИЙ УНІВЕРСИТЕТ ХАРЧУВАННЯ... ТА ТОРГІВЛІ...

Загальна характеристика хімічних властивостей Купруму
Хімічний елемент Купрум розташований у періодичній системі хімічних елементів піл порядковим номером 29. віз розміщений у першій групі, побічній… На основі значення стандартного електродного потенціалу та розташування… Така реакція не відбувається як при нормальній так і при підвищеній температурах.

Характеристика асортименту та споживчих властивостей прянощів
З часом число таких рослин збільшувалося. Відомості про використання ароматичних добавок у побуті і кулінарії знаходять… Останнім часом, з розвитком прогресивних технологій, зявилися штучні пряності замінники натуральних , що представляють…

0.032
Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • По категориям
  • По работам