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

Проверти правильность программы на C++

#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

float calcDiscriminant(float a, float b, float c){
float Discriminant = (b*b) - 4*a*c;
return sqrt(Discriminant);

}

int main () {

float a, b, c;

cout << "Please enter your nember:\n";
cout << "\na = ";
cin >> a;
cout << "\nb = ";
cin >> b;
cout << "\nc = ";
cin >> c;
cout << "\nYou Discriminant: " << calcDiscriminant(a, b, c);
float D = calcDiscriminant(a, b, c);

if(D > 0){

cout << "\nDiscriminant > 0";

}
else if(D < 0){

cout <<"\nDiscriminant < 0";

}

float x1, x2;

float x[2];
x[1] = (-1*b) - calcDiscriminant(a, b, c);
x[2] = (-1*b) + calcDiscriminant(a, b, c);

cout << "\n\nx1 = " << x[1] / (2*a);
cout << "\n\nx2 = " << x[2] / (2*a);

getch();
return 0;

}
Синтаксически верно, семантически нет - считать будет в большинстве случаев неправильно, написано ужасно - половина лишнего.
Бакытжан Алиев
Бакытжан Алиев
56 928
Лучший ответ
#include <iostream>
using namespace std;

float calcDiscriminant(float, float, float);

int main ()
{
float a, b, c;

cout << "\n Please enter your nember:\n";
cout << "\n a = "; cin >> a;
cout << " b = "; cin >> b;
cout << " c = "; cin >> c;

float D = calcDiscriminant(a, b, c);

if(D > 0)
{
cout << "\n Discriminant > 0";
float x1, x2;
x1 = -b - D;
x2 = -b + D;
cout << "\n\n x1 = " << x1 / (2 * a);
cout << "\n x2 = " << x2 / (2 * a);
}
else if(D < 0) cout << "\n Discriminant < 0";
else cout << "\n x = " << -b / (2 * a);

cin.get(); cin.get();
return 0;
}

float calcDiscriminant(float a, float b, float c)
{
float D = b * b - 4 * a * c;
if (b * b >= 4 * a * c)
return sqrt(D);
else
return D;
}
Неправильно.
Проверка на знак дискриминанта должны осуществляться до вычисления его корня. Ты получишь ошибку при уравнение без корней.

//Вызов из кода
cout << "\nYou Discriminant: " << calcDiscriminant(a, b, c);

//Что происходит в функции
float Discriminant = (b*b) - 4*a*c; //отрицательно, не корней.
return sqrt(Discriminant); //Ошибка, попытка вычислить корень отрицательного числа.
Костя Лукашов
Костя Лукашов
40 015
1. "Your Discriminant", а не "you" (вы дискриминант)
2. перемести float D = calcDiscriminant(a, b, c); выше и выводи
float D = calcDiscriminant(a, b, c);
cout << "\nYou Discriminant: " << D;
3. в условии if( D>0) фигурные скобки не нужны
4. в elseif тоже
5. нет проверки D на 0, в этом случае один корень, а при < 0 их вообще нет!
6. не надо умножать на -1, можно написать -b
7. В С++ используется <cmath>, а не <math.h>
8. Зачем getch(), если подключили conio.h, пиши while(!kbhit());
9. Что такое nember?? number или member =)
10 ИНДЕКСАЦИЯ МАССИВА С 0 !!!x[0], x[1]
11. То, что ты выводишь как дискриминант - это его корень, а не дискриминант.
Рома Кузьмич
Рома Кузьмич
25 952
Решает, блин, квадрарные уравнения
Решает правильно вроде, но стиль оставляет желать ...
и отсутствует несколько проверок