Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
самост1_1new_druk!!!.doc
Скачиваний:
22
Добавлен:
13.11.2019
Размер:
1.61 Mб
Скачать

Тема: Розгалуження.

Побітові логічні операції та операції зсуву

Одиницею виміру пам'яті комп'ютера є байт. Кожний байт складається із восьми бітів. У кожному біті можна розмістити одне з двох чисел: 0 та 1. У одному байті можна зобразити ціле число з діапазону від 0 до 255. Щоб занести значення деякого даного у пам'ять комп'ютера, необхідно це дане перетворити у двійковий код. Зазвичай відповідні програми це роблять автоматично. Однак інколи на практиці, наприклад, під час створення графічних зображень чи в задачах архівування даних, виникає потреба порівнювати не значення двох даних, а їхні біти. Для цього у мові С++ є побітові логічні операції (див. табл.): & (І), | (АБО), ^ (виключне АБО), ~(НЕ).

Таблиця. Побітові логічні операції

B1

B2

B1 & B2

B1 | B2

B1 ^ B2

~ B1

0

0

0

0

0

0

0

1

0

1

1

1

1

0

0

1

1

1

1

1

1

1

0

0

Приклад. Нехай b1 == 00110011, b2 == 11110101. Тоді

b1 & b2 = 00110001, b | b2 = 11110111, b1 ^b2 = 11000110, ~b1 = 11001100.

Кожний байт можна зобразити у вигляді послідовності з восьми нулів та одиниць. Для того, щоб зсунути біти послідовності вправо чи вліво на деяку фіксовану кількість, використовують спеціальні операції зсуву >> та <<. Під час зсуву на порожні місця дописують нулі. Наприклад, нехай b = 00100101, с = 10110010, тоді під час виконання команд

b = b<< 2;

с = с >>1;

змінна b набуде значення 10010100, а с - 01011001.

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

Зауваження 3. Подібно до команд присвоєння з арифметичними операціями можна використовувати команди присвоєння з логічними побітовими операціями: &=, |=, ^= та команди присвоєння з побітовим зсувом: >>=, <<+.

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

  1. Яка одиниця вимірювання пам'яті в комп’ютері?

  2. З чого складається байт?

  3. Назвіть побітові логічні операції в мові С++.

  4. Що відбувається під час зсуву цифр цілого числа?

  5. Що дописують під час зсуву на порожні місця?

Тема: Основні відомості по структурному програмуванню.

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

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

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

Структурний підхід до побудови алгоритмів.

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

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

  • Конструювання алгоритму з базових конструкцій: лінійних, розгалужень, циклів.

  • Розбивка задачі на більш прості підзадачі, потім розбивка кожної підзадачі на більш прості тощо.

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

Структурне програмування – складання програм з урахуванням структурного підходу.

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

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

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

  • Використання модулів.

  • Використання підпрограм.

  • Форма запису програми “сходинками”, з використанням рівнів вкладеності.

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

Програмні модулі в С++.

Мова програмування С++ дає можливість реалізовувати концепцію структурного аналізу алгоритмів. Структурний аналіз полягає у попередньому опрацюванні складної задачі чи громіздкого алгоритму та поділі його на окремі простіші частини. У С++ ці частини реалізуються за допомогою функцій. Окремі функції об’єднують у спільну програму. У відкомпільованому вигляді така програма утворює модуль. Головна функція, що обов’язково входить до кожної програми, – main (). Розрізняють стандартні функції та функції користувача. Стандартні функції описані (визначені) у бібліотеках. У таких файлах (бібліотеках, модулях) зазвичай оголошують сталі та змінні, заголовки (сигнатури) функцій тощо.

Усі стандартні команди та функції мови С++ визначені у файлах заголовків. Щоб приєднати модуль до програми користувача, директиву препроцесора необхідно зазначити на початку програми так:

#include <назва файлу. розширення >

або так:

#include “шлях до файлу \назва файлу . розширення”

Зазвичай усі стандартні бібліотеки розміщені у папці INCLUDE середовища С++. У такому випадку назва файлу є параметром директиви, її зазначають у кутових дужках <…>, наприклад #include <math.h>

Якщо ж потрібний файл розміщений не у папці INCLUDE, то назву файлу із зазначенням шляху пишуть у лапках “...”. наприклад, якщо деякий файл MyBit.h є у папці stud на диску d:; то треба писати так:

#include “d:\stud\MyBit.h”.

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

У С++ немає вбудованих команд введення-виведення даних. Для організації введення-виведення тут реалізована концепція потоків, яка визначена у спеціальних модулях. У модулі istream.h описані команди введення, у модулі ostream.h – команди виведення, а у модулі iostream.h – команди виведення і введення.

Під потоком розуміють процес введення-виведення інформації у файл. Периферійні пристрої введення-виведення, такі як клавіатypa, монітор, принтер, розглядаються як текстові файли. Під час виконання будь-якої програми автоматично підключаються стандартні потоки для введення даних з клавіатури (cin), виведення на екран (cout), виведення повідомлення про помилки (сеrr) і допоміжний потік (clog).

Для використання математичних функцій у мові програмування С++ необхідно підключити файл math.h. В цьому модулі містяться такі математичні функції, як abs(x), acos(x), asin(x), atan(x), ceil(x), cos(x), cosh(x), exp(x), fabs(x), floor(x), log(x), log10(x), pow(x,y), sin(x), sinh(x), sqrt(x), tan(x), tanh(x). Тут також містяться такі одно символьні функції: tolower(ch) – повертає прописний символ, якщо ch є рядковим; інакше повертає ch в такому ж вигляді, toupper(ch) – повертає рядковий символ, якщо ch є прописним; інакше повертає ch в такому ж вигляді.

Файл (бібліотеку, модуль) conio.h приєднуємо, якщо потрібно у програмі використати функцію clrscr() – очищення екрану та функцію getch(), яка дає змогу затримати на екрані результати виконання програми, доки не буде натиснута довільна клавіша на клавіатурі.

Для опрацювання масивів символів у мові С++ є стандартні функції, які описані у модулі string.h.

Для використання функцій перетворення даних підключається модуль stdlib.h. Сюди відносять функції atof(s) – перетворює текстовий рядок s типу char* як цілочисельний рядок з плаваючою крапкою і повертає їй еквівалент в форматі double; atoi(s) – перетворює текстовий рядок s типу char* як цілочисельний рядок типу int і повертає їй цілочисловий еквівалент.

Підключивши модуль ctype.h ми зможемо використати одно символьні функції. До них відносять наступні функції: isalnum(ch) – чи є символ буквою чи цифрою; isalpha(ch) – чи є символ буквою; iscntrl(ch) – чи є символ керуючою послідовністю; isdigit(ch) – чи входить символ в діапазон від 0 до 9; isgraph(ch) – чи є символ видимим; islow(ch) – чи є символ прописним; ispunct(ch) – чи є символ знаком пунктуації; isprint(ch) – чи є символ, яки друкується (до них відносяться символ пропуску); isspace(ch) – чи є символ пробілом (символ табуляції, нового рядка і нової сторінки); isupper(ch) – чи є символ буквою розділу; isxdigit(ch) – чи є символ шістнадцятковим числом.

В модулях stdlib.h і time.h містяться функції для генерації випадкових чисел, такі як rand() – повертає наступне число (типу int) в послідовність випадкових чисел. Ця послідовність повинна бути задана за допомогою виклику srand. Число, яке повертається повинно бути з діапазону від 0 до RAND_MAX (визначене в stdlib.h); srand(seed) – приймає початкове число – типу int без знаку – в якості першого числа послідовності випадкових чисел, яка використовується для виклику rand; time(Null) – повертає системний час. Виклик цієї функції є хорошим способом для одержання початкового числа для наступної передачі в srand.

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

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

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

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

  2. На яких принципах ґрунтується структурний підхід до побудови алгоритмів?

  3. Що таке структурне програмування? В чому полягає структурний аналіз мови С++?

  4. Де описані стандартні функції мови?

  5. Що потрібно зробити, щоб приєднати модуль до програми?

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

  7. В яких модулях містяться функції для організацій введення-виведення даних?

  8. Яку необхідно підключити бібліотеку для використання математичних функцій?

  9. Для чого приєднуємо бібліотеку conio.h?

  10. Де описані стандартні функції для опрацювання масивів рядків у мові С++?

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

  12. В якому модулі містяться одно символьні функції? Назвіть їх.

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

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

  15. В якому бібліотечному файлі описані стандартні графічні функції?

РОЗДІЛ ІV. ПРОГРАМУВАННЯ МОВОЮ С++.