История развития законов | страница 10



Наибольший общий делитель (НОД) — это число, которое делит без остатка два числа и делится само без остатка на любой другой делитель данных двух чисел. Проще говоря, это самое большое число, на которое можно без остатка разделить два числа, для которых ищется НОД.

Описание алгоритма нахождения НОД делением.

— Большое число делим на меньшее.

— Если делится без остатка, то меньшее число и есть НОД (следует выйти из цикла).

— Если есть остаток, то большее число заменяем на остаток от деления.

— Переходим к пункту 1.


Например, необходимо найти НОД для 30 и 18.

30/18 = 1 (остаток 12)

18/12 = 1 (остаток 6)

12/6 = 2 (остаток 0). Конец: НОД — это делитель. НОД (30, 18) = 6


Пример 2.15. Компилятор

Большинство компиляторов переводит программу с некоторого высокоуровневого языка программирования в машинный код, который может быть непосредственно выполнен процессором.

Компилятор состоит из следующих этапов.

1. Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем. Цель лексического анализа — подготовить входную последовательность к грамматическому анализу.

2. Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.

3. Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) — например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то еще, удобным для дальнейшей обработки.

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

5. Генерация кода. Из промежуточного представления порождается код на целевом языке. В конкретных реализациях компиляторов эти этапы могут быть разделены или, наоборот, совмещены в том или ином виде.

Каждый из этих этапов имеет свою программу, работающую по определенному алгоритму — процессу.


Продолжим рассматривать понятие функции

Функции можно классифицировать:

— по полезности;

— степени их выполнения.

Опишем классификацию функций:

1. по полезности:

— полезные;

— бесполезные;

— вредные.

2. по степени выполнения полезных функций:

— достаточные;

— избыточные;