Поиск:

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


Новичок



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

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



Ребят! Есть программа:
Код

#include <math.h>
#include <stdio.h>

double factorial(double val)
{
    if (val > 1)
        return factorial(val - 1) * val;
    return 1;
}

int main(int argc, char *argv[])
{    
    double x = -1. / 4;    
    double k = 1;
    double left = 0, right = left;        
    double step = pow(1. / 10, 15);

    do
    {    
        left = factorial(4 * k + 1) / pow(static_cast<double>(factorial(2 * k)), 2) * pow(static_cast<double>(x), 2 * k);    
        right = 1. / 2 * pow(static_cast<double>(1 - 4 * x), -3. / 2) + pow(static_cast<double>(1 + 4 * x), -3. / 2);        
        x += step;
        
        if (x >= 1. / 4)
            x = -1. / 4, k += step;
    }
    while (abs(right - left) >= pow(static_cast<double>(10), -15));

    printf("%f\n", k);

    return 0;
}


Не могу вывести  рез-т на экран... пробовал добавить в код: Form1->Edit1->Text=k;   но он ее не распознает k! А если сделать K глобальной переменной, то выводит 1... как  быть? 

PM MAIL   Вверх
nworm
Дата 9.3.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если это под консоль планируется, то надо в начало добавлять
Код

#include <conio.h>

Код

а в конец getch();


А если, формочки, то вместо main будет Button1Click... 
PM MAIL WWW   Вверх
molodzo
Дата 9.3.2009, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код исправил:

Код

#include <math.h>
#include <stdio.h>

double factorial(double val)
{
    if (val > 1)
        return factorial(val - 1) * val;
    return 1;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    double x = -1. / 4;
    double k = 1;
    double left = 0, right = left;
    double step = pow(1. / 10, 15);

    do
    {
        left = factorial(4 * k + 1) / pow(static_cast<double>(factorial(2 * k)), 2) * pow(static_cast<double>(x), 2 * k);
        right = 1. / 2 * pow(static_cast<double>(1 - 4 * x), -3. / 2) + pow(static_cast<double>(1 + 4 * x), -3. / 2);
        x += step;

        if (x >= 1. / 4)
            x = -1. / 4, k += step;
    }
    while (abs(right - left) >= pow(static_cast<double>(10), -15));

    Form1->Edit1->Text=k;




Только теперь возьникает ошибка: invalid floating point operation.
По инету вроде полазил, однако не получается исправить! 
Help!
PM MAIL   Вверх
Michrutka
Дата 9.3.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



а в какой строчке возникает ошибка?
к слову
Код

abs(right - left)

функция abs возвращает целое число
по скольку что left, что right у тебя double нужно испоьзовать функцию fabs()

Код

fabs(right - left)

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


Новичок



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

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



Ошибка в этой строчке:
while (abs(right - left) >= pow(static_cast<double>(10), -15));

Спасибо за fabs!)

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


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(molodzo @  9.3.2009,  20:18 Найти цитируемый пост)
Ошибка в этой строчке:
while (abs(right - left) >= pow(static_cast<double>(10), -15));


Вовсе нет. У меня ошибка в этой строчке:
Код

right = 1. / 2 * pow(static_cast<double>(1 - 4 * x), -3. / 2) + pow(static_cast<double>(1 + 4 * x), -3. / 2);


right получает значение +INF.

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

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


Новичок



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

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



Вроде исправил эту строчку:
Код

right = 0.5 * pow( static_cast<double>(1/(1 - 4 * x)), 1.5) + pow( static_cast<double>(1/(1 + 4 * x)), 1.5);


Тока за ошибкой следует ошибка... теперь: floating point division by zero.
Видимо, это из-за слишком больших чисел... тока во что с ними делать?
PM MAIL   Вверх
Anikmar
Дата 9.3.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(molodzo @  9.3.2009,  21:55 Найти цитируемый пост)
 floating point division by zero

Цитата(molodzo @  9.3.2009,  21:55 Найти цитируемый пост)
1/(1 - 4 * x)

А что вы хотите еще тут получить? Вы же сами присваиваете х значение 1/4. Затем умножате на 4 - получаем 1...

Может лучше приведите формулы, по которым надо считать, посмотрим что к чему?


PM MAIL ICQ   Вверх
molodzo
Дата 9.3.2009, 22:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот сама задача:

k изменяется от 0 до бесконечности ((4k+1)! / [(2k)!]^2) * x^2k = =1/2*[(1-4x)^(-3/2) + (1+4x)^(-3/2)]

X принадлежит интервалу [-1/4 ; 1/4)

Найти мин. k, которое будет удовлетворять условию: 
abs(правая часть - левая часть) < 10^(-15)
PM MAIL   Вверх
Dmi3ev
Дата 9.3.2009, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Код

double factorial(double val)
{
    if (val > 1)
        return factorial(val - 1) * val;
    return 1;
}

интересное исполнение факториала + к этому почему тип double у функции факториала??? а почему передается дробное? факториал у дробного числа? Надо бы саму логику и математику продумать, а потом писать... 


--------------------

PM MAIL   Вверх
Anikmar
Дата 9.3.2009, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(Dmi3ev @  9.3.2009,  22:20 Найти цитируемый пост)
интересное исполнение факториала + к этому почему тип double у функции факториала??? а почему передается дробное? факториал у дробного числа? Надо бы саму логику и математику продумать, а потом писать..

Мне кажется, что методом перебора такие задачи вообще не решаются

Цитата(molodzo @  9.3.2009,  16:18 Найти цитируемый пост)

double step = pow(1. / 10, 15);
...
x += step;

В программе перебирается х, а в задаче сказано 
Цитата(molodzo @  9.3.2009,  22:10 Найти цитируемый пост)
Найти мин. k, которое будет удовлетворять условию: 
abs(правая часть - левая часть) < 10^(-15) 

Тогда, получается, что надо перебирать k? До бесконечности?

Задача решается другим методом, не перебором.



PM MAIL ICQ   Вверх
molodzo
Дата 9.3.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В задаче вроде перебирается и x (в заданном интервале) и k (до завершения условия)! А как по-другому можно сделать?
PM MAIL   Вверх
Anikmar
Дата 9.3.2009, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(molodzo @  9.3.2009,  22:34 Найти цитируемый пост)
В задаче вроде перебирается и x (в заданном интервале) и k (до завершения условия)! А как по-другому можно сделать? 


Просто перебор х я увидел, а перебор к нет - вот и фантазирую.

А с каким шагом надо перебирать х?


PM MAIL ICQ   Вверх
molodzo
Дата 9.3.2009, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Т.к. надо сравнивать  с 10^(-15), то и к X я прибавляю 10^(-15)...

Это сообщение отредактировал(а) molodzo - 9.3.2009, 22:52
PM MAIL   Вверх
Anikmar
Дата 9.3.2009, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Цитата(molodzo @  9.3.2009,  22:52 Найти цитируемый пост)
Т.к. надо сравнивать  с 10^(-15), то и к X я прибавляю 10^(-15)...

Интересная логика.

А в условиях задачи что прописано?
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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