Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2021, 18:03   #1
Alex667
Новичок
Джуниор
 
Регистрация: 04.11.2021
Сообщений: 3
По умолчанию Помогите исправить ошибки в коде.

Создать программу, вычисляющую корни квадратного уравнения (ax2+bx+c=0). Необходимо поместить на форму четыре объекта класса TEdit – три для коэффициентов квадратного уравнения, один – для результата и кнопку (объект класса TButton), нажимая на которую пользователь выполняет нахождение корней. Исключить ввод символов вместо цифр, получение отрицательного дискриминанта и ввод а = 0. Вывести при всех типах ошибок одно и то же сообщение.

unit Unit33;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
Messages;
type
TForm33 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button1: TButton;
procedure Edit1Change(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form33: TForm33;

implementation

{$R *.dfm}

procedure TForm33.Button1Click(Sender: TObject);
var a,b,c,d,x1,x2: real;
begin
a: = strtofloat(edit1, text);
b: = strtofloat(edit2, text);
c: = strtofloat(edit3, text);
d: = ((b*b)-(4*a*c));
if d>0 then edit4.Text:="Действительных корней нет"
else
if d=0 then
begin
x1:=(-b/(2*a));
edit4.Text:="один действительный корень";
x="+ floattostr(x1)";
end;
else
x1: +((-b+sqrt(d))/(2*a);
x2: +((-b+sqrt(d))/(2*a);
edit4.Text:="Два корня x1="+ floattostr(x1)+";
x2 ="+froattostr(x2);
end;
end.

procedure TForm33.Edit1Change(Sender: TObject);
begin
edit1:Text:="1";
edit2:Text:="1";
edit3:Text:="1";
end;
end.
try
i:=StrFoint(edit.text);
wxcept
i on KeyPressolo
if not (key in L"1"... "9";"-";"+";"-+";"/";#8//если вводимый символ не фирфа от 0...9, либо backspase, либо...;
then //show messages'разрешен ввод только цифр"
end;
try
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
except
if d<0 then EMathError;
end;
try//перехватывает ошибку
except
if a+0; then E Error;

finally

end;
end.
Alex667 вне форума Ответить с цитированием
Старый 09.11.2021, 18:09   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,559
По умолчанию

Код:
a: = strtofloat(edit1.text);
b: = strtofloat(edit2.text);
c: = strtofloat(edit3.text);
Первое, что бросается в глаза.

Код:
Form33: TForm33;
Что за зверь TForm33 ?

Код:
i:=StrFoint(edit.text);
wxcept
i on KeyPressolo
if not (key in L"1"... "9";"-";"+";"-+";"/";#8//если вводимый символ не фирфа от 0...9, либо backspase, либо...;
А это с какого боку? Зачем нам i ? Что за функция StrFoint ?

Я бы вынес контроль инф. в Edit'ах и преобразование в float в функцию.
Код:
function StrToMyFloat(S: string; var flag:Boolean): Real;
begin
  flag := True ;
  try
    Result := StrToFloat(S);
  except
    on EConvertError do 
      Result := 0.0 ; Flag := False ;
  end;
end;
А вариант с а=0 - вовсе не аварийная ситуация - кв. уравнение вырождается в линейное и имеет единственный корень, если b <> 0.
Вот что получается, когда списываешь откуда-то не задумываясь.

Последний раз редактировалось digitalis; 09.11.2021 в 19:53.
digitalis вне форума Ответить с цитированием
Старый 10.11.2021, 06:57   #3
Alex667
Новичок
Джуниор
 
Регистрация: 04.11.2021
Сообщений: 3
По умолчанию

а остальное все правильно?или тоже есть что исправлять?
Alex667 вне форума Ответить с цитированием
Старый 10.11.2021, 11:01   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,559
По умолчанию

Что за странный вопрос? Ответ: "правильно - нет" даёт прогон контрольного примера на компе. Если компа нет, а обучение идёт "на тетради в клеточку" - ну тады ой.
Перепиши с учётом замечаний и будем смотреть дальше.
----------------
И на фига так много Label, что в них за супер-информация? Это всё в сдуваемом образце было? "Вали кулём, потом разберём" ?

Последний раз редактировалось digitalis; 10.11.2021 в 11:05.
digitalis вне форума Ответить с цитированием
Старый 14.11.2021, 11:52   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
function StrToFl(s: string; var fl: boolean): real;
begin
   try
   fl:=true;
   Result:=StrToFloat(s);
   except
      fl:=false;
      Result:=0;
      MessageDlg(s+' - не является числом!', mtError, [mbOK], 0);
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var a, b, c, D, x1, x2: real;
    fl: boolean;
begin
   a:=StrToFl(Edit1.Text, fl);
   if not fl then
      Exit;
   if a=0 then
   begin
      MessageDlg('a = 0!', mtError, [mbOK], 0);
      Exit;
   end;
   b:=StrToFl(Edit2.Text, fl);
   if not fl then
      Exit;
   c:=StrToFl(Edit3.Text, fl);
   if not fl then
      Exit;
   D:=b*b - 4*a*c;
   if D<0 then
      Edit4.Text:='Действительных корней нет!' else
   if D=0 then
   begin
      x1:=-b/(2*a);
      Edit4.Text:='Один действительный корень: x = '+FloatToStr(x1);
   end else
   begin
      x1:=(-b-Sqrt(D))/(2*a);
      x2:=(-b+Sqrt(D))/(2*a);
      Edit4.Text:='Два корня: x1 = '+FloatToStr(x1)+
         '; x2 = '+FloatToStr(x2);
   end;
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите исправить ошибки в коде,программам должна выводить решение по номеру задачи vavucho Помощь студентам 2 17.03.2020 18:48
С++ Исправить ошибки в коде artilun Общие вопросы C/C++ 3 03.11.2016 10:39
Помогите, нужно исправить 4 ошибки в коде программы Dimas190597 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 02.10.2016 15:57
Помогите исправить ошибки в коде lomik222 Общие вопросы C/C++ 5 11.03.2016 09:51
Помогите пожалуйста исправить ошибки в коде Nata Golden rose Общие вопросы C/C++ 6 18.05.2014 23:28