Zhenyoker, на будущее:- ваш не отформатированный код никто смотреть не будет;
- не мешайте ввод/вывод C и C++;
- цитирую Страуструпа: "Функции наводят порядок в хаосе алгоритмов". Используйте функции реализуя декомпозицию;
- копи/паст в программе - это зло!
- метки перехода (а-ля goto) - это зло! (Как бы на холиварщиков не наткнуться
) - выкиньте этот хлам под названием Turbo C Builder. Вполне возможно что вы уже сидите на 64-х разрядной архитектуре, а всё используете 16-ти разрядный компилятор. Плюс этот хлам не считается со стандартами, а тот кто не с нами, тот против нас.
Скажите спасибо разработчикам замечательной утилиты http://astyle.sourceforge.net которая позволяет форматировать код. Эх, да простят меня коллеги, за то что я выкладываю этот код, но он не мой, он ваш.
| Код | #include <iostream> #include <cmath> #include <conio.h> #include <cstdio> #include <iomanip> #include <cstdlib>
using namespace std;
const float h1 = 1; const float h2 = 4.33; const float h3 = 3.11;
int main() { system("cls"); menu: cout << "vipolnil:\n\n"; cout << "F1=x + sin(a*a + b)\n"; cout << "F2=(x + sin(a*a + b)/sqrt(a*x*x) + atan(b))\n"; cout << "F3=x + sin(a*a+b)/atan(a*b/x)\n\n"; float a, b, x, f, buff; cout << "Введите переменные\n\na: "; cin >> a; cout << "b: "; cin >> b; cout << "x: "; cin >> x; cout << "\n"; men: cout << "Выбирите функцию\n"; cout << "1) F1=x + sin(a*a + b)\n"; cout << "2) F2=(x + sin(a*a + b)/sqrt(a*x*x) + atan(b))\n"; cout << "3) F3=x + sin(a*a+b)/atan(a*b/x)\n"; cout << "4) Выход\n\n"; char otv, otv2; do { otv = getch(); switch (otv) { case '1': { buff = a; a = -3; cout << setw(20) << "A" << setw(20) << "F1(x)\n\n"; while (a <= 6) { f = x + sin(a * a + b); cout << setw(20) << setprecision(4) << a << setw(20) << setprecision(4) << f << "\n"; a += h1; } a = buff; cout << "\nВыбирите пункт меню:\n"; cout << "1) Рассчитать функцию с новыми значениями\n"; cout << "2) Рассчитать другую функцию с теми же значениями\n"; cout << "3) Выход\n\n"; otv2 = getch(); switch (otv2) { case '1': goto menu;
case '2': goto men;
case '3': goto ex; } getch(); system("cls"); goto menu; } case '2': { if (a <= 0) { cout << "' ' не может быть меньше 0, т.к. под корнем будет отриц тельное число\n\n\nН жмите любую клавишу для ввода других данных...\n\n"; getch(); system("cls"); goto menu; } else { buff = b; b = -5; cout << setw(20) << "B" << setw(20) << "F2(x)\n\n"; while (b <= 34) { f = x + sin(a * a + b) / sqrt(a * x * x) + atan(b); cout << setw(20) << setprecision(4) << b << setw(20) << setprecision(4) << f << "\n"; b += h2; } b = buff; cout << "\nВыбирите пункт меню:\n"; cout << "1) Рассчитать функцию с новыми значениями\n"; cout << "2) Рассчитать другую функцию с теми же значениями\n"; cout << "3) Выход\n\n"; otv2 = getch(); switch (otv2) { case '1': system("cls"); goto menu;
case '2': system("cls"); goto men;
case '3': goto ex; } getch(); system("cls"); goto menu; } } case '3': { buff = x; if (a == 0 || b == 0 || x == 0) { cout << "Ошибка! arctg0=0, а на 0 делить нельзя!\n\n\nНажмите любую клавишу для ввод других данных...\n\n"; getch(); system("cls"); goto menu; } else { x = 6; } cout << setw(20) << "X" << setw(20) << "F3(x)\n\n"; while (x <= 34) { f = x + sin(a * a + b) / atan(a * b / x); cout << setw(20) << setprecision(4) << x << setw(20) << setprecision(4) << f << "\n"; x += h3; } x = buff; cout << "\nВыбирите пункт меню:\n" ; cout << "1) Рассчитать функцию с новыми зн чениями\n"; cout << "2) Рассчитать другую функцию с теми же значениями\n"; cout << "3) Выход\n\n"; otv2 = getch(); switch (otv2) { case '1': system("cls"); goto menu;
case '2': system("cls"); goto men;
case '3': goto ex; } getch(); system("cls"); goto menu; } } } while (otv != '4'); ex: return 0; }
|
Теперь по части ошибки : Вы почему меняете значение базовых переменных x, a, b? Ну даже если и меняете, то не забывайте восстанавливать.
Бинарник с исходником ниже. |