Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2010, 01:21   #1
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию при каком значении (x) функция будет наименьшей

Тут 2 вопроса: 1 - реализовать код (это я сделал все работает правильно) 2 - как то вывести на экран при каком значении (x) функция будет наименьшей...
Код:
#include <stdafx.h>
#include <сmath>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
	float x,y;
	for (x=-2.5; x<=2; x+=.5)
	{
		if (x>=-2.5 && x<-2)
		{
			y=(fabs(x)+pow(x,2))*sin(pow(2+x,2))/(2+x);
			cout<<"x="<<fixed<<setprecision(2)<<x<<"   y="<<y<<endl;
		}
		else if (x>-2 && x<=2)
		{
			y=(fabs(x)+pow(x,2))*sin(pow(2+x,2))/(2+x);
			cout<<"x="<<x<<"   y="<<y<<endl;
		}
		else cout<<"x="<<x<<"   FATAL ERROR"<<endl;
	}
	cin.get();
}
Заранее спасибо
fort-_-minor вне форума Ответить с цитированием
Старый 31.07.2010, 01:45   #2
alexei-evil
 
Регистрация: 12.04.2010
Сообщений: 7
По умолчанию

#include <stdafx.h>
#include <сmath>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
float x,y,min;
for (x=-2.5; x<=2; x+=.5)
{
if (x>=-2.5 && x<-2)
{
y=(fabs(x)+pow(x,2))*sin(pow(2+x,2) )/(2+x);
cout<<"x="<<fixed<<setprecision(2)< <x<<" y="<<y<<endl;
if(x==-2.5)min=y;
}
else if (x>-2 && x<=2)
{
y=(fabs(x)+pow(x,2))*sin(pow(2+x,2) )/(2+x);
cout<<"x="<<x<<" y="<<y<<endl;
if(x==-2.5)min=y;
}
else cout<<"x="<<x<<" FATAL ERROR"<<endl;
if(y<min)min=y;
}
cin.get();

Вот, придумался такой вариант.
А нафига вот эта строчка:else cout<<"x="<<x<<" FATAL ERROR"<<endl;
alexei-evil вне форума Ответить с цитированием
Старый 31.07.2010, 01:49   #3
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

Цитата:
Сообщение от alexei-evil Посмотреть сообщение
#include <stdafx.h>
#include <сmath>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
float x,y,min;
for (x=-2.5; x<=2; x+=.5)
{
if (x>=-2.5 && x<-2)
{
y=(fabs(x)+pow(x,2))*sin(pow(2+x,2) )/(2+x);
cout<<"x="<<fixed<<setprecision(2)< <x<<" y="<<y<<endl;
if(x==-2.5)min=y;
}
else if (x>-2 && x<=2)
{
y=(fabs(x)+pow(x,2))*sin(pow(2+x,2) )/(2+x);
cout<<"x="<<x<<" y="<<y<<endl;
if(x==-2.5)min=y;
}
else cout<<"x="<<x<<" FATAL ERROR"<<endl;
if(y<min)min=y;
}
cin.get();

Вот, придумался такой вариант.
А нафига вот эта строчка:else cout<<"x="<<x<<" FATAL ERROR"<<endl;
Дело в том что я задание не прикрепил, но если посмотреть код и восстановить формулу , то там при x=-2 в знаменателе выражения возникает 0, ну а так как на 0 делить нельзя соответственно FATAL ERROR. За ваш вариант кода спасибо, ща буду разбираться
fort-_-minor вне форума Ответить с цитированием
Старый 31.07.2010, 01:49   #4
alexei-evil
 
Регистрация: 12.04.2010
Сообщений: 7
По умолчанию

Не то написал. Надо как-то так:

#include <stdafx.h>
#include <сmath>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
float x,y,min,x1;
for (x=-2.5; x<=2; x+=.5)
{
if (x>=-2.5 && x<-2)
{
y=(fabs(x)+pow(x,2))*sin(pow(2+x,2) )/(2+x);
cout<<"x="<<fixed<<setprecision(2)< <x<<" y="<<y<<endl;
if(x==-2.5)min=y;
}
else if (x>-2 && x<=2)
{
y=(fabs(x)+pow(x,2))*sin(pow(2+x,2) )/(2+x);
cout<<"x="<<x<<" y="<<y<<endl;
if(x==-2.5)min=y;
}
else cout<<"x="<<x<<" FATAL ERROR"<<endl;
if(y<min)x1=x;
}
cout << x1 << endl;
cin.get();

Что-то все-равно бред какой-то. Попробуй, может сработает. )))Надо спать ложиться. )))
alexei-evil вне форума Ответить с цитированием
Старый 31.07.2010, 02:10   #5
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

Утро вечера мудренее(..)
Цитата:
Сообщение от alexei-evil Посмотреть сообщение
Надо спать ложиться
Ну го
fort-_-minor вне форума Ответить с цитированием
Старый 31.07.2010, 02:18   #6
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
#include <cmath>
#include <iostream>

class Error{};

float calculateY( const float x ){
    if( ( x >= -2.5 && x < -2 ) || ( x > - 2 && x <= 2 ) )
	return ( std::fabs( x ) + std::pow( x, 2 ) ) * std::sin( std::pow( 2 + x, 2 ) )/( 2 + x );
    throw Error();
}

int main(){
    float min = calculateY( -2.5 );
    float minX = -2.5;
    for (float x = -2.5; x <= 2; x += 0.5){
	float y;
	try{
	    y = calculateY( x );
	} catch( Error ) {
	    std::cout << "ERROR : x = " << x << '\n';
	    continue;
	}
	if( min > y ){
	    min = y;
	    minX = x;
	}
	std::cout << "x = " << x << " y = " << y << '\n';
    }
    std::cout << "MIN : " << min << " MINX : " << minX << '\n';
}
Я бы сделал так
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 31.07.2010 в 02:28.
ozo вне форума Ответить с цитированием
Старый 31.07.2010, 02:34   #7
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

Цитата:
Сообщение от ozo Посмотреть сообщение
Код:
#include <cmath>
#include <iostream>

class Error{};

float calculateY( const float x ){
    if( ( x >= -2.5 && x < -2 ) || ( x > - 2 && x <= 2 ) )
	return ( std::fabs( x ) + std::pow( x, 2 ) ) * std::sin( std::pow( 2 + x, 2 ) )/( 2 + x );
    throw Error();
}

int main(){
    float min = calculateY( -2.5 );
    float minX = -2.5;
    for (float x = -2.5; x <= 2; x += 0.5){
	float y;
	try{
	    y = calculateY( x );
	} catch( Error ) {
	    std::cout << "ERROR : x = " << x << '\n';
	    continue;
	}
	if( min > y ){
	    min = y;
	    minX = x;
	}
	std::cout << "x = " << x << " y = " << y << '\n';
    }
    std::cout << "MIN : " << min << " MINX : " << minX << '\n';
}
Я бы сделал так
Кхм, спасибо конечно, я попробую разобраться, но нельзя ли попробовать ето сделать как то более по простому (мне до классов еще далековато) Просто если не трудно скажите идею, а там я сам уж буду разбираться.
fort-_-minor вне форума Ответить с цитированием
Старый 31.07.2010, 02:37   #8
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
float calculateY( const float x ){
    if( ( x >= -2.5 && x < -2 ) || ( x > - 2 && x <= 2 ) )
	return ( std::fabs( x ) + std::pow( x, 2 ) ) * std::sin( std::pow( 2 + x, 2 ) )/( 2 + x );
}

int main(){
    float min = calculateY( -2.5 );
    float minX = -2.5;
    for (float x = -2.5; x <= 2; x += 0.5){
	float y = calculateY( x );
	if( min > y ){
	    min = y;
	    minX = x;
	}
	std::cout << "x = " << x << " y = " << y << '\n';
    }
    std::cout << "MIN : " << min << " MINX : " << minX << '\n';
}
Вот же она
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 31.07.2010, 10:47   #9
FelixXXI
Пользователь
 
Регистрация: 29.03.2010
Сообщений: 48
По умолчанию

Цитата:
мне до классов еще далековато
ничего страшного, скоро и до них доберёшься, если, конечно же, будешь настойчив.
Цитата:
если не трудно скажите идею
Идея такая:
1. создаёшь цикл в необходимом диапазоне с необходимым шагом.
2. проверяешь, нет ли деления на 0
3. если есть, то "ошибка"
если нет, то проводишь вычисления по формуле, о которой мы можем судить только из программы (поэтому правильность её написания полностью на твоей совести)
4. дальше интересней: если это вычисление проводилось в первый раз, то присваиваешь Xmin и Ymin эти первые значения,
иначе
проверяешь условие, что больше Y или Ymin, и в случае если Y<Ymin, запоминаешь как Ymin меньшее значение
5. после цикла это Уmin выводишь на экран

Блин, легче код написать, чем словами извращаться.
Цитата:
нельзя ли попробовать ето сделать как то более по простому
Наверное, не по простому, а понятнее для начинающего программиста. Можно...
Код:
#include <stdafx.h>
#include <math.h>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
	float x,y,xmin,ymin;
	short flag=0;
	for (x=-2.5; x<=2; x+=.5)
		if (x==-2)
			cout<<"x="<<fixed<<setprecision(1)<<x<<"   FATAL ERROR"<<endl;
		else 
		{   
			y=(fabs(x)+pow(x,2))*sin(pow(2+x,2))/(2+x);
			cout<<"x="<<fixed<<setprecision(1)<<x<<"   y="<<fixed<<setprecision(6)<<y<<endl;
			if (!flag)
			{
				xmin=x;
				ymin=y;
				flag=1;
			}
			else
				if (y<ymin) 
				{
					xmin=x;
					ymin=y;
				}
		}
	cout<<"\n for x="<<fixed<<setprecision(1)<<xmin<<" ymin="<<fixed<<setprecision(6)<<ymin<<endl;
	cin.get();
}
FelixXXI вне форума Ответить с цитированием
Старый 31.07.2010, 11:52   #10
fort-_-minor
46KSS
Пользователь
 
Аватар для fort-_-minor
 
Регистрация: 26.07.2010
Сообщений: 58
По умолчанию

Думаю, так понятнее) спасибо снова вам ,Феликс, очень помогли) Буду пробовать разобраться...
fort-_-minor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выделение ячеек цветом при значении "ИСТИНА" alex98 Microsoft Office Excel 5 16.05.2010 13:11
что будет возвращать функция при различных pos vasyapupkin Общие вопросы C/C++ 4 03.11.2009 20:48
на каком языке создаются такие программы ,какое СУБД и структура реализации БД,также на каком языке соста оля87 Помощь студентам 13 25.05.2009 18:08
как заставить работать макрос при определенном значении ячейки? Град Microsoft Office Excel 5 30.05.2008 16:06
ВЫЧИСЛИТЬ j^j ПРИ ЗНАЧЕНИИ j ОТ 2 ДО N pirozho4ek Помощь студентам 6 19.05.2007 10:49