Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 01.04.2017
Сообщений: 24

Выдает ошибку Run-Time Check Failure #3 - The variable 'S' is being used without being initialized

18.11.2017, 21:38. Показов 3702. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Для каждого x, изменяющегося от a до b с шагом h найти значение функции Y(x), суммы S(x) и | Y(x)-S(x)| вывести в виде таблицы. Значение a, b, h и n вводятся с клавиатуры. Так как значение S(x) является рядом разложения функции Y(x), при правильном решении значения S и Y для заданного аргумента x (для тестовых значений исходных данных) должны совпадать в целой части и в первых двух-четырех позициях после десятичной точки.
Работу программы проверить для a = 0,1; b = 1,0; h = 0,1; значение параметра n выбрать так, чтобы |Y(x)-S(x) | < 0.001(0.0001, 0.00001).
S(x)=∑(k=0)^n (x^(2k+1)/(2k+1))! Y(x)=(e^x-e^(-x))/2

Выдает эту ошибку:Run-Time Check Failure #3 - The variable 'S' is being used without being initialized. Не могу понять почему. Я ведь проинициализировал S. Если проинициализировать ее в начале, то получается бесконечный цикл. Помогите пожалуйста.

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
61
62
63
[CPPQT]#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
 
using namespace std;
 
 
 
long double fact(long double f)
{
    if (f < 0) 
        return 0;
    if (f == 0) 
        return 1;  
    else 
        return f * fact(f - 1); 
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const double a = 0.1, h = 0.1;
    const int b = 1;
    double S,Y,f,raz;
    int n;
    cout << "Введите n";
    cin >> n;
    
    for (int x = a; x <= b; x = x + h)
    {
      Y = (exp(x) - exp(-x)) / 2;
      
      for (double ebs = 0.001; ebs <= 0.00001; ebs = ebs/10)
      {
          raz = 1;
          while (raz > ebs)
          {
              S=0
                  for(int k=0;k<=n;k++)
                  {
                      f = fact(2 * k + 1);
                      S+= ((pow(x, 2 * k + 1)) / f);
                      raz = abs(Y - S);
                     
                  }
                 n = n * 10;
          }
          
      }
      
      cout << "S=" << S << endl;
      cout << "Разница:" << raz << endl;
      cout << "Y=" << Y << endl;
    }
    
 
 
    system("pause");
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.11.2017, 21:38
Ответы с готовыми решениями:

Не могу найти ошибку: Run-Time Check Failure #3 - The variable 'Index' is being used without being initialized
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { const int Array_len = 5; int MyNumbers = {24,...

Run-Time Check Failure #3 - The variable 'v' is being used without being initialized
Mc Visual Studio 2010 C++ при построении таблицы выдает ошибку ...

Run-Time Check Failure #3 - The variable 'i' is being used without being initialized
#include &quot;stdafx.h&quot; #include &quot;cstdlib&quot; #include &quot;cstring&quot; #include &quot;iostream&quot; using namespace std; int _tmain(int argc,...

10
174 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 719
18.11.2017, 21:42
Переменная S используется без инициализации.
Так говорит гугл переводчик. Вроде бы понятно.
А что вам мешает инициализировать её в начале и обнулять в 41 строке? Религия?
0
0 / 0 / 0
Регистрация: 01.04.2017
Сообщений: 24
18.11.2017, 21:53  [ТС]
Проинициализировал и теперь бесконечный цикл. Не понимаю в чем проблема.
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
61
62
63
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
 
using namespace std;
 
 
 
long double fact(long double f)
{
    if (f < 0) // если пользователь ввел отрицательное число
        return 0; // возвращаем ноль
    if (f == 0) // если пользователь ввел ноль
        return 1; // возвращаем факториал от нуля 
    else // во всех остальных случаях
        return f * fact(f - 1); // делаем рекурсию.
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const double a = 0.1, h = 0.1;
    const int b = 1;
    double S=0,Y,f,raz=1;
    int n;
    cout << "Введите n";
    cin >> n;
    
    for (int x = a; x <= b; x = x + h)
    {
      Y = (exp(x) - exp(-x)) / 2;
      
      for (double ebs = 0.001; ebs <= 0.00001; ebs = ebs/10)
      {
          raz = 1;
          while (raz > ebs)
          {
                  S = 0;
                  for(int k=0;k<=n;k++)
                  {
                      f = fact(2 * k + 1);
                      S+= ((pow(x, 2 * k + 1)) / f);
                      raz = abs(Y - S);
                     
                  }
                 n = n * 10;
          }
          
      }
      
      cout << "S=" << S << endl;
      cout << "Разница:" << raz << endl;
      cout << "Y=" << Y << endl;
    }
    
 
 
    system("pause");
    return 0;
}
0
 Аватар для Herji
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
18.11.2017, 22:01
Цитата Сообщение от tommy0 Посмотреть сообщение
бесконечный цикл
Цитата Сообщение от tommy0 Посмотреть сообщение
for (int x = a; x <= b; x = x + h)
...
1
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
18.11.2017, 22:03
Цитата Сообщение от tommy0 Посмотреть сообщение
for (int x = a;
Не int а double.

Добавлено через 46 секунд
Цитата Сообщение от tommy0 Посмотреть сообщение
ebs <= 0.00001
Наверное всё же >=. Иначе цикл не выполнится ни разу.
1
0 / 0 / 0
Регистрация: 01.04.2017
Сообщений: 24
18.11.2017, 22:17  [ТС]
likehood, теперь возникает такая вот ошибка на 12 строке.
Необработанное исключение по адресу 0x00271E7B в ConsoleApplication12.exe: 0xC00000FD: Stack overflow (параметры: 0x00000001, 0x00E42FFC).
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
61
62
63
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
 
using namespace std;
 
 
 
long double fact(long double f)
{
    if (f < 0) // если пользователь ввел отрицательное число
        return 0; // возвращаем ноль
    if (f == 0) // если пользователь ввел ноль
        return 1; // возвращаем факториал от нуля 
    else // во всех остальных случаях
        return f * fact(f - 1); // делаем рекурсию.
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const double a = 0.1, h = 0.1;
    const int b = 1;
    double S=0,Y,f,raz=1;
    int n;
    cout << "Введите n";
    cin >> n;
    
    for (double x = a; x <= b; x = x + h)
    {
      Y = (exp(x) - exp(-x)) / 2;
      
      for (double ebs = 0.001; ebs >= 0.00001; ebs = ebs/10)
      {
          raz = 1;
          while (raz > ebs)
          {
                  S = 0;
                  for(int k=0;k<=n;k++)
                  {
                      f = fact(2 * k + 1);
                      S+=((pow(x, 2 * k + 1)) / f);
                      raz = abs(Y - S);
                     
                  }
                 n = n * 10;
          }
          
      }
       
      cout << "Y=" << Y << endl;
      cout << "S=" << S << endl;
      cout << "Разница:" << raz << endl;
    }
    
 
 
    system("pause");
    return 0;
}
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
18.11.2017, 22:29
Видимо переполняется стек при рекурсивном расчёте факториала.

Вообще, в программе есть две глобальные проблемы:

1. Неправильный подход к вычислению суммы (факториалы считать НЕ нужно). Как правильно - см. Вычисление функций разложением в ряд Тейлора.

2. Вы похоже неверно поняли задание. Значение n не должно меняться после ввода его пользователем. Значения погрешности eps не нужно перебирать в цикле, просто нужно несколько раз запустить программу, вводя разные n, и при этом добиваться того, чтобы разность |S-Y| была не больше указанных значений.
0
0 / 0 / 0
Регистрация: 01.04.2017
Сообщений: 24
18.11.2017, 22:33  [ТС]
По поводу второго пункта: в первом варианте моей программы все так и было, но преподаватель сказал,что нужно перебирать n пока точность не станет 0.001 затем 0.0001 и затем 0.00001.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
18.11.2017, 23:38
Цитата Сообщение от tommy0 Посмотреть сообщение
нужно перебирать n
Пусть так. Только зачем умножать его на 10? Не лучше ли прибавлять по единичке.
0
0 / 0 / 0
Регистрация: 01.04.2017
Сообщений: 24
18.11.2017, 23:51  [ТС]
likehood, согласен. Мне кажется, что программа увеличивает n не в зависимости от достигнутой погрешности, а просто прибавляет единицу и все. Не могли бы вы посмотреть?
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
61
62
63
64
65
66
67
68
69
70
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
 
using namespace std;
 
 
 
long double fact(long double f)
{
    if (f < 0) // если пользователь ввел отрицательное число
        return 0; // возвращаем ноль
    if (f == 0) // если пользователь ввел ноль
        return 1; // возвращаем факториал от нуля 
    else // во всех остальных случаях
        return f * fact(f - 1); // делаем рекурсию.
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    const double a = 0.1, h = 0.1;
    const int b = 1;
    double S=0,Y,f,raz=1;
    int n;
    cout << "Введите n";
    cin >> n;
    
    for (double x = a; x <= b; x = x + h)
    {
      Y = (exp(x) - exp(-x)) / 2;
      
      for (double ebs = 0.001; ebs >= 0.00001; ebs = ebs/10)
      {
          raz = 1;
          while (raz > ebs)
          {
                  S = 0;
                  for(int k=0;k<=n;k++)
                  {
                      f = fact(2 * k + 1);
                      S+=((pow(x, 2 * k + 1)) / f);
                      raz = abs(Y - S);
                     
                  }
 
                 cout << "n=" << n << endl;
                 cout << "ebs=" << ebs << endl;
                 cout << "x=" << x << endl;
                 cout << "Y=" << Y << endl;
                 cout << "S=" << S << endl; 
                 cout << "Разница:" << raz << endl;
                n = n +1;
          }
           
      }
       
      
     
      
    }
    
 
 
    system("pause");
    return 0;
}
Введите n2
n=2
ebs=0.001
x=0.1
Y=0.100167
S=0.100167
Разница:1.98441e-11
n=3
ebs=0.0001
x=0.1
Y=0.100167
S=0.100167
Разница:2.83107e-15
n=4
ebs=1e-05
x=0.1
Y=0.100167
S=0.100167
Разница:6.93889e-17
n=5
ebs=0.001
x=0.2
Y=0.201336
S=0.201336
Разница:2.77556e-17
n=6
ebs=0.0001
x=0.2
Y=0.201336
S=0.201336
Разница:2.77556e-17
n=7
ebs=1e-05
x=0.2
Y=0.201336
S=0.201336
Разница:2.77556e-17
n=8
ebs=0.001
x=0.3
Y=0.30452
S=0.30452
Разница:5.55112e-17
n=9
ebs=0.0001
x=0.3
Y=0.30452
S=0.30452
Разница:5.55112e-17
n=10
ebs=1e-05
x=0.3
Y=0.30452
S=0.30452
Разница:5.55112e-17
n=11
ebs=0.001
x=0.4
Y=0.410752
S=0.410752
Разница:0
n=12
ebs=0.0001
x=0.4
Y=0.410752
S=0.410752
Разница:0
n=13
ebs=1e-05
x=0.4
Y=0.410752
S=0.410752
Разница:0
n=14
ebs=0.001
x=0.5
Y=0.521095
S=0.521095
Разница:0
n=15
ebs=0.0001
x=0.5
Y=0.521095
S=0.521095
Разница:0
n=16
ebs=1e-05
x=0.5
Y=0.521095
S=0.521095
Разница:0
n=17
ebs=0.001
x=0.6
Y=0.636654
S=0.636654
Разница:0
n=18
ebs=0.0001
x=0.6
Y=0.636654
S=0.636654
Разница:0
n=19
ebs=1e-05
x=0.6
Y=0.636654
S=0.636654
Разница:0
n=20
ebs=0.001
x=0.7
Y=0.758584
S=0.758584
Разница:0
n=21
ebs=0.0001
x=0.7
Y=0.758584
S=0.758584
Разница:0
n=22
ebs=1e-05
x=0.7
Y=0.758584
S=0.758584
Разница:0
n=23
ebs=0.001
x=0.8
Y=0.888106
S=0.888106
Разница:1.11022e-16
n=24
ebs=0.0001
x=0.8
Y=0.888106
S=0.888106
Разница:1.11022e-16
n=25
ebs=1e-05
x=0.8
Y=0.888106
S=0.888106
Разница:1.11022e-16
n=26
ebs=0.001
x=0.9
Y=1.02652
S=1.02652
Разница:2.22045e-16
n=27
ebs=0.0001
x=0.9
Y=1.02652
S=1.02652
Разница:2.22045e-16
n=28
ebs=1e-05
x=0.9
Y=1.02652
S=1.02652
Разница:2.22045e-16
n=29
ebs=0.001
x=1
Y=1.1752
S=1.1752
Разница:0
n=30
ebs=0.0001
x=1
Y=1.1752
S=1.1752
Разница:0
n=31
ebs=1e-05
x=1
Y=1.1752
S=1.1752
Разница:0
Для продолжения нажмите любую клавишу . . .
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
19.11.2017, 09:57
Выводить всё это нужно после цикла while, а не внутри.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.11.2017, 09:57
Помогаю со студенческими работами здесь

Run-Time Check Failure #3 - The variable 'c' is being used without being initialized
Вводится последовательность целых чисел. Для каждого числа последовательности проверить, представляют ли его цифры строго ...

Run-Time Check Failure #3 - The variable 'c' is being used without being initialized
VS 2013 После введения знака выдает такую ошибку Как можно исправить? #include &quot;stdafx.h&quot; #include...

C++ - Run-Time Check Failure #3 - The variable 'c' is being used without being initialized
Нужно исправить код. Вводится последовательность целых чисел. Для каждого числа последовательности проверить, представляют ли его цифры...

Run-Time Check Failure #3 - The variable 'k' is being used without being initialized
Дано целое число n&gt;1 . Найти наименьшее целое число k , при котором выполняется неравенство k&gt;n^2+n #include&lt;iostream&gt; ...

Run-Time Check Failure #3 - The variable 's' is being used without being initialized
Ребят в чем может быть косяк запарился уже. Выдает эту ошибку я хз что с ней делать:( #include &quot;stdafx.h&quot; ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru