Тип данных 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 (&).
Цитата (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 (&).
Справка же есть, на словах - отбрасывает дробную часть
Но и здесь на месте преподавателя я бы придрался "А если число дробное, или больше чем 2^32-1, или отрицательное, то функция не корректно работает"
На что нужно парировать, что "это учебное задание, и проверку входных данных на корректность делать не обязательно, тем более, что в задании не указано, что числа могут быть дробными, отрицательными или более чем 32 битными"
Цитата (melanu)
# - я так понимаю double ?
Да
Цитата (melanu)
а что значит функция Fix ?
Справка же есть, на словах - отбрасывает дробную часть
Но и здесь на месте преподавателя я бы придрался "А если число дробное, или больше чем 2^32-1, или отрицательное, то функция не корректно работает"
На что нужно парировать, что "это учебное задание, и проверку входных данных на корректность делать не обязательно, тем более, что в задании не указано, что числа могут быть дробными, отрицательными или более чем 32 битными"MCH
К счастью больше 4294967295 не могут быть) я всё перепроверила и это максимальное число! Дробными тоже нет, минимальное 1 максимальное 4294967295.
К счастью больше 4294967295 не могут быть) я всё перепроверила и это максимальное число! Дробными тоже нет, минимальное 1 максимальное 4294967295.melanu
Возникла проблема с выборками большого обьёма чисел, более 1 тысячи. Макрос подсчитывает слова и выводит их, но делает это явно не правильно, т.к. при больших выборках 5000,10000 должны получаться слова более 32-х бит, а они топчутся на месте( Цельная цепочка не пойдёт, так как ячейка в excel имеет ограничение на 32000 символов, нужно просто чтоб правильно выводило количество слов и сами слова. Вот пример файла, вставила генератор rnd и преобразователь в 2^32 с округлением.
Возникла проблема с выборками большого обьёма чисел, более 1 тысячи. Макрос подсчитывает слова и выводит их, но делает это явно не правильно, т.к. при больших выборках 5000,10000 должны получаться слова более 32-х бит, а они топчутся на месте( Цельная цепочка не пойдёт, так как ячейка в excel имеет ограничение на 32000 символов, нужно просто чтоб правильно выводило количество слов и сами слова. Вот пример файла, вставила генератор rnd и преобразователь в 2^32 с округлением.melanu
Сообщение отредактировал melanu - Четверг, 28.03.2013, 09:40
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