Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 261
от 14.04.2006, 17:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 143, Экспертов: 27
В номере:Вопросов: 3, Ответов: 6


Вопрос № 39734: Здравствуйте! Вопрос скорее не по Basic, а по программированию и информатике вообще, но поскольку операторы imp, eqv и not есть в Basic, то я решил задать вопрос именно в эту рассылку. Кто-нибудь может мне объяснить, как с помощью ручки, листка б...
Вопрос № 39751: Я знаю для многих это простой вопрос: Как осуществить перенос строки в RichTextBoxе? Если можно поподробнее и пошагово. Спасибо...
Вопрос № 39799: Здравствуйте!!! Я хочу написать программу, которая будет подсчитывать количество символов, символы будут вводится через TextBox, как это сделать, можете написать пример, может есть какая-то функция или процедура подсчёта символов или что-то вроде так...

Вопрос № 39.734
Здравствуйте!
Вопрос скорее не по Basic, а по программированию и информатике вообще, но поскольку операторы imp, eqv и not есть в Basic, то я решил задать вопрос именно в эту рассылку. Кто-нибудь может мне объяснить, как с помощью ручки, листка бумаги и прямых рук (в наличии имеются) посчитать, например, такое: 15 eqv 21. Как считать выражение с использованием операторов and и or я понял, там все в соответствии с таблицами исходных и результирующего битов. К операторам not, imp и eqv такие таблицы тоже имеются, но почему-то при выполнении на компе результат - отрицательный (15 imp 21 = -11)!!! Плиз, помогите, мне нужно посчитать что-то вроде этого: (15 And 51) Or (Not (15 Imp 51) Eqv 85), причем без компа и калькулятора!!!
P.s. Это задание B8 из Централизованного Тестирования. Может, скачаете кто-нибудь, мне очень нужна помощь по Бейсику !!! См. http://www.cttest.net.ru/inf2006.rar (300 кб).
Отправлен: 08.04.2006, 17:29
Вопрос задал: Diman_A (статус: 8-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Diman_A!
Сам я с этими операторами не сталкивался, но потренировавшись в отладчике с оператором IMP пришел к следующим выводам:
Существенное отличие между прикладной математикой и программированием - в математике числа представлены от 0 до 255 (для примера возьмем один байт, для двух байт - слова - от 0 до 65535), а в программировании и в типах данных языков программирования от -128 до +127 (для слова от -32768 до 32767). Знак указывается наличием 1 в старшем разряде (для байта это бит 7 - нумерация справа налево начиная с бит 0, а для слова - бит 15).
В общем виде математическое число 255 представляется как "1111.1111" (я разбил по 4 бита, на самом деле запись идет слитная), но когда происходит перевод двоичного числа "1111.1111" в компьютере, то это число будет равно "-1".
Правило перевода состоит в следующем: в случае, если старший бит равен "1", то число отрицательное - перед числом ставим знак "минус", затем из нуля вычитаем число без бита знака и переводим в десятичную систему.
Например число "1101.0110"
000.0000
- 101.0110
--------------
010.1010
в десятичной системе "101010" - "42", значит искомое число "-42".

В справочнике приведен результат побитного IMP
0 IMP 0 = 0
0 IMP 1 = 1
1 IMP 0 = 0
1 IMP 1 = 1

Потренировавшись в VB6 с различными значениями аргументов, пришел к выводу:
1. На разрядность ответа влияет разрядность первого числа, т.е. "15"="1111" занимает 4 бита, ответ 5-и битный, причем левый бит равен "1", т.е. число отрицательное , "46"="101110" занимает 6 бит, ответ 7-ми битный.
2. В случае превышения разрядности второго аргумента над разрядностью первого, в расчете лишние левые разряды второго аргумента не учитываются.

Разберем пример "15 IMP 21".
"15" = "1111"
"21" = "10101"
В расчете берутся по 4 бита каждого числа
"1111" IMP "0101" = "0101"
Добавив бит знака получим "10101"
Определим значение отрицательного числа "10101"
0000
- 0101
= 1011, эквивалентом которого является десятичное число "11"
Итого ответ "-11"

Другой пример "46 IMP 21".
"46" = "101110"
"21" = "10101"
В расчете берутся по 6 бит каждого числа, причем "21" в виде "010101"
"101110" IMP "010101" = "010101"
Добавив бит знака получим "1010101"
Определим значение отрицательного числа "1010101"
000000
- 010101
= 101011, эквивалентом которого является десятичное число "43"
Итого ответ "-43"

Если посчитать в первом примере побитно, как в справочнике, то получим
"01111" IMP "10101" = "10101" или в десятичном "21", во втором примере ответ совпадает.

Для определения эквивалента отрицательного числа проще считать по-другому:
например необходимо найти эквивалент отрицательного числа "1011101001".
1. Значение левого разряда "1" указывает на отрицательное число.
2. Разрядность числа без признака знака - 9.
3. Из 9-ти значного числа, состоящем из единиц вычитаем число без разряда знака:
1.1111.1111
- 0.1110.1001
= 1.0001.0110
4. К полученному значению прибавляем 1
1.0001.0110 + 1 = 1.0001.0111
5. Переводим в десятичную систему.
Результат "-279" в диапазоне значений от "-512" до "511"
Ответ отправил: Филатов Евгений Геннадьевич (статус: 1-ый класс)
Ответ отправлен: 10.04.2006, 22:26
Оценка за ответ: 5


Вопрос № 39.751
Я знаю для многих это простой вопрос: Как осуществить перенос строки в RichTextBoxе? Если можно поподробнее и пошагово. Спасибо
Отправлен: 08.04.2006, 20:53
Вопрос задал: F13 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: BuTeK
Здравствуйте, F13!
Добавить к строке в месте перенса два символа: конец строки и перевод каретки.
"Строка 1" + Chr (10) + Chr (13) + "Строка 2".
Ответ отправил: BuTeK (статус: 6-ой класс)
Ответ отправлен: 09.04.2006, 00:40
Оценка за ответ: 4
Комментарий оценки:
Ответ то правильный, но я имел другое виду....

Отвечает: Александр Шевченко
Здравствуйте, F13!
За автоматический перенос строк отвечает свойство Multiline, т.е. в коде можно написать:
RichTextBox1.Multiline = True
Ответ отправил: Александр Шевченко (статус: 4-ый класс)
Ответ отправлен: 13.04.2006, 17:24
Оценка за ответ: 4


Вопрос № 39.799
Здравствуйте!!! Я хочу написать программу, которая будет подсчитывать количество символов, символы будут вводится через TextBox, как это сделать, можете написать пример, может есть какая-то функция или процедура подсчёта символов или что-то вроде такого как в Паскале?
Отправлен: 09.04.2006, 14:54
Вопрос задал: ataman (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: BuTeK
Здравствуйте, ataman!
Вроде так можно
Dim intNameLength As Integer
Dim Str As String
Str = TextBox1.Text
intNameLength = Str.Length
Ответ отправил: BuTeK (статус: 6-ой класс)
Ответ отправлен: 09.04.2006, 15:22
Оценка за ответ: 5

Отвечает: Ерёмин Андрей
Здравствуйте, ataman!
Вот выдержка из одной документации:

Функция Len


Len(String | Varname)

Функция Len вычисляет число символов в строке или размер заданной переменной.Из двух возможных аргументов должен быть указан только один(и только один). Для определяемых пользователем типов Len возвращает размер, который требуется для записи переменной в файл

Возвращаемое значение
Возвращает значение типа Long, содержащее число символов в строке или число байт, необходимое для размещения переменной

Параметры

String
Обязательный аргумент -любое допустимое строковое выражение.
Varname
Обязательный аргумент -любое допустимое имя переменной.Если выражение имеет значение Null, то возвращается Null.Если же аргумент имеет значение типа Variant,то функция Len обрабатывает его так же, как и значение типа String, и всегда возвращает число содержащихся в нем символов

Пример:
 ' Вычисляем длину строки Русский_Проект

Print Len("Русский_Проект")

---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин Андрей (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI: Всё для программиста.
ICQ: 286837644
----
Ответ отправлен: 09.04.2006, 15:23
Оценка за ответ: 5

Отвечает: Александр Шевченко
Здравствуйте, ataman!
К вышесказанному могу добавить, что если надо посчитать количество символов без пробелов например, то предварительно пробелы надо убрать функцией Replace, то есть код из первого ответа изменится на:
Dim intNameLength As Integer
Dim Str As String
Str = TextBox1.Text
Str = Replace(Str, " ", "") 'заменяем пробел на "ничего"
intNameLength = Len(Str)
Ответ отправил: Александр Шевченко (статус: 4-ый класс)
Ответ отправлен: 13.04.2006, 17:16


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.30 (beta) от 09.04.2006
Яндекс Rambler's Top100

В избранное