Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Гаряка Асмик
Статус: Специалист
Рейтинг: 2905
∙ повысить рейтинг »
lamed
Статус: Практикант
Рейтинг: 2188
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 1892
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / C/C++

Номер выпуска:1500
Дата выхода:19.03.2010, 13:00
Администратор рассылки:Verena, Профессионал
Подписчиков / экспертов:640 / 194
Вопросов / ответов:2 / 2
IRC-канал по теме:#C

Вопрос № 177232: Здравствуйте, Ув. эксперты! Задача: Вычислить значение функции y, развив функцию ln(x) в ряд Тейлора. Аргумент х изменяется от -1 до 3 с шагом 0.5. Определить погрешность. Y= ln(x)+ln(x/2) 0<x<=2 ln(x/2-1) x>=2 Код моей...


Вопрос № 177233: прошу помочь решить такую задачку, как только не пробовал не получается( : заполнить квадрат (произвольную квадратную матрицу) определенным образом начиная с левого нижнего угла, потом справа символ, потом символ над левым нижним и т.д., в общ...

Вопрос № 177232:

Здравствуйте, Ув. эксперты!
Задача:
Вычислить значение функции y, развив функцию ln(x) в ряд Тейлора. Аргумент х изменяется от -1 до 3 с шагом 0.5. Определить погрешность.
Y=
ln(x)+ln(x/2) 0<x<=2
ln(x/2-1) x>=2

Код моей программы во вложении.
Помогите, пожалуйста, отладить код...убрать ошибки, неточности и т.д.
Только начинаю изучать язык...вся надежда на вас...
Буду благодарна любой помощи!!!

Отправлен: 14.03.2010, 01:46
Вопрос задал: Gorlova, Х Заблокирован
Всего ответов: 1
Страница вопроса »


Отвечает Verena, Профессионал :
Здравствуйте, Gorlova.
Взято из ответов в минифоруме Воробьёва Алексея Викторовича и Barney.
Ошибки в коде:
1. log(x) не определена при x<=0, поэтому надо вставить проверку и возвращать NaN - Not A Number.
2. Формула Тейлора реализована неправильно. У Вас log(1+x)=Sum(x^n/n!), а должен быть Sum(x^n/n). Правильный код цикла: member*=x-1; sum+=member/i;
3. В main() ошибка в условном операторе. В C++ надо писать if(0<=x && x<=2)
4. В main() ошибка при вычислении результата: должно быть не st=log(exp(x)) – log(exp(x/2)); а st=log(x) – log(x/2);
Исправленная функция:
Код:
float logon(float x) //Возвращать double н
 е имеет смысла, если расчеты происходят с float. Никакого выигрыша в точности это не даст. Или здесь float, или переменные - double
{
float sum=x-1;
int i=2; //с двойки
float t=0.001;
float member=x-1;
while (fabs(member)>t) //сдесь было неправильное условие завершения цикла
{ member=member*(-(x-1)*(i-1)/i); //текущий элемент за формулой Тейлора
sum+=member;
i++; }
return sum;
}

Исправленный цикл:
Код:
for ( x=xn;x<=xk;x+=xs)
{
flag = 0; //сбрасываем значение переменой на каждой итерации
if (0<x && x<=2) //здесь интервал (0; 2]
{ y=logon(x)-logon(x/2);
st=log(x) - log(x/2);
err=st-y;
}
else if (x>2)
{ y=logon(x/2-1);
st=log(x/2-1);
err=st-y;
}
else flag =1;
if ( flag==0)
printf (" %f %f %f %f \n", x, y, st, err);
else printf (" %f not define \n", x );
}

-----
Эта история - не для истории, понимаешь?

Ответ отправил: Verena, Профессионал
Ответ отправлен: 18.03.2010, 22:16
Номер ответа: 260205

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 260205 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Вопрос № 177233:

    прошу помочь решить такую задачку, как только не пробовал не получается(
    : заполнить квадрат (произвольную квадратную матрицу) определенным образом
    начиная с левого нижнего угла, потом справа символ, потом символ над левым нижним и т.д., в общем направление в квадрате справа налево
    заранее спасибо

    Отправлен: 14.03.2010, 02:01
    Вопрос задал: Archibald, Посетитель
    Всего ответов: 1
    Страница вопроса »


    Отвечает lamed, Практикант :
    Здравствуйте, Archibald. Программа в приложении G++/Code::Blocks.
    Пример работы программы
    Код:
    n=5
    15 19 22 24 25
    10 14 18 21 23
    6 9 13 17 20
    3 5 8 12 16
    1 2 4 7 11
    Для продолжения нажмите любую клавишу . . .


    Приложение:

    Ответ отправил: lamed, Практикант
    Ответ отправлен: 16.03.2010, 09:24
    Номер ответа: 260152

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 260152 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное