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

Вход

Регистрация

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

 

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

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Выделение слов из посследовательности бит (A,B) (Подсчёт количества слов в словаре)
Выделение слов из посследовательности бит (A,B)
MCH Дата: Вторник, 26.03.2013, 00:12 | Сообщение № 21
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

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

Сергей, ты это из какогото другого бейсика вычитал (наверно из 64-разрядного)
Т.к. в VBA 2003 Long - ото 32 битная знаковая переменная:
Цитата
Long (long integer) variables are stored as signed 32-bit (4-byte) numbers ranging in value from -2,147,483,648 to 2,147,483,647. The type-declaration character for Long is the ampersand (&).


Сообщение отредактировал MCH - Вторник, 26.03.2013, 00:12
 
Ответить
Сообщение
Цитата (Serge_007)
Тип данных Long cодержит 64-разрядные (8-байтные) знаковые целые числа в диапазоне от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 (9.2...E+18)

Сергей, ты это из какогото другого бейсика вычитал (наверно из 64-разрядного)
Т.к. в VBA 2003 Long - ото 32 битная знаковая переменная:
Цитата
Long (long integer) variables are stored as signed 32-bit (4-byte) numbers ranging in value from -2,147,483,648 to 2,147,483,647. The type-declaration character for Long is the ampersand (&).

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

Вот про это я и говорила что в long не помещается), а что значит функция Fix ? # - я так понимаю double ?
 
Ответить
СообщениеВот про это я и говорила что в long не помещается), а что значит функция Fix ? # - я так понимаю double ?

Автор - melanu
Дата добавления - 26.03.2013 в 00:19
MCH Дата: Вторник, 26.03.2013, 00:26 | Сообщение № 23
Группа: Админы
Ранг: Старожил
Сообщений: 2003
Репутация: 751 ±
Замечаний: ±

Цитата (melanu)
# - я так понимаю double ?

Да
Цитата (melanu)
а что значит функция Fix ?

Справка же есть, на словах - отбрасывает дробную часть

Но и здесь на месте преподавателя я бы придрался
"А если число дробное, или больше чем 2^32-1, или отрицательное, то функция не корректно работает"

На что нужно парировать, что "это учебное задание, и проверку входных данных на корректность делать не обязательно, тем более, что в задании не указано, что числа могут быть дробными, отрицательными или более чем 32 битными"
 
Ответить
Сообщение
Цитата (melanu)
# - я так понимаю double ?

Да
Цитата (melanu)
а что значит функция Fix ?

Справка же есть, на словах - отбрасывает дробную часть

Но и здесь на месте преподавателя я бы придрался
"А если число дробное, или больше чем 2^32-1, или отрицательное, то функция не корректно работает"

На что нужно парировать, что "это учебное задание, и проверку входных данных на корректность делать не обязательно, тем более, что в задании не указано, что числа могут быть дробными, отрицательными или более чем 32 битными"

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

К счастью больше 4294967295 не могут быть) я всё перепроверила и это максимальное число! Дробными тоже нет, минимальное 1 максимальное 4294967295.
 
Ответить
СообщениеК счастью больше 4294967295 не могут быть) я всё перепроверила и это максимальное число! Дробными тоже нет, минимальное 1 максимальное 4294967295.

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

Возникла проблема с выборками большого обьёма чисел, более 1 тысячи. Макрос подсчитывает слова и выводит их, но делает это явно не правильно, т.к. при больших выборках 5000,10000 должны получаться слова более 32-х бит, а они топчутся на месте(
Цельная цепочка не пойдёт, так как ячейка в excel имеет ограничение на 32000 символов, нужно просто чтоб правильно выводило количество слов и сами слова.
Вот пример файла, вставила генератор rnd и преобразователь в 2^32 с округлением.


Сообщение отредактировал melanu - Четверг, 28.03.2013, 09:40
 
Ответить
СообщениеВозникла проблема с выборками большого обьёма чисел, более 1 тысячи. Макрос подсчитывает слова и выводит их, но делает это явно не правильно, т.к. при больших выборках 5000,10000 должны получаться слова более 32-х бит, а они топчутся на месте(
Цельная цепочка не пойдёт, так как ячейка в excel имеет ограничение на 32000 символов, нужно просто чтоб правильно выводило количество слов и сами слова.
Вот пример файла, вставила генератор rnd и преобразователь в 2^32 с округлением.

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

проблема с файлом, весит более 100кб(
[vba]
Код
Option Explicit

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

Function ConcatRng$(rng As Range)
     Dim x
     For Each x In rng.Value
         If x <> "" Then ConcatRng = ConcatRng & Lng2AB32$(Val(x))
     Next x
End Function

Sub ExtractWords()
     Dim i&, j&, m$, oDict, s$
     s = ConcatRng(Range("A1:A65000"))
     Set oDict = CreateObject("Scripting.Dictionary")
     For i = 1 To Len(s)
         For j = 0 To Len(s) - i
             m = Mid$(s$, i, j + 1)
             If Not oDict.Exists(m) Then oDict.Item(m) = m: Exit For
         Next j
         i = i + j
     Next i
     Range("D3").Resize(oDict.Count, 1) = Application.Transpose(oDict.Keys)
End Sub

Function CountWords&(s$)
     Dim i&, j&, m$, oDict
     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
         i = i + j - 1
     Next i
     CountWords = oDict.Count
End Function

Sub preobrazovanie()
     Dim N&, i&, a#, j&, b#
     j = 1
     N = Worksheets("Последовательность").Range("C1")
     For i = 1 To N
         a = Worksheets("Последовательность").Cells(j, 1)
         b = Round(a * 2 ^ 32)
         Worksheets("ЛемпельЗив").Cells(j, 1) = b
         j = j + 1
     Next i
End Sub

Sub Generator()
Randomize
Dim a As Integer
Dim i As Integer
a = Worksheets("Последовательность").Range("C1")
For i = 1 To a
         Worksheets("Последовательность").Cells(i, 1) = Rnd
  Next
  End Sub
[/vba]
 
Ответить
Сообщениепроблема с файлом, весит более 100кб(
[vba]
Код
Option Explicit

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

Function ConcatRng$(rng As Range)
     Dim x
     For Each x In rng.Value
         If x <> "" Then ConcatRng = ConcatRng & Lng2AB32$(Val(x))
     Next x
End Function

Sub ExtractWords()
     Dim i&, j&, m$, oDict, s$
     s = ConcatRng(Range("A1:A65000"))
     Set oDict = CreateObject("Scripting.Dictionary")
     For i = 1 To Len(s)
         For j = 0 To Len(s) - i
             m = Mid$(s$, i, j + 1)
             If Not oDict.Exists(m) Then oDict.Item(m) = m: Exit For
         Next j
         i = i + j
     Next i
     Range("D3").Resize(oDict.Count, 1) = Application.Transpose(oDict.Keys)
End Sub

Function CountWords&(s$)
     Dim i&, j&, m$, oDict
     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
         i = i + j - 1
     Next i
     CountWords = oDict.Count
End Function

Sub preobrazovanie()
     Dim N&, i&, a#, j&, b#
     j = 1
     N = Worksheets("Последовательность").Range("C1")
     For i = 1 To N
         a = Worksheets("Последовательность").Cells(j, 1)
         b = Round(a * 2 ^ 32)
         Worksheets("ЛемпельЗив").Cells(j, 1) = b
         j = j + 1
     Next i
End Sub

Sub Generator()
Randomize
Dim a As Integer
Dim i As Integer
a = Worksheets("Последовательность").Range("C1")
For i = 1 To a
         Worksheets("Последовательность").Cells(i, 1) = Rnd
  Next
  End Sub
[/vba]

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

нужна помощь в подправке макроса(
 
Ответить
Сообщениенужна помощь в подправке макроса(

Автор - melanu
Дата добавления - 29.03.2013 в 08:17
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Выделение слов из посследовательности бит (A,B) (Подсчёт количества слов в словаре)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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