Лекция_1.ppt
- Количество слайдов: 57
ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ ЛЕКЦИЯ 1 Зарецкий М. В. кафедра ВТи. ПМ
Информация, первоначально — сведения, передаваемые людьми устным, письменным или другим способом (с помощью условных сигналов, технических средств и т. д. ); с середины 20 века общенаучное понятие, включающее обмен сведениями между людьми, человеком и автоматом, автоматом и автоматом, обмен сигналами в животном и растительном мире; передачу признаков от клетки к клетке, от организма к организму.
Данные — факты и идеи, представленные в формализованном виде, позволяющие передавать эти факты и идеи при помощи некоторого процесса и соответствующих технических средств. При записи данных мы используем фиксированный набор символов — алфавит.
Данные и информация Одни и те же данные могут нести разную информацию: 200°С – много или мало? Одна и та же информация может быть представлена разными данными: • русский «мясо» ; • украинский «м’ясо» ; • английский «meat» ; • польский «mięso» • башкирский «ит» .
Алгоритм — точно определенное правило действий, для которого задано указание, как и в какой последовательности это правило необходимо применять к исходным данным задачи, чтобы получить ее решение.
• Характеристики алгоритма: • детерминированность — однозначность результата при заданных исходных данных; • дискретность — расчлененность на элементарные действия, возможность выполнения которых исполнителем не вызывает сомнения; • массовость.
Не все современные алгоритмы строго детерминированы. Во многих задачах присутствует неопределенность. Невозможно гарантировать защиту от любого вируса, спама. Программа – запись алгоритма на доступном компьютеру (алгоритмическом) языке.
Исполнитель – устройство, оснащенное программным обеспечением, автоматически выполняющее некоторый заранее определенный набор операций. При построении алгоритмов мы должны понимать возможности своего исполнителя – нельзя требовать невозможного!
Главным элементом исполнителя является компьютер. Точнее – процессор. В процессоре выполняются вычисления. Процессор командует всеми устройствами компьютера. Процессор выполняет строго определенный набор операций. Чтобы процессор выполнил операцию, ему дают команду.
Процессор воспринимает команды в виде двоичных последовательностей, состоящих из 0 и 1. Писать такие программы сложно – надо помнить коды команд, хорошо понимать устройство процессора.
Для удобства программирования были изобретены алгоритмические языки. С их помощью программа записывается в более удобной для человека форме. Текст, написанный на алгоритмическом языке, непонятен процессору. Специальная программа – транслятор – переводит этот текст на понятный процессору язык.
Известны два вида трансляторов – компиляторы и интерпретаторы. Компилятор анализирует весь текст программы и, если не были обнаружены ошибки, генерирует новый файл, подлежащий исполнению. Так работают системы C++ Builder, Delphi (Object Pascal) и многие другие.
Интерпретатор анализирует отдельные фрагменты текста программы и, если не были обнаружены ошибки, немедленно организует выполнение. Так работают системы, предназначенные для языков LISP, Python, PHP, Basic.
Я очень упростил ситуацию. На самом деле, все намного сложнее. Часто для интерпретируемых языков создаются промежуточные преобразованные файлы (например, в Visual LISP) и. т. д.
Языки программирования также можно классифицировать по уровням – низкому и высокому. К языкам низкого уровня, в первую очередь, относят ассемблеры. По существу языки ассемблера – это более удобная для человека форма записи машинных команд. Просто команды в виде двоичных чисел заменены словесными кодами.
Программирование на языках низкого уровня дает очень широкие возможности, но требует от человека очень хорошего знания всех подробностей работы компьютера. Языки высокого уровня не требуют очень глубокого понимания работы компьютера.
Мы будем учиться писать программы на алгоритмическом языке высокого уровня Visual Basic for Applications (VBA). • BASIC – Beginner’s All-purpose Symbolic Instruction Code • Basic English – 850 слов Внимание! Слова «высокий» и «низкий» в применении к языкам программирования не имеют оценочного или эмоционального содержания!
В процессе подготовки программы к исполнению (до или после компиляции) к ней коду добавляются различные готовые программные средства. Готовые программные средства, которыми может воспользоваться разработчик программы, можно считать свойствами используемого исполнителя. Таким образом, на одном и том же компьютере мы можем пользоваться различными исполнителями.
Например, если мы программируем на языке VBA (о нем пойдет речь далее), встроенном в программный продукт Microsoft Excel, нашему исполнителю будут доступны функции данного продукта. Например, нам не потребуется самим программировать умножение матриц - исполнитель и без нас знает, как это делать.
Алгоритмический язык: • алфавит – набор символов, используемых в данном языке; • синтаксис – правила составления выражений на данном языке; • семантика – правила истолкования выражений на данном языке.
Решение задачи: • уяснить, что известно; • уяснить, что надо найти; • уяснить, достаточно ли того, что известно, для решения задачи; • выбрать исполнителя; • если достаточно, разработать алгоритм; • реализовать алгоритм в виде программы.
Все «уяснения» оформляются в виде документов! В ходе решения задачи все сведения уточняются! Проблема: как добиться единообразия в описании. Существуют общепринятые методы. Наиболее распространен в 2012 г. метод, основанный на применении UML (Unified Modeling Language).
Блок-схемы
Основная идея структурного программирования Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций: • последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы; • ветвление — однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия; • цикл — многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла).
Специфика компьютерной арифметики Компьютерная арифметика Диапазоны представления чисел ограничены. Существует минимальный интервал между числами. Во всех нецелочисленных вычислениях неизбежны погрешности Математика Числовая ось бесконечна. Числовая ось плотна. Теоретически точность вычислений не имеет ограничений
Пример Зимняя картофельная задача. Мы хотим заготовить для варки M килограммов чищеного картофеля. . Сколько надо взять нечищеного картофеля, если при чистке K процентов уходит в отходы?
Осмыслим проблему. Если нам известны величины M и K, мы можем вычислить требуемую массу нечищеного картофеля по незамысловатой формуле N=M/(1 -K/100), где N – искомая величина. В качестве исполнителя мы будем использовать персональный компьютер, оснащенный операционной системой Windows и программным продуктом Microsoft Excel, содержащим средство разработки VBA.
Задача настолько проста, что весь алгоритм ее решения свелся по сути к одной формуле. Перейдем теперь к точному описанию. У в программе должны быть 3 переменные величины – (количество нечищеного картофеля, количество чищеного картофеля, коэффициент отходов). Эти величины могут быть как целыми, так и дробными.
Придумаем названия для этих переменных. В современном программировании принято, чтобы в имени переменной раскрывался ее смысл. Для этого имя переменной может состоять из нескольких слов, соединенных знаком _ (нижнее подчеркивание).
Список переменных: • масса сырого • Mas_of_Raw_Potatoes • • Mas_of_Unblanched • картофеля; масса чищеного картофеля; коэффициент отходов. • Ratio_of_Waste
Текст программы • • • Option Explicit Sub potatoes() Dim Mas_of_Raw_Potatoes As Single Dim Mas_of_Unblanched_Potatoes As Single Dim Ratio_of_Waste As Single Mas_of_Unblanched_Potatoes = CSng(Input. Box(“Введите требуемую массу чищеного картофеля", “Ввод")) Ratio_of_Waste = CSng(Input. Box(“Введите коэффициент отходов %", “Ввод")) Mas_of_Raw_Potatoes = Mas_of_Unblanched_Potatoes / (1 - Ratio_of_Waste * 0. 01) Msg. Box “Масса нечищеного картофеля: " & CStr(Mas_of_Raw_Potatoes) & " килограммов" End Sub
Программа начинается словом Sub, за которым следует имя программы. Стоящее в конце выражение End Sub генерируется автоматически. Сначала я описал переменные – дал им имена и указал тип. Тип переменной определяет какие значения она может принимать, какие действия над ней можно выполнять, сколько памяти она занимает. • Dim Mas_of_Raw_Potatoes As Single • Dim Mas_of_Unblanched_Potatoes As Single • Dim Ratio_of_Waste As Single
В языке VBA можно было бы обойтись без описания переменных, но это – очень плохой стиль. Я специально ввел перед программой директиву Option Explicit, которая принуждает в явном виде описывать все переменные. Если я ошибусь и неправильно напишу имя какой-нибудь переменной, сразу же будет сгенерировано сообщение об ошибке.
Текст ошибочной программы • • • Option Explicit Sub potatoes() Dim Mas_of_Raw_Potatoes As Single Dim Mas_of_Unblanched_Potatoes As Single Dim Ratio_of_Waste As Single Mas_of_Unblanched_Potatoes = CSng(Input. Box(“Введите требуемую массу чищеного картофеля", “Ввод")) Ratio_of_Waste = CSng(Input. Box(“Введите коэффициент отходов %", “Ввод")) Mas_of_Raw_Potatoes = Mas_of_Unblanched_Potatos / (1 - Ratio_of_Waste * 0. 01) Msg. Box “Масса нечищеного картофеля: " & CStr(Mas_of_Raw_Potatoes) & " килограммов" End Sub Найдите ошибку!
Сообщение об ошибке
Если строку Option Explicit убрать, программа выдаст абсурдный результат. Внимание! Описать переменную и ввести для нее значение – не одно и то же. В программе вводятся значения двух переменных. При помощи функции Input. Box пользователь в диалоговом режиме вводит строку символов, изображающую число.
Затем функция Csng преобразуют введенную строку в вещественное число. Получившее число записывается в область памяти, отведенную для хранения переменной, находящейся слева от знака присваивания. Затем над введенными данными производятся арифметические операции, результат записывается в область памяти, отведенную для хранения переменной, находящейся слева от знака присваивания. Полученный результат выводится с помощью функции Msg. Box.
Немного истории Первая в СССР электронная вычислительная машина МЭСМ.
Немного истории Коллектив программистов первой в СССР ЭВМ. Ну, и кто говорит, что программирование – женское дело?
• Чарльз Беббидж (1791 -1871)
Немного истории Ада Лавлейс (1815 -1852)
Немного истории Сергей Александрович Лебедев (1902 -1974)
Немного истории Анатолий Иванович Китов (1920 -2005)
Немного истории Виктор Михайлович Глушков (1923 -1982)
Немного истории Екатерина Логвиновна Ющенко (1919 -2001)
Андрей Петрович Ершов (1931 -1988)
Немного истории Михаил Романович Шура-Бура (1918 -2008)
Немного истории Святослав Сергеевич Лавров (1923 -2004)
Немного истории Джон (Иоганн) фон Нейман (1903 -1957)
Немного истории Джон (Иван) Атанасов (1903 -1995)
Немного истории Грейс Мюррей Хопфер (1906 -1992)
Немного истории Борис Арташесович Бабаян (1933)
Эдсгер Вибе Дейкстра (Edsger Wybe Dijkstra , 1930 -2002)
Итоги. Были рассмотрены понятия: • информация; • данные; • алгоритм; • исполнитель; • язык программирования; • трансляция (компиляция, интепретация); • правила разработки алгоритмов и программ.
Задания для самопроверки: • предложите алгоритм для нахождения площади треугольника, заданного координатами его вершин; • предложите алгоритм для установления типа треугольника, заданного координатами его вершин – остроугольный, прямоугольный, тупоугольный;
• предложите алгоритм для проверки принадлежности трех точек одной прямой; • предложите алгоритм для определения квадранта, которому принадлежит точка на плоскости; • предложите алгоритм для проверки принадлежности точки кольцу, образованному двумя концентрическими окружностями, имеющими разные радиусы.
Литература • Гарнаев А. Ю. EXCEL, VBA, INTERNET в экономике и финансах / А. Ю. Гарнаев. СПб. : БХВ – Петербург, 2003. – 816 с. • Гельман В. Я. Решение математических задач средствами EXCEL / В. Я. Гельман. СПб. : Питер, 2001. – 240 с.


