Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Posibnyk_C.doc
Скачиваний:
23
Добавлен:
03.11.2018
Размер:
1.56 Mб
Скачать

1.2 Алгоритм і його властивості

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

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

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

Слово алгоритм походить від аль-Хорезмі – імені арабського математика, який жив у ІХ ст. в м. Хіва (нині обласний центр на півночі Узбекистану). Він відомий тим, що розробив послідовність виконання чотирьох арифметичних операцій: додавання, віднімання, множення і ділення так, як ми це виконуємо зараз. У ХІV ст. цю послідовність дій почали застосовувати в Європі і назвали її алгоритмом. До того європейці виконували цю роботу настільки складно, що її міг виконувати тільки кваліфікований спеціаліст. У ХІХ ст. поняття алгоритму було поширено на будь-яку послідовність операцій.

Алгоритм має такі властивості:

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

  2. Результативність. Обов’язково повинна бути досягнена поставлена мета;

  3. Дискретність. Алгоритм повинен складатися з дискретних команд виконавця;

  4. Однозначність. Кожна команда повинна бути чітко й однозначно визначена.

Будь-який алгоритм можна розчленити на такі три елементарні: лінійний, розгалужений і циклічний. Складні алгоритми містять вкладені один в одного елементарні алгоритми, найчастіше це вкладені цикли та розгалуження в циклі.

1.3 Системи числення

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

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

Для представлення чисел використовують спеціальні знаки, наприклад, цифри. За вагою кожного знака розрізняють два види систем числення: позиційні та непозиційні. У позиційних системах числення кожний розряд числа має власну вагу, наприклад, у числі 2008 наймолодший розряд (цифра 8) визначає кількість одиниць, друга – десятків і т. д. Прикладом непозиційної систем числення є римська, в якій те саме число 2008 буде виглядати як MMVIII. Тут три наймолодші розряди (знаки I) мають однакову вагу, кожний з них дорівнює одиниці. А кожна з двох перших цифр (ММ) означає одну тисячу, хоча знаходяться вони в різних місцях (розрядах) числа.

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

В техніці найчастіше застосовуються позиційні системи числення, бо вони дозволяєть спростити автоматизацію обчислювального процесу за рахунок упорядкованості ваги розрядів. У сучасних цифрових обчислювальних машинах використовується двійкова система числення, яка має лише два знаки (дві цифри): 0 і 1. Її найпростіше технічно реалізувати: 1 –­ є електрична напруга, 0 – немає, при цьому не вимагається висока стабільність напруги.

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

Тригер – це найпростіша цифрова схема, яка є цифровим автоматом. У комбінаційних схемах стан виходу Y в будь-який момент часу визначається лише поточним значенням входу X: Y=f(X). На відміну від них, стан виходу цифрового автомата залежить ще й від внутрішнього стану схеми Q: Y=f(X,Q). Іншими словами, цифровий автомат є не тільки перетворювачем інформації, але й зберігає попередню інформацію та є джерелом поточної інформації (джерелом поточного стану). Така властивість забезпечується наявністю в схемі зворотних зв’язків. Тригер має два стійких стани: Q = 1 та Q = 0, тому його часом називають бістабільною схемою. В якому із цих станів опиниться тригер залежить від рівнів сигналів на входах тригера та від його попереднього стану, тобто він “має пам’ять”.

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

За допомогою тригерів можна також забезпечити трійкову систему числення, яка вважається оптимальною. Її три цифри 0, 1, 2 фізично можна представити як -1, 0 і 1.

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

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

18:2=9, залишок: 0;

9:2=4, залишок: 1;

4:2=2, залишок: 0;

2:2=1, залишок: 0;

останній результат ділення на 2: 1.

Одержане двійкове число дорівнюватиме 10010, для перевірки результату перекладемо його назад у десяткову систему числення. Для цього помножимо кожний розряд на 2і , де 2 – основа двійкового числа, (нумерація розрядів починається з крайнього правого), n – кількість розрядів (тут n=5), і додамо всі результати множення. Отже,

1*24+0*23+0*22+1*21+0*20=16+0+0+2+0=18.

Дії над двійковими та іншими числами відбуваються подібно до десяткових, лише враховується, що під час виконання операції додавання переповнення молодшого розряду настає при досягненні основи. Якщо в десятковій системі числення переповнення молодшого та додавання одиниці до старшого розряду відбувається при десятій одиниці, то в двійковій – при другій. Наприклад, додамо два десяткові числа: 15+3=18. У двійковому представленні ця операція буде мати такий вигляд:

1111

+11

=10010

Відповідно при відніманні “позичений” сташий розряд “розмінюється” на кількість одиниць основи. Покажемо приклад віднімання двох чисел: 18-15=3. Тоді в двійковій системі числення матимемо такий результат:

10010

-1111

=11

Поряд з десятковою та двійковою в програмах мовою С застосовують вісімкову та шістнадцяткову системи числення, основою яких є числа відповідно 8 і 16. Вони утворюються з десяткових цифр, а якщо цифр замало, то й букв А, B, C, D, E, F. Наприклад, у 16-й системі числення число С=12 десяткових одиниць. Ці системи вигідні тим, що спрощують переклад десяткових чисел у двійкові та навпаки за рахунок кратності. Нехай, наприклад, десяткове число дорівнює 23. Перекладемо його в вісімкову систему числення. 23:8=2, залишок дорівнює 7, отже, вісімкове число дорівнює 27. Представимо його двійковими тріадами, для цього кожну цифру перекладемо у двійкову систему числення. Тоді одержимо дві тріади: 010 111, а, відкинувши зайвий нуль у старшому розряді, матимемо двійкове число 10 111. Перевірка:

1*24+0*23+1*22+1*21+1*20=16+0+4+2+1=23.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]