Рассказы о математике с примерами на языках Python и C - [2]

Шрифт
Интервал

>for(int i=0; i

>  printf("%d\n", values[i]);

>}

>values[cnt] = 7;

>cnt++;

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

>int *valuesArray = (int*)malloc(10*sizeof(int));

>valuesArray[0] = 1;

>valuesArray[1] = 3;

>valuesArray[2] = 15;

>valuesArray = (int*)realloc(valuesArray, 25*sizeof(int));

>valuesArray[20] = 555;

>valuesArray[21] = 777;

>for(int i=0; i<25; i++) {

>  printf("%d\n", valuesArray[i]);

>}

>free(valuesArray);

Важно заметить, что неинициализированные значения массива, например >valuesArray[16], будут содержать «мусор», некие значения которые были до этого в памяти. Си достаточно низкоуровневый язык, и такие моменты нужно учитывать. Хорошим тоном является инициализация всех переменных при их описании. Вот такой код формально не содержит ошибок:

>int x;

>printf("x=%d\n", x);

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

Арифметические операции

Сложение, умножение,деление:

>x1 = 3

>x2 = (2 * x1 * x1 + 10*x1 + 7)/x1

Возведение в степень:

>x3 = x1**10

>print(x1, x2, x3)

Переменную также можно увеличить или уменьшить:

>x1 += 1

>x1 -= 10

>print(x1)

Остаток от деления:

>x2 = x1 % 6

>print(x2)

Подсчитаем сумму элементов массива:

>values = [1,2,3,5,10,15,20]

>sum = 0

>for p in values:

>    sum += p

>print(sum)

Для более сложных операций необходимо подключить модуль >math. Вычисление квадратного корня:

>import math


>print(math.sqrt(x3))

Условия задаются отступами, аналогично циклам:

>print (x1)

>if x1 % 2 == 0:

>    print("x1 четное число")

>else:

>    print("x1 нечетное число")

Python может делать вычисления с большими числами, что достаточно удобно:

>x1 = 12131231321321312312313131124141

>print(10 * x1)

>print(math.sqrt(x1))

Можно вывести даже факториал числа 1024, что не сделает ни один калькулятор:

>print(math.factorial(1024))

В Си вычисление суммы элементов массива выглядит так:

>int sum = 0;

>for(int i=0; i

>  sum += values[i];

>}

>printf("Sum=%d\n", sum);

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

2. Математические фокусы

Для «разминки» рассмотрим несколько фокусов, имеющих отношение к числам. Никаких особых сложностей в них нет, но их знание поможет развеселить или удивить знакомых знанием математики.

Умножение в уме числа на 11

Рассмотрим простой пример: 26 * 11 = 286

Сделать это в уме просто, если взять сумму чисел и поместить в середину: 26 * 11 = 2 [2+6] 6

Аналогично 43 * 11 = 473, 71 * 11 = 781 и так далее.

Чуть длиннее расчет, если сумма чисел больше либо равна 10. Но и тогда все просто: в середину кладется младший разряд, а 1 уходит в старший разряд:

47 * 11 = [4] [4 + 7 = 11] [7] = [4 + 1] [1] [7] = 517

94 * 11 = [9] [9 + 4 = 13] [4] = [10] [3] [4] = 1034

Возведение в квадрат числа, оканчивающегося на 5

Подсчитать это тоже просто. Если число рассмотреть как пару NM, то первая часть результата — это число N, умноженное на (N + 1), вторая часть числа — всегда 25. 35>2 = [3 * 4] [25] = 12 25

Аналогично:

25>2 = [2 * 3] 25 = 625 85>2= [8*9] 25 = 7225 и так далее.

Отгадывание результата

Попросим человека загадать любое число. Например 73. Затем чтобы еще больше запутать отгадывающего, попросим сделать следующие действия:

‐ удвоим число (146)

‐ прибавляем 12 (158)

‐ разделим на 2 (79)

‐ вычтем из результата исходное число (79 - 73 = 6)

В конце мы отгадываем, что результат — 6. Суть в том, что число 6 появляется независимо от того, какое число загадал человек.

Математически, это доказывается очень просто:

(2 * n + 12) / 2 - n = n + 6 - n = 6, независимо от значения n.

Отгадывание чисел

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

‐ записать число в обратном порядке (257)

‐ вычесть его из исходного числа (752 - 257 = 495)

‐ к ответу добавить его же, только в обратном порядке (495 + 594)

Получится число 1089, которое «фокусник» и объявляет публике.

Математически это тоже несложно доказать.

‐ Любое число вида abc в десятичной системе счисления представляется так:

abc = 100 * a + 10 * b + c.

‐ Разность чисел abc - cba:

100 * a + 10 * b + c + 100 - 100 * c - 10 * b - a = 100 * a - 100 * c - (a - c) = 100 * (a - c) - (a - c)

‐ Т. к. по условию a - c > 0, то результат можно записать в виде:

100 * (a - c) - (a - c) = 100 * (a - c) - 100 + 90 + 10 - (a - c) = 100 * (a - c - 1) + 10 * 9 + (10 - a + c)

Мы узнали разряды числа, получающегося в результате:

a>1 = a - c - 1, b>1 = 9, c>1 = 10 - a + c

‐ Добавляем число в обратном порядке:

a>1b>1c>1 + c>1b>1a>1 = 100 * (a - c - 1) + 10 * 9 + (10 - a + c) + 100* (10 - a + c) + 10 * 9 + a - c - 1

Если раскрыть все скобки и сократить лишнее, в остатке будет 1089.

3. Число Пи

Вобьем в стену гвоздь, привяжем к нему веревку с карандашом, начертим окружность. Как вычислить длину окружности? Сегодня ответ знает каждый школьник — с помощью числа Пи. Число Пи — несомненно, одна из основных констант мироздания, значение которой было известно еще в древности. Оно используется везде, от кройки и шитья до расчетов гармонических колебаний в физике и радиотехнике.


Рекомендуем почитать
Математическое мышление

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


Геометрическая рапсодия

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


Диалоги о математике

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


Фрактальная геометрия природы

Классическая книга основателя теории фракталов, известного американского математика Б. Мандельброта, которая выдержала за рубежом несколько изданий и была переведена на многие языки. Перевод на русский язык выходит с большим опозданием (первое английское издание вышло в 1977 г.). За прошедший период книга совсем не устарела и остается лучшим и основным введением в теорию фракталов и фрактальную геометрию. Написанная в живой и яркой манере, она содержит множество иллюстраций (в том числе и цветных), а также примеров из различных областей науки. Для студентов и аспирантов, физиков и математиков, инженеров и специалистов.


Число, пришедшее с холода. Когда математика становится приключением

Знание математики приобретает особое значение в нашу цифровую эпоху. Рассказывая о прошлом, настоящем и будущем математической мысли и о первооткрывателях важнейших математических законов, известный австрийский ученый и популяризатор науки Рудольф Ташнер посвящает нас не только в тайны цифр и чисел, но и шире — в тайны познания. «Из великого множества историй о якобы безмерной власти чисел я отдал предпочтение тем, в которых проводится идея о том, что числа не просто оказались у людей под рукой.


У интуиции есть своя логика. Гёдель. Теоремы о неполноте

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