Вычисление машинного порядка
Вопросы к экзамену по дисциплине «Основы алгоритмизации и программирования» Триместр 1. Алгоритм. Неформальное определение. Свойства алгоритма.
АЛГОРИТМ – точное предписание, которое задает вычислительный процесс, начинающийся с произвольного исходного данного (из некоторой совокупности возможных для данного алгоритма исходных данных) и направленный на получение полностью определяемого этим исходным данным результата.
АЛГОРИТМ – это процесс последовательного построения величин, идущий в дискретном времени таким образом, что в начальный момент времени задается исходная система величин, а в каждый следующий момент система величин получается по определенному закону из системы величин, имевшейся в предыдущий момент времени.
2. Системы счисления. Внутреннее машинное представление целых чисел. Примеры из С++, связанные с внутренним машинным представлением целых чисел.
Система счисления — символический метод записи чисел, представление чисел с помощью письменных знаков.
Позиционные системы счисления — это системы счисления, в которых значение цифры напрямую зависит от её положения в числе. Количество цифр, используемых в системе счисления, называется её «основанием».
В непозиционных системах счисления величина числа не зависит от положения цифр в записи. Если к каждой цифре приписать знак номинала, то такие составные знаки (цифра + номинал) уже можно перемешивать, то есть такая запись является непозиционной.
Целые числа в компьютере хранятся в памяти в формате с фиксированной запятой или фиксированной точкой. В этом случае каждому разряду ячейки памяти соответствует всегда один и тот же разряд числа, а запятая находится справа после младшего разряда, т.е. вне разрядной сетки. Множество целых чисел, представимых в памяти ЭВМ ограничено и зависит от размера ячеек памяти (машинного слова), используемых для их хранения. В k-разрядной ячейке может храниться 2k (655636) различных значений целых чисел.
Чтобы записать внутреннее машинное представление целого числа со знаком, необходимо найти его дополнительный код.
Представление целых положительных чисел Дополнительный код целого положительного числа совпадает с его прямым кодом. Для его получения необходимо: 1. Перевести число N в двоичную систему счисления. 2. Полученный результат дополнить слева незначащими нулями до k разрядов. 3. При необходимости перевести число в сжатую шестнадцатеричную форму.
Представление целых отрицательных чисел Для представления отрицательных чисел используется дополнительный код. Дополнительный код позволяет заменить арифметическую операцию вычитания операцией сложения, что существенно упрощает работу процессора и увеличивает его быстродействие. Алгоритм получения внутреннего представления целого отрицательного числа N, хранящегося в k-разрядном машинном слове: 1. Получить внутреннее представление положительного числа N. 2. Получить обратный код этого числа заменой 0 на 1 и 1 на 0, т.е значения всех бит инвертировать. 3. К полученному числу прибавить 1 (получить дополнительный код). 4. При необходимости записать сжатое внутренне машинное представление.
3. Внутреннее машинное представление вещественных чисел.
Вещественные числа в памяти компьютера представляются в формате с плавающей десятичной запятой (экспоненциальной форме).
Так как вариантов представления одного и того же числа в экспоненциальной форме бесконечное множество, то для внутреннего машинного представления условились представлять числа в нормализованной или денормализованной форме. В денормализованной форме мантисса должна отвечать следующему условию: она должна быть правильной дробью и иметь после запятой цифру, отличную от нуля, то есть 1/n ≤ |m| < 1
Нормализованная мантисса содержит свой старший бит слева от точки. В общем случае мантисса должна удовлетворять условию 1<=|m|<10. Так как числа представлены в двоичном виде, то этот бит всегда равен 1. Иными словами нормализованная мантисса принадлежит интервалу 1 <= |m| < 2. В памяти машины этот бит не хранится, т.е. является "скрытым”. Для положительных и отрицательных чисел мантисса в памяти представлена в прямом коде.
Вычисление машинного порядка Для хранения вещественных чисел в памяти компьютера выделяются следующие разряды: - знак числа (старший бит), - машинный порядок числа - мантисса. Чтобы не хранить знак порядка используется так называемый машинный порядок. Машинный порядок смещен относительно математического порядка и имеет только положительные значения. Смещение выбирается так, чтобы минимальному математическому значению порядка соответствовал ноль. Связь между машинным порядком (Мр) и математическим (р) в рассматриваемом случае выражается формулой: Мр = (2n-1-1) + p, где n – это количество бит, отводимых на порядок.
4. Понятие языка программирования. Виды языков программирования. Понятие транслятора. Виды трансляторов. Этапы создания исполняемой программы на языке С++.
ПРОГРАММА – это алгоритм, записанный на определенном языке программирования.
ЯЗЫК ПРОГРАММИРОВАНИЯ – это формальная знаковая система, предназначенная для записи компьютерных программ.
Аппаратная платформа. Машинные коды Языки низкого уровня (Ассемблер) Языки высокого уровня
ТРАНСЛЯТОР – это программа, которая переводит программу с языка высокого уровня на язык машинных команд. По способу трансляции различают: - компиляторы; - интерпретаторы.
5. Лексика, синтаксис, семантика и прагматика языка программирования. Состав языка программирования на примере С++.
Описание ЛЕКСИКИ – задание алфавита языка. Описание СИНТАКСИСА – задание правил построения конструкций ЯП. Описание СЕМАНТИКИ – придание смысла конструкциям языка. Описание ПРАГМАТИКИ – отвечает на вопрос: «Как писать программы на этом языке?»
Состав языка программирования:
6. Способы описания языка программирования: БНФ и диаграммы Вирта. Основные алгоритмические конструкции С++ в нотации БНФ и диаграмм Вирта.
Для описания языка программирования используются метаязыки, т.е. посредством которых можно описать другой язык. Способы:
Цепочки языка могут содержать метасимволы, имеющие особое назначение. Метаязык, предложенный Бэкусом и Науром (БНФ) использует следующие обозначения:
терминалы - это символы, используемые в описываемом языке
Для повышения удобства и компактности описаний, в расширенных БНФ вводятся следующие дополнительные конструкции (метасимволы):
Пример:
В метаязыке диаграмм Вирта используются графические примитивы: При построении диаграмм учитывают следующие правила:
7. Алфавит языка. Лексемы языка С++. Понятие идентификатора. Ключевые слова С++. Константы. Их виды в С++. Примеры.
Алфавит языка:
“ { } , | [ ] ( ) + - / % * . \ ‘ : ? < = > ! & # ~ ; ^
Лексемы языка С++:
Идентификатор: ИДЕНТИФИКАТОР – это имя программного объекта. Свойства идентификаторов:
Ключевые слова: Ключевые слова — это предварительно определенные зарезервированные идентификаторы, имеющие специальные значения для компилятора. Их нельзя использовать в программе в качестве идентификаторов, если только они не содержат префикс @. Например, @if является допустимым идентификатором, но if таковым не является, поскольку if — это ключевое слово.
КОНСТАНТА – способ адресации данных, изменение которых рассматриваемой программой не предполагается или запрещается. ВИДЫ КОНСТАНТ В С++:
Неименованные константы не имеют имен, и потому их не нужно описывать. Тип неименованной константы определяется автоматически, по умолчанию: § любая последовательность цифр (возможно, предваряемая знаком "-" или "+" или разбиваемая одной точкой) воспринимается компилятором как неименованная константа - число (целое или вещественное); § любая последовательность символов, заключенная в апострофы, воспринимается как неименованная константа - строка; § любая последовательность целых чисел, либо символов через запятую, обрамленная квадратными скобками, воспринимается как неименованная константа - множество. Кроме того, существуют две специальные константы true и false, относящиеся к логическому типу данных. Примерами использования неименованных констант могут послужить следующие операторы: a = -10; b = 12.075 + х; c = 'z'; d = "abc" + string44;
Именованные константы, как следует из их названия, должны иметь имя. Стало быть, эти имена необходимо сообщить компилятору, то есть описать в специальном разделе const. Если не указывать тип константы, то по ее внешнему виду компилятор сам определит, к какому (базовому) типу ее отнести. Любую уже описанную константу можно использовать при объявлении других констант, переменных и типов данных. Вот несколько примеров описания нетипизированных именованных констант: const int speedLimit = 55; const double pi = 3.14;
8. Переменные. Описание переменных. Инициализация переменных. Основные типы данных С++.
ПЕРЕМЕННАЯ — это «ячейка» оперативной памяти компьютера, в которой может храниться какая-либо информация. ОПИСАНИЕ ПЕРЕМЕННЫХ: [класс памяти] [const] тип имя ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ: [класс памяти] [const] [тип] имя инициализатор short x,t; int y=0; int y(0); bool flag=true; const float pi=3.1415926; double z(2.17),r(.5),p(1E7); char ch, a='0',s(67);
9. Ввод-вывод данных. Функции scanf, printf. Спецификации преобразования. Стандартная библиотека C/C++ включает ряд функций для чтения и записи на консоли (клавиатура и монитор). Эти функции читают и пишут данные как простой поток символов. Функция printf()является функцией стандартного вывода. С помощью этой функции можно вывести на экран монитора строку символов, число, значение переменной... · Функция printf() имеет прототип в файле stdio.h: · В случае успеха функция printf() возвращает число выведенных символов. Управляющая строка содержит два типа информации: символы, которые непосредственно выводятся на экран, и спецификаторы формата, определяющие, как выводить аргументы. Функция printf() это функция форматированного вывода. Это означает, что в параметрах функции необходимо указать формат данных, которые будут выводиться. Формат данных указывается спецификаторами формата. Спецификатор формата начинается с символа % за которым следует код формата. Кроме того, к командам формата могут быть применены модификаторы l и h. В спецификаторе формата, после символа % может быть указана точность (число цифр после запятой). Точность задаётся следующим образом: %.n<код формата>. Где n - число цифр после запятой, а <код формата> - один из кодов приведённых выше. Функция scanf () - функция форматированного ввода. С её помощью можно вводить данные со стандартного устройства ввода (клавиатуры). Вводимыми данными могут быть целые числа, числа с плавающей запятой, символы, строки и указатели. · Функция scanf () имеет следующий прототип в файле stdio . h: int scanf(char *управляющая строка); · Функция возвращает число переменных, которым было присвоено значение. Управляющая строка содержит три вида символов: спецификаторы формата, пробелы и другие символы. Спецификаторы формата начинаются с символа %. · Для ввода данных с помощью функции scanf () ей в качестве параметров нужно передавать адреса переменных, а не сами переменные. Чтобы получить адрес переменной, нужно поставить перед именем переменной знак &(амперсанд). Знак & означает взятие адреса.
10. Ввод-вывод данных. Стандартные потоки ввода и вывода. Манипуляторы.
Частью стандартной библиотеки C++ является библиотека iostream. В ней реализована поддержка для файлового ввода/вывода данных встроенных типов. Для использования библиотеки iostream в программе необходимо включить заголовочный файл: #include <iostream> Операции ввода/вывода выполняются с помощью классов istream (потоковый ввод) и ostream (потоковый вывод). Третий класс, iostream, является производным от них и поддерживает двунаправленный ввод/вывод. Для удобства в библиотеке определены три стандартных объекта-потока:
Вывод осуществляется, как правило, с помощью перегруженного оператора сдвига влево (<<), а ввод – с помощью оператора сдвига вправо (>>). Помимо чтения с терминала и записи на него, библиотека iostream поддерживает чтение и запись в файлы. Для этого предназначены следующие классы:
Чтобы использовать часть библиотеки iostream, связанную с файловым вводом/выводом, необходимо включить в программу заголовочный файл: #include <fstream> Один из способов форматирования текста — форматирование с помощью манипуляторов МАНИПУЛЯТОР — объект особого типа, который управляет потоками ввода/вывода, для форматирования передаваемой в потоки информации. Примеры манипуляторов: endl (переход на новую строку при выводе), fixed (вывод чисел с плавающей точкой в фиксированной форме), setprecision (задаёт количество знаков после запятой).
11. Операции С++. Группы операций. Приоритет выполнения операций. Правила выполнения операций одинакового приоритета.
ПРИОРИТЕТ ВЫПОЛНЕНИЯ ОПЕРАЦИЙ: n Унарные операции (++, --, ~, !, -, +, &, * – разадресация, new, delete…) n Бинарные и тернарная операции n Арифметические операции (*, /, %, +, -) n Операции сравнения (>, <, >=…) n Побитовые операции (&, ^, |) n Логические операции (&&, ||) n Условная операция (?) n Операции присваивания (=, +=, /=…) n Последовательное вычисление (int a = 3, b = a + 4, c = a + b) В большинстве своём приоритет выполнения операций происходит слева направо. Однако, сперва компилятор обращает внимание на скобки, затем – на * и /, && и ||…, а лишь потом на +, - и др. Справа налево выполняются унарные и тернарная операции, а также операции присваивания.
12. Унарные операции. Примеры. Операции присваивания. Операция последовательного вычисления. Порядок выполнения.
Унарные операции — это операции, содержащие единственный операнд Знаки операций обеспечивают формирование выражений. Выражения состоят из операндов, знаков операций и скобок. Каждый операнд является, в свою очередь, выражением или частным случаем выражения – константой или переменной.
13. Арифметические операции. Операции сравнения. Примеры. Порядок выполнения.
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1029)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |