- •Информатика
- •1. Моделирование
- •1.1. Формы представления моделей формализация
- •1.2. Системный подход к моделированию
- •1.3. Типы информационных моделей
- •1.4. Этапы разработки и исследования модели на компьютере
- •Системное программное обеспечение
- •Средства программирования (инструментарий технологии программирования)
- •Краткая характеристика языков программирования.
- •Ассемблерные языки программирования
- •Алгоритмические языки
- •Программные продукты для создания приложений
- •Объектно-ориентированный подход к программированию
- •Алгоритмизация
- •1. Разветвляющийся алгоритм.
- •2. Циклические алгоритмы.
- •Структура и конструкция программы
- •Перевод правильных десятичных дробей
- •Арифметические действия с двоичными числами
- •Представление двоичных чисел в прямом, обратном и дополнительных кодах.
- •Сложение двоичных чисел в компьютере. Модифицированный код.
- •Вывод с использованием функции printf и fprintf
Представление двоичных чисел в прямом, обратном и дополнительных кодах.
Обратные и дополнительные коды используются для замены вычитания сложением. Эти коды используются для представления двоичных чисел. Десятичные – только для иллюстрации. Представление положительных чисел во всех кодах совпадает.
Прямой код.
Число преобразуется в прямой код по правилу:
x > 0, x = +0, x1, x2, …, то [x]пр = 0, х1, х2, …
х < 0, х = -0, х1, х2, …, то [x]пр = 1, х1, х2, …
Если в разряде знака 0 – число положительное, если 1 – число отрицательное.
Пример:
х = -0.10101 [x]пр = 1.10101
Обратный код:
Число преобразуется в обратный код по правилу:
x > 0, x = +0, x1, x2, …, то [x]обр = [x]пр = х
х < 0, х = -0, х1, х2, …, то 1.{01, 10}
Пример:
х = -0.10101
[x]обр = 1.01010
Дополнительный код:
x > 0, x = +0, x1, x2, …, то [x]доп = [x]пр = [x]обр = х
х < 0, х = -0, х1, х2, …, то [x]доп определяется как дополнение числа до единицы более старшего разряда; [x]доп = 1.х1|x2|…+0,00…1
Пример:
х = -0.10101
Берется число 100000 и из него вычитается мантисса 10101. Полученное число является дополнением. В этом примере дополнение 01011.
Пример:
5(10) – 3(10) = 2(10)
Для десятичных чисел.
Дополнение 3 до 10 7 (10 – 3 = 7)
5 + 7 = 12 1|2
В обратном коде для десятичных чисел при представлении каждой позиции используются цифры от 0 до 9. Инвертированное число для 3 равно 6 (9 – 3 = 6), поэтому
5 + 6 = 11
Единица переноса добавляется к младшему разряду и получается в итоге 2.
12 – 3 = 9
1100
Сложение двоичных чисел в компьютере. Модифицированный код.
С учетом знаков сложение чисел в компьютере выполняется следующим образом. Числа в прямом коде преобразуются в дополнительный или обратный, выполняется поразрядное сложение кодов, и результат преобразуется в прямой код для передачи на другие устройства компьютера.
Сложение в обратном коде.
Число в обратном коде складывается поразрядно, включая знаковые разряды. При возникновении в знаковом разряде единицы переноса, она прибавляется к младшему разряду, что называется циклическим переносом.
При сложении различают четыре случая:
1. При сложении двух положительных чисел получают положительное число.
2. При сложении положительного и отрицательного чисел получают отрицательное число.
3. При сложении положительного и отрицательного чисел получают положительное число.
4. При сложении двух отрицательных чисел получают отрицательное число.
При сложении положительных чисел, их обратный код совпадает с прямым и не требует пояснений.
Модифицированный обратный код.
При сложении больших чисел возможно переполнение разрядной сетки компьютера. При этом в знаковом разряде при сложении двух положительных чисел может появиться единица, что означает отрицательный результат.
Пример:
0.1010 + 0.1101 = 1.0111 (неверно)
Для выявления переполнения вводится модифицированный обратный код. В модифицированном коде под знак числа отводится два разряда, а не один. В модифицированном обратном коде числа представляются по правилу:
x > 0, x = +0, x1, x2, …, то [x]обр. мод. = 00, x1, x2, …
х < 0, х = -0, х1, х2, …, то [x]обр. мод. = 11, |x1, |x2, …
Остальные комбинации знаковых разрядов (01, 10) служат признаком переполнения разрядной сетки компьютера.
При сложении два знаковых разряда сравниваются между собой и при появлении переполнения, компьютер останавливается с сообщением об ошибке. В модифицированном обратном коде числа складываются как и в обычном обратном коде.
Сложение в дополнительном коде.
В дополнительном коде числа складываются так же, как и в обратном, только единица переноса, получающаяся при сложении, отбрасывается.
Пример:
- 0,0101 + 0,1010
0,0101 1,1011доп
0,1010 + 1,1011 = |1|0,0101доп
Модифицированный дополнительный код.
В модифицированном дополнительном коде так же, как и в обратном, под знак числа отводится два разряда. В модифицированном дополнительном коде числа представляются по правилу:
x > 0, x = +0, x1, x2, …, то [x]доп. мод. = 00, x1, x2, …
х < 0, х = -0, х1, х2, …, то [x]доп. мод. = 11, |x1, |x2, … + 0,0…1
Как и в обратном коде, комбинация знаковых разрядов (01 и 10) являются признаком переполнения разрядной сетки.
04.05.2012 г. (пт)
Таблица «Способы преобразования символов при вводе».
Символ за % |
Тип, ожидаемый при вводе |
Тип аргумента |
d |
Десятичное целое |
Указатель на int |
D |
Десятичное целое |
Указатель на long int |
o |
Восьмеричное целое |
Указатель на int |
O |
Восьмеричное целое |
Указатель на long int |
x, X |
Шестнадцатеричное целое |
Указатель на int |
i |
Десятичное, восьмеричное или шестнадцатеричное целое |
Указатель на int |
I |
Десятичное, восьмеричное или шестнадцатеричное целое |
Указатель на long int |
u |
Десятичное целое без знака |
Указатель на unsigned int |
U |
Десятичное целое без знака |
Указатель на unsigned long int |
e, E, f, g, G |
Величина с плавающей точкой, состоящая из мантиссы и порядка |
Указатель на float |
c |
Символ. Символы пробелов (и подобные), которые обычно пропускаются, но считываются, если есть символ с |
Указатель на char |
s |
Символьная строка |
Указатель на символьный массив, достаточно большой, чтобы разместить вводимое поле и завершающий null-символ, добавляемый автоматически |
% |
Символ % |
Не преобразуется, участвует во вводе, как символ % |
n |
Из потока ничего не считывается |
Указатель на переменную типа int, в которую записывается количество символов, считанных из потока, вплоть до этой точки при текущем вызове функции |
p |
Величина в виде XXXX:YYYY, где X и Y являются шестнадцатеричными цифрами верхнего регистра |
Указатель на объект (far* или near*) %p выполняет преобразование требуемого указателя, используя модели памяти |
Из рассмотренного выше программного примера следует, что в общем случае структура формата имеет вид:
%[*][ширина][префикс]тип
[*] после % подавляет запоминание следующего вводимого поля. Поле считывается в соответствии с форматом, но преобразованная величина никуда не записывается.
[ширина] – это положительное десятичное целое, задающее максимальное число символов при вводе. Если [ширина] избыточная, то чтение происходит до пробельного символа. Если [ширина] меньше, чем число символов до пробельного, то читаются и преобразуются только символы, числом не более [ширина].
При этом, [префиксами] могут быть:
N – используется для печати адресов. near (формат %Np)
F – используется для печати адресов. far (формат %Fp)
H – используется для ввода коротких целых с типом short.
L – используется для ввода длинных целых и вещественных с типом long.
Отметим, что scanf и fscanf идентичны, но вместо потока, заданного первым аргументом, она по умолчанию использует предопределенный входной поток stdin, поэтому в вызове функции scanf список аргументов начинается сразу с управляющей строки.