Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
erisnuts
1 / 1 / 1
Регистрация: 01.05.2013
Сообщений: 13
1

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

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

Привет всем.)

Попался код:

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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2013, 13:01
Ответы с готовыми решениями:

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

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

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

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

Получить сумму тех членов последовательности
Помогите решить задачю , отблагодарю любой новой песней! Даны целые числа...

3
Казанский
14334 / 5947 / 1575
Регистрация: 24.09.2011
Сообщений: 9,366
01.05.2013, 13:20 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Это указание на то, что единица имеет тип Double. См. F1 - Double Data Type.
Без такого указания единица будет иметь тип Integer, и каждый раз будет проводиться преобразование единицы в тип Double, что приведет к увеличению времени выполнения программы.
Впрочем, для этого кода это несущественно.
1
Скрипт
5446 / 1127 / 49
Регистрация: 15.09.2012
Сообщений: 3,420
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
erisnuts
1 / 1 / 1
Регистрация: 01.05.2013
Сообщений: 13
02.05.2013, 21:02  [ТС] 4
Спасибо вам.)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 21:02

Получить сумму тех чисел данной последовательности,которые удовлетворяют условию
Даны целые числа а1.........а50.Получить сумму тех чисел данной...

Найти сумму чётных элементов последовательности
Помогите с задачей!!!Надо в VBA для Excel. Дана последовательность из n целых...

Определить сумму отрицательных элементов в числовой последовательности. Исправить код
Создать функцию пользователя которая возвращает результат: при заданном...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru