- •Технология программирования вложенных циклов
- •Правила работы с вложенными циклами:
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Описание многомерных массивов
- •Обозначение элементов многомерного массива
- •Создание двумерного массива
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Параллельно вложенные циклы
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Программирование задачи с графическим интерфейсом
- •Сортировка элементов массивов
- •Ранжирование числовых массивов
- •Ранжирование по убыванию основным методом
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Ранжирование по возрастанию методом «пузырька»
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Ранжирование символьных массивов
- •Ранжирование символов в строке по алфавиту
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Ранжирование массива символьных строк по алфавиту
- •Постановка задачи
- •Формирование математической модели
- •Выбор метода решения
- •Составление алгоритма решения
- •Программирование задачи
- •Заключение
- •Вопросы для контроля
-
Ранжирование массива символьных строк по алфавиту
Ранжирование массива символьных строк по алфавиту в принципе реализуется использованием методик сортировки символов в строке.
Математически оптимальный вариант – на первом шаге выполнить сортировку символьных строк по первой их букве. При наличии блоков строк с одинаковыми первыми буквами осуществить сортировку каждого блока по второй букве. При необходимости, полученные новые блоки с двумя одинаковыми начальными буквами ранжируются по третьей букве и т.д.
Оптимальный по количеству шагов выполнения алгоритм достаточно сложно реализуется.
Более простой вариант – последовательное попарное сравнение символов двух соседних строк, от первой буквы и далее.
Каждое сравнение определяет возможность одного из вариантов:
-
буквы одинаковы (коды равны);
-
буква текущей строки ближе к началу алфавита, чем буква последующей строки (код первой меньше кода второй);
-
буква текущей строки дальше от начала алфавита, чем буква последующей строки (код первой больше кода второй).
Первый и второй варианты подтверждают правильное расположение по алфавиту сравниваемых строк. Третий – предписывает поменять строки местами.
Существенное увеличение количества выполняемых операций компенсируется значительным упрощением алгоритма ранжирования строк, то есть простотой его реализации на ЭВМ.
Упорядочение символов в строке по алфавиту рассмотрим на конкретной задаче (9.7) о символьном массиве.
-
Постановка задачи
Дан не упорядоченный список студенческой группы. Количество студентов не превышает 25, количество символов в каждой строке (фамилия, имя, отчество) не более 30. Требуется отранжировать исходный массив строк по алфавиту.
-
Формирование математической модели
Исходные данные
СТР(N, М) –массив символьных строк;
N 25 – максимальное количество строк массива;
М 30 – максимальное количество символов в строке;
n – реальное количество строк массива.
Модель массива СТР(N, М):
|
с11 |
с12 |
... |
с1j |
... |
с1k |
|
|
– 1-я строка (стр1) |
|
с21 |
с22 |
... |
с2j |
... |
… |
с2l |
|
– 2-я строка (стр2) |
|
… |
… |
… |
… |
… |
… |
|
|
|
|
сi1 |
сi2 |
... |
сij |
... |
… |
сil |
сim |
– i-я строка (стрi) |
|
… |
… |
… |
… |
… |
… |
|
|
|
|
сn1 |
сn2 |
... |
сnj |
... |
сnk |
|
|
– n-я строка (стрn) |
i, j – текущие индексы строки массива и символа в строке;
i = i + 1, j = j + 1 – законы изменения индексов;
1
i
n,
1
j
m
– диапазоны изменения индексов
элементов.
Характерная особенность массивов символьных строк – длины строк (количество символов каждой) различны, не более максимально возможного значения, заданного в описателе.
Внимание! При составлении расчетных зависимостей под минимальной будем понимать строку с наименьшим кодом.
Расчётные зависимости
стрmin1 = min(стр1, стр2,…, стрi,…, стрn);
стр1 = стрmin1;
стрmin2 = min(стр2,…, стрi,…, стрn);
стр2 = стрmin2;
…
стрmin i = min(стрi,…, стрn-1, стрn);
стрi = стрmin i;
…
стрmin n-1 = min(стрn-1,стрn);
стрn-1 = стрmin n-1;
