- •Часть 1
- •Содержание
- •Введение
- •1. Структура и принцип действия компьютера
- •2. Алгоритм и программа
- •2.1. Понятия об алгоритме и программе
- •2.2. Типовые алгоритмы
- •2.2.1. Вычисление суммы чисел произвольного ряда
- •Вычисление произведения чисел произвольного ряда
- •2.2.3. Определение наибольшего (наименьшего) числа заданного ряда чисел
- •2.2.4 Определение наибольшего (наименьшего) значения вычисляемой функции
- •2.2.5. Вычисление функции с одновременно изменяющимися несколькими аргументами
- •2.2.6. Итерационные циклы
- •2.2.7. Сортировка ряда чисел
- •Метод смежных пар
- •Метод поиска наименьшего (наибольшего)
- •2.2.8. Алгоритмы решения задач с использованием матриц
- •Общие методические указания по выполнению лабораторных работ
- •4.1. Порядок проведения лабораторных работ
- •4.2. Требования к оформлению отчета по выполненной лабораторной работе
- •5. Цели и содержание лабораторных работ
- •5.1 Лабораторная работа № 1 Вычисление выражений с использованием библиотечных
- •5.1.1. Задание
- •5.1.2. Общие сведения и рекомендации по выполнению работы
- •5.1.3. Контрольные вопросы и задания
- •5.2. Лабораторная работа № 2 Программирование разветвляющихся вычислительных процессов.
- •5.2.1. Задание
- •5.2.2. Общие сведения и рекомендации по выполнению работы
- •5.2.3. Контрольные вопросы и задания.
- •5.3. Лабораторная работа № 3 Программирование разветвляющихся вычислительных процессов с использованием оператора множественного выбора.
- •5.3.1. Задание
- •5.3.2. Общие сведения и рекомендации по выполнению работы
- •5.3.3. Контрольные вопросы и задания
- •5.4. Лабораторная работа № 4 Программирование с использованием простых циклов.
- •5.4.1. Задание
- •5.4.2. Общие сведения и рекомендации по программированию
- •5.4.3. Контрольные вопросы и задания
- •5.5. Лабораторная работа № 5 Программирование с использованием итерационных циклов.
- •5.5.1. Задание
- •Проверочный результат
- •Относительная погрешность, %
- •5.5.2. Общие сведения и рекомендации по программированию
- •5.5.3. Контрольные вопросы и задания
- •5.6. Лабораторная работа № 6 Расчет функций с несколькими одновременно изменяющимися аргументами.
- •5.6.1. Задание
- •5.6.2. Общие сведения и рекомендации по выполнению работы
- •5.6.3. Контрольные вопросы и задания
- •5.7. Лабораторная работа № 7 Программирование с использованием массивов и внешних файлов.
- •5.7.1. Задание
- •5.7.2. Общие сведения и рекомендации по программированию
- •5.7.3. Контрольные вопросы и задания
- •5.8 Лабораторная работа № 8 Программирование с использованием функций.
- •5.8.1. Задание
- •5.8.2. Общие сведения и рекомендации по выполнению работы
- •5.8.3. Контрольные вопросы и задания
- •5.9. Лабораторная работа № 9 Программирование с использованием операций над комплексными числами.
- •5.9.1. Задание
- •5.9.2. Общие сведения и рекомендации по выполнению работы
- •5.9.3. Контрольные вопросы и задания
- •Приложения Приложение 1.
- •Приложение 2.
- •Список литературы
Метод поиска наименьшего (наибольшего)
Идея метода состоит в том, что определяется место наименьшего числа при сортировке ряда по возрастанию (наибольшего числа при сортировке по убыванию), которое затем меняется местами с первым числом ряда. После этого ряд чисел рассматривается уже без первого числа. Найденное наименьшее (наибольшее) число выставляется аналогичным образом на второе место и в дальнейшем ряд чисел рассматривается уже без двух первых чисел, которые выставлены в нужном порядке. Это повторяется многократно до тех пор, пока останется одно число, после чего процесс сортировки прекращается.
На рис.2.7 приведен алгоритм сортировки
чисел по возрастанию. Блок – схема
представлена двумя вложенными циклами.
Внешний цикл с параметром цикла k
осуществляет назначение каждый раз
числа на роль минимального amin
в рассматриваемом ряде чисел и
одновременно отсекает уже выставленное
вперед число после предыдущего цикла.
Вложенный цикл с параметром цикла i
представляет собой типовой алгоритм
определения наименьшего числа из ряда
чисел. Здесь роль наименьшего числа
играет число
,
которое изменяется последовательно от
a1 до an-1.
Вложенный цикл рассматривает ряд чисел,
начиная с соседнего с
,
то есть с числа
.
За пределами вложенного цикла производится
обмен числами, наименьшего и первого в
рассматриваемом ряде. Здесь роль
переменной
,
используемой в методе смежных пар,
играет переменная
.
В отличие от предыдущего метода, этот алгоритм осуществляет сортировку чисел по «жесткой» программе. То есть, независимо от того, сортирован ли исходный ряд или нет, тело внешнего цикла будет выполнено раз. В этом случае непроизводительно расходуется машинное время, что определяет недостаток метода.
Сортировка по убыванию осуществляется аналогично. При этом в рассмотренной блок-схеме идентификатор необходимо заменить идентификатором , что вызывает правильные ассоциации, а операцию сравнения " < " – на операцию " > ".
_
+
Рис. 2.7 Блок – схема сортировки чисел по возрастанию методом
определения наименьшего числа
2.2.8. Алгоритмы решения задач с использованием матриц
Отличительной особенностью алгоритмов решения задач с использованием матриц (двухмерных массивов) от алгоритмов, ориентированных на работу с рядами чисел (векторами), является наличие двух вложенных циклов.
На рис.2.8 приведен алгоритм вычисления суммы элементов матрицы a(m*n). Внешний цикл предназначен для установления текущего адреса i строки матрицы, а внутренний (вложенный) – текущего адреса j ее столбца.
Рис. 2.8 Блок – схема вычисления суммы элементов матрицы
Вычисление произведения Р элементов матрицы осуществляется по аналогичной блок – схеме, в которой следует заменить символ S на P, операцию S = 0 на операцию P = 1, а операцию S = S + ai j - на операцию P =P*ai j.
В некоторых случаях возникает вопрос, какой цикл должен быть внешним, а какой – внутренним. Ответ на него следующий.
Если условием задачи предусматриваются какие-либо операции в строках, то внешний цикл должен определять текущий адрес строки, если же предусматриваются операции в столбцах, то внешний цикл должен определять текущий адрес столбца. Если же операции над элементами матрицы не акцентируются на строках или на столбцах, как в случае вычисления суммы или произведения элементов матрицы, то взаимное расположение циклов может быть любым.
Пример 1. В заданной матрице a(m*n) определить наибольшие элементы строк. Алгоритм решения этой задачи представлен на рис.2.9.
Здесь
внешний цикл определяет текущий адрес
строки. Получив адрес строки
,
первый элемент ее
(элемент первого столбца) берется в
качестве начального значения переменной
.
Вложенный цикл предусматривает
определение текущего порядкового номера
элемента в данной строке (номер столбца),
начиная со второго (первый уже использован)
и представляет собой типовой алгоритм
определения наибольшего числа в ряде
чисел (в строке матрицы).
Следует подчеркнуть, что в задаче требуется определить максимальные элементы в строках, поэтому внешний цикл алгоритма устанавливает текущий адрес строки.
_
+
Рис. 2.9 Блок-схема определения максимального элемента
в строке матрицы
Пример 2. В заданной матрице a(m*n) определить наибольший элемент в каждом столбце. Алгоритм решения этой задачи приведен на рис.2.10.
В отличие от предыдущего примера в этом алгоритме внешний цикл определяет текущий адрес столбца.
В случае примера с вычислением суммы элементов матрицы (рис.2.8) внешний цикл может определять как текущий адрес строки, так и текущий адрес столбца, поскольку здесь не акцентируется место операций (строки или столбцы). Областью операций являются все элементы матрицы без уточнения, в каких строках или столбцах они расположены.
_
+
Рис. 2.10 Блок-схема определения максимального элемента
в столбце матрицы
Приведенные алгоритмы составляют далеко не полный перечень алгоритмов с операциями над элементами матриц. Однако они могут быть использованы как фрагменты при разработке более сложных алгоритмов.
Следует хорошо понимать логику типовых алгоритмов, хорошо запомнить их и умело применять при решении различных задач. Это позволит экономить время на разработку алгоритмов других задач, в которых используются типовые алгоритмы.
3. КРАТКИЕ СВЕДЕНИЯ ОБ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ С++
Алгоритмический язык С++ – объектно-ориентированный язык, который унаследовал все основные свойства структурно-ориентированного языка С (Си) и дополнил его новым видом переменных – объектами (переменными типа класс). Это дополнение придало языку новые качества, существенно расширяющие возможности языка.
Язык С++ основан на трех основных концепциях:
инкапсуляции (закрытости);
полиморфизме (использование единого интерфейса в сходных задачах);
наследовании (использование имеющихся разработок).
Автором языка С++ является Бьярн Страуструп, сотрудник научно-исследовательского центра AT & T Bell Laboratories (нью-Джерси, США). Годом создания языка считается 1979 год.
Язык С++ претерпел две существенные модернизации в 1985 и в 1990 гг. Последняя, третья модернизация связана с процессом стандартизации языка С++. В настоящее время существует стандарт языка, разработанный комитетом по стандартизации ANSI (American National Standards Institute) и международной организацией по стандартам ISO (International Standard Organization).
С++ стал универсальным языком для программистов всего мира. Это единственный язык, который просто обязан знать любой уважающий себя программист-профессионал. Многие авторы книг по С++ считают его языком XXI века.
В силу того, что появляется все больше пакетов прикладных программ для решения самых разнообразных задач, доля «ручного» программирования для рядового пользователя заметно сокращается. Об этом говорилось ранее. Поэтому в дисциплине «Введение в информатику» излагаются только основные сведения о языке С++, позволяющие составлять простейшие программы вычислений.
В настоящем методическом пособии излагаются рекомендации по выполнению лабораторных работ в соответствии со структурой компилятора языка версии Borland C++ .
