- •Федеральное агентство по образованию Российской Федерации
- •Программирование
- •Часть I
- •Предисловие
- •1. Основные понятия алгоритмизации и программирования
- •1.1. Этапы решения задач на эвм
- •1. Постановка задачи:
- •2. Формализация (анализ и исследование задачи, модели, представление ее в виде уравнений, соотношений, ограничений и т.П.):
- •Понятие моделирования
- •Отладка программы
- •Тест и тестирование программы
- •1.2. Основы алгоритмизации
- •Свойства алгоритма
- •Критерии качества алгоритма
- •Способы описания алгоритмов
- •Структурограмма
- •Синтаксическая диаграмма (формулы Бэкуса-Наура)
- •Базовые алгоритмические конструкции
- •Примеры команды если
- •1.3. Теоретические основы программирования
- •Арифметические выражения
- •Арифметические выражения записываются по следующим правилам:
- •Лабораторная работа № 1 Запись арифметических выражений
- •Задание I
- •Задание II
- •Контрольные вопросы
- •2. Программирование алгоритмов линейной структуры
- •2.2. Основные понятия языка
- •2.3. Данные и способы их организации
- •Порядок объявления и инициализации переменных
- •2.4. Стандартные простые типы данных
- •2.5. Структура программы
- •2.6. Операторы
- •Оператор «выражение»
- •2.7. Организация ввода/вывода данных
- •Лабораторная работа № 2 Программирование алгоритмов линейной структуры
- •Задание I
- •Задание II
- •Задание III
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •Математическая модель
- •Алгоритм (блок - схема)
- •3. Программа
- •4. Результат работы программы
- •Решение
- •Математическая модель
- •4. Результат работы программы:
- •3. Операторы ветвления
- •3.1. Простые и составные условия
- •Операция &&
- •Операция ||
- •Операция !
- •3.2. Составной оператор
- •3.3. Условная операция (?:)
- •3.4. Условный оператор if
- •If (условие) оператор 1; else оператор 2;
- •If (условие) оператор;
- •3.5. Оператор switch
- •3.6. Оператор перехода goto
- •Лабораторная работа № 3 Программирование алгоритмов разветвляющейся структуры
- •Задание I
- •Задание II
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •1. Математическая модель
- •4. Результат работы программы
- •Решение
- •1. Математическая модель
- •4. Результат работы программы
- •4. Циклы
- •4.1. Оператор цикла с параметром (for)
- •4.2. Оператор цикла с предусловием (while)
- •4.3. Оператор цикла с постусловием (do while)
- •Отличие оператора цикла while от оператора цикла do..While
- •4.4. Вложенные циклы
- •Математическая модель
- •Лабораторная работа № 4 Программирование алгоритмов циклической структуры
- •Задание I
- •Задание II
- •Задание III
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •1. Математическая модель
- •4. Результат работы программы
- •Решение
- •1. Математическая модель
- •4. Результат работы программы
- •5. Подпрограммы
- •5.1. Понятие подпрограммы
- •5.2. Формальные и фактические параметры
- •5.3. Локальные и глобальные переменные
- •5.4. Функции
- •Задание I
- •Задание II
- •Лабораторная работа №5 Использование функций для решения прикладных задач
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •1. Математическая модель
- •3. Программа 4. Результат работы программы:
- •6. Итерация и рекурсия
- •6.1. Понятие итеративного процесса
- •6.2. Понятие рекурсии
- •Лабораторная работа №6 Программирование рекурсивных алгоритмов
- •Задание
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •1. Математическая модель
- •2. Алгоритм
- •3. Программа
- •4. Результат работы программы
- •7. Одномерные массивы
- •7.1. Понятие структурированного типа данных
- •7.2. Понятие и описание типа массив
- •7.3. Одномерные массивы
- •7.4. Основные действия над элементами массивов
- •1. Инициализация массива: присвоение каждому элементу начального значения:
- •2. Вывод массива на экран:
- •3. Обработка массива
- •Лабораторная работа №7 Использование числовых одномерных массивов
- •Задание I
- •Задание II
- •Контрольные вопросы
- •Пример выполнения задания II лабораторной работы
- •Решение
- •Математическая модель
- •4. Результат работы программы:
- •8. Двумерные массивы
- •Лабораторная работа №8 Двумерные массивы
- •Задание
- •Контрольные вопросы
- •Пример выполнения лабораторной работы
- •Решение
- •Математическая модель
- •9. Алгоритмы решения задач внутренней сортировки и алгоритмы поиска информации
- •9.1. Сложность алгоритмов
- •9.2. Постановка задачи поиска
- •9.3. Последовательный (линейный) поиск
- •9.4. Бинарный поиск
- •9.5. Постановка задачи сортировки данных
- •9.6. Прямые и быстрые методы внутренней сортировки
- •9.7. Сортировка вставками
- •9.8. Сортировка с помощью прямого выбора
- •9.9. Сортировка с помощью прямого обмена
- •Лабораторная работа № 9 Задачи сортировки и поиска
- •Контрольные вопросы
- •10. Указатели и массивы
- •10.1. Указатели
- •10.2. Взаимосвязь между массивами и указателями
- •10.3. Порядок объявления динамических массивов
- •10.4. Передача массивов в качестве параметров функции
- •Лабораторная работа №10 Применение массивов и указателей для решения прикладных задач
- •Задание I
- •Задание II
- •Задание III
- •11. Особенности работы с функциями
- •11.1. Способы передачи параметров в функцию
- •11.2. Передача имен функций в качестве параметров
- •11.3. Перегрузка функций
- •Лабораторная работа № 11 Исследование способов работы с функциями
- •Задание I
- •Задание II
- •12. Строки как массив элементов типа char
- •Лабораторная работа № 12
- •Задание I
- •Изучение способов формирования строк в языке Си
- •Применение функций работы со строками для обработки символьных массивов
- •Задание II
- •13. Строки как специальный класс string
- •Лабораторная работа № 13 Исследование способов работы с функциями
- •Задание I
- •Задания для самостоятельной работы
- •Контрольные вопросы
- •Форма отчета
- •14. Структуры
- •14.1. Изучение порядка объявления и инициализации структур
- •14.2. Программирование с использованием структур
- •14.3. Использование функций для работы с производными типами данных
- •Лабораторная работа № 14 Применение структур для решения прикладных задач
- •Задание I
- •15. Файлы
- •15.1. Подход с использованием возможностей языка Си
- •Ifstream идентификатор_потока(имя_файла,ключи_потока);
- •Лабораторная работа № 15 Исследование методов доступа к файлам данных
- •Задание I
- •1. Работа с неструктурированными данными
- •2. Работа со структурированными данными
- •Пример выполнения лабораторной работы
- •Литература
- •Приложение 1 Порядок выполнения лабораторных работ
- •Приложение 2 Базовые функции
Способы описания алгоритмов
Словесно-формульный. Описание алгоритма с помощью слов и формул на естественном языке.
Словесный способ не имеет широкого распространения по следующим причинам:
такие описания строго не формализуемы;
страдают многословностью записей;
допускают неоднозначность толкования отдельных предписаний. «Он встретил ее на поле с цветами».
Пример. Составить алгоритм начисления зарплаты согласно следующему правилу: если стаж работы сотрудника менее 5 лет, то зарплата 130 руб., при стаже работы от 5 до 15 лет – 180 руб., при стаже свыше 15 лет зарплата повышается с каждым годом на 10 руб.
Словесно-формульное описание алгоритма решения задачи:
1. Ввести ST, перейти к п. 2.
2. Если ST<5, то ZP:.=l30, перейти к п. 4, иначе — перейти к п. 3.
3. Если ST<15, то ZP:=180, перейти к п.4, иначе ZP:=180+(ST-15)10, перейти к п. 4.
4. Вывести (отпечатать) значение ZP, перейти к п. 5.
5. Вычисления прекратить.
Табличный. Алгоритм представляется в форме таблицы и расчётных формул (физика, химия и т. д.).
Структурограмма
Синтаксическая диаграмма (формулы Бэкуса-Наура)
Псевдокоды. Полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.
Псевдокод занимает промежуточное место между естественным и формальным языками. С одной стороны, он близок к обычному естественному языку, поэтому алгоритмы могут на нем записываться и читаться как обычный текст. С другой стороны, в псевдокоде используются некоторые формальные конструкции и математическая символика, что приближает запись алгоритма к общепринятой математической записи.
В псевдокоде не приняты строгие синтаксические правила для записи команд, присущие формальным языкам, что облегчает запись алгоритма на стадии его проектирования и дает возможность использовать более широкий набор команд. Однако в псевдокоде, так же, как и в формальных языках, есть служебные слова, смысл которых определен раз и навсегда.
Единого или формального определения псевдокода не существует, поэтому возможны различные псевдокоды, отличающиеся набором служебных слов и основных (базовых) конструкций.
Примером псевдокода является школьный алгоритмический язык.
Алгоритмический язык – это средство для записи алгоритмов в аналитическом виде, промежуточном между записью алгоритма на естественном (человеческом) языке и записью на языке ЭВМ (языке программирования).
Запись алгоритма решения задачи примера 1 на алгоритмическом языке:
алг зарплата(цел. ST, вещ ZP)
арг ST
рез ZP
нач
если ST<5
то ZP:=150
иначе
если ST<=15
то ZP:=180
иначе ZP:=180+(ST-15)*10
все
все
кон
Программный. Описание алгоритма с помощью языков программирования.
Графический. Алгоритм изображается в виде последовательности связанных между собой функциональных блоков, каждый из которых соответствует выполнению одного или нескольких действий. Такое графическое представление называется схемой алгоритма или блок-схемой.
Блок-схема алгоритма представляет собой систему связанных геометрических фигур.
Правила построения блок-схем:
В блок-схеме каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т.п.) соответствует геометрическая фигура, представленная в виде блочного символа. Для наглядности операции разного вида изображаются в схеме различными геометрическими фигурами.
Блочные символы соединяются линиями переходов, определяющими очередность выполнения действий. Порядок выполнения действий указывается стрелками, соединяющими блоки.
В схеме блоки стараются размещать сверху вниз, в порядке их выполнения.
Все повороты соединительных линий выполняются под углом 90 градусов.
В таблице приведены наиболее часто употребляемые символы.
Название |
Обозначение и пример заполнения |
Выполняемая функция (пояснение) |
Начало/конец (вход/выход) |
|
Начало или конец программы, вход или выход в подпрограмму |
Блоки ввода/вывода |
|
Ввод-вывод данных |
|
|
Вывод данных на печатающее устройство |
Блок вычислений |
|
Арифметический блок определяет вычислительное действие или последовательность действий |
Логический блок |
|
Логический блок проверяет истинность или ложность условия и выбирает направления выполнения алгоритма в зависимости от условия. В блоке должны быть указаны вопрос, условие или сравнение, которые он определяет. |
Предопределенный процесс |
|
Вычисления по стандартной или пользовательской подпрограмме |
Блок модификации |
|
Выполнение действий, изменяющих пункты алгоритма, начало цикла. Внутри блока записывается параметр цикла, для которого указываются его начальное значение, граничное условие и шаг изменения значения параметра для каждого повторения. |
Межстраничный соединитель |
|
Указание связи между частями схемы, расположенной на разных страницах |
Общие правила построения схемы алгоритма задачи:
1. Выявить исходные данные, результаты, назначить им имена.
2. Выбрать метод (порядок) решения задачи.
3. Разбить метод решения задачи на этапы (с учетом возможностей ЭВМ).
4. Изобразить каждый этап в виде соответствующего блока схемы алгоритма и указать стрелками порядок их выполнения.
5. В полученной схеме при любом варианте вычислений:
а) предусмотреть выдачу результатов или сообщений об их отсутствии;
б) обеспечить возможность после выполнения любой операции, так или иначе, перейти к блоку Останов (к выходу схемы).
Эти правила и есть «Основные принципы алгоритмизации». Будем считать, что знание и применение настоящих «принципов» обязательно при составлении алгоритма любой задачи.
Типы алгоритмов:
структурированные;
неструктурированные (т.е. с нарушением структуры – с операторами безусловного перехода);
вспомогательные (используемые в составе других алгоритмов).
Виды алгоритмов:
линейный алгоритм;
алгоритм ветвления;
циклический алгоритм;
алгоритм с подпрограммами;
смешанные (т.е. содержащие и циклы, и ветвление, и функции).
рекурсивный алгоритм обращается к самому себе, пока не выполнится определенное условие.
