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

Поиск:

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


Новичок



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

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



Требуется решить выражение типа:
user posted image

Где:
[x] – целая часть числа

Для программирования использую Microsoft Visual Studio C++ 2008 (Express Edition)

Вот код написанной программы:
Код

#include <stdafx.h>
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

int main()
{
    float x, y;
    float z;
    
    cout << "Vvedite x, y:\n";
    
    cout << "x: ";

    cin >> x;

    cout << "y: ";

    cin >> y;

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

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

    getch();
    return 0;
}


Компилятор выдает ошибку. Я неправильно записал выражение начиная с функции pow... и так далее. Как правильно записать выражение? Помогите плиз.

Это сообщение отредактировал(а) OuterHeaven - 14.12.2008, 02:21
PM MAIL   Вверх
Dmi3ev
Дата 14.12.2008, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

pow(modf(sin(x+y)*sin(x))),cos(y)

не разбирался в остальном но здесь скобки расставлены неверно, надо так:
pow(modf(sin(x+y)*sin(x)), cos(y))


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

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


Новичок



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

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



Все равно выдает ошибку
error C2661: modf: нет перегруженной функции, принимающей 1 аргументов

Что она означает smile 


Это сообщение отредактировал(а) OuterHeaven - 14.12.2008, 02:21
PM MAIL   Вверх
Dmi3ev
Дата 14.12.2008, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код

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


Добавлено через 2 минуты и 14 секунд
modf, во-первых принимает два параметра, а во-вторых она возвращает дробную часть числа )))


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

PM MAIL   Вверх
Ellmi
Дата 14.12.2008, 02:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



так ведь у modf 2 параметра:    double modf(double x, double *intptr);

Код

   double *a;
   modf( sin(x+y)*sin(x), a );
   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;


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


Эксперт
***


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

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



Ellmi, это да, я просто сказал про ситуацию, в которой OuterHeaven применял. По-моему int здесь проще будет использовать. 


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

PM MAIL   Вверх
Ellmi
Дата 14.12.2008, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

modf, во-первых принимает два параметра, а во-вторых она возвращает дробную часть числа )))


упс, всё уже сказано smile

Добавлено через 1 минуту и 22 секунды
ага,  с int я согласна, если не обязательно мат функции использовать
PM MAIL   Вверх
OuterHeaven
Дата 14.12.2008, 03:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Ellmi @  14.12.2008,  02:58 Найти цитируемый пост)
  double *a;
   modf( sin(x+y)*sin(x), a );
   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;


Не совсем понял, что означает этот код... Да и при попытке его воткнуть выдает снова ошибку. Что-то тут явно не совпадает с выражением вначале темы... Откуда "а" взявлось? Прокомментируйте плиз. Я только неделю занимаюсь этим С++. 

Сделал так:
Код

#include <stdafx.h>
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

int main()
{
    float x, y;
    float z;
    
    cout << "Vvedite x, y:\n";
    
    cout << "x: ";

    cin >> x;

    cout << "y: ";

    cin >> y;

    double *a;
    
    modf( sin(x+y)*sin(x), a );
    
    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;

    getch();

    return 0;
}


Это сообщение отредактировал(а) OuterHeaven - 14.12.2008, 03:26
PM MAIL   Вверх
OuterHeaven
Дата 14.12.2008, 22:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Кто-нибудь мне поможет? Народ!!! smile  smile  smile  smile  smile  smile  smile  smile 
PM MAIL   Вверх
Remiznik
Дата 14.12.2008, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

#include <stdafx.h>
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
    float x, y;
    float z;
    
    cout << "Vvedite x, y:\n";
    
    cout << "x: ";
    cin >> x;
    cout << "y: ";
    cin >> y;
    double a;
    
    modf( sin(x+y)*sin(x), &a );
    
    z = tan(x/2) + sqrt( (1-cos(x)) / (1+cos(x)) ) - (1-cos(x))/sin(x) + sin(x)/(1+cos(x)) - pow(a,(double)cos(y));
    cout << "\nz = " << z;
    getch();
    return 0;
}


попробуй так ... но я не уверен что преоброзование будет коректный результат выдавать !
PM MAIL   Вверх
OuterHeaven
Дата 15.12.2008, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А по какой причине он может выдавать неверный результат???
PM MAIL   Вверх
Ellmi
Дата 15.12.2008, 19:34 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я местами дробную и целую части перепутала smile 
Исправила, у меня работает:
Код

#include <stdafx.h>
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

int main()
{
   float x, y;
   float z;

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

   cout << "x: ";

   cin >> x;

   cout << "y: ";

   cin >> y;


  double a,n;

  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;

    getch();
    return 0;
}



Описание функци modf

#include 
double modf(x,intptr);
double x; значение с плавающей точкой
double *intptr; указатель на хранение целой части

Функция modf разрывает значение с плавающей точкой x на
дробную и целую части. Возвращается знаковая дробная часть x. Це-
лая часть хранится в intptr как значение с плавающей точкой.

Функция modf возвращает знаковую дробную часть x. 

Пример: 
double x,y,n;
x = -14.87654321;
y = modf(x,&n); /* y = -0.87654321, n = -14.0 */

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


Опытный
**


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

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



Цитата(Ellmi @ 15.12.2008,  19:34)
#include 
double modf(x,intptr);
double x; значение с плавающей точкой
double *intptr; указатель на хранение целой части

Функция modf разрывает значение с плавающей точкой x на
дробную и целую части. Возвращается знаковая дробная часть x. Це-
лая часть хранится в intptr как значение с плавающей точкой.

Функция modf возвращает знаковую дробную часть x. 

Пример: 
double x,y,n;
x = -14.87654321;
y = modf(x,&n); /* y = -0.87654321, n = -14.0 */

а у меня вот вопрос )
почему мы используем только целу часть ? нельзя разве использовать всё число ? 
PM MAIL   Вверх
OuterHeaven
Дата 16.12.2008, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ОГРОМНОЕ СПАСИБО ТЕБЕ Ellmi 
Цитата

а у меня вот вопрос )
почему мы используем только целу часть ? нельзя разве использовать всё число ? 

Remiznik, я учусь на факультете "Информатика и прикладная математика". Вот нас и заставили писать программу именно с таким условием. У меня еще три задачи впереди... Вторая задача такого же типа, но я надеюсь справиться сам. Ну, а если не смогу, то буду снова просить помощи у Вас.

Это сообщение отредактировал(а) OuterHeaven - 16.12.2008, 02:09
PM MAIL   Вверх
OuterHeaven
  Дата 18.12.2008, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ, ни могу понять. Раньше программа работала.
Код

#include <stdafx.h>
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
int main()
{
   float x, y;
   float z;
   cout << "Vvedite x, y:\n";
   cout << "x: ";
   cin >> x;
   cout << "y: ";
   cin >> y;
  double a,n;
  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;
    getch();
    return 0;
}


А сейчас, вдруг ни с того ни с сего стала выдавать ошибки:
1>c:\users\ahilles\documents\visual studio 2008\projects\задача №7\задача №7\задача №7.cpp(35) : error C2666: pow: для 6 перегрузок есть подобные преобразования
1>        c:\program files\microsoft visual studio 9.0\vc\include\math.h(575): может быть 'long double pow(long double,int)'
1>        c:\program files\microsoft visual studio 9.0\vc\include\math.h(573): или       'long double pow(long double,long double)'
1>        c:\program files\microsoft visual studio 9.0\vc\include\math.h(527): или       'float pow(float,int)'
1>        c:\program files\microsoft visual studio 9.0\vc\include\math.h(525): или       'float pow(float,float)'
1>        c:\program files\microsoft visual studio 9.0\vc\include\math.h(489): или       'double pow(double,int)'
1>        c:\program files\microsoft visual studio 9.0\vc\include\math.h(123): или       'double pow(double,double)'
1>        при попытке сопоставить список аргументов '(double, float)'
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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