Главная страница

Введение 8 Этапы создания Windowsприложения 8


Скачать 6.98 Mb.
НазваниеВведение 8 Этапы создания Windowsприложения 8
АнкорVisual Basic 2005 (word97).doc
Дата22.12.2017
Размер6.98 Mb.
Формат файлаdoc
Имя файлаVisual Basic 2005 (word97).doc
ТипРеферат
#12532
страница46 из 63
1   ...   42   43   44   45   46   47   48   49   ...   63

10.5. Поиск в массиве структур


Алгоритмы обработки массивов структур практически не отличаются от аналогичных алгоритмов обработки одномерных массивов. Рассмотрим задачу поиска минимального и максимального элементов в массиве структур. В качестве примера будем использовать массив городов, описанный в предыдущих разделах. В этом массиве будем искать город с максимальной дневной температурой и город с минимальной ночной температурой.

Для решения задач нам потребуются переменные для хранения максимального и минимального элементов массива. Очевидно, что эти переменные будут иметь такой же тип данных, что и обрабатываемый массив.

Dim max, min As Gorod

Поиск, как обычно, начинаем с нулевого элемента массива.

max = a(0)

min = a(0)

Организуем цикл для обработки всех элементов массива. Так как нулевой элемент мы же использовали при задании начальных значений переменных, то обработку массива можно начать с первого элемента.

For i = 1 To n

На каждом шаге массива сравниваем дневную температуру в текущем городе с дневной температурой в ранее найденном городе. Обратите внимание на то, что структуры сравниваются по значению одного конкретного поля. Сравнивать структуры полностью нельзя. Сравнение всегда должно происходить по одинаковым полям.

If a(i).Den > max.Den Then

Если в текущем городе температура выше, то мы должны обновить максимум, записав в него анализируемый элемент массива. Заметьте, что элемент массива запоминается целиком, хотя сравнение было только по одному полю. Это делается для того, чтобы в переменной максимум сохранилось вся информация о данном городе, а не только значение дневной температуры.

max = a(i)

End If

Теперь мы сравниваем ночную температуру в текущем городе с ночной температурой в ранее найденном городе.

If a(i).Noch < min.Noch Then

Если в текущем городе температура ниже, то мы должны обновить минимум, записав в него анализируемый элемент массива.

min = a(i)

End If

Next

После завершения цикла нам остается только вывести полученные значения. Сначала выводим горизонтальную черту, чтобы зрительно отделить исходные данные от результатов.

lstGorod.Items.Add("-------------------------------")

Выводим поясняющий текст.

lstGorod.Items.Add("Город с макс. дневной темп.")

С помощью специального метода (см. раздел 10.1) формируем строку из данных, записанных в переменной max. Эту строку выводим в окно списка.

lstGorod.Items.Add(max.Print)

Выводим поясняющий текст.

lstGorod.Items.Add("Город с мин. ночной темп.")

С помощью метода Print формируем строку из данных, записанных в переменной min. Эту строку выводим в окно списка.

lstGorod.Items.Add(min.Print)

Полный текст программы представлен в приложении 49. Пример работы программы приведен на рис. 67.


Рис. 67. Пример работы программы обработки массива структур

10.6. Формирование нового массива из некоторых элементов исходного массива


В качестве примера возьмем задачу формирования массива городов, в которых дневная температура выше средней. Эта задача решается в два этапа. На первом этапе вычисляется средняя дневная температура. Для этого находится сумма всех дневных температур и делится на количество городов. На втором этапе происходит непосредственное формирование нового массива. Анализируется каждый элемент исходного массива. Если дневная температура в этом городе больше средней, то он переносится в новый массив. Рассмотрим особенности программной реализации этого алгоритма.

Начнем с описания необходимых переменных. Для решения задачи нам потребуется еще один массив. В него мы перенесем те элементы исходного массива, которые будут удовлетворять оставленному условию. Другими словами, это результирующий массив. Очевидно, что тип элементов в этом массиве должен совпадать с типом элементов в исходном массиве.

Dim b() As Gorod

В отдельной переменной будем хранить номер последнего элемента в формируемом массиве.

Dim k As Integer

Для вычисления средней дневной температуры нам необходимо вычислить сумму всех дневных температур. Значение этой суммы будем записывать в специальную переменную.

Dim Summa As Integer

Для средней дневной температуры заведем отдельную переменную. Так как средняя температура получается в результате деления, то эта переменная должна иметь рациональный тип данных.

Dim Sred As Single

Первый этап решения задачи – это вычисление средней дневной температуры. Для этого необходимо вычислить сумму всех дневных температур. Задаем начальное значение суммы.

Summa = 0

Организуем цикл для обработки всех элементов исходного массива.

For i = 0 To n

На каждом шаге цикла добавляем очередное значение дневной температуры к ранее накопленной сумме.

Summa += a(i).Den

Next

После завершения цикла можно вычислить среднее значение дневной температуры. Для этого необходимо найденную сумму разделить на количество городов. Заметим, что n – это номер последнего города. Так как нумерация городов в массиве идет с нуля, то количество городов будет на единицу больше, чем номер последнего элемента массива.

sred = Summa / (n + 1)

Выводим горизонтальную черту, чтобы зрительно отделить промежуточные результаты от исходных данных.

lstGorod.Items.Add("-------------------------------")

Выводим значение средней дневной температуры, чтобы пользователь мог проконтролировать правильность работы программы.

lstGorod.Items.Add("Средняя дневная температура:" + _

Str(Sred))

Переходим ко второму этапу – формированию нового массива. До начала формирования массив пуст. В нем не содержится ни одного элемента. Поэтому номер последнего элемента в этом массиве находится за его пределами и равен -1.

k = -1

Организуем цикл для обработки всех элементов исходного массива.

For i = 0 To n

На каждом шаге цикла анализируем очередной город.

If a(i).Den > Sred Then

Если дневная температура в этом городе больше средней, то мы должны перенести всю информацию об этом городе в новый массив. При этом номер последнего элемента в новом массиве увеличится на единицу.

k += 1

Изменяем размер результирующего массива. Использование ключевого слова Preserve позволит нам сохранить в массиве все ранее найденные элементы.

ReDim Preserve b(k)

В новый массив на последнюю позицию записываем анализируемый элемент. Обратите внимание на то, что элемент записывается целиком, хотя сравнение проводится только по одному полю. Это делается для того, чтобы в новом массиве сохранялась вся информация о городе, а не только значение дневной температуры.

b(k) = a(i)

End If

Next

После завершения цикла выводим полученный массив. Сначала печатаем горизонтальную черту, чтобы зрительно отделить полученные результаты от исходных данных.

lstGorod.Items.Add("-------------------------------")

Затем печатаем поясняющий заголовок и еще одну горизонтальную черту.

lstGorod.Items.Add("Результирующий массив")

lstGorod.Items.Add("-------------------------------")

Анализируем номер последнего элемента в сформированном массиве.

If k < 0 Then

Если номер последнего элемента меньше нуля, значит, в новом массиве нет ни одного элемента. Поэтому вместо значений элементов массива выводим поясняющее сообщение.

lstGorod.Items.Add("Таких городов нет")

Else

В противном случае, организуем цикл для вывода полученного массива.

For i = 0 To k

На каждом шаге цикла с помощью метода Print (см. раздел 10.1) формируем строку из данных, записанных в очередном элементе массива. Эту строку выводим в окно списка.

lstGorod.Items.Add(b(i).Print)

Next

End If

Полный текст программы представлен в приложении 50. Пример работы программы приведен на рис. 68.


Рис. 68. Пример работы программы формирования нового массива структур из элементов исходного массива

1   ...   42   43   44   45   46   47   48   49   ...   63


написать администратору сайта