- •1. Краткие теоретические сведения
- •1.1. Переменные с индексами и массивы
- •1.2. Описание массивов в программах
- •1.3. Динамические массивы
- •1.4. Программирование вычислительных процессов, содержащих одномерные массивы (Алгоритмы обработки одномерных массивов)
- •1.4.1. Инициализация массива
- •1.4.2. Формирование и вывод массива
- •1.4.3. Ввод – вывод статического одномерного массива
- •1.4.4. Ввод – вывод динамического одномерного массива
- •1.4.5. Суммирование элементов одномерного массива
- •1.4.6. Табуляция значений функции, аргумент которой – одномерный массив
- •1.4.7. Поиск минимального и максимального значений одномерного массива
- •1.4.8. Сортировка значений одномерного массива по возрастанию (убыванию) методом попарного сравнения
- •1.4.9. Сортировка значений одномерного массива по возрастанию (убыванию) методом нахождения минимума (максимума)
- •Нахождения минимума для примера 10.8
- •1.4.10. Перестановка двух элементов массива
- •1.4.11. Вычисление суммы элементов массива
- •1.4.12. Подсчет количества элементов массива, удовлетворяющих заданному условию
- •1.4.13. Вычисление произведения элементов массива
- •1.4.14. Поиск элементов, обладающих заданным свойством
- •1.4.15. Поиск в упорядоченном массиве
- •1.4.16. Поиск минимального и максимального элемента массива и его порядкового номера (индекса)
- •1.4.17. Копирование массивов
- •1.4.18. Формирование нового массива
- •1.4.19. Примеры решения задач по обработке одномерных массивов
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1. Вычисление сумм, количеств и произведений элементов массива
- •2.4.1.1. Условие задания
- •2.4.1.2. Пример для варианта 30
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Поиск минимального и максимального элементов массива
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример для варианта 30
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Формирование новых массивов
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример для варианта 30
- •2.4.3.3. Программа
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Обработка упорядоченных массивов
- •2.4.4.1. Условие задания
- •2.4.4.2. Пример для варианта 30
- •2.4.4.3. Программа
- •2.4.4.4. Тестирование
- •2.4.5. Задание 5. Задачи, сводящиеся к обработке одномерных массивов
- •2.4.5.1. Условие задания
- •2.4.5.2. Пример для варианта 30
- •2.4.5.3. Программа
- •2.4.5.4. Тестирование
- •2.4.6. Задание 6. Комбинированные задачи
- •2.4.6.1. Условие задания
- •2.4.6.2. Пример для варианта 30
- •2.4.6.3. Программа
- •2.5.1.2. Пример для варианта 30
- •2.5.1.3. Программа
- •2.5.1.4. Тестирование
- •2.5.2. Задание 8. Комбинированные задания
- •2.5.2.1. Условие задания
- •Варианты заданий
- •5. Пример решения задачи (вариант 30)
- •2.5.2.2. Разработка алгоритма.
- •2.5.2.3. Определение переменных программы
- •2.5.2.4. Разработка текста программы
- •2.5.2.5. Программа
- •2.5.2.6. Отладка программы
- •2.5.2.7. Результаты работы программы
- •2.5.3. Задание 9. Комбинированные задания
- •2.5.3.1. Варианты заданий
- •2.5.3.2. Пример программы обработки динамических массивов
- •2.5.3.3. Программа
- •2.5.3.4. Тестирование
- •2.5.4. Задание 10. Вычисления элементов вектора по формуле
- •2.5.4.2. Пример для варианта 30
- •2.5.4.3. Программа
- •2.5.5.4. Тестирование
- •2.5.5. Задание 11. Вычисления сумм и произведений векторов
- •2.5.5.2. Пример для варианта 30
- •2.4.11.3. Программа
- •2.5.5.4. Тестирование
- •2.5.6. Задание 12. Произвольные задачи
- •2.5.6.2. Пример для варианта 30
- •2.5.6.3. Программа
- •2.5.6.4. Тестирование
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Переменные с индексами и массивы 2
1.4.8. Сортировка значений одномерного массива по возрастанию (убыванию) методом попарного сравнения
Составить программу, которая обеспечивает сортировку массива а из m чисел в порядке возрастания.
Методы сортировки массивов отличаются друг от друга затратами машинного времени, величиной дополнительной памяти и сложностью программы. Из большого числа методов сортировки рассмотрим только два: метод попарного сравнения и метод нахождения минимума (максимума).
Пример 10.9
Метод попарного сравнения. Сущность метода состоит в том, что соседние записи (числа) сравниваются попарно и меняются местами, если порядок их расположения неправильный (с точки зрения задачи сортировки). Сравнение начинается с записей 1 и 2; затем запись, оказавшаяся на втором месте, сравнивается с записью 3 и т.д.
Первый цикл сравнений и перестановок дает частичное упорядочение массива. Второй цикл проводится аналогично. Сортировка заканчивается, когда за очередной цикл не будет произведено ни одной перестановки.
Данный метод не требует дополнительных затрат памяти ЭВМ, так как массив не переписывается. Затраты машинного времени сравнительно большие. Недостатком метода является то обстоятельство, что исходный массив не сохраняется (перестановка внутри массива).
Блок-схема алгоритма попарного сравнения для примера 10.7 приведена на рис. 10.4. Здесь переменная X используется для контроля за наличием перестановок элементов массива а.
Программа на языке С++ может иметь следующий вид:
/*Сортировка методом попарного сравнения */
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream.h>
#define m 19
int main()
{
int k, i,x;
float a[m],b, c;
// Ввод массива a
for (k=0; k<=m; k++)
{
cout <<"Введите " << k << "-ый элемент массива a: ";
cin >> a[k];
}
// Сортировка массива a по возрастанию
do
{
i = 0;x =0;
for (k=1; k<=m; k++)
{b = a[i]; c = a[k];
if (c < b) {a[i] = c; a[k] = b; x = x + 1;}
i= i + 1;
}
}
while (x>0);
// Вывод отсортированного массива a
for (k=0; k<=m; k++)
{
cout <<"k = " << k << " a[k] = " << a[k] << endl;
}
cout << "Нажмите любую клавишу..." ;
getch();
return 0;
}
Рис. 10.4. Блок-схема алгоритма сортировки методом попарного сравнения для примера 10.7
1.4.9. Сортировка значений одномерного массива по возрастанию (убыванию) методом нахождения минимума (максимума)
Пример 10.10
Метод нахождения минимума (максимума). Идея его состоит в следующем. Пусть необходимо упорядочить массив по возрастанию значения признака (метод нахождения минимума). Для этого в исходном массиве отыскивается запись с минимальным значением признака и помещается на первое место в упорядоченном массиве. В оставшейся части массива снова отыскивается запись с минимальным значением признака и помещается на второе место. Процесс поиска минимумов повторяется до полного упорядочения массива, т.е. m-1 раз (при наличии m элементов в массиве). Рассматриваемый метод по свойствам равноценен предшествующему. При сортировке в порядке убывания значения признака процедура остается той же, но отыскивается запись с максимальным значением признака. Блок-схема рассматриваемого алгоритма сортировки представлена на рис. 8.5. В ней использованы следующие обозначения: m - количество элементов в массиве; k - индекс максимального элемента; ak - элемент, находящийся в k-й позиции; l - количество элементов в упорядоченной части; b - вспомогательная переменная.
Действия, которые должны быть выполнены ЭВМ при реализации этого алгоритма состоят в следующем:
1. Ввести значение m и значения элементов ai (блоки 2 - 6).
2. Положить длину l в упорядоченной части массива равной 1 (блок 7).
3. Найти индекс k минимального элемента в неупорядоченной части массива (блоки 8 - 13). Здесь буквой j обозначен индекс очередного анализируемого элемента. Вначале в качестве минимального принимается l-й элемент (k = l), и все остальные элементы, начиная с l+1 (j = l + 1) сравниваются с l-ым. Как только найдется элемент аj, значение которого меньше значения ak (блок10), фиксируется его индекс (k = j , блок 11) и дальнейшие сравнения ведутся уже с этим элементом, и т.д. Таким обрезом, после того как завершится просмотр заданного число элементов (j превышает m, блок 13), k будет иметь значение индекса минимального элемента.
Рис. 10.5. Блок-схема алгоритма сортировки методом