Osnovy_informatiki_-_1_Algoritmy.ppt
- Количество слайдов: 28
Алгоритмы
Наибольший общий делитель l Задача Дано: два целых положительных числа A и B l Найти: целое положительное число D – наибольший общий делитель чисел A и B l
Метод решения Метод разложения каждого числа на степени простых множителей. l Метод, который имеет название «Алгоритм Евклида» . l Метод, основанный на вычитании чисел, т. е. реализация алгоритма Евклида с использованием операции вычитания. l
Алгоритм 1 l l l A=2 k 1∙ 3 k 2∙ 5 k 3∙…∙pnkn B=2 j 1∙ 3 j 2∙ 5 j 3∙…∙pmjm Найти q=min(n, m) Если n>q, то все показатели ki c индексами i> q, положить равными 0. Если m>q, то все показатели jr c индексами r> q, положить равными 0.
Алгоритм 1 (продолжение) l t 1=min(k 1, j 1), …, tq=min(kq, jq) l D=2 t 1∙ 3 t 2∙ 5 t 3∙…∙pqtq
Алгоритм 2 (Евклида) l Пока B≠ 0 делать l l Найти остаток R от деления A на B Заменить A на B и B на R Положить D=A Основан на формуле l
Алгоритм 3 l Пока A≠B делать l Если A>B то положить A=A-B иначе B=B-A l Положить D=A Основан на формуле
Какой алгоритм выбрать Алгоритм 1 – исполнитель должен знать последовательность простых чисел и уметь определять степень в разложении на множители l Алгоритм 2 – исполнитель должен уметь вычислять остаток от деления (операция целочисленного деления). В компьютере она может быть реализована программно – цикл из нескольких операций вычитания l
Какой алгоритм выбрать l Алгоритм 3 – использует самые простые операции – сравнение и вычитание
Что важно при решении задач l Алгоритм (метод решения) l Способ представления алгоритма (язык) l Исполнитель (компьютер)
Архитектура компьютера l Фон Нейман (1946)
Оперативная память Память – последовательность ячеек, каждая ячейка имеет адрес. Доступ по адресу к ячейке называется прямым доступом. l Адреса ячеек, с которыми работает программа тоже записываются в память. l Между разрядностью ячейки и размером памяти существует зависимость. N – разрядность ячейки, 2 N – максимальное количество адресуемых ячеек l
Новые архитектурные решения l l Процессор имеет небольшую память для временного хранения обрабатываемых данных – регистры. Для более гибкого доступа к данным, хранящимся в памяти, вводится принцип косвенной адресации с использованием специальных регистров. Микропрограммирование – реализация сложных команд (например, операций с плавающей точкой) на программно-аппаратном уровне. Кэш-память процессора – промежуточная память между регистрами и оперативной памятью.
Новые архитектурные решения l l l Поточная (конвейерная) обработка команд. Процессор может одновременно принимать и параллельно обрабатывать несколько команд. Асинхронный ввод-вывод. Параллельно обычному выполнению команд процессором независимые процессоры управляют операциями ввода-вывода. Определение адресного пространства программы осуществляется без “привязки” к физическим адресам памяти.
Новые архитектурные решения Виртуальная память – расширение реального адресного пространства за счет использования внешней памяти. l Мультипроцессорная обработка – несколько процессоров обрабатывают потоки команд из общей памяти. l Объединение компьютеров в сети. l
Выполнение программы Загрузить программу в ОП и занести адрес первой команды в счетчик команд 2. Выбрать команду по адресу счетчика команд и загрузить ее в регистр команд 3. Увеличить счетчик команд на длину выбранной команды 1.
Выполнение программы Выполнить команду (операнды должны быть предварительно загружены в регистры специальными командами) 5. Результат команды остается в регистре (если необходимо, он переносится в ОП специальными командами) 6. Если не встречена команда завершения, то перейти к п. 2 4.
c: =a+b; // команда для Pascal-машины Последовательность команд для компьютеров с архитектурой x 86 mov eax, a mov ebx, b add eax, ebx mov c, eax
Программа в виде машинного кода
Языки программирования l Алфавит l Синтаксис l Семантика
Синтаксис l Лексемы (терминальные символы) l Нетерминальные символы (конструкции языка)
Формулы Бэкуса-Наура (БНФ) <условный оператор> : : = if <логическое выражение> then <оператор> | if <логическое выражение> then <оператор1> else <оператор2> <цифра> : : = 0 | 1 | 2 |. . . | 9 <имя> : : = <буква> | <имя>< цифра>
Расширенная БНФ <условный оператор> : : = if <логическое выражение> then <оператор1> [ else <оператор2> ] <вызов процедуры> : : = <имя> [( <параметр> {, <параметр>} )]
Синтаксические диаграммы
Классификация ЯП l Ассемблеры l Языки высокого уровня
Универсальные языки Fortran (1954) Cobol (1960) Algol (1960) Basic (1963) PL/1 (1964) Pascal (1970) C (1972) Modula-2 (1978) Ada (1983) C++ (1988) Java (1995) C# (2000) Oberon (1988) Zonnon (2002) Функциональные и логические языки Чистые объектно ориентированные языки Параллельны е языки Языки сценариев LISP (1958) функциональны й Simula (1967) Occam (1982) Perl (1987) Small. Talk (1972) Ada 95 (1995) Prolog (1971) логический Eiffel (1986) Java. Script (1996) Python (1996)
Osnovy_informatiki_-_1_Algoritmy.ppt