Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
GW15
Новичок
0 / 0 / 0
Регистрация: 14.01.2012
Сообщений: 15
04.02.2012, 16:28     Решение линейных, квадратных и кубических уравнений   #1
Код Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
           Unit Unit9;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
  StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    RadioGroup1: TRadioGroup;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1; 
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
procedure TForm1.Button1Click(Sender: TObject);
 procedure korni_1(a,b:real;var x_:string);
  var x:real;
    begin
      x=-b/a;
      x_:=FloatToStrF(x,ffFixed,5,2);
    end;
 procedure korni_2(a,b,c:real;var x1_,x2_:string; var pr:byte);
 var d,x1,x2:real;
   begin
     d:=b*b-4*a*c;
     if d<0 then
     begin
       x1:=-b/(2*a);
       x2:=sqrt(abs(d))/(2*a);
       x1_:=FloatToStrF(x1,ffFixed,5,2)+'+i*'+FloatToStrF(x2,ffFixed,5,2);
       x2_:=FloatToStrF(x1,ffFixed,5,2)+'-i*'+FloatToStrF(x2,ffFixed,5,2);
       pr:=2;
     end
     else
     begin
       x1:=(-b+sqrt(d))/2/a;
       x2:=(-b-sqrt(d))/(2*a);
       x1_:=FloatToStrF(x1,ffFixed,5,2);
       x2_:=FloatToStrF(x2,ffFixed,5,2);
       pr:=1;
     end
   end;
 procedure korni_3(a,b,c,d:real;var x1_,x2_,x3_:string; var pr:byte);
 var r,s,t,p,q,ro,fi,u,v,x1,x2,x3,h,g:real;
   begin
     r:=b/a;
     s:=c/a;
     t:=d/a;
     p:=(3*s-r*r)/3;
     q:=2*r*r*r/27-r*s/3+t;
     d:=(p/3)*sqr(p/3)+sqr(q/2);
     if d<0 then
     begin
       ro:=sqrt(-p*p*p/27);
       fi:=-q/(2*ro);
       fi:=pi/2-arctan(fi/sqrt(1-fi*fi));
       x1:=2*exp(1/3*ln(ro))*cos(fi/3)-r/3;
       x2:=2*exp(1/3*ln(ro))*cos(fi/3+2*pi/3)-r/3;
       x3:=2*exp(1/3*ln(ro))*cos(fi/3+4*pi/3)-r/3;
       x1_:=FloatToStrF(x1,ffFixed,5,2);
       x2_:=FloatToStrF(x2,ffFixed,5,2);
       x3_:=FloatToStrF(x3,ffFixed,5,2);
       pr:=1;
     end
     else
     begin
       if -q/2+sqrt(d)>0 then
         u:=exp(1/3*ln(-q/2+sqrt(d)))
       else
         if -q/2+sqrt(d)<0 then
           u:=-exp(1/3*ln(abs(-q/2+sqrt(d))))
         else u:=0;
       if  -q/2-sqrt(d)>0 then
         v:=exp(1/3*ln(-q/2-sqrt(d)))
       else
         if -q/2-sqrt(d)<0 then
           v:=-exp(1/3*ln(abs(-q/2-sqrt(d))))
         else v:=0;
       x1:=u+v-r/3;
       h:=-(u+v)/2-r/3;
       g:=(u-v)/2*sqrt(3);
       x1_:=FloatToStrF(x1,ffFixed,5,2);
       x2_:=FloatToStrF(h,ffFixed,5,2)+'+i*'+FloatToStrF(g,ffFixed,5,2);
       x3_:=FloatToStrF(h,ffFixed,5,2)+'-i*'+FloatToStrF(g,ffFixed,5,2);
       pr:=2;
     end
   end;
 
 var
   a_,b_,c_,d_:real;
   kod_a,kod_b,kod_c, kod_d:integer;
   _x,_x1,_x2,_x3:string;
   _pr:byte;
begin
  case RadioGroup1.ItemIndex of
  0:
    begin
      val(Edit1.Text,a_,kod_a);
      val(Edit2.Text,b_,kod_b);
      if (kod_a=0) and (kod_b=0) then
      begin
        if (a_<>0) then
        begin
          korni_1(a_,b_,_x);
          MessageDlg('Решение линейного уравнения x='+_x,mtInformation,[mbOk],0);
        end
        else
        MessageDlg('Нет корней!',mtInformation,[mbOk],0);
      end
      else
      MessageDlg('Ошибка при вводе коэффициентов!',mtInformation,[mbOk],0);
    end;
  1:
    begin
      val(Edit1.Text,a_,kod_a);
      val(Edit2.Text,b_,kod_b);
      val(Edit3.Text,c_,kod_c);
      if (kod_a=0) and (kod_b=0) and (kod_c=0) then
      begin
        if a_<>0 then
        begin
          korni_2(a_,b_,c_,_x1,_x2,_pr);
          if (CheckBox1.Checked=false) and (CheckBox2.Checked=false) then
           MessageDlg('Выберите тип решения',mtInformation,[mbOk],0);
          if CheckBox1.Checked and CheckBox2.Checked then
           MessageDlg('Решение квадратного уравнения'+chr(13)+ ' x1='+_x1+' x2='+_x2,mtInformation,[mbOk],0);
          if CheckBox1.Checked and (CheckBox2.Checked=false) and (_pr=1) then
           MessageDlg('Действительные корни ','квадратного уравнения'+chr(13)+' x1='+_x1+' x2='+_x2,mtInformation,[mbOk],0);
          if (CheckBox1.Checked=false) and CheckBox2.Checked and (_pr=1) then
           MessageDlg('Уравнение имеет только ','действительные корни.',mtInformation,[mbOk],0);
          if CheckBox1.Checked and (Checkbox2.Checked=false) and (_pr=2) then
           MessageDlg('В уравнении дейтсвительных ','корней нет',mtInformation,[mbOk],0);
          if (CheckBox1.Checked=false) and CheckBox2.Checked and (_pr=2) then
           MessageDlg('Комплексные корни квадратного ','уравнения'+chr(13)+' x1='+_x1+' x2='+_x2,mtInformation,[mbOk],0);
        end
        else
          MessageDlg('Первый коэффициент не должен быть', 'нулевым!',mtInformation,[mbOk],0);
      end
      else
        MessageDlg('Ошибка при вводе коэффициентов!',mtInformation,[mbOk],0);
 
     end;
   2:
     begin
       val(Edit1.Text,a_,kod_a);
       val(Edit2.Text,b_,kod_b);
       val(Edit3.Text,c_,kod_c);
       val(Edit4.Text,d_,kod_d);
       if (kod_a=0) and (kod_b=0) and (kod_c =0) and (kod_d = 0) then
       begin
         if a_<>0 then
         begin
           korni_3(a_,b_,c_,d_,_x1,_x2,_x3,_pr);
           if (CheckBox1.Checked=false) and (CheckBox2.Checked=false) then
            MessageDlg('Выберите тип решения',mtInformation,[mbOk],0);
           if CheckBox1.Checked and CheckBox2.Checked then
            MessageDlg('Корни кубического','уравнения'+chr(13)+' x1=',+_x1+' x2',_x2+' x3'+_x3,mtInformation,[mbOk],0);
           if CheckBox1.Checked and (CheckBox2.Checked=false) and (_pr=1) then
            MessageDlg('Действительные корни ','кубического уравнения'+chr(13)+' x1='+_x1+' x2'+_x2+' x3'+_x3,mtInformation,[mbOk],0);
           if CheckBox1.Checked and (CheckBox2.Checked=false) and (_pr=2) then
            MessageDlg('Действительные корни ','кубического уравнения'+chr(13)+' x1=',+_x1,mtInformation,[mbOk],0);
           if (CheckBox1.Checked=false) and CheckBox2.Checked and (_pr=2) then
            MessageDlg('Комплексные корни кубического уравнения ','уравнения'+chr(13)+' x1='+_x2+' x2='+_x3,mtInformation,[mbOk],0);
           if (CheckBox1.Checked=false) and CheckBox2.Checked and (_pr=1) then
            MessageDlg('Уравнения имеет только ','действительные корни.',mtInformation,[mbOk],0);
         end
         else
         MessageDlg('Первый коэффициент не должен быть ','нулевым!',mtInformation,[mbOk],0);
       end
       else
       MessageDlg('Ошибка при вводе коэффициентов!',mtInformation,[mbOk],0);
     end;
end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  Label1.Caption:='Введите коэффициенты';
  Label2.Caption:='a=';
  Label3.Caption:='b=';
  Label4.Caption:='c=';
  Label5.Caption:='d=';
  Edit1.Text:='0.00';
  Edit2.Text:='0.00';
  Edit3.Text:='0.00';
  Edit4.Text:='0.00';
  Button1.Caption:='НАЙТИ КОРНИ';
  Button2.Caption:='ОЧИСТИТЬ';
  Button3.Caption:='ВЫХОД';
  CheckBox1.Caption:='Действительные корни';
  CheckBox2.Caption:='Комплексные корни';
  CheckBox1.Checked:=true;
  Label4.Enabled:=false;
  Label5.Enabled:=false;
  Edit3.Enabled:=false;
  Edit4.Enabled:=false;
  CheckBox2.Enabled:=false;
  RadioGroup1.ItemIndex:=0;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  close;
end;


Сначала расскажу суть проги.
В радиогруп помещены 3 компонента: линейное, квадратное и кубическое уравнение.
Пользователь соответственно выбирает какое из них решить при вводе соответствующих коэффициентов.
Проблема заключается в том, что я не могу создать процедуру FormCreate(Пишет "Редактор компонента вызвал ошибку:Невозможно создать новый метод.Исправьте ошибки указанные в окне сообщения").Ниже представлены эти ошибки. Но я не понимаю почему они появляются и как их исправить. Ошибки с инициализацией вообще бред(.Я же описал в процедуре эти переменные.
Короче народ помогите.Не могу продолжить свое обучение по лазарусу без этой проги.


unit9.pas(53,7) Warning: Local variable "x" does not seem to be initialized
unit9.pas(53,13) Error: Illegal expression
unit9.pas(138,27) Hint: Local variable "_x" does not seem to be initialized
unit9.pas(156,39) Hint: Local variable "_pr" does not seem to be initialized
unit9.pas(156,35) Hint: Local variable "_x2" does not seem to be initialized
unit9.pas(156,31) Hint: Local variable "_x1" does not seem to be initialized
unit9.pas(187,43) Hint: Local variable "_x3" does not seem to be initialized
unit9.pas(191,100) Error: Incompatible types: got "ShortInt" expected "AnsiString"
unit9.pas(195,130) Error: Incompatible types: got "ShortInt" expected "AnsiString"
unit9.pas(273) Fatal: Syntax error, "BEGIN" expected but "end of file" found
---------------------------------------------
EAccessViolation: Access violation
AdAgent
Объявления
04.02.2012, 16:28     Решение линейных, квадратных и кубических уравнений
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.02.2012, 16:28     Решение линейных, квадратных и кубических уравнений
Посмотрите здесь:

Lazarus Решение систем линейных уравнений методом Холецкого
Lazarus Решение системы линейных уравнений методом Гаусса
Lazarus Приближённое решение уравнений (графическим и численным методом деления пополам числового отрезка аргумента)
Lazarus Решение задач на сочетания и перестановки
Lazarus Решение задачи Бюффона
Lazarus Решение задач
Lazarus Методы решения нелинейных уравнений
Lazarus Перегрузка квадратных скобок
dan25
Новичок
2 / 2 / 0
Регистрация: 30.08.2012
Сообщений: 38
22.09.2012, 23:38     Решение линейных, квадратных и кубических уравнений   #2
не могу гарантировать, что все правильно скажу, т.к. только недавно начал изучать lazarus. Перейдем к делу.
Строка 138. Там ты вставил процедуру korni_1. Глянул саму процедуру строка 50. Там ты используешь переменную x_, а не . То есть (икс пробел), а не (пробел икс)
В строке 191 запятые стоят. Кажется их там не надо. Достаточно (+).
Строка 195 то самое.
Я так понял это не весь код. Строки 273 не видно, да и нету
end. (точка)
axefizik
Форумчанин
11 / 11 / 3
Регистрация: 18.07.2012
Сообщений: 84
23.09.2012, 16:07     Решение линейных, квадратных и кубических уравнений   #3
Уберите знаки подчеркивания, с которых начинаются названия переменных, из-за этого возможно вылезают ошибки несовместимости типов.
Названия переменных должны начиниться с букв.
---------------------
unit9.pas(138,27) Hint: Local variable "_x" does not seem to be initialized
unit9.pas(156,39) Hint: Local variable "_pr" does not seem to be initialized
unit9.pas(156,35) Hint: Local variable "_x2" does not seem to be initialized
unit9.pas(156,31) Hint: Local variable "_x1" does not seem to be initialized
unit9.pas(187,43) Hint: Local variable "_x3" does not seem to be initialized
Это не ошибки, а предупреждения.
PolarFoG
NPC
144 / 144 / 1
Регистрация: 10.01.2012
Сообщений: 387
24.09.2012, 17:38     Решение линейных, квадратных и кубических уравнений   #4
Добавлю...
Цитата Сообщение от GW15 Посмотреть сообщение
unit9.pas(53,13) Error: Illegal expression
Знак присваивания := а не =


Цитата Сообщение от axefizik Посмотреть сообщение
Уберите знаки подчеркивания
Можно оставить подчёркивания. Предупреждение сообщает о том, что переменная не была инициализирована (что понятно : )), и в следствии чего выделенный участок памяти может иметь уже какое то случайное значение.

Проблема с запятыми. Уберите их, это не процедура Writeln/Readln просто складывайте при помощи знака + .

... И я вроде с пол года назад уже кому то правил точно такой же код
Yandex
Объявления
24.09.2012, 17:38     Решение линейных, квадратных и кубических уравнений
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Опции темы

Текущее время: 12:18. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.
Яндекс.Метрика