Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 69

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 63 64 65 66 67 68 < 69 > 70 71 72 73 74 75 .. 404 >> Следующая


No symbols loaded.

'Ch07Ex01': Loaded ‘C:\BegCSharp\Chapter7\Ch07Ex01\bin\Release\Ch07Ex01 .exe', No symbols loaded.

‘Ch07Ex01.exe': Loaded

‘c:\winnt\assembly\gac\system\1.0.2411.0_Ь77а5с561934e089\system.dll', No

symbols loaded.

'Ch07Ex01.exe': Loaded

‘c:\winnt\assembly\gac\system.xml\1.0.2411.0_Ь77а5с561934e089\system.xml.dll’,

No symbols loaded.

Maximum value 9 found, with 2 occurrences.

The program '[1792] Ch07Ex01.exe’ has exited with code 0 (0x0).

Как это работает

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

Для начала обратите внимание, что в начале программы появился еще один оператор using:

using System.Diagnostics;
Отладка и обработка ошибок

139

Он позволяет упростить доступ к функциям, которые обсуждались перед этим примером, поскольку все ОНИ содержатся В Пространстве имен System.Diagnostics. Без этого оператора все строки кода вроде:

Debug.WriteLine('Bananas');

пришлось бы дополнительно квалифицировать, т. е. записывать в виде:

System.Diagnostics.Debug.WriteLine('Bananas');

Оператор using упрощает программу и делает ее менее многословной.

Код. находящийся в функции Maino, просто инициализирует тестовый массив целых значений с именем testArray, а также объявляет еще один целый массив с именем maxvalindices, в котором будут храниться индексы, полученные от функции Maximan (эта функция выполняет основные вычисления); затем код вызывает эту функцию и после окончания ее работы выводит полученные результаты.

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

. Возможно, ключевым кодом, на который следует обратить особое внимание (кроме строк, отвечающих за вывод отладочной информации), является метод, используемый для отслеживания индексов. Вместо того чтобы возвращать массив, который хранил бы все индексы (и, следовательно, был бы равен по размеру исходному массиву), функция Maxima() возвращает массив, чей размер соответствует количеству индексов, которое должно в нем храниться. Это достигается путем последовательного создания новых массивов по хода поиска. Такой способ является необходимым, поскольку размеры уже созданного массива не могут изменяться,

В самом начале поиска делается предположение, что именно первый элемент исходного массива (для него используется локальное имя integers) имеет максимальное значение и что он единственный элемент. Следовательно, можно присвоить соответствующие значения переменной maxval (она возвращает значенне функции, равное найденному максимальному значению) и выходному массиву indices, в котором сохраняются индексы элементов с максимальным значением. Переменной maxval присваивается значенне первого элемента массива integers, а в indices заносится единственное значение — 0, которое является индексом первого элемента массива. Мы также сохраняем число обнаруженных максимальных значений в переменной с именем count, что позволяет отслеживать массив indices.

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

Глава 7

Код, реализующий последнюю функциональную возможность, имеет вид:

if (integers [i] - = ir.axVal)

(

count++;

int[] oldlndices = indices; indices = new int[count]) oldlndices,CopyTo(indices, 0) ; indices [count - 1] = i;

Debug.WriteLine('Duplicate maximum found at element index ¦ +

Здесь происходит дублирование старого массива индексов в oldlndices, который представляет собой целый массив, локальный для блока кода if. Обратите также внимание на то, что значения, хранящиеся в массиве oldlndices, копируются в новый массив indices с помощью функции <иыямасснва>. соруто (). Эта функция получает н качестве параметров массип, в который осуществляется копирование, и индекс первого копируемого элемента, после чего переносит в этот массив все остальные значения.

С ПОМОЩЬЮ функций Debug.WriteLine о И Trace.WriteLine () На всем ПрОТЯЖС-нии программы выводятся различные текстовые сообщения. Таким способом в отладочном режиме мы получаем полный перечень выполняемых в цикле шагов, которые и приводят к результату. В рабочем режиме мы наблюдаем только итог вычислений, поскольку п этом режиме функция Debug.WriteLine о не работает.
Предыдущая << 1 .. 63 64 65 66 67 68 < 69 > 70 71 72 73 74 75 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.