#include <iostream> #include <math.h> using namespace std;
int A,C; double B;
int main() { setlocale(0,"Russian"); while(true) { cout<<"Введите значения переменных A, B, C (можно через пробел)"<<'\n'; cout<<"(A>0)"<<'\n'; cin>>A>>B>>C; if(A<=0) { cout<<"Сожалею, но число A("<<A<<") меньше нуля или равно нулю"<<'\n'; continue; }
double D = B*B - 4*A*C; // насколько я помню в формуле -4ac
if(!D) { cout<<"Один корень. x = "<<-(B/(2.0*A))<<'\n'; continue; }
Saitei, у тебя не предусмотрен выход из вечного цикла. Программа может закрыться только по нажатию Ctrl+C. Добавь приглашение для выхода из программы. Tikara, применение оператора continue в данной программе обосновано только при проверке переменной A, далее он не имеет смысла: если выполняется if(!D), то условие if(D<0) выполняться не будет, соответственно не будет выполнен и блок кода. Для большей выразительности кода лучше написать так:
Twister, только при д>0 будет два корня, при =0 будет 1 корень. Насчёт прог, все проги не предусматривают окончание цикла. Использование гото вообще не оправдано считаю. Берешь вариант Tikara, но при этом думаешь, как завершить его цикл. Зависит от задания: Если надо, что бы прога выполнялась пока не будет корректный ответ, т.е. не найден корень, тогда заводишь булевскую переменную, по ней устраиваешь while, и в соответсвующих ифах меняешь этот флаг на false. Либо в тех же ифах пишешь бреак. Второй вариант - это если просто программа должна выполняться просто какое-то время, устравиваешь тогда счетчик интовский и по нему идешь. Можешь вообще тогда фор использовать, либо до while завести переменную, приравнять к нулю и пока она скажем не будет равна 10, прибавлять на 1. Но для этого все же логичнее использовать for. Он как раз это и делает.
#include <iostream> #include <math.h> using namespace std;
int a, c; double b, d;
int main() { setlocale(0,"Russian"); while (true) { do { cout << "Введите A, B, C: \n"; cin >> a >> b >> c; if (a <= 0) cout << "A (" << a << ") <= 0."; } while (a <= 0);
d = b * b - 4 * a * c; if (!d) cout << "x = " << -b / (2 * a) << endl; else if (d < 0) cout << "Решений нет!\n"; else { d = sqrt(d); cout << "x1 = " << (-b + d) / (2 * a) << endl; cout << "x2 = " << (-b - d) / (2 * a) << endl; } } return 0; }
Сообщение отредактировал Naza - Воскресенье, 30 Декабря 2012, 15:31
зачем второй цикл while? Он повышает сложность до O(n^2), и вообще не совсем логично выглядит. Учитывая, что а задается один раз за вычисление всех значений во втором цикле, он(второй цикл) тут совсем не нужен.