Алгоритмы, Трансляция 1 из 7 Формы представления алгоритмов: - словесное описание ( вербальная форма); - построчная запись; - блок-схема; - запись на каком-л. языке программирования. Рассмотрим особенности каждой формы на примере алгоритма Евклида (НОД). Словесное описание имеет минимум ограничений и является наименее формализованным. Однако, при этом алгоритм получается и наименее строгим, допускающим неопределенности. Алгоритм в вербальной форме может оказаться очень объемным и трудным для восприятия человеком: Если числа равны, НОД равен одному из них. В противном случае надо из большего вычесть меньшее, полученной разностью заменить значение большего числа. Повторить все сначала. Построчная запись алгоритма. Это запись на естественном языке, но с соблюдением некоторых дополнительных правил. 1. Шаги (предписания) алгоритма нумеруются. 2. Исполнение алгоритма происходит в порядке возрастания номеров шагов, начиная с первого (если не встречается никаких специальных указаний). 3. Типичными шагами алгоритма являются: - чтение (ввод) данных; - обработка данных (вычисления) по формулам; - сообщение (вывод) результата; Алгоритм Евклида можно представить с помощью построчной записи так: [1] чтение a, b [2] если а=b, идти на [5] [3] если а>b, а=а-b иначе b=b-a [4] идти на [2] [5] НОД = а [6] печать НОД [7] останов Построчная запись позволяет избежать неопределенностей, не требует специальных знаний, но не наглядна. Алгоритмы, Трансляция 2 из 7 Блок-схемы ... Начало алгоритма Евклида Линейная структура Ввод данных a,b да дада нет a=b ? Условие 1 вход 2 выхода нет да нет a>b ? Процедура a=a-b b=b-a Вывод данных НОД=а Начало / Конец Цикл 2 входа 2 выхода Конец алгоритма Евклида Алгоритмы, Трансляция 3 из 7 Запись алгоритма на языке программирования представляет собой форму изображения алгоритма в том случае, когда исполнителем алгоритма является компьютер. Языки программирования имеют более жесткие правила. Основные свойства алгоритма 1. Массовость. Алгоритм имеет некоторое число входных величин — аргументов, задаваемых до начала исполнения. Цель выполнения алгоритма — получение результата (результатов), имеющего вполне определенное отношение к исходным данным. Алгоритм указывает последовательность действий по переработке исходных данных в результаты. Для алгоритма можно выбирать различные наборы входных данных из множества допустимых для этого процесса данных, т.е. можно применять алгоритм для решения целого класса задач одного типа, различающихся исходными данными. Это свойство алгоритма обычно называют массовостью. Однако существуют алгоритмы, применимые только к единственному набору данных. Можно сказать, что для каждого алгоритма существует свой класс объектов, допустимых в качестве исходных данных. Тогда свойство массовости означает применимость алгоритма ко всем объектам этого класса. 2. Понятность. Чтобы алгоритм можно было выполнить, он должен быть понятен исполнителю. Понятность алгоритма означает знание исполнителя о том, что надо делать для исполнения этого алгоритма. 3. Дискретность. Алгоритм представляется в виде конечной последовательности шагов (алгоритм имеет дискретную структуру) и его исполнение расчленяется на выполнение отдельных шагов (выполнение очередного шага начинается после завершения предыдущего). 4. Конечность. Выполнение алгоритма заканчивается после выполнения конечного числа шагов. При выполнении алгоритма некоторые его шаги могут повторяться многократно. В математике существуют вычислительные процедуры, имеющие алгоритмический характер, но необладающие свойством конечности. Алгоритмы, Трансляция 4 из 7 5. Определенность. Каждый шаг алгоритма должен быть четко и недвусмысленно определен и не должен допускать произвольной трактовки исполнителем. Следовательно, алгоритм рассчитан начисто механическое исполнение. Именно определенность алгоритма дает возможность поручить его исполнение автомат Основные типы алгоритмических структур. Их всего три: линейная, разветвляющаяся и циклическая. 1. Линейная структура предполагает однократное выполнение одной и той же последовательности шагов при любых наборах исходных данных. 2. Для разветвляющейся структуры также характерно однократное выполнение последовательности шагов, однако состав этой последовательности определяется результатами проверки некоторых условий, т.е. зависит от обрабатываемой информации. 3. Циклическая структура обеспечивает многократное выполнение одной и той же последовательности шагов тела Языки программирования Языки программирования являются одним из средств общения пользователя с компьютером. Все они ( а их насчитывается более 1000 ) имеют сходство с естественным языком, а именно: так же, как и естественные языки базируются на некотором множестве допустимых символов (алфавите), из которых согласно синтаксическим правилам формируются слова ( лексические единицы ) и предложения языка ( операторы ). Алгоритмы, Трансляция 5 из 7 Языки программирования (таблица) Язык FORTRAN ФОРТРАН Algol (Алгол) Годы Авторы 1950 John Backus LISP (ЛИСП) 1960 John McCarthy Для задач искусств, интеллекта COBOL КОБОЛ APL (АЛЛ) 1961 Создан для экономических задач BASIC (Бейсик) 1964 Grace Murray Hopper Kenneth Iverson, Adin Falkoff John Kemeny, Thomas Kurtz PL1\ПЛ1 1964 Pascal (Паскаль) 1967 Niklaus Wirth SIMULA (СИМУЛА) LOGO (ЛОГО) 1967 1970 1-й объектно - оринетированный Оле-Иохан Дал, Кри-стен Нигаард язык (для моделирования) Seymour Papert Для обучения детей основам прогр-я FORT С (СИ) PROLOG (ПРОЛОГ) Ada (Ада) 1971 1972 1978 Charles H. Moore Dennis Ritchie Алан Калмероэ Отражает возм-ти современных ЭВМ Для задач искусств, интеллекта Bell Laboratories 1979 Jean Ichbiah Для // выполнения в многопроцессорных системах Cii-Honeywell Bull (Франция) C++ 1980 Bjame Stroustrup HTML 1989 Тим Бернерс-Ли DELPHI (ДЕЛЬФИ) Java (Джава) 1995 1960 1962 1995 Комментарии Одно из 1-х мест в мире по распространенности до сих пор. IBM International commitee IBM Dartmouth College Попытка создания универсального языка Джеймс Гослинг Фирма, организация IBM Federal Institute of Technology (ШвейНорвежский ВЦ Massachusetts Institute of Techn. Bell Laboratories Для создания гипертекста (эл-ной CERN, Женева таблицы) Для работы с б/д на основе Pascal, Borland идеология - повторное исп-е готовых программ Для сетевого пр-ния (сохраняет стиль Sun Microsystems С, C++) Алгоритмы, Трансляция 6 из 7 Любому языку (в том числе и языкам программирования) присущи синтаксис и семантика . Синтаксис — это набор правил, которые определяют основные внутренние структуры и последовательности символов, допустимых в языке программирования. Синтаксические правила языка программирования допускают лишь однозначный способ построения предложений (операторов). Семантика — это значения языковых единиц (слов, словосочетаний, предложений). Блокая куздра штеко болданула бокра и бокрячит бокренка. Составление программ для ЭВМ первого поколения велось исключительно на машинном языке, который представляет собой свод правил кодирования действий ЭВМ с помощью чисел. Для всех ЭВМ «понятна» только двоичная система счисления (СС), которая для сокращения записи часто заменяется восьмеричной или шестнадцатеричной СС. Более высоким уровнем, по сравнению с машинными языками, является машинно-ориентированные языки символического кодирования. Основной принцип при создании языков символического кодирования состоит в замене машинных кодов на их буквенные обозначения, а также в автоматизации процесса распределения памяти и диагностики ошибок. Такой машинно-ориентированный язык получил название языка Ассемблера. ЭВМ «понимает» только машинный язык, только команды, операнды адреса, записанные с помощью двоичных чисел. Поэтому для преобразования программы, написанной на языке Ассемблера, в машинные коды необходим «переводчик», т.е. транслятор — это специальная программа. Недостатком машинно-ориентированных языков является невозможность выполнения программы, составленной для процессора одного типа, на ЭВМ, которая построена на процессоре другого типа. Другими словами вид программы зависит от типа машины. На следующем уровне развития языков находятся процедурно-ориентированные языки. В отличие от машинноориентированных языков синтаксис и семантика этих языков не зависят от конкретной ЭВМ Процесс перевода программы в машинные коды и процесс ее исполнения может реализоваться двумя способами: интерпретация и компиляция (см. рис). Исторически сначала появились интерпретаторы. Алгоритмы, Трансляция 7 из 7 Транслятор Лексический анализатор Файл *.РAS Программа на языке высокого уровня лексемы Синтаксический анализатор Компилятор Генерирует машинный код, в котором содержится Файл .OBJ как код программы, Внутренний так и коды модулей. код компилятора Файл .EXE Машинный код компьютера Компиляция предназначена для обработки текстов программ, распадающихся на несколько самостоятельных частей. Она позволяет программисту строить свою программу из маленьких "кирпичиков" (операторов) и из больших блоков (подпрограмм), представляющих собой решения самостоятельных задач. Интерпретация исходной программы проще и быстрее, чем компиляция в машинные коды. Однако, выполнение интерпретатором внутреннего представления программ за счет многократного обращения к подпрограммам осуществляется гораздо медленнее, чем выполнение машинных кодов, сгенерированных компилятором. Кроме того, интерпретирующая программа вместе с исходной программой должна постоянно находиться в памяти компьютера, занимая достаточно большой ее объем. Поэтому такой способ Инструментальные системы - это особая категория программных средств. Они включают в себя как языки программирования, так и средства работы с ними – компилятор, транслятор, отладчик и т.д. С их помощью создаются все другие программы. С помощью инструментальных средств создается и прикладное ПО, и новые средства системного программирования, включая трансляторы с языков высокого уровня. Следовательно, эта категория ПС совершенно аналогична средствам производства в промышленности - таким как станки, инструменты, средства переработки сырья в нужную форму. При этом роль сырья играет информация текстовые и числовые данные, закодированные сообщения, графические изображения.