Вопрос: Вычисление значения функции

  • Автор темы -
  • Дата начала
Статус
Закрыто для дальнейших ответов.

Гость
#1
только начал изучать С++
программа выдает неправильное решение
условие:
f(x,y)=
y*y*y-1, при abs(y)<=1
2*y-1 при 1<=abs(y)<=2
5/8*y-1, при abs(y)>2
где y=x*x+x-1

код программы
C++:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include<iostream>
#include<math.h>
using namespace std;

int _tmain()
{
double f, x, y;
cout << " Vvedite x = ";
cin >> x;
y = x*x+x-1;
if (abs(y)<=1) 
{ 
f=pow(y,3)-1;
cout<< "\n f="<<f;
}
if (abs(y)>=1 && abs(y)<=2) 
{ 
f=2*y-1;
cout<< "\n f="<<f;
} 
else 
f=(5/8)*y-1;
cout << "\n f= "<< f;
getch ();
return 0;
}
 

DarkKnight

Well-Known Member
01.08.2010
653
0
#3
2артем1 , вот смотри у тебя ошибка уже в самом задании...
Вот смотри в этом месте при abs(y) МЕНЬШЕ ЛИБО РАВНЫМ 1
А далее смотри на следующее условие
abs(y) Больше ЛИБО РАВЕНЕ 1
Заметил тафталогию???
А теперь смотри что происходит:
Вводим х = 1
Расчитываем y = 1*1+1-1 = 1
Идем по условиям :
y =1, выполняется первое условие расчитываем
f = 1*1*1-1 =0
идем дальше
ооопа(!) торому условию мы тоже соответствуем
пересчитываем f = 2*1-1 = 1;

Понял ошибку? Скорее всего у тебя в первом условии знка только СТРОГО МЕНЬШЕ


Добавлено: Что то вроде этого...
C++:
#include <iostream>

using namespace std;

int main(void)
{
setlocale(LC_ALL,"Russian");
double Fn, x, y;
cout<<"Введите x = ";
cin>>x;
y = x * x + x - 1;
cout<<"Вычисление y = "<<y<<endl;

if ( abs(y) < 1) //abs(y) < 1
Fn = pow(y,3) - 1;
else if ( abs(y) <= 2) // 1 <= abs(y) <= 2
Fn = 2 * y - 1;
else // abs(y) > 2
Fn = 5.0/8 * y - 1;
cout<<"Функция F("<<x<<","<<y<<") = "<<Fn<<endl;
}
 
Статус
Закрыто для дальнейших ответов.