На этом уроке мы попрактикуемся в сортировке двумерных массив со строковым типом данных. Научимся делать и исправлять ошибки.
Итак, у нас есть двумерный массив со списком сотрудников. Количество сотрудников будем хранить в переменной mSotr:
mSotr=4
array spisok [mSotr,3]string=(
>('Шурыгина','Анна','Сергеевна'),
>('Сидорчук','Мария','Антоновна'),
>('Гринберг','Роза','Семёновна'),
>('Бондаренко','Станислав','Петрович'))
Пояснение. Символ «>» в начале строк - это символ продления строки, т.е. пять строк рассматриваются системой как одна.
Обратим внимание, что элемент spisok[1,1] – фамилия первого сотрудника, spisok[2,1] – фамилия второгo сотрудника, spisok[i,1] – фамилия сотрудника номер i. Т.е. первый индекс – номер сотрудника, а второй индекс означает фамилию (1), имя(2) или отчество(3).
Этот список будем сортировать по фамилиям. Вспомним из второго урока сортировку пузырьковым методом одномерного массива из 6-ти элементов:
for j = 1,5
for i = 1,5
if A[i] > A[i+1]
X=A[i]
A[i]=A[i+1]
A[i+1]=X
Заменим в скрипте число 5 на выражение mSotr-1. Элементы массива A[…] заменим на элементы spisok[…,1] – т.е. на фамилию сотрудника.
for j = 1,mSotr-1
for i = 1,mSotr-1
if spisok[i,1] > spisok[i+1,1]
X= spisok[i,1]
spisok[i,1]= spisok[i+1,1]
spisok[i+1,1]=X
Запустите программу, наберите или перенесите ч/з буфер обмена определение массива и сортировку. Перейдите в рабочий режим и пройдите в шаговом режиме сколько хватит терпения, затем нажмите «Продолжить».

Смотрим на посортированный список сотрудников в таблице переменных. Фамилии ‘Бондаренко’,‘Гринберг’,‘Сидорчук’,‘Шурыгина’ – посортированы правильно, но имена и отчества теперь не соответствуют фамилиям. Это произошло потому, что при перестановке в массиве фамилий мы не переставляли имена и отчества. Внесем в скрипт исправления
for j = 1,mSotr-1
for i = 1,mSotr-1
if spisok[i,1] > spisok[i+1,1]
# перестановка фамилии
X= spisok[i,1]
spisok[i,1]= spisok[i+1,1]
spisok[i+1,1]=X
# перестановка имени
X= spisok[i,2]
spisok[i,2]= spisok[i+1,2]
spisok[i+1,2]=X
# перестановка отчества
X= spisok[i,3]
spisok[i,3]= spisok[i+1,3]
spisok[i+1,3]=X
Стартуем скрипт. Теперь список отсортирован правильно, но скрипт слишком громоздкий. Троекратное повторение сходных строк замены фамилии, имени и отчества заменим циклом
for j = 1,mSotr-1
for i = 1,mSotr-1
if spisok[i,1] > spisok[i+1,1]
for k=1,3
X= spisok[i,k]
spisok[i,k]= spisok[i+1,k]
spisok[i+1,k]=X
внесите в скрипт соответствующие исправления и проверьте работоспособность в шаговом режиме.
