Форум программистов, компьютерный форум CyberForum.ru

решение с простой переменной - C++

Восстановить пароль Регистрация
 
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
30.07.2010, 21:35     решение с простой переменной #1
Добрый вечер
Задание прикреплено ниже, если кому не трудно посмотрите пожалуйста.
В 1 задании (считая сверху) я написал код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdafx.h>
#include <cmath>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
    int a(1), b(2);
    float x, y, z;
    for (x=0; x<=1; x+=.1)
    for (y=0; y<=1; y+=.2)
    {
        if (x+y<=1)
        {
            z=pow(a,x)+pow(b,y);
            cout<<"x="<<fixed<<setprecision(2)<<x<<"   y="<<y<<"   z="<<z<<endl;
        }
        else  
        {
            z=a*pow(x,2)+log(b*x*y);
            cout<<"x="<<x<<"   y="<<y<<"   z="<<z<<endl;
        }
        
    }
    cin.get();
}
Да простят меня модераторы, толком не знаю как задать вопрос. Просто хочу услышать мнение разбирающихся людей правильно ли работает программа (вернее она то работает но то ли выполняет, или как там)..
Во втором задании код написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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();
}
Вот как найти при каком значении (x) функция будет наименьшей не знаю. Разберусь быстро, скажите идею просто пожалуйста...
Миниатюры
решение с простой переменной  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2010, 21:35     решение с простой переменной
Посмотрите здесь:

C++ Решить систему с простой переменной
C++ Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С
C++ a,b и c.Присвоить максимальное из них переменной a,минимальное-переменной c,среднее переменной b
Метод чисел Фибоначчи. Вывести решение в виде численного значения в точке экстремума независимой переменной C++
C++ Решение нелинейных уравнений методом простой итерации
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
31.07.2010, 01:40  [ТС]     решение с простой переменной #2
C 1 задачей разобрался, там чуток было неправильно вот правильный код если кому интересно
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "stdafx.h"
#include <сmath>
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{   int a(1), b(2);
    float x, y, z;
    for( x=1; x<=2; x+=.1)
    {
        cout<<endl;
        for ( y=1; y<=2; y+=.2)
        
            if (x+y<=1)
            {
            z=pow(a,x)+pow(b,x);
            cout<<"x="<<fixed<<setprecision(2)<<x<<"  y="<<y<<"  z="<<fixed<<setprecision(4)<<z<<endl;
            }
            else 
            {
            z=a*pow(x,2)+log(b*x*y);
            cout<<"x="<<fixed<<setprecision(2)<<x<<"  y="<<y<<"  z="<<fixed<<setprecision(4)<<z<<endl;
            }
        
    }
    cin.get();
}
А вот че делать со 2 условием 2 задачи
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
31.07.2010, 03:08     решение с простой переменной #3
продиффиренцируй функцию, приравняй к нулю полученное уравнение, вырази икс через все остальное, посчитай икс, подставь полученнй икс в исходное уравнение и посчитай игрик, от і буде тобі точка. Если таких точек несколько, то надо выбрать ту у которой игрик меньше всех, соответственно её икс и есть ответ. Как с модулем быть лично я не знаю, но думаю что стоит разбить на два варианта: при положительном подмодульном выражении и при отрицательном.
fort-_-minor
6 / 6 / 2
Регистрация: 30.07.2010
Сообщений: 87
31.07.2010, 11:56  [ТС]     решение с простой переменной #4
Есть вот такой рабочий код - он то что нужно, но не то что нужно Просто попробую с ним разобраться должно быть что то попроще.. В этой задаче подразумевается решение без классов (до них мне еще далеко)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdafx.h>
#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';
}
За совет вам спасибо, попробую решить

Добавлено через 1 час 23 минуты
Подумал, вроде разобрался Если кому вдруг интересно вот код 2 задания 2 задачи:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdafx.h>
#include <cmath>
#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();
}
Nameless One
31.07.2010, 18:36     решение с простой переменной
  #5

Не по теме:

В качестве флага ИМХО лучше бы использовать не целый тип (short), а логический (bool)

Yandex
Объявления
31.07.2010, 18:36     решение с простой переменной
Ответ Создать тему
Опции темы

Текущее время: 17:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru