Вычислить, не используя функцию pow, значения функции z(x,m) = xm sinm(xm), для значений аргументов:
xот -1.1 до 0.3 с шагом 0.2;mот 1 до 5 с шагом 1.
При решении данной задачи просто найдите способ обойтись без функции pow. Например, воспользуйтесь циклом while. Пример работы программы показан ниже:
Автор данного решения — пользователь нашего сайта blablabla, поблагодарим его за предоставленное правильное решение данной задачи. Результат:
#include <iostream>
#include <cmath>
using namespace std;
double step(float m, int e)
{
float t = 1;
for ( 0; e; e--)
t = t *m;
return t;
}
int main()
{
setlocale(LC_ALL, "rus");
const double x1 = -1.1, x2 = 0.3, dx = 0.2;
double y;
for (float x = x1; x < x2; x+=dx)
{
for (int m = 1; m < 5 ; ++m)
{
y = step(x,m)*step(sin(x*m),m);
cout << "Значение функции = " << y << "\t\t\tПри m = " << m << endl;
}
cout << "\t\tВычислено при x = " << x << endl;
}
system("pause");
return 0;
}
CppStudio.com
Значение функции = 0.980328 При m = 1
Значение функции = 0.790936 При m = 2
Значение функции = -0.00522459 При m = 3
Значение функции = 1.20058 При m = 4
Вычислено при x = -1.1
Значение функции = 0.704994 При m = 1
Значение функции = 0.768187 При m = 2
Значение функции = 0.0569075 При m = 3
Значение функции = 0.0251596 При m = 4
Вычислено при x = -0.9
Значение функции = 0.450952 При m = 1
Значение функции = 0.475845 При m = 2
Значение функции = 0.220619 При m = 3
Значение функции = 0.00302349 При m = 4
Вычислено при x = -0.7
Значение функции = 0.239713 При m = 1
Значение функции = 0.177018 При m = 2
Значение функции = 0.124063 При m = 3
Значение функции = 0.0427272 При m = 4
Вычислено при x = -0.5
Значение функции = 0.0886561 При m = 1
Значение функции = 0.0286939 При m = 2
Значение функции = 0.0129776 При m = 3
Значение функции = 0.00611255 При m = 4
Вычислено при x = -0.3
Значение функции = 0.00998336 При m = 1
Значение функции = 0.000394696 При m = 2
Значение функции = 2.58085e-05 При m = 3
Значение функции = 2.29968e-06 При m = 4
Вычислено при x = -0.1
Значение функции = 0.00998333 При m = 1
Значение функции = 0.000394694 При m = 2
Значение функции = 2.58083e-05 При m = 3
Значение функции = 2.29966e-06 При m = 4
Вычислено при x = 0.0999999
Значение функции = 0.088656 При m = 1
Значение функции = 0.0286939 При m = 2
Значение функции = 0.0129775 При m = 3
Значение функции = 0.00611253 При m = 4
Вычислено при x = 0.3
Значение функции = 0.790936 При m = 2
Значение функции = -0.00522459 При m = 3
Значение функции = 1.20058 При m = 4
Вычислено при x = -1.1
Значение функции = 0.704994 При m = 1
Значение функции = 0.768187 При m = 2
Значение функции = 0.0569075 При m = 3
Значение функции = 0.0251596 При m = 4
Вычислено при x = -0.9
Значение функции = 0.450952 При m = 1
Значение функции = 0.475845 При m = 2
Значение функции = 0.220619 При m = 3
Значение функции = 0.00302349 При m = 4
Вычислено при x = -0.7
Значение функции = 0.239713 При m = 1
Значение функции = 0.177018 При m = 2
Значение функции = 0.124063 При m = 3
Значение функции = 0.0427272 При m = 4
Вычислено при x = -0.5
Значение функции = 0.0886561 При m = 1
Значение функции = 0.0286939 При m = 2
Значение функции = 0.0129776 При m = 3
Значение функции = 0.00611255 При m = 4
Вычислено при x = -0.3
Значение функции = 0.00998336 При m = 1
Значение функции = 0.000394696 При m = 2
Значение функции = 2.58085e-05 При m = 3
Значение функции = 2.29968e-06 При m = 4
Вычислено при x = -0.1
Значение функции = 0.00998333 При m = 1
Значение функции = 0.000394694 При m = 2
Значение функции = 2.58083e-05 При m = 3
Значение функции = 2.29966e-06 При m = 4
Вычислено при x = 0.0999999
Значение функции = 0.088656 При m = 1
Значение функции = 0.0286939 При m = 2
Значение функции = 0.0129775 При m = 3
Значение функции = 0.00611253 При m = 4
Вычислено при x = 0.3
Комментарии
Сергей Цысь
#include <iostream> #include <cmath> using namespace std; //функция для вычисления одного цикла при фиксированном значении х void result (double x1, double m1, double y1, double z1); int main () { setlocale (LC_ALL,"rus"); double x(-1.1), m (1),y (1), z(1); for (x = -1.1; x <= 0.3; x += 0.2){ result (x,m,y,z); cout << "Вычислено при Х = " << x << endl << endl; } return 0; } void result (double x1, double m1, double y1, double z1){ while (m1 != 5){ y1 *= x1; for (int i = 0; i < m1; i++) { z1 *= sin(x1 * m1); } cout << "Значение функции = " << z1 * y1 << " При m = " << m1 << endl; m1++; z1 = 1; } }Юрій Білоус
Не могу понять почему у меня выходящие значения не совпадают с примером
#include <iostream> #include <cmath> using namespace std; double upN (double t,double r) { double n = 1; for ( 0; r; r-- ); n = n * t; return n; }; void wild () { double x = -1.1, z; while (x <= 0.3) { int m = 1; while ( m < 5 ) { z = upN(x,m)*upN(sin(x*m),m); cout << "Значение функции = " << z << " При m = " << m << endl; m++; }; cout << "Вычислено при x = " << x << endl; x += 0.2; }; }; int main () { setlocale ( NULL, "" ); // настройка языка вывода wild (); system ( "pause" ); return 0; }dielife
#include <iostream> #include <cmath> #define STEP_X 0.2 #define STEP_M 1 #define START -1.1 using std::cout; using std::cin; using std::endl; double my_pow(double num,double power);//my own pow )) int main(int argc, char* argv[]) { double x, z = 0; int m = 1; x = START;//x = -1.1 //Start calculating while(x < 0.3) { while(m!=5) { z = my_pow(x,m) * my_pow(sin(x*m),m); cout << "z = " << z << " m = " << m << endl; m+=STEP_M; } cout << "\nCalculated with x = " << x << endl<<endl; m = 1; x = x + 0.2; } return 0; } double my_pow(double num,double power) { int count=0; double save_num; save_num = num; for(count =1;count < power;count++) { if(power ==0) { num = 1; break; } else if(power == 1) break; else num*=save_num; } return num; }odto11
#include <iostream> #include <cmath> using namespace std; float my_pow(float X, int Y); int main() { cout << "\t\tВычислить значения функции, не используя pow\n\n"; for(float fX = -1.1; fX < 0.3; fX = fX + 0.2) { for(int iM = 1; iM < 5; iM++) { cout << "Значение функции = " << my_pow(fX, iM) * my_pow(sin(fX * iM), iM)<< " при m = "<< iM << endl; } cout << "Вычислено при x = "<< fX << "\n\n"; } return 0; } float my_pow(float X, int Y) { float Pow = 1; for(int i = 0; i < Y; i++) { Pow *= X; } }colt
#include "stdafx.h" #include "iostream" #include "iomanip" #include "windows.h" #include "math.h" using namespace std; bool bIsDoubleEqualToZero(double dValue) //функция сравнения чисел типа double с нулём { double dConst=0.00001; if ((dValue<dConst)&&(dValue>(-dConst))) return true; else return false; } int iModule(int iValue) //вычисление модуля для типа int { if (iValue<0) iValue*=-1; //если число отрицательное, то мы его умножаем на -1 return iValue; } double dMakePower(double dValue, int iPower) //функция возведения в "n"-ую степень (ВНИМАНИЕ! - степень, может быть только целым числом) { if (bIsDoubleEqualToZero(dValue)) return 0.0; //если исходное число равно нулю, то сразу возвращаем ноль else { bool bNegativeFlag=false; double dResult=1; //устанавливаем результат по умолчанию (для степени 0) if (iPower<0) { //выясняем, является ли степень отрицательной bNegativeFlag=true; iPower=iModule(iPower); //если степнь является отрицательной, то приводим всё к положительной } for (int i=0; i<iPower; i++) //вычисляем степень { dResult*=dValue; } if (bNegativeFlag) return (1.0/dResult); //если степнь является отрицательной, то приводим всё к положительной else return dResult; } } int _tmain(int argc, _TCHAR* argv[]) { SetConsoleCP(1251); SetConsoleOutputCP(1251); cout.flags(ios::fixed); //setprecision(3) while(true) { system("CLS"); double dZ=0; double dX=-1.1; while (dX<0.4) { for (int m=1;m<5;m++) { dZ=dMakePower(dX,m)*dMakePower(sin(dX*double(m)),m); cout<<"Значение функции = "<<setprecision(5)<<dZ<<" При m = "<<m<<endl; } cout<<"Вычислено при x = "<<setprecision(1)<<dX<<endl; dX+=0.2; } system("PAUSE"); } return 0; }Константин Воливач
#include <iostream>
#include <conio.h>
#include <cmath>
using namespace std;
int main(){float x,m,y,a,b;
setlocale(LC_ALL,»RUS»);
x=-1.1;
for (int i=0;i<7;i++){//цикл для шагов x
a=1;
for ( m=1;m<=4;m++){//цикл для шагов m
a*=x;//возвоим x в степень
b=1;
for(int j=0;j<m;j++){//цикл для возведени синуса в степень т.к m меняется
b*=sin(x*m);}
cout<<«Значение функции =»<<(a*b)<<» При m=»<<m<<endl;//вывод
}
cout<<«Вычислено при x=»<<x<<endl;//вывод
x+=0.2;//увеличиваем шаг x
}
getch();
}