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

[ Миронченко ] Императивное и объектно-ориентированное програмирование на Turbo Pascal и Delphi

.pdf
Скачиваний:
69
Добавлен:
25.04.2014
Размер:
3.16 Mб
Скачать

21

 

 

 

 

 

LISP

 

ALGOL 60, ForTran, COBOL

 

Prolog

 

 

 

 

 

 

Ada, Turbo Pascal, C

-

Simula, ++, Java, Delphi

Рис 0.3 Классификация языков программирования

Следующим шагом стал переход к объектно-ориентированному программированию (ООП). Предположим, что нам надо смоделировать на компьютере работу часов. У часов есть детали (циферблат, стрелки и т.д.) и функции (показывать время, возможность выставления даты и т.д.). С точки зрения процедурного подхода детали можно объединить в единое целое, однако функции должны быть отделены от данных, а сгруппировать по смыслу их можно, используя модули. А согласно ООП детали и функции часов неотъемлемы друг от друга и составляют единый объект. В данном случае такое объединение действительно логично, однако, несмотря на все удобства, ООП иногда оказывается не в ладах со здравым смыслом, например: число пишет само себя, последовательность данных сама себя сортирует, а квадрат является более абстрактным объектом, чем прямоугольник, хотя ясно, что квадрат – частный случай прямоугольника.

Альтернативой процедурным языкам и их расширениям являются логические и функциональные языки. Логические языки (их еще называют декларативными) базируются на математическом аппарате формальной логики, и очень удобны для проведения логических рассуждений, поэтому они очень часто используется разработчиками искусственного интеллекта. Функциональные языки основываются на понятии функции. Но это понятие используется и в процедурных языках, поэтому мы отложим рассмотрение отличий между функциональными языками и процедурными до 8-й главы.

Функциональные, логические, процедурные языки называют языками высокого уровня (ЯВУ), в отличие от машинных языков и ассемблеров, которых называют языками низкого уровня.

Итак, мы с вами разбили все языки программирования на несколько классов, внутри каждого из которых принципиальных отличий нет. Хорошо изучив ТР и Delphi, вы легко изучите С, С++, Java и подобные языки. Привыкать мыслить по-иному вам придется лишь при изучении языков других групп – ассемблеров, логических и функциональных языков.

Честно говоря, я умолчал о ряде гибридных языков, которые позволяют писать в разных стилях, кроме того, часто в ЯВУ можно писать и на ассемблере, если вам захочется.

22

В этой книге мы изучаем процедурные языки и их расширения, поэтому для того, чтобы вы лучше прочувствовали их сходства между собой, я приведу реализацию сортировки массива на С++ и ТР (естественно, вы снова должны лишь посмотреть, не особенно вникая в содержимое).

Программа на С++

#include <iostream> using namespace std;

#include <ctime>

void main()

{

const n=9; int A[n]; int i;

srand(time(0));

for (i=0;i<=n-1;i++) A[i]=rand()%100;

cout<<"Initial massive"<<endl; for (i=0;i<=n-1;i++)

cout<<A[i]<<' '; cout<<endl;

for (i=n-2;i>=0;i--)

for (int j=0;j<=i;j++) if (A[j]>A[j+1])

{

int tmp=A[j]; A[j]=A[j+1]; A[j+1]=tmp;

}

cout<<"Sorted array"<<endl; for (i=0;i<=n-1;i++)

cout<<A[i]<<' ';

}

Программа на ТР

const n=9;

var

A:array [0..n-1] of integer; i,j,tmp:integer;

begin randomize;

for i:=0 to n-1 do A[i]:=random(100);

writeln('Initial massive'); for i:=0 to n-1 do

write(A[i], ' '); writeln;

for i:=n-2 downto 1 do for j:=0 to i do

if (A[j]>A[j+1]) then begin

tmp:=A[j];

A[j]:=A[j+1];

A[j+1]:=tmp;

end; writeln('Sorted array'); for i:=0 to n-1 do

write(A[i], ' ');

end.

0.4. Как ПК понимает языки программирования

Так как компьютер понимает лишь язык машинных кодов, то программный код, написанный не на машинном языке, должен быть на него переведен. Вы помните, что для того, чтобы перевести код из ассемблера на машинный язык писалась специальная программа, которая также называлась ассемблером (assembler – сборщик). Та же ситуация и с языками высокого уровня – код, написанный на ЯВУ, тоже надо переводить на машинный язык (или сначала на ассемблер, а потом – на машинный язык). Для этого пишется программа, называемая транслятором (translator – переводчик).

Трансляция программы состоит из 3 этапов:

23

1.Лексический анализ – разбиение программного кода на самостоятельные единицы текста (эквивалентно разбиению рассказа на слова и знаки препинания).

2.Синтаксический анализ – распознавание структуры программы и роли отдельных ее частей (понимание смысла рассказа)

3.Генерация кода – перевод действий, «осмысленных» синтаксическим анализатором на машинный язык (или ассемблер).

После перевода программы с языка высокого уровня на машинный, остается еще ряд проблем: программа может состоять из нескольких исполняемых модулей (каждый из которых транслируется отдельно), поэтому надо связать все модули воедино и получить загрузочный файл – т.е. файл, который можно запускать на выполнение.

Кроме трансляторов часто используются интерпретаторы – программы, которые не создают запускающий файл, а сразу после идентификации команды выполняют ее и переходят к следующей команде. Трансляторы должны объединять (англ. compile) несколько машинных команд в группы, чтобы имитировать выполнение одного оператора языка высокого уровня, поэтому трансляторы часто называют компиляторами.

Для одного и того же языка программирования может существовать много различных программ, которые переводят программный код на нем на машинный язык, и, естественно, они могут генерировать различный исполняемый код. Вообще говоря, компиляторы могут генерировать более быструю последовательность команд, чем интерпретаторы, т.к. они могут анализировать больший объем кода и принимать более эффективные решения по оптимизации работы программы. Кроме того, если вы хотите откомпилировать программу на некотором языке, то после этого ее можно использовать на любой машине, и сама программа-компилятор при этом не нужна. А если предполагается, что программный код должен быть интерпретируемым, то на любом компьютере должен стоять интерпретатор этого программного кода.

24

Глава 1: Математическое введение

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

Если вам не терпится поскорее начать программировать, то прочитайте разделы, посвященные множествам, натуральным, целым и рациональным числам, а также системам счисления, - эти знания необходимы для того, чтобы понять материал первых глав, и переходите ко второй главе. Остальные темы можете читать по мере надобности. Однако помните, что их знание необходимо для понимания программирования.

1.1. Множества

Точного определения множества в математике не существует, да и существовать не может. Строгость математики начинается с того момента, когда выбрано поле действия, - некоторый набор аксиом и базовых понятий, на основе которых может строиться математическая теория.

Давайте теперь попытаемся дать определение множества, исходя непосредственно из нашего опыта:

Множество – набор четко различимых элементов. Описывать множества можно следующими способами:

1.Перечислением его элементов.

2.С помощью правила, генерирующего все элементы множества.

Например, следующие 2 определения задают множество, состоящее из чисел 1, 3,

5, 7:

A = {1,3,5, 7}

A = {n N | n M/ 2, n 7}

Вторую запись следует расшифровывать так: множество А состоит из натуральных чисел, которые не делятся на 2 и не больше 7.

То, что число x принадлежит множеству A , записывается так: x A .

Множество А называется подмножеством множества В, если все элементы множества А принадлежат множеству В. Обозначается это: А В

Множества А и В считаются равными, если они состоят из одинаковых элементов. Иначе это можно сказать так: A = B тогда и только тогда, когда A B и B A .

1.2.Операции над множествами

Пересечением множеств А и В называется множество, состоящее из тех и только тех элементов, которые входят во множества А и В.

Обозначается пересечение множеств A I B .

Объединением множеств А и В называется множество, состоящее из тех и только тех элементов, которые входят хотя бы в одно из множеств А и В.

Обозначается объединение множеств A U B .

Разностью множеств А и В называется множество, состоящее из тех и только тех элементов, которые входят в множество А и не входят во множество В.

Обозначается разность множеств A \ B .

25

Например: если A = {1,3,5, 7} , B = {1,5, 6,8, 7,10} , то A U B = {1,5, 7,3, 6,8,10}

A I B = {1,5, 7} A \ B = {3}

В \ А = {6,8,10}

A A B B

A

B

A \ B

 

 

 

 

 

Пересечение множеств

A

B

A

B

Объединение множеств

Разность множеств

Рис 1.1 Операции над множествами

1.3. Числа

Теперь давайте разберемся с тем, что же такое число.

Вспомните, как учат считать детей: им дают несколько предметов, и называют их число. Потом дают другое множество предметов и снова называют их число и т.д. Это наталкивает на мысль о связи понятия числа с понятием множества. Если множество пустое (т.е. не содержит элементов), то его число элементов =0. Добавляя к пустому множеству любой другой элемент, мы получим новое множество, количество элементов которого =1. Добавляя к любому множеству, число элементов которого равно 1, еще один элемент, получим множество с количеством элементов, равное 2 и т.д. Фактически мы определяем число как характеристику, общую для некоторого класса множеств. Таким способом можно определить числа 0, 1, 2, 3, 4, … , которые называются натуральными числами1.

Но натуральных чисел очень мало: даже простое уравнение x +1 = 0 в натуральных числах не имеет решений.

А уравнения подобного рода то и дело возникают на практике: если у вас не только нет денег, но вы еще и должны некоторую сумму, то выходит, что количество денег, имеющихся у вас, меньше 0. Чтобы решать подобные задачи, были введены целые числа: …, –3, -2, -1, 0, 1, 2, 3, … (натуральные числа и числа, обратные натуральным). Обозначается множество натуральных чисел буквой N , а множество целых – буквой Z .

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

Q – множество чисел вида m , где m – целое число, а n – натуральное. n

Например: 3 , − 3 , 1 - рациональные числа.

22

1 В некоторых разделах математики 0 не считают натуральным числом, но в вычислительной математике 0 – натуральное число.

26

Часто надо представлять рациональные числа в виде десятичной дроби. Вопросы существования разложения решает следующая теорема:

Критерий рациональности: q Q q - периодическая десятичная дробь

Доказательство:

То, что любая конечная дробь – рациональное число следует из равенства:

 

 

 

 

10k x + z z

...z

 

, где z

 

- цифры, i

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

= 1, n .

 

 

 

 

 

 

x + 0.z z

...z

 

=

 

 

1 2

 

 

 

 

 

 

 

 

 

 

 

10k

 

 

 

 

 

 

 

 

 

 

1 2

 

k

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

Докажем, что периодическая часть 0.(d1d2 ...dn ) , где все di это цифры – тоже

рациональное число. Пусть

y = 0.(d d

...d

n

) . Тогда 10n y = d d

...d

n

+ 0.(d d

...d

n

) = d d

...d

n

+ y .

 

 

 

 

1 2

 

 

 

 

 

 

1 2

 

1 2

 

1 2

 

 

А отсюда следует, что:

y = d1d2 ...dn

10n −1

Т.к. любая периодическая дробь – это сумма конечной и периодической частей, а сумма рациональных чисел – рациональное число, то мы доказали, что любая периодическая дробь – рациональное число.

 

 

 

Теперь

 

давайте докажем

обратное:

что

любая

несократимая

дробь

вида

 

m

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

представима в виде десятичной дроби.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Будем делить m на n с остатком: m = a1n + r1 , где 0 ≤ r1 < n .

 

 

 

 

 

 

 

 

 

 

 

Если

r1 = 0 , то

 

m

- целое число. В противном случае

 

m

 

 

 

 

 

 

 

r

 

1

10r

 

 

 

 

 

 

 

 

 

 

 

 

 

= a1 +

1

= a1

+

 

 

 

 

1

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

n

 

10

 

n

 

 

 

 

 

Обозначим m1 = 10r1 , и разделим это число с остатком на n : m1 = a2n + r2 , где 0 ≤ r2

< n .

 

 

 

Если r = 0 , то

m

 

- целое число. В противном случае

m1

= a

 

+

r2

,

причем 0 ≤ a

≤ 9 . При

 

 

 

 

 

2

 

 

 

 

2

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

n

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

этом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m

 

 

r

 

 

 

1

 

m

 

1

 

r

 

 

a

 

1

 

10r

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= a1

+

1

= a1

+

 

 

 

 

 

1

= a1 +

 

a2

+

2

= a1 +

 

2

+

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

10

 

 

 

10

 

 

 

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

n

10

 

n

 

100

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Значит a

 

 

- первая цифра в дробной части числа

 

m

. Если r = r , то m = m ,

и в

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

1

2

 

1

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дальнейшем десятичные знаки будут повторяться:

 

 

a2

= a3 = ... = ak = ...

и

дробь будет

периодической.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Далее, проводя аналогичные действия, получим:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

m2 = a3n + r3 ,

mk = ak +1n + rk +1

Если на каком-то из шагов мы получим остаток ri , равный одному из остатков rj , j < i , то: mi = m j и ai+s = a j +s для любого s , т.е. дробь будет периодическая, и ее периодом будет a j +1a j +2 ...ai .

Но мы знаем, что 0 ≤ ri < n , поэтому либо мы получим на каком-то шаге остаток

равный 0, и дробь будет содержать конечное количество десятичных знаков, либо на каком-либо шаге мы получим остаток, который уже встречался ранее и дробь будет периодической. Теорема доказана.

 

 

 

27

Замечание: из доказательства следует, что период

дроби

m

не может содержать

n

 

 

 

больше, чем n знаков.

 

 

 

Рациональных чисел было достаточно для

решения

большинства простых

арифметических задач. Но давайте рассмотрим простейшую геометрическую задачу: найти гипотенузу прямоугольного треугольника с катетами равными 1. Для этого надо, согласно теореме Пифагора, решить уравнение x2 = 2 . Для того, чтобы записать решение этого уравнения, надо было ввести дополнительную алгебраическую операцию – извлечение квадратного корня. Решение уравнения тогда можно записать в виде x = ± 2 . Так как длина отрицательной быть не может, то искомая гипотенуза = 2 . Тут стал вопрос: а является ли число 2 рациональным? Ответ на этот вопрос отрицательный; дал его сам Пифагор, причем результат очень опечалил его, так как он разбивал всю пифагорейскую философию.

Доказать, что 2 - не рациональное число можно, например, так:

 

 

 

Предположим противное: пусть

2 Q .

Тогда оно представимо в виде

2 =

m

,

 

 

 

 

 

n

причем дробь несократима. В таком случае m2

= 2n2 , т.е. число m2 - четное, а значит,

четным будет и само число m . Пусть

m = 2k , - тогда можно записать, что (2k )2

= 2n2 ,

или 2k 2 = n2 . Но в таком случае n - также четное, а значит дробь m сократима, что n

противоречит нашему предположению. Поэтому число 2 - не рационально.

Вы видите, что указать, является ли рациональное число целым, легко даже по внешнему виду, а вот доказать рациональность числа – значительно сложнее. Но главное не это: основная проблема в том, каким образом надо построить новое числовое множество, которое бы включало в себя все рациональные числа, а также целую охапку новых чисел, одно из которых мы получили только что. И какими свойствами должно обладать новое множество?

Не будем вдаваться в детали построения множества действительных чисел, а ограничимся лишь общей идеей. Есть несколько методов построения действительных чисел. 3 наиболее известных из них принадлежат Георгу Кантору, Рихарду Дедекинду и Карлу Вейерштрассу. Мы будем следовать методу Дедекинда.

Будем считать, что рациональные числа уже построены и логически обоснованы. Будем рассматривать разбиения рациональных чисел на 2 подмножества C1 и C2 так,

чтобы :

1.C1 U C2 = Q .

2.Для любых чисел x C1 , y C2 следует, что x < y .

Для множеств C1 , C2 справедливо одно из следующих соотношений:

1.В C1 есть наибольший элемент, а в C2 нет наименьшего элемента.

2.В C1 нет наибольшего элемента, а в C2 есть наименьший элемент.

3.В C1 нет наибольшего элемента, а в C2 нет наименьшего элемента.

Очевидно, что не может существовать наименьшего числа в C2 и одновременно наибольшего в C1 : пусть эти числа соответственно равны x, y , тогда рациональным

числом будет

x + y

, которое не будет принадлежать ни C ,

ни C

 

, что противоречит

 

2

 

2

1

 

 

 

 

 

 

 

тому, что C1 U C2 = Q .

x = n + 0.d1d2.... ,

28

Вслучаях 1, 2 сечение однозначно определяет рациональное число, равное наибольшему элементу C1 в случае 1, и наименьшему элементу C2 , в случае 2.

Втретьем случае мы будем говорить, что сечение определяет иррациональное число (это число больше любого числа из C1 и меньше любого числа из C2 ).

 

 

Например,

число

2 определяется сечением

(C ,C

) ,

где

C = {x : x2 < 2} ,

 

 

 

 

 

 

1

2

 

 

1

C

2

= {x : x2

> 2}.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Так Дедекинд построил вещественные числа и, кроме того, показал, что если

начинать

строить

сечения

для R , то новых чисел

уже

не

найти,

т.е. область

вещественных чисел нерасширяема. Таким образом, на основе рациональных чисел построены и действительные.

Хотя мы построили множество действительных чисел, но было бы неплохо иметь в распоряжении рабочее определение действительных чисел. Оно будет таким:

Множество действительных, или вещественных, чисел (обозначается R (reele Zahlen), реже используется обозначение D) – множество чисел x вида

где n – целое число, di - цифра, причем в разложении десятичной дроби в конце не

должно быть бесконечной последовательности девяток.

Определение вещественного числа может показаться странным. Почему вдруг число 0.(9) не вещественно? Чем оно хуже остальных?

А дело вот в чем: 0.(9) = 1. Принципиально то, что равенство полагается не в смысле предела, т.е. что последовательность чисел 0.9, 0.99, 0.999, … стремится к 1, а в смысле обычного числового равенства, такого же, как и 4 −1 = 3 . Это легко проверить:

Пусть x = 0.(9) . Тогда 10x = 9.(9) , или 10x = 9 + x , откуда x = 1 .

Это равенство демонстрирует очень важное свойство действительных чисел: бесконечно малых действительных чисел не существует (равно как и бесконечно больших).

Дело в том, что вещественные числа подчиняются аксиоме Евклида: для любых чисел a и b , где a ≠ 0 , существует число n такое, что an > b .

А из этой аксиомы следует, что чисел, отличных от нуля и при этом не изменяющих своей величины при умножении на любое вещественное число, не существует!

Поэтому числа, у которых периодом является число 9, исключаются из рассмотрения (вспомните, что во множестве должны быть четко различимые элементы).

Как следует из критерия рациональности, любое иррациональное число представляется в виде непериодической десятичной дроби. Однако не следует считать, что иррациональность числа означает «хаотичность» расположения цифр в его дробной части. Например, число 0,123456789101112…, в котором выписаны подряд все натуральные числа, является иррациональным (см. упражнение 7).

Обычно в школах на действительных числах рассмотрение числовых множеств заканчивают. Но вспомните уроки физики: разве не часто там говорят о бесконечно малых приращениях, скоростях, расстояниях? А ведь только что мы отметили, что никаких бесконечно малых чисел среди действительных нет. Что же это такое: выходит, что нас все время обманывали, или … надо просто расширить множество действительных чисел.

29

Натуральные числа

N

Целые числа

Z

Рациональные числа

Q

Вещественные числа

R

Гипервещественные числа

Комплексные числа

R*

С

 

 

Кватернионы

H

Рис 1.2 Основные числовые множества

Действовать будем огнем и мечом: если нам аксиома Евклида мешает использовать бесконечно малые и бесконечно большие числа, то давайте выбросим ее и дело с концом. В таком случае в числовую прямую будут втиснуты все числа вида x + a , где a - бесконечно малое число, а x - вещественное число. При этом под бесконечно малым числом понимается число, которое больше нуля, но при этом меньше любого положительного действительного числа.

Числа, полученные из вещественных отбрасыванием аксиомы Евклида, называются гипервещественными. Обозначается множество гипервещественных чисел R* (не очень хорошее обозначение, т.к. его часто употребляют для обозначения множества действительных чисел без нуля).

Таким образом, при решении физических задач имеет смысл расширить множество чисел, чтобы выкладки стали более естественными2.

Но можно расширять множество действительных чисел иначе. Когда мы строили множество вещественных чисел, мы обнаружили, что результат x2 = 2 не будет рациональным числом. Давайте так же поступим и сейчас: попытаемся найти уравнение, которое не будет разрешимо в действительных числах. Долго думать не приходится: одним из таких уравнений является x2 = −2 . Нас учили в школе, что любое число, возведенное в квадрат, не может быть отрицательным. Но мы пропустим все запреты мимо ушей и формально вычислим квадратный корень: x = ± 2 = ± 2 −1 . Корень из –1 не вычисляется, поэтому для него вводится специальное обозначение: i = −1 . Тогда решения уравнения x2 = −2 будут иметь вид x = ± 2i .

Само же множество комплексных чисел C – это множество чисел вида a + bi , где a,b - вещественные числа.

2 По правде говоря, физики не спешат использовать гипервещественные числа и не обращают внимания на корректность выкладок. Ведь для ученых-естественников критерий истины – практика.

30

Хорошо, скажете вы, мы придумали эти комплексные числа, но где же их применить? Все предыдущие множества чисел мы строили для решения конкретных задач.

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

Вы видите, что множество действительных чисел нам удалось расширить двумя совершенно разными способами. До действительных чисел разветвлений не было, но не потому, что их нельзя придумать! Например, можно рассматривать множество чисел вида:

Q 2 = {x : x = a + b 2, a,b Q} , которое также является вполне интересным

расширением множества рациональных чисел. Значит вопрос о том, какие числа являются «правильными», не имеет смысла так же, как и стоявший ранее вопрос о том, какая же геометрия, евклидова или неевклидова, является корректной.

Справедливости ради следует отметить, что существуют и дальнейшие обобщения понятия числа, например, кватернионы, которые также имеют свои приложения к естественным наукам.

1.4. Системы счисления

Обычно мы используем позиционную десятичную систему счисления (ССч). Она называется десятичной потому, что количество цифр – десять: 0,1,…,9, а позиционной - так как значение цифры зависит от ее положения в записи числа. Само число 10 называется основанием десятичной ССч.

Если нам дано число, записанное в десятичной системе счисления, то нам, фактически, задается разложение этого числа по степеням десятки, где коэффициенты этого разложения – цифры 0, …, 9.

Например: 102 = 1 102 + 0 101 + 2 100 .

Но что мешает нам разложить то же самое число по степеням не десятки, а какого-нибудь другого натурального числа, большего 1? Давайте, разложим число 102 по степеням двойки с коэффициентами равными 0 или 1.

102 = 64 + 32 + 4 + 2 = 1 26 +1 25 + 0 24 + 0 23 +1 22 +1 21 + 0 20

Теперь запишем все коэффициенты в этом разложении подряд: 1100110. Мы с вами получили запись числа 102 в двоичной ССч, т.е. в ССч с основанием 2.

Записывается это так: 10210 = 11001102 . Индекс внизу означает основание ССч. В

дальнейшем если индекса под числом нет, то будем считать, что оно записано в 10-й ССч.

Например, разложим число 102 по степеням 3-ки и 8-ки (с коэффициентами 0..2 и 0..7 соответственно):

10210 = 1 34 + 2 32 +1 3 = 1 34 + 0 33 + 2 32 +1 31 + 0 30 = 102103

10210 = 1 82 + 4 81 + 6 80 = 1468

Аналогичным образом можно переводить числа в любые ССч.

3 Например, комплексные числа играют фундаментальную роль в квантовой механике.