Опубликован: 25.03.2009 | Уровень: для всех | Доступ: свободно
Лекция 17:

Практика MS Excel

17.2. Задача об обмене значениями

17-02-Обмен значений.xlsm - пример к п. 17.2.

17.2.1. Условие

Произвести обмен значениями двух переменных без использования третьей

17.2.2. Решение

Предположим, что имеются 2 переменные (А и В), содержащие числа. Для обмена значениями этих переменных достаточно произвести следующие действия:

  1. Сложить А и В и результат записать в А
  2. Вычесть из А переменную В и записать результат в В.
  3. Вычесть из А переменную В и записать результат в А.

Для решения задачи будем считать, что число A записано в ячейку B2, число В - в ячейку C2. Подпишем соответствующим образом эти ячейки и разместим на рабочем листе кнопку с именем cmd_Change и надписью Обменять А и В (рис. 17.6.)

Рабочий лист, подготовленный для решения задачи

Рис. 17.6. Рабочий лист, подготовленный для решения задачи

В листинге 17.6. вы можете найти программный код для решения задачи, размещенный в обработчике события Click для кнопки cmd_Change

'Сохраняем сумму ячеек в B2
    ActiveSheet.Range("B2") = _
        ActiveSheet.Range("B2") + _
        ActiveSheet.Range("C2")
    'Разность сохраняем в С2
    ActiveSheet.Range("C2") = _
        ActiveSheet.Range("B2") - _
        ActiveSheet.Range("C2")
    'И еще раз разность в B2
    ActiveSheet.Range("B2") = _
        ActiveSheet.Range("B2") - _
        ActiveSheet.Range("C2")
Листинг 17.6. Решение задачи

17.3. Перевод чисел из одной системы счисления в другую

17-03-Системы счисления.xlsm - пример к п. 17.3.

17.3.1. Условие

Перевести заданное пользователем целое число A из одной системы счисления ( P ) в другую ( Q ). P и Q могут изменяться от 2 до 10.

17.3.2. Решение

MS Excel содержит функции для преобразования чисел между различными системами счисления, однако здесь мы создадим универсальное решение. Вы сможете встроить этот код в свои проекты. При необходимости вы сможете доработать его так, чтобы он смог работать с системами счисления, основание которых превышает 10.

В данном случае наиболее очевидным является перевод введенного числа сначала из системы счисления с основанием P в систему с основанием 10, а потом уже из системы с основанием 10 в систему с основанием Q.

Перевод в десятичную систему счисления осуществляется в два этапа:

  1. Разбиение введенного числа на отдельные цифры
  2. Получение десятичного числа по следующему алгоритму:

Первую цифру числа в системе счисления с основанием Q нужно умножить на Q в нулевой степени. Полученное число прибавить к произведению второй цифры числа, умноженную на Q в 1-й степени и так далее. Например:

Перевод из двоичной системы в десятичную:

1101 =1*2^3+1*2^2+0*2^1+1*2^0=8+4+0+1=13

Перевод из пятеричной системы в десятичную:

1042=1*5^3+0*5^2+4*5^1+2*5^0=125+0+20+2=147

Перевод в систему счисления с основанием Q из системы с основанием 10 осуществляется путем накапливания остатков от деления этого числа на Q с последующим изменением этого числа целочисленным делением его на Q до тех пор, пока переводимое число не станет равным 0.

Для решения этой задачи нам понадобится форма, содержащая следующие элементы управления (табл. 17.6.). У текстовых полей свойство AutoSize установлено в True.

Таблица 17.6. Элементы управления
Имя элемента управления Подпись и примечания
cmd_OK Перевести. Кнопка для перевода чисел
txt_P Из системы P. Текстовое поле для хранения основания системы счисления P.
txt_Q В систему Q. Поле для хранения основания системы счисления Q
txt_A Число для перевода. Число, заданное для перевода из системы P в Q
txt_B Результат. Текстовое поле для вывода результата перевода

На рис. 17.7. вы можете увидеть форму программы.

Форма программы для перевода чисел из одной системы счисления в другую

Рис. 17.7. Форма программы для перевода чисел из одной системы счисления в другую

В листинге 17.7. вы можете найти код события Click для кнопки cmd_OK.

'Для хранения основания системы P
    Dim num_P
    'Для хранения основания системы Q
    Dim num_Q
    'Для хранения числа в 10-й системе
    Dim num_10
    'Для хранения очередного числа в
    'системе счисления Q
    Dim num_S
    num_P = Val(txt_P)
    num_Q = Val(txt_Q)
    'Переводим введенное число из
    'системы счисления P
    'в десятичную систему
    For i = 1 To Len(txt_A)
        num_10 = num_10 + Val(Mid(txt_A, i, 1)) * _
            num_P ^ (Len(txt_A) - i)
    Next i
    'Переводим число из десятичной системы
    'в систему с основанием Q
    txt_B = ""
    While num_10 <> 0
        'Остаток от деления запишем в str_S
        num_S = num_10 Mod num_Q
        'Запишем очередное число в
        'окно для вывода результата
        txt_B = Mid(Str(num_S), 2, 1) + txt_B
        'Запишем в num_10 результат
        'целочисленного деления
        'num_10 на основание системы
        'счисления Q
        num_10 = num_10 \ num_Q
    Wend
Листинг 17.7. Решение задачи

17.4. Выводы

В этой лекции мы рассмотрели несколько практических примеров решения задач для MS Excel.

Евгений Ушаков
Евгений Ушаков
О стоимости курса
Александр Новиков
Александр Новиков
Справочник по объектам VBA
Анатолий Федоров
Анатолий Федоров
Россия, Москва
Михаил Алексеев
Михаил Алексеев
Россия