Ошибки отображения Excel
Скриншот Microsoft Excel 2007, показывающий ошибку отображения 65535
22 сентября 2007 года было сообщено, что в определённых ситуациях Excel 2007 будет показывать неправильные результаты. В частности, для тех пар чисел, чье произведение равно 65535 (например, 850 и 77,1), Excel отобразит в качестве итога 100000. Это происходит с примерно 14,5 % таких пар. Кроме того, если к результату добавить единицу, Excel выведет итог 100001. Однако, если вычесть из итога единицу, на дисплее отобразится правильный результат 65534. (Также, если итог умножить или разделить на 2, будут отображены 131070 и 32767,5 соответственно.)
Microsoft сообщила в блоге Microsoft Excel, что проблема существует в отображении шести конкретных значений с плавающей запятой между 65534,99999999995 и 65535 и шести значений между 65535,99999999995 и 65536 (не включая границ). Любые расчеты, результат которых равен одному из двенадцати значений, будут отображаться неправильно. Фактические данные, хранящиеся и передающиеся в другие ячейки, верны, неверно лишь отображение значения. Ошибка появилась в Excel 2007 и не существует в предыдущих версиях. 9 октября 2007 года Microsoft выпустила патч, исправляющий проблему. Он вошёл и в состав исправлений Service Pack 1.
Практическая часть
Программа «Пятнашки»:
Пятна́шки — популярная головоломка, придуманная в 1878 году Ноем Чепмэном. Представляет собой набор одинаковых квадратных костяшек с нанесёнными числами, заключённых в квадратную коробку. Кликая левой кнопкой мыши на кнопку, которая располагается рядом с пустой кнопкой (не по диагонали), она будет заменена на пустую. Цель игры — перемещая костяшки по коробке (в нашем случае кнопки по экрану) добиться упорядочивания их по номерам.
Программа состоит из 3-х основных функций: произвольная расстановка чисел на кнопки, взаимодействие пользователя с кнопками, проверка результата выполненных действий. На языке программирования VBA программный код выглядит так:
Private Sub CommandButton1_Click()
buttonclick
End Sub
Private Sub CommandButton2_Click()
buttonclick
End Sub
...
Private Sub CommandButton16_Click()
buttonclick
End Sub
Private Sub CommandButton17_Click()
' раставляем элементы в случайном порядке
Randomize
' собираем в массив уникальные числа
Dim arr(16) As Integer
For j = 0 To 14
Do
' получаем случайное число
temp = Int((15 * Rnd) + 1)
' проверяем что оно уникальное
Loop While (arr(temp) = 1)
' указываем что число уже используется
arr(temp) = 1
' рисуем число на кнопке
UserForm1.Controls(j).Caption = temp
'
Next j
' очищаем последнюю кнопку
UserForm1.Controls(15).Caption = ""
End Sub
Private Function proverka() As Boolean
Dim flag As Boolean
' флаг определяющий успешность сборки головоломки
flag = True
' проверяем только 15 кнопок, поскольку 16я не имеет значения
For j = 0 To 14
' кнопки считаем от 0, но значения идут от 1
' добавляем 1 к проверяемому значению
flag = flag And j + 1 = Val(UserForm1.Controls(j).Caption)
' если на любом шаге проверка не прошла, выходим
If (Not flag) Then
Exit For
End If
Next j
proverka = flag
End Function
Private Function buttonclick() As Boolean
' обрабатываем клик на кнопке
' если соседняя кнопка пустая, меняем значения местами
' берём активную кнопку
Index = UserForm1.ActiveControl.Name
' определяем её индекс в диапазоне 0..15
Index = Val(Replace(Index, "CommandButton", "")) - 1
' вычисляем строчку и колонку в матрице
c = Int(Index / 4)
r = Index - c * 4
' индекс от 0..15 кнопки с пустым значением
' если в этой переменной -1, значит пустой кнопки мы не нашли
newIndex = -1
If (r >= 0) And (c >= 0) And (r < 4) And (c < 4) Then
' выбираем кнопку над текущей
If (c - 1 >= 0) Then
If (Val(UserForm1.Controls((c - 1) * 4 + r).Caption) < 1) Then
newIndex = (c - 1) * 4 + r
End If
End If
' выбираем кнопку слева от текущей
If (newIndex = -1 And r - 1 >= 0) Then
If (Val(UserForm1.Controls(c * 4 + (r - 1)).Caption) < 1) Then
newIndex = c * 4 + (r - 1)
End If
End If
' выбираем кнопку под текущей
If (newIndex = -1 And c + 1 <= 3) Then
If (Val(UserForm1.Controls((c + 1) * 4 + r).Caption) < 1) Then
newIndex = (c + 1) * 4 + r
End If
End If
' выбираем кнопку справа от текущей
If (newIndex = -1 And r + 1 <= 3) Then
If (Val(UserForm1.Controls(c * 4 + r + 1).Caption) < 1) Then
newIndex = c * 4 + r + 1
End If
End If
End If
' если пустая кнопка найдена, переносим значение на неё
If (newIndex > -1) Then
UserForm1.Controls(newIndex).Caption = UserForm1.ActiveControl.Caption
UserForm1.ActiveControl.Caption = ""
End If
' проверяем, выиграл ли игрок
If (proverka()) Then
MsgBox ("Чётко! Умеешь! Могёшь!")
End If
End Function
Private Sub UserForm_Click()
End Sub
Блок-схема
начало
Кнопка «Перемешать»
расставляем элементы в случайном порядке
собираем в массив уникальные числа
Для j = 0 To 14
получаем случайное число
проверяем что оно уникальное
указываем что число уже используется
рисуем число на кнопке
Next j
очищаем последнюю кнопку
конец
Проверка
начало
flag = True
For j = 0 To 14
добавляем 1 к проверяемому значению
Not flag
да
нет
Next j
Exit For
конец
К
начало
обрабатываем клик на кнопке, если соседняя кнопка пустая, меняем значения местами
берём активную кнопку
определяем её индекс в диапазоне 0..15
лик на кнопке
берём активную кнопку определяем её индекс в диапазоне 0..15
c = Int(Index / 4)
r = Index - c * 4
индекс от 0..15 кнопки с пустым значением,
если в этой переменной -1, значит пустой кнопки мы не нашли
newIndex = -1
r >= 0 and c >= 0 and
r < 4 and c < 4
выбираем кнопку сверху от текущей
выбираем кнопку слева от текущей
Выбираем кнопку снизу от текущей
выбираем кнопку справа от текущей
пустая кнопка найдена, переносим значение на неё
проверка
HAPPY WINS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1111111111111
конец
Виды окон и формы
Начальный вид:
С помощью кнопки, показанной ниже, пользователь вызывает интерфейс, с которым ему придётся взаимодействовать
Gameplay:
П ользовательская форма состоит из девушки в правой стороне экрана, радующей глаз , кнопок с цифрами , кнопки, при нажатии на которую цифры меняют своё местопол ожение в произвольном порядке .
При выполнении задания (восстановлении последовательности чисел) на экране появляется одобрительная надпись, которая сводит все 50-тичасовые муки, вызванные бесконечными тыками мышкой в экран, на нет и ты горд собой .
Список используемой литературы:
Колесников Р. Excel (русифицированная версия). - Киев: Издательская группа BHV,.
Руководство пользователя. Microsoft Windows. - Neunkirchen: Buhl-Data-Service Microsoft Corporation, .
Рассел Борланд. Эффективная работа с Microsoft Word . - СПб: Питер.
Материалам эхоконференции RU.EXCEL Collected by Kirienko Andrew, 2:5020/239.21@fidonet
Англо-русский словарь по программированию и информатике (с толкованиями). - М.: Рус. яз.,
http://www.microsoft.ru/main.html
http://www.microsoft.com/officefreestuff/excel
http://nsvrv.ziet.zhitomir.ua/bmu/Sppp/index.html
http://members.aol.com/gjlinker/projects/oraxcel
http://www.infoart.ru:8000/it/book/russ_red/excel5/content.htm
http://www.infoart.ru:8000/it/book/russ_red/excel5/intro.htm