Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Математические функции, Решение выражений 
:(
    Опции темы
OuterHeaven
Дата 18.12.2008, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Кто-нибудь объясните пожалуйста в чем проблема.
PM MAIL   Вверх
Remiznik
Дата 18.12.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



у тебя z - float используй double  и всё должно работать !
PM MAIL   Вверх
OuterHeaven
Дата 21.12.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пробовал не работает. smile 
PM MAIL   Вверх
Dmi3ev
Дата 21.12.2008, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

pow(a , cos(y));

тут надо разобраться в ситуации, а не в функции!!!  smile 
у тебя все работает, сначала я подправил, потом другие, все фурычит!!! только одно но  smile 
вот это выражение, которое я написал, очень интересно
a=[sin(x+y)*sin(x)] (целая часть этого выражения), дело в том, что это выражение достаточно специфично.
для того, чтобы это дело было отлично от 0, необходимо, чтобы sin(x)=+-1 и одновременно sin(x+y)=+-1, тогда a будет отлично от нуля, в остальных случаях а=0.
вот теперь и подумаем об этих случаях:  smile 
а=0
cos(y)<0
Код

pow(a , cos(y));

попробуй, взведи 0 в отрицательную степень 0^(-1)=0/0  smile 
Думать надо...  smile

Добавлено через 1 минуту и 38 секунд
и еще одно, ты, наверное думаешь, что угол у тебя в градусах  smile а он не в градусах  smile  совсем  smile

Добавлено через 5 минут и 46 секунд
Цитата

попробуй, взведи 0 в отрицательную степень 0^(-1)=0/0

когда твоя прога пытается сделать на экране появляется -inf наверное, что означает -бесконечность, так?( я просто не пробовал запускать) так что все работает))) получил, что хотел)))


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

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


Новичок



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

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



До этого уровня я еще не добрался, я сперва хочу заставить эту прогу работать. А уже потом вносить изменения. По поводу корня пока еще не делал, но будет. Не могу понять что ты делал там выше. Покажи на примере кода.
PM MAIL   Вверх
Dmi3ev
Дата 22.12.2008, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



код по идее рабочий, на первый взгляд, вот попробуйте скопировать его и откомпилить, что за ошибки??? еще раз проделайте это и выкладывайте сюда результаты.
Цитата

у тебя z - float используй double  и всё должно работать ! 

это не суть важно, но все же поменяйте все на double...
делайте, результаты сюда...


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

PM MAIL   Вверх
OuterHeaven
Дата 22.12.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Попробовал заменить на double та же ошибка. Сделал кое-какие изменения в коде, вот посмотрите сейчас все работает, но правильно ли?
Код

#include <stdafx.h>
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
   float x, y;

   float z;                                                    //Замена в этом месте "Float" на "Double" ничего не дала, поэтому оставил все как есть.

   cout << "Enter x, y:\n";

   cout << "x: ";

   cin >> x;

   cout << "y: ";

   cin >> y;

    float a,n;                                               //Заменил тут "Double" на "Float"

    n = modf( sin(x+y)*sin(x), &a );

    cout << endl << sin(x+y)*sin(x);

    cout << endl << "a=" << a;

    cout << endl << "n=" << n;

  z = tan(x/2)+sqrt((1-cos(x))/(1+cos(x)))-(1-cos(x))/sin(x)+sin(x)/(1+cos(x))-pow(a,cos(y));

  cout << "\nz = " << z << endl;

  cout << "\nPress any key to exit...";

  getch();

  return 0;
}

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


Опытный
**


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

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



короче нужно составить ОДЗ ... я думаю так .... и для начала в ручную всё посчитать )))
PM MAIL   Вверх
OuterHeaven
  Дата 22.12.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В общем вот моя задача: Необходимо решить выражение (оно вначале темы), без преобразований. Во время выполнения, поставленной задачи предусмотреть все ошибки времени выполнения (деление на 0 и корень из отрицательного числа). Я в С/С++ еще мало, что понимаю. Давайте вместе попробуем решить данную задачу.

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

Это сообщение отредактировал(а) OuterHeaven - 22.12.2008, 20:08
PM MAIL   Вверх
OuterHeaven
Дата 2.1.2009, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Тут вообще есть кто живой, и кто может помочь? Люди...
PM MAIL   Вверх
OuterHeaven
  Дата 17.2.2009, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот что я смог сделать, помогите пожалуйста довести до ума.

При решении выдает ошибку. Проблема при выведении целой части. Выдает примерно такое 1.#inf. Нифига не пойму.
Код

#include <stdafx.h>
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
    setlocale(0,"");                                //Настраиваем кодировку под кириллицу
    float x, y;                                        //Задаем переменные для ввода в выражение
    float a, b, c, d, e, f, g, h, res;                    //Объявляем переменные для разбивки выражения на 5 частей и общего результата
//-----------------------------------------------------------------------------------------------------------------
    cout << "Введите данные:\n";                    //Выводим на экран предложение о вводе данных
    cout << "x -> ";                                //Выводим на экран предложение о вводе x
    cin >> x;                                        //Считываем x из потока
    cout << "y -> ";
    cin >> y;
    a = tan(x/2);                                    //Выполняем действие
    cout << "\nПервая часть = " << a << endl;        //Выводим результат по первой части
//-----------------------------------------------------------------------------------------------------------------
        if ((1 + cos(x)) != 0) 
        
            b = sqrt(1 - cos(x)) / (1 + cos(x));
        
        else cout << "Внимание! Во второй части выражения возникла ошибка деления на 0\nи дальнейшее выполнение программы невозможно!";
        
            if (sqrt (b) >= 0)
            
                c = sqrt (b);
            
            else cout << "Внимание! Во второй части выражения возникла ошибка извлечения корня из отрицательного числа\nи дальнейшее выполнение программы невозможно!";
            cout << "Вторая часть = " << c << endl;
            
                if (sin(x) != 0)

                    d = (1-cos(x))/sin(x);

                else cout << "Внимание! В третьей части выражения возникла ошибка деления на нуль\nи дальнейшее выполнение программы невозможно!";
        
                cout << "Третья часть = " << d << endl;

                if (1+cos(x) != 0)

                    e = sin(x)/(1 + cos(x));

                else cout << "Внимание! В четвертой части выражения возникла ошибка деления на нуль\nи дальнейшее выполнение программы невозможно!";

                cout << "Четвертая часть = " << e << endl;

//Выводим целую часть числа----------------------------------------------------------------------------------------
                 f = modf(sin(x+y)*sin(x), &h);
                 g = pow(h,cos(y));
                 cout << "Пятая часть = " << g << endl;

//-----------------------------------------------------------------------------------------------------------------
        
    cout << "\nДля выхода из программы нажмите любую клавишу...";

  getch();

  return 0;
}

PM MAIL   Вверх
Dmi3ev
Дата 18.2.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

1.#inf. Нифига не пойму.

еще раз попытаюсь объяснить
вот эта шняга
Цитата

f = modf(sin(x+y)*sin(x), &h);

будет очень часто давать 0, т. к. -1<=sin(x+y)<=1, -1<=sinx<=1, если не ( sin(x+y)=1(-1) && sinx=1(-1), то выражение равно 0
поэтому тут ты 0 возводишь в степень, поэтому важно какая она
Цитата

g = pow(h,cos(y));

вот эта шняга заработает или нет, зависит от cos(y), если он положителен, то заработает, если нет, то будет выдавать ошибку
чтобы ты мне поверил, введи x и y меньше 0.5п и больше 0п, все будет работать, а потом введи x=0.6п и y=0.6п, те от 0 до п, будет твоя inf любимая.
попробуй, а потом поговорим о том, как это решить... 

Это сообщение отредактировал(а) Dmi3ev - 18.2.2009, 18:14


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

PM MAIL   Вверх
bsa
Дата 18.2.2009, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Начнем с ограничений (школьный уровень):
α не может быть равна π/2+nπ, где n ∈ ℤ (tg α = sin α/cos α => cos α должен быть не равен 0)
α не может быть равна 3π/2 + 2nπ, где n ∈ ℤ (1/(1 + cos α) => cos α должен быть не равен -1)
α не может быть равна 0+nπ, где n ∈ ℤ (1/sin α => sin α должен быть не равен 0)
α+β не должно равняться 0+nπ, когда (-π+2nπ) ≤ β ≤ (2π + 2nπ), где n ∈ ℤ

под множеством ℤ понимается множество целых чисел (..., -2, -1, 0, 1, 2, ...)
PM   Вверх
Dmi3ev
Дата 18.2.2009, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



bsa, я так понял, что этому человек просто надо поговорить, потому что я ему это все объяснял... 
теперь ты объясняешь это же. Надеюсь, теперь он поверит в то, что это все из-за самого выражения, что оно является причиной inf в ответе...
Ты - эксперт, думаю должен послушать...  smile 


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

PM MAIL   Вверх
OuterHeaven
Дата 18.2.2009, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Так, я вообще запутался... smile . Гляжу и нифига не понимаю. Пробовал я double...  Хорошо, тогда я так понимаю, тут нужно еще и условие для проверки на возведение в отрицательную степень, которой быть не должно. Верно?
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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