Другие языки программирования и технологии

Помогите исправить ошибку в программе (c++).

Суть ошибки: когда прогоняю программу выводится таблица, однако значения в столбце F имеет очень странный вид (setprecision не помогает, или я дурной). Также буду крайне благодарен за исправления других недочетов, думаю их тут не мало. :(

Собственно сама программа.

________________________

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <cmath>

#include <iomanip>

using namespace std;

int main()

{

double a, b, c, Xn, Xk, dX,F;

cout << "Vvedite a,b,c,Xn,Xk,dX" << endl;

cin >> a;

cin >> b;

cin >> c;

cin >> Xn;

cin >> Xk;

cin >> dX;

cout << "_____________________\n";

cout << "|" << setw(5) << "X" << setw(5) << "|" << setw(5) << "F" << setw(5) << "|" << endl;

cout << "_____________________\n";

for (double X = Xn; X <= Xk; X += dX)

{

if ((X < 3) && (b != 0))

F = (a*pow(X, 2.0)) - b*X + c;

else X / c;

if ((X > 3) && (b = 0))

F = X - a / X - c;

else X / c;

if ((~(static_cast<int>(a)) | static_cast<int>(b)) && ((static_cast<int>(a)) ^ (static_cast<int>(c))) != 0)

cout << "| " << X << " |" << F << setprecision(2) << endl;

else cout << "|" << setw(10) << "|" << setw(10) << static_cast<int>(F) << setw(10) << "|" << endl;

}

cout << "_____________________\n";

system("pause");

return 0;

}

И задание (10 вариант)


Табличка.

Добавлю свои 2 &cent;
1. Вам сказано использовать Aц, Bц, Сц - декларируйте ЦЕЛЫЕ переменные, инициализируйте ОКРУГЛЕНИЕМ и используйте для формулы.
2. Вам чётко написано, что ВСЕ операции с Aц, Bц и Сц - битовые. Так почему у вас в условии &&, а не & и сравнение с 0?
3. Вам также сказано, что ЗНАЧЕНИЕ F должно быть целым. Так почему вместо округления значения вы используете другой способ вывода ?

ЗЫ
По поводу 3: целые числа ЯВЛЯЮТСЯ вещественными, поэтому их можно (а в данном задании нужно) выводить в том же формате. Иногда вещественное не преобразуется к целому из за того, что вещественное слишком большое.

ЗЗЫ
Условие можно проверять не внутри цикла, а до него так как оно никак не зависит от X.
Использовать pow(x, 2.0) вместо x*x - очень творческое решение
Евгений Соловьев
Евгений Соловьев
11 112
Лучший ответ
Про мусор сказал Зло.
Остальное:

- условие нечитаемое;

- когда записываешь "вертикальную" дробь в строчку, ставь скобки

(сравни 2+2/ 2+2 и (2+2)/(2+2) )

- static_cast желательно использовать для классов для явного отличия от dynamic_cast, для простых типов достаточно C-шной формы int(a);

- манипуляторы (setprecision в частности) надо выводить ДО того, чем они манипулируют, а не после.
if ((X > 3) && (b = 0))F = X - a / X - c;else X / c;



если условие выполнено - получаем F. а если не выполнено - ничего по сути не делаем.




вот он тебе мусор и выдает в F
Андрей Зайцев
Андрей Зайцев
38 452
И я добавлю пару копеек.
Уберите этот систем поз, ну замумукали уже, этому в школе учат, что ли?

std::cin.get();При желании можно перед этим можно напечатать "Press any key to continue...".
Дима Франко
Дима Франко
19 662
нихуя себе ботаник чё вытворяет, профессию меняешь Василий Иванович ?