Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Выделение слов из посследовательности бит (A,B) - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Выделение слов из посследовательности бит (A,B)
melanu Дата: Четверг, 14.03.2013, 14:03 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Имеется рандомный набор вещественных чисел от 0 до 1. Далее этот набор умножается на 2^32 и округляется. Нужно полученные целые слова от 1 до n преобразовать в биты 0 и 1, далее эти биты заменить на A и B (A-0, B-1) до 32х бит, т.е. если получилось BBBABBBBABBBBABABABABABABABA, сделать AAAABBBABBBBABBBBABABABABABABABA. Далее эти посследовательности бит от 1 до n соединить в одну, например если 10 целых чисел должна получиться посследовательность 320 AB, и в этой посследовательности выделять слова по примеру:
AAAABBBABBBBABBBBABABABABABABABA
A-новое слово, +1 в словарь
AA-новое слово,+1 в словарь
AB-новое слово,+1 в словарь
B-новое слово,+1 в словарь
BA-новое слово, +1 в словарь
BB-новое слово, +1 в словарь
BBA-новое слово,+1 в словарь
BBB-новое слово,+1 в словарь
BAB-новое слово,+1 в словарь
ABA-новое слово,+1 в словарь
BABA-новое слово,+1 в словарь
BABAB-новое слово,+1 в словарь
В словаре: 12 слов.-Это мне и надо выяснить, сколько слов в словаре!
Вложенный файл с моей заготовкой, помогите пожалуйста доделать.
Осуществить с помощью vb
К сообщению приложен файл: 1498340.xls (43.0 Kb)


Сообщение отредактировал melanu - Четверг, 14.03.2013, 14:04
 
Ответить
СообщениеИмеется рандомный набор вещественных чисел от 0 до 1. Далее этот набор умножается на 2^32 и округляется. Нужно полученные целые слова от 1 до n преобразовать в биты 0 и 1, далее эти биты заменить на A и B (A-0, B-1) до 32х бит, т.е. если получилось BBBABBBBABBBBABABABABABABABA, сделать AAAABBBABBBBABBBBABABABABABABABA. Далее эти посследовательности бит от 1 до n соединить в одну, например если 10 целых чисел должна получиться посследовательность 320 AB, и в этой посследовательности выделять слова по примеру:
AAAABBBABBBBABBBBABABABABABABABA
A-новое слово, +1 в словарь
AA-новое слово,+1 в словарь
AB-новое слово,+1 в словарь
B-новое слово,+1 в словарь
BA-новое слово, +1 в словарь
BB-новое слово, +1 в словарь
BBA-новое слово,+1 в словарь
BBB-новое слово,+1 в словарь
BAB-новое слово,+1 в словарь
ABA-новое слово,+1 в словарь
BABA-новое слово,+1 в словарь
BABAB-новое слово,+1 в словарь
В словаре: 12 слов.-Это мне и надо выяснить, сколько слов в словаре!
Вложенный файл с моей заготовкой, помогите пожалуйста доделать.
Осуществить с помощью vb

Автор - melanu
Дата добавления - 14.03.2013 в 14:03
MCH Дата: Четверг, 14.03.2013, 14:49 | Сообщение № 2
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

так?
К сообщению приложен файл: CountWords.xls (45.0 Kb)
 
Ответить
Сообщениетак?

Автор - MCH
Дата добавления - 14.03.2013 в 14:49
melanu Дата: Четверг, 14.03.2013, 14:57 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Почти то что надо, только нужно чтобы допустим есть 40 чисел, т.е. посследовательность 32*40=1280 бит (A и B), и из этих 1280 и выделялись слова по примеру а не из каждых отдельно 32х и в итоге писало допустим в словаре: 168 слов.
 
Ответить
СообщениеПочти то что надо, только нужно чтобы допустим есть 40 чисел, т.е. посследовательность 32*40=1280 бит (A и B), и из этих 1280 и выделялись слова по примеру а не из каждых отдельно 32х и в итоге писало допустим в словаре: 168 слов.

Автор - melanu
Дата добавления - 14.03.2013 в 14:57
MCH Дата: Четверг, 14.03.2013, 15:09 | Сообщение № 4
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

предложенное решение сможет справится с этой задачей
При вызове функции
Код
=CountWords(C1)
используйте всместо C1 - C1&C2&C3&C4& ... &C40
 
Ответить
Сообщениепредложенное решение сможет справится с этой задачей
При вызове функции
Код
=CountWords(C1)
используйте всместо C1 - C1&C2&C3&C4& ... &C40

Автор - MCH
Дата добавления - 14.03.2013 в 15:09
melanu Дата: Четверг, 14.03.2013, 15:17 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Это сцепление?
 
Ответить
СообщениеЭто сцепление?

Автор - melanu
Дата добавления - 14.03.2013 в 15:17
melanu Дата: Четверг, 14.03.2013, 15:49 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Спасибо большое, тему можно закрывать!
 
Ответить
СообщениеСпасибо большое, тему можно закрывать!

Автор - melanu
Дата добавления - 14.03.2013 в 15:49
melanu Дата: Среда, 20.03.2013, 08:27 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Нужна ещё небольшая помощь с выводом слов на экран в виде столбца, с помощью MsgBox (m) выводит но в виде сообщений, а мне нужно на лист, реализация с помощью WorkSheets не получается:(:

A
AA
AB
B
BA
и т.д.
[vba]
Код

Function CountWords&(s$)
Dim i&, j&, m$, oDict
Dim a As Single
Set oDict = CreateObject("Scripting.Dictionary")
For i = 1 To Len(s)
For j = 1 To Len(s) - i + 1
m = Mid$(s$, i, j)
If Not oDict.Exists(m) Then oDict.Item(m) = m: Exit For
Next j
Worksheets(3).Cells(a, 4) = m
a = a + 1
i = i + j - 1
Next i
CountWords = oDict.Count
End Function
[/vba]

[admin]Для оформления кода используйте соответствующие теги![/admin]
 
Ответить
СообщениеНужна ещё небольшая помощь с выводом слов на экран в виде столбца, с помощью MsgBox (m) выводит но в виде сообщений, а мне нужно на лист, реализация с помощью WorkSheets не получается:(:

A
AA
AB
B
BA
и т.д.
[vba]
Код

Function CountWords&(s$)
Dim i&, j&, m$, oDict
Dim a As Single
Set oDict = CreateObject("Scripting.Dictionary")
For i = 1 To Len(s)
For j = 1 To Len(s) - i + 1
m = Mid$(s$, i, j)
If Not oDict.Exists(m) Then oDict.Item(m) = m: Exit For
Next j
Worksheets(3).Cells(a, 4) = m
a = a + 1
i = i + j - 1
Next i
CountWords = oDict.Count
End Function
[/vba]

[admin]Для оформления кода используйте соответствующие теги![/admin]

Автор - melanu
Дата добавления - 20.03.2013 в 08:27
MCH Дата: Среда, 20.03.2013, 09:23 | Сообщение № 8
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

как вариант
К сообщению приложен файл: CountWords2.xls (50.0 Kb)
 
Ответить
Сообщениекак вариант

Автор - MCH
Дата добавления - 20.03.2013 в 09:23
melanu Дата: Среда, 20.03.2013, 11:05 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Преобразование в цепочку я сделала, а вот как мне вывести эти уникальные 211 слов в колонку по 1 слову в ячейке?
 
Ответить
СообщениеПреобразование в цепочку я сделала, а вот как мне вывести эти уникальные 211 слов в колонку по 1 слову в ячейке?

Автор - melanu
Дата добавления - 20.03.2013 в 11:05
MCH Дата: Среда, 20.03.2013, 11:11 | Сообщение № 10
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

Цитата (melanu)
а вот как мне вывести эти уникальные 211 слов в колонку по 1 слову в ячейке?

Вы файл CountWords2.xls из моего предыдущего поста открывали? кнопку нажимали?
 
Ответить
Сообщение
Цитата (melanu)
а вот как мне вывести эти уникальные 211 слов в колонку по 1 слову в ячейке?

Вы файл CountWords2.xls из моего предыдущего поста открывали? кнопку нажимали?

Автор - MCH
Дата добавления - 20.03.2013 в 11:11
melanu Дата: Среда, 20.03.2013, 11:54 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Спасибо огромное, в другом экселе эта кнопка не отображалось, теперь всё работает замечательно! Сейчас только буду с кодом разбираться!
 
Ответить
СообщениеСпасибо огромное, в другом экселе эта кнопка не отображалось, теперь всё работает замечательно! Сейчас только буду с кодом разбираться!

Автор - melanu
Дата добавления - 20.03.2013 в 11:54
melanu Дата: Понедельник, 25.03.2013, 20:55 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Возникла проблема: функция =Lng2AB32(*) неадекватно работает с 32 битными целыми большими числами, видимо из-за ограничености типа данных long. Можно как-то реализовать эту функцию чтобы она работала с unsigned long, в которых напорядок больше диапазон? Должны обрабатываться приблезительно такие числа: 4294967295
 
Ответить
СообщениеВозникла проблема: функция =Lng2AB32(*) неадекватно работает с 32 битными целыми большими числами, видимо из-за ограничености типа данных long. Можно как-то реализовать эту функцию чтобы она работала с unsigned long, в которых напорядок больше диапазон? Должны обрабатываться приблезительно такие числа: 4294967295

Автор - melanu
Дата добавления - 25.03.2013 в 20:55
Serge_007 Дата: Понедельник, 25.03.2013, 21:04 | Сообщение № 13
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Тип данных Long cодержит 64-разрядные (8-байтные) знаковые целые числа в диапазоне от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 (9.2...E+18)


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
СообщениеТип данных Long cодержит 64-разрядные (8-байтные) знаковые целые числа в диапазоне от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 (9.2...E+18)

Автор - Serge_007
Дата добавления - 25.03.2013 в 21:04
melanu Дата: Понедельник, 25.03.2013, 21:13 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

это вы наверное про unsigned long, потому-что везде пишут что Long использует диапазон целых чисел от -2147483648 до 2147483647. Если 8 байт то непойму почему при вводе числа 4294967295 выдаётся ошибка(
 
Ответить
Сообщениеэто вы наверное про unsigned long, потому-что везде пишут что Long использует диапазон целых чисел от -2147483648 до 2147483647. Если 8 байт то непойму почему при вводе числа 4294967295 выдаётся ошибка(

Автор - melanu
Дата добавления - 25.03.2013 в 21:13
Serge_007 Дата: Понедельник, 25.03.2013, 21:16 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (melanu)
это вы наверное про unsigned long

Нет, я про long


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (melanu)
это вы наверное про unsigned long

Нет, я про long

Автор - Serge_007
Дата добавления - 25.03.2013 в 21:16
melanu Дата: Понедельник, 25.03.2013, 21:20 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Да я тут тоже читала, и про uLong. А вот как объявить ulong? Dim n As uLong не работает(
 
Ответить
СообщениеДа я тут тоже читала, и про uLong. А вот как объявить ulong? Dim n As uLong не работает(

Автор - melanu
Дата добавления - 25.03.2013 в 21:20
Serge_007 Дата: Понедельник, 25.03.2013, 21:25 | Сообщение № 17
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
Цитата (melanu)
uLong

Что такое uLong?
Такого нет в VBA. Есть просто Long, ссылку я давал выше
Тяжело представить ситуацию при которой не хватит Long


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение
Цитата (melanu)
uLong

Что такое uLong?
Такого нет в VBA. Есть просто Long, ссылку я давал выше
Тяжело представить ситуацию при которой не хватит Long

Автор - Serge_007
Дата добавления - 25.03.2013 в 21:25
melanu Дата: Понедельник, 25.03.2013, 21:28 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Вот такое число 4294967295 функция =Lng2AB32(*) выдаёт ошибку.
Вот код функции:

[vba]
Код
Function Lng2AB32$(ByVal n&)
     Dim i&
     For i = 1 To 32
         Lng2AB32 = Chr$(65 + n Mod 2) & Lng2AB32
         n = n \ 2
     Next i
End Function
[/vba]
 
Ответить
СообщениеВот такое число 4294967295 функция =Lng2AB32(*) выдаёт ошибку.
Вот код функции:

[vba]
Код
Function Lng2AB32$(ByVal n&)
     Dim i&
     For i = 1 To 32
         Lng2AB32 = Chr$(65 + n Mod 2) & Lng2AB32
         n = n \ 2
     Next i
End Function
[/vba]

Автор - melanu
Дата добавления - 25.03.2013 в 21:28
melanu Дата: Понедельник, 25.03.2013, 21:41 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

n&- long. Т.е. с этим ничего не поделать? Просто преподаватель написал вот это: функция =Lng2AB32(*) неадекватно работает с 32 битными целыми
беззнаковыми числами. Если внимательно посмотрите, старший бит в текстовом представлении никогда не равен "B". Если увеличивать число в ячейках столбца
то выдается ошибка(
 
Ответить
Сообщениеn&- long. Т.е. с этим ничего не поделать? Просто преподаватель написал вот это: функция =Lng2AB32(*) неадекватно работает с 32 битными целыми
беззнаковыми числами. Если внимательно посмотрите, старший бит в текстовом представлении никогда не равен "B". Если увеличивать число в ячейках столбца
то выдается ошибка(

Автор - melanu
Дата добавления - 25.03.2013 в 21:41
MCH Дата: Вторник, 26.03.2013, 00:04 | Сообщение № 20
Группа: Админы
Ранг: Старожил
Сообщений: 2004
Репутация: 752 ±
Замечаний: ±

[vba]
Код
Function Lng2AB32$(ByVal n#)
      Dim i&
      For i = 1 To 32
          Lng2AB32 = Chr$(66 + (n / 2 = Fix(n / 2))) & Lng2AB32
          n = Fix(n / 2)
      Next i
End Function
[/vba]

[vba]
Код
?Lng2AB32(4294967295)
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
[/vba]
 
Ответить
Сообщение[vba]
Код
Function Lng2AB32$(ByVal n#)
      Dim i&
      For i = 1 To 32
          Lng2AB32 = Chr$(66 + (n / 2 = Fix(n / 2))) & Lng2AB32
          n = Fix(n / 2)
      Next i
End Function
[/vba]

[vba]
Код
?Lng2AB32(4294967295)
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
[/vba]

Автор - MCH
Дата добавления - 26.03.2013 в 00:04
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!