
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Клавиши перемещения курсора:
- •Работа с блоками текста
- •Основные клавиши работы с Турбо-Паскалем:
- •Строковый тип данных
- •Описание констант
- •Операция присваивания
- •Приоритет операций
- •Оператор присваивания
- •Совместимость и преобразование типов
- •Элементарный ввод-вывод
- •Лекция 5 Выражения
- •Математические операции
- •Логические операции
- •Операции отношения
- •Приоритет операций
- •Основные математические функции
- •Уменьшает значение числа X на y. Если число y не указано, то уменьшение происходит на 1. Циклы
- •Арифметические циклы
- •Итерационные циклы с предусловием
- •Итерационные циклы с постусловием
- •Операторы завершения цикла
- •Операторы ветвления и цикла Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Операторы ветвления и цикла
- •Условный оператор if
- •Оператор множественного выбора Case
- •Операторы цикла
- •Лекция 7. Подпрограммы: процедуры и функции
- •Пример 27
- •Обмен данными
- •4.2. Множества
- •4.2.1. Объявление типа множества
- •4.2.2. Операции над множествами
- •4.2.3. Пример использования множества
- •Пример 33
- •4.3. Строки
- •4.3.1. Объявление типа String
- •4.3.2. Операции над строковыми переменными
- •4.3.3. Встроенные процедуры и функции обработки строк
- •Пример 34
- •4.1. Матрица
- •4.1.1. Ввод-вывод элементов матрицы
- •4.1.2. Определение индексов элементов матрицы
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Определение и особенности файлов
- •Доступ к компонентам файла
- •Текстовый файл
- •Чтение из текстового файла
- •Запись в текстовый файл
- •Файлы в Тубо Паскаль
- •Файловые процедуры и функции
- •Текстовые файлы
- •Типизированные файлы
- •Нетипизированные файлы
- •Графика Турбо Паскаля
- •Записи Объявление типа записи
- •Вложенные записи
- •Массивы записей
- •Пример обработки массива записей
- •Статические и динамические памяти переменные
- •Объявление указателей
- •Выделение и освобождение динамической памяти
- •Операции с указателем
- •Пример 41
- •Связанные списки
- •Понятие бинарные деревья. Операции над бинарными деревьями
- •Применение бинарных деревьев
- •Сравнение рекурсии и итерации
- •Пример 51
- •Реализация объектно-ориентированного подхода в турбо-паскале
- •Алгоритмическая и объектная декомпозиция
- •Объектный тип в Турбо-Паскале
- •Способы наследования и переопределения
- •Виртуальные методы
- •Модуль c r t
- •Модуль g r a p h
Общее понятие алгоритма и алгоритмических языков.
Языки программирования и трансляторы
Компьютер может выполнять программу только в том случае, если содержащиеся в ней команды представлены в двоичном машинном коде, т.е. выражены на языке, алфавит которого состоит из логических единиц и нулей. Для первых компьютеров программы составлялись непосредственно в машинных кодах, что требовало высокой квалификации программистов и больших затрат труда, поэтому уже в 40-х годах началась разработка языков программирования, которые по своей лексике были бы максимально приближены к естественному языку человека. Такие языки программирования называются алгоритмическими.
Промежуточным шагом к разработке алгоритмических языков стал язык Ассемблер. В Ассемблере команды представляются не двоичными числами, а в виде сочетаний символов (мнемоническими кодами), по которым можно воспроизвести смысл команды, что значительно устраняет трудности и недостатки программирования на машинном языке. Однако Ассемблеру присущи и недостатки - это машинноориентированный язык, и для каждого компьютера создается свой язык Ассемблера. Программирование на Ассемблере требует от программиста хорошего знания архитектуры (устройства) компьютера и сопряжено со значительными трудозатратами, в то же время именно с помощью Ассемблера можно наилучшим образом использовать в программе ресурсы компьютера (память, быстродействие), поэтому Ассемблер по-прежнему широко распространен среди профессиональных программистов.
Первым алгоритмическим языком стал Fortran, созданный в 1957г. специалистами фирмы IBM под руководством Джона Бекуса. Сейчас существует большое множество алгоритмических языков: Pascal, C, Algol, PL1, Basic, Lisp, Prolog и многие другие.
Алгоритмические языки и ассемблеры относятся к языками символьного кодирования, т.е. к языкам, которые оперируют не машинными кодами, а условными символьными обозначениями, поэтому программы, составленные на этих языках, не могут быть непосредственно выполнены на компьютере. Чтобы такая программа заработала, ее текст нужно преобразовать в машинные коды. Для этого существуют специальные программы-переводчики (трансляторы). Различают 2 вида трансляторов- компилятор и интерпретатор. Компилятор транслирует программу сразу целиком, и лишь после этого возможно ее выполнение. Интерпретатор - это более простой транслятор, он последовательно транслирует операторы программы и так же по частям ее выполняет.
Первым шагом к написанию программы на том или ином алгоритмическом языке является создание алгоритма.
Обычно под алгоритмом понимают набор правил, определяющих процесс преобразования исходных данных задачи в искомый результат.
Алгоритм не только задает последовательность выполнения операций при решении конкретной задачи. Он должен обладать следующими свойствами:
- определенность - однозначная определенность результатов выполнения каждого шага алгоритма;
- конечность - однозначная определенность результатов выполнения каждого шага алгоритма за конечное время;
- результативность - получение конечного результата за конечное время;
- массовость - возможность использования алгоритма для некоторого класса исходных данных;
- правильность - получение правильных результатов решения поставленной задачи. Говорят, что алгоритм содержит ошибки, если можно указать такие исходные данные или условия, при которых выполнение алгоритма либо не завершается вообще, либо не будет получено никаких результатов, либо полученные результаты окажутся неправильными.
Разработка алгоритма решения задачи - наиболее ответственный этап в программировании. Игнорирование этого этапа является причиной многочисленных ошибок при проектировании программ. На этапе разработки алгоритма устанавливается необходимая логическая последовательность вычислений с учетом выбранного метода решения. При разработке алгоритма необходимо стремиться к максимальной простоте и наглядности. Это требование относится как к содержательной стороне, так и к форме записи алгоритма. Существует несколько способов записи алгоритмов, отличающихся друг от друга наглядностью, компактностью, степенью формализации и другими показателями. Наиболее распространенными являются:
- графический способ – блок-схемы алгоритмов;
- словесный способ ( специальный язык проектирования программ - псевдокод и программа).
Следуя принципам структурного программирования, задачу необходимо представить как набор последовательных шагов (действий), избегая непоследовательных переходов.
(показать и объяснить условные графические обозначения : начало, конец, операция ввода-вывода, вычисления или присвоения, условия, подпрограммы)
Любой алгоритм, какой бы он сложный не был, содержит лишь три основных, или, иначе говоря, базовых структуры. Этими базовыми структурами являютия:
1) – Следование или линейная;
2) Развилка или ветвление;
3) Цикл.
Рассмотрим каждую из них на примерах:
Структура Следование - одна из самых важных структур. Она означает, что два действия должны быть выполнены друг за другом. Например, блок схема алгоритма вычисления значения гипотенузы по теореме Пифагора выглядит так. Здесь можно видеть операции ввода исходных данных, вычисления и вывра
Структура Развилка обеспечивает выбор одной из двух альтернатив:
если < условие > то
< действие 1 >
иначе
< действие 2 >
все
Существует сокращенная форма структуры Развилка, которая позволяет выполнить действие или пропустить его:
если < условие > то
< действие >
все
Обобщением структуры Развилка является Множественный выбор:
если Var = Const1 то < действие 1 >
если Var = Const2 то < действие 2 >
. . .
если Var = Constn то < действие n >
все
В зависимости от значения переменной Var выполняется одно из указанных действий, например, если Var = Const3, то выполняется <действие3>.
Примером этой структуры может служить алгоритм вычисления корней квадратного уравнения:
Третьей базовой структурой является Цикл, который предусматривает повторное выполнение определенных действий, необходимое для большинства программ. Различают следующие типы структур Цикл :
- цикл "от до"
- цикл "пока"
- цикл "до"
Цикл "от до" управляет повторением выполнения действия с помощью переменной цикла:
цикл от I := N1 до N2
< действие >
кц {конец цикла}
Здесь I - переменная цикла, N1, N2 - начальное и конечное значения переменной цикла, вычисляются один раз при входе в цикл. Переменная цикла пробегает все следующие друг за другом в порядке возрастания значения от начального до конечного. Изменение значения переменной цикла происходит автоматически после каждого выполнения действия, указанного внутри цикла. В зависимости от соотношения N1 и N2 цикл может не выполниться ни разу (N1 > N2) или выполниться ( N2 - N1 + 1 ) раз.
В цикле "пока" управление внутри цикла осуществляется с помощью логического условия:
цикл пока < условие >
< действие >
кц {конец цикла}
Выполнение действия повторяется до тех пор, пока истинно условие. Проверка условия осуществляется в начале цикла. Это означает, что действие может не выполниться ни разу. Чтобы такой цикл не был бесконечным, внутри цикла необходимо предусмотреть изменение значения условия с истинного на ложное.
Третий тип структуры цикл "до" имеет вид:
цикл < действие > до < условие >
Как только значение условия становиться истинным, цикл прекращается. Цикл "до" независимо от значения условия будет выполняться по меньшей мере один раз, т.к. проверка условия производится после выполнения действия. Для завершения цикла необходимо внутри цикла изменить условие с ложного на истинное. Выбор структуры цикла определяется особенностями алгоритма решения конкретной задачи.
Пример: вычисление суммы Nпервых натуральных чисел.
Существенная особенность перечисленных базовых структур состоит в том, что каждая из них имеет один вход и один выход. Их можно соединять друг с другом в любой последовательности. В качестве действия может использоваться любая из перечисленных структур, что обеспечивает возможность вложенности одних структур в другие. Возврат назад выполняется только в циклах. С помощью определенных базовых структур можно писать ясные, надежные программы без операторов Goto, что является основой технологии структурного программирования. Еще один результат использования только базовых структур состоит в том, что управление в программе будет осуществляться сверху вниз, т.е. все инструкции выполняются в том порядке, в котором они появляются в тексте программы, все ветвления будут направлены только вперед. Это облегчает чтение и модификацию программы.
Общее понятие алгоритма и алгоритмических языков.
Языки программирования и трансляторы
Компьютер может выполнять программу только в том случае, если содержащиеся в ней команды представлены в двоичном машинном коде, т.е. выражены на языке, алфавит которого состоит из логических единиц и нулей. Для первых компьютеров программы составлялись непосредственно в машинных кодах, что требовало высокой квалификации программистов и больших затрат труда, поэтому уже в 40-х годах началась разработка языков программирования, которые по своей лексике были бы максимально приближены к естественному языку человека. Такие языки программирования называются алгоритмическими.
Промежуточным шагом к разработке алгоритмических языков стал язык Ассемблер. В Ассемблере команды представляются не двоичными числами, а в виде сочетаний символов (мнемоническими кодами), по которым можно воспроизвести смысл команды, что значительно устраняет трудности и недостатки программирования на машинном языке. Однако Ассемблеру присущи и недостатки - это машинноориентированный язык, и для каждого компьютера создается свой язык Ассемблера. Программирование на Ассемблере требует от программиста хорошего знания архитектуры (устройства) компьютера и сопряжено со значительными трудозатратами, в то же время именно с помощью Ассемблера можно наилучшим образом использовать в программе ресурсы компьютера (память, быстродействие), поэтому Ассемблер по-прежнему широко распространен среди профессиональных программистов.
Первым алгоритмическим языком стал Fortran, созданный в 1957г. специалистами фирмы IBM под руководством Джона Бекуса. Сейчас существует большое множество алгоритмических языков: Pascal, C, Algol, PL1, Basic, Lisp, Prolog и многие другие.
Алгоритмические языки и ассемблеры относятся к языками символьного кодирования, т.е. к языкам, которые оперируют не машинными кодами, а условными символьными обозначениями, поэтому программы, составленные на этих языках, не могут быть непосредственно выполнены на компьютере. Чтобы такая программа заработала, ее текст нужно преобразовать в машинные коды. Для этого существуют специальные программы-переводчики (трансляторы). Различают 2 вида трансляторов- компилятор и интерпретатор. Компилятор транслирует программу сразу целиком, и лишь после этого возможно ее выполнение. Интерпретатор - это более простой транслятор, он последовательно транслирует операторы программы и так же по частям ее выполняет.
Первым шагом к написанию программы на том или ином алгоритмическом языке является создание алгоритма.
Обычно под алгоритмом понимают набор правил, определяющих процесс преобразования исходных данных задачи в искомый результат.
Алгоритм не только задает последовательность выполнения операций при решении конкретной задачи. Он должен обладать следующими свойствами:
- определенность - однозначная определенность результатов выполнения каждого шага алгоритма;
- конечность - однозначная определенность результатов выполнения каждого шага алгоритма за конечное время;
- результативность - получение конечного результата за конечное время;
- массовость - возможность использования алгоритма для некоторого класса исходных данных;
- правильность - получение правильных результатов решения поставленной задачи. Говорят, что алгоритм содержит ошибки, если можно указать такие исходные данные или условия, при которых выполнение алгоритма либо не завершается вообще, либо не будет получено никаких результатов, либо полученные результаты окажутся неправильными.
Разработка алгоритма решения задачи - наиболее ответственный этап в программировании. Игнорирование этого этапа является причиной многочисленных ошибок при проектировании программ. На этапе разработки алгоритма устанавливается необходимая логическая последовательность вычислений с учетом выбранного метода решения. При разработке алгоритма необходимо стремиться к максимальной простоте и наглядности. Это требование относится как к содержательной стороне, так и к форме записи алгоритма. Существует несколько способов записи алгоритмов, отличающихся друг от друга наглядностью, компактностью, степенью формализации и другими показателями. Наиболее распространенными являются:
- графический способ – блок-схемы алгоритмов;
- словесный способ ( специальный язык проектирования программ - псевдокод и программа).
Следуя принципам структурного программирования, задачу необходимо представить как набор последовательных шагов (действий), избегая непоследовательных переходов.
(показать и объяснить условные графические обозначения : начало, конец, операция ввода-вывода, вычисления или присвоения, условия, подпрограммы)