procedure TForm1.btn1Click(Sender: TObject);
var
a, b, c, d, x1, x2: real;
begin
a:= StrToFloat(edt1.text);
b:= StrToFloat(edt2.text);
c:= StrToFloat(edt3.text);
d:= Sqr(b)-4*a*c;
if d < 0 then
begin
lbl5.Caption:='Êîðíåé íåò'
end
else;
if d > 0 then
begin
lbl5.Caption:='Äèñêðèìèíàíò èìååò äâà êîðíÿ'
end
else;
if d = 0 then
begin
lbl5.caption:='Äèñêðèìèíàíò èìååò îäèí êîðåíü'
end
else;
x1:=(-b-sqrt(d))/(2*a);
x2:=(-b+sqrt(d))/(2*a);
lbl5.caption:=FloatToStr(x1);
lbl5.Caption:=FloatToStr(x2);
end;
end.
Другие языки программирования и технологии
Где ошибка в коде Delphi/pascal
В данном коде есть несколько ошибок:
1) Синтаксическая ошибка в конце условных операторов if-then-else: после ключевого слова else нельзя ставить точку с запятой. Например, вместо такого кода:
1) Синтаксическая ошибка в конце условных операторов if-then-else: после ключевого слова else нельзя ставить точку с запятой. Например, вместо такого кода:
if d < 0 then
begin
lbl5.Caption := 'Êîðíåé íåò';
end
else;
нужно написать так: if d < 0 then
begin
lbl5.Caption := 'Êîðíåé íåò';
end
else
begin
// код, который выполнится, если d >= 0
end;
2) Проблема в блоке else-выражениях. Если d < 0, то будет выполнено выражение в первом блоке if, и затем программа продолжит исполнение, выполняя все последующие блоки if, также как если бы d было больше нуля или равно ему. Это приведет к тому, что lbl5.caption будет перезаписано несколько раз, и в итоге на нем будет отображаться только значение x2. Чтобы исправить эту ошибку, нужно поместить все блоки if-then-else в один блок begin-end, например, так: if d < 0 then
begin
lbl5.Caption := 'Êîðíåé íåò';
end
else
begin
if d > 0 then
begin
lbl5.Caption := 'Äèñêðèìèíàíò èìååò äâà êîðíÿ';
end
else
begin
lbl5.Caption := 'Äèñêðèìèíàíò èìååò îäèí êîðåíü';
end;
x1 := (-b - sqrt(d)) / (2 * a);
x2 := (-b + sqrt(d)) / (2 * a);
lbl6.Caption := FloatToStr(x1);
lbl7.Caption := FloatToStr(x2);
end;
3) Нет проверки на нулевое значение a. Если a равно нулю, то при вычислении x1 и x2 произойдет деление на ноль, что приведет к ошибке. Для исправления этой ошибки можно добавить проверку на нулевое значение a перед вычислением значений x1 и x2, например, так: if a = 0 then
begin
lbl5.Caption := 'Êîðíåé íåò';
end
else
begin
d := Sqr(b) - 4 * a * c;
// блоки if-then-else как в примере выше
x1 := (-b - sqrt(d)) / (2 * a);
x2 := (-b + sqrt(d)) / (2 * a);
lbl6.Caption := FloatToStr(x1);
lbl7.Caption := FloatToStr(x2);
end;
4) Вывод значений x1 и x2. В текущей реализации значения x1 и x2 выводятся на одном и том же метке lbl5.Caption, что может вызвать путаницу. Чтобы исправить эту ошибку, нужно использовать две разные метки для вывода x1 и x2, например, так: if a = 0 then
begin
lbl5.Caption := 'Êîðíåé íåò';
end
else
begin
d := Sqr(b) - 4 * a * c;
// блоки if-then-else как в примере выше
x1 := (-b - sqrt(d)) / (2 * a);
x2 := (-b + sqrt(d)) / (2 * a);
lbl6.Caption := FloatToStr(x1);
lbl7.Caption := FloatToStr(x2);
end;
5) Округление значений x1 и x2. В текущей реализации значения x1 и x2 могут выводиться слишком длинными, что не всегда удобно для пользователя. Чтобы округлить значения x1 и x2 до определенного количества знаков после запятой, можно использовать функцию RoundTo из модуля Math, например, так: if a = 0 then
begin
lbl5.Caption := 'Êîðíåé íåò';
end
else
begin
d := Sqr(b) - 4 * a * c;
// блоки if-then-else как в примере выше
x1 := (-b - sqrt(d)) / (2 * a);
x2 := (-b + sqrt(d)) / (2 * a);
lbl6.Caption := FloatToStr(RoundTo(x1, -2));
lbl7.Caption := FloatToStr(RoundTo(x2, -2));
end;
Этот код округлит значения x1 и x2 до двух знаков после запятой.
Виталий Антоненко
А можете пожалуйста целым кодом скинуть
Ошибка в коде связана с неправильным использованием оператора if-else. В данном случае, после каждого оператора else не указан блок кода, который должен быть выполнен в случае, если условие не выполняется. Вместо этого, после оператора else стоит пустой оператор (;), что приводит к некорректной работе программы.
Чтобы исправить ошибку, необходимо удалить (;) после каждого оператора else.
Чтобы исправить ошибку, необходимо удалить (;) после каждого оператора else.
Похожие вопросы
- Где ошибки в коде Delphi/pascal
- Помогите исправить ошибки в коде на Pascal, чтобы он выводил верные ответы. Или можете сами пожалуйста написать пжпжпж!
- Согласны с этим - Глубинные причины ненависти к Delphi/Pascal ?
- Перевод кода из Pascal в C++
- (PASCAL)помогите найти ошибку в коде задачи, и исправить
- где ошибка в программе turbo pascal (фото внутри)
- Придумайте задачку на массив в delphi (pascal)
- ПОМОГИТЕ!!!!ПЛИИИИЗ!!!!delphi/pascal!!
- Помогите, пожалуйста, исправить ошибку в коде С++!!
- Ошибка в программе delphi. Рекурсия