Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Бєлов, Карнаух, Коваль, Ставровський - Вступ до програмування мовою С++

.pdf
Скачиваний:
92
Добавлен:
07.03.2016
Размер:
1.41 Mб
Скачать

стали використовувати послідовні великі літери латинського алфавіту – A, B, C тощо.

Приклади

1. У двійковій системі числення лише дві цифри – 0 та 1. Двійкові записи 10, 11, 100, 101 позначають десяткові 2, 3, 4, 5. Запис 1101 позначає число 1 23+1 22+0 21+1 20 13, запис

0,101 – число 1 2-1+0 2-2+1 2-3 0,625.

2. У системі числення з основою 8 для запису чисел є цифри 0, 1, 2, 3, 4, 5, 6, 7, "вага" кожного розряду числа є відповідним степенем вісімки. Отже, перші числа записуються як 0, 1, … 6, 7, а далі йдуть записи 10, 11, …, 17, 20, 21, …, 77, 100, …. Вісімкове 10 – це звичне десяткове 8, 11 – звичне 9, 20 – десяткове 16, тобто двічі по 8. А вісімкові 100, 200 та 400 – це десяткові 64, 128 та 256, тобто один, два й чотири рази по 8 у квадраті.

Так

само

3428 3 82+4 81+2 80,

0,3428 3 8-1+4 8-2+2 8-3,

34,28

3 81+4 80+2 8-1 (про вісімковий запис свідчить маленька

цифра 8 унизу).

 

 

3. У шістнадцятковій системі числа від 10 до 15 позначають

так: 10 – A, 11 – B, 12 – С,

13 – D, 14 – E, 15 – F. Тоді

2A16 2 161+10 160 42,

FF16 15 161+15 160 255,

0,C16 12 16-1 ¾ 0,75.

 

Перетворення запису числа

знедесяткової системи на десяткову

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

Запис (xnx1x0,x-1x-k)P з P-ковими цифрами xi задає число xn Pn+…+x1 P1+x0 P0+x-1 P-1+…+x-k P-k. Цифри xi у цій сумі позначають числа від 0 до P – 1. Звідси, щоб знайти десяткове зобра-

ження числа, потрібно:

записати в десятковій системі число P та P-кові цифри числа;

обчислити суму добутків значень цифр і відповідних степенів числа P.

161

Приклади

100112 1 24+0 23+0 22+1 21+1 20 19; 10,0112 1 21+0 20+0 2-1+1 2-2+1 2-3 2,375; 1BC16 1 162+11 161+12 160 444;

1B,C16 1 161+11 160+12 16-1 27,75;

12,23 1 31+2 30+2 3-1 5,666…, тобто число записується не-

скінченним періодичним десятковим дробом.

Вправи

А.1. Перетворити шістнадцяткові записи чисел на десяткові:

а) F1; б) FF; в) 4AB; г) FFFE.

А.2. Перетворити вісімкові записи чисел на десяткові:

а) 377; б) 1777; в) 1232; г) 400.

А.3. За основою P та P-ковими записами дробів Q навести їх десяткове зображення:

а) P 2; Q 0,0001; 0,1111; б) P 3; Q 0,22; 0,(11);

в) P 16; Q 0,1; 0,F; 0,8; 0,(7);

г) P 2; Q 0,001; 0,1101; 0,000001; д) P 3; Q 0,(20); 0,(02); 0,11;

е) P 16; Q 0,1F; 0,FE; 0,81; 0,3(F).

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

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

N (xnx1x0)P xn Pn+…+x1 P1+x0 P0.

Зауважимо: усі доданки, окрім останнього, мають множник P. Тоді значенням молодшої цифри x0 є остача від ділення N на ос-

нову P, а сума T xn Pn-1+…+x1 P0 (xnx1)P дорівнює цілій частці від ділення N на P. Поділивши цю суму на P з остачею,

знайдемо остачу x1 і наступну частку і так далі, поки на якомусь

162

кроці частка від ділення не стане рівною 0. Остання остача й буде старшою цифрою xn.

Приклади. Утворимо вісімковий запис числа 202. 202 : 8 = 25 (остача 2 – молодша цифра), 25 : 8 = 3 (остача 1 – наступна цифра).

3 : 8 = 0 (остача 3 – остання, старша цифра).

Отже, отримано цифри 2, 1, 3 (від молодшої до старшої), тобто вісімковий запис 312.

Запишемо 202 в шістнадцятковій системі. 202:16=12 (остача 10 – значеннямолодшоїцифриA), 12:16= 0 (остача 12 – значення старшої цифри С).

Отже, десяткове 202 має шістнадцятковий запис CA. Позначимо остачу від ділення T на P націло як T % P, част-

ку – як T / P. Опишемо утворення P-кового запису числа N за допомогою алгоритму.

1.Спочатку частка T дорівнює N, а запис порожній.

2.Поки T > 0,

обчислити остачу R як T % P

і нову частку T як T / P (шляхом ділення в стовпчик),

зобразити R у P-ковій системі числення як цифру C, відповідну до R,

і дописати цифру C до запису ліворуч.

Вправа А.4. Перетворити десятковий запис на двійковий, вісімковий і шістнадцятковий:

а) 94; б) 768; в) 16382; г) 65537.

Утворення недесяткового запису дробових чисел

Розглянемо, як за додатним дійсним числом V < 1 отримати цифри його P-кового запису (принаймні кілька перших, оскільки запис може бути нескінченним). За способом запису

V(0,x-1x-k…)P x-1 P-1+…+x-k P-k+…

зневідомими значеннями цифр. Помножимо обидві частини рі-

вності на P й отримаємо рівність

V P x-1+x-2 P-1+…+x-k P-k+1 +… (x-1,x-2x-k…)P x-1+P-1

(0, x-2x-k…)P .

163

Звідси x-1 [V P], а P-1(0,x-2x-k…)P {V P}, де [V P] та {V P}

позначають цілу й дробову частини V P. Далі так само помножимо {V P} на P, знову отримаємо цілу й дробову частини (ціла буде значенням x-2) і т. д.

Приклад. Утворимодвійковий запис десятковогодробу0,75. 0,75 2 1,5, [1,5] 1 (перша цифра), {1,5} 0,5; 0,5 2 1, [1] 1 (наступна цифра), {1} 0.

Усі подальші цифри будуть 0, тому 0,11 є скінченним двійковим зображенням для десяткового 0,75.

Утворимо двійковий запис десяткового дробу 0,1. 0,1 2 0,2, [0,2] 0 (перша цифра), {0,2} 0,2; 0,2 2 0,4, [0,4] 0 (наступна цифра), {0,4} 0,4; 0,4 2 0,8, [0,8] 0 (наступна цифра), {0,8} 0,8; 0,8 2 1,6, [1,6] 1 (наступна цифра), {1,6} 0,6; 0,6 2 1,2, [1,2] 1 (наступна цифра), {1,2} 0,2.

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

ня до десяткового 0,1, наприклад, 0,000112 1/16+1/32 0,09375 (помилка – приблизно шість тисячних).

Утворимо шістнадцятковий запис десяткового дробу 0,8. 0,8 16 12,8, [12,8] 12 (перша цифра C), {12,8} 0,8.

Далі цифра C буде нескінченно повторюватися, тому 0,(C) є точним шістнадцятковим записом десяткового 0,8.

Якщо V є скінченним десятковим дробом і основа Р має прості множники 2 та 5, то число V можна зобразити скінченним P-ковим записом. Інакше P-ковий запис може бути нескінченним; тоді скінченна кількість кроківдаєнаближенезображення числа V.

Отже, за дійсним числом V, V < 1, можна одержати R перших цифр його P-кового зображення, виконуючи такий алгоритм:

1.Спочатку зображенням є "0.".

2.Поки одержано менше ніж R дробових цифр,

обчислити V P, обчислити d як [V P]

(ціле число від 0 до P-1) та V як {V P}.

Записати значення d як P-кову цифру й дописати її до зображення праворуч.

164

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

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

Вправи

А.5. Записати P-кове зображення десяткового дробу Q, де:

а) Q 0,5; P 2, 3, 8, 16;

в) Q 0,75; P 3, 8, 16;

б) Q 0,1; P 3, 8, 16;

г) Q 0,2; P 2, 3, 8, 16.

А.6. Перетворити десятковий запис на двійковий, вісімковий і шістнадцятковий:

а) 94,341; б) 16382,55; в) 2948,77; г) 65537,33.

Контрольні запитання

А.1. Які системи числення ви знаєте? А.2. Що таке позиційна система числення?

А.3. Як кодуються цифри в системах числення, основа яких більше десяти?

А.4. Навести алгоритм перетворення десяткового запису числа в систему числення, відмінну від десяткової.

А.5. Навести алгоритм перетворення запису числа з недесяткової системи числення в десяткову.

165

ДОДАТОК Б

Пріоритет операторів мови C++

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

 

Операції

Оператори

Зв'язування

 

 

 

 

одномісні

постфіксні

++, --

 

префіксні

sizeof, ++, --, !, -,

 

 

+

 

 

мультиплікативні

*, /, %

 

 

адитивні

+,

 

 

вставки

<<, >>

 

двомісні

відношення

<, >, <=, >=

 

рівності

==, !=

 

логічне "і"

&&

 

логічне "або"

||

 

 

умовна

?:

 

 

прості та складені

=, +=, -=, *=, /=, %=,

 

 

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

&&=, ||=

 

 

 

послідовного обчи-

,

 

 

слення

 

 

Знак позначає операції з правобічним зв'язуванням; решта є лівобічними.

166

ДОДАТОК В Деякі бібліотечні математичні функції

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

Виклик

Що обчислюється

Примітки

acos(x)

arccos x

x від -1 до1, значеннявід0 до

asin(x)

arcsin x

x від -1 до 1, значення від -/2 до

 

 

/2

atan(x)

arctg x

значеннявід-/2 до/2

atan2(x,y

arctg (x/y)

значеннявід-/2 до/2

)

 

 

ceil(x)

ціле, найближче до x

ceil(-1.9) -1, ceil(1.1) 2

 

згори

 

cos(x)

cos x

x – кількістьрадіан

cosh(x)

cosh x (ex+e-x)/2

 

exp(x)

ex

 

fabs(x)

|x|

 

floor(x)

ціле, найближче до x

floor(-1.1) -2, floor(1.9) 1

 

знизу

 

fmod(x,y)

дійсна остача від ді-

fmod (4.7, -2.2) 0.3, fmod (-4.7,

 

ленняx наy націло

-2.2) -0.3

log(x)

ln x

x > 0

log10(x)

lg x

x > 0

pow(x,y)

xy

00 1; за x<0 і нецілого значення y

 

 

абоx 0 таy<0 обчисленняпомил-

 

 

кове

sin(x)

sin x

x – кількістьрадіан

sinh(x)

sinh x (ex- e-x)/2

 

sqrt(x)

x

x 0

tan(x)

tg x

x – кількістьрадіан

tanh(x)

tanh x sinh x / cosh x

 

167

БІБЛІОГРАФІЧНИЙ СПИСОК

Основна література

1. Дэвис, С. С++ для "чайников" / С. Дэвис. – 6-е изд. – М.: Изд. Дом "Вильямс", 2010.

2. Либерти, Дж. Освой самостоятельно С++ за 21 день / Дж. Либерти, Дж. Брэдли. – 5-е изд. – М.: Изд. Дом "Виль-

ямс", 2010.

3. Страуструп, Б. Программирование с примерами на С++: принципы и практика / Б. Страуструп. – М.: Изд. Дом "Виль-

ямс", 2010.

 

4. Шилдт, Г. Полный справочник по С++

/ Г. Шилдт. –

М.: Изд. Дом "Вильямс", 2010.

 

Додаткова література

 

5. Мюссер, Д. С++ и STL : справочное

руководство

/Д. Мюссер, Ж. Дердж, А. Сейни. – М.: Изд. Дом"Вильямс", 2010.

6.Саттер, Г. Стандарты программирования на С++: серия "C++ In-Depth" / Г. Саттер, А. Александреску. – М.: Изд. Дом

"Вильямс", 2008.

7.Седжвик, Р. Алгоритмы на С++ / Р. Седжвик. – М.: Изд. Дом "Вильямс", 2010.

8.Шилдт, Г. С++: методики программирования Шилдта

/Г. Шилдт. – М.: Изд. Дом "Вильямс", 2008.

168

ПРЕДМЕТНИЙ ПОКАЖЧИК

#define, 62

return, 24, 90

#include, 24, 151

scientific, 57

abs, 49

sqrt, 49

bool, 29

srand, 139

break, 83, 109

std, 24, 157

case, 83

switch, 83

char, 29

system, 26

cin, 24,41

true, 29, 67

cmath, 49

unsigned, 29

const, 63

using, 24

continue, 109

void, 92

cout, 24, 41

while, 104

cstdlib,49

width, 58

default, 83

Адреса, 10

do, 107

double, 29

Алгоритм, 6

endl, 26, 58

– Герона, 136

fabs, 49

– отримання P-кового зобра-

false, 29, 67

ження, 163, 164

fixed, 57

Алфавіт, 27

for, 112

Аргумент, 88

if, 74

 

int, 29

Байт, 10

iostream, 24

Бібліотека, 87

log, 49

Біт, 10

main, 24, 25

Блок, 79, 89

namespace, 24, 156

 

pow, 49

Верблюжий запис, 35

precision, 57

Виклик, 89

rand, 139

– рекурсивний, 131

 

169

Вираз, 38, 45

l-вираз, 40

r-вираз, 40

присвоювання, 40

умовний, 71

Дані, 4

вихідні, 6

вхідні, 6 Декремент, 105

Заголовний файл, 24, 153 Задача про ханойські вежі, 135

Зарезервоване слово, 28 Змінна, 34

автоматична, 128

, адреса,34

глобальна, 80

, ініціалізація, 40

локальна, 128

, означення, 35

розіменування, 39

статична, 80, 141

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

Ім'я, 27

глобальне, 80, 141

змістовне, 61

кваліфіковане, 156

переозначення, 100 Інкремент, 105 Інструкція, 6

введення, 36

вибору варіантів, 84

виведення, 37

виклику функції, 94

присвоювання, 38

розгалуження, 73

умовна, 73

циклу, 104, 107, 112

Інтегроване середовище, 21 Інтерпретатор, 20 Інформація, 4

Кінець рядка, 58 Код

виконуваний, 20, 152

об'єктний, 19, 152

цілого числа, 12, 13 Команда, 6 Коментар, 60 Компілятор, 19 Компонувальник, 19 Константа, 27

дійсна, 33

рядкова, 31

символьна, 30

ціла, 32

числова, 27 Конфлікт імен, 156

Лексема, 27, 42 Літерал, 27

Мова, 6

машинна, 11

програмування, 6, 15

– високого рівня, 15

Модель, 5

Обчислення ледаче, 69 Оголошення, 155

зовнішнє, 79

імені глобальної змінної, 155

–змінної, 35

– функції, 90

170