24 декабря Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!
Сап двач, есть одна Богиня. Не плохо было бы, если бы вы помогли отрыть больше её фоток (любых) и поделиться какой-то личной инфой о ней https://vk.com/vk_id3216666
>>561262 >>561300 Вот какие же вы говноеды. Хоть бы поделились со всеми. Сейчас еще деньги просить начнуть, типа 100 баксов - 10 фоток. Мамкины бизнесмены хуевы.
>>558713 Сука. Она отвратительна, но я не могу перестать фапать на нее. Ведь в этом образе все сделано так, что хочется ее трахать. Брать за волосы и грубо насаживать ее голову на член, пока она будет смотреть на тебя глазами без тени интеллекта; заставлять ее надрачивать тебе силиконовыми сиськами, чтобы потом обкончать все лицо; жестко трахать ее в зад, сжимая ягодицы так, что следы ладноей потом еще долго не сойдут; наконец, трахать ее сочную пизденку, пока она будет подмахивать кк последняя блядь, а потом кончить на плоский живот. Сукасукасука.
>>561686 Ну я же говорил что скоро набегут мамкины бизнесмены. А ты пруфни что ты нечто особенное знаешь, такое что никто из анонов не знает. Засцал, нищеброд?
>>561789 Два чаю. Даже не уникальная, но если это, например, не крупица, а хуева гора отобранной няшноты. Просто океан ее, съедающий у анонов месяцы, у кого то даже годы времени. И тут приходит васян из 8Б и начинает брызгать слюной, трясти кулачками и смешно сучить ножками ДАЙТИ ДАЙТИ СУКИ!!11 Просто ДАЙТИ. И ничего больше.
>>561808 Фотки из реала дегенерату я предоставил. Реальный город и место работы назвал, он требует всю инфу отдать вперёд, а заплатит он типа потом. Кто тут еще пиздабол?
>>561983 Это пиздабол знает инфу про неё которую я и так знал, не надо её лично знать для этого, и не говорит откуда фотки, замазывает их, ну и мразь же ты лживая.
>>564839 Какая у неё форма половой жизни? Есть постоянный парень/ постоянный парень + любовники (набор из телефонной книги под настроение, хорошие знакомые и пр.)/ постоянный парень + любовники + случайные связи/ частоменяющиеся постоянные парни/ частоменяющиеся постоянные парни + любовники/ частоменяющиеся постоянные парни + любовники + случайные связи/ только любовники и случайные связи.
залью ее фотки новые как зайду с компа, один хер их так просто не найти все бабки хотят ,а я за так выгружу эро и с лицом,анон!и прошу остальных не держать делитесь.
>>567457 Бро, если выложишь, будешь молодцом. Тут есть один даун, который и в /fag/ ее новые фотки выкладывает и ИТТ, и просит за пак денег >>561686 . Если ты выложишь, то он обосрется однозначно, всосет хуйца. Так что вся надежа на тебя бро, никого не слушай, и выкладывай. Эта шкура все равно никому не нужна кроме 1.5 анона. Никто даже качать не будет, пару раз скачают и все.
блядь в том то и дело с пк нет выбора ответить в тред!сука пичаль,короче есть фото еще с тех пор когда она была на профиле РИТА ПРОНЬКИНА пилила сигны на заказ так у меня есть и даже это фотэ кенту запилила в л/с сливала ,я проверил нет не на одном паке и сайте этой фото!так что экслюзив гарантирую + совсем новенькие не светившиеся в нэте.как руки дойдут.
https://vk.com/id249508328 надо что то пиши, предоставь тоже. Я своё доказал что имею то что не найти.Кто желает поделиться инфой пишите ей в вк адрес который я оставил.или обмен.
как нибудь ещё посливаю . я знаю людей у которых есть фотографии её мне предоставили часть большую свежего но не всё , и эти люди тту есть . пусть сливают.
>>567884 Бро. Ну так а что делать тем у кого вообще нет паков с ней? Ты же предложил выложить пак с ней в этом посте, >>567457 . А потом ты предлагаешь тем у кого есть паки поделиться? Зачем делиться тому у кого и так все фотки с ней есть? Если бы люди были такими добрыми, как ты думаешь, кто-нибудь давно уже выложил бы все фото с ней в тред, но как видишь никто и не собирается это делать. А анон который ничего не имел изначально, ему нечего тебе предложить. В конечном итоге, так никто ни с чем и останется. Когда руки дотянутся до компа выкладывай пак в сеть, тогда 5 анонов, которые имеют к ней интерес скачают его. И тогда уже сами будут решать, как делиться с другими. А так фотки есть не у многих, это ты да и еще один хуй ИТТ, который ничего никому не даст. На тебя единственная надежда!
>>568581 Ага. А сейчас ты продолжишь этим хвастаться и будешь вымогать деньги за информацию о ней. Которой у тебя то и нет. Мамкин бизнесмен. Тебе до нее расти и расти в развитии.
Со мной в старших классах училась одна похожая на нее внешне, только срандель да губищи поменьше были. Тянка была жуткой шлюхой- если у тебя есть бабло сгонять в киношку и подарить ей какую-то хуйню- она тебе соснет, инфа 146%. За более щедрые подарки с твоей стороны следовали более щедрые подарки с ее стороны.
>>558713 Ни тени интеллекта в её глазах, нечеловеческие пропорции, фотографирование себя любимой в зеркало... На вкус и цвет фломастеры разные, но это какой-то хуёвый фломастер.
>>571681 Вообще не круче. Большая грудь это кул, но надо же и меру знать. Её бюст уже просто смешон. Губу верхнюю накачала ужасно, ну а в остальном похоже норм
>>573482 Больше бугурта ребята - очевидно же что вы в своей зависти и желании даже не можете сами себе признаться в этом :)) Жалкие трусливые ничтожества :3
просто шлюха никому не нужна давно не интересная никем ,кому она нужна 10 школотронам фапающим на её жир?ничем не выдающаяся овца , которая загоняет как малолетка свои фотки за деньги которых они не стоят, просто уёбище никчёмное , горстка лохов неудачников бегает её фотки собирает и дрочит на них, ебёться в реале за спонсорство и отсасывает по гланды видя купюру) и какие то дауны сидят ещё за неё базарят пфф
просто шлюха никому не нужна давно не интересная никем ,кому она нужна 10 школотронам фапающим на её жир?ничем не выдающаяся овца , которая загоняет как малолетка свои фотки за деньги которых они не стоят, просто уёбище никчёмное , горстка лохов неудачников бегает её фотки собирает и дрочит на них, ебёться в реале за спонсорство и отсасывает по гланды видя купюру) и какие то дауны сидят ещё за неё базарят пфф
>>575177 >>574975 >>574534 >>574430 >>574337 >>574318 >>574049 >>574294 >>573780 >>573658 просто шлюха никому не нужна давно не интересная никем ,кому она нужна 10 школотронам фапающим на её жир?ничем не выдающаяся овца , которая загоняет как малолетка свои фотки за деньги которых они не стоят, просто уёбище никчёмное , горстка лохов неудачников бегает её фотки собирает и дрочит на них, ебёться в реале за спонсорство и отсасывает по гланды видя купюру) и какие то дауны сидят ещё за неё базарят пфф
видали в аске ей кто то написал "Привет. Я живу в одном городе с тобой и видел как ты в обнимку с тощим маленьким рыжим дрищом шла прыщавым... Сколько он тебе заплатил?"
сборище тупорылых прыщавых уебков, которые ничего обо мне не знают но упорнто утверждают что из интересов у меня только сладенькое и инстаграм )))бляяя какие вы тут все смешные.И харэ уже фото мои тут постить , уебки никчемные, крысу,которая таскала их сюда,я вычислила уже, а вы сосите хуец тут все дружно, выблядки хахаххаха
с удовольствием пообщаюсь с каждым из вас, посмотрю на ваши жирные прыщавые еблеты , послушаю ваши ахуительные истории, так что не стесняйтесь. И да, отвечать все людям , которые обо мне хорошо отзываются "Рита залогинься" - что за тупизм ?? Я не могу нравится другим людям ?Если я прихожу, то я не скрываюсь за анонимным постм, а пишу что это я. Тупорылые твари.
>>578355 омг какая разница что тут оно само выставляет ник "аноним"?)))) я сама пишу что это я, так что распечатай эту картинку на дешевом принтере, сверни трубочкой и засунь себе в свой пышный зад
Как блядь можно быть такими тупыми мразями!!!11 не хуй тут мою личную жизнь обсуждать!!! У вас вобще некого нет, вот вы и бесетесь мрази!!!11 И вообще, какая разнеца, какой цвет волос у парня.
>>578404 кто-кто , прости ?Матерые долбоебы ?) ЕБАТЬ ВЫ СМЕШНЫЕ И ЖАЛКИЕ ТУТ.ПРИШЕЛ ВАШ КУМИР СОБСТВЕННОЙ ПЕРСОНОЙ , К КАКИМ НАХУЙ ШКОЛЬНИКАМ ТЫ ТУТ ОБРАЩАЕШЬСЯ ?ВЫСЕР - ЭТО ТО , ЧТО В ТВОЕЙ БАШКЕ НАХОДИТСЯ
пришел какой то левый человек и сделал мне комплимент либо же хорошо отозвался -"РИТА ЗАЛОГИНЬСЯ, 111111!!!!" ,пришла сама Рита - "Да не она это,у меня доказательства есть!!!1111" блять ...у меня..просто..нет..слов..я..в ..ахуе..от...вашей..тупости..и..противоречия
>>578243 Чувак она просто траллит. А ты веришь ей и бомбишь что она "выбрала" не тебя-братуху-альфача-ахмэда, а какого то худого дрыща, задрота. Даже если это и правда, то ничего нового, а всего лишь вселенский закон. Баба хороша и ебабельна - парень дрыщь, 150 см в росте, прыщавый. Парень широкоплечий, высокий, стройный, смазливый - баба мелкая, высохшая, корявая. Жи есть.
>>578415 >>578686 Шкальник, ты совсем тупой. Говорю же, уёбывай вконтактик, там полно долбоёбов, которые тебе поверят. Здесь таких не водится. но я сегодня добрый и подскажу тебе, как всех затралеть. Пишешь этой тупой пизде, с ОП-пика, просишь её сфоткаться с сапом и сиськами за денужку. И вот, у тебя оригинальный пик, ты теперь РИТА КОНОПЛЯНОВА, ололо, ты всех затралела на самом деле затралел только себя, потому что проебал деньги, на которые мог бы купить мороженку Ленке из параллельного класса и, может быть, поняшиться с живой тян
>>562154 Почаны, я может что-то пропустил, но неужели никто не заметил что в паке да и в этом треде смешаны две абсолютно разные тян? Разная форма губ, разная форма носа/лба, разный размер груди + разные ареолы. Я конечно допускаю, что она могла сделать пластику и все такое, но больше склоняюсь к тому что это разные сельди.
>>579029 Господи, кто-то должен это был уже написать. Она трансуха, на обеих фотках она, справа до пластики. Вот это подпиливание надбровной дуги черепа одна из самых дорогих операций, которые трансухи делают. Кто-то нормально вложился
>>579044 Завидуешь что у нее богатый папенька/парень или то что она сама много зрабатывает и может такое позволить? Че то я сомневаюсь что это прям пиздец дорогая операция. Все пластические операции дорогие. Плюс похоже на то что это не череп пилили, а переносицу слегка спилили вовнутрь.
Неудачная - это когда все пошло не так, как предполагалось. Предполагалось, что дырочки будут маленькие и зарастут. Но получилось иначе, получилось НЕУДАЧНО, дурочки и ткани воспалились, зарастать не стали, а напротив, начали отмирать и поэтому увеличились, а не уменьшились.
>>579115 ты ебунтое дурко ... беда у тебя с имплантом мозга!Тупица, если не разбираешься то молчи.И нехер мне тут операции приписывать.Смешно читать твой бред, какое же ты ебанько!Иди убейся!!
>>579044 трансуха это твоя мамаша убогая, переделалась в мужика что бы не подумал никто что она , точнее он родил такое ебанько КАК ТЫ... иди жри собачье говно, тупорылая тварь )))
о боже вам самим не противно?Сидят какие то уебки обсуждают мою попу. Судя по всему,у вас в жизни у всех совсем хуево да ?) Какие импланты, какие спиливания, мне это смешно читать потому что ничего этого и не было.Просто смешны ваши догадки,надо это скринить...
>>579340 >>579341 >>579343 >>579338 Чувак неплохо разбирается в ее лексиконе. Слишком подозрительно, но если почитать ee ascbook, то можно набрать скилла. Но мы то с вами знаем в чем тут дело. Жирный девственник за 30, которого дома никто не ждет кроме жирной, старой мамки. Дрочащий на свою бАгиню до дыр, из-за чего почти полностью слился с ней сущностью в виде гномика, считая что он - это она. Ведь так приятнее - дрочить на самого себя. Уже записался на операцию по увеличению груди, жопы и всевозможным спиливаниям, сверлениям, строганиям и долблению стамеской.Ты ведь тоже это делала, зачем скрывать? Никакими техниками и заветами Аматуе по расчехлению чакр, таких упругих сисек, смены формы носа и фигуры не добится
>>579366 ты долбоебушка ?)))Или в вк подтвердить,что я тут пишу ?)))сосни уже наконец, любому могу подтвердить,что я пишу здесь, в вконтакте.Но вы же зассыте мне написать.
>>579383 о господи хватит тут пиздеть про мой лексикон и обсуждать меня, выясняя я это или не я,какие у меня операции - вон дверь, вон нахуй. Убирайтесь отсюда все,быстро блять.Вы меня бесите.
>>579396 >>579395 А мне нравится как ты бомбишь, думая что перекричишь или переубедишь нас, заставишь плакаться в жилетку, осознать наше "ничтожное" существование. Не выйдет. Это двач. Давай признайся шлюха, кто слил инфу тебе тред.
>>579400 пфф рот свой будешь открывать на уровне ширинки бомжей..сука тупая. Написать слабо вам всем!Потому что вы сосунки, которые могут тявкать только анонимно
ммм как вы зассали все мне написать в вк, аж противно от таких нещасных сосунков как вы. Ахахахаха)))какие же вы ничтожные,даже противно отвечать вам.Фу блять. В реале бы такими смелыми были,там и тявкнуть лишний раз боитесь.
эпичный долбоёб пилит через фотожоп что якобы Сиськастая пилит на стену подтверждение , но там нихуя нет))) и скринит её страницу со своей зайдя к ней ну сука ебантей ты жёстко спалился лол , ты в натуре фуфельный
что за человек такой опущенный что себя её представляет и отписываеться сюда ахахах, ей в хуй не в пёрлось сюда заходить и читать этот бред однажды я её задавал этот вопрос. но факт что ей в личку кидают этот тред постоянно читать )
>>579492 Ты чуть опоздал. Там это было. Сейчас она придет и смешает тебя с говном >>579493 Ты сам то понял что написал, петушок? Попизди мне еще тут что знаешь ее.
>>579498 я с ней переписывался достаточно не мало в прошлом месяце задавал вопросы разного типа , даже если не соврать скинула несколько фоток в переписку , я могу и сейчас написать ей и спросить постит ли она посты и прикрепить сюда скриншот дружок)
>>5795>>579508 мне от тебя только нужны свежие пикчи а твоя жизнь и кто ты и что мне похуй , я на них зарабатываю не мало)а так ты просто шлюха дешёвая
Тред закрывайте , сейчас все маменькины сынки начнут плакать что их Ритку отпидарасили и они лишились фоток азазаазаззаз , сука чё за нытики , ну и хуй с ней есть няшки пободрее)
>>579508 Но зачем только избранным? Тут ведь собрались фаны твоей красоты, в чём смысл кидать фотки только некоторым, если раньше ты скидывала всем проходимцам?
Знаете, пусть Рита и запостила на стене фразу, но по стилистике письма пишет явно не она. Такого неистовства и обилия оскорблений я у неё не видел. Похоже, что какой-то её друг тут издевается, и они вместе там ржут.
>>579581 нахуй идут все здесь - конская залупа в лице тебя, хейтеры, защитники , проходимцы, которые клянчат фото. Вы больше нихуя не получите. Смысла писать тут и кудахтать вам больше нет,ясно? И блять хватит уже устраивать эти выяснения,!!!! заткнулись все,я сказала!!!!!!!Просто заглохните уже,выблядки.
Вообще, Где свежие фото с раздербаненной пиздой этой суки? Где групповуха с негроидами, которые жарят Риту в её ароматную сраку? Где просто, наконец, ебаные фото голышом? Собиритесь, купите ей негров и запилите с ней порно, раз такие фонаты ебанные, и сюда его запостите. А то только и перетираете шелуху своей спермы. Сажи говноедам.
Зайчики, этот придурок выше - это не я. Мне кинулы ссылку на этот бред, ну больные люди, зачем только мной представлятся я не пойму. Короче ну его нахуй,надо просто не обращать внимания на таких людей.
Нет, я увидел пост на её станице. Он довольно дорого провисел. Но в теории её кто-то из друзей мог попросить запостить ради лулзов. Хотя судя по дальнейшему диалогу ясно что тут сидит рита, хоть и очень не типично оскорбляющая всех подряд
>>580134 да вот парень попросил фотографий её я думаю чего жадничать ведь на дваче принято приходить с контентом . посмотрел по треду а фоток нет тут таких вот и решил выложить.
>>580149 Ну она их всем в лс кидала, всем кто просил)) Так что они почти у всех есть. А действительно чего то редкого, что она кидала за бабки или близким у тебя нету, потому что ты голодранец))
Глава 2. Языковые Конструкции массив с пятью элементами будет иметь элементы пронумерованные от 0 до 4. Используйте ключевые слова Option Base 1, чтобы изменить значение по умолчанию для нижней границы массива и начинать нумерацию с 1, а не с 0. Это должно быть сделано перед любым другим выполняемым оператором в программе. Option Base { 0 | 1 } Совет Определяй нижнюю границу массива вместо того, чтобы полагаться на поведение по умолчанию. Это более переносимо, и не будет изменяться, при использовании оператора Option Base. Dim a(3) предоставляет четыре элемента: (0), (1), (2), и (3). Оператор Option Base не изменяет число элементов, которые может хранить массив; он изменяет только индексацию. Используя Option Base 1, тот же самый оператор все еще предоставляет четыре элемента: (1), (2), (3), и (4). Я считаю это поведение неинтуитивным и рекомендую не использовать Option Base. Если Вы хотите определенные границы массива, более предпочтительным является явное объявление границ массива. Например, Dim a(1 To 4). Option Base имеет проблемы, связанные с ясностью документирования и обеспечением переносимости. Совместимость В Visual Basic обращается с Option Base 1 по-другому чем OOo Basic. VB изменяет нижнюю границу на 1, но не изменяет связанную верхнюю границу. Visual Basic .NET больше не поддерживает Option Base. Когда OOo Basic поддерживает Option Compatible, тогда Option Base 1 не увеличивает верхнюю границу на 1. Другими словами, OOo Basic будет действовать как VB. Получение доступа и изменение значений в массиве просты (см. Листинг 19). Инициализация массива этим путем утомительна. Листинг 19: ExampleSimpleArray1 может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleSimpleArray1 Dim a(2) As Integer, b(-2 To 1) As Long Dim m(1 To 2, 3 To 4) REM Did you know that multiple statements can be placed REM on a single line if separated by a colon? a(0) = 0 : a(1) = 1 : a(2) = 2 b(-2) = -2 : b(-1) = -1 : b(0) = 0 : b(1) = 1 m(1, 3) = 3 : m(1, 4) = 4 m(2, 3) = 6 : m(2, 4) = 8 Print "m(2,3) = " & m(2, 3) Print "b(-2) = " & b(-2) End Sub Чтобы быстро заполнять массив Variant, используйте функцию Array (см. Листинг 20), который возвращает массив Variant со включенными данными (см. Рис. 20). Функции LBound и Ubound возвращаются нижнюю и верхнюю границы массива, соответственно. Процедуры, поддерживаемые OOo Basic сведены в Таблицу 11 и подробнее обсуждаются далее. Таблица 11. Краткое описание подпрограмм и функций, связанных с массивами. Функция Описание Array(args) Возвращает массив Variant, который содержит аргументы. DimArray(args) Возвращает пустое массив Variant. Аргументы определяют размерность. IsArray(var) Возвращает True, если указанная переменная - массив, False в противном случае. - 40 - Массивы Join(array) Join(array, delimiter) Объединяет элементы массива, разделяемые дополнительным строковым разделителем и возвращает как строку. Разделитель по умолчанию — один пробел. Lbound(array) LBound(array, dimension) Возвращает нижнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. ReDim var(args) As Type Изменяет размерность массива, используя тот же самый синтаксис что и оператор DIM. Ключевое слова Preserve сохраняет существующие данные неповрежденными. Split(str) Split(str, delimiter) Split(str, delimiter, n) Разбивает строковый аргумент, превращая его в массив строк. Разделитель по умолчанию — пробел. Дополнительный аргумент “n” ограничивает число возвращаемых строк. Ubound(array) UBound(array, dimension) Возвращает верхнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. Рис. 20. В одном и том же массиве содержатся различные типы переменных. Листинг 20: ExampleArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleArrayFunction Dim a, i%, s$ a = Array("Zero", 1, Pi, Now) Rem Строка, Целое число, Число двойной точности, Дата For i = LBound(a) To UBound(a) s$ = s$ & i & " : " & TypeName(a(i)) & " : " & a(i) & CHR$(10) Next MsgBox s$, 0, "Example of the Array Function" End Sub Переменную, определенную как массив, но для которой не указаны размерности, например Dim a(), называют пустым массивом. Тест на пустой массив, равенство верхней границы массива с нижней границей. Если верхняя граница меньше чем нижняя граница, Вы имеете пустой массив, для которого не были установлены никакие размерности. Множество, для которого было заданы размерности, например Dim a (5), не пуст. Возможно сослаться на весь массив. Например, во Листинге 20, оператор Lbound(a) возвращает нижнюю границу массива a(). Массив, объявленный с заданными размерностями должен всегда сопровождаться круглыми скобками (). Например, переменная b() в Листинге 21 должна использоваться как b(). Массив, объявленный без указания размерностей может быть записан с или без замыкающих круглых скобок. Например, переменная a() в Листинге 21 может использоваться как или a или a(). Листинг 21. Круглые скобки не всегда требуются, но всегда допустимы. Sub ArrayDimensionError Dim a(), b(1 To 2), c REM Valid constructs LBound(a()) : LBound(a) : LBound(b()) : LBound(c()) : Lbound(c) REM Неверное использование LBound(b) приводит к ошибке во время выполнения REM Не соответствуют спецификации размерностей LBound(b) End Sub - 41 - Глава 2. Языковые Конструкции Изменение размера массива Требуемый размер массива не всегда заранее известен. Иногда размер известен, но он периодически изменяется, и код должен изменяться. Переменная массива может быть объявлена с или без определения размера. OOo Basic предоставляет несколько различных методов для установки или изменения размера массива. Функция Array порождает массив Variant, который содержит данные. Это быстрый способ инициализировать массив. Вы не обязаны устанавливать размер массива, но если Вы это сделали, то он изменится на соответствующий массиву, возвращенному функцией Array. Dim a() a = Array(3.141592654, "PI", 9.81, "Gravity") Аргументы передают функции Array данные, которыми становятся, возвращаемые в массиве Variant. Функция DimArray, с другой стороны, интерпретирует аргументы как размары массива для его создания (см. Листинг 22). Аргументами может быть выражение, таким образом может использоваться переменная для установки размера. Листинг 22: ExampleDimArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleDimArray Dim a(), i% a = Array(10, 11, 12) Print "" & LBound(a()) & " " & UBound(a()) Rem 0 2 a() = DimArray(3) REM то же самое, что Dim a(3) a() = DimArray(2, 1) REM то же самое, что Dim a(2,1) i = 4 a = DimArray(3, i) Rem то же самое, что a(3,4) Print "" & LBound(a() ,1) & " " & UBound(a() ,1) Rem 0, 3 Print "" & LBound(a() ,2) & " " & UBound(a() ,2) Rem 0, 4 a() = DimArray() REM пустой массив End Sub Функции Array и DimArray обе возвращают массив Variant. Оператор ReDim изменяет размер существующего массива. Он может изменить и отдельное измерение и количество измерений. Аргументами могут быть выражения, потому что оператор ReDim определяет размеры во время выполнения. Dim e() As Integer, i As Integer i = 4 ReDim e(5) As Integer REM 0 To 5 является правильным ReDim e(3 To 10) As Integer REM 3 To 10 является правильным ReDim e(3, i) As Integer REM (0 To 3, 0 To 4) является правильным Совет Хотя Lbound и UBound не работают с пустым массивом возвращенным DimArray(), потому что массив не имеет измерений, оба метода будут работать с пустыми массивами в OOo 2.0. Пустой массив имеет одно измерение, нижняя граница — ноль, а верхняя граница — -1. Используйте ReDim, чтобы существующий массив стал пустым. Оператор ReDim поддерживает ключевое слово Preserve. Оно пытается сохранить данные, когда изменяются размеры массива. Увеличение размера массива должно сохранить все данные, но уменьшение размера приводит к потере части данных вследствие усечения. Данные могут быть обрезанными с обоих концов. Если элемент из нового массива существовал в старом, значение не изменяется. В отличие от некоторых вариантов BASIC, OOo Basic позволяет изменять все измерения массива с сохранением данных. Dim a() As Integer ReDim a(3, 3, 3) As Integer a(1, 1, 1) = 1 : a(1, 1, 2) = 2 : a(2, 1, 1) = 3 ReDim preserve a(-1 To 4, 4, 4) As Integer Print "(" & a(1, 1, 1) & ", " & a(1, 1, 2) & ", " & a(2, 1, 1) & ")" ReDim определяет и измерения и тип. Тип, определяемый оператором ReDim должен соответствовать, типу заданному при объявлении переменной. Если типы будут отличаться, - 42 - Массивы то Вы увидите ошибку компиляции “Переменная уже определена”. В Листинге 23 приведена вспомогательная функция, которая принимает простой массив и
Глава 2. Языковые Конструкции массив с пятью элементами будет иметь элементы пронумерованные от 0 до 4. Используйте ключевые слова Option Base 1, чтобы изменить значение по умолчанию для нижней границы массива и начинать нумерацию с 1, а не с 0. Это должно быть сделано перед любым другим выполняемым оператором в программе. Option Base { 0 | 1 } Совет Определяй нижнюю границу массива вместо того, чтобы полагаться на поведение по умолчанию. Это более переносимо, и не будет изменяться, при использовании оператора Option Base. Dim a(3) предоставляет четыре элемента: (0), (1), (2), и (3). Оператор Option Base не изменяет число элементов, которые может хранить массив; он изменяет только индексацию. Используя Option Base 1, тот же самый оператор все еще предоставляет четыре элемента: (1), (2), (3), и (4). Я считаю это поведение неинтуитивным и рекомендую не использовать Option Base. Если Вы хотите определенные границы массива, более предпочтительным является явное объявление границ массива. Например, Dim a(1 To 4). Option Base имеет проблемы, связанные с ясностью документирования и обеспечением переносимости. Совместимость В Visual Basic обращается с Option Base 1 по-другому чем OOo Basic. VB изменяет нижнюю границу на 1, но не изменяет связанную верхнюю границу. Visual Basic .NET больше не поддерживает Option Base. Когда OOo Basic поддерживает Option Compatible, тогда Option Base 1 не увеличивает верхнюю границу на 1. Другими словами, OOo Basic будет действовать как VB. Получение доступа и изменение значений в массиве просты (см. Листинг 19). Инициализация массива этим путем утомительна. Листинг 19: ExampleSimpleArray1 может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleSimpleArray1 Dim a(2) As Integer, b(-2 To 1) As Long Dim m(1 To 2, 3 To 4) REM Did you know that multiple statements can be placed REM on a single line if separated by a colon? a(0) = 0 : a(1) = 1 : a(2) = 2 b(-2) = -2 : b(-1) = -1 : b(0) = 0 : b(1) = 1 m(1, 3) = 3 : m(1, 4) = 4 m(2, 3) = 6 : m(2, 4) = 8 Print "m(2,3) = " & m(2, 3) Print "b(-2) = " & b(-2) End Sub Чтобы быстро заполнять массив Variant, используйте функцию Array (см. Листинг 20), который возвращает массив Variant со включенными данными (см. Рис. 20). Функции LBound и Ubound возвращаются нижнюю и верхнюю границы массива, соответственно. Процедуры, поддерживаемые OOo Basic сведены в Таблицу 11 и подробнее обсуждаются далее. Таблица 11. Краткое описание подпрограмм и функций, связанных с массивами. Функция Описание Array(args) Возвращает массив Variant, который содержит аргументы. DimArray(args) Возвращает пустое массив Variant. Аргументы определяют размерность. IsArray(var) Возвращает True, если указанная переменная - массив, False в противном случае. - 40 - Массивы Join(array) Join(array, delimiter) Объединяет элементы массива, разделяемые дополнительным строковым разделителем и возвращает как строку. Разделитель по умолчанию — один пробел. Lbound(array) LBound(array, dimension) Возвращает нижнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. ReDim var(args) As Type Изменяет размерность массива, используя тот же самый синтаксис что и оператор DIM. Ключевое слова Preserve сохраняет существующие данные неповрежденными. Split(str) Split(str, delimiter) Split(str, delimiter, n) Разбивает строковый аргумент, превращая его в массив строк. Разделитель по умолчанию — пробел. Дополнительный аргумент “n” ограничивает число возвращаемых строк. Ubound(array) UBound(array, dimension) Возвращает верхнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. Рис. 20. В одном и том же массиве содержатся различные типы переменных. Листинг 20: ExampleArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleArrayFunction Dim a, i%, s$ a = Array("Zero", 1, Pi, Now) Rem Строка, Целое число, Число двойной точности, Дата For i = LBound(a) To UBound(a) s$ = s$ & i & " : " & TypeName(a(i)) & " : " & a(i) & CHR$(10) Next MsgBox s$, 0, "Example of the Array Function" End Sub Переменную, определенную как массив, но для которой не указаны размерности, например Dim a(), называют пустым массивом. Тест на пустой массив, равенство верхней границы массива с нижней границей. Если верхняя граница меньше чем нижняя граница, Вы имеете пустой массив, для которого не были установлены никакие размерности. Множество, для которого было заданы размерности, например Dim a (5), не пуст. Возможно сослаться на весь массив. Например, во Листинге 20, оператор Lbound(a) возвращает нижнюю границу массива a(). Массив, объявленный с заданными размерностями должен всегда сопровождаться круглыми скобками (). Например, переменная b() в Листинге 21 должна использоваться как b(). Массив, объявленный без указания размерностей может быть записан с или без замыкающих круглых скобок. Например, переменная a() в Листинге 21 может использоваться как или a или a(). Листинг 21. Круглые скобки не всегда требуются, но всегда допустимы. Sub ArrayDimensionError Dim a(), b(1 To 2), c REM Valid constructs LBound(a()) : LBound(a) : LBound(b()) : LBound(c()) : Lbound(c) REM Неверное использование LBound(b) приводит к ошибке во время выполнения REM Не соответствуют спецификации размерностей LBound(b) End Sub - 41 - Глава 2. Языковые Конструкции Изменение размера массива Требуемый размер массива не всегда заранее известен. Иногда размер известен, но он периодически изменяется, и код должен изменяться. Переменная массива может быть объявлена с или без определения размера. OOo Basic предоставляет несколько различных методов для установки или изменения размера массива. Функция Array порождает массив Variant, который содержит данные. Это быстрый способ инициализировать массив. Вы не обязаны устанавливать размер массива, но если Вы это сделали, то он изменится на соответствующий массиву, возвращенному функцией Array. Dim a() a = Array(3.141592654, "PI", 9.81, "Gravity") Аргументы передают функции Array данные, которыми становятся, возвращаемые в массиве Variant. Функция DimArray, с другой стороны, интерпретирует аргументы как размары массива для его создания (см. Листинг 22). Аргументами может быть выражение, таким образом может использоваться переменная для установки размера. Листинг 22: ExampleDimArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleDimArray Dim a(), i% a = Array(10, 11, 12) Print "" & LBound(a()) & " " & UBound(a()) Rem 0 2 a() = DimArray(3) REM то же самое, что Dim a(3) a() = DimArray(2, 1) REM то же самое, что Dim a(2,1) i = 4 a = DimArray(3, i) Rem то же самое, что a(3,4) Print "" & LBound(a() ,1) & " " & UBound(a() ,1) Rem 0, 3 Print "" & LBound(a() ,2) & " " & UBound(a() ,2) Rem 0, 4 a() = DimArray() REM пустой массив End Sub Функции Array и DimArray обе возвращают массив Variant. Оператор ReDim изменяет размер существующего массива. Он может изменить и отдельное измерение и количество измерений. Аргументами могут быть выражения, потому что оператор ReDim определяет размеры во время выполнения. Dim e() As Integer, i As Integer i = 4 ReDim e(5) As Integer REM 0 To 5 является правильным ReDim e(3 To 10) As Integer REM 3 To 10 является правильным ReDim e(3, i) As Integer REM (0 To 3, 0 To 4) является правильным Совет Хотя Lbound и UBound не работают с пустым массивом возвращенным DimArray(), потому что массив не имеет измерений, оба метода будут работать с пустыми массивами в OOo 2.0. Пустой массив имеет одно измерение, нижняя граница — ноль, а верхняя граница — -1. Используйте ReDim, чтобы существующий массив стал пустым. Оператор ReDim поддерживает ключевое слово Preserve. Оно пытается сохранить данные, когда изменяются размеры массива. Увеличение размера массива должно сохранить все данные, но уменьшение размера приводит к потере части данных вследствие усечения. Данные могут быть обрезанными с обоих концов. Если элемент из нового массива существовал в старом, значение не изменяется. В отличие от некоторых вариантов BASIC, OOo Basic позволяет изменять все измерения массива с сохранением данных. Dim a() As Integer ReDim a(3, 3, 3) As Integer a(1, 1, 1) = 1 : a(1, 1, 2) = 2 : a(2, 1, 1) = 3 ReDim preserve a(-1 To 4, 4, 4) As Integer Print "(" & a(1, 1, 1) & ", " & a(1, 1, 2) & ", " & a(2, 1, 1) & ")" ReDim определяет и измерения и тип. Тип, определяемый оператором ReDim должен соответствовать, типу заданному при объявлении переменной. Если типы будут отличаться, - 42 - Массивы то Вы увидите ошибку компиляции “Переменная уже определена”. В Листинге 23 приведена вспомогательная функция, которая принимает простой массив
Глава 2. Языковые Конструкции массив с пятью элементами будет иметь элементы пронумерованные от 0 до 4. Используйте ключевые слова Option Base 1, чтобы изменить значение по умолчанию для нижней границы массива и начинать нумерацию с 1, а не с 0. Это должно быть сделано перед любым другим выполняемым оператором в программе. Option Base { 0 | 1 } Совет Определяй нижнюю границу массива вместо того, чтобы полагаться на поведение по умолчанию. Это более переносимо, и не будет изменяться, при использовании оператора Option Base. Dim a(3) предоставляет четыре элемента: (0), (1), (2), и (3). Оператор Option Base не изменяет число элементов, которые может хранить массив; он изменяет только индексацию. Используя Option Base 1, тот же самый оператор все еще предоставляет четыре элемента: (1), (2), (3), и (4). Я считаю это поведение неинтуитивным и рекомендую не использовать Option Base. Если Вы хотите определенные границы массива, более предпочтительным является явное объявление границ массива. Например, Dim a(1 To 4). Option Base имеет проблемы, связанные с ясностью документирования и обеспечением переносимости. Совместимость В Visual Basic обращается с Option Base 1 по-другому чем OOo Basic. VB изменяет нижнюю границу на 1, но не изменяет связанную верхнюю границу. Visual Basic .NET больше не поддерживает Option Base. Когда OOo Basic поддерживает Option Compatible, тогда Option Base 1 не увеличивает верхнюю границу на 1. Другими словами, OOo Basic будет действовать как VB. Получение доступа и изменение значений в массиве просты (см. Листинг 19). Инициализация массива этим путем утомительна. Листинг 19: ExampleSimpleArray1 может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleSimpleArray1 Dim a(2) As Integer, b(-2 To 1) As Long Dim m(1 To 2, 3 To 4) REM Did you know that multiple statements can be placed REM on a single line if separated by a colon? a(0) = 0 : a(1) = 1 : a(2) = 2 b(-2) = -2 : b(-1) = -1 : b(0) = 0 : b(1) = 1 m(1, 3) = 3 : m(1, 4) = 4 m(2, 3) = 6 : m(2, 4) = 8 Print "m(2,3) = " & m(2, 3) Print "b(-2) = " & b(-2) End Sub Чтобы быстро заполнять массив Variant, используйте функцию Array (см. Листинг 20), который возвращает массив Variant со включенными данными (см. Рис. 20). Функции LBound и Ubound возвращаются нижнюю и верхнюю границы массива, соответственно. Процедуры, поддерживаемые OOo Basic сведены в Таблицу 11 и подробнее обсуждаются далее. Таблица 11. Краткое описание подпрограмм и функций, связанных с массивами. Функция Описание Array(args) Возвращает массив Variant, который содержит аргументы. DimArray(args) Возвращает пустое массив Variant. Аргументы определяют размерность. IsArray(var) Возвращает True, если указанная переменная - массив, False в противном случае. - 40 - Массивы Join(array) Join(array, delimiter) Объединяет элементы массива, разделяемые дополнительным строковым разделителем и возвращает как строку. Разделитель по умолчанию — один пробел. Lbound(array) LBound(array, dimension) Возвращает нижнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. ReDim var(args) As Type Изменяет размерность массива, используя тот же самый синтаксис что и оператор DIM. Ключевое слова Preserve сохраняет существующие данные неповрежденными. Split(str) Split(str, delimiter) Split(str, delimiter, n) Разбивает строковый аргумент, превращая его в массив строк. Разделитель по умолчанию — пробел. Дополнительный аргумент “n” ограничивает число возвращаемых строк. Ubound(array) UBound(array, dimension) Возвращает верхнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. Рис. 20. В одном и том же массиве содержатся различные типы переменных. Листинг 20: ExampleArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleArrayFunction Dim a, i%, s$ a = Array("Zero", 1, Pi, Now) Rem Строка, Целое число, Число двойной точности, Дата For i = LBound(a) To UBound(a) s$ = s$ & i & " : " & TypeName(a(i)) & " : " & a(i) & CHR$(10) Next MsgBox s$, 0, "Example of the Array Function" End Sub Переменную, определенную как массив, но для которой не указаны размерности, например Dim a(), называют пустым массивом. Тест на пустой массив, равенство верхней границы массива с нижней границей. Если верхняя граница меньше чем нижняя граница, Вы имеете пустой массив, для которого не были установлены никакие размерности. Множество, для которого было заданы размерности, например Dim a (5), не пуст. Возможно сослаться на весь массив. Например, во Листинге 20, оператор Lbound(a) возвращает нижнюю границу массива a(). Массив, объявленный с заданными размерностями должен всегда сопровождаться круглыми скобками (). Например, переменная b() в Листинге 21 должна использоваться как b(). Массив, объявленный без указания размерностей может быть записан с или без замыкающих круглых скобок. Например, переменная a() в Листинге 21 может использоваться как или a или a(). Листинг 21. Круглые скобки не всегда требуются, но всегда допустимы. Sub ArrayDimensionError Dim a(), b(1 To 2), c REM Valid constructs LBound(a()) : LBound(a) : LBound(b()) : LBound(c()) : Lbound(c) REM Неверное использование LBound(b) приводит к ошибке во время выполнения REM Не соответствуют спецификации размерностей LBound(b) End Sub - 41 - Глава 2. Языковые Конструкции Изменение размера массива Требуемый размер массива не всегда заранее известен. Иногда размер известен, но он периодически изменяется, и код должен изменяться. Переменная массива может быть объявлена с или без определения размера. OOo Basic предоставляет несколько различных методов для установки или изменения размера массива. Функция Array порождает массив Variant, который содержит данные. Это быстрый способ инициализировать массив. Вы не обязаны устанавливать размер массива, но если Вы это сделали, то он изменится на соответствующий массиву, возвращенному функцией Array. Dim a() a = Array(3.141592654, "PI", 9.81, "Gravity") Аргументы передают функции Array данные, которыми становятся, возвращаемые в массиве Variant. Функция DimArray, с другой стороны, интерпретирует аргументы как размары массива для его создания (см. Листинг 22). Аргументами может быть выражение, таким образом может использоваться переменная для установки размера. Листинг 22: ExampleDimArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleDimArray Dim a(), i% a = Array(10, 11, 12) Print "" & LBound(a()) & " " & UBound(a()) Rem 0 2 a() = DimArray(3) REM то же самое, что Dim a(3) a() = DimArray(2, 1) REM то же самое, что Dim a(2,1) i = 4 a = DimArray(3, i) Rem то же самое, что a(3,4) Print "" & LBound(a() ,1) & " " & UBound(a() ,1) Rem 0, 3 Print "" & LBound(a() ,2) & " " & UBound(a() ,2) Rem 0, 4 a() = DimArray() REM пустой массив End Sub Функции Array и DimArray обе возвращают массив Variant. Оператор ReDim изменяет размер существующего массива. Он может изменить и отдельное измерение и количество измерений. Аргументами могут быть выражения, потому что оператор ReDim определяет размеры во время выполнения. Dim e() As Integer, i As Integer i = 4 ReDim e(5) As Integer REM 0 To 5 является правильным ReDim e(3 To 10) As Integer REM 3 To 10 является правильным ReDim e(3, i) As Integer REM (0 To 3, 0 To 4) является правильным Совет Хотя Lbound и UBound не работают с пустым массивом возвращенным DimArray(), потому что массив не имеет измерений, оба метода будут работать с пустыми массивами в OOo 2.0. Пустой массив имеет одно измерение, нижняя граница — ноль, а верхняя граница — -1. Используйте ReDim, чтобы существующий массив стал пустым. Оператор ReDim поддерживает ключевое слово Preserve. Оно пытается сохранить данные, когда изменяются размеры массива. Увеличение размера массива должно сохранить все данные, но уменьшение размера приводит к потере части данных вследствие усечения. Данные могут быть обрезанными с обоих концов. Если элемент из нового массива существовал в старом, значение не изменяется. В отличие от некоторых вариантов BASIC, OOo Basic позволяет изменять все измерения массива с сохранением данных. Dim a() As Integer ReDim a(3, 3, 3) As Integer a(1, 1, 1) = 1 : a(1, 1, 2) = 2 : a(2, 1, 1) = 3 ReDim preserve a(-1 To 4, 4, 4) As Integer Print "(" & a(1, 1, 1) & ", " & a(1, 1, 2) & ", " & a(2, 1, 1) & ")" ReDim определяет и измерения и тип. Тип, определяемый оператором ReDim должен соответствовать, типу заданному при объявлении переменной. Если типы будут отличаться, - 42 - Массивы то Вы увидите ошибку компиляции “Переменная уже определена”. В Листинге 23 приведена вспомогательная функция, которая принимает простой массив
Глава 2. Языковые Конструкции массив с пятью элементами будет иметь элементы пронумерованные от 0 до 4. Используйте ключевые слова Option Base 1, чтобы изменить значение по умолчанию для нижней границы массива и начинать нумерацию с 1, а не с 0. Это должно быть сделано перед любым другим выполняемым оператором в программе. Option Base { 0 | 1 } Совет Определяй нижнюю границу массива вместо того, чтобы полагаться на поведение по умолчанию. Это более переносимо, и не будет изменяться, при использовании оператора Option Base. Dim a(3) предоставляет четыре элемента: (0), (1), (2), и (3). Оператор Option Base не изменяет число элементов, которые может хранить массив; он изменяет только индексацию. Используя Option Base 1, тот же самый оператор все еще предоставляет четыре элемента: (1), (2), (3), и (4). Я считаю это поведение неинтуитивным и рекомендую не использовать Option Base. Если Вы хотите определенные границы массива, более предпочтительным является явное объявление границ массива. Например, Dim a(1 To 4). Option Base имеет проблемы, связанные с ясностью документирования и обеспечением переносимости. Совместимость В Visual Basic обращается с Option Base 1 по-другому чем OOo Basic. VB изменяет нижнюю границу на 1, но не изменяет связанную верхнюю границу. Visual Basic .NET больше не поддерживает Option Base. Когда OOo Basic поддерживает Option Compatible, тогда Option Base 1 не увеличивает верхнюю границу на 1. Другими словами, OOo Basic будет действовать как VB. Получение доступа и изменение значений в массиве просты (см. Листинг 19). Инициализация массива этим путем утомительна. Листинг 19: ExampleSimpleArray1 может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleSimpleArray1 Dim a(2) As Integer, b(-2 To 1) As Long Dim m(1 To 2, 3 To 4) REM Did you know that multiple statements can be placed REM on a single line if separated by a colon? a(0) = 0 : a(1) = 1 : a(2) = 2 b(-2) = -2 : b(-1) = -1 : b(0) = 0 : b(1) = 1 m(1, 3) = 3 : m(1, 4) = 4 m(2, 3) = 6 : m(2, 4) = 8 Print "m(2,3) = " & m(2, 3) Print "b(-2) = " & b(-2) End Sub Чтобы быстро заполнять массив Variant, используйте функцию Array (см. Листинг 20), который возвращает массив Variant со включенными данными (см. Рис. 20). Функции LBound и Ubound возвращаются нижнюю и верхнюю границы массива, соответственно. Процедуры, поддерживаемые OOo Basic сведены в Таблицу 11 и подробнее обсуждаются далее. Таблица 11. Краткое описание подпрограмм и функций, связанных с массивами. Функция Описание Array(args) Возвращает массив Variant, который содержит аргументы. DimArray(args) Возвращает пустое массив Variant. Аргументы определяют размерность. IsArray(var) Возвращает True, если указанная переменная - массив, False в противном случае. - 40 - Массивы Join(array) Join(array, delimiter) Объединяет элементы массива, разделяемые дополнительным строковым разделителем и возвращает как строку. Разделитель по умолчанию — один пробел. Lbound(array) LBound(array, dimension) Возвращает нижнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. ReDim var(args) As Type Изменяет размерность массива, используя тот же самый синтаксис что и оператор DIM. Ключевое слова Preserve сохраняет существующие данные неповрежденными. Split(str) Split(str, delimiter) Split(str, delimiter, n) Разбивает строковый аргумент, превращая его в массив строк. Разделитель по умолчанию — пробел. Дополнительный аргумент “n” ограничивает число возвращаемых строк. Ubound(array) UBound(array, dimension) Возвращает верхнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. Рис. 20. В одном и том же массиве содержатся различные типы переменных. Листинг 20: ExampleArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleArrayFunction Dim a, i%, s$ a = Array("Zero", 1, Pi, Now) Rem Строка, Целое число, Число двойной точности, Дата For i = LBound(a) To UBound(a) s$ = s$ & i & " : " & TypeName(a(i)) & " : " & a(i) & CHR$(10) Next MsgBox s$, 0, "Example of the Array Function" End Sub Переменную, определенную как массив, но для которой не указаны размерности, например Dim a(), называют пустым массивом. Тест на пустой массив, равенство верхней границы массива с нижней границей. Если верхняя граница меньше чем нижняя граница, Вы имеете пустой массив, для которого не были установлены никакие размерности. Множество, для которого было заданы размерности, например Dim a (5), не пуст. Возможно сослаться на весь массив. Например, во Листинге 20, оператор Lbound(a) возвращает нижнюю границу массива a(). Массив, объявленный с заданными размерностями должен всегда сопровождаться круглыми скобками (). Например, переменная b() в Листинге 21 должна использоваться как b(). Массив, объявленный без указания размерностей может быть записан с или без замыкающих круглых скобок. Например, переменная a() в Листинге 21 может использоваться как или a или a(). Листинг 21. Круглые скобки не всегда требуются, но всегда допустимы. Sub ArrayDimensionError Dim a(), b(1 To 2), c REM Valid constructs LBound(a()) : LBound(a) : LBound(b()) : LBound(c()) : Lbound(c) REM Неверное использование LBound(b) приводит к ошибке во время выполнения REM Не соответствуют спецификации размерностей LBound(b) End Sub - 41 - Глава 2. Языковые Конструкции Изменение размера массива Требуемый размер массива не всегда заранее известен. Иногда размер известен, но он периодически изменяется, и код должен изменяться. Переменная массива может быть объявлена с или без определения размера. OOo Basic предоставляет несколько различных методов для установки или изменения размера массива. Функция Array порождает массив Variant, который содержит данные. Это быстрый способ инициализировать массив. Вы не обязаны устанавливать размер массива, но если Вы это сделали, то он изменится на соответствующий массиву, возвращенному функцией Array. Dim a() a = Array(3.141592654, "PI", 9.81, "Gravity") Аргументы передают функции Array данные, которыми становятся, возвращаемые в массиве Variant. Функция DimArray, с другой стороны, интерпретирует аргументы как размары массива для его создания (см. Листинг 22). Аргументами может быть выражение, таким образом может использоваться переменная для установки размера. Листинг 22: ExampleDimArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleDimArray Dim a(), i% a = Array(10, 11, 12) Print "" & LBound(a()) & " " & UBound(a()) Rem 0 2 a() = DimArray(3) REM то же самое, что Dim a(3) a() = DimArray(2, 1) REM то же самое, что Dim a(2,1) i = 4 a = DimArray(3, i) Rem то же самое, что a(3,4) Print "" & LBound(a() ,1) & " " & UBound(a() ,1) Rem 0, 3 Print "" & LBound(a() ,2) & " " & UBound(a() ,2) Rem 0, 4 a() = DimArray() REM пустой массив End Sub Функции Array и DimArray обе возвращают массив Variant. Оператор ReDim изменяет размер существующего массива. Он может изменить и отдельное измерение и количество измерений. Аргументами могут быть выражения, потому что оператор ReDim определяет размеры во время выполнения. Dim e() As Integer, i As Integer i = 4 ReDim e(5) As Integer REM 0 To 5 является правильным ReDim e(3 To 10) As Integer REM 3 To 10 является правильным ReDim e(3, i) As Integer REM (0 To 3, 0 To 4) является правильным Совет Хотя Lbound и UBound не работают с пустым массивом возвращенным DimArray(), потому что массив не имеет измерений, оба метода будут работать с пустыми массивами в OOo 2.0. Пустой массив имеет одно измерение, нижняя граница — ноль, а верхняя граница — -1. Используйте ReDim, чтобы существующий массив стал пустым. Оператор ReDim поддерживает ключевое слово Preserve. Оно пытается сохранить данные, когда изменяются размеры массива. Увеличение размера массива должно сохранить все данные, но уменьшение размера приводит к потере части данных вследствие усечения. Данные могут быть обрезанными с обоих концов. Если элемент из нового массива существовал в старом, значение не изменяется. В отличие от некоторых вариантов BASIC, OOo Basic позволяет изменять все измерения массива с сохранением данных. Dim a() As Integer ReDim a(3, 3, 3) As Integer a(1, 1, 1) = 1 : a(1, 1, 2) = 2 : a(2, 1, 1) = 3 ReDim preserve a(-1 To 4, 4, 4) As Integer Print "(" & a(1, 1, 1) & ", " & a(1, 1, 2) & ", " & a(2, 1, 1) & ")" ReDim определяет и измерения и тип. Тип, определяемый оператором ReDim должен соответствовать, типу заданному при объявлении переменной. Если типы будут отличаться, - 42 - Массивы то Вы увидите ошибку компиляции “Переменная уже определена”. В Листинге 23 приведена вспомогательная функция, которая принимает простой массив
Глава 2. Языковые Конструкции массив с пятью элементами будет иметь элементы пронумерованные от 0 до 4. Используйте ключевые слова Option Base 1, чтобы изменить значение по умолчанию для нижней границы массива и начинать нумерацию с 1, а не с 0. Это должно быть сделано перед любым другим выполняемым оператором в программе. Option Base { 0 | 1 } Совет Определяй нижнюю границу массива вместо того, чтобы полагаться на поведение по умолчанию. Это более переносимо, и не будет изменяться, при использовании оператора Option Base. Dim a(3) предоставляет четыре элемента: (0), (1), (2), и (3). Оператор Option Base не изменяет число элементов, которые может хранить массив; он изменяет только индексацию. Используя Option Base 1, тот же самый оператор все еще предоставляет четыре элемента: (1), (2), (3), и (4). Я считаю это поведение неинтуитивным и рекомендую не использовать Option Base. Если Вы хотите определенные границы массива, более предпочтительным является явное объявление границ массива. Например, Dim a(1 To 4). Option Base имеет проблемы, связанные с ясностью документирования и обеспечением переносимости. Совместимость В Visual Basic обращается с Option Base 1 по-другому чем OOo Basic. VB изменяет нижнюю границу на 1, но не изменяет связанную верхнюю границу. Visual Basic .NET больше не поддерживает Option Base. Когда OOo Basic поддерживает Option Compatible, тогда Option Base 1 не увеличивает верхнюю границу на 1. Другими словами, OOo Basic будет действовать как VB. Получение доступа и изменение значений в массиве просты (см. Листинг 19). Инициализация массива этим путем утомительна. Листинг 19: ExampleSimpleArray1 может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleSimpleArray1 Dim a(2) As Integer, b(-2 To 1) As Long Dim m(1 To 2, 3 To 4) REM Did you know that multiple statements can be placed REM on a single line if separated by a colon? a(0) = 0 : a(1) = 1 : a(2) = 2 b(-2) = -2 : b(-1) = -1 : b(0) = 0 : b(1) = 1 m(1, 3) = 3 : m(1, 4) = 4 m(2, 3) = 6 : m(2, 4) = 8 Print "m(2,3) = " & m(2, 3) Print "b(-2) = " & b(-2) End Sub Чтобы быстро заполнять массив Variant, используйте функцию Array (см. Листинг 20), который возвращает массив Variant со включенными данными (см. Рис. 20). Функции LBound и Ubound возвращаются нижнюю и верхнюю границы массива, соответственно. Процедуры, поддерживаемые OOo Basic сведены в Таблицу 11 и подробнее обсуждаются далее. Таблица 11. Краткое описание подпрограмм и функций, связанных с массивами. Функция Описание Array(args) Возвращает массив Variant, который содержит аргументы. DimArray(args) Возвращает пустое массив Variant. Аргументы определяют размерность. IsArray(var) Возвращает True, если указанная переменная - массив, False в противном случае. - 40 - Массивы Join(array) Join(array, delimiter) Объединяет элементы массива, разделяемые дополнительным строковым разделителем и возвращает как строку. Разделитель по умолчанию — один пробел. Lbound(array) LBound(array, dimension) Возвращает нижнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. ReDim var(args) As Type Изменяет размерность массива, используя тот же самый синтаксис что и оператор DIM. Ключевое слова Preserve сохраняет существующие данные неповрежденными. Split(str) Split(str, delimiter) Split(str, delimiter, n) Разбивает строковый аргумент, превращая его в массив строк. Разделитель по умолчанию — пробел. Дополнительный аргумент “n” ограничивает число возвращаемых строк. Ubound(array) UBound(array, dimension) Возвращает верхнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. Рис. 20. В одном и том же массиве содержатся различные типы переменных. Листинг 20: ExampleArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleArrayFunction Dim a, i%, s$ a = Array("Zero", 1, Pi, Now) Rem Строка, Целое число, Число двойной точности, Дата For i = LBound(a) To UBound(a) s$ = s$ & i & " : " & TypeName(a(i)) & " : " & a(i) & CHR$(10) Next MsgBox s$, 0, "Example of the Array Function" End Sub Переменную, определенную как массив, но для которой не указаны размерности, например Dim a(), называют пустым массивом. Тест на пустой массив, равенство верхней границы массива с нижней границей. Если верхняя граница меньше чем нижняя граница, Вы имеете пустой массив, для которого не были установлены никакие размерности. Множество, для которого было заданы размерности, например Dim a (5), не пуст. Возможно сослаться на весь массив. Например, во Листинге 20, оператор Lbound(a) возвращает нижнюю границу массива a(). Массив, объявленный с заданными размерностями должен всегда сопровождаться круглыми скобками (). Например, переменная b() в Листинге 21 должна использоваться как b(). Массив, объявленный без указания размерностей может быть записан с или без замыкающих круглых скобок. Например, переменная a() в Листинге 21 может использоваться как или a или a(). Листинг 21. Круглые скобки не всегда требуются, но всегда допустимы. Sub ArrayDimensionError Dim a(), b(1 To 2), c REM Valid constructs LBound(a()) : LBound(a) : LBound(b()) : LBound(c()) : Lbound(c) REM Неверное использование LBound(b) приводит к ошибке во время выполнения REM Не соответствуют спецификации размерностей LBound(b) End Sub - 41 - Глава 2. Языковые Конструкции Изменение размера массива Требуемый размер массива не всегда заранее известен. Иногда размер известен, но он периодически изменяется, и код должен изменяться. Переменная массива может быть объявлена с или без определения размера. OOo Basic предоставляет несколько различных методов для установки или изменения размера массива. Функция Array порождает массив Variant, который содержит данные. Это быстрый способ инициализировать массив. Вы не обязаны устанавливать размер массива, но если Вы это сделали, то он изменится на соответствующий массиву, возвращенному функцией Array. Dim a() a = Array(3.141592654, "PI", 9.81, "Gravity") Аргументы передают функции Array данные, которыми становятся, возвращаемые в массиве Variant. Функция DimArray, с другой стороны, интерпретирует аргументы как размары массива для его создания (см. Листинг 22). Аргументами может быть выражение, таким образом может использоваться переменная для установки размера. Листинг 22: ExampleDimArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleDimArray Dim a(), i% a = Array(10, 11, 12) Print "" & LBound(a()) & " " & UBound(a()) Rem 0 2 a() = DimArray(3) REM то же самое, что Dim a(3) a() = DimArray(2, 1) REM то же самое, что Dim a(2,1) i = 4 a = DimArray(3, i) Rem то же самое, что a(3,4) Print "" & LBound(a() ,1) & " " & UBound(a() ,1) Rem 0, 3 Print "" & LBound(a() ,2) & " " & UBound(a() ,2) Rem 0, 4 a() = DimArray() REM пустой массив End Sub Функции Array и DimArray обе возвращают массив Variant. Оператор ReDim изменяет размер существующего массива. Он может изменить и отдельное измерение и количество измерений. Аргументами могут быть выражения, потому что оператор ReDim определяет размеры во время выполнения. Dim e() As Integer, i As Integer i = 4 ReDim e(5) As Integer REM 0 To 5 является правильным ReDim e(3 To 10) As Integer REM 3 To 10 является правильным ReDim e(3, i) As Integer REM (0 To 3, 0 To 4) является правильным Совет Хотя Lbound и UBound не работают с пустым массивом возвращенным DimArray(), потому что массив не имеет измерений, оба метода будут работать с пустыми массивами в OOo 2.0. Пустой массив имеет одно измерение, нижняя граница — ноль, а верхняя граница — -1. Используйте ReDim, чтобы существующий массив стал пустым. Оператор ReDim поддерживает ключевое слово Preserve. Оно пытается сохранить данные, когда изменяются размеры массива. Увеличение размера массива должно сохранить все данные, но уменьшение размера приводит к потере части данных вследствие усечения. Данные могут быть обрезанными с обоих концов. Если элемент из нового массива существовал в старом, значение не изменяется. В отличие от некоторых вариантов BASIC, OOo Basic позволяет изменять все измерения массива с сохранением данных. Dim a() As Integer ReDim a(3, 3, 3) As Integer a(1, 1, 1) = 1 : a(1, 1, 2) = 2 : a(2, 1, 1) = 3 ReDim preserve a(-1 To 4, 4, 4) As Integer Print "(" & a(1, 1, 1) & ", " & a(1, 1, 2) & ", " & a(2, 1, 1) & ")" ReDim определяет и измерения и тип. Тип, определяемый оператором ReDim должен соответствовать, типу заданному при объявлении переменной. Если типы будут отличаться, - 42 - Массивы то Вы увидите ошибку компиляции “Переменная уже определена”. В Листинге 23 приведена вспомогательная функция, которая принимает простой массив
Глава 2. Языковые Конструкции массив с пятью элементами будет иметь элементы пронумерованные от 0 до 4. Используйте ключевые слова Option Base 1, чтобы изменить значение по умолчанию для нижней границы массива и начинать нумерацию с 1, а не с 0. Это должно быть сделано перед любым другим выполняемым оператором в программе. Option Base { 0 | 1 } Совет Определяй нижнюю границу массива вместо того, чтобы полагаться на поведение по умолчанию. Это более переносимо, и не будет изменяться, при использовании оператора Option Base. Dim a(3) предоставляет четыре элемента: (0), (1), (2), и (3). Оператор Option Base не изменяет число элементов, которые может хранить массив; он изменяет только индексацию. Используя Option Base 1, тот же самый оператор все еще предоставляет четыре элемента: (1), (2), (3), и (4). Я считаю это поведение неинтуитивным и рекомендую не использовать Option Base. Если Вы хотите определенные границы массива, более предпочтительным является явное объявление границ массива. Например, Dim a(1 To 4). Option Base имеет проблемы, связанные с ясностью документирования и обеспечением переносимости. Совместимость В Visual Basic обращается с Option Base 1 по-другому чем OOo Basic. VB изменяет нижнюю границу на 1, но не изменяет связанную верхнюю границу. Visual Basic .NET больше не поддерживает Option Base. Когда OOo Basic поддерживает Option Compatible, тогда Option Base 1 не увеличивает верхнюю границу на 1. Другими словами, OOo Basic будет действовать как VB. Получение доступа и изменение значений в массиве просты (см. Листинг 19). Инициализация массива этим путем утомительна. Листинг 19: ExampleSimpleArray1 может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleSimpleArray1 Dim a(2) As Integer, b(-2 To 1) As Long Dim m(1 To 2, 3 To 4) REM Did you know that multiple statements can be placed REM on a single line if separated by a colon? a(0) = 0 : a(1) = 1 : a(2) = 2 b(-2) = -2 : b(-1) = -1 : b(0) = 0 : b(1) = 1 m(1, 3) = 3 : m(1, 4) = 4 m(2, 3) = 6 : m(2, 4) = 8 Print "m(2,3) = " & m(2, 3) Print "b(-2) = " & b(-2) End Sub Чтобы быстро заполнять массив Variant, используйте функцию Array (см. Листинг 20), который возвращает массив Variant со включенными данными (см. Рис. 20). Функции LBound и Ubound возвращаются нижнюю и верхнюю границы массива, соответственно. Процедуры, поддерживаемые OOo Basic сведены в Таблицу 11 и подробнее обсуждаются далее. Таблица 11. Краткое описание подпрограмм и функций, связанных с массивами. Функция Описание Array(args) Возвращает массив Variant, который содержит аргументы. DimArray(args) Возвращает пустое массив Variant. Аргументы определяют размерность. IsArray(var) Возвращает True, если указанная переменная - массив, False в противном случае. - 40 - Массивы Join(array) Join(array, delimiter) Объединяет элементы массива, разделяемые дополнительным строковым разделителем и возвращает как строку. Разделитель по умолчанию — один пробел. Lbound(array) LBound(array, dimension) Возвращает нижнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. ReDim var(args) As Type Изменяет размерность массива, используя тот же самый синтаксис что и оператор DIM. Ключевое слова Preserve сохраняет существующие данные неповрежденными. Split(str) Split(str, delimiter) Split(str, delimiter, n) Разбивает строковый аргумент, превращая его в массив строк. Разделитель по умолчанию — пробел. Дополнительный аргумент “n” ограничивает число возвращаемых строк. Ubound(array) UBound(array, dimension) Возвращает верхнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. Рис. 20. В одном и том же массиве содержатся различные типы переменных. Листинг 20: ExampleArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleArrayFunction Dim a, i%, s$ a = Array("Zero", 1, Pi, Now) Rem Строка, Целое число, Число двойной точности, Дата For i = LBound(a) To UBound(a) s$ = s$ & i & " : " & TypeName(a(i)) & " : " & a(i) & CHR$(10) Next MsgBox s$, 0, "Example of the Array Function" End Sub Переменную, определенную как массив, но для которой не указаны размерности, например Dim a(), называют пустым массивом. Тест на пустой массив, равенство верхней границы массива с нижней границей. Если верхняя граница меньше чем нижняя граница, Вы имеете пустой массив, для которого не были установлены никакие размерности. Множество, для которого было заданы размерности, например Dim a (5), не пуст. Возможно сослаться на весь массив. Например, во Листинге 20, оператор Lbound(a) возвращает нижнюю границу массива a(). Массив, объявленный с заданными размерностями должен всегда сопровождаться круглыми скобками (). Например, переменная b() в Листинге 21 должна использоваться как b(). Массив, объявленный без указания размерностей может быть записан с или без замыкающих круглых скобок. Например, переменная a() в Листинге 21 может использоваться как или a или a(). Листинг 21. Круглые скобки не всегда требуются, но всегда допустимы. Sub ArrayDimensionError Dim a(), b(1 To 2), c REM Valid constructs LBound(a()) : LBound(a) : LBound(b()) : LBound(c()) : Lbound(c) REM Неверное использование LBound(b) приводит к ошибке во время выполнения REM Не соответствуют спецификации размерностей LBound(b) End Sub - 41 - Глава 2. Языковые Конструкции Изменение размера массива Требуемый размер массива не всегда заранее известен. Иногда размер известен, но он периодически изменяется, и код должен изменяться. Переменная массива может быть объявлена с или без определения размера. OOo Basic предоставляет несколько различных методов для установки или изменения размера массива. Функция Array порождает массив Variant, который содержит данные. Это быстрый способ инициализировать массив. Вы не обязаны устанавливать размер массива, но если Вы это сделали, то он изменится на соответствующий массиву, возвращенному функцией Array. Dim a() a = Array(3.141592654, "PI", 9.81, "Gravity") Аргументы передают функции Array данные, которыми становятся, возвращаемые в массиве Variant. Функция DimArray, с другой стороны, интерпретирует аргументы как размары массива для его создания (см. Листинг 22). Аргументами может быть выражение, таким образом может использоваться переменная для установки размера. Листинг 22: ExampleDimArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleDimArray Dim a(), i% a = Array(10, 11, 12) Print "" & LBound(a()) & " " & UBound(a()) Rem 0 2 a() = DimArray(3) REM то же самое, что Dim a(3) a() = DimArray(2, 1) REM то же самое, что Dim a(2,1) i = 4 a = DimArray(3, i) Rem то же самое, что a(3,4) Print "" & LBound(a() ,1) & " " & UBound(a() ,1) Rem 0, 3 Print "" & LBound(a() ,2) & " " & UBound(a() ,2) Rem 0, 4 a() = DimArray() REM пустой массив End Sub Функции Array и DimArray обе возвращают массив Variant. Оператор ReDim изменяет размер существующего массива. Он может изменить и отдельное измерение и количество измерений. Аргументами могут быть выражения, потому что оператор ReDim определяет размеры во время выполнения. Dim e() As Integer, i As Integer i = 4 ReDim e(5) As Integer REM 0 To 5 является правильным ReDim e(3 To 10) As Integer REM 3 To 10 является правильным ReDim e(3, i) As Integer REM (0 To 3, 0 To 4) является правильным Совет Хотя Lbound и UBound не работают с пустым массивом возвращенным DimArray(), потому что массив не имеет измерений, оба метода будут работать с пустыми массивами в OOo 2.0. Пустой массив имеет одно измерение, нижняя граница — ноль, а верхняя граница — -1. Используйте ReDim, чтобы существующий массив стал пустым. Оператор ReDim поддерживает ключевое слово Preserve. Оно пытается сохранить данные, когда изменяются размеры массива. Увеличение размера массива должно сохранить все данные, но уменьшение размера приводит к потере части данных вследствие усечения. Данные могут быть обрезанными с обоих концов. Если элемент из нового массива существовал в старом, значение не изменяется. В отличие от некоторых вариантов BASIC, OOo Basic позволяет изменять все измерения массива с сохранением данных. Dim a() As Integer ReDim a(3, 3, 3) As Integer a(1, 1, 1) = 1 : a(1, 1, 2) = 2 : a(2, 1, 1) = 3 ReDim preserve a(-1 To 4, 4, 4) As Integer Print "(" & a(1, 1, 1) & ", " & a(1, 1, 2) & ", " & a(2, 1, 1) & ")" ReDim определяет и измерения и тип. Тип, определяемый оператором ReDim должен соответствовать, типу заданному при объявлении переменной. Если типы будут отличаться, - 42 - Массивы то Вы увидите ошибку компиляции “Переменная уже определена”. В Листинге 23 приведена вспомогательная функция, которая принимает простой массив
Глава 2. Языковые Конструкции массив с пятью элементами будет иметь элементы пронумерованные от 0 до 4. Используйте ключевые слова Option Base 1, чтобы изменить значение по умолчанию для нижней границы массива и начинать нумерацию с 1, а не с 0. Это должно быть сделано перед любым другим выполняемым оператором в программе. Option Base { 0 | 1 } Совет Определяй нижнюю границу массива вместо того, чтобы полагаться на поведение по умолчанию. Это более переносимо, и не будет изменяться, при использовании оператора Option Base. Dim a(3) предоставляет четыре элемента: (0), (1), (2), и (3). Оператор Option Base не изменяет число элементов, которые может хранить массив; он изменяет только индексацию. Используя Option Base 1, тот же самый оператор все еще предоставляет четыре элемента: (1), (2), (3), и (4). Я считаю это поведение неинтуитивным и рекомендую не использовать Option Base. Если Вы хотите определенные границы массива, более предпочтительным является явное объявление границ массива. Например, Dim a(1 To 4). Option Base имеет проблемы, связанные с ясностью документирования и обеспечением переносимости. Совместимость В Visual Basic обращается с Option Base 1 по-другому чем OOo Basic. VB изменяет нижнюю границу на 1, но не изменяет связанную верхнюю границу. Visual Basic .NET больше не поддерживает Option Base. Когда OOo Basic поддерживает Option Compatible, тогда Option Base 1 не увеличивает верхнюю границу на 1. Другими словами, OOo Basic будет действовать как VB. Получение доступа и изменение значений в массиве просты (см. Листинг 19). Инициализация массива этим путем утомительна. Листинг 19: ExampleSimpleArray1 может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleSimpleArray1 Dim a(2) As Integer, b(-2 To 1) As Long Dim m(1 To 2, 3 To 4) REM Did you know that multiple statements can be placed REM on a single line if separated by a colon? a(0) = 0 : a(1) = 1 : a(2) = 2 b(-2) = -2 : b(-1) = -1 : b(0) = 0 : b(1) = 1 m(1, 3) = 3 : m(1, 4) = 4 m(2, 3) = 6 : m(2, 4) = 8 Print "m(2,3) = " & m(2, 3) Print "b(-2) = " & b(-2) End Sub Чтобы быстро заполнять массив Variant, используйте функцию Array (см. Листинг 20), который возвращает массив Variant со включенными данными (см. Рис. 20). Функции LBound и Ubound возвращаются нижнюю и верхнюю границы массива, соответственно. Процедуры, поддерживаемые OOo Basic сведены в Таблицу 11 и подробнее обсуждаются далее. Таблица 11. Краткое описание подпрограмм и функций, связанных с массивами. Функция Описание Array(args) Возвращает массив Variant, который содержит аргументы. DimArray(args) Возвращает пустое массив Variant. Аргументы определяют размерность. IsArray(var) Возвращает True, если указанная переменная - массив, False в противном случае. - 40 - Массивы Join(array) Join(array, delimiter) Объединяет элементы массива, разделяемые дополнительным строковым разделителем и возвращает как строку. Разделитель по умолчанию — один пробел. Lbound(array) LBound(array, dimension) Возвращает нижнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. ReDim var(args) As Type Изменяет размерность массива, используя тот же самый синтаксис что и оператор DIM. Ключевое слова Preserve сохраняет существующие данные неповрежденными. Split(str) Split(str, delimiter) Split(str, delimiter, n) Разбивает строковый аргумент, превращая его в массив строк. Разделитель по умолчанию — пробел. Дополнительный аргумент “n” ограничивает число возвращаемых строк. Ubound(array) UBound(array, dimension) Возвращает верхнюю границу массива, переданного в качестве аргумента. Дополнительное параметр определяет какую размерность проверить. Первая размерность — 1. Рис. 20. В одном и том же массиве содержатся различные типы переменных. Листинг 20: ExampleArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleArrayFunction Dim a, i%, s$ a = Array("Zero", 1, Pi, Now) Rem Строка, Целое число, Число двойной точности, Дата For i = LBound(a) To UBound(a) s$ = s$ & i & " : " & TypeName(a(i)) & " : " & a(i) & CHR$(10) Next MsgBox s$, 0, "Example of the Array Function" End Sub Переменную, определенную как массив, но для которой не указаны размерности, например Dim a(), называют пустым массивом. Тест на пустой массив, равенство верхней границы массива с нижней границей. Если верхняя граница меньше чем нижняя граница, Вы имеете пустой массив, для которого не были установлены никакие размерности. Множество, для которого было заданы размерности, например Dim a (5), не пуст. Возможно сослаться на весь массив. Например, во Листинге 20, оператор Lbound(a) возвращает нижнюю границу массива a(). Массив, объявленный с заданными размерностями должен всегда сопровождаться круглыми скобками (). Например, переменная b() в Листинге 21 должна использоваться как b(). Массив, объявленный без указания размерностей может быть записан с или без замыкающих круглых скобок. Например, переменная a() в Листинге 21 может использоваться как или a или a(). Листинг 21. Круглые скобки не всегда требуются, но всегда допустимы. Sub ArrayDimensionError Dim a(), b(1 To 2), c REM Valid constructs LBound(a()) : LBound(a) : LBound(b()) : LBound(c()) : Lbound(c) REM Неверное использование LBound(b) приводит к ошибке во время выполнения REM Не соответствуют спецификации размерностей LBound(b) End Sub - 41 - Глава 2. Языковые Конструкции Изменение размера массива Требуемый размер массива не всегда заранее известен. Иногда размер известен, но он периодически изменяется, и код должен изменяться. Переменная массива может быть объявлена с или без определения размера. OOo Basic предоставляет несколько различных методов для установки или изменения размера массива. Функция Array порождает массив Variant, который содержит данные. Это быстрый способ инициализировать массив. Вы не обязаны устанавливать размер массива, но если Вы это сделали, то он изменится на соответствующий массиву, возвращенному функцией Array. Dim a() a = Array(3.141592654, "PI", 9.81, "Gravity") Аргументы передают функции Array данные, которыми становятся, возвращаемые в массиве Variant. Функция DimArray, с другой стороны, интерпретирует аргументы как размары массива для его создания (см. Листинг 22). Аргументами может быть выражение, таким образом может использоваться переменная для установки размера. Листинг 22: ExampleDimArray может быть найдена в модуле Variables в файлах исходных текстов этой главы SC02.sxw. Sub ExampleDimArray Dim a(), i% a = Array(10, 11, 12) Print "" & LBound(a()) & " " & UBound(a()) Rem 0 2 a() = DimArray(3) REM то же самое, что Dim a(3) a() = DimArray(2, 1) REM то же самое, что Dim a(2,1) i = 4 a = DimArray(3, i) Rem то же самое, что a(3,4) Print "" & LBound(a() ,1) & " " & UBound(a() ,1) Rem 0, 3 Print "" & LBound(a() ,2) & " " & UBound(a() ,2) Rem 0, 4 a() = DimArray() REM пустой массив End Sub Функции Array и DimArray обе возвращают массив Variant. Оператор ReDim изменяет размер существующего массива. Он может изменить и отдельное измерение и количество измерений. Аргументами могут быть выражения, потому что оператор ReDim определяет размеры во время выполнения. Dim e() As Integer, i As Integer i = 4 ReDim e(5) As Integer REM 0 To 5 является правильным ReDim e(3 To 10) As Integer REM 3 To 10 является правильным ReDim e(3, i) As Integer REM (0 To 3, 0 To 4) является правильным Совет Хотя Lbound и UBound не работают с пустым массивом возвращенным DimArray(), потому что массив не имеет измерений, оба метода будут работать с пустыми массивами в OOo 2.0. Пустой массив имеет одно измерение, нижняя граница — ноль, а верхняя граница — -1. Используйте ReDim, чтобы существующий массив стал пустым. Оператор ReDim поддерживает ключевое слово Preserve. Оно пытается сохранить данные, когда изменяются размеры массива. Увеличение размера массива должно сохранить все данные, но уменьшение размера приводит к потере части данных вследствие усечения. Данные могут быть обрезанными с обоих концов. Если элемент из нового массива существовал в старом, значение не изменяется. В отличие от некоторых вариантов BASIC, OOo Basic позволяет изменять все измерения массива с сохранением данных. Dim a() As Integer ReDim a(3, 3, 3) As Integer a(1, 1, 1) = 1 : a(1, 1, 2) = 2 : a(2, 1, 1) = 3 ReDim preserve a(-1 To 4, 4, 4) As Integer Print "(" & a(1, 1, 1) & ", " & a(1, 1, 2) & ", " & a(2, 1, 1) & ")" ReDim определяет и измерения и тип. Тип, определяемый оператором ReDim должен соответствовать, типу заданному при объявлении переменной. Если типы будут отличаться, - 42 - Массивы то Вы увидите ошибку компиляции “Переменная уже определена”. В Листинге 23 приведена вспомогательная функция, которая принимает простой массив
>>580250 нихуяшечки.Я там старался, взамывал , понимаешь ли, тратит время.Быстро блять скинулись все и заплатили.Тогда покажу.И это еще не все фотки кстати я заскринил.
>>580254 я тут, думаешь, шутки шутить пришел?Нет.Ты когда в магазине что то покупаешь, тоже такой же вопрос задаешь продавцу,когда он просит оплатить товар?
Ебланы. Она скрины с фотками многим кидает. А вот фотки такие никому. У него только скрин есть. Только бабки кинете ему, он вас нахуй пошлет. Это ингуш тупой, который даже русский язык не знает толком. Снимет с вас бабки и ржать будет)). А фоток у него нету никаких эксклюзивных))
если у него действительно есть фотографии то пусть покажет хоть одну из тех что показал на скрине, если докажет что не развод я б взял и думаю многие , а без доказательств игра на лоха
А меня интересует, какого хрена этот мамкин бизнесмен называет её шлюхой при этом сам потратил кучу времени на её взлом? За одно это его надо полностью игнорить в теме и похуй какие фотки у него есть. Взламывать человека это верх неприличия. Думаете ей приятно видеть как её личные фото вот так сливают? Она и так показывает людям в личке очень классные фотки. После такой дерзкой акции со взломом она просто напросто прекратит кому-либо их вообще отсылать. Вам нравиться её внешность? Так, будьте добры, относитесь с уважением к ней как к человеку. А иначе, единственные шлюхи тут вы
>>580416 +++++какой бы она ни была для людей, взламывать и сливать что то - крысятничество.А тем более почему она шлюха?Сама что ли она эти голые фотки посылала?Нет,чел спокойно хранит их в скрытом альбоме и никому не показывает.
>>580416 она прекратит?не смеши, ей в кайф скидывать такие полуобнаженные фото, она просто не сможет уже жить без этого. А продажа интим фоток за деньги не делает ее шлюхой?Я тебя разочарую может но она - такая же как проститутки в реале, только она проститутка интернетная.А может и в реале промышляет.Думаю многие со мной согласятся.
>>580437 А брак вообще узаконенная проституция, содержание. тян менят тело на пожизенное обеспечение себя и своих детей. А любовь придумали евреи чтобы не платить тням за секс.
>>580238 >>567295 >>580442 Да пошел ты нахуй хохол-ебаный, за фотки деньги платить? Ну ты и крыса. Я на 100% уверен, что нихуя ты не взламывал а тупо купил у этой шлюхи вот и хочешь впарить анонам что бы отбить стоимость.
Кароче чуваки которые хотят купить,у вас видимо Лавандос есть лишний,так вот будьте людьми,если купите кидайте сюда....чтоб никто другой не промышлял,чисто по благородному)
конечно же он ничего не взламывал ритка этот тред читает переодически так бы он и заявил публично что взломал она бы прочла и изменила пароль и привязки все , и он бы остался без доступа к её странице аахха ну тупо себя в дуб въебать.конечно же купил и спикулирует
>>580507 Ебанутый здесь ты черт,пусть завышает,и сам сидит дрочит в гордом одиночестве,если он хочет их продать,то он продаст,и если на то пошло,скидывать не по одной фотке,а попросту тот, кто купить не одну две,а множество и просто сразу скинуть кучу фоток сюда,включай мозги олень....
Почитал тред и просто в ахуе. Неужто вы на нее целыми днями надрачиваете, что аж готовы тут спекулянтами деньги платить за новую дозу новые фотки? Ну да красивое тело, вернее такое что ебать просто охота, лицо мягко говоря не айс. Так передернуть один раз пойдет, хули вы из этого культ делаете я не понимаю.
>>580901 > Че вы как лохи покупаете у одного и того же вдесятером одни материалы 2ую если так, клованы но вангую это школопродавец семёнит, чтобы создать ажиотаж
https://vk.com/vk_id3216666