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

Загвостка с функцией Y=f(xi) - C++

Восстановить пароль Регистрация
 
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
21.01.2012, 19:36     Загвостка с функцией Y=f(xi) #1
Помогите ,пожалуйста ,закончить код.
Начальная задача-Составить и выполнить программы циклической структуры расчета Y=f(xi), где xi еX
Загвостка с функцией Y=f(xi)
код ,который нужно исправить
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#define _USE_MATH_DEFINES
#include<iostream>
#include<stdio.h>
#include<cmath>
int main()
{
double x;
double y[100];
double x1,x2,h;
double y1,y2;
int j = 0;
//Вводим значение,обозначающие промежуток(от x1 до x2)
printf("Enter x1 = ");
scanf("%lf",&x1);
printf("\nEnter x2 = ");
scanf("%lf",&x2);
//Вводим шаг
printf("\nEnter h = ");
scanf("%lf",&h);
//Проходим по промежутку (x1,x2) с шагом h
for(x = x1; x <= x2; x += h)
{
 //Вначале проверяем подойдет ли нам значение,по условию подходят только x > 0(1-ое условие)
 if(x > 0)
 {
 
 y1 = (log10(x) - pow(M_E, 2.3 * x));
 //Если x > 0,проверяем,чтобы под корнем было выражение больше нуля.Числитель
 if(y1 > 0)
 {
 //Проверяем существование тангенса, для этого cos(x) != 0
 if(cos(x) != 0)
 //Проверяем знаменатель,нужно,чтобы не был нулем
 y2 = (pow(tan(x * M_PI / 180), 2) - pow(2,x));
 if(y2 != 0)
 {
 y[j] = (double) sqrt(y1) / pow(y2,(double)1/3);
 j++;
 }
 }
 }
 else continue;
}
if(j == 0) printf("There is no elements on %lf for %lf with step %lf",x1,x2,h);
for(int i = 0; i < j; i++)
printf(" %lf ", y[i]);
system("pause");
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2012, 19:36     Загвостка с функцией Y=f(xi)
Посмотрите здесь:

C++ Работа с функцией
C++ Помогите с функцией
Помогите с функцией. C++
Загвостка с множеством (массивом) C++
Ошибка с функцией C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
21.01.2012, 20:37  [ТС]     Загвостка с функцией Y=f(xi) #2
Проблема в том ,что нужно реализовать вывод в массив
Что типа

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
double Function( double x )
{
     double y = 0.0;
     ...// Вычисление У для указанного Х, по заданной формуле
     return y;
}
 
int main
{
   ...
   for(x = x1; x <= x2; x += h)
       y[j] = Function(x);
   ...
А как это все собрать в одно - не знаю не получается .Помогите
-=ЮрА=-
Заблокирован
Автор FAQ
22.01.2012, 22:45     Загвостка с функцией Y=f(xi) #3
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 <iostream> //ввод/вывод
#include <iomanip>  //манипуляторы 
#include <cstdlib>  //system() для кодблокс если пишем в VS этот хедер можно исключить
#include <cmath>    //прототипы мат функций
using namespace std;
 
double Y(double x)
{
    //Можно обойтись и без переменной y и выражение ниже сразу писать после return
    double y = sqrt(log(x) - exp(2.3*x))/pow((tan(x)*tan(x) - pow(2,x)),1/3.0);
    return y;
}
 
int main()
{
    double X[] = {0.1,0.2,0.8};//Пишите сразу область значений, 
    //зачем делать ввод, пытаться ввести шаг - ведь его нет
    //между 0,1 и 0,2 - шаг 0,1 а между 0,2 и 0,8 шаг 0,6
    int i, n = sizeof(X)/sizeof(X[0]);//Так можно посчитать число єлементов в статическом массиве
    //n выйдет равным 3, можно было вбить константно, но думаю сам метод подсчёта пригодиться в др алгоритмах
    double * y = new double[n];//Выделяем память под массив значений Y
    cout<<"  x[i]  |  y[i]  \n";
    for(i = 0; i < n; i++)
    {
        y[i] = Y(X[i]);
        cout<<setprecision(2)<<setw(8)<<X[i]<<"|"
            <<setprecision(6)<<setw(8)<<y[i]<<endl;
    }
    system("pause");
    return 0;
}
Миниатюры
Загвостка с функцией Y=f(xi)   Загвостка с функцией Y=f(xi)  
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
22.01.2012, 22:48     Загвостка с функцией Y=f(xi) #4
-=ЮрА=-, мы уже определились, что действительных решений нет в этой теме Загвостка с множеством (массивом) Можно сделать вывод, что формула не верная.
-=ЮрА=-
Заблокирован
Автор FAQ
22.01.2012, 22:48     Загвостка с функцией Y=f(xi) #5
Вывод может показаться странным, НО для данных значений х, все значения функции - комплексные числа, здесь можно посмотреть как просто решать с комплексными числами
Решение квадратного уравнения для комплексных значений
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
22.01.2012, 22:50  [ТС]     Загвостка с функцией Y=f(xi) #6
Парни ,огромное вом спасибо за ваш труд и помощь!Благодарю вас!
-=ЮрА=-
Заблокирован
Автор FAQ
22.01.2012, 22:54     Загвостка с функцией Y=f(xi) #7

Не по теме:

Цитата Сообщение от go Посмотреть сообщение
мы уже определились, что действительных решений нет в этой теме
- я не видел чтобы тут об этом написано, выше пост как просто решать с комплексами...
А что комплексные числа это такая сильная проблемма???



Добавлено через 1 минуту
jeka061288, сейчас выложу код с комплексами, подожди пару минут...
-=ЮрА=-
Заблокирован
Автор FAQ
22.01.2012, 23:08     Загвостка с функцией Y=f(xi) #8
Комплексы - вот пожалуйста
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream> //ввод/вывод
#include <iomanip>  //манипуляторы 
#include <cstdlib>  //system() для кодблокс если пишем в VS этот хедер можно исключить
#include <cmath>    //прототипы мат функций
using namespace std;
 
struct complex
{
    double re;
    double im;
};
 
complex Y(double x)
{
    complex ret = {0};
    double up = log(x) - exp(2.3*x);
    double dw = (tan(x)*tan(x) - pow(2,x));
    if(dw < 0)//Тут мне было не понятно почему корень кубический из отр числа не извлекался
    {
        //Пришлось велосипед маханький написать
        dw = pow(-dw,1/3.0);
        dw *= -1;
    }
    if(up < 0)
        ret.im = sqrt(-up);
    else
        ret.re = sqrt(up);
    ret.re /= dw;
    ret.im /= dw;
    return ret;
}
 
int main()
{
    double X[] = {0.1,0.2,0.8};
    int i, n = sizeof(X)/sizeof(X[0]);
    complex * y = new complex[n];
    cout<<"  x[i]  |  y[i]  \n";
    for(i = 0; i < n; i++)
    {
        y[i] = Y(X[i]);
        cout<<setprecision(2)<<setw(8)<<X[i]<<"|"
            <<y[i].re
            <<((y[i].im < 0) ? "-" : "+")<<" j*"
            <<fabs(y[i].im)
            <<endl;
    }
    system("pause");
    delete [] y;
    return 0;
}
Миниатюры
Загвостка с функцией Y=f(xi)  
-=ЮрА=-
Заблокирован
Автор FAQ
22.01.2012, 23:16     Загвостка с функцией Y=f(xi) #9
Цитата Сообщение от jeka061288
Ув. -=ЮрА=- спасибо вам огромное !Но мне нельзе использовать объектно ориентированые средства ввода вывода ,только принтф и сканф.Как это поправить ?
jeka061288, если вы используете iostream ЗАБУДЬТЕ о printf и scanf(это Си). Когда вы пишите cout и рядом scanf - получается суржик - смесь Си и С++, поєтому укажите вам в чём нужно в Си или С++(переделать код мне легко, всё что в топике - это плюсы)

Добавлено через 4 минуты
Теперь проверка на особые ситуации
Итак если вам нужно решать без комплексов проверки следующие
1 значения x - должен лежать в пределах ОДЗ функции ln(x) x (-pi/2; pi/2) + период tg*N
2 значения x - должен лежать в пределах ОДЗ функции tg(x) 0 < x
3 подкоренное выражение в числителе должно быть больше нуля(в этом топике для всех значений оно меньше)
4 значение выражения в знаменателе не должно быть равным нулю, иначе будет идти деление на ноль
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
22.01.2012, 23:18  [ТС]     Загвостка с функцией Y=f(xi) #10
коротко о проблеме - это моя первая сессия ,3 проги маленькие я сделал ,но вот мне препад строго запретил использовать объектно ориентированные ср-ва ввода вывода только printf и scanf.Он говорит -ты еще этого не учил и тебе так нельзя и он не принимает если не так .Строго настрого.А вообще у меня С++ .
Это код с проверками ?То это обязательно мне дал в задание.

Добавлено через 1 минуту
Честно я запутался ,мне эти проверки нужны .Простите.
-=ЮрА=-
Заблокирован
Автор FAQ
22.01.2012, 23:19     Загвостка с функцией Y=f(xi) #11
Цитата Сообщение от jeka061288 Посмотреть сообщение
Честно я запутался ,мне эти проверки нужны .Простите.
- всё я понял подожди немного...
-=ЮрА=-
Заблокирован
Автор FAQ
22.01.2012, 23:37     Загвостка с функцией Y=f(xi) #12
Вот решение на Си с проверками
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdio.h> //ввод/вывод
#include <stdlib.h>//system() + malloc
#include <math.h>  //прототипы мат функций
 
double Y(double x, int &isCorrect)
{
    //Можно обойтись и без переменной y и выражение ниже сразу писать после return
    double up = 1;
    double dw = 1;
    double pi_2 = asin(1);
    double ret= 1;
    isCorrect = 0;
    if(x <= 0)
        printf("Znachenie x vne ODZ ln(x)\n");
    else
    if(x <= -pi_2 || pi_2 <= x)
        printf("Znachenie x vne ODZ tg(x)\n");
    else
    if((up *= log(x) - exp(2.3*x)) < 0)
        printf("Reshenie compleksnoe sqrt(-value)\n");
    else
    if((dw *= (tan(x)*tan(x) - pow(2,x))) == 0)
        printf("Delenie na nol\n");
    else
        isCorrect = 1;
 
    if(isCorrect == 1)
    {
        ret = sqrt(up);
        if(dw < 0)//Тут мне было не понятно почему корень кубический из отр числа не извлекался
        {
            dw = pow(-dw,1/3.0);
            dw *= -1;
        }
        else
            dw  = pow(dw,1/3.0);
        ret /= dw;
    }
    return ret;
}
 
int main()
{
    double X[] = {0.1,0.2,0.8};
    int i, n = sizeof(X)/sizeof(X[0]);//Так можно посчитать число єлементов в статическом массиве
    //n выйдет равным 3, можно было вбить константно, но думаю сам метод подсчёта пригодиться в др алгоритмах
    double * y = (double *)malloc(n*sizeof(double));//Выделяем память под массив значений Y
    printf("x[i]\t|y[i]\n");
    int isCorrect;
    for(i = 0; i < n; i++)
    {
        printf("%lf|",X[i]);
        y[i] = Y(X[i],isCorrect);
        if(isCorrect == 1)
            printf("%lf\n",y[i]);
    }
    system("pause");
    free((void *)y);
    return 0;
}
Миниатюры
Загвостка с функцией Y=f(xi)  
-=ЮрА=-
Заблокирован
Автор FAQ
24.01.2012, 23:38     Загвостка с функцией Y=f(xi) #13
jeka061288, вот проект в VS2008 как и обещал. Перед использованием внимательно изучи 2-й скрин!
Миниатюры
Загвостка с функцией Y=f(xi)   Загвостка с функцией Y=f(xi)  
Вложения
Тип файла: rar fun_VS_2008_proj.rar (6.5 Кб, 4 просмотров)
EMTEC
1 / 1 / 0
Регистрация: 29.10.2011
Сообщений: 110
24.01.2012, 23:43  [ТС]     Загвостка с функцией Y=f(xi) #14
Спасибо Большое вам за помощь ,я вам очень благодарен .Если что ,можно будет обратиться к вам за пояснениями?Сейчас попробую сделать все как вы написали.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2012, 21:43     Загвостка с функцией Y=f(xi)
Еще ссылки по теме:

C++ Ошибка с функцией
подскажите с функцией C++
C++ Калькулятор с функцией

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
25.01.2012, 21:43     Загвостка с функцией Y=f(xi) #15

Не по теме:

Цитата Сообщение от jeka061288 Посмотреть сообщение
Если что ,можно будет обратиться к вам за пояснениями?
- конечно можно



Добавлено через 21 час 7 минут
jeka061288, вот здесь

запиши вот так
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(x <= -pi_2 || pi_2 <= x)
* * * * * * * * printf("Znachenie x vne ODZ tg(x)\n");
C
1
2
if(cos(x) == 0.0)
      printf("Znachenie x vne ODZ tg(x)\n");
Yandex
Объявления
25.01.2012, 21:43     Загвостка с функцией Y=f(xi)
Ответ Создать тему
Опции темы

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