Урок 1

Двумерные массивы

На этом уроке мы попрактикуемся в сортировке двумерных массив со строковым типом данных. Научимся делать и исправлять ошибки.

Итак у нас есть двумерный массив со списком сотрудников. Количество сотрудников будем хранить в переменной 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

внесите в скрипт соответствующие исправления и проверьте работоспособность в шаговом режиме.

Двумерные массивы