
- •Ответы к экзамену по курсу «Программирование на языке высокого уровня»
- •Восьмеричная и шестнадцатеричная системы
- •Представление чисел в различных системах счисления
- •Представление числа в дополнительном коде
- •Объявление строк. Конструкторы класса string
- •Операции над строками
- •Потоки: байтовые, символьные, двоичные
- •Общая характеристика классов потоков
Восьмеричная и шестнадцатеричная системы
В восьмеричной системе используются восемь цифр от нуля до семи: 0, 1, 2, 3, 4, 5, 6, 7.
Шестнадцатеричная система счисления имеет набор цифр {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}, p = 16. Для изображения чисел в шестнадцатеричной системе счисления требуются 16 цифр. Для обозначения первых десяти цифр используются цифры десятичной системы счисления, шесть остальных — первых шесть прописных букв латинского алфавита.
A |
десять, |
D |
тринадцать, |
B |
одиннадцать, |
E |
четырнадцать, |
C |
двенадцать, |
F |
пятнадцать. |
Представим числа в восьмеричной и шестнадцатеричной системах счисления в виде суммы (аналогично тому, как мы это делали в предыдущем разделе):
Представление чисел в различных системах счисления
Хранение чисел в памяти компьютера
В качестве наименьшей единицы измерения информации принят 1 бит. 1 бит соответствует одному разряду в двоичной системе счисления. Эта система лежит в основе архитектуры компьютеров.
Числа кодируются особым образом. Например, целое число, в зависимости от типа, может кодироваться одним, двумя или четырьмя байтами. Для получения кода положительного целого числа достаточно перевести его из десятичной в двоичную систему счисления, например, десятичное число 12 кодируется как двоичное 00001100 (при однобайтовом типе числа). Отрицательные целые числа часто кодируются в так называемом дополнительном коде, когда старший двоичный разряд используется как признак отрицательности числа, а остальные разряды должны быть такими, чтобы сумма отрицательного числа и его модуля равнялась нулю. Так, десятичное число –1 будет представлено как двоичное 1111111111111111 (при двухбайтовом типе числа). Минимально допустимое двухбайтовое число — 32768 кодируется как 1000000000000000, а максимальное 32767 — как 0111111111111111.
Прямой, обратный и дополнительный коды
Дополнительный код (англ. two’s complement, иногда twos-complement) — наиболее распространенный способ представления отрицательных целых чисел в компьютерах. Он позволяет заменить операцию вычитания на операцию сложения, чем упрощает архитектуру ЭВМ. Дополнительный код отрицательного числа получается инвертированием двоичного числа и прибавлением к нему единицы.
Представление числа в дополнительном коде
При записи числа в дополнительном коде старший разряд является знаковым. Если его значение равно 0, то в остальных разрядах записано положительное двоичное число, совпадающее с прямым кодом. Если же знаковый разряд равен 1, то в остальных разрядах записано отрицательное двоичное число, преобразованное в дополнительный код. Для получения значения отрицательного числа все разряды, кроме знакового, инвертируются, а к результату добавляется единица. Обратное преобразование, то есть перевод из дополнительного в прямой код, осуществляется аналогично.
Прямой код — способ представления двоичных чисел с фиксированной запятой в компьютерной арифметике. Главным образом используется для записи положительных чисел.
В информатике прямой код используется главным образом для записи неотрицательных целых чисел. Его легко получить из представления целого числа в любой другой системе счисления. Для этого достаточно перевести число в двоичную систему счисления, а затем заполнить нулями свободные слева разряды разрядной сетки машины.
Однако, у прямого кода есть два недостатка:
В прямом коде есть два варианта записи числа 0 (например, 00000000 и 10000000 в восьмиразрядном представлении).
Использование прямого кода для представления отрицательных чисел в памяти компьютера предполагает или выполнение арифметических операций центральным процессором в прямом коде, или перевод чисел в другое представление (например, в дополнительный код) перед выполнением операций и перевод результатов обратно в прямой код (что неэффективно).
Обратный код — метод вычислительной математики, позволяющий вычесть одно число из другого, используя только операцию сложения над натуральными числами. Ранее метод использовался в механических калькуляторах.
Обратный n-разрядный двоичный код положительного целого числа состоит из одноразрядного кода знака (двоичной цифры 0), за которым следует n − 1-разрядное двоичное представление модуля числа (обратный код совпадает с прямым кодом).
Пример. Двоичное представление числа 5 есть 101. Обратный 10-разрядный двоичный код числа +5 есть 0000000101
Основные принципы ООП. Инкапсуляция, полиморфизм и наследование.
Объектно-ориентированное программирование основано на «трех китах» - трех важнейших принципах, придающих объектам новые свойства. Этими принципами являются инкапсуляция, наследование и полиморфизм.
Инкапсуляция
Инкапсуляция есть объединение в единое целое данных и алгоритмов обработки этих данных. В рамках ООП данные называются полями объекта, а алгоритмы - объектными методами.
Инкапсуляция позволяет в максимальной степени изолировать объект от внешнего окружения. Она существенно повышает надежность разрабатываемых программ, т.к. локализованные в объекте алгоритмы обмениваются с программой сравнительно небольшими объемами данных, причем количество и тип этих данных обычно тщательно контролируются. В результате замена или модификация алгоритмов и данных, инкапсулированных в объект, как правило, не влечет за собой плохо прослеживаемых последствий для программы в целом (в целях повышения защищенности программ в ООП почти не используются глобальные переменные).
Другим немаловажным следствием инкапсуляции является легкость обмена объектами, переноса их из одной программы в другую. Можно сказать, что ООП «провоцирует» разработку библиотек объектов, таких как Turbo Vision.
Наследование
Наследование есть свойство объектов порождать своих потомков. Объект-потомок автоматически наследует от родителя все поля и методы, может дополнять объекты новыми полями и заменять (перекрывать) методы родителя или дополнять их.
Принцип наследования решает проблему модификации свойств объекта и придает ООП в целом исключительную гибкость. При работе с объектами программист обычно подбирает объект, наиболее близкий по своим свойствам для решения конкретной задачи, и создает одного или нескольких потомков от него, которые «умеют» делать то, что не реализовано в родителе.
Последовательное проведение в жизнь принципа «наследуй и изменяй» хорошо согласуется с поэтапным подходом к разработке крупных программных проектов и во многом стимулирует такой подход.
Полиморфизм
Полиморфизм - это свойство родственных объектов (т.е. объектов, имеющих одного общего родителя) решать схожие по смыслу проблемы разными способами. В рамках ООП поведенческие свойства объекта определяются набором входящих в него методов. Изменяя алгоритм того или иного метода в потомках объекта, программист может придавать этим потомкам отсутствующие у родителя специфические свойства. Для изменения метода необходимо перекрыть его в потомке, т.е. объявить в потомке одноименный метод и реализовать в нем нужные действия. В результате в объекте-родителе и объекте-потомке будут действовать два одноименных метода, имеющие разную алгоритмическую основу и, следовательно, придающие объектам разные свойства. Это и называется полиморфизмом объектов.
Понятие класса, объекта. Члены класса – поля и методы. Создание объекта. Область видимости объекта.
Наследование в C#. Управление доступом к членам класса.
В описании класса можно указать родительский класс, от которого он наследует. В этом случае все члены родительского класса (кроме private) автоматически добавляются к классу-наследнику и их не надо описывать заново. Имеется возможность переопределить некоторые свойства и методы родителя, сохранив их заголовки. Для этого надо в родительском классе описать их virtual, а в наследнике -- описать заново с модификатором override.
Целые типы данных в C#. Операции над целыми переменными. Ограничения по значению.
Числа с плавающей точкой в C#. Операции с переменными этого типа. Ограничения по точности.
Булевские переменные в C#. Возможные значения. Операции над булевскими переменными. Использование логических выражений.
Операции над булевскими переменными:
>, <, >=, <=, ||, &&, =,!=, xor (исключ. или).
Строковые и символьные переменные в C#. Возможные значения и операции со строковыми и символьными переменными.
Основным типом при работе со строками является тип string, задающий строки переменной длины. Класс String в языке C# относится к ссылочным типам. Над строками - объектами этого класса - определен широкий набор операций, соответствующий современному представлению о том, как должен быть устроен строковый тип.