Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
-11 / 1 / 0
Регистрация: 07.09.2020
Сообщений: 206
1

Функция y=x^2 – 2x – 20

15.09.2020, 22:35. Показов 1483. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Подскажите, пожалуйста, как реализовать два этих пункта?
Дана функция y=x^2 – 2x – 20 – задать в программе. Запросить А, В – координаты начала и конца отрезка, шаг h. Построить таблицу значений функции на отрезке АВ с указанным шагом. По этой таблице
1. Выписать отрезки, на которых функция меняет знак, или сообщить, что на отрезке АВ функция имеет постоянный знак «+» или «-».
2. Найти х, при котором функция принимает значение, наиболее близкое по модулю к нулю.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.09.2020, 22:35
Ответы с готовыми решениями:

Функция поиска в массиве и указатели + функция сортировки и поиск найденного элемента
Написать функцию поиска максимального элемента, передать в неё указатель на начало и конец поиска и...

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой...

Перегрузка операций: friend-функция или функция-член класса
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и...

Функция sqrt: существует более одного экземпляра. Функция перегруженная
#include <iostream> #include <math.h> #include <iomanip> using namespace std; int main(){...

26
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
16.09.2020, 15:52 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
#include <stdio.h>
#include <math.h>
//Очень долго делал!
int main(void){
    double A,B,h,y,counter1=0,counter2=0;
    int counter3 = 0;
    scanf("%lf %lf %lf",&A,&B,&h);
    double A2 = A;
    for (;A<=B;A+=h){
        y=A*A-2*A-20;
        printf("y=%lf\n",y);
        if (y>0) counter1++;
        if (y<0) counter2++;
        ++counter3;
    }
    double arr[counter3];
    if (!(counter1 && counter2)){if (counter1) putchar('+'); if (counter2) {putchar('-');}}
    for (int i = 0;A2<=B;i++,A2+=h){
        arr[i] = A2*A2-A2*2-20;
    }
    double var = -1000000000;
    for (int i = 0;i<counter3;i++){
        if (arr[i]>0 && arr[i]<var) var = arr[i];
        else if (arr[i]>var) var=arr[i];
    }
    printf("\n%lf",var);
    return 0;
}
Добавлено через 17 минут
Извиняюсь,забыл модуль.
Код:
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
#include <stdio.h>
#include <math.h>
//Очень долго делал!
int main(void){
    double A,B,h,y,counter1=0,counter2=0;
    int counter3 = 0;
    scanf("%lf %lf %lf",&A,&B,&h);
    if (B<A) {puts("Error!");return 1;}
    double A2 = A;
    for (;A<=B;A+=h){
        y=A*A-2*A-20;
        printf("y=%lf\n",y);
        if (y>0) counter1++;
        if (y<0) counter2++;
        ++counter3;
    }
    double arr[counter3];
    if (!(counter1 && counter2)){if (counter1) putchar('+'); if (counter2) {putchar('-');}}
    for (int i = 0;A2<=B;i++,A2+=h){
        arr[i] = A2*A2-A2*2-20;
    }
    double var = 1000000000;
    for (int i = 0;i<counter3;i++){
        if (fabs(arr[i])<fabs(var)) var = arr[i];
    }
    printf("\n%lf",var);
    return 0;
}
0
-11 / 1 / 0
Регистрация: 07.09.2020
Сообщений: 206
16.09.2020, 20:00  [ТС] 3
scanf, мне же на С++ нужно выполнить
0
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
16.09.2020, 20:29 4
попробуй выполнить компиляторм g++ все будет нормальо так как тут все совместимо и синтаксическо верно
0
-11 / 1 / 0
Регистрация: 07.09.2020
Сообщений: 206
16.09.2020, 20:33  [ТС] 5
scanf, мне нужно чтобы это работало в Visual Studio. У меня из этой строки
Цитата Сообщение от scanf Посмотреть сообщение
double arr[counter3];
подчеркивается
Цитата Сообщение от scanf Посмотреть сообщение
[counter3]
0
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
16.09.2020, 20:39 6
сразу говорю вижол студио очень плохая программа так как другой стандарт си++

Добавлено через 3 минуты
ошибка какая
0
-11 / 1 / 0
Регистрация: 07.09.2020
Сообщений: 206
16.09.2020, 20:41  [ТС] 7
scanf, может и плохая, но задание нужно делать в ней(
ошибка в [counter3] в строке double arr[counter3];
0
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
16.09.2020, 20:46 8
текст ошибки

Добавлено через 4 минуты
ошибка какая
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
16.09.2020, 20:47 9
makich_, имея подобный образец табуляции функции и её анализа - попробуйте самостоятельно выполнить задачу.
Дело в том, что добровольный помощник scanf старается, но не понимает различий между языками C и C++.
0
-11 / 1 / 0
Регистрация: 07.09.2020
Сообщений: 206
16.09.2020, 20:50  [ТС] 10
scanf, Выражение должно иметь константное значение
0
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
16.09.2020, 20:50 11
#define _CRT_SECURE_NO_WARNINGS
чтобы все нормально было
0
-11 / 1 / 0
Регистрация: 07.09.2020
Сообщений: 206
16.09.2020, 20:51  [ТС] 12
ФедосеевПавел, я вообще не очень понимаю сего кода. Тот же самый counter это что?
0
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
16.09.2020, 20:52 13
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
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
//Очень долго делал!
int main(void){
    double A,B,h,y,counter1=0,counter2=0;
    int counter3 = 0;
    scanf("%lf %lf %lf",&A,&B,&h);
    if (B<A) {puts("Error!");return 1;}
    double *arr;
    double A2 = A;
    for (;A<=B;A+=h){
        y=A*A-2*A-20;
        printf("y=%lf\n",y);
        if (y>0) counter1++;
        if (y<0) counter2++;
        ++counter3;
    }
    arr = malloc(counter3*8);
    if (!(counter1 && counter2)){if (counter1) putchar('+'); if (counter2) {putchar('-');}}
    for (int i = 0;A2<=B;i++,A2+=h){
        arr[i] = A2*A2-A2*2-20;
    }
    double var = 1000000000;
    for (int i = 0;i<counter3;i++){
        if (fabs(arr[i])<fabs(var)) var = arr[i];
    }
    printf("\n%lf",var);
    return 0;
}
8 так как размер double
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
16.09.2020, 21:00 14
makich_, решите самостоятельно. После этого будет код scanf понятнее.

1. табулировать функцию y=x^2 – 2x – 20
определите функцию y(x)
в основной программе в цикле выводите x и y(x)

2. поиск отрезков, на которых изменяется знак - похоже на предыдущее решение

3. минимальное по абсолютному значению y(x) - это цикл.

Попробуйте начать - увидите, как всё просто

Добавлено через 27 секунд
Начните с табуляции.
0
96 / 69 / 27
Регистрация: 26.08.2020
Сообщений: 361
16.09.2020, 21:05 15
Вам код понравился?
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
16.09.2020, 22:24 16
scanf, мы же не на вернисаже К учебному коду нет критерия изящества

Ваш код на C, а не C++. На другом языке, просто очень похожем.

Я бы начал так (это не полное задание) - не знаю C++ и постоянно ищу справку то по массивам то по функциям
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
double f(double x)
{
    return x*x-2*x-20;
}
 
int main()
{
    setlocale( LC_ALL,"" );
 
    double A, B, h;
    //ввод исходных данных
    cout << "A=";
    cin >> A;
    cout << "B=";
    cin >> B;
    cout << "h=";
    cin >> h;
    cout << endl;
 
    //заполним таблицу
    int n=round((B-A)/h)+2;  //оценка количества точек
    double *x=new double [n]; //выделение памяти под динамические массивы
    double *y=new double [n];
    n=0;
    for(; A+h*n<B; n++)
    {
        x[n]=A+h*n;
        y[n]=f(x[n]);
    };
    x[n]=B;
    y[n]=f(x[n]);
 
    //вывод таблицы на экран
    for(int i=0; i<=n; i++)
        cout << i+1 << ". x=" << x[i] << " y=" << y[i] << endl;
    cout << endl;
 
    //Выписать отрезки, на которых функция меняет знак, или сообщить,
    //что на отрезке АВ функция имеет постоянный знак «+» или «-»
 
    //Найти х, при котором функция принимает значение, наиболее близкое по модулю к нулю.
 
    //завершение программы
    delete [] y; // высвобождение памяти
    delete [] x; // высвобождение памяти
    return 0;
}
0
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
16.09.2020, 23:22 17
Цитата Сообщение от scanf Посмотреть сообщение
сразу говорю вижол студио очень плохая программа
Как ты это определил?
Цитата Сообщение от scanf Посмотреть сообщение
так как другой стандарт си++
Другой исходя от чего?
0
-11 / 1 / 0
Регистрация: 07.09.2020
Сообщений: 206
21.09.2020, 21:09  [ТС] 18
ФедосеевПавел, меня мало интересовало как таблицу там выводить, вопрос не в этом был, а в пунктах 1 и 2

Добавлено через 37 минут
я именно не понимаю, как это вывести на экран
0
Модератор
Эксперт по электронике
8476 / 4335 / 1642
Регистрация: 01.02.2015
Сообщений: 13,461
Записей в блоге: 8
22.09.2020, 07:28 19
makich_, после получения готового кода части программы, можно говорить, что это всё сам знал и умел.
Но я не видел ни одной строки кода лично от вас.

Определяете переменную, в которой будет учитываться количество перемен знака.
Просматриваете массив y от 1-го элемента (не от 0-го).
Если произведение y[i-1]*y[i]<0 значит была перемена знак и выводите сообщение
C++
1
cout << "На отрезке [" << x[i-1] << "; " << x[i] << "] функция меняет знак" << endl;
и заодно увеличиваете счётчик количества перемен знака на 1.
По окончанию цикла проверяете этот счётчик - если он равен 0, т.е. знак не менялся, то выводите
C++
1
2
        char sign=(y[0]<0)? '-':'+';
        cout << "На отрезке [" << A << "; " << B << "] функция имеет постоянный знак \"" << sign << "\"" << endl;
Вперёд!

Приводите вашу попытку решения по этому алгоритму и продолжим разговор.

Не по теме:

Если бы не ваше хамское

Цитата Сообщение от makich_ Посмотреть сообщение
меня мало интересовало как таблицу там выводить, вопрос не в этом был, а в пунктах 1 и 2

0
2528 / 1247 / 461
Регистрация: 08.11.2016
Сообщений: 3,426
22.09.2020, 10:29 20
makich_, для определения знака функции нужно определить производную
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
double F_x_(double x) // функция
{
    return x * x - 2 * x - 20;
}
 
double deriv_F_x_(double x) // производная
{
    return 2 * x - 2;
}
 
int sign_F_x_(double x) // определение знака функции
/*если функция вернет 0,
значит имеет место локальный минимум,
максимум или точка перегиба.
Если -1 то функция имеет знак минус (убывает),
иначе 1 - функция растет (имеет знак +)*/
{
    double eps = 1e-8;
    double deriv = deriv_F_x_(x);
    return fabs(deriv) < eps ? 0 :  deriv < 0 ? -1 : 1;
}
 
int main()
{
    double A, B, h, x, f_min;
    std::cin >> A >> B >> h;
    f_min = fabs(F_x_(A));
    for (x = A + h; x < B + h / 2; x += h)
    {
        double f = F_x_(x);
        int sign = sign_F_x(x);
        fabs(f) < f_min ? f_min = fabs(f) : false;
        std::cout << "F(" << x << ") = " << f << "\t-\t[" << sign == 0 ? "*]" : sign > 0 ? "+]" : "-]" << std::endl;
    }
 
    std::cout << "Function nearest to zero in x = " << f_min << std::endl;
 
    return 0;
}
По пункту 1 задания решите самостоятельно используя приведенную в коде функцию sign_F_x(double x)
0
22.09.2020, 10:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2020, 10:29
Помогаю со студенческими работами здесь

Какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()?
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()

Выясните, сохраняет ли булева функция 0, 1, является ли функция линейной, монотонной, само двойственной?
Помогите пожалуйста!!! Булева функция задана вектором значений F(x)=(1001) Выясните, сохраняет...

Функция - Pos(s,s1). Назначение - поиск первого вхождения подстроки s1 в строку s (аналогичная функция C - strstr)
Функция - Pos(s,s1). Назначение - поиск первого вхождения подстроки s1 в строку s (аналогичная...

Что такое функция или функция под капотом
Собственно меня очень сильно интересует этот вопрос. Функция это указатель который содержит адрес...

Функция нахождения всех суффиксов списка и функция mapIfMy
Добрый день. Пожалуйста, помогите решить 2 задачи: 1. Напишите функцию tails:: -&gt;], находящую...

Функция CM_Request_Device_Eject из SETUPAPI.dll. Ошибка - неизвестная функция.
нужна ваша помощь есть функция CM_Request_Device_Eject при компиляции RAD 2010 матерится и выдает...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru