54347

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

Конспект урока

Педагогика и дидактика

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

Украинкский

2014-04-02

1.3 MB

25 чел.

УРОК 1. Етапи розв'язування задач за допомогою комп'ютера

Мета уроку: Дати поняття про основні етапи розв'язування задачі з використанням комп'ютера.

Теоретичний матеріал

Нині важко уявити собі життя сучасної людини без комп'ютера. Люди використовують його для розв'язання найрізноманітніших задач: від виконання складних обчислень у наукових дослідженнях та економіці до виконання кропіткої домашньої роботи (наприклад: такі процеси як прання білизни, приготування їжі, миття посуду з використанням сучасної побутової техніки зараз комп'ютеризовані. Комп'ютеру можна доручити навіть функції домашнього секретаря). Комп'ютер—це помічник людини, без нього неможлива обробка величезного потоку інформації, який кожного дня все зростає: будь то оформлення складної документації, створення та обробка графічних зображень, розв'язування математичних задач, отримання даних з будь-якої теми, тощо. Це далеко не повний перелік всіх можливостей нашого помічника.

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

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

Розглянемо розв'язання прикладної задачі за допомогою комп'ютера:

Постановка (або формулювання) — це перший крок у розв'язанні будь-якої задачі. На цьому етапі слід чітко з'ясувати: що дано і що треба знайти. Тобто чітко уяснити суть задачі, необхідні початкові дані для її розв'язання, а також те, що можна вважати за очікуваний результат.

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

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

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

У нашому прикладі математичною моделлю задачі буде:

по-перше, розрахунок площі поверхні стін, що підлягає ремонту;

по-друге, розрахунок необхідних матеріалів (з урахуванням площішпалер, що знаходяться в рулоні, та додаткових шпалер, необхідних дляспівпадання малюнків на стіні);

по-третє, розрахунок вартості витратних матеріалів та вартості виконаних робіт.

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

Розробка алгоритму — третій крок у розв'язуванні задач. Алгоритм розробляється на основі побудованої математичної моделі. В ньому можна використати вже відомі методи розв'язування отриманих математичних співвідношень, причому за наявності кількох методів розв'язування, необхідно їх проаналізувати та обрати оптимальний. Якщо існуючими методами не можна розв'язати задачу, то треба розробити власний метод.

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

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

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

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

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

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

Отже, підіб'ємо підсумки. Основні етапи розв'язування задачі за допомогою комп'ютера такі:

  1.  постановка задачі;
  2.  побудова математичної моделі;
  3.  розробка алгоритму;
  4.  опис алгоритму мовою програмування;
  5.  тестування та налагоджування програми;
  6.  експлуатація програми.

Домашнє завдання:

  •  За підручником Т. Караванової «750 задач з алгоритмізації та програмування» прочитати сторінки 21—24.
  •  Придумати власну задачу, яка може бути розв'язана за допомогоюкомп'ютера. Записати етапи її розв'язування.
  •  Створити математичну модель задачі розрахунку кількості фарби дляфарбування заданої поверхні, якщо відома норма витрат фарби на квадратний метр поверхні (вид поверхні: квадрат, прямокутник, шар тощо).

УРОК 2. Інформаційна модель

Мета уроку: Дати поняття про моделювання та створення інформаційних моделей об'єктів.

Теоретичний матеріал

З давніх часів людина використовує моделювання для дослідження об'єктів та явищ в різних галузях діяльності. Результати цих досліджень допомагають визначити та покращити характеристики реальних об'єктів та процесів, краще зрозуміти сутність явищ та пристосуватися до них або керувати ними, конструювати нові та модернізувати старі об'єкти. Моделювання допомагає людині приймати обгрунтовані рішення та передбачати наслідки своєї діяльності. Комп'ютерне моделювання — це використання в цьому процесі комп'ютера як потужного сучасного засобу обробки інформації. Завдяки комп'ютеру суттєво розширюються галузі застосування моделювання, а також забезпечується всебічний аналіз отриманих результатів. Що ж таке модель? Моделлю можна назвати і матеріальні макети реально існуючих об'єктів, і нематеріальні об'єкти (наприклад такі, як теорія розвитку суспільства або всім відома формула земного тяжіння Р = mgh), багато чого іншого. Як же в одному слові можна об'єднати такі різні поняття?

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

Може виникнути запитання, чому не можна дослідити сам об'єкт, навіщо створювати моделі? Для цього може існувати багато причин:

  •  оригінала на момент дослідження може не існувати (наприклад, угіпотезах про загиблий материк Атлантида або про побудову Єгипетськихпірамід, або про можливу «ядерну зиму», яка може початися після атомногобомбардування);
  •  реально цей об'єкт не можна побачити цілком (наприклад, земну кулю,усю сонячну систему або атом);
  •  дослідник хоче побачити об'єкт, але не має можливості потрапити намісце його знаходження (наприклад: Ейфелева вежа, єгипетські піраміди,Софіївський собор тощо);
  •  процес, який досліджується, небезпечний для життя (наприклад,ядерна реакція).

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

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

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

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

Розглянемо найсуттєвіші ознаки, за якими класифікуються моделі:

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

Розглядаючи моделі за ознакою галузі використання, можна сказати, що вони бувають:

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

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

За способом представлення моделі можуть бути матеріальні та інформаційні.

Матеріальні моделі — це предметне відображення об'єкта зі збереженням геометричних та фізичних властивостей (наприклад: іграшки,

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

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

геометричні—графічні форми та об'ємні конструкції;

словесні—усні та письмові описи з використанням ілюстрацій;

математичні—математичні формули, що відображають зв'язок різних параметрів об'єкта;

структурні—схеми, графіки, таблиці;

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

спеціальні—ноти, хімічні формули тощо;

комп'ютерні та некомп'ютерні.

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

Домашнє завдання:

  •  Вивчити означення: модель, моделювання, класифікація моделей,комп'ютерне моделювання.
  •  Записати приклади моделей, з повсякденного життя.

УРОК 3. Алгоритми та їх властивості

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

Теоретичний матеріал

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

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

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

Кожен із нас використовує сотні різних алгоритмів. Спробуйте згадати деякі з них (алгоритми виконання арифметичних дій під час розв'язування задач; прибирання квартири; миття посуду; приготування їжі тощо).

Отже, давайте спробуємо сформулювати, що ж таке алгоритм.

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

В цьому визначенні використовується поняття «виконавець». Що це означає? Під виконавцем алгоритму ми розуміємо будь-яку істоту (живу чи неживу), яка спроможна виконати алгоритм. Все залежить від того, якої мети ми намагаємося досягнути. Наприклад: риття ями (виконавці— людина або екскаватор), покупка деяких товарів (один з членів родини), розв'язування математичної задачі тощо.

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

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

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

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

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

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

2. Визначеність (однозначність). Зрозумілий алгоритм не повиненмістити вказівок, зміст яких може сприйматися неоднозначно. Наприклад,«почисти картоплю», «посоли за смаком», «прибери в квартирі» тощо єнеоднозначними, тому що в різних випадках можуть привести до різнихрезультатів. Окрім того, в алгоритмах неприпустимі такі ситуації, колипісля виконання чергового розпорядження алгоритму виконавцю не ясно,що потрібно робити потім. Наприклад, вас послали за якимось товаром умагазин, та ще й попередили: «без хліба (цукру тощо) не повертайся». Ащо робити, коли цей товар відсутній?

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

  1.  Дискретність. Як було згадано вище, алгоритм задає певну послідовність дій, які необхідно виконати для розв'язання задачі. При цьому,для виконання цих дій їх розбивають у визначеній послідовності на простікроки. Виконати дії наступного розпорядження можна лише виконавшидії попереднього. Ця розбивка алгоритму на окремі елементарні дії (команди), що легко виконуються даним виконавцем, і називається дискретністю.
  2.  Масовість. Дуже важливо, щоб складений алгоритм забезпечуваврозв'язання не однієї окремої задачі, а виконував розв'язання широкогокласу задач даного типу. Наприклад, алгоритм покупки товару в магазинібуде завжди однаковий, незалежно від товару, що купується. Або алгоритмпрання не залежить від білизни, що переться, і таке інше. Отож, під масовістю алгоритму розуміють можливість застосування цього алгоритмудля вирішення великої кількості однотипних завдань.

5. Результативність. Виконання будь-якого алгоритму повиннозавершуватися одержанням кінцевих результатів. Тобто ситуації, колиможуть виникнути так звані «зациклення», повинні бути виключені щепри написанні алгоритму. Наприклад, розглянемо таку ситуацію: роботудано вказівку залишити кімнату (замкнутий простір), не виконуючируйнівних дій. У цьому випадку, якщо йому не дати команди «відкритидвері» (які, можливо, закриті), то спроби робота залишити кімнату будутьбезуспішними.

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

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

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

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

Основні з цих блоків такі:

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

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

Домашнє завдання:

  •  Прочитати сторінки 7—16 запропонованого підручника;
  •  Вивчити означення: алгоритм, властивості алгоритму, способи подання алгоритму;
  •  Придумати та записати у зошит будь-який алгоритм на побутову тему(кулінарний, прибирання кімнати, виконання уроків і т.д.);

УРОК 4. Базові структури алгоритмів

Мета: Дати поняття про базові структури алгоритмів. Навчити розпізнавати базові структури в запропонованих алгоритмах.

Теоретичний матеріал

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

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

Існує чотири базових структури алгоритмів: лінійні; розгалужені; циклічні; змішані. Найпростіша в написанні та виконанні перша з цих структур —лінійна. До неї відносяться алгоритми, що складаються лише з простих команд. Які ж команди можна назвати простими?

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

На відміну від людини, виконавець «комп'ютер» не може відмовитися від виконання команди, він не може подібно недбалому учню сказати «не хочу», «не можу», «в мене болить голова і поганий настрій». Команда, записана в алгоритмі, повинна бути виконаною, тому, якщо знехтувати суто людськими якостями («не хочу», «не можу» і т.д.), лінійним можна назвати алгоритм ранкового збирання до школи:

Прокинутися / зробити ранковий туалет / одягнутися / поснідати / зібрати речі / одягнути верхній одяг, взутися / вийти до школи.

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

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

Мовою блок-схем розгалужений алгоритм подається таким чином:

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

Виходячи з цього, речення «Якого кольору твій піджак?» не можна вважати умовою, а речення «Твоє волосся русяве?»—можна.

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

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

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

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

Примітка: На цьому етапі уроку рекомендується дати відпочити учням і пограти з ними в гру «Чи виконається подія, якщо?», запропонувавши кілька умов, що повинні виконуватися одночасно або по черзі.

Однак, навіть маючи в своєму арсеналі команду розгалуження, важко реалізувати алгоритми, що потребують багаторазового повторення деякої послідовності однакових дій. У цих випадках нас виручає циклічний алгоритм. У нашому житті дуже часто зустрічаються алгоритми з повторами, причому чітко визначаються два типи повторів. В одному випадку ми точно знаємо, скільки разів необхідно повторити задану послідовність команд, а в іншому — ні. Наприклад, в першому класі вчителька дає завдання дітям: «Діти, напишіть, будь ласка, в зошитах десять цифр «1», а потім рядочок цифр «2». Чим відрізняються ці два завдання? В першому випадку дитина отримала чітку вказівку написати десять одиниць, а в другому — ця вказівка була неточною (рядочок двійок). Чому другий випадок не такий точний? Тому що кількість написаних кожним учнем цифр буде залежати від їх власного почерку: одні учні пишуть охайно маленькими цифрами, інші — неохайно величезними кривулями.

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

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

Крім того, в циклах з умовою теж можна виділити два різних випадки:

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

Мовою блок-схем обидва типи циклів виглядають таким чином:

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

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

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

Домашнє завдання

  •  За підручником Т.Каравановой прочитати сторінки 14—16;
  •  Вивчити означення: базові структури алгоритмів, складені умови, типициклів;
  •  Придумати алгоритм на побутову тему (прибирання кімнати, виконання домашнього завдання і т.д.), виділивши в ньому базову структуру.

УРОК 5. Побудова алгоритмів

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

Теоретичний матеріал

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

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

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

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

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

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

Розглянемо, наприклад, простий алгоритм «переходу через вулицю». Взагалі для кожної дитини можна вважати це командою, що входить до її «системи команд». Але кожний пам'ятає, як у дитинстві батьки та вихователі неодноразово повторювали: якщо там, де необхідно перейти вулицю, є підземний перехід, то скористайся ним, якщо немає—відшукай місце, де є світлофор, і перейди вулицю, користуючись правилами; якщо немає ані підземного переходу, ані світлофора... (далі діти самостійно продовжать цей алгоритм). Однак, навіть у такому алгоритмі є необхідність дещо деталізувати. Наприклад, що значить «перейди вулицю, користуючись правилами при наявності світлофора»? А якщо алгоритм складається для зовсім маленької дитини, то що таке світлофор і як його шукати? А якщо виконавець—взагалі прибулець з інших світів? Що таке «зелене», «червоне», «жовте»? Що таке підземний перехід? Перелік запитань можна продовжувати. Алгоритми, що складаються для розв'язування окремих підзадач основної задачі, називаються допоміжними. Вони створюються при поділі складної задачі на прості або при необхідності багаторазового використання того ж самого набору дій в одному або різних алгоритмах.

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

Таким чином, можна вважати допоміжний алгоритм своєрідним «чорним ящиком», на вхід якого подаються деякі вхідні дані, а на виході ми отримуємо очікуваний результат. Головне — чітко домовитись про правила оформлення вхідних даних та результату. Невиконання домовленостей може призвести до збою у виконанні допоміжного алгоритму або до отримання неочікуваного результату. Описаний метод послідовної деталізації лежить в основі технології структурного програмування і широко застосовується у таких мовах програмування, як Паскаль, С, C++ та інших мовах високого рівня. При описуванні програми для комп'ютера мовами високого рівня допоміжні алгоритми реалізовуються у вигляді підпрограм. Правила опису, звернення до них та повернення в точку виклику визначаються конкретною мовою програмування. Для зручності часто використовувані підпрограми можна об'єднувати в бібліотечні модулі і за необхідності підключати їх в свої програми.

Домашнє завдання

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

УРОК 6. Програма. Мова програмування

Мета уроку: Дати поняття про програму, класифікацію мов програмування, поняття системи програмування, поняття про інтерпретацію та компіляцію.

Теоретичний матеріал

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

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

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

Описи алгоритмів мовою програмування називають програмами.

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

Нині створено багато мов програмування. Взагалі, для розв'язування більшості задач можна написати програму будь-якою з них. Тільки досвідчені програмісти знають, яку мову краще використати для розв'язування певного класу задач, щоб урахувати всі особливості та специфіку задач.

Мови програмування можна поділити на дві групи: мови низького рівня; мови високого рівня. До мов низького рівня належать мови асемблера (від англ. to assemble складати, компонувати). У мовах такого рівня використовуються символьні позначення команд, які легко зрозуміти і за-пам'ятати. Замість послідовностей двійкових кодів команд записуються їх символьні позначення, а замість двійкових адрес даних, які використовуються під час виконання програми, — символьні імена цих даних. Іноді мову асемблера називають мнемокодом або автокодом.

Але більшості програмістів під час складання програм зручніше користуватися певною мовою високого рівня. Для описування алгоритмів такою мовою використовується певний набір символів — алфавіт мови. З цих символів складаються так звані службові слова мови, кожне з яких має певне призначення. Службові слова зв'язуються в речення за певними синтаксичними правилами мови. Ці речення визначають деяку послідовність дій, які повинен виконати комп'ютер.

Мови високого рівня максимально наближені до «людської» мови, тому ними зручно писати програми. Але програми, написані мовами програмування високого рівня, комп'ютер «не розуміє». Для того, щоб він міг виконати програму, її потрібно перекласти на машинну мову. Для такого перекладу використовують спеціальні програми, які мають назву — транслятори. Транслятор — це програма, що призначена для перекладу тексту програми з однієї мови програмування на іншу. Процес перекладання називається трансляцією.

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

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

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

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

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

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

Як правило, програми-компілятори та програми-інтерпретатори називаються так само, як і мови, для перекладу з яких вони призначені. Слова Паскаль, Бейсік, Сі можна сприймати і як назви мов, і як назви відповідних програм—трансляторів.

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

Домашнє завдання

  •  Вивчити означення, що прочитані на лекції (що таке програма, класифікація мов програмування, що таке транслятор, типи трансляторів).

УРОК 7. Алфавіт мови програмування

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

Теоретичний матеріал

Мова програмування—це один з способів подачі алгоритму, що розрахований на виконавця комп'ютер (тут доречно згадати з дітьми взагалі, що таке алгоритм, його властивості та форми подачі).

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

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

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

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

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

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

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

Команда — це вказівка на виконання деякої дії. При написанні програм команди називають операторами, а величини, що використані в команді — операндами.

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

Алфавіт і словник мови.

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

У якості літер використовують великі та малі літери латинського алфавіту:

a b c d e f g h i j k l m n o p q r s t u v w x y z  i _(знак підкреслення)

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

У якості десяткових цифр: 1 2 3 4 5 6 7 8 9 0. Шістнадцяткові цифри будуються з десяткових цифр і літер від А до F (або від a до f).

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

+ плюс

* зірочка (знак множення)

= дорівнює

< менше

$ знак грошової одиниці

() круглі дужки

.крапка

: двокрапка

« апостроф

@ комерційне а

-мінус

/ знак ділення

> більше

# номер

[ ] квадратні дужки

{} фігурні дужки

, кома

; крапка з комою

^тильда

пробіл.

Комбінації спеціальних символів можуть утворювати складені символи:

:= присвоювання

.. діапазон значень

(..) альтернатива [ ]

>= більше або дорівнює.

<> не дорівнює

(* *) альтернатива {}

<= менше або дорівнює

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

Зарезервовані слова є складовою частиною мови, мають фіксоване написання і назавжди визначений зміст. Наприклад: begin, else, Junction, goto, end, program і т.д.

Стандартні слова призначені для заздалегідь визначених розробником мови типів даних, констант, процедур і функцій (наприклад, sin, cos, Pi). Зарезервований ідентифікатор можна перевизначити, але це може призвести до помилки, тому краще цього не робити.

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

1. Ідентифікатор починається тільки з літери або знака підкреслення.

  1.  Ідентифікатор може складатися з літер, цифр і знака підкреслення.
  2.  Між двома ідентифікаторами має бути хоча б один розділовий знак.
  3.  Максимальна довжина ідентифікатора 127 символів, але значущимиє тільки 63 символи.

При написанні можна використовувати як великі, так і малі літери. Компілятор не визначає різниці між ними.

Правила оформлення програм (пунктуації):

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

3.При використанні вкладених структур може виникнути ситуація:

end;

end;

end

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

  1.  В операторах циклу крапка з комою не ставиться після while, repeat,do і перед until.
  2.  В умовних операторах крапка з комою не ставиться після then і перед else.

УРОК 8. Величини. Типи даних

Мета уроку: дати поняття величини та типів даних, визначити стандартні типи даних, їх опис та набір функцій і операцій .

Теоретичний матеріал

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

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

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

Для визначення констант служить зарезервоване слово const.

Формат опису.

Const < ідентифікатор > = < значення константи >;

Приклад:

Const Max=1000;

Vxod='сегмент 5';

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

Ідентифікатор

Тип

Значення

Опис

True

Boolen

True

Істина

False

Boolen

False

Хибність

Maxint

integer

32767

Максимальне ціле

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

Формат опису:

Var <ідентифікатор>   :   <тип даних>;

Приклад:

Var  Sum1,   Sum2   :   real;

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

Скалярні типи у свою чергу підрозділяються на стандартні та типи користувача. Стандартні типи пропонуються користувачам розроблю-вачами системи Turbo Pascal. Типи користувача - розроблюються самим програмістом.

До стандартних скалярних типів відносяться наступні типи: цілі, дійсні, літерні, булівські.

Величини цілих типів можуть бути подані як у десятковій, так і в шістнадцятковій системах. Якщо число представлене в шістнадцятковій системі, перед ним без проміжку записується знак $. Діапазон зміни шістнадцяткових чисел від $0000 до $FFFF.

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

Тип

Діапазон

Необхідна пам'ять (байт)

Byte

0...255

1

Shortint

-128... 127

1

Integer

-32768... 32767

2

Word

0... 65535

2

Longint

-2147483648 ... 2147483647

4

Дійсні типи даних являють собою дійсні значення, що використовуються в арифметичних виразах і займають у пам'яті від 4 до 10 байт. У програмі мовою Паскаль допускається представлення дійсних значень у вигляді як із плаваючою, так і з фіксованою точкою.

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

Якщо десяткова точка відсутня, число вважається цілим. Перед числом може знаходитися знак «+» або «-». Якщо знак відсутній, за замовчуванням число вважається додатнім.

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

mЕ+р,

де т - мантиса (ціле або дробове число з фіксованою десятковою точкою), Е - означає «десять у степені», р - порядок (ціле число).

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

Число v форматі з плаваючою крапкою

Значення числа

0.4500Е+02

0.45*102 = 45

--2.600Е05

--2.6*105 = -260000

+0.45670Е-02

0.4567*10-2 = 0.004567

Стандартний найчастіше використовуваний дійсний тип даних наведений у таблиці1:

Тип

Діапазон значень

Мантиса (кількість значущих цифр)

Необхідна пам'ять

Real

2.9*10Е-39.. 1.7*10Е38

11-12

6

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

Булівський тип подається двома значеннями: True (істина) або False (хибність). Цей тип застосовується в логічних виразах і виразах відношення.

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

Змінні і константи всіх типів використовуються у виразах.

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

У мові Паскаль є такі операції: арифметичні; відношення (порівняння); логічні. Операції можуть бути унарними та бінарними.

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

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

Найчастіше використовуються арифметичні операції, що подані в наступній таблиці:

Операція

Дія

Тип операндів

Тип результату

Бінарні

+

Додавання

Цілий

Цілий

Дійсний

Дійсний

-

Віднімання

Цілий

Цілий

Дійсний

Дійсний

*

Множення

Цілий

Цілий

Дійсний

Дійсний

/

Ділення

Цілий

Дійсний

Дійсний

Дійсний

Div

Ділення націло

Цілий

Цілий

Mod

Залишок від ділення

Цілий

Цілий

Унарні

+

Збереження знака

Цілий

Цілий

Дійсний

Дійсний

-

Заперечення знака

Цілий

Цілий

Дійсний

Дійсний

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

Операція

Назва

Вираз

Результат

=

Дорівнює

А=В

True, якщо А дорівнює В

<>

Не дорівнює

А<>В

True, якщо А не дорівнює В

>

Більше

А>В

True, якщо А більше В

<

Менше

А<В

True, якщо А менше В

>=

Більше або дорівнює

А>=В

True, якщо А більше або дорівнює В

<=

Менше або дорівнює

А<=В

True, якщо А менше або дорівнює В

Результатом виконання логічного (булівського) виразу є логічнезначення True або False. Список логічних операцій наведений у наступнійтаблиці:

Операція

Дія

Вираз

А

В

Результат

not

Логічне

заперечення

not A

True

False

False

True

and

Логічне

«І»

A and В

True

True

True

True

False

False

False

True

False

False

False

False

or

Логічне

«АБО»

A or В

True

True

True

True

False

True

False

True

True

False

False

False

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

Операція

Приоритет

Вид операції

Not, унарні«—» і «+»

перший (вищий)

Унарна операція

*, /, div, mod, and

другий

Операції типу множення

+, -, or

третій

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

=, <>, <, >, <=, >=

четвертий (нижчий)

Операції відношення

Арифметичні вирази у якості операндів можуть містити імена функцій. З поняттям функції ми будемо знайомитись пізніше в курсі програмування, але стандартні функції (cos, sin, х2та інші) вам знайомі з курсу математики, і їх використання у курсі інформатики відрізняється тільки правилами запису (синтаксису). Так, на відміну від математики, в програмуванні аргумент функції обов'язково береться в круглі дужки. Нижче поданий список цих функцій, де літерами X та І позначені відповідно: X - цілі та дійсні типи, І - тільки цілі.

Abs(X) — обчислення абсолютного значення (модулю) X. Тип результату збігається з типом параметра.

АrсТап(Х) — обчислення кута, тангенс якого дорівнює X, значення кута подано в радіанах і може знаходитися в діапазоні від --π/2 до π/2. Для перетворення значення кута з радіанної міри в градусну необхідно значення кута помножити на число 180/ π. Результат має дійсний тип.

Cos(X) — обчислення косинуса X, параметр задає значення кута в радіанах. Для перетворення значення кута з радіанної міри в градусну слід значення кута помножити на число 180/ π. Результат має дійсний тип.

Ехр(х) — обчислення значення експоненти аргументу х). Результат завжди має дійсний тип.

Frac(X)  знаходження дробової частини X. Результат має дійсний тип.

Int(Х)  знаходження цілої частини X (дробова частина відкидається). Результат має дійсний тип.

Ln(x)  обчислюється натуральний логарифм аргументу. Результат має дійсний тип. За допомогою функцій Ехр та Lп можна обчислити довільний степінь числа наступним чином:   ab=Exp(b*Ln(a)).

Pi — повертає значення числа π (3.1415926).

Sin(X) — обчислення синуса X. Параметр задає значення кута в радіанах. Для перетворення значення кута з радіанної міри в градусну слід значення кута помножити на число 180/ π. Результат має дійсний тип.

Sqr(X)  піднесення до квадрату значеннях. Тип результату збігається з типом параметра.

Sqrt(X) — обчислення квадратного кореня з Х. Тип результату дійсний.

Random — генерує значення випадкового числа з діапазону від 0 до 0.99. Тип результату дійсний.

Random(P) — генерує значення випадкового числа з діапазону від 0-до Р-1. Тип результату цілий. Щоб випадкові числа були «більш випадковими», необхідно періодично змінювати базу генерації. Для цього використовується процедура Randomize, що дозволяє при кожному новому запуску програми отримувати різні випадкові числа.

Домашнє завдання:

  •  Прочитати сторінки 26 - 31,39 - 42 запропонованого підручника;
  •  Вивчити означення, що прочитані на лекції;
  •  3 підручника розглянути практичні завдання на стор. 38 - 39.

УРОК 9. Структура програми мовою Паскаль

Мета уроку: дати поняття вказівки присвоювання, познайомити із вказівками введення та виведення, зі структурою програми мовою Паскаль.

Теоретичний матеріал

Вочевидь, що майже в будь-якій програмі будуть присутні обчислення, адже комп'ютер — це перш за все обчислювальна машина. Причому результати обчислень необхідно буде запам'ятати для подальшого використання. Для цього існує команда присвоєння. Формат цього оператора такий:   <ім'я змінної>   := <вираз>;

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

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

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

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

Наприклад, якщо змінні X та Y описані наступним чином:

Var

X: integer;

Y: real;

то оператору Y:= Х+2; синтаксично не має помилок, хоча типи змінних і не збігаються. Перетворення типів (з цілого у дійсний) у цьому випадку виконується автоматично.

В той же час оператор X : = 2.78; буде помилковим, тому що автоматичне перетворення дійсних типів у цілі не виконується. Зверніть увагу, що константа 12.0 з точки зору компілятора буде також дійсною, хоча дробова частина і дорівнює нулю, тому що константа містить десяткову точку.

Аналогічно не можна змішувати літерні та числові типи даних, тобто вираз типу: 5 +   'F'   є помилковим.

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

Chr(I) — перетворює цілий тип у літерний, тобто повертає символ стандартного коду таблиці ASCII з номером, що дорівнює значенню І. Якщо значення більше 255, виникає програмне переривання.

Наприклад: Chr(lOS), результат = 'і'.

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

Наприклад: Ord('A'); результат = 65.

Round (X) — повертає значення X, округлене до найближчого цілого числа. Результат має цілий тип, тобто дійсна змінна перетворюється на цілу. Наприклад: Round(5.6); Результат = 6.

Тrипс (X) — повертає найближче ціле число, яке менше або дорівнює X, якщо Х>=0, і більше або рівне X, якщо X<0. Результат відноситься до цілого типу.

Виходячи з цього, наступний оператор X := Y/X; буде помилковим (X, як описано вище, має цілий, a Y- дійсний тип), а оператор X   : = round (Y/X) ;  помилок не має.

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

1.5 div 3      (один з операндів - дійсне число)

5 mod Y      (змінна Y має дійсний тип)

4/1 div 2    (результатом операції ділення 4/1 буде дійсне число 4.0)

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

Виведення  це зворотний процес, коли дані передаються після обробки з оперативної пам'яті на зовнішній носій.

У мові Паскаль стандартним засобом спілкування людини з комп'ютером є консоль (тобто це такі пристрої, як клавіатура та екран монітора).

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

Формат введення:

Read   (x1, х2, ...хn); 

де х1,  х2,... хп — змінні допустимих типів даних.

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

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

Формат виведення:

write  (Y1, Y2,...  Yn) — виведення на монітор;

де Y1, Y2... Yn — дані, що виводяться.

Процедура запису Writeln аналогічна процедурі Write, але після виведення останнього в списку значення для поточної процедури Writeln відбувається переміщення курсору на початок наступного рядка. Процедура Writeln, записана без параметрів, виконує тільки переміщення курсору на початок наступного рядка. Наприклад: Writeln ('Y1=' ,Y1)

У процедурах виведення Write і Writeln є можливість запису виразу, що визначає ширину поля для виведення. У прикладах, що подаються далі, використовуються наступні умовні позначення: I — ідентифікатор, що визначає ціле число, R—ідентифікатор, що визначає дійсне число,р, q— цілі константи, що визначають довжину поля виведення та кількість цифр після десяткової крапки.

1.Виведення десяткового значення цілої величини I у крайню праву позицію поля шириною р (пробіли перед числом вказані знаком «_»).

Значення І

Вираз

Результат

134

write(I:6);

______134

1

write(I:10);

_______________1

312

write(I+I:7);

_______624

2.Виведення у крайню праву позицію поля шириною p значення дійсної величини R у форматі з фіксованою точкою, причому після десяткової точки виводиться q цифр (0 <= q <= 24), що представляють дробову частину числа. Якщо q = 0, ні дробова частина, ні десяткова крапка не виводяться. Якщо q > 24, то при виведенні використовується формат із плаваючою точкою. Без використання форматування число також виводиться у форматі з плаваючою точкою.

Значення R

Вираз

Результат

511.04

write(R:8:4);

511.0400

-46.78

write(R:7:2);

___-46.78

-46.78

write(R:9:4);

___-46.7800

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

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

Блок, що не входить до складу будь-якого іншого блоку, називається глобальним. Блоки, що знаходяться в глобальному блоці, називаються локальними. Глобальний блок — це основна програма, він присутній обов'язково. Локальні блоки — це процедури і функції (вивчатимуться пізніше), їх наявність не обов'язкова. Об'єкти програми (змінні, константи тощо) відповідно називають глобальними і локальними. Область дії об'єктів — блок, де вони описані, і усі вкладені в нього блоки.

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

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

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

Program <ім'я>;

Uses <ім'я1, ім'я2>; {список бібліотечних модулів}

Const < ідентифікатор > = < значення >;

Туре < ідентифікатор > = < опис типу >;

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

{розділ опису підпрограм}

Begin

< оператори >;

End.

Будь-який розділ, крім розділу операторів, може бути відсутнім. Розділ uses завжди знаходиться після заголовку програми. Решта розділів можуть зустрічатися в програмі будь-яку кількість разів у довільному порядку. Головне, щоб усі описи об'єктів програми були зроблені до того, як вони будуть використані.

  •  Розділ uses складається з зарезервованого слова Uses і списку іменстандартних бібліотечних модулів та бібліотечних модулів користувача.

Формат опису:

Uses < ім'я 1 >,< ім'я 2 >,...;

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

У шкільному курсі ми використовуємо деякі зі стандартних модулів, що створені розробниками мови Паскаль: Crt і Graph:

Crt — містить засоби керування монітором у текстовому режимі, клавіатурою, а також звукові ефекти.

Graph—містить пакет графічних засобів, що забезпечують ефективну роботу з екраном монітору у графічному режимі.

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

У програмі, що записана мовою Паскаль, розділ операторів є основним. Він починається зарезервованим словом Begin (початок), далі розміщуються оператори мови, відділені один від одного крапкою з комою. Завершує розділ зарезервоване слово End (кінець) і крапка:

Begin 

< серія >;

End.

У будь-якому місці програми можуть вживатися коментарі. Це текст, за допомогою якого програміст занотовує деякі пояснення для користувачів програми. Текст коментарю обмежується символами { } або (* *) і може містити комбінації латинських і російських літер, цифр і інших символів. В обмежувачах (* *) пробіли між дужкою і зірочкою заборонені, і, крім того, у тексті не повинні знаходитися знаки обмежувачів, з яких коментар починається. Обмежень на довжину коментарю немає.

Домашнє завдання

  •  Вивчити означення, що прочитані на лекції.
  •  Із підручника можна дати практичні завдання зі с. 42-43.

УРОК 10. Формування зображення на екрані. Лінійні програми

Мета уроку: дати поняття про режими роботи монітору та принципи виведення зображення на екран у цих режимах.

Теоретичний матеріал

Монітор комп'ютера (з відеоадаптером CGA та вище) може працювати в одному з двох режимів: текстовому; графічному.

Текстовий режим дає змогу виводити на екран будь-який символ ASCII-таблиці у визначене знакомісце екрану, яке знаходиться на перетині рядка та стовпця. Кількість знакомісць залежить від текстового режиму, але найчастіше дорівнює 25 рядкам по 80 стовпців у кожному. В цьому режимі можна керувати кольором тла та кольором і яскравістю символів, які вводяться з клавіатури. У графічному режимі будь-яке зображення отримується як сукупність різнокольорових точок—пікселів.

Кількість елементів зображення задається відповідним режимом, але стандартно дорівнює 640 (по горизонталі) на 480 (по вертикалі) пікселів.

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

регулювати яскравість світіння символів;

керувати кольором зображення і тла;

керувати текстовим курсором;

організовувати роботу з текстовими вікнами;

організовувати звукові ефекти;

керувати клавіатурою.

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

ClrScr— повністю перефарбовує екран або поточне вікно у активний колір тла, і переміщує курсор у лівий верхній кут екрана або поточного вікна (координати 1,1).

При роботі в текстовому режимі із кольоровим монітором кожний виведений на екран символ може бути одного з 16 (0—15) можливих кольорів. Тло може бути одним із 8 (0—7) кольорів. Для встановлення кольору виведених символів використовується процедура TextColor, для встановлення кольору тла — процедура TextBackGround.

TextColor(Color:byte)—установити колір символів, що виводяться;

TextBackGraund(Color:byte) — установити колір тла.

Значення параметрів можна задавати як константами (наприклад, Yellow), такі їх числовими еквівалентами (наприклад, 14). Повний перелік можливих кольорів наведений нижче:

Темні кольорі

Світлі кольорі

0 (Black) — чорний

8 (DarkGray) — темно-сірий

1 (Blue) — синій

9 (LightBlue) — світло-синій

2 (Green) — зелений

10 (LightGreen) — світло-зелений

3 (Cyan) — блакитний

11 (LightCyan) — світло-блакитний

4 (Red) — червоний

12 (LightRed) — світло-червоний

5 (Magenta) — фіолетовий

13 (LightMagenta) — світло-фіолетовий

6 (Brown) — коричневий

14 (Yellow) — жовтий

7 (LightGray) — світло-сірий

15 (White) —білий

Щоб надати виведеним символам ефекту мерехтіння, при встановленні кольорів вказується константа Blink (або 16). Мерехтіння буде підтримуватися доти, поки не відбудеться установка кольору символів, що виводяться, без мерехтіння. Наприклад:

TextColor(Yellow+Blink); Write('Жовті символи, що миготять');

TextColor (12+16) ; Write ('Світло-червоні символи, що миготять') ;

TextColor(6);   Write('Коричневі  символи').

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

Low Video —встановлює режим мінімальної яскравості світіння виведених на екран символів.

Norm Video —встановлює режим нормальної яскравості світіння виведених на екран символів. Цей режим встановлюється автоматично при ініціалізації модуля Crt.

High Video—встановлює режим максимальної яскравості світіння. Існує можливість у будь-який момент роботи програми використовувати для виведення не весь екран, а деяку його частину, що називається вікном. Розмір вікна визначається користувачем, але вікно не може перевищувати розміру екрана.

Для організації вікон у Паскалі використовується процедура:

Window(X1,   Y1,   Х2,   Y2);

де XI, Y1 — координати лівого верхнього, а Х2, Y2 — правого нижнього кута вікна. Розмір максимального вікна (повний екран)—(1,1,80,25), мінімального — один стовпчик на один рядок.

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

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

GoToXY(X, Y:byte) — процедура переводить курсор у задану позицію екрана з координатами X(стовпчик), Y (рядок); верхній лівий кут екрана має координати (1,1), а правий нижній у стандартному режимі (80,25);

WhereX, WhereY—функції для одержання відповідно значень X- або Y-координати курсору щодо поточного вікна. Діапазон значень, що повертаються, визначається розмірами поточного вікна або повного екрана.

Завдання учням: Написати фрагмент програми, що виведе в середині екрана прізвище учня червоним кольором, а у наступному рядочку під прізвищем — ім'я жовтим кольором. Прізвище необхідно вивести підвищеною яскравістю, а ім'я — з мерехтінням. Колір тла має бути синім,

program task;

uses  crt;

begin

textbackground(blue);   {встановлення кольору тла}

clrscr;   {очищення екрана}

highvideo;   {встановлення підвищеної яскравості зображення}

textcolor(red);{встановлення кольору виведення}

gotoxy(35,12);   {переведення курсору в задану тонку - центр екрана}

writeln('Ivanov');   {виведення прізвища}

normvideo;

textcolor(yellow+blink);   {встановлення хольору виведення зображення з мерехтінням}

gotoxy(35,13);

writeln('Petro');

end.

У текстовому режимі операторами виведення можна виводити на екран будь-який символ ASCII-таблиці, навіть такий, клавіша якого відсутня на клавіатурі. В цьому випадку на екран монітора його можна вивести або за допомогою символу # з наступним ASCII-кодом символу, або набиранням ASCII-коду необхідного символу на додатковій цифровій клавіатурі (з натиснутою клавішею Alt). Наприклад, один і той самий символ «-» можна вивести на екран таким чином:

Writeln('-');    {символ отриманий одночасним натисканням клавіш Alt+<ASCII  код символу>}

Writeln(#219);

За допомогою таких псевдографічних символів можна створити на екрані нескладний малюнок, схожий на всім відомий «японський кросворд», а також різного вигляду таблиці (дивись повний набір псевдографічних символів ASCII-таблиці). Поряд із підпрограмами організації роботи з екраном модуль Crt містить засоби керування звуком.

У персональних комп'ютерів є можливість генерувати звукові сигнали за допомогою вбудованого динаміка з частотою 37—32767 Гц. Гучність звуку не регулюється. Стандартний звуковий сигнал («біп») постійної тривалості (0,25 с) і частоти (800 Гц) викликається сьомим символом (AG) кодової таблиці ASCII. Наприклад:

writeln('Помилка в даних',^G);

writeln('Працює процедура',#7,#7);

writeln('Підключен драйвер',Chr(7), Chr (7));

Для керування частотою звуку і його тривалістю в мові Паскаль використовуються стандартні процедури:

sound(l)—активізує звукові засоби комп'ютера. Ціле значення I вказує частоту звучання звуку в герцах. Звук зазначеної частоти буде генеруватися доти, доки не буде скасований процедурою NoSoud;

NoSound—скасування звуку. Скасовує звуковий режим, заданий процедурою Sound;

Delay (І) — вказує час, упродовж якого лунає сигнал.

Приклад:

Begin

Sound(500);

Delay(2000);

NoSound

End;

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

Нота

Велика октава

Мала октава

Перша октава

Друга октава

До

130,81

261,63

523,25

1046,50

Ре

146,83

293,66

587,33

1174,07

Мі

164,81

329,63

559,26

1318,05

Фа

174,61

349,23

698,46

1396,09

Соль

196,00

392,00

784,99

1568,00

Ля

220,00

440,00

880,00

1760,00

Сі

246,94

493,88

987,77

1975,00

Для використання в процедурі Sound усі зазначені в таблиці значення частот округлюються. Приклад, виконання за допомогою вбудованого динаміка дитячої пісеньки «Ялинка» за такою лінійною програмою:

program muzika;

uses  crt;

begin

sound(785);   delay(10000);  nosound;

sound(659);   delay(5000);   nosound;

sound(659);   delay(5000);   nosound;

sound(785);   delay(10000);   nosound;

sound(659);   delay(5000);   nosound;

sound(659);   delay(5000);   nosound;

sound(785);   delay(5000);   nosound;

sound(698);   delay(5000);   nosound;

sound(659);   delay(5000);   nosound;

sound(587);   delay(5000);   nosound;

sound(523);   delay(20000);   nosound;

sound(785);   delay(10000);   nosound;

sound(1046);   delay(5000);   nosound;

sound(880);   delay(5000);   nosound;

sound(785);  delay(10000);  nosound;

sound(659);  delay(5000);  nosound;

sound(659);   delay(5000);   nosound;

sound(785);   delay(5000);   nosound;

sound(698);   delay(5000);   nosound;

sound(659);  delay(5000);  nosound;

sound(587);   delay(5000);   nosound;

sound(523);   delay(20000);   nosound;

end.

Домашнє завдання:

За підручником прочитати сторінки 47—52;

Вивчити означення, прочитані на лекції;

Написати у зошит програму, що виводить наекран псевдографічне зображення, наприклад, таке як на малюнку. Як символи можна використовувати символи ASCII-таблиці з кодами 176—178,219—223.

УРОК 11. Лінійні програми

Мета уроку: дати поняття про режими роботи монітору та принципи виведення зображення на екран в цих режимах.

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

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

Приблизний перелік запитань на опитування:

Яку структуру повинна мати правильно написана програма на мовіпрограмування Паскаль?

Які блоки в програмі обов'язкові, а які ні?

Що таке лінійна програма?

В яких режимах може працювати відеосистема комп'ютера?

Охарактеризувати текстовий режим роботи монітору.

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

Які процедури керують кольором зображення та тла?

Як можна керувати яскравістю зображення та мерехтінням символів?

Скільки кольорів можна вивести на екран монітора в стандартномутекстовому режимі?

Як на екрані створити текстове вікно?

Як вивести на екран псевдографічне зображення?

Як задати позицію виведення зображення на екран?

Після проведення опитування діти виконують за комп'ютером завдання, що було підготовлене вдома: виведення псевдографічного зображення на екран в текстовому режимі. Можна запропонувати учням свої завдання з малюнками, використовуючи набір символів ASCII -таблиці.

Домашнє завдання:

• Запропонувати дітям вдома створити програму, що «виконує» простумелодію за допомогою вбудованого динаміка.

УРОК 12. Задачі з лінійними алгоритмами

Мета уроку: навчитися розв'язувати прості задачі.

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

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

Розв'язати такі приклади (повторення):

  •  Якщо значення цілочисельних змінних таке: Х= 15, Y=25, Z=8, то чому дорівнюватимуть значення цих змінних після виконання операційприсвоювання:

X   := sqrt(Y)*2;   Y  := Y-2;   Z   := Y div 2 mod 3;

Очікувана відповідь:

X: = sqrt(25)*2      присвоєння не може бути виконаним, оскількизначення квадратного кореня — дійсне число, а X— ціле число

Y:= 25-2  Y = 23

Z:= 23 div 2 mod 3  Z = 2

  •  Написати команду присвоєння, що надає значення середнього арифметичного змінних X та Y змінній Z (тип змінних дійсний).

Очікувана відповідь:

Z   :=   (X + Y)   / 2

  •  За допомогою яких операторів присвоєння можна поміняти місцямизначення двох змінних Х та Y.

Очікувана відповідь:

Для цього необхідне використання третьої змінної того ж типу, що й змінні X та Y, наприклад,

Z:    Z  := X; X := Y; Y := Z

  •  Далі можна розв'язати задачі з запропонованого підручника насторінках 55—58 (наприклад, 41, 50, 51, 58,62, 66,73,76,77).

Приклади розв'язування задач:

ЗАДАЧА № 41

Умова задачі: Якщо на одну шальку терезів посадити Даринку, яка важить п кг, і Наталку, яка важить на 5 кг менше, а на іншу насипати m кг цукерок, то скільки кілограмів цукерок доведеться з'їсти дівчаткам, щоб шальки терезів зрівноважилися?

Введемо змінні для зберігання результатів: N— вага Даринки; М— вага цукерок; Р—вага цукерок, які необхідно з'їсти дівчаткам.

Тоді програма для розв'язання задачі буде такою:

Program Task_41;

Uses crt;

Var M, N, P : real;

Begin

Clrscr;

Write('Введіть вагу Даринки');

Readln(N);

Write('Введіть вагу цукерок, що лежать на терезах');

Readln(M);

Р := N + N - 5 - М; {N - 5 - вага Наталки}

Writeln('Дівчаткам необхідно з'їсти ',Р,'кг цукерок.');

Readln;{Процедура затримує зображення на ехрані до натискання клавіші Enter)

End.

ЗАДАЧА №73

Умова задачі: Визначити, яку платню одержить на фірмі сумісник за виконану роботу, якщо йому нараховано 5 грн., а податок становить 20%.

Необхідні змінні: S—сума нарахувань сумісника; Р—реальна платня, яку він одержить у касі (за умовою вона становить 80 % від нарахувань).

Програма має наступний вигляд:

Program Task_73;

Uses crt; Var  P,S   :   real;

Begin

Clrscr;

Write('Введіть суму нарахувань робітника');

Readln(S); P   := S*0.8;

Writeln('Платня сумісника  становить:',   Р:8:2);

Readkey;

End.

Домашнє завдання:

Повторити теоретичний матеріал за попередні уроки;

За підручником Т.Караванової «750 задач з алгоритмізації та програмування» виконати задачі № 42,52, 59, 63, 74,75,78.

УРОК 13. Вказівка розгалуження

Мета уроку: дати поняття про структурні оператори, вказівку розгалуження (повну та скорочену форми) і поняття про прості та складені умови.

Теоретичний матеріал

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

Складений оператор — це група з довільного числа операторів, відокремлених один від одного крапкою з комою. Ця група обмежена опера-торними дужками begin і end.

Формат опису:

begin

<оператор >;

<оператор >;

end;

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

Умовні оператори забезпечують виконання або невиконання деякого оператора, групи операторів або блоку залежно від заданих умов. Використовуються умовні оператори в таких алгоритмах, де можливі кілька варіантів розв'язання задачі залежно від початкових умов. У мові Паскаль можливе використання двох умовних операторів: if  та case.

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

Перша (або повна) форма:

if < умова >

then 

begin

<серія 1>;

end

else

begin

<серія 2>;

end;

Друга (або скорочена) форма команди розгалуження:

if < умова >

then 

begin

<серія >;

end;

У повній формі команди умовного переходу виконується <серія 1>, якщо умова істинна, і <серія 2>, якщо вона хибна. В скороченій формі серія виконується тільки у випадку, якщо умова істинна, інакше команда розгалуження закінчується і виконується наступний за нею оператор.

Один оператор if може входити до складу іншого. У цьому випадку говорять про вкладеність операторів. При вкладеності операторів кожне else відповідає then, що йому передує.

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

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

Другий приклад. Ми отримуємо подарунок від батьків на одне зі свят: день народження, Новий рік або День Святого Валентина. Отже, якщо сьогодні один з перелічених днів (мій день народження або 1 січня або 14 лютого), я отримаю подарунок. При цьому очевидно, що не обов'язково народжуватися на Новий рік або на День Святого Валентина.

Службове слово not виконує заперечення умови, тобто, якщо вона була істинною, то стає хибною і, навпаки: якщо була хибною — стає істинною. Наприклад, якщо на вулиці не (англійською not) йде дощ, то я залишу вдома парасольку. В цьому випадку «йде дощ» - умова, яка може бути істинною чи хибною в залежності від погоди на вулиці. А слово не заперечує цю умову, тобто робить її хибною, якщо дощ дійсно йде, і навпаки — істинною, якщо дощу немає.

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

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

(х > 4)   and  (x < 10)

При х = 5 ця умова буде істинною, а при х = 25 — хибною.

ЗАДАЧА № 81

Умова задачі: Обчислити значення логічних виразів.

1) х<у

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

2) a and not (b — с)

При а = false, b =false, c = true умова буде хибною (false), тому що при з'єднанні двох умов службовим словом and, якщо одна з умов хибна, то й вся умова хибна (зверніть увагу дітей на те, що це легко запам'ятовується, якщо перекласти слово and українською). Дійсно, якщо хоч одна з умов, поєднаних словом «та», не є істинною, то й весь логічний вираз буде хибним.

3) not (a and b)  or b = a

При а = true, b = false ця умова буде істинною, тому що (a and b) хибна (одна з умов хибна); not (a and b) — істинна (заперечність хибності); not (a and b)  or  b = a — істинна (бо якщо з двох поєднаних службовим словом or умов хоч одна істинна, то весь вираз істинний).

4) not (a and (x < у)) or (x < 0)

При а = true, x = -0.1, у = 0.7умова буде істинною, тому що друга з умов (х < 0) буде істинною, а при з'єднанні двох умов службовим словом or достатньо одній з них бути істинною, щоб весь логічний вираз був істинним (тобто значення умови (not (a and (x < у))) можна не обчислювати).

ЗАДАЧА № 82

Умова задачі: Записати у вигляді логічних виразів висловлювання, наведені нижче:

а) значення х не належить інтервалу (0; 1)

(х <= 0)   or  (х >= 1);

б) точка М(х,у) лежить у другій чверті координатної площини

(х < 0)   and  (у > 0);

в) точка М(х, у) лежить усередині або на межі одиничного круга зцентром у початку координат

(sqr(x)   + sqr(у)   <= 1);

г) координати дійсного вектораx(xr xr xj утворюють неспадну послідовність і всі вони невід'ємні

1 <= х2)   and  (х2 <= хЗ)   and  (x1 >= 0)   and  (x2 >= 0)   and (хЗ >= 0) ;

ґ) 3 > В > С > 0,1

(З  > В)   and   (В >= С)   and   (C > 0.1) .

ЗАДАЧА № 84

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

а) дійсне значення х замінити абсолютною величиною

if х < 0

then x   :=  -х;

б)менше з двох дійсних значень х та у (або будь-яке з них, якщо вонирівні) замінити нулем

if х < у

then х   := 0

else у   :=  0;

в) присвоїти змінній х значення 0, якщо її початкове значення належалоінтервалу (0,2)

if   (0 <= х)   and   (x <= 2)

then x   := 0;

Домашнє завдання:

за підручником прочитати сторінки 47—52;

вивчити означення, що прочитані на лекції;

Задачі № 80, № 82 (2, 5, 7, 9), № 84 (3, 5, 6). Для учнів, що маютьвисокий рівень знань, бажано запропонувати задачу № 83.

УРОК 14. Програми з вказівкою розгалуження

Мета уроку: навчити складати алгоритми з використанням команди розгалуження та записувати їх мовою програмування.

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

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

ЗАДАЧА № 97

Умова: Дано значення дійсних величин а, b, с. Знайти:

min((a + b + с) /2,    1/(а2 +l)+l/(b2 +l)+l/(c2 +1)

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

Program Example_97_2;

Uses crt;

Var а,Ь,с : real;

Rezl,Rez2,Min : real; {а,Ь,с - вхідні дамі; Rezl, Rez2 -проміжні обчислення; Міn - результат виконання програми}

Begin

Clrscr; {Очищення екрану}

Write("Введіть числа а,b,с: ');

Readln(a,b,c);

Rezl:=(a + b + с) / 2;

Rez2:=sqrt(1/ (sqr (a) +1) + 1/ (sqr (b) +1) +1/ (sqr (c) +1)) ;

If Rezl<Rez2 Then Min:=Rezl

Else Min:=Rez2;

Writeln('Min=',Min:8:2);

Readkey; {Затримка зображення на екрані}

End.

ЗАДАЧА № 100

Умова: Дано значення дійсної величини х. Визначити:

х-5___

хг+х-2

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

Program Example_100_2;

Uses crt;

Var X,Rezultat:real;

Begin

Clrscr; {Очищення екрану}

Write('Введіть значення X: ');

Readln(X);

If X*X*X+X-2<>0 Then

begin

Rezultat:=(X-5)/(X*X*X+X-2);

Writeln('Rezultat=',Rezultat:8:2);

end

Else

Writeln('Обчислення неможливі - ділення на нуль!');

Readkey;

End.

ЗАДАЧА №101

Умова: При даному значенні х обчислити:

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

Program Example_101_4;

Uses  crt;

Var X,Rezultat:real;

Begin

Clrscr;

Wrіte('Введіть значення Х:   ');

Readln(X);

If   (X>=1)   and   (X*X*X-sqrt(X-l)>=0)   Then

begin

Rezultat:=sqrt(X*X*X-sqrt(X-l));

Writeln('Rezultat=',Rezultat:8:2);

end

Else

Writeln('Обчислення неможливі - від'ємний підкореневий вираз!') ;

Readkey;

End.

ЗАДАЧА № 107

За рейтинговою системою оцінка визначається таким чином: якщо загальний бал учня становить не менше 92% від максимального, то виставляється оцінка 12, якщо не нижче 70%, то — оцінка 8, якщо ж не нижче 50%, то — оцінка 5, в інших випадках - оцінка 2. Визначте оцінку учня, якщо він набрав N балів, а максимальне значення загального балу становить S. У цій задачі можна використати повну або скорочену форму команди розгалуження.

Пропонується розв'язування зі скороченою формою.

Program Example_107;

Uses  crt;

Var N,S,Grade:integer; {N - бали, що набрав учень; S -максимальне значення сумарного балу; Grade - оцінка учня}

Begin

Clrscr;

Wrіte('Введіть максимальне значення сумарного балу, що може набрати учень: ');

Readln(S);

Write ('Введіть кількість балів, що отримав учень: ».) ;

Readln(N);

If (S<=0) or (N<=0) or (N>S)

Then writeln('Помилка вхідних даних')

Else

Begin

N:=round(N/S*100); {Знаходження %-відношення балів учня до максимально можливого}

If N>=92 then Grade:=12;

If (N<92) and (N>=70) then Grade:=8;

If (N<70> and (N>=50) then Grade:=5;

If (N<50) then Grade:=2;

Writeln('Учень отримав  оцінку  -   ',   Grade);

End;

Readkey;

End.

ЗАДАЧА № 103

Умова: На площині дано дві точки 1 у1 ) та 2, y2) Визначити, яка з них знаходиться далі від початку координат.

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

Очевидно, що відстань від початку координат до точки з координатами (х,у) буде обчислюватись наступним співвідношенням:

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

Program Example__103;

Uses crt;

Var Xl,Yl,X2,Y2:real;

{X1,Y2,X2,Y2 - координати даних точок}

SI, S2:real;

{S1,S2 - відстані відповідно до першої та другої точки}

Begin

Clrscr;

Write('Введіть координати першої точки: ');

Readln(XI,Y1);

Write('Введіть координати другої точки: ');

Readln(X2,Y2);

Sl:=sqrt(sqr(Xl)+sqr(Yl)) ;

S2:=sqrt(sqr(X2)+sqr(Y2));

If SKS2

Then Writeln('Друга точка далі від початку координат')

Else Writeln('Перша точка далі від початку координат');

Readkey;

End.

Домашнє завдання:

Прочитати сторінки 59—65 запропонованого підручника;

Задачі № 96 (2), 97 (3), 99, 100 (4), 101 (5), 102 (1), 104, 105.

УРОК 15. Використання вказівки розгалуження

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

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

ЗАДАЧА № 86

Умова задачі: Чебурашка вирішив купити килими, щоб застелити кімнату, в якій він мешкав разом з Геною. їхня прямокутна кімната виявилася розмірами а х b, де а та b—цілі числа. Коли Чебурашка запитав у магазині, які килими є у продажу, то продавець повідомив, що є квадратні килими зі стороною с, де с — ціле число. Яку кількість килимів необхідно придбати Чебурашці, щоб накрити максимальну площу кімнати? Килими не можна накладати та підгинати. Визначити, яка площа кімнати буде не накритою килимами. Передбачити ситуацію, коли розміри килиму перевищують розміри кімнати.

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

К. = K1 • К2,

де K1 та К2 — кількості килимів, що вміщуються вздовж двох суміжних сторін кімнати.

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

Використані змінні: a, b - розміри кімнати; с - розмір килиму; К1, К2 - кількість килимів вздовж однієї та другої стінки відповідно; К — загальна кількість килимів; S - площа кімнати, що не накрита килимами.

Програма, що реалізує алгоритм розв'язку даної задачі, має вигляд:

Program Example_86;

Uses  crt;

Var a,b,c,S:word;

K,K1,K2   :   word;

Begin

Clrscr; {Очищення екрану}

Write('Введіть розміри кімнати: ');

Readln(a,b);

Write('Введіть розміри килима: ');

Readln(c);

If (с > a) or (с > b)

Then writeln ('Кімнату неможливо накрити такими килимами')

Else 

Begin

Kl:=а div с;   К2:=b div с;

К   := К1*К2;       S   := а*b - К*с*с;

Writeln('Кількість  куплених килимів   ',   К);

Writeln('Площа кімнати,  що не накрита килимами  ',   S);

End;

Readkey;

End.

ЗАДАЧА № 89

Умова задачі: Від річкового вокзалу відійшли одночасно у протилежних напрямках теплохід та турист. Теплохід рухався зі швидкістю V1 км/ год, а турист по стежці вздовж річки зі швидкістю V2 км/год. Якщо через N годин турист передумає і вирішить попливти річкою назад за теплоходом зі швидкістю V3 км/год, то чи встигне він підсісти на теплохід, який має за графіком зупинку через Y годин після початку руху і стоїть на цій зупинці Z годин? Вважати на те, що всі події відбувалися протягом однієї доби.

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

S=(V1+ V2)*N 

де V1 та V2 — швидкості теплоходу та туриста відповідно.

Швидкість, з якою турист почне наздоганяти теплохід, — (V3-V1)km за годину, де V3—швидкість, з якою турист попливе навздогін теплохода. Час, який буде у туриста для наздоганяння, (Y-N + Z) годин, тому що зупинка в теплохода буде за розкладом через Угодин після початку руху, але N годин він уже плив, а Z годин теплохід буде стояти на цій зупинці. Тоді за цей час турист пройде відстань:

St=(V3-V1)*(Y-N+Z)

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

Program Example_89;

Uses  crt;

Var Vl,V2,V3:real;

N,Y,Z   :   real;

Begin

Clrscr;

Write('Введіть швидкості теплоходу та туриста:   ');

Readln(VI,V2);

Write ('Введіть час, через який турист підсів на теплохід:') ;

Readln(N);

Write('Введіть швидкість,   з якою турист плив за теплоходом,

час зупинки теплоходу, та тривалість зупинки:') ;

Readln(V3,Y,Z);

If   (Vl<=0)or(V2<=0)or(V3<=0)or(N<=0)or(Y<=0)or(Z<=0)

Then writeln('Помилкові вхідні  дані')

Else

Begin

S: = (V1+V2)*N;

St: = (V3-Vl)*(Y-N+Z) ;

If St>=S

Then writeln('Турист встигне на теплохід.')

Else writeln(хТурист не встигне на теплохід.');

End;

Readkey;

End.

ЗАДАЧА № 90

Умова: Жили собі дід і баба, і був у них город прямокутної форми. Довжина городу була А м, а ширина складала В м. Якось дід посварився з бабою і вирішив поділити город порівну. Тепер у діда квадратний город зі стороною С м, відрізаний скраю, а решта дісталася бабі. Визначити, чи не залишилася баба ошуканою та якої форми дістався їй город - прямокутної чи квадратної?

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

C2<=а В-С2

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

Наприклад, якщо дідусь захоче відрізати собі город зі стороною більшою, ніж сторона загального городу, то це неможливо зробити взагалі. Якщо ж він відріже, то город, що залишиться, може мати квадратну (варіант А), прямокутну (варіант Б) або іншу форми (вариант В) (дивись малюнок):

Програма, що реалізує запропонований алгоритм, має вигляд:

Program Example_90;

Uses  crt;

Var А,В,С:real;

Begin

Clrscr;

Write ('Введіть розміри городу: ');

Readln(А,В);

Write('Введіть довжину сторони дідусевого городу: ');

Readln(С);

If (A<=0)or(B<=0)or(C<=0) Then writeln ('Помилкові вхідні дані')

Else

Begin

If (OA) or (OB)

then writeln('Дідусь не зможе відрізати город такого розміру')

else

begin

If A*B-sqr(C)<=sqr(С) then writeln('Бабуся ошукана.')

else writeln('Бабуся не ошукана.');

If (A<>C) and (B<>C)

Then writeln('Город залишився іншої форми')

Else

If ((A=C)and(B/2=C))or((B=C)and(A/2=C))

then writeln('У бабусі квадратний город.')

else writeln('У бабусі прямокутний город.');

end;

End; Readkey;

End.

ЗАДАЧА № 91

Умова: Трьом Товстунам подали на десерт кремові тістечка. Маса одного тістечка —Хкг, а маса Товстунів відповідно X1 кг,Х2 кг та Х3 кг. Перший Товстун з'їв N тістечок. Кожний наступний Товстун з'їдав у два рази більше від попереднього, але при цьому він не міг з'їсти більше половини своєї власної ваги. Скільки тістечок було з'їдено Товстунами за обідом?

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

Наприклад, якщо другий Товстун може з'їсти 2 N тістечок, то вага цієї їжі буде 2 N Хкг. Але за умовою він не може з'їсти більше половини своєї ваги, тобто більше ніж X1 /2 кг. Тому якщо вага тих тістечок, що Товстун може з'їсти, не перевищує поріг X1 /2 кг, то ми до загальної кількості тістечок додаємо всі можливі, тобто 2 N, якщо ж перевищує, то ми додаємо тільки ту кількість тістечок, що не дозволяє перевищити припустимий поріг, тобто X1 /2 /X (дозволена вага їжі поділена на вагу одного "тістечка). Якщо в цьому випадку число вийде нецілим, то це означає, що Товстун з'їв тістечко не повністю. Щоб такого не трапилось, ми робимо відкидання дробової частини після ділення за допомогою функції trunc.

Програма, що реалізує цей алгоритм, має наступний вигляд:

Program Example_91;

Uses crt;

Var X,X1,X2,X3:real;

N,Counter : integer; {N - кількість тістечок, що з'їв перший Товстун; Counter - загальна кількість з'їдених тістечок}

Begin 

Clrscr;

Write('Введіть вагу тістечка: ');

Readln(X);

Write('Введіть вагу Товстунів (1-го, 2-го та 3-го): ');

Readln(X1, Х2, ХЗ);

Write('Введіть кількість тістечок, що з'їв перший Товстун ') ;

Readln(N);

If (X<=0)or(X1<=0)or(X2<=0)or(X3<=0)or(N<=0)

Then writeln('Помилкові вхідні дані')

Else

Begin

Counter:=N; {3'їв перший Товстун}

If N*2*X<=X2/2  Then Counter:=Counter+2*N

Else Counter:= Counter+ trunc(X2/2/X);

If N*4*X<=X3/2  Then Counter:=Counter+4*N

Else Counter:= Counter+ trunc(X3/2/X);

Writeln('Кількість з'їдених тістечок: ', Counters

End;

Readkey;

End.

Домашнє завдання:

Прочитати сторінки 59 - 65 запропонованого підручника;

Задачі №87, 88,93,94.

УРОК 16. Використання вказівки розгалуження

Мета уроку: навчити складати алгоритми з використанням команди розгалуження та записувати їх мовою програмування.

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

ЗАДАЧА № 120

Умова задачі: Дано натуральне число N (N>= 1000). Визначити суму першої і останньої цифр даного числа.

Для розв'язання цієї задачі ми скористаємося стандартними операціями цілочисельного ділення та остачі від ділення цілих чисел (операції div та mod). Нагадаємо, що результатом ділення числа націло на 10 буде ефект відкидання «молодшої» цифри числа (відповідно при діленні на числа 100, 1000, 10000 тощо будемо «відкидати» дві, три або чотири цифри числа). Результатом ж операції знаходження залишку від ділення на 10 буде остання цифра числа (відповідно при знаходженні залишку від ділення на 100, 1000, 10000 будемо отримувати дві останні, три останні, чотири останні цифри числа).

Наприклад:

234  div 10  = 23

9213 div 100 = 92

52 mod 10  = 2

2845 mod 1000  =  845.

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

Program Example_120_2;

Uses crt;

Var N,   First,  Last  :  word;

{First - перша цифра числа;   Last - остання цифра числа}

Begin

Clrscr;

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

Readln(N); Last   := N mod 10;

If   (N>=0)   and   (N<10)   then First:=0;

If   (N>=10)   and   (N<100)   then First:=N div 10;

If   (N>=100)   and   (N<1000)   then First:=N div  100;

If   (N=1000)   then First:=l;

Writeln('Сума першої  та останньої цифр дорівнює', First+Last);

Readkey;

End.

ЗАДАЧА №128

Умова: Квадратний багаточлен заданий коефіцієнтами а, b, с,де а 0. Визначити, чи корені відповідного рівняння є парними числами.

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

  1.  обчислити дискримінант;
  2.  якщо ми отримали від'ємне число, то коренів для розв'язку квадратного рівняння з даними коефіцієнтами а, b, с не існує;
  3.  якщо дискримінант невід'ємний, то корені рівняння знаходяться.Парність коренів можна визначити, використовуючи операцію знаходження залишку від цілочисельного ділення на 2 (парне число при цьомуу залишку має 0, а непарне — 1). Зверніть увагу на те, що парність абонепарність можна визначити тільки для цілих чисел.

Program Example_128_l;

Uses crt;

Var a,b,c,D,Xl,X2:real;

{a,b,c - коефіцієнти квадратного рівняння; D - дискримінант; XI, X2 - корені квадратного рівняння}

Begin 

Clrscr;

Write ( 'Введіть коефіцієнти квадратного рівняння а,b,с: ') ;

Readln(a,b,c);

If a=0

Then writeIn(лПомилка вхідних даних')

Else

Begin

D:=sqr(b)-4*a*c;

If D<0

Then writeln('Рівняння не має розв»язків.')

Else

Begin

XI:=(-b-sqrt(D))/(2*a);   X2:=(-b+sqrt(D))/(2*a);

Writeln('Корені рівняння:');

Writeln('Xl=',X1:8:2);

Writeln('X2=',X2:8:2);

If   (round (XI) OX1) or (round(X2) <>X2)

Then writeln('Корені рівняння не є цілими числами.')

else

if   (round(Xl)   mod 2  =0)   and   (round(X2)   mod 2  =0)

then writeln('Корені рівняння парні')

else writeln(ЛКорені рівняння непарні');

End;

End;

Readkey;

End.

ЗАДАЧА №130

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

Для розв'язання цієї задачі пропонується впорядкувати розміри отвору та розміри цеглини за зростанням, тобто досягти того, щоб було а<=b<=c та х<=у. Тоді перевірка зведеться до порівняння розмірів отвору з найменшими розмірами цеглини (адже ми можемо цеглину розвернути будь-яким боком, щоб проштовхнути її у отвір).

Program Example_130;

Uses crt;

Var a,b,c,x,y,S:real;

(S - допоміжна змінна для обміну місцями значень двох змінних}

Begin 

Clrscr;

Write('Введіть розміри цеглини: ');

Readln(a,b,c);

Write('Введіть розміри отвору: ') ;

Readln(х,у);

If (a<=0)or(b<=0)or(c<=0)or(x<=0)or(y<=0)

Then writeln('Помилка вхідних даних.')

Else

Begin

{Впорядкування розмірів цеглини)

If а>b

Then Begin S:=а; а:=Ь; b:=S; End;

If a>c

Then Begin S:=a; a:=c; c:=S; End;

If b>c

Then Begin S:=b; b:=c; c:=S; End;

{Впорядкування розмірів отвору)

If x>y

Then Begin S:=x; x:=y; y:=S; End;

If (a<=x) and (b<=y)

Then writeln('Цеглина пройде у отвір.')

else writeln('Цеглина не пройде у отвір.')

End;

Readkey;

End.

Домашнє завдання:

Прочитати сторінки 59—65 запропонованого підручника;

Задачі № 120, 122, 123, 125, 126 (4,5), 128 (2), 129 (1).

УРОК 17. Вказівка вибору

Мета уроку: Дати поняття про форми вказівки вибору

Теоретичний матеріал

Цей оператор є узагальненням оператора if і дозволяє зробити вибір із довільного числа наявних варіантів. Він складається з виразу, що називається селектором, і списку параметрів, кожному з яких передує список констант вибору (список може складатися і з однієї константи). Як і в операторі if тут може бути присутнім слово else, що має той же зміст. Формат опису:

case < вираз-селектор > of

список констант вибору1  >   :   < оператор  1  >;

список констант вибору 2  >   :   < оператор 2  >;

   .   .   .   .

список констант вибору n >   :   < оператор n >

else < оператор >

end;

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

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

ЗАДАЧА №134

Умова задачі: Розробити діалогову програму, яка запитує вік користувача і визначає, до якої вікової категорії він належить:

  1.  від 1 до 10 років — дитина;
  2.  від 11 до 15 років - підліток;
  3.  відіб до 20 років - юнак (юнка);
  4.  від 21 до 30 років - молода людина;
  5.  після 31 року - доросла людина.

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

Program Example_134;

Uses crt;

Var Years:byte;   {Years  - вік користувача}

Begin

Clrscr;   {Очищення екрану}

Write ('Введіть Ваш вік:   ').;

Readln(Years);

Write('Ви  ');

Case Years  of

0..10:   Writeln('-  дитина.');

11.. 15:   Writeln('-  підліток.');

16..20:   Writeln('-  юнак   (юнка).');

21..30:   Writeln('-  молода людина.');

31..150:   Writeln(•-  доросла людина.')

Else writeln(',  пожартували? Людина стільки не живе!');

End;

Readkey;   {Затримка зображення на екрані}

End.

ЗАДАЧА №151

Умова: Розробити програму виведення інформації про день тижня, (вихідний чи робочий), якщо задано його номер від 1 до 7 (1 - понеділок).

Program Example_149;

Uses crt;

Var Day:byte; {Day - номер дня тижня}

Begin

Clrscr;

Write('Введіть номер дня тижня: ');

Readln(Day);

Case Day of

1..5: Write('Це робочий день ');

6,7: Write('Це вихідний день ');

Else write('Це не день ');

End;

Writeln('тижня.');

Readkey;

End.

ЗАДАЧА №160

Умова: Дано ціле число N (1 > N > 3) та дійсне число X. За даним значенням змінної N, яка є номером функції, визначити:

l)sin X 2) cos X; 3)tg X.

Program Example_160;

Uses crt;

Var N:byte; {N - номер функції, що обчислюється}

X,Y:real; {X - значення змінної, Y - значення функції)

Begin

Clrscr;

Write('Введіть значення X: ');

Readln(X);

Write('Введіть номер функції, що обчислюється: ');

Writeln('1 - sin') ;

Writeln('2 - cos');

Writeln( '3 - tg');

Readln(N);

Writeln('Результат обчислень:')

Case N of

1: begin Y:=sin(X); writeln('sin(x)=',Y:8:2); end;

2: begin Y:=cos(X); writeln('cos(x)=',Y:8:2); end;

3: begin Y:=Sin(X)/cos(X); writeln('tg(x)=',Y:8:2);

end;

Else  wrіteIn('Помилка вхідних  даних.');

End;

Readkey;

End.

ЗАДАЧА №165

Умова: Дано натуральне число N(N=< 100), яке позначає вік людини. Додати до цього числа відповідно слова: «рік», «роки», «років», наприклад: 1 рік, 12 років, але 43 роки.

Очевидно, що для того, щоб правильно дописати відповідне слово, необхідно виділити останню цифру числа, що позначає вік людини. Тоді, якщо це цифра «1», то дописується слово «рік», якщо цифри «2», «З» або «4» - дописується слово «роки», а в усіх останніх випадках - дописується слово «років». Виключенням являється діапазон між 10 та 20 роками: в цих випадках завжди пишеться слово «років».

Program Example_165;

Uses  crt;

Var Years:byte;   {Years - вік людини}

Begin

Clrscr;

Write('Введіть Ваш віk:   ');

Readln(Years);

If Years>100  Then writeln('Помилкові вхідні  дані.')

Else

Begin

Write('Вам  ',Years);

If (Years>=10) and (Years<=20) Then writeln('років')

Else

Case Years mod 10 of

1: writeln('рік.');

2 . . 4 : writeln('роки.');

0,5..9: writeln('років.');

End;

End;

Readkey;

End.

Домашнє завдання:

прочитати сторінки 65 - 66 запропонованого підручника;

завдання №147, №148, №155, №157, №161.

УРОК 18. Типи циклів

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

Теоретичний матеріал

На початку уроку повторити з учнями загальні відомості про цикли. У мові програмування Паскаль існує три типи циклів: for, repeat та while. Якщо кількість повторень відома заздалегідь, використовується оператор for, якщо кількість повторень невідома, застосовуються оператори repeat або while.

Оператор повторення for. Цей оператор повторення інакше називається циклом з параметром (або лічильником). Він складається із заголовку та тіла циклу і може бути поданий у двох форматах:

1.for <параметр цихлу>   := <S1>  to <S2>   do 

begin

<серія>;

end;

2. for <параметр циклу> := <S1> downto <S2> do

begin

<серія>;

end;

де 51 і 52 — вирази, що визначають початкове і кінцеве значення параметру циклу; for.. do — заголовок циклу; <серія> — тіло циклу.

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

Параметр циклу, його початкове і кінцеве значення повинні належати до одного типу даних. При цьому можливе використання будь-якого скалярного типу: цілого (integer, byte, word, longint); булівського (boolean); символьного (char). Дійсний тип даних використовувати заборонено. Значення параметру циклу послідовно збільшується при for... to або зменшується при for... downto на одиницю при кожному повторі. Кількість повторів тіла циклу в операторі for можна визначити за таблицею:

Оператор

S1<S2

S1=S2

S1>S2

for... to

S2-S1+1 разів

1 раз

He виконується

for...downto

He виконується

1 раз

S1-S2+1 разів

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

Приклад програми з оператором For

Умова задачі. Знайти суму всіх натуральних чисел від 1 до 100.

Program Example_1;

Uses  crt;

Var  Sum,   i:   integer;

Begin

Clrscr;

Sum:=  0;

For  i:=  1  to  10  do     Sum:= Sum +  i;

Writeln('Sum =   '   Sum);   Readkey;

End.

Оператор повторення repeat. Цей оператор циклу складається із заголовку (repeat), тіла та умови закінчення (until).

Формат опису:

repeat

<серія>

until < умова >;

Умова — вираз булівського типу. Про умови ми вже говорили в темі «Команда розгалуження», і всі особливості їх застосування та оформлення в цій команді нічим не відрізняються від попереднього випадку. У цьому циклі спочатку виконується серія (тіло циклу), а потім перевіряється умова виходу з циклу. Саме тому ця команда повторення інакше називається циклом із післяумовою. Якщо умова виходу з циклу хибна (false), цикл активізується ще раз, якщо результат істинний (true), відбувається вихід із циклу.

Такий оператор повторення має наступні характерні риси:

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

тіло циклу виконується хоча б один раз;

тіло циклу виконується, поки умова хибна (false);

у тілі може знаходитися будь-яка кількість операторів без операторнихдужок (begin... end);

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

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

Приклад програми з оператором Repeat

Умова задачі. Перевірка коректності введення. Дано три числа, що задають величини кутів трикутника. Визначити, чи можна побудувати трикутник, що має задані кути. Якщо ні, користувач повинен ввести інші дані.

Program Example_2;

Uses  crt;

Var a,b,c: integer;

Begin

Clrscr;

Repeat

Write(*Введіть величини кутів трикутника: ');

Readln(а,b,с);

Until (a>0)and(b>0)and(c>0)and(a+b+c)=180;

End.

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

Формат опису:

while < умова > do

begin

<серія>;

end;

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

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

Приклад програми з оператором While

Умова. Дано натуральне число N. Визначити кількість цифр у числі.

Program Example_3;

Uses  crt;

Var N: longint; Counter: integer;

Begin

Clrscr;

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

Readln(N);

Counter:= 0;

While N > 0 do

Begin

Counter:=Counter+1; {Підрахунок кількості цифр}

N:=N div 10;   {Відкидання останньої, цифри}

End;

Writeln("Кількість цифр у заданому числі дорівнює',  N);

Readkey;

End.

Домашнє завдання:

Прочитати сторінки 83 — 89 із запропонованого підручника;

Вивчити означення, що прочитані на лекції.

УРОК 19. Цикли з параметром

Мета уроку: навчити використовувати цикл з параметром для розв'язування типових задач.

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

ЗАДАЧА №183

Умова задачі: Компанія бабусь поїхала на мотоциклах на курси комп'ютерної грамотності. Попереду на мотоциклі без глушника їхала одна бабуся, за нею - дві, потім - три і т.д. Скільки бабусь їхало на заняття, якщо приголомшені пішоходи всього нарахували N рядів? Чи змогли бабусі зайняти всі місця у класі, якщо там стояло k рядів по / комп'ютерів у кожному? Скільки вільних місць залишилося?

Розв'язання: Зверніть увагу на те, що фактично ця задача зводиться до знаходження суми всіх натуральних чисел від 1 до N. У кінці задачі для повторення команди розгалуження учням пропонується визначити кількість зайнятих бабусями та вільних місць. Програма розв'язання даної задачі має такий вигляд:

Program Example_183;

Uses  crt;

Var I,N,Sum:word;{I - параметр циклу,  N - кількість рядів мотоциклів.   Sum - кількість бабусь,  що приїхали на курси} Place,k,l:word;{k - кількість рядів у комп'ютерному класі, 1 - кількість комп'ютерів у кожному ряду,  Place - кількість місць,   якої вистачило для бабусь}

Begin

Clrscr;

Sum:=0;

Write('Введіть кількість рядів мотоциклів: ');

Readln(N);

For I:=1 to N do Sum:=Sum+I;

Writeln('Кількість бабусь, що приїхали на курси ',Sum);

Writeln('Кількість комп'ютерів на курсах ',к*1) ;

If Sum<k*l

Then writeln('Бабусі не змогли зайняти всі місця.')

Else writeln('Бабусі зайняли всі місця.');

Place:=Sum - к*1;

If Place>0

Then writeln('Бабусям не вистачило ',Place,' місць.');

Readkey;

End.

ЗАДАЧА № 189

Умова: Знайти значення

(1 + 0.1)(2 + 0.2)...(9 + 0.9)

Розв'язання: У даному випадку кількість повторів буде дорівнювати 9, тобто програма буде мати вигляд:

Program Example_189_2;

Uses  crt; Var I:word;   {I - параметр циклу}

Rez:real;   {Rez  - результат обчислень}

Begin 

Clrscr;

Rez:=1;    {Початкове значення дорівнює 1, тому що результат є накопиченням добутку}

For  I:=1  to  9 do Rez:=Rez*(I+0.1*I);

Writeln('Rez=  ',Rez:8:2);   

Readkey;

End.

ЗАДАЧА № 190

Умова задачі: Дано ціле п. Визначити п!

Розв'язання: Відомо, що n! (вимовляється як n-факторіал) - це добуток всіх натуральних чисел від 1 до п. Тому програма має вигляд:

Program Example_190_1;

Uses  crt;

Var  I,n:word;   {I  - параметр циклу}

Factorial:longint;   {Factorial  - результат обчислень}

Begin 

Clrscr;

Factorial:=1;

Write('Введіть  значення n:   ');

Readln(n);

For  I:=1   to n do  Factorial:=Factorial*I;

Writeln('Factorial=  ',   Factorial:8:2);  Readkey;

End.

ЗАДАЧА № 191

Умова задачі: За данимнатуральним значенням змінної п обчислити:

Розв'язання: Для розв'язання цієї задачі необхідно виконати обчислення, починаючи з самого вкладеного кореня. Кожний наступний крок обчислюється таким чином: до попереднього результату додається двійка і з отриманої суми береться квадратний корінь.

Програма, що виконує описані обчислення, наведена нижче:

Program Example_191_6;

Uses crt;

Var I,n:word;{I  - параметр циклу}

Rez:real;{Rez  - результат  обчислень}

Begin

Clrscr;

Rez:=0;   {Початкове значення дорівнює 0,току що результат є накопиченням суми}

Write('Введіть значення n:   ');

Readln(n);

For I:=1  to n do

Begin Rez:=sqrt(Rez+2);

End;

Writeln('Rez=  ',Rez:8:2);

Readkey;

End.

ЗАДАЧА №210

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

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

Program Example_210;

Uses  crt;

Var  I,n:word;   {I  - параметр циклу,   n - оцінка учня}

Time:word;

Begin

Clrscr;

Write('Введіть Вашу оцінку: ');

Readln(n);

Time:=10000;

{Значення цієї змінної залежить від характеристик комп'ютера, і може бути підібрана практичним шляхом}

If (n<1) or (n>12) Then

begin

writeln('Ви помилились, такої оцінки не існує.');

sound(200); delay (time 5); nousound;

end

Else

For I:=1 to n do

Begin

Sound(200); Delay(time);

Nousound; Delay(time);

End;

Readkey;

End.

Домашнє завдання:

Повторити теоретичний матеріал по роботі циклу з параметром;

виконати задачі № 189 (4), № 190 (3), №191, № 211, № 178, № 188.

УРОК 20. Цикли з передумовою

Мета уроку: Навчити використовувати цикл з передумовою для розв'язування типових задач.

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

ЗАДАЧА № 180

Умова: Коли Василині Премудрій виповнилося 18 років, Чахлик Невмирущий вирішив одружитися з нею. Василина запитала Чахлика, скільки у нього скринь із золотом. Чахлик відповів, що зараз у нього я скринь і щороку додається ще по т скринь. Василина пообіцяла, що вийде заміж тоді, коли у Чахлика буде k повних скринь із золотом. Скільки років буде тоді нареченій?

Program Example_180;

Uses crt;

Var m,n,k:word;

{n - початкова кількість  скринь  із золотом,   m - щорічний «прибуток» Чахлика,   k - «потреби» Василини Премудрої}

Sum,Years:word;   {Sum - щорічне накопичення Чахлика, Years -вік Василини Премудрої}

Begin

Clrscr;

Write('Введіть початкову кількість скринь з золотом: ');

Readln(n);

Write (' Введіть щорічний прибуток Чахлика: ') ;

Readln(m);

Write('Введіть «потреби» Василини Премудрої: ');

Readln(k) ;

Sum:=п;{Початковий «капітал» Чахлика}

Years:=18;{Початковий вік Василини}

While Sum<=k do

Begin

Sum:=Sum+m;

Years:=Years+1;

End;

Writeln('Василиях вже виповнилося  ',Years,'   років.');

Readkey;

End.

ЗАДАЧА № 197

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

123  div 10 = 12 3928 mod 10 = 8.

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

Program Example_197_2;

Uses  crt;

Var n:longint;   {N -  дане число}

Sum:byte;   {Sum -  сума цифр числа}

Begin

Clrscr;

Sum:=0; {Сума цифр числа спочатку дорівнює 0}

Write('Введіть ціле число: ');

Readln(N);

N:=abs(N);

While N>0 do

Begin

Sum:=Sum+N mod 10; {Знаходження суми цифр}

N:=N div 10; {«Відкидання» останньої цифри числа}

End;

Writeln('Sum= ',Sum);

Readkey;

End.

ЗАДАЧА №204

Умова: Дано ціле число т > 1. Знайти найбільше число к, при якому виконується умова 4к < т.

Program Example_204;

Uses crt;

Var m,k,Rez:longint; {Rez - обчислення степеню 4}

Begin 

Clrscr;

Write('Введіть значення m (m>1): ');

Readln(m);

Rez:=1;

k:=0;

While Rez<m do

Begin k:=k+l; Rez:=Rez*4; End;

Writeln('k= ' ,k) ;

Readkey;

End.

ЗАДАЧА № 208

Умова: Під час обчислення результатів деяких експериментів виникає необхідність отримання результату із заданою похибкою. Нехай результатом є нескінченна сума, що задається певною формулою, і відома похибка e (e > 0) для знаходження наближеного значення результату. Будемо вважати, що необхідна точність досягнута, коли додавання наступного доданку змінює суму на величину, меншу за e. Обчислити:

1

_____

i=1

i2

Розв'язання:

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

Program Example_208_1;

Uses  crt;

Var  і:word;

Rez,Epsilon:real; {Rez - результат обчислень, Epsilon - похибка}

Begin

Clrscr;

Rez:=0; {Початкове значення дорівнює 0, тому що результат є накопиченням суми}

Write('Введіть значення похибки (Е>0): ');

Readln(Epsilon); і:=1;

While 1/sqr(i)>Epsilon do

Begin Rez:=Rez+1/sqr(i) i:=i+1; End;

Writeln('Rez= ',Rez:8:2); Readkey;

End.

ЗАДАЧА №212

Умова: Обчислити значення числа тс, використовуючи формулу

Знайти, кількість доданків що дає значення числа тс з точністю до 3 знаків.

Розв'язання: Для організації циклу з передумовою в цій задачі необхідно мати еталон числа тс для порівняння з нескінченною сумою. Візьмемо за цей еталон значення вбудованої функції Рі. Крім того, за умовою задачі нам необхідно отримати результат із точністю до третьої цифри після коми. Пропоную для цього стандартне число π і отриману нескінченну суму помножити на число 1000 та округлити результат за допомогою функції round (отриману суму, крім того, необхідно ще помножити на 4, оскільки сама сума є чвертю числа π). Зверніть увагу також на те, що в нескінченній сумі доданки, що стоять на парних місцях, додаються зі знаком «+», а доданки на непарних місцях—віднімаються від суми. Тобто, залежно від номера доданку (парний чи непарний) ми організовуємо знакочергування у нескінченній сумі. Програма для обчислення числа тс за допомогою нескінченної суми наведена нижче:

Program Exarople_212 ;

Uses crt;

Var  і,n:word;

{і  -  параметр  циклу,   п  -  кількість  доданків}

Rez_Pi:real;   {Rez_Pi  - обчислене значення числа Рі}

Begin

Clrscr;

Rez_Pi:=0;

і: =1;   {і  — значення знаменника першого доданkа}

п:=0;   {п - доданків ще нема}

while  round(pi*1000)=round(Rez_Pi*4000)   do

Begin

If n mod 2=0 Then Rez_Pi:=Rez_Pi+1/i

Else Rez_Pi:=Rez_Pi-1/i;

i:=i+2;

n:=n+1;

End;

Writeln(vКількість необхідних доданків - ',n);

Writeln("Порівняйте значення Рі: ');

Writeln('Результат обчислень програми: ',Rez_Pi:8:3);

Writeln('Вбудована функція: ' ,Рі:8:3) ;

Readkey; {Затримка зображення на екрані}

End.

Домашнє завдання

Виконати задачі № 185, № 198 (3), № 200 (1), № 203 (3), № 205, № 208 (2).

УРОК 21. Цикли з післяумовою

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

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

ЗАДАЧА №179

Умова задачі: На дверях ліфта висіло загрозливе попередження про те, що двері самі зачиняються в той самий момент, коли зайвий за вагою пасажир переступить поріг ліфта. Котрий пасажир постраждає, якщо ліфт витримує вагу не більше S кг, а вага пасажирів, що стоять у черзі до ліфта, дорівнює відповідно a1, а2, а3, ... ап?

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

Program Ехаmрlе_179;

Uses  crt;

Var N:word;   {I - номер пасажира,  що увійшов у ліфт}

Sum,A,S:real;    {Sum - сумарна вага пасажирів, що знаходяться в ліфті, А - вага чергового пасажира, що увійшов до ліфта, S - критична вага,  що може бути піднята ліфтом}

Begin 

Clrscr;

Sum:=0;

N:=0;   {На початху роботи програми в ліфті немає пасажирів}

Write('Введіть  критичну вагу, що піднімає ліфт:   ');

Readln(S);

Repeat

Write('Введіть вагу чергового пасажира:   ');

Readln(A);

Sum:=Sum+A;

N:=N+1;

Until Sun>S;

Writeln('Постраждає   ',N,'-й пасажир.');

Readkey;

End.

ЗАДАЧА №181

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

Розв 'язання: Аналогічно до попередньої задачі, аналізувати наявність волосся на голові слід після того, як папуга вже висмикнув чергову порцію волосся. А «знущання» над дідусем скінчиться тоді, коли гребінець йому стане непотрібним, тобто кількість волосся на голові дорівнюватиме нулю. Зверніть увагу, що в цій задачі змінна S використовується для підрахунку чергової порції волосся, що підлягає висмикуванню капосним папугою.

Program Example_181;

Uses   crt;

Var S,N,Sum:longint;  {S - кількість волосся, що буде висмикнутим,   Sum - кількість волосся,  що залишилося в дідуся на голові,   N - початкова кількість волосся}

Day:word;

{Day — номер дня,   який папуга знущається над дідусем}

Begin 

Clrscr;

Write('Початкова кількість волосся в дідуся на голові:   ') ;

Readln(N) ;

If N=0

Then writeln('Дідусь уже лисий,   папузі нічого робити!')

Else

begin

Day:=0;

Sum: =N ;

S:=1;

{Початкова кількість волосся, що буде висмикнуте папуго»}

Repeat

Sum:=Sum-S;   {Зменшення дідусевого волосся}

S:=S*2;

Day:=Day+1;   {Підрахунок номеру дня}

Until  Sun<=0;

Writeln('Папуга знущався над дідусем  ',Day,'   днів.');

End;

Readkey;

End.

ЗАДАЧА №209

Умова: На скільки років необхідно покласти в банк суму X грошових одиниць, щоб одержати суму N грошових одиниць (N > X), якщо банк нараховує 200 % річних?

Розв'язання.Очевидно, що умовою виходу з цього циклу буде отримання заданої суми грошей. Якщо за умовою задачі N > X, то кожну перевірку ми будемо виконувати після того, як до вкладеної суми додамо щорічний банківський процент. Отже, програма має вигляд:

Program Example_209;

Uses  crt;

Var X,N:real;   {X - початковий внесок,   N - бажана сума} Rezrreal;   {Rez - результуюча сума на рахунку} Years:longint;  {Years - термін, протягом якого сума перебувала в банку}

Begin 

Clrscr;

Write('Введіть початкову суму внеску:   ');

Readln(X);

Write('Введіть бажану суму внеску:   ');

Readln(N);

If N<=X

Then writeln('Bn вже маєте бажану суму!')

Else

Begin

Rez:=X;

Years:=0;

Repeat

Rez:=3*Rez;

{200% річних збільшують за рік внесок втричі}

Years:=Years+l;

Until Rez>=N;

Writeln( 'Ви отримаєте бажану суму через ',years,' років') ;

End;

Readkey;

End.

ЗАДАЧА №231

Умова: Скласти програму, яка б допомогла працівникам ДАІ визначати кількість порушників перевищення швидкості на трасі, якщо відомо, що на даному проміжку траси встановлено обмеження на швидкість Vmax, a прилад фіксує швидкість автомобілів V1 V2,..., Vn.

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

Program Example_231;

Uses crt;

Var V,Vmax:real;   {V - швидкість  автомобіля,   Vmax  -  максимально дозволена швидкість}

Count:longint; {Count - кількість порушників}

Begin

Clrscr;

Count:=0; {На початку роботи порушники відсутні}

Write('Значення максимально дозволеної, швидкості: ');

Readln(Vmax);

Vmax:=abs (Vmax) ; {Знаходження модуля для виключення помилки введення від'ємної максимальної швидкості}

Repeat

Write('Значення швидкості чергового автомобіля: ');

Readln(V);

If V>Vmax then Count:=Count+1;

Until V<=0;

Writeln('Кількість порушників   ',Count);

Readkey;

End.

ЗАДАЧА №251

Умова: Дано натуральне число п і дійсні числа а1 а2, .... ап. Відомо, що в заданій послідовності є хоча б одне нульове значення. Розглядаючи члени послідовності, що розташовані до першого нульового члена, визначити середнє арифметичне членів.

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

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

Програма має вигляд

Program Example_251_5;

Uses crt;

Var   count:word;    {count  -   кількість   членів   послідовності до  першого нульового елемента}

a,Sum:real;   {a - черговий член послідовності.   Sum - сума членів послідовності  до першого  «0»}

SA:real;   {SA -  середнє  арифметичне}

Begin

Clrscr;

Sum:=0;

count:=0; {Початкові значення дорівнюють «0»}

repeat

write('Введіть черговий член послідовності: ') ;

readln(a);

Sum:=Sum+a;

count:=count+1;

until a=0;

SA:=Sum/(count-1);

Writeln('Середнє арифметичне = ',SA:8:2);

Readkey;

End.

Домашнє завдання:

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

Виконати задачі №185, №187, №208(5), №234(4), №239(4), №251(4).

УРОК 22. Табличні величини

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

Теоретичний матеріал

Поняття таблиці було введене програмістами для запам'ятовування та обробки великих наборів однотипних даних. Наприклад, якщо ми хочемо знайти середній бал кожного учня класу з інформатики за чверть, нам слід знайти суму дуже великої кількості оцінок. Як зберігати всі ці оцінки? Зарезервувати для цього 40 (а може і більше змінних)? Це дуже незручно. Ось тут і знадобиться такий структурований тип даних, як таблиця, або інакше—масив.

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

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

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

Оскільки конфігурація елементів масиву фіксована, то до окремого елементу можна звертатися за допомогою одного або кількох індексів. У якості індексів можуть використовуватися константи або змінні порядкових типів. Елементами можуть бути як прості змінні будь-яких типів, так і змінні складених типів (масивів, рядків і т.д.), тобто може існувати масив масивів, масив рядків тощо. Глибина вкладеності цих типів — довільна, тому кількість індексів не обмежена, але сумарна довжина структури не повинна перевищувати дозволені мовою Паскаль 64 Кбайти. В пам'яті ПК всі елементи масиву зберігаються послідовно, тому при переході від молодших до старших адрес першим змінюється самий правий індекс. Порядок роботи з масивом:

  1.  оголосити масив у розділі описів, вказавши його розмір і тип елементів, що в нього входять (тобто приготувати місце в пам'яті, де будуть зберігатися значення елементів);
  2.  заповнити необхідними значеннями масив для розв'язування задачі;
  3.  вивести масив на екран для контролю правильності роботи з ним;
  4.  робота з даним масивом;
  5.  виведення результатів роботи.

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

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

Масив 1

Формат опису (1 варіант):

Var

<ім'я>  :  array  [<розмірність>]  of <базовий тип елементів>;

Для опису масиву можна використовувати попередньо визначену константу:

Const Gl=40;

Var

<ім'я>   :   array[1..G1]   of <6азовий тип елемеятів>;

Приклади описів:

Const n =  100;

Var A:array[1..n]   of real;   В:array[1..100]   of  integer;

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

Формат опису (2 варіант):

Туре

<ім'я типу> = array [<розмірність>] of <базовий тип елементів>;

Var 

<ім'я масиву>   :   <ім'я типу>;

Приклад:

Туре

Massiv = array   [1..20]   of  longint;

Var M:   Massiv;

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

[<ім'я масиву> <йоію_індекс>]   

наприклад:

М(6] — шостий елемент масиву М;

А[10] — десятий елемент масиву А;

В [і] — і-тий елемент масиву В.

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

Методи заповнення одновимірного масиву:

1) за формулою:

for i:=1 to n do M[i] :=і*і-10  {або будь-яка інша формула};

  1.  з клавіатури:

for i:=1  to n do

begin

write (' Введіть М['і,'] :    ');     readln(M[i]); end;

  1.  випадково (генератором випадкових чисел) із проміжку [А, В]:

for  i:=1  to n do M[i]:=random(B-A)+A;

Методи виведення елементів одновимірного масиву на екран

1) виведення у стовпчик:

for  i:=1  to  n do writeln(M[i]);

2) виведення у рядок:

for i:=1  to n do write(M[i]:5);

При виведенні елементів масиву у рядок бажано зазначити формат виведення, наприклад, write (М[і] : 10:3) — для дійсних чисел або write (М[і] :5) —для цілих.

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

Розглянемо типові завдання з одновимірними таблиць.

ЗАДАЧА № 293 (1)

Умова: Записати наведені нижче послідовності змінних з індексами у вигляді послідовностей елементів масивів: (сj), де (j =-3, -2,..., 3).

Очікувана відповідь: с[-3], с[-2], с[-1], с[0], с[1], с[2], с[3].

ЗАДАЧА №293 (4)

Умова: Записати наведені нижче послідовності змінних з індексами у вигляді послідовностей елементів масивів: (Qj), де (1 = n +1, n + 2,..., n + 5).

Очікувана відповідь: Q[n + 1], Q[n + 2], Q[n + 3], Q[n + 4], Q[n + 5].

ЗАДАЧА № 297

Умова: Нехай нижня та верхня межі індексів одновимірного масиву S дорівнюють відповідно -10 та 32. Визначити значення індексів елементів масиву S, порядковими номерами яких є:

№ варіанту

Завдання

Відповідь

1

1

S[-10]

5

3

S[-8]

10

10

S[-1]

13

12

S[1]

17

32

S[21]

ЗАДАЧА № 299

Умова: Нехай елементи одновимірного масиву А[1..1О] набувають відповідно значень -5, -3, -1, 1, 3, 5, 7, 9, 11, 13. Які значення буде надруковано в результаті виконання таких операторів:

№ варіанта

Завдання

Відповідь

Примітка

3

For i:=l to 5 do

Writeln(A[i+5])

5

7

9

13

Друкується тільки п'ять останніх елементів масиву, тому що змінна циклу змінюється від 1 до 5, а індекс елементів масиву від 6 (1+5) до 10 (5+5)

5

i:=l;

While A[i]<0 do

Begin

i:=i+l;

Writeln(A[i])

End;

-5

-3

-1

Друкуються    тільки    від'ємні елементи   масиву,   тому   що умова виходу з циклу така, що коли  А[і]<=0,   він  припинить свою роботу.

7

i:=l;

repeat

i:=i+l;

Writeln(A[i])

until A[i]>=0;

-3

-1

1

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

ЗАДАЧА № 311 (2)

Умова: Дано одновимірний масив цілих чисел А[і], де і = 1, 2, ...n. Вивести елементи масиву з парними індексами.

Разв'язання: В даному випадку незручно користуватися для виведення на екран елементів з парними індексами циклом з параметром, тому що він дозволяє зміну індексу тільки на одиницю. Тому пропонуємо скористатися циклом з перед — або післяумовою.

Program Example_311_2;

Uses  crt;

Var N,і:word;  {N — кількість елементів масиву, і — змінна циклу)

A:array[1..100]   of  longint;   {A — заданий масив}

Begin

Clrscr;

Write('Введіть кількість елементів масиву (<100):');

Readln(N);

For i:=1 to N do

Begin

А[і] :=random(300) ; {Заповнення масиву випадковими числами}

{Виведення масиву на ехран для контролю правильності роботи програми}

Write(A[i]:5);

End;

Writeln; {Переведення курсору на наступний рядок}

і:=2;

while  i<=N do

Begin

Write(A[i]:5);

i:=i+2;  {Змінна циклу змінюється на 2, щоб вибрати тільки парні елементи}

End;

Readkey;   {Затримка зображення на екрані}

End.

Домашнє завдання

Прочитати сторінки 117—119 запропонованого підручника.Задачі № 292, № 293 (останні), № 295 (останні), № 297, № 299 (останні), № 310, № 311(3).

УРОК 23. Обробка лінійних таблиць

Мета уроку: навчити розв'язувати типові задачі з обробки лінійних таблиць.

На початку уроку бажано зробити опитування за матеріалом попереднього уроку та повторити тему «Команда повторення», особливо різновид циклу — цикл з параметром. Далі рекомендується розглянути методирозв 'язування типових задач з обробки лінійних таблиць. Зверніть увагу на те, що дуже велика кількість задач з обробки масивів потребує виконання однотипних дій з усіма елементами, тому зручно в цих випадках використовувати цикл із параметром для організації повторення.

ЗАДАЧА № 300

Умова: Барон Мюнхгаузен, вийшовши на екологічно чисте полювання, зарядив свою рушницю кісточками вишень. Після того, як він вдало влучив поміж роги оленям (в яких влучило відповідно k1, k2,-.;kN кісточок), у них на головах виросли чудові молоді вишеньки. Скільки саджанців зміг подарувати барон Мюнхгаузен садівникам-дослідникам?

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

Program Ехашр1е_300;

Uses  crt;

Var N:word;

К:array[1..100]   of  longint;

{K — зарезервований масив для зберігання кількості кісточок,   що влучили в оленів}

і,Sum:longint;  {і — змінна циклу, Sum — загальна кількість кісточок,   що влучили в  оленів}

Begin

Randomize;

{Ця процедура запускається з метою зробити числа генератора випадкових чисел ще більш «випадковими»}

Clrscr;

Sum:=0; {Спочатку Мюнхгаузен ще ні в кого не влучив}

Write('Олені, в яких влучив Мюнхгаузен (<=100): ');

Readln(N);

For і:=1 to N do

Begin 

К[і]:=random(5 0)+2 0; {Заповнення масиву випадковими числами в діапазоні від 20 до 70}

Write[і]:5); {Виведення на екран для контролю}

Sum: =Sum+K [і] ; {Знаходження кількості влучених кісточок}

End;

Writeln; {Переведення курсору на новий рядок}

Writeln('Кількість нових саджанців ',Sum);

Readkey; {Затримка зображення на екрані}

End.

ЗАДАЧА № 309

Умова: Дано натуральне число А. Складіть програму, що представляє його у вигляді многочлена. Наприклад,

123 = 1 * 102 + 2* 101 + 3*10°.

Розв 'язання. Ця задача фактично зводиться до пошуку окремих цифр числа. Оскільки ми не знаємо на початку роботи, скільки цифр має число, для їх зберігання можна використати масив цілих чисел, причому розмірність цього масиву можна задати не більше 10 елементів, тому що навіть найбільше ціле число типу longint має в своєму складі не більше 10 цифр. Щоб вивести на екран отриманий многочлен, ми спочатку знаходимо кількість цифр у числі та виділяємо кожну цифру окремо, а потім організовуємо цикл від «найстаршої» значущої (ненульової) цифри числа до «наймолодшої» з виведенням на екран самої цифри, помноженої на 10 у степені номер розряду - 1 (тобто i-1).

Програма, що реалізує описаний алгоритм, має вигляд:

Program Example_309;

Uses crt;

Var N,і,Count:longint; {N — задане ціле число, і — змінна циклу. Count — кількість цифр в числі}

Cifra:array[1. .10] of byte; {Cifra — масив для зберігання цифр числа}

Begin 

Clrscr;

Count:=0;

Write('Введіть ціле число: ');

Readln(N);

While N>0 do

Begin

Count:=Count+l; Cifra[Count]:=N mod 10; N:=N div 10;

End;

Write('N = ');

For it«Count downto 1 do

Begin 

Write(Cifra[i],'*10^' ,i-l); {Якщо доданок не останній, то до нього дописується знак «+»}

If і>1 Then write(' + ');

End;

Readkey; {Затримка зображення на екрані}

End.

ЗАДАЧА № 312

Умова: Дано дійсні числаа1951, а1952,..., а2000—кількість опадів (у мм), що випали у місті за останні 50 років століття. Обчислити середню кількість опадів за цей період і щорічне відхилення від середнього значення.

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

Program Example_312;

Uses crt;

Var   N,i:longint;    {N   —   кількість   елементів   масиву,    і   — змінна циклу}

А:аггау[1951..2000]   of  real;   {A - масив  для  зберігання кількості  опадів у відповідному році}

В:array[1951..2000]   of  real;   {В — масив  для  зберігання відхилення від середнього значення}

Begin

Randomize;

Clrscr;

Sum:=0;

For і:=1951 to 2000 do

Begin

A[i] :=random(500) /7 ; {Заповнення масиву випадковими дійсними числами}

Write (А[і] :8:2) ; {Виведення масиву на екран для контролю}

Sum:=Sum+K[і];

End;

Sum:=Sum/50; {Середня кількість опадів за рік}

Writeln; WriteIn('Щорічні відхилення від середньої кількості опадів за період 1951 - 2000 p.p.');

For і:=1951 to 2000 do 

Begin

В[і]:=Sum — А[і]; {Знаходження щорічного відхилення}

Write(В[і]:8:2); {Виведення результатів на екран}

End;

Readkey;

End.

ЗАДАЧА №318 (4)

Умова: Дано дійсні числа а1 а2,..., a30 b1 b2,..., b30. Обчислити

Розв 'язання: Очевидно, що для обчислення результату цієї задачі спочатку необхідно знайти чисельник та знаменник дробу. Причому звернітьувагу на те, що кількість доданків і в одному, і в другому випадкахдорівнює 15, тільки в чисельнику вибираються елементи масивів з непарними індексами, а в знаменнику — із парними. Щоб організуватизміну індексів за заданим законом, можна скористатися таким штучнимприйомом: якщо в циклі з параметром індекс і змінюється від 1 до п, тодля отримання непарних чисел з проміжку [1..2п] використовуєтьсяформула: 2*і - 1.

Запропонуйте дітям подумати, яка формула дасть змогу отримати парні числа (2*і). Використовуючи ці співвідношення, програма для розв'язку цієї задачі має вигляд:

Program Example_318_4;

Uses  crt;

Var A,B:array[l..30]   of real;

{А,В — масиви для зберігання вхідних даних}

і:byte;   {і — змінна циклу}

Rl,R2:real;   {R1 — чисельник дробу,  R2 - знаменних дробу}

Rez:real;   {Rez - результат обчислень}

Begin

Randomize;

Clrscr;

Writeln('Масив А:');

For  i:=1  to 30 do

Begin

A[i]:=random(200)/7-random*15;  Write(A[i]:8:2);

End;

Writeln;

Writeln('Масив В:');

For i:=1 to 30 do

Begin

B[i]:=random*200-random*100; Write(B[i]:8:2);

End;

Writeln;

Rl:=0; R2:=0; {Початкові значення дорівнюють 0, тому що результат є накопиченням суми}

For і:«і to 15 do

Begin

R1 := R1+(A[2*i-1]+B[2*i-1]) ; R2 := R2+(A[2*i]+B[2*i]) ;

End;

Rez:=Rl/R2;

Writeln('Результат обчислень = ',Rez:8:2);

Readkey;

End.

Домашнє завдання

•Задачі№ 301,303,313,315(2,3), 318(2,5).

УРОК 24. Двовимірні таблиці

Мета уроку: Дати поняття двовимірних таблиць. Навчити розв'язувати типові задачі з обробки двовимірних таблиць.

Двовимірний масив — це масив, де кожному елементу ставиться у відповідність два індекси.

Напрямок зміни другого індексу —>

1

2

3

I

m

1

2

3

n

Напрямок

зміни першого

індексу

Для початку роботи з масивом готуємо місце в пам'яті.

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

Опис двовимірного масиву:

var

<Ім'я_масиву>: array[<поч_інд_рядкiв>..<кін_інд_рядків>,

<поч_інд_ставп>. .<кін_інд_стовп>] of <базовий_тип_елементів>;

Приклад опису:

Const n:=100;  m:=100;  Var A:array[1..n,1..m]   of real;

D:array[l..10,1.100]