С А Вернигоренко - Вивчення основ об'єктно орієнтованого програмування у класах фізико-математичного профілю - страница 2

Страницы:
1  2  3 

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

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

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

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

До задач цієї категорії можна віднести такі.

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

2. Підрахувати суму усіх додатних чисел із діапазону від m до n, m<n (вказує користувач), які діляться або на три, або на п'ять.

3. Підрахувати суму перших п членів числової послідовності —l: і-0,1,2,...

1 + /2'

4. Створити програму для виведення на екран значень функції у = х2 +2х — 1 на відрізку від а до Ь, а<Ь з кроком h, 0<h<l, параметри a, b, h вказує користувач.

5. Для вказаного користувачем цілого числа із діапазону від 10 до 1000000, з'ясувати, яких цифр у числі більше - парних чи непарних.

6. Для вказаного користувачем цілого числа із діапазону від 10 до 1000000, з'ясувати, сума яких цифр числа більша - парних чи непарних.

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

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

9. Створити програму для перевірки - чи є вказане користувачем число із діапазону від 1 до 1000000 простим.

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

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

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

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

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

а) введення числа з клавіатури;

б) виведення числа на екран монітора;

в) перевірка, чи є число простим;

г) знаходження найбільшого спільного дільника двох чисел;

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

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

2. Розробити клас квадратичної функції виду у = ах2+Ьх + с . У класі мають зберігатися відомості про коефіцієнти a, b, c; кінці відрізка x1, x2 на якому задана функціональна залежність; крок h, з яким здійснюється перехід від одного значення аргументу функції до іншого (h<]x2-x1y10). У класі мають бути оголошені та описані наступні функції:

а) введення/виведення даних про вище перераховані властивості;

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

в) виведення на екран монітора значень функції для діапазону аргументів від xl до x2 з кроком h;

г) пошук найбільшого та найменшого значення функції на відрізку xl, x2 з кроком h.

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

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

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

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

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

1. Розробити клас лінійного масиву з N цілих чисел (N>0 - константа). У класі має бути описана єдина властивість - масив з N елементів. Також у класі повинні бути описані наступні функції.

1) введення/ виведення елементів масиву;

2) обчислення суми елементів масиву;

3) пошук першого максимального елемента у масиві та його індексу;

4) пошук першого мінімального елемента масиву та його індексу;

5) сортування елементів масиву;

6) бінарний пошук елемента масиву;

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

8) підрахунок кількості різних елементів масиву

У головній програмі створити об'єкт класу лінійного масиву та виконати тестування його функцій.

2. Розробити клас двовимірного масиву цілих чисел з M рядків та N стовпців (M>0, N>0, M, N -константи). У класі має бути описана єдина властивість - масив з M рядків та N стовпців. Крім цього у класі потрібно описати наступні функції.

1) введення/ виведення елементів масиву;

2) пошук у масиві першого максимального елемента та його індексів;

3) пошук першого мінімального елемента та його індексів;

4) заміна місцями рядків та стовпців квадратного масиву (двовимірний масив називають квадратним, якщо у ньому однакова кількість рядків та стовпців);

5) обчислення суми діагональних елементів квадратного масиву;

6) сортування за спаданням кожного рядка масиву;

7) обчислення суми елементів квадратного масиву, що знаходяться нижче головної діагоналі;

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

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

3. Створити клас з даними про людину. У класі мають відображатися такі відомості: ідентифікаційний код, рік народження та заробітна платня, а також функції введення/виведення цих відомостей. Після цього створити клас лінійного масиву із N елементів з даними про N людей (N>0 - константа). У класі має бути описана єдина властивість - масив з відомостями про людей. Крім цього мають бути описані наступні функції.

1) введення/ виведення даних про людей;

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

3) пошук та виведення на екран монітора відомостей про людей у масиві, які народилися не раніше вказаного року;

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

1. У клас лінійного масиву цілих чисел додати наступні функції.

1) Додавання нового елемента за вказаним індексом, при цьому виконати перевірку коректності

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

2) Вилучення елемента за вказаним індексом. Виконати перевірку коректності індексу.

2. У клас двомірного масиву цілих чисел додати такі функції.

1) Додавання нового рядка за вказаним індексом. Виконати перевірку коректності значення

індексу.

2) Додавання нового стовпця за вказаним індексом. Здійснити перевірку коректності індексу.

3) Вилучення рядка за вказаним індексом.

4) Вилучення стовпця за вказаним індексом.

5) Заміна місцями рядків та стовпців довільного двовимірного масиву (не лише квадратного).

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

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

2) Вилучення елементу даних з відомостями про людину за вказаним індексом. Здійснити перевірку коректності значення індексу. Якщо індекс вказано некоректно, то вилучення не здійснювати.

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

Логічним продовженням теми "Тип даних масив" є ознайомлення учнів із можливостями опрацювання рядкових даних. Як відомо, у мові Сі/Сі++ не існує такого типу даних, як рядок. Під рядком тут розуміють масив символів, у якому останній символ (необов'язково останній елемент масиву) це символ ознаки кінця рядка (символ з кодом "нуль" у таблиці AS SCI-кодів). Існують певні труднощі із використанням рядків у мові Сі/Сі++, які пов'язані з тим, що учень повинен чітко розуміти, що таке вказівник і що таке масив. Тому завдання вчителя - з використанням достатньої кількості прикладів пояснити учням можливості опрацювання рядкових даних. У якості таких прикладів можна запропонувати наступні задачі: визначення довжини рядка, копіювання частини рядка, пошук текстового фрагменту у рядку, вилучення текстового фрагменту з рядка, зклеювання рядків, реверсування рядка, переведення дійсного числа у рядок і навпаки. Після розгляду цих прикладів вчитель може ознайомити учнів із деякими функціями бібліотеки string для роботи із масивами символів.

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

1. Створити клас рядка, у якому має бути описана єдина властивість, віднесена до закритої секції -масив, що складається із 255 символів. Також у класі повинні бути описані наступні функції.

1) введення символів рядка з клавіатури;

2) виведення рядка на екран;

3) - 10) функції визначення довжини рядка, копіювання, вилучення, зклеювання, реверсування,

переведення рядка у дійсне число і навпаки;

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

12) підрахунок кількості входження вказаного слова у рядок

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

2. Користувач вказує з клавіатури певну кількість дійсних чисел, розділених символом пробілу. Кількість символів у введеному тексті не повинна перевищувати 255. Знайти суму вказаних чисел.

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

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

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

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

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

3. Написати функцію для генерування випадковим чином із діапазону від 1 до 100 цілочисельної послідовності з вказаною користувачем кількістю членів (менше від 50) та записування її у двійковий файл під вказаним користувачем іменем. Створити функцію для читання з двійкового файлу з вказаною назвою цілих чисел та підрахунку їх суми. Виконати тестування створених функцій у головній програмі.

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

5. Кожен рядок текстового файлу складається з однакової кількості символів. У записі рядка використовуються лише два символи "*" та "+". Написати програму для виведення на екран номера рядка та номера стовпця кожного символу "+". Вважати, що нумерація рядків та стовпців починається з нуля.

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

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

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

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

1. Для класу рядка створити такі конструктори:

а) порожній конструктор (у тілі конструктора нульовому елементу рядка має бути присвоєно

символ ознаки кінця рядка);

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

в) конструктор копіювання (у тілі конструктора за посиланням на об'єкт іншого рядка його

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

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

1) виділення/ звільнення пам'яті під точки ламаної;

2) порожній конструктор (надання вказівникові на масив точок значення NULL, надання кількості точок ламаної значення нуль);

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

4) конструктор копіювання;

5) деструктор;

6) введення/ виведення даних про точки ламаної;

7) обчислення довжини ламаної;

8) записування даних про ламану у двійковий файл;

9) зчитування даних про ламану з двійкового файлу;

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

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

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

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

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

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

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

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

2. Створити клас довільного трикутника, заданого координатами своїх вершин (об'єкти класу точки) на площині та успадкувати від нього класи прямокутного і рівностороннього трикутників, спосіб успадкування - protected.

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

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

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

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

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

1. Оголосити клас з даними про людину. До властивостей цього класу віднести ім'я (не більше 30-ти символів) та рік народження. У класі мають бути оголошені такі віртуальні функції:

Страницы:
1  2  3 


Похожие статьи

С А Вернигоренко - Вивчення основ об'єктно орієнтованого програмування у класах фізико-математичного профілю