Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 01.05.2013
Сообщений: 13
1

С помощью рекурсивной функции получить сумму n элементов последовательности

01.05.2013, 13:01. Показов 1269. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем.)

Попался код:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub lab8_v2()
    Range("B2").Value = sum(Range("B1").Value)
End Sub
 
Function sum(n) As Double
    If n = 1 Then
        sum = 1
    Else
        sum = sum(n - 1) + 1# / n
    End If
End Function
это решение задачки: "С помощью рекурсивной функции получить сумму n элементов
последовательности 1+1/2+1/3+…+1/n"

И вопрос состоит в 1# / n. Что за # и для чего она здесь может быть нужна? потому что ответ не меняется в зависимости от ее присутствия.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2013, 13:01
Ответы с готовыми решениями:

С помощью рекурсивной функции получить сумму n элементов последовательности
Помогите, пожалуйста! С помощью рекурсивной функции получить сумму n элементов...

С помощью рекурсивной функции получить сумму n элементов последовательности
С помощью рекурсивной функции получить сумму n элементов последовательности 1+2+3+…+n ...

С помощью рекурсивной функции получить сумму n элементов
С помощью рекурсивной функции получить сумму n элементов последовательности 1^k+2^k+3^k+…+n^k VBA...

В рекурсивной функции высчитать сумму элементов в массиве
Добрый день господа программисты! Подскажите пожалуйста такую вещь! Объявлена запись Type под...

3
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
01.05.2013, 13:20 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Это указание на то, что единица имеет тип Double. См. F1 - Double Data Type.
Без такого указания единица будет иметь тип Integer, и каждый раз будет проводиться преобразование единицы в тип Double, что приведет к увеличению времени выполнения программы.
Впрочем, для этого кода это несущественно.
1
5472 / 1150 / 50
Регистрация: 15.09.2012
Сообщений: 3,518
01.05.2013, 14:46 3
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Про константы
Весь текст кода делится на три части (может больше, сходу не могу сказать):
  1. переменные;
  2. константы;
  3. ключевые слова.
Переменные - это ссылки на какую-то информацию. Аналогично ссылкам на сайте. На сайте есть ссылка, вы по ней щёлкаете и переходите куда-то в другое место.
Константы - это числа. Может ещё что относится к константам.
Ключевые слова - это все остальное, что используется языком программирования "VBA".

Константе можно назначать тип данных для каких-то целей.
Типы данных в "VBA" имеют специальные символы. Символ "#" означает тип данных "Double".

Если константе не указывать тип данных, то VBA автоматически назначает константе какой-то тип данных. Для числа "1" (число "1" в коде - это константа) VBA назначит тип данных "Integer".

В некоторых случаях константам нужно назначать какой-то тип данных, чтобы не возникало ошибки. Это нужно, например, при использовании в вычислениях целых чисел, когда получается результат, больший типа данных "Long". VBA автоматически в этом случае не назначает результату тип данных "Double", а использует тип данных чисел, участвующих в вычислении. Вот этот код даст ошибку:
Visual Basic
1
2
3
4
5
6
Sub Procedure_1()
    
    'Вывод результата в View - Immediate Window.
    Debug.Print 1000000000 + 1000000000 + 1000000000
    
End Sub
В этом коде трём числам (1000000000) присваивается тип данных "Long". Максимальное число в типе данных "Long" около 2 миллиардов.

Если одно из чисел сделать с типом данных "Double", то результат уже примет нужный тип данных (VBA в этом случае делает некоторые действия) и ошибки не будет:
Visual Basic
1
2
3
4
5
6
Sub Procedure_2()
    
    'Вывод результата в View - Immediate Window.
    Debug.Print 1000000000# + 1000000000 + 1000000000
    
End Sub

Что касается вашего случая, то в вашем случае не известно, зачем преобразовывать константу "1" из типа данных "Integer" (VBA назначает автоматически константе "1" тип данных "Integer") в тип данных "Double".
1
1 / 1 / 1
Регистрация: 01.05.2013
Сообщений: 13
02.05.2013, 21:02  [ТС] 4
Спасибо вам.)
0
02.05.2013, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2013, 21:02
Помогаю со студенческими работами здесь

С помощью рекурсивной функции вычислить сумму элементов одномерного массива
С помощью рекурсивной функции вычислить сумму элементов одномерного массива,помогите...

С помощью рекурсивной функции вычислить сумму элементов одномерного массива
С помощью рекурсивной функции вычислить сумму элементов одномерного массива. Есть примеры но...

Найти n-ый член последовательности: x1 = 2, x2 = 5, x3 = 8, … xn = xn-1 + 3, с помощью рекурсивной функции
Помогите, пожалуйста, с задачей (в Паскале) Найти n-ый член последовательности: x1 = 2, x2 = 5,...

Найти n-ый член последовательности с помощью рекурсивной функции
18.Найти n-ый член последовательности: x1 = 2, x2 = 5, x3 = 8, … xn = xn-1 + 3, с помощью...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru