Выбрать главу

}

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)

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

print (x1)

if x1 % 2 == 0:

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

else:

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

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

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

s = 0

for p in values:

s += p

print(s)

Этот способ математически корректный, но медленный - лучше для этого можно воспользоваться встроенной функцией sum:

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

print(sum(values))

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

int sum = 0;

for(int i=0; i<cnt; i++) {

sum += values[i];

}

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

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

import math

print(math.sqrt(x3))

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

import math

x1 = 12131231321321312312313131124141

print(10*x1)

print(math.sqrt(x1))

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

import math

print(math.factorial(1024))

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

Используем Jupiter Notebook

Большинство примеров в книге написаны на языке Python. Однако, кроме описанного выше “классического” способа запуска программ, есть другой, весьма популярный сейчас способ - использование “записных книжек”, или notebooks. Такая система работает для языка Python, и называется Jupiter Notebook. Идея состоит в интерактивном редактировании страницы с кодом и текстом, где по сути, программа, больше похожа на текст книги. Это может быть удобно для каких-то экспериментов, где можно пробовать фрагменты кода и сразу видеть результат.

Для установки Jupiter Notebook для Windows достаточно ввести команду C:\Python27\Scripts\pip.exe install jupyter. Затем достаточно ввести команду jupyter notebook - запустится сервер, а в браузере откроется визуальный редактор, где можно редактировать код и видеть результат. По умолчанию редактор покажет файлы в текущем каталоге, выглядеть это может примерно так.

Файлы .ipynb - это файлы “записных книжек”, которые мы можем открыть.

Создадим новый файл, нажав кнопку New в правой части экрана. Появляется окно где мы можем писать код и тут же выполнять его, нажав кнопку Run. Кроме кода можно писать и текстовые комментарии (поддерживается даже форматирование как в HTML). Таким образом, эта система объединяет и редактор, и интерпретатор Python, и также позволяет сразу видеть результаты работы.

Для примера построим график функции количества простых чисел (подробнее в гл.5).

“Записную книжку” Jupiter можно сохранить, закрыть, переименовать и пр.

В данной книге такой способ запуска Python-программ не используется, но кому-то он может оказаться более удобным. Ну а сейчас вернемся к математике.

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

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