Visual Basic .NET для чайников - У. Вонг. Visual Basic .NET для чайников - У. Диалектикамосква СанктПетербург Киев
Скачать 7.1 Mb.
|
Глава 20. Создание структур данных 215 (0,0) (1.0) (1.1) (2,1) (0,2) (2,2) (1,3) (2,3) (1,4) (2,4) Рис. 20.3. Двухмерный массив мо- жет быть представлен в виде сетки Порядок создания двухмерного массива тот же, что и с той лишь что, указывая его размер, нужно добавить еще одно для дополнительного ния. Таким образом, размер двухмерного массива определяется двумя числами: Dim ДвухММассив ( С т р о к и , Столбцы) As ТипДанных Размер трехмерного массива будет определяться тремя числами и т.д.: Dim ТрехММассив (X, Y, Z) As ТипДанных При создании массивов, в том числе и многомерных, для хранения значения каждого элемента выделяется оперативная память (даже если это нулевые значения или пустые строки). Таким образом, создавая большой массив, вы резко уменьшаете объем свобод- ной памяти, что может негативно отразиться на работе вашей программы. Поэтому соз- давать многомерные массивы следует лишь по мере необходимости. Изменение размеров массива После того как массив будет создан, вы в любой момент сможете увеличить или умень- шить его размер. Предположим, вы уже создали массив из пяти значениями кото- рых являются строки: Dim As S t r i n g Если вдруг появится необходимость добавить несколько новых элементов, тесь командой ReDim As S t r i n g Эта команда добавляет три ( 7 - 4 = 3) новых элемента к ранее созданному массиву Мой- Массив. Этой же командой можно удалить лишние элементы: ReDim As S t r i n g помощью команды ReDim можно также изменить и размер многомерного мас- сива. Однако она не позволяет добавлять или удалять измерения многомерного массива. При использовании команды ReDim для добавления или удаления элементов массива все данные, которые уже были сохранены в этом массиве, теряются. Если вы хотите, чтобы прежняя информация осталась на своих местах при добавлении новых элементов (в случае удаления элементов такая возможность отсутствует), вместе с командой ReDim используйте команду P r e s e r v e : ReDim P r e s e r v e A s S t r i n g Уменьшая мере необходимости размеры массивов, вы сокращаете объем памя- ти, который требуется для выполнения вашей программы. 216 Часть IV. Основы создания кодов Если вы используете комбинацию команд P r e s e r v e для изменения размеров многомерного массива, повлиять можно только на размер последнего измерения. Допустим, был создан двухмерный массив: 5) As S t r i n g Теперь, вы хотите увеличить массив, сохранив прежние значения, изменить можно только размер последнего измерения: P r e s e r v e 17) As S t r i n g вы попытаетесь применить указанную комбинацию команд для увеличения размеров другого измерения (не последнего), Visual Basic воспримет это как и откажется выполнять ваше указание. Создание А что вам нужно сохранить различные связанные между собой данные в одном мес- те? Обычная переменная может хранить в каждый конкретный момент времени только одно значение. Массив может хранить цепочки связанных между собой значений, но вам нужна именно одна переменная с несколькими значениями одновременно. К счастью, в Visual Basic это можно сделать путем создания структуры данных, называемой (здесь не обойтись без тавтологии) структурой. Структуры и переменные Структура, по сути, объединяет в себе несколько переменных вне зависимости от их ти- пов данных. Чтобы создать структуру, нужно набрать такой код BASIC: End при необходимости создать структуру, содержащую имя, адрес и код клиента, наберите код: Имя As String Адрес As String As Integer End Structure Структуры относятся к пользовательским типам данных, поскольку после создания любой из них нужно создать и переменную, которая будет представлять эту структуру: As Чтобы создать переменную для представления структуры Клиент, наберите код: Эта строка говорит Visual Basic переменную Семенов, которая будет пред- ставлять структуру Данная структура содержит переменные Имя, Адрес и Глава 20. Создание структур данных 217 Чтобы получить возможность использовать структуру, нужно пройти два этапа: определить структуру; объявить переменную для представления этой структуры. Сохранение данных После того как будет создана структура и объявлена переменная, которая должна ее пред- ставлять, остается только присвоить этой переменной значения. Чтобы сделать это, нужно указать переменную, представляющую структуру, а через точку — ту переменную структуры, которой будет присвоено значение: НовоеЗначение Допустим, вы создаете следующую структуру: Structure Коты Public Имя As String Public Возраст As Integer Public Мальчик As Boolean End Structure забывайте, что структура создается в два этапа: вначале появляется сама структура, а затем объявляется переменная, которая будет эту структуру представлять. Поэтому следую- щим шагом должно быть объявление такой переменной: S t r u c t u r e Коты P u b l i c Имя As S t r i n g Возраст As I n t e g e r P u b l i c Мальчик As B o o l e a n End S t r u c t u r e Dim МойКот As Коты После того как будет объявлена переменная, представляющая структуру, можно присту- пить к сохранению данных. Для этого необходимо указать имя переменной, представляющей структуру, и имя переменной структуры, которой должно быть присвоено значение: Structure Коты Public Имя As String Public Возраст As Integer Public Мальчик As Boolean End Structure Dim МойКот As Коты = "Васька" = 3 = True Вот как Visual Basic интерпретирует эти коды. 1. В первых пяти строках создается структура Коты, состоящая из трех перемен- ных: Имя (тип String), Возраст (тип I n t e g e r ) и Мальчик (тип Boolean). 2. В шестой строке объявляется о создании переменной МойКот, которая будет 218 Часть IV. Основы создания кодов представлять структуру Коты. 3. В седьмой строке той части переменной которой соответствует на- звание присваивается значение 4. В восьмой строке части переменной которой соответствует название В о з р а с т , присваивается значение 3. 5. А в девятой строке части переменной МойКот, которой соответствует назва- ние Мальчик, присваивается значение T r u e . Относитесь к структуре как к одной переменной, которая, тем не менее, может со- держать сразу несколько значений. Комбинирование структур и массивов Структ>ры сами по себе не очень-то полезны. Поэтому многие программисты используют их в комбинации с массивами. Этот прием позволяет создавать массивы, содержащие не про- сто связанные, но и сгруппированные (а и правильно организованные) данные. Чтобы создать массив, состоящий из структур, нужно просто создать структуру, а затем объявить массив, типом данных которого будет созданная структура (это означает, что каж- дый элемент массива будет представлять собой структуру): Коты ic Аз Public Возраст Мальчик а End As Коты Как будет организован такой показано на рис. 20.4. структуры Structure Коты Имя String Возраст As Integer Мальчик As Boolean End Structure Объявление массива, состоящего из структур" Dim МоиКоты(З) As Коты Имя = "Васька" Возраст - 3 Мальчик = Имя = "Тишка" Возраст = 5 Мальчик = True Имя = "Мурка" Возраст = 2 Мальчик = False Имя = "Лева" Возраст = 1 Мальчик = True МоиКоты(2) МоиКоты(З) 20.4. Создав массив структур, можно правильно и эффективно органи- зовать связанные данные Глава 20. Создание структур данных 219 Коллекция — это специальная структура данных, работающая как супер-массив, который может расширяться до любых пределов и содержать в себе данные любых типов, начиная от строк и чисел и заканчивая другими массивами и структурами. Одна из проблем обычных массивов заключается в том, что если они имеют большие размеры, то для поиска сохраненных данных иногда приходится просто просматривать поочередно все их элементы. Один из вариантов решения этой проблемы— назначение специальных "ключей" для каждого сохраненного элемента данных. Каждый ключ представляет собой строку и является уни- кальным, что позволяет по его значению быстро найти нужный элемент коллекции. Чтобы создать коллекцию, нужно только объявить переменную, которая будет ее пред- ставлять: Dim Поставщики As New Эта строка говорит Visual Basic "Создай переменную, которая будет представлять коллекцию данных, и назови ее Добавление информации в коллекцию данных когда коллекция у нас уже имеется, можно приступать к созданию ее элементов. Для этого нужно указать само значение и уникальный ключ, по которому позднее можно будет най- ти это значение в коллекции данных. И данные, и ключ должны быть (тип S t r i n g ) . Код, добавляющий значение в коллекцию данных, должен выглядеть следующим образом: ( З н а ч е н и е , Ключ) Вместо слова Кол л е к ц и и наберите имя переменной, которая представляет эту кол- вместо слова уникальное (не совпадающее с другими ключами) текстовое значение, а вместо слова З н а ч е н и е — то значение, которое должно быть присвоено этому элементу (им может быть число, строка или другая структура данных). Так, если нужно добавить к коллекции Поставщики название и и по- ставьте ему в соответствие ключ наберите следующий код BASIC: Dim Поставщики As New ( " Б а т л е р к п а р т н е р ы " , " 1 3 " ) Если вам не нравится каждый раз брать ключ в кавычки, можете воспользоваться командой и преобразовать числовое значение в строку: Dim Поставщики As New Поставщики ( " Б а т л е р и Определение количества элементов коллекции Если вы уже что-то сохраняли в своей коллекции, то рано или поздно захотите проверить количество созданных элементов. Для этого достаточно набрать такой код BASIC: C o u n t Возвращаемое этим кодом число в точности соответствует текущему количеству элементов вашей коллекции. Чтобы запомнить его, создайте переменную и присвойте ей это значение: Dim X Integer X = 220 Часть IV. Основы создания кодов Это же число можно использовать как часть другого кода BASIC, например в цикле F o r - (он будет описан в главе 25): X I n t e g e r For X = 0 to Здесь может быть любой код Next X Чтение информации, сохраненной в коллекции Для того чтобы найти какое-нибудь значение, сохраненное в коллекции, нужно восполь- зоваться такой командой BASIC: Вместо буквы X наберите уникальный ключ, который соответствует нужному элементу. Так, если необходимо найти элемент коллекции Поставщики, которому соответствует ключ "13", наберите: Этим кодом будет возвращено значение элемента, сохраненного вместе с ключом Указанное значение потом можно будет присвоить какой-нибудь другой переменной или использовать для проведения вычислений в других кодах BASIC: НаПечать As S t r i n g Поставщики As New ("Батлер и НаПечать = В данном случае переменной НаПечать будет присвоено значение Б а т л е р и партнеры. Удаление данных из коллекции Удалить данные из коллекции еще проще, чем записать их туда. Для этого нужно всего лишь набрать такую команду BASIC: Как вы уже могли догадаться, вместо буквы X нужно набрать ключ элемента, подлежаще- го удалению Если из коллекции ПоставщикиГлава_20._Создание_структур_данных_221'> ]гужно удалить элемент, которому соответст- вует ключ ) Глава 20. Создание структур данных 221 Глава Борьба с ошибками Классификация ошибок > Стратегия поиска ошибок Ловушки для ошибок Ликвидация пойманных ошибок аже если вы напишете тысячи программ, все равно последующие ваши программы не будут застрахованы от ошибок, Можно неправильно написать слово или, скажем, забыть набрать какую-то команду. И как бы аккуратно и внимательно вы ни старались писать коды программы, вряд ли она будет работать так, как вам того хотелось бы. А то, что застав- ляет программу работать некорректно (или вообще не работать), называется Каждая созданная программа содержит ошибки, включая WordPerfect, Linux, Paint Shop Pro и Microsoft Windows XP. Основное различие между ошибками в вашей программе и ошибками в коммерческих продуктах заключается в том, что вам за исправление своих оши- бок никто платить не станет. А исправлять их придется в любом случае. Но не стоит расстраиваться. Многие ошибки вовсе не критичны. Они не могут остановить работу программы или испортить исходные данные; максимум, на что они способны, — это не- много замедлить выполнение программы, отобразить на экране не тот цвет или оттенок и т.п. Но существуют и более опасные ошибки. Так, говорят, что из-за программной ошибки не- давно взорвался один из спутников NASA. Причиной взрыва послужила какая-то одна непра- вильно набранная команда. Ничто не совершенно, поэтому каждая программа может содержать в себе ошибки. Даже про- граммисты-профессионалы с учеными степенями регулярно пишут несовершенные программы. Ошибки в программах — это жизненный факт. Они так же неизбежны, как тараканы на кухне. Вы никогда от них полностью не избавитесь, но постараться уничтожить их как можно больше вы просто обязаны. Чтобы ошибку ликвидировать, ее нужно сначала обнаружить. Если программа маленькая, наподобие той, которая отображает на экране окно H e l l o , w o r l d ! , у ошибок мало мест, где можно спрятаться. Но если это большая программа, ошибки могут быть повсюду, и найти их будет не легче, чем иголку в стоге сена. Врага нужно знать в лицо, поэтому, чтобы облегчить процесс поиска, программисты де- лят ошибки на три категории: $ синтаксические ошибки; рабочие ошибки; i логические ошибки. Глава Борьба с ошибками 223 Синтаксические ошибки Синтаксические ошибки обычно появляются при вводе кода, т.е. когда вы неправильно набираете какую-нибудь команду или ключевое слово. Например, если вы наберете I n t e g g e r вместо I n t e g e r , Visual Basic не зная, что означает слово I n t e g g e r , даже попытается продолжить выполнение программы. Когда Visual Basic сталкивается с такой ошибкой, он выделяет неправильно набран- ное слово, с тем чтобы вам легче было найти эту ошибку и устранить ее. Как только слово будет исправлено, программа снова станет рабочей. Если программа содержит хотя бы одну синтаксическую ошибку, она работать не будет. По- этому, как только ваша программа начнет функционировать, это будет означать, что синтаксиче- ских ошибок в ней точно нет. Теперь вас могут беспокоить только рабочие и логические ошибки. Рабочие ошибки Рабочие ошибки более хитрые и менее очевидные, чем синтаксические, поскольку могут быть обнаружены только в процессе выполнения программы, когда она сталкивается с дан- ными, которые не способна обработать. Программа может содержать массу таких ошибок, но вы даже не будете подозревать об их существовании до тех пор, пока она не пройдет испыта- ния в так называемых полевых условиях. Попробуем провести аналогию с повседневной жизнью. Представьте, что вы заходите в ресторан и на вопрос официанта "Что будете заказывать?" с серьезным видом от- вечаете: "Два билета до Хельсинки, пожалуйста". Вряд ли найдется официант, который сразу сможет адекватно отреагировать на ваши слова. Но поскольку это человек, а не компьютер, через некоторое время он что-нибудь да ответит. Компьютер же просто прекратит (зависнет или остановит выполнение программы). Вернемся опять к кодам BASIC и рассмотрим такой пример. Вот обычная формула, вы- числяющая какой-то результат: = / Этот код работает корректно до тех пор, пока переменная не принима- ет нулевое значение. Но поскольку делить на нуль нельзя, программа прекращает свою работу. Чтобы обнаружить все рабочие ошибки, вам нужно протестировать работу программы при любых мыслимых ситуациях: начиная с того, что кто-то нажимает не ту клавишу, и за- канчивая тем, что какой-то идиот в поле В о з р а с т набирает отрицательное значение. Поскольку количество возможных глупостей стремится к бесконечности (вспомните за- коны Мэрфи), теперь можно понять, почему каждая программа, тем более большая, в себе ошибки. (Интересно, как вы теперь будете себя чувствовать, находясь в самолете, ко- торый управляется бортовым компьютером?) Логические ошибки Самыми хитрыми и сложными с точки зрения устранения являются логические ошибки. Они случаются, если компьютер получает неправильную команду или если таковая входит в противоречие с другими командами. же т а к ? — удивитесь в ы . — Кто мог дать непра- вильную команду, если кроме меня никто эту программу не писал?" Верите вы этому или нет, но набрать ошибочную команду очень даже легко. Те, у кого есть дети-подростки, знают, что если попросить их убрать в своей комнате или купить что-нибудь к ужину, то они сделают это, но совсем не так. как вы это себе представ- ляли. Вместо того чтобы убрать грязную одежду в стиральную машину, а разные бумажки выбросить в мусорное ведро, они затолкают это все под кровать или просто в дру- гую комнату. А о том, что покупается к ужину, лучше вообще не вспоминать. 224 Часть Основы создания кодов В любом случае дети выполнят ваши инструкции, но проблема в том, что эти инструкции были недостаточно точны. Если оставить им возможность для свободной интерпретации по- лученных они обязательно 'этим воспользуются. Компьютер поступит точно так же. Поскольку вы что дали правильные инструкции, вы не можете отве- тить на вопрос, почему он некорректно работает. А это значит, что теперь нужно искать те команды, которые оказались для него недостаточно точными. Если программа большая, ско- рее вам придется просматривать в поисках ошибки все коды. Строка за строкой. (И скажите теперь, разве программирование не одно из самых приятных занятий?) за Обычно процесс поиска и ликвидации ошибок проходит четыре стадии. 1. Определение факта наличия ошибок в программе. 2. Поиск ошибок. 3. Поиск причин возникновения ошибок. 4. Ликвидация ошибок. Самое неприятное в этом процессе то, что, найдя и удалив одну ошибку, вы тем самым можете породить две или три новые. Теперь придется заново повторить весь процесс в поиске только что внесенных ошибок. Желаем удачи! А ли в программе ошибки? Лучший способ определить, есть ли в программе ошибки, — это дать попользоваться ею посторонним людям. (В мире коммерческих разработок программного обеспечения таких по- сторонних людей обычно называют покупателями.) больше вы найдете людей, согласных протестировать вашу программу, тем больше вероятность того, что будут найдены даже самые скрытые ошибки. В числе этих ошибок могут быть как те, из-за которых зависает компьютер, так и те, кото- рые просто возвращают недостаточно точный результат по причине, скажем, не- правильного округления десятичных дробей. После того как наличие ошибок в программе будет установлено, останется отследить и удалить их. (Программисты, которые с оптимизмом смотрят на вещи, называют найденные ошибки Поиск ошибок Во всем процессе ликвидации ошибок их поиска считается самым трудоемким. Наибо- лее способ (он же и наиболее рутинный) обнаружения места в программе, где засела ошибка,— это запустить программу и за шагом следить за процессом ее выполнения. В когда ошибка себя проявит, вы сможете точно определить место, где она прячется. Если маленькая, то такой путь вполне приемлем. Если же программа большая, вы окончательно испортить свою нервную систему. Есть альтернативный вариант. Исследуйте пошагово лишь ту часть программы, которая, по-вашему, может содержать ошибку. Например, если программа, выводит на печать не то, что ошибка, надо полагать, содержится в тех кодах программы, которые сообщают компьютеру, что должно быть напечатано. |