Модераторы: diadiavova, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Циклы в VB2005, Как правильно написать код цикла 
:(
    Опции темы
sated
  Дата 14.6.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.6.2007

Репутация: нет
Всего: нет



B=40 
D=27=2*A*B/(A+B) 
как вычислить "А"? (должно получится 20) 

В Excel есть такая штука, как подбор параметра. Вот, что мне нужно! 
Я так монимаю, что в VB2005 это можно сделать с помощью оператора Do While...Loop ? 
Хотя раньше я делал через If...Then....ElseIf (сказали, что это неверно), но код получается очешь большой, потому, что я перечисляю практически все варианты (около 80) 
Подскажите, как правильно. 
Заранее спасибо.

PM MAIL   Вверх
tol05
Дата 14.6.2007, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1632
Регистрация: 21.12.2006
Где: Харьков

Репутация: 1
Всего: 170



Если обязательно через do...while, то
Код

int result = -1;
int A = 0;
int B = 40;
int D = 27;
do
{
   if ((2 * A * B) / (A + B) >= D)
   {
       result = A - 1;
       break;
   }
   else
   {
       A++;
   }
}
while (true); 

но я бы посоветовал через стaрый добрый for
Код

int result = -1;
int B = 40;
int D = 27;
for(int A = 0; ; A++)
{
   if((2*A*B)/(A+B)>=D)
   {
      result = A - 1;
      break;
   }
}

извиняюсь, что написал на шарпе - я лексику бейсика практически не понимаю smile Думаю, переделать можно без труда, код простой.

З.Ы. Чуть не забыл: в самом конце нужно A=result; smile

Это сообщение отредактировал(а) tol05 - 14.6.2007, 21:21


--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Naum
Дата 15.6.2007, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 2
Всего: 15



tol05, чего-то я не понял
Цитата(tol05 @  14.6.2007,  22:18 Найти цитируемый пост)
(2 * A * B) / (A + B) >= D

почему именно ">=". В данном конкретном случае это конечно сработает, потому как f(A) = (2 * A * B) / (A + B) - функция возрастающая, а вообще-то это же не generic способ. Что-то мне подсказывает, что нужно вспоминать численные методы. Я, к сожалению, их напрочь забыл.:(
Могу только подсказать, что значит с помощью цикла Do While .... Loop.
Код

Dim B As Integer = 40
Dim D As Integer = 27
Dim Epsilon As System.Double = .01 'Допустимая погрешность 0.01 это только для примера. (И забыл как в бейсике короче написать System.Double  :crazy )
Dim A As Integer = D 'Вообще-то с помощью численных методов нужно вычислить первоначальное значение А.
Do While Math.Abs(((2 * A * B) / (A + B)) - D) > Epsilon
   EvaluateNext() 'Тут надо как-то посчитать следующее значение A :). Ответ на этот вопрос, по-моему уже быстрее найти в подфоруме по алгоритмам.
Loop




--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Exception
Дата 16.6.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 18
Всего: 186



Double, он и есть System.Double.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума VB .NET
diadiavova
  • Прежде чем задать вопрос, воспользуйтесь поиском: возможно Ваш вопрос уже обсуждался и на него был получен ответ.
  • Если такой же вопрос не найден, не стоит задавать свой вопрос в любую тему, создайте новую.
  • Заголовок темы должен отображать ее суть.
  • Содержание поста должно описывать проблему понятно, но в то же время, по возможности, лаконично. Сначала следует описать суть вопроса, потом можно привести пример кода, не вынуждайте других участников угадывать в чем Ваша проблема - телепатов здесь нет.
  • Будьте взаимно вежливы и дружелюбны.
  • При оформлении сообщений используйте форматирование, примеры кода заключайте в теги [CODE=vbnet][/CODE].
  • Также ознакомьтесь с общими правилами, действующими на всем форуме.
  • Если вопрос решен, не забывайте помечать тему решенной(вверху темы есть ссылка). Кроме того, если Вы хотите отблагодарить участников, оказавших помощь в решении, можно повысить им репутацию, в случае, если у Вас менее 100 сообщений в форуме и функция изменения репутации Вам недоступна, можете написать сюда.
  • Общие вопросы по программированию на платформе .NET обсуждаются здесь.
  • Литература по VB .NET обсуждается здесь.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.