- •1 Билет
- •2 Билет
- •3 Билет
- •4 Билет
- •5 Билет
- •8 Билет
- •9 Билет
- •10 Билет
- •Инициализация
- •Использование одномерного массива
- •Связь массива с указателем
- •Передача в функцию
- •Динамический массив
- •Многомерные массивы Многомерные массивы, как правило, реализованные как одномерные массивы, каждый элемент которых является ссылкой на другой одномерный массив.
- •14 Билет
- •15 Билет. Задача поиска.
- •17 Билет
- •17)Рекурсия(Явная и неявная)
2 Билет
Общие сведения
Память ЭВМ построена из запоминающих элементов, обладающих двумя устойчивыми состояниями, одно из которых соответствует нулю, а другое - единице. Таким физическим элементом представляется в памяти ЭВМ каждый разряд двоичного числа (бит). Совокупность определенного количества эти элементов служит для представление многоразрядных двоичных чисел и составляет разрядную сетку ЭВМ.
Каждая группа из 8-ми запоминающих элементов (байт) пронумерована. Номер байта называется его адресом. Определенное число последовательно расположенных байт называется словом. Для разных ЭВМ длина слова различна - два, четыре или восемь байт.
Представление числа с фиксированной точкой
Числа представляются в виде машинного слова (далее - МС). |__|__|__|__|__|__|__|
МС = {n, q}
Естественная форма представления: |_ знак _|_ целая часть _|_ точка _|_ дробная часть _|
Также возможны формы:
|_ знак _|_ целая часть _|_ точка _|
|_ знак _|_точка _|_ дробная часть _|
Знак отображается бинарной цифрой: 0, еслиx≥0 и1, еслиx<0
Прямой код числа:
[x]пр={0.x1x2x3…xn} при положительном числе
[x]пр={1.x1x2x3…xn} при отрицательном числе
Если не указан знак, а код прямой, автоматически ставится плюс
Дополнительный код числа:
[x]доп=[x]прпри положительном числе
[x]доп=qn − [|x|]прпри отрицательном числе
Если не указан знак, а код дополнительный, автоматически ставится минус
8 | 8
- --|--> +
3 | 7 –доп. код
|
v
15- одноразрядный сумматор, поэтому берём 5
Ответ: 8-3 = 8+7-10 = 5
Дополнительный код– бинарно-инвертированный прямой код плюс единичка в конце.
Примеры:
n=3; xпр=00000011, xдоп=11111100+1=11111101
n=36; xпр=00100100, xдоп=11011011+1=11011100
Диапазон изменения чисел в арифметике с фикс. точкой:
-2n-1—2n-1-1, гдеn– количество ячеек в бинарной записи.
Примеры:
8 ячеек, 256 (28) разл. значений, диапазон: -27—27-1, т.е.: -128—127
4 ячейки, 16 (24) разл. значений, диапазон: -23—23-1, т.е.: -8—7
Также возможно смещение относительно нуля: 8 ячеек, 256 значений, но диапазон: 0—256 ( (-27)+ 27—(27-1)+ 27) - смещение диапазона на 27 вправо
Особые ситуации в арифметике с фиксированной точкой:
Переполнение разряда(11111111 + 1 =100000000,1не вошло в значимую часть, число обнулилось)
Некорректное деление(деление на нуль)
Нормальная форма представления чисел:
МС = {n, q}
X=M*Ep, гдеM– мантисса,E– основание,p– порядок
25 = 2,5 * 101= 0,25 * 102= …
1/E ≤ |M| <1
|_знак_|__порядок__|__мантисса__|
1 яч. 8 / 11 яч. 23 / 52 яч.
Floatn=32
Doublen=64
Расширенный формат n=80
Представление числа с плавающей точкой.
Диапазоны представления:
|M|min* 2Pmin≤ |x| ≤ |M|max* 2Pmax
1*2-1022≤|x|≤ (2-2-52) *21023x=0
Max 011…11 2n-1-1
2,2*10-308 ≤ |x| ≤ 1,7*10308 x=0
Правило:
d = [53/3.32] = 15.96≈ 15-16 знаков в сетке гарантированно
Особые ситуации:
Переполнение порядка
Некорректное деление
Исчезновение порядка
Потеря значимости
Свойства арифметики с плавающей точкой:
Сравнение вещественных чисел на равенство: |a-b|<E– только приближенное значение с заданнымE. То есть, при превышении предела неравные числа могут быть равны – например 1,00…0001 и 1,00…0002
Вычитание близких чисел приводит к потере точности – по той же причине.
Сложение чисел aиbприa>>bприводит к потереb. Пример: 10308+10-308 = 10308. Или 100000000000 + 0.0000000001 = 100000000000.
Числа с фиксированной точкой
При представлении в ЭВМ чисел в естественной форме устанавливается фиксированная длина разрядной сетки. При этом распределение разрядов между целой и дробной частями остается неизменным для любых чисел. В связи с эти в информатике существует другое название естественной формы представления чисел - с фиксированной точкой (запятой).
Работая на компьютере, мы можем вводить числа с фиксированной запятой в любом виде. Так же они будут высвечиваться на экране компьютера, но перед занесением в память компьютера они преобразуются в соответствии с разрядной сеткой и хранятся либо с запятой, фиксированной после последнего разряда (целые числа), либо с запятой перед старшим разрядом дроби.
Минимальное положительное число Аmin= 0,00...1 для дробных и 1 для целых чисел; числа по абсолютной величине меньше Аmin(единицы младшего разряда n-разрядной машинной сетки) называется машинным нулем;
Максимальное положительное число Аmax= 0,11...1(1-2-n) для дробных чисел (во всех разрядах должны быть записаны единицы) и 11...1(2n-1) для целых чисел;
Количество разных чисел, которые можно записать в n-разрядную сетку, равно 2n; количество разрядов n, необходимых для записи произвольного десятичного числа M равно n=log2M, если log2M - целое число; в противном случае n равно ближайшему целому, большему log2M.
Современные ЭВМ работают в режиме с плавающей точкой, но сохранен и режим работы с фиксированной точкой, который используется преимущественно для представления целых чисел.
Обычно целые числа в ЭВМ занимают один, два или четыре байта. Один старший бит отводится под знак числа. Знак положительного числа "+" кодируется нулем, а знак отрицательного числа "-" - единицей. Целые числа без знака в двух байтовом формате могут принимать значения от 0 до 216-1 (до 65535), а со знаком "-" от -215 до 215-1, то есть от -32768 до 32767.
Числа с плавающей точкой (запятой)
Неудобство представления чисел в форме с фиксированной точкой проявляется при решении задач, в которых фигурируют как очень малые так и очень большие числа В конкретных физических, математических и других задачах диапазон изменения величин может составлять, например от 10-30 до 1030. Можно убедиться, что в представлении с фиксированной запятой понадобились бы двоичные слова длинной около 256 бит (32 байт), по 128 бит на целую и дробную части. Однако работа ЭВМ с операндами такой длины была бы крайне неэффективной.
Точность числа определяется не его длиной, а количеством верных значащих цифр.
Для однозначности представления чисел с плавающей точкой используется нормализованная форма:
A = M*Ep, гдеM- мантисса числа,E- основание системы счисления, p - порядок числа.
При этом E-1 <= |M| <1. Это означает, что мантисса должна быть дробью и иметь первую после запятой цифру, отличную от нуля.
Число в форме с плавающей точкой занимает в памяти ЭВМ четыре или восемь байт (больше - крайне редко). При записи числа с плавающей точкой выделяются разряды для хранения мантиссы, знака порядка, порядка и мантиссы.
Оценим диапазон представления чисел по максимальному значению:
Amax=Mmax*EPmax, гдеE= 2 (основание системы счисления),Mmax= 1-2-24(максимальное значение мантиссы), Pmax= 26-1 = 63 (максимальный порядок при 6 разрядах).
Тогда Amax= (1-2-24)*263= 1*263= 1019.
Представление чисел в форме с плавающей точкой очень удобно для решения научных и инженерных задач. Нормализованное представление чисел не только позволяет сохранить в разрядной сетке большое количество значащих цифр, но также упрощает действие над порядками и мантиссами.
Нормализованная запись числа.
Нормализованная запись отличного от нуля действительного числа - это запись вида a=m*Pq, где q - целое число (положительное, отрицательное или ноль), а m - правильная P-ичная дробь, у которой первая цифра после запятой не равна нулю, то есть . При этом m называется мантиссой числа, q - порядком числа.
Примеры:
1. 3,1415926 = 0, 31415926 * 101;
2. 1000=0,1 * 104;
3. 0,123456789 = 0,123456789 * 100;
4. 0,00001078= 0,1078* 8-4;
5. 1000,00012= 0, 100000012* 24.
Так как число ноль не может быть записано в нормализованной форме в том виде, в каком она была определена, то считаем, что нормализованная запись нуля в 10-й системе будет такой:
0 = 0,0 * 100.
Нормализованная экспоненциальная запись числа - это запись вида a= m*Pq, где q - целое число (положительное, отрицательное или ноль), а m - P-ичная дробь, у которой целая часть состоит из одной цифры. При этом (m-целая часть) называется мантиссой числа, q - порядком числа.
Арифметика с плавающей точкой
Во-первых, что такое плавающая точка? Возьмем, к примеру, карманный калькулятор и посмотрим, как высвечивается результат на его индикаторе после ввода очередного значения:
Десятичная точка «плавает» по индикатору по мере необходимости. Такой индикатор называется индикатором с плавающей точкой. Представление с плавающей точкой - это способ записи чисел в компьютере в виде мантиссы и порядка. Например, 12 млн. можно записать как 12*106, поскольку 106=1000000. Во многих компьютерах 12 млн. должно быть записано в виде двух чисел 12 и 6, что воспринимается как 106, умноженное на 12. Число 3.345 будет записано так: 3345 и -3.
Идея представления чисел в форме с плавающей точкой состоит в том, чтобы компьютер мог представить необозримо большой диапазон чисел - от мизерных до астрономических - двумя сравнительно небольшими числами.
Представление с фиксированной точкой - другой способ записи чисел в память, при котором положение десятичной точки числа не запоминается. Например, при вводе суммы в долларах и центах все значения должны запоминаться в центах, а расположение десятичной точки должно «помнить» не само число, а программа.
Сравним для иллюстрации три представления чисел: общепринятое, с фиксированной точкой и с плавающей точкой:
ОБЩЕПРИНЯТОЕ С ФИКСИРОВАННОЙ С ПЛАВАЮЩЕЙ
ПРЕДСТАВЛЕНИЕ ТОЧКОЙ ТОЧКОЙ
1.23 123 123(-2)
10.98 1098 1098(-2)
100.00 10000 1 (2)
58.60 5860 586(-1)
Как видите, в представлении с фиксированной точкой все значения следуют одному шаблону. Компьютер в этом случае интерпретирует все числа как целые. Программа, прежде чем выдать ответ на экран терминала или алфавитно-цифровое печатающее устройство, вставляет десятичную точку после двух цифр справа
особые случаи представления вещественных чисел
• нуль - это такое число, у которого порядок и мантисса равны нулю. Нуль может иметь положительный или отрицательный знаки, которые игнорируются в операциях сравнения. Таким образом, имеется два нуля - положительный и отрицательный;
• наименьшее положительное число - это число, которое имеет нулевой знаковый бит, значение порядка, равное 1, и значение мантиссы, равное нулю. В зависимости от представления наименьшее положительное число имеет следующие значения: 1,17*10-38(одинарная точность), 2.23*10-308(двойная точность), 3.37*10-4932 (расширенная точность);
• наибольшее отрицательное число - полностью совпадает с наименьшим положительным числом, но имеет бит знака, установленный в 1;
• наибольшее положительное число - это число, которое имеет нулевой знаковый бит, поле порядка, в котором все биты кроме самого младшего, равны 1, и содержит единицы во всех разрядах мантиссы. В зависимости от представления наибольшее положительное число имеет следующие значения: 3.37*1038(одинарная точность), 1.67*10308(двойная точность), 1.2*104932(расширенная точность);
• наименьшее отрицательное число - полностью совпадает с наибольшим положительным числом, но имеет бит знака, установленный в 1;
• положительная и отрицательная бесконечность - это число содержит все единицы в поле порядка и все нули в поле мантиссы. В зависимости от состояния знакового бита может быть положительная и отрицательная бесконечности. Бесконечность может получиться, например, как результат деления конечного числа на нуль;
• нечисло - содержит все единицы в поле порядка и любое значение в поле мантиссы. Нечисло может возникнуть в результате выполнения неправильной операции при замаскированных особых случаях (ошибкам при работе с сопроцессоре будет посвящен отдельный раздел этой главы);
• неопределенность - содержит в поле порядка все единицы, а в поле мантиссы - число 1000..0 (для одинарной и двойной точности) или 11000..0 (для расширенной точности, так как в этом формате хранится старший бит мантиссы).