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

I1_10_15

.pdf
Скачиваний:
33
Добавлен:
27.03.2016
Размер:
906.37 Кб
Скачать

2015-2016 уч. год, №1, 10 кл. Информатика и ИКТ. Системы счисления. Способы представления чисел

Теперь возникает следующий вопрос. Как определить тип результата при вычислении арифметического выражения? Для ответа на этот вопрос необходимо знать особенности выполнения всех арифметических операций. Итак, операции сложения, вычитания и умножения выдают целый результат, если оба их операнда целые, и вещественный, если хотя бы один из операндов – вещественный. Операция деления «/» всегда выдаёт вещественный результат. Даже если мы 4 делили на 2, всё равно в итоге получается нецелое число. На первый взгляд это кажется странным, но в отличие от математики в программировании каждое число, кроме значения, ещё имеет тип, и если типы у чисел не совпадают, то они НЕ считаются равными. Нужно уяснить, что 1 ≠ 1.0. Операции div и mod всегда выдают целый результат и, в отличие от всех остальных арифметических операций, могут иметь только целые операнды. Попытка применить данные операции к вещественным числам приводит к критическим ошибкам.

Давайте подробнее познакомимся с двумя последними операциями. Операция a div b выдаёт целую часть от деления числа a на число b по правилам математики. То есть 5 div 2 = 2, а 3 div 7 = 0. Операция a mod b выдаёт остаток от деления a на b по следующему закону:

a mod b = a – ((a div b) * b).

Приведём примеры выполнения этих операций для всех возможных

знаков операндов:

 

 

 

 

 

 

 

5

div

3

=

1;

5

mod

3

=

2;

-5

div

3

= -1;

-5

mod

3

=

-2;

5

div -3

= -1;

5

mod

-3

=

2;

-5

div -3

=

1;

-5

mod

-3

=

-2.

Следующее очень важное понятие в программировании – это понятие переменной. Переменной называется объект, который может изменять своё значение в ходе вычислений. Под каждую переменную отводится именованная область в оперативной памяти. Для каждой переменной всегда определены три вещи:

1) Уникальное имя. 2) Тип.

3)Значение в текущий момент времени.

2015, ЗФТШ МФТИ, Мерзляков Василий Владимирович

21

2015-2016 уч. год, №1, 10 кл. Информатика и ИКТ. Системы счисления. Способы представления чисел

Именем переменной может быть любая последовательность латинских букв и цифр, начинающаяся с буквы, например «D2», «VV», «ABRAcADaBRA» являются правильными именами, а «d-f», «4d», «gggggg+()*OIIJ_K» – это примеры неправильных имён переменных. Учтите, что в Паскале не различаются большие и малые латинские буквы (то есть имена ABc и abC обозначают одну и ту же переменную). Имена разных переменных совпадать не могут. Ещё одна важная особенность – символ подчёркивания ( «_» ) считается латинской буквой, поэтому он может входить в состав имени, а также имя переменной может с него начинаться.

Переменная может принадлежать к одному из известных нам типов (integer, real, longint) и может принимать значение только в соответствии со своим типом. То есть переменная типа integer не может иметь значения 40000, так как оно выходит за допустимый диапазон, или 0.5, так как это число вообще не является целым.

Значение переменных можно изменять при помощи оператора присваивания. Выглядит он следующим образом: сначала записывается имя переменной, потом знак присваивания (в Паскале знаком присваивания является «:=»), а затем значение, которое мы хотим присвоить данной переменной. Например, запись X:=5 означает, что в переменную X мы записали число 5, и если в дальнейших вычислениях мы используем переменную X, то вместо неё будет подставляться число 5. Например, если написать Y:=X–1, то в переменную Y запишется число 4, поскольку X было равно 5. Использование переменных позволяет записывать в программе математические и физические формулы один раз в общем виде, а затем, задавая конкретные начальные значения, производить бесконечное количество вычислений, не меняя текста программы!

Переменные наряду с числами могут быть операндами в арифметическом выражении. Также операндами могут быть стандартные математические функции, которые приведены в таблице ниже:

2015, ЗФТШ МФТИ, Мерзляков Василий Владимирович

22

2015-2016 уч. год, №1, 10 кл. Информатика и ИКТ. Системы счисления. Способы представления чисел

Функция

Комментарий

Тип аргумента

Тип результата

 

 

 

 

 

 

 

 

 

 

integer,

совпадает с ти-

abs(x)

x— модуль x

longint,

пом аргумента

 

 

 

 

real

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

integer,

совпадает с ти-

sqr(x)

x2

longint,

пом аргумента

 

 

 

 

real

 

 

 

 

 

 

 

 

 

 

 

integer,

 

sqrt(x)

 

x — корень

longint,

real

квадратный из x

 

real

 

 

 

 

 

 

 

 

 

 

Pi

3.1415926535

Нет

real

 

897932385

 

 

 

 

 

 

 

 

 

 

 

 

integer,

 

sin(x)

sin x

longint,

real

 

 

 

 

real

 

 

 

 

 

 

 

 

 

 

 

integer,

 

cos(x)

cos x

longint,

real

 

 

 

 

real

 

 

 

 

 

 

 

 

 

 

 

integer,

 

arctan(x)

arctg x

longint,

real

 

 

 

 

real

 

 

 

 

 

trunc(x)

отсекание дроб-

real

longint

ной части x

 

 

 

 

 

 

 

 

округление x до

 

 

 

ближайшего це-

 

 

round(x)

лого. Половины

real

longint

округляются в

 

 

 

 

сторону увели-

 

 

 

чения модуля.

 

 

 

 

 

 

 

 

2015, ЗФТШ МФТИ, Мерзляков Василий Владимирович

23

2015-2016 уч. год, №1, 10 кл. Информатика и ИКТ. Системы счисления. Способы представления чисел

Необходимо отметить, что функциям sin и cos угол следует подавать

врадианах, а не в градусах! Также функция arctan возвращает результат

врадианах.

При использовании операторов присваивания необходимо соблюдать правило совместимости типов, то есть тип выражения должен соответствовать типу переменной, в которую мы хотим присвоить значение этого выражения. Есть исключения из этого правила: в вещественную переменную можно присвоить целое значение; в переменную типа longint можно присвоить значение типа integer; в переменную типа integer можно присвоить значение типа longint, если оно укладывается в соответствующий диапазон.

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

Задача 1. Пусть A и B – это переменные, значениями которых являются длины сторон прямоугольника. Требуется в переменную S записать величину площади этого прямоугольника, а в переменную P – его периметр.

Решение. Эта задача решается путём записи двух операторов присваивания с соответствующими формулами.

S:= A*B;

P:= 2*A + 2*B.

Если переменные A и B были целого типа, то площадь и периметр также будут целыми и, соответственно, переменные S и P могут иметь целый тип. Если же хотя бы одна из переменных A и B имела вещественный тип, то и результат будет вещественного типа, следовательно, переменные S и P должны быть типа real.

Задача 2. Пусть R – радиус окружности. Требуется в переменную L записать длину этой окружности, а в переменную S площадь круга, ограниченного данной окружностью.

Решение.

L:= 2*pi*R; S:= pi*sqr(R).

Независимо от типа переменной R переменные L и S должны иметь тип real, поскольку стандартная функция pi выдаёт вещественное число, и, соответственно, результат вычислений всегда будет вещественным числом.

2015, ЗФТШ МФТИ, Мерзляков Василий Владимирович

24

2015-2016 уч. год, №1, 10 кл. Информатика и ИКТ. Системы счисления. Способы представления чисел

Задача 3. Пусть A и B – длины сторон треугольника, а X – величина угла между ними в радианах. Требуется в переменную С записать длину третьей стороны.

Решение. Используем теорему косинусов:

C:= sqrt(sqr(A)+sqr(B)–2*A*B*cos(X)).

Опять же независимо от типов переменных A и B, переменная C имеет тип real, поскольку в состав арифметического выражения входят стандартные функции косинус и квадратный корень, которые всегда выдают вещественный результат.

Задача 4. Пусть в переменной K, имеющей тип integer, записано число от 100 до 999. Требуется в переменную X, имеющую тип integer, записать сумму его цифр.

Решение. Эта задача решается с помощью операций div и mod. (Все используемые переменные – целые, и проблем не возникнет) Нужно выделить цифры из исходного числа и сложить их. В предложенном решении цифры выделяются от младшей к старшей.

X:=K mod 10 + K div 10 mod 10 + K div 100.

Действительно, взяв остаток от деления на 10, мы получаем младшую цифру в числе, а разделив нацело на 100 – старшую цифру. Для того чтобы узнать вторую цифру (количество десятков), мы выполняем две операции: сначала делим нацело на 10, отбрасывая последнюю цифру, а потом у результата (двузначного числа) берём остаток от деления на 10 и получаем ровно то, чего добивались.

Задача 5. Пусть переменные A и B имеют некоторые значения. Требуется поменять их местами.

Решение. Это очень важная задача на один из фундаментальных алгоритмов в программировании. Очевидно, что просто написать A:=B, а затем B:=A нельзя, поскольку после первого оператора присваивания переменные А и B будут иметь одинаковое значение. Необходимо сначала сохранить значение одной из переменных в какой-нибудь дополнительной. Например, в переменной C. После этого переменную, значение которой мы сохранили, можно «испортить», присвоив ей значение второй. И, наконец, во вторую переменную мы присваиваем значение первой, которое сохранено в дополнительной переменной C. Решение может выглядеть, например, так:

С:=A;

A:=B;

B:=C.

Очевидно, что все три переменные должны иметь одинаковый тип (либо все целые, либо все вещественные). В противном случае один из трёх операторов присваивания будет невозможно выполнить.

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

2015, ЗФТШ МФТИ, Мерзляков Василий Владимирович

25

2015-2016 уч. год, №1, 10 кл. Информатика и ИКТ. Системы счисления. Способы представления чисел

Контрольные вопросы

1(1). Опишите любую позиционную нетрадиционную систему счисления.

2(1). Верно ли записаны числа в семнадцатеричной системе счисле-

ния: С1G7BA417, 842A78G95817, 8O76B3917?

3(2). В какой системе счисления число 14310 выглядит как 355?

4(2). Найдите наибольшее основание системы счисления, в которой запись десятичного числа 77 имеет три значащих разряда.

5(2). Перечислите в порядке возрастания все двоичные числа, лежащие между 1378 и 5F16 (сами числа в ответ записывать не нужно).

6(1). Сколько значащих нулей в троичной записи числа 29310?

7(2). Вычислите результаты следующих операций или сообщите о невозможности вычислений (помните, что 1 и 1.0 – это различные ре-

зультаты!) В решении записывайте и пример,

и ответ:

 

39 div 4; 39 mod 7; 100 div 20; 200 mod 40;

(–39) div 3;

(–39) mod 9;

20 div 7770; 20 mod 99; 17 div 0; 0 mod 289; abs(–97);

abs(–7.79);

sqr(–3.0); sqrt(49); sqrt(49.0); cos(0); sin(0.0);

 

8(3). Уберите из выражения лишние скобки (то есть те, удаление которых не изменит порядок выполнения операций):

a)((a*b) div c) mod (a * b);

b)((sin(x + y))/2) – cos((x + y)/2);

c)(a*x)/(b*y) + ((a/x)/(b/y)) + a/(b/c)/d.

9(2). Укажите порядок выполнения операций, затем вычислите итоговое значение выражения и укажите его тип.

18/(3*2)-18/2/3+18/3*2

10(2). Сколько операций выполняется при вычислении выражения (x + 5/2)*(y - 9/10) + 3/4*z? Как сократить число операций?

11(4). Если y вещественная переменная, а n – целая, то какие из следующих операторов присваивания правильные, а какие нет и почему?

a) y: = n + 1;

b) n: = y 1;

c) n: = 4.0; d) y: = trunc(y);

e) n: = n div 2;

f) y: = y mod 2;

g) n: = n/2; h) n := sqr(sqrt(n)).

12(3). Допустим ли следующий оператор присваивания? Если да, то выпишите тип и итоговое значение переменной «y», если нет, то напишите, почему.

y := round(3*7 Div y Mod 7/3)/y – Trunc(0.724)

2015, ЗФТШ МФТИ, Мерзляков Василий Владимирович

26

2015-2016 уч. год, №1, 10 кл. Информатика и ИКТ. Системы счисления. Способы представления чисел

Задачи

1(3). Выполните действия сложения и вычитания над следующими парами чисел: 101000102 и 11002; 63367 и 5367; EB0A15 и ССВ15.

2(2). Переведите следующие числа в десятичную систему счисле-

ния: 6427; 214,325

3(3). Переведите десятичное число 138 в двоичную, семеричную и 13-ричную системы счисления.

4(4). Переведите десятичное число 6893,45 в двоичную систему счисления.

5(4). Переведите число 53734587454,4838789 в 27-ричную систему счисления, а число FВ5EA,D356A16 — в восьмеричную.

6(1). Все 6-буквенные слова, составленные из букв слова ВЕСЛО, записаны в алфавитном порядке и пронумерованы с 1 (Первым идет слово ВВВВВВ). Выпишите слово, которое записано под номером 13337. Ответ обосновать. Словом считается любая последовательность вышеуказанных символов.

7(2). Восстановите неизвестные цифры, обозначенные знаком «*» в следующем примере, определив вначале, в какой системе счисления выполняется действие

*5*3 - *68 = 96А8

8(1). Выпишите все десятичные числа, не превосходящие 80, запись которых в четырнадцатеричной системе счисления оканчивается цифрой 6.

9(3) Сколько единиц содержится в двоичной записи числа

(2∙104)301+10026000+8229–3

10(3). Запишите дополнительный код числа -26713 в шестнадцатиразрядной ячейке памяти.

11(3). Пусть часовая стрелка образует угол У с лучом, проходящим через центр и через точку, соответствующую 12 часам на циферблате, 0 < Y ≤ 360. (Значение угла записано в переменной Y). Запишите в переменную X соответствующее значение угла для минутной стрелки. Все переменные имеют тип integer.

2015, ЗФТШ МФТИ, Мерзляков Василий Владимирович

27

2015-2016 уч. год, №1, 10 кл. Информатика и ИКТ. Системы счисления. Способы представления чисел

12(2). Пусть в переменной С, имеющей тип integer, записано четырёхзначное число. Запишите в переменную X, имеющую тип integer, число, полученное перестановкой первой цифры с третьей цифрой, и второй цифры с четвёртой цифрой исходного числа. Например, если дано число 6104, то в ответе получается 461. Если пользуетесь дополнительными переменными, то они все имеют тип integer.

13(2). В переменных A и B записаны длины двух оснований равнобедренной трапеции, а в переменной С – длина боковой стороны. Требуется в переменную S записать площадь этой равнобедренной трапеции. Выпишите оператор (операторы) присваивания для решения этой задачи и укажите возможные типы всех переменных, используемых в задаче.

14(4) Есть числовой ряд: 101112…979899, в котором подряд выписаны все двузначные числа. Определить двузначное число из этого ряда, образованное парой цифр, в которую входит k-ая цифра. k вводится и лежит в диапазоне от 1 до 180. Например, если вводится k=3, то в ряду это цифра 1, которая входит в двузначное число 11, а если вводится k=6, то это цифра 2, которая входит в двузначное число 12.

15(5) В вещественной переменной Y записано некоторое неотрицательное число, не превосходящее 30000. Запишите в переменную S сумму первых после десятичной точки трёх цифр числа Y. Можно использовать дополнительные переменные любых типов, но нужно указать тип для каждой дополнительной переменной.

2015, ЗФТШ МФТИ, Мерзляков Василий Владимирович

28