Вычислить значения функции, не используя pow

Уровень сложности:

Вычислить, не используя функцию pow, значения функции z(x,m) = xsinm(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
Следующие статьи помогут вам в решении данной задачи:
Автор: admin
Дата: 12.09.2012
Поделиться:

Комментарии

  1. Сергей Цысь

    #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; 
    		}
    }

     

  2. Юрій Білоус

    Не могу понять почему у меня выходящие значения не совпадают с примером

    #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;
    }
  3. 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;
    }
  4. odto11

    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;
        }
    }
  5. 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;
    }
  6. Константин Воливач

    #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();
    }

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.