0 / 0 / 0
Регистрация: 04.11.2016
Сообщений: 13
1

Не могу найти ошибку в коде

28.10.2020, 15:38. Показов 1276. Ответов 6

Author24 — интернет-сервис помощи студентам
Условие задачи в прикреплённой картинке, продублирую текстом

Составить программу расчета таблицы значений функции f(x) на интервале a<=x<=b в n равностоящих точках. Границы интервала a,b и количество точек n ввести с клавиатуры. Результаты вывести на печать.

f(x)=(e^(-0,5*x))*((cos(PI*x)*(cos(PI*x))

Найти количество значений функции f(x), абсолютная величина целой части которых > 1.

Сама проблема в том, что не учитываются 4.53999e-05 (возможно я не понимаю и они правда не должны учитываться) но у этих чисел если возвести в модуль целая часть больше двух



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
#include <iostream>
#include <cmath>
 
using namespace std;
 
int main()
{
    int n; 
    double a, b, x, y, dx, k; 
    cout <<  "Введите нижнюю границу интервала:\n"; cin >> a;
    cout << "Введите верхнюю границу интервала:\n"; cin >> b;
    cout << "Введите количество точек:\n"; cin >> n;
    
     if (a > b) \\ условие по которому начало интервала должно быть меньше конца \\
        {
        cout<< "Введены неверные границы интервалов\n";
        
        exit(0);
        }
       
    dx = abs(b-a) / (n-1);  \\ Во-первых не уверен в этой строчке, с помощью неё я хотел найти интервал между точками \\
    x = a;
    k = 0;
    
   
    
    while (x <= b) \\ условие по которому будет производиться решение функции и будет выводиться ответ\\
        {
          y = (exp((-0,5*x))*(cos(M_PI*x)*cos(M_PI*x)));
          
          if (abs(floor(y))>= 2) \\ вторая строчка в которой я не уверен, тут я пытался проверить целую часть числа, чтобы она была больше 2\\
        {
            k += 1;
        }
          
          cout << "x:" <<x << " f(x): " << y << endl;
          
          x += dx;
          }
          
    cout << "Количество значений f(x), абсолютная величина которых больше 1: " <<k <<
    endl;
}
Миниатюры
Не могу найти ошибку в коде   Не могу найти ошибку в коде  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.10.2020, 15:38
Ответы с готовыми решениями:

не могу найти ошибку в коде
f(x)=(ax^2+3)\ (sin(пиX\6)) на интервале , дельтаХ=3, указав значения аргумента, при которых...

Не могу найти ошибку в коде
Работаю со связанным списком. нужно удалить из него указанный элемент. Вот код функции удаления:...

Не могу найти ошибку в коде :(
#include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; void main () { clrscr(); float...

Не могу найти ошибку в коде
Есть написанный код,надо найти в нем ошибки,почему он падает.Проблема в том,что часть ошибок...

6
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
28.10.2020, 16:07 2
4.53999e-05 это 0.0000453999 , оно меньше 1.
1
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
28.10.2020, 16:11 3
Лучший ответ Сообщение было отмечено Dramier как решение

Решение

Цитата Сообщение от Dramier Посмотреть сообщение
Сама проблема в том, что не учитываются 4.53999e-05 (возможно я не понимаю и они правда не должны учитываться) но у этих чисел если возвести в модуль целая часть больше двух
А если записать число так: 0.0000453999 Чему у него равна целая часть?

Добавлено через 3 минуты
Я бы строку 27 записал вот так:
C++
27
while ((x < b) || (abs(x-b) < 0.000001))
Равенство можно не получить.
Рассмотрите, например, значения: 1, 2, 10
1
6578 / 4563 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
28.10.2020, 16:13 4
Цитата Сообщение от Dramier Посмотреть сообщение
Сама проблема в том, что не учитываются 4.53999e-05 (возможно я не понимаю и они правда не должны учитываться) но у этих чисел если возвести в модуль целая часть больше двух
4.53999e-05 это 0.00004539, т.е. оно и не должно учитываться
1
0 / 0 / 0
Регистрация: 04.11.2016
Сообщений: 13
28.10.2020, 16:29  [ТС] 5
Всем спасибо

Добавлено через 11 минут
Не могли бы вы объяснить, почему именно
Цитата Сообщение от liv Посмотреть сообщение
|| (abs(x-b) < 0.000001)
?
0
6578 / 4563 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
28.10.2020, 16:40 6
Цитата Сообщение от Dramier Посмотреть сообщение
Не могли бы вы объяснить, почему именно
Чтобы x не выскочил за b
Сделай лучше
C++
1
2
3
    ////////while (x <= b) // условие по которому будет производиться решение функции и будет выводиться ответ
    for (int i = 0; i < n; ++i)
    {
1
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
28.10.2020, 17:21 7
Цитата Сообщение от Dramier Посмотреть сообщение
Не могли бы вы объяснить, почему именно
а конкретно: при приближении к значению b может накапливаться ошибка округления. В моем примере (при a=1, b=2, n=10) x станет равным 2.0000000000000004 > 2.0
Т.е. последнее значение не отработает! Ибо больше, чем b!

Добавлено через 34 минуты
Dramier, ну или сделать, как говорит oleg-m1973:
C++
1
2
for (int i = 0; i < n; ++i) {
    x = i * dx;
1
28.10.2020, 17:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2020, 17:21
Помогаю со студенческими работами здесь

Не могу найти ошибку в коде
Добрый вечер. Собственно, в универе дали задачу Программу я сделал, работает она верно при...

Не могу найти ошибку в коде
Данный код должен выводить данное пользователем количество чисел Фибоначчи(каждое следующее число...

Не могу найти ошибку в коде
class genetic { typedef bool* chr; typedef vector&lt;chr&gt; vals; vals...

Не могу найти ошибку в коде
Привет всем. У меня не получается построить решение. Вот код. #include &lt;conio.h&gt; #include...

Не могу найти ошибку в коде
Здравствуйте еще раз! У меня возникла проблема: В написанном мною коде какая то ошибка, которую ни...

Не могу найти ошибку в коде
Задание такое: в текстовом файле находятся данные про радиусы основ и высот 15 конусов. Нужно...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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