Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/67: Рейтинг темы: голосов - 67, средняя оценка - 4.88
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026

Решение СЛАУ методом итераций

22.04.2012, 17:24. Показов 12823. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Что-то алгоритм вычисляет только первый шаг ,а дальше не считает...
В эдит вы должны ввести обязательно точность(Иначе выдаст ошибку) ,а потом щелкать слева на право по кнопкам .
Суть метода:
https://www.cyberforum.ru/atta... 1335003325
https://www.cyberforum.ru/atta... 1335003325
Вложения
Тип файла: rar Метод Итераций.rar (197.8 Кб, 345 просмотров)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.04.2012, 17:24
Ответы с готовыми решениями:

Решение СЛАУ методом простых итераций
подскажите кто-нибудь хотя бы алгоритм) полный код не надо

Решение Слау Матричным методом, Методом Крамера
Добрый день, Может ли кто-тор поделиться исходниками, буду очень благодарен.

Решение кв.уравнений методом итераций
https://www.cyberforum.ru/attachment.php?attachmentid=151259&d=1336915865 Допустил ошибку во второй кнопке,в которой высчитываются...

18
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
22.04.2012, 18:05  [ТС]
Вот немного подкорректировал программу ,но она все равно не работает ...
Что-то я намудрил в предпоследней кнопки .
Вместо того,что бы вывести на экран значения,выводятся одни 0...
Вложения
Тип файла: rar Итерации.rar (197.7 Кб, 333 просмотров)
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
23.04.2012, 14:02  [ТС]
Помогите довести до ума программу.Я уверен,что ошибка только в предпоследней кнопке ,которая числа не находит ...
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
23.04.2012, 15:44
Все порывался ответить, но взглянув в код программы, откладывал. Думал, найдется более компетентный человек для этого.
Думаю, шансы на помощь повысятся, если:
1. Напишешь условие задания.
2. Прокомментируешь выкладываемый код.

Как я понял, нужно решить СЛАУ методом Зейделя. При этом, количество уравнений (а следовательно, и коэффициентов в уравнении) задается пользователем.

Для чего тогда вот этот код?
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm1.btn1Click(Sender: TObject);
begin
 
  d:=strtofloat(edt1.Text);
  for i:=0 to n-1 do
  for j:=0 to m-1 do
  begin
    x[i+1,j+1]:=StrToFloat(strngrd1.cells[j,i]);
    strngrd2.cells[j,i]:=floattostr(x[i+1,j+1]);
  end;
end;
Зачем копировать данные из одной таблицы в другую?
Для чего куча кнопок на форме?
Или вот:
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.se1Change(Sender: TObject);
begin
  n:=se1.Value;
  m:=n+1;
  strngrd1.rowcount:=n;
  strngrd2.rowcount:=n;
  strngrd1.colcount:=n+1;
  strngrd2.colcount:=n+1;
end;
Для меня загадка, для чего здесь нужна переменная m.

Если код работает правильно, то можно додуматься о его назначении. Если код работает неправильно, то нужна четкая постановка задачи, чтобы исправить код.
Мне представляется задача очень простой:
1. Указываем количество уравнений (таблица для ввода коэффициентов СЛАУ формируется на основании этого).
2. Задаем точность (раз уж это требуется по заданию).
3. Жмем кнопку "Расчет". Результаты копируются в столбец другой таблицы, или ListBox. Ну, или появляется надпись в отсутствии сходимости.
Собственно, проще сделать новую программу, чем привести недоделанную к нормальному виду.
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
23.04.2012, 15:52  [ТС]
1 кусок кода:Ну можно и без копирования одной таблице в другую.Можно вырезать кусок с копированием .
2 кусок кода:n число строк,m число столбцов .
Мы задаем размерность таблице используя спинэдит ,а так у нас таблица такой формы :3 на 4 ,4 на 5,
5 на 6 и тп ,то m у нас n+1.
Ошибка должна крыться в предпоследней кнопки ,т.к там происходят вычисления .
Много кнопок я сделал специально,т.к лечге будет искать ошибки,если он будет разбит по кнопкам. В конечной программе,можно все свести к 1-2 кнопкам ...
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
23.04.2012, 15:59
Цитата Сообщение от iluxa1810 Посмотреть сообщение
1 кусок кода:Ну можно и без копирования одной таблице в другую.Можно вырезать кусок с копированием .
Ненене, так не пойдет. Условие задачи в студию.

Добавлено через 6 минут
Цитата Сообщение от iluxa1810 Посмотреть сообщение
Много кнопок я сделал специально,т.к лечге будет искать ошибки,если он будет разбит по кнопкам. В конечной программе,можно все свести к 1-2 кнопкам ...
Ясно. Т.е. о назначении клавиши F7 и точках останова пока не догадываемся. ;-)
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
23.04.2012, 20:58  [ТС]
решения СЛАУ методом итераций:
x1 x2 x3 b1
x1 x2 x3 b2
x1 x2 x3 b3
выражаем из каждой строке x,который равен этой строке(не забываем перенести b),потом делим на него всю строку .
Матрица теперь имеет вид:
x1 x2 x3 b1
x2 x1 x3 b2
x3 x1 x2 b3
Далее подставляем вместо иксов сначала 0 ,но в первый столбец подставлять ничего не надо.
Тем самым мы получим значения иксов
x1 =число 1
x2= число 2
x3=число 3
Теперь мы должны отнять по модулю старые значения от новых и сравнить с точностью.Если точность совпадает,то вычисления завершены ,если нет ,то полученные иксы подставляются по новой,получаются новые иксы,опять отнимает старое от нового и сравниваем и так до тех пор,пока точность не будет достигнута или не иссякнет кол-во попыток .
Условия никакого нет)
Учитель сказал ,что потерял код проги и будет рад ,если я напишу код .

Добавлено через 3 минуты
Я дабы не возиться ,после того,как сменил знаки у последнего столбца и поделил на главную диагональ,обнулил ее .

Добавлено через 7 минут
По сути мне надо исправить предпоследнюю кнопку только.
Вторая кнопка меняет знак(т.к делается перенос) главной диагонали,делит на нее и меняет знак последнего столбца,т.к мы его тоже переносим

Добавлено через 4 минуты
В 3 кнопки:Мы создаем массив с иксами,забитый нулями .
Врубаем цикл While
В нем выполняются операции подсчета новых значений ,а так же сохранение старых .
После того,как подсчет выполнен ,мы с помощью For и If делаем разность старых значений и новых .
Если значение совпадает с точностью ,то делаем c+1 (Это счетчик сходимости с точностью).Если у нас 3 икса,то если счетчик будет равен 3 ,то мы выходим из цикла,т.к разность совпала с точностью и каждого икса .Если это не происходит,то с мы обнуляем и по новой .

Добавлено через 4 часа 41 минуту
Неужели никто не поможет?
Вроде расписал очень подробно все ...
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
23.04.2012, 21:52
Дело в следующем. Саму программу написать несложно. Собственно, вот она.

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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Spin;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    StringGrid1: TStringGrid;
    Label3: TLabel;
    StringGrid2: TStringGrid;
    Label4: TLabel;
    Button1: TButton;
    SpinEdit1: TSpinEdit;
    procedure Button1Click(Sender: TObject);
    procedure SpinEdit1Change(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  procedure SizeStringGrid;
 
 
implementation
var
  // количество переменных X
  SizeEquation: integer;
 
 
{$R *.dfm}
 
// запускаем расчет
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j: integer;
  PrecisionValue, PrecisionResult, MaxPrecision: real;
  MasCoef, NormMas: array of array of Real;
  UnknownValue, TempUnknownValue: array of Real;
  CountCycle: integer;
  OverCount: boolean;
begin
  // определяем точность расчета
  PrecisionValue:=StrToFloat(Edit2.Text);
 
  // очищаем таблицу результатов
  StringGrid2.Cols[0].Clear;
 
  with StringGrid1 do
  begin
    // вводим массив коэффициентов уравнений из таблицы на форме
    MasCoef:=nil;
    SetLength(MasCoef,SizeEquation,SizeEquation+1);
    for i := 0 to RowCount-1 do
    for j := 0 to ColCount-1 do
      MasCoef[i,j]:=StrToFloat(cells[j,i]);
  end;
 
  // нахождение нормированного массива (по главной диагонали стоят единицы)
  NormMas:=nil;
  SetLength(NormMas,SizeEquation,SizeEquation+1);
  for i := 0 to SizeEquation-1 do
  for j := 0 to SizeEquation do
    NormMas[i,j]:=MasCoef[i,j]/MasCoef[i,i];
 
  // задаем начальное значение переменных
  UnknownValue:=nil;
  SetLength(UnknownValue,SizeEquation+1);
  for i:=0 to SizeEquation-1 do
    UnknownValue[i]:=1*i+10.1;
  UnknownValue[SizeEquation]:=-1;
 
  // т.к. переменных несколько, то
  // задаем максимальную расчетную погрешность
  MaxPrecision:=PrecisionValue*2;
 
  // пока заданная точность меньше максимальной
  // расчетной погрешности, то цикл выполняется
  CountCycle:=0;
  OverCount:=false;
  while PrecisionValue < MaxPrecision do
  begin
 
    // сохраняем предыдущее значение переменных, чтобы потом сравнить с расчетными после итерации
    TempUnknownValue:=nil;
    SetLength(TempUnknownValue,Length(UnknownValue));
    for i :=0 to SizeEquation-1 do
      TempUnknownValue[i]:=UnknownValue[i];
 
    // считаем переменные
    for i := 0 to SizeEquation-1 do
    begin
      UnknownValue[i]:=0;
      for j := 0 to SizeEquation do
        if i<>j then
          UnknownValue[i]:=UnknownValue[i]+UnknownValue[j]*NormMas[i,j]*(-1);
    end;
 
    // обнуляем максимальную точность расчета, чтобы определить
    // какая стала точность после проведенной итерации
    MaxPrecision:=0;
 
    // сравниваем результаты расчета с предыдущими значениями
    // и находим максимальное расхождение
    for i := 0 to SizeEquation-1 do
    begin
      PrecisionResult:=UnknownValue[i]-TempUnknownValue[i];
      if abs(PrecisionResult)>MaxPrecision then
        MaxPrecision:=abs(PrecisionResult);
    end;
 
    // считаем количество итераций
    CountCycle:=CountCycle+1;
    if CountCycle>60 then
      begin
        OverCount:=true; // слишком много итераций
        Break;
      end;
 
  end;
 
  // если итераций слишком много, то выходим из программы
  if OverCount then
    begin
      ShowMessage('Итерационный процесс не сходится');
      Exit;
    end
    else
      ShowMessage('Итерационный процесс сошелся. Количество итераций: '+IntToStr(CountCycle));
 
  // заносим результаты расчета в таблицу
  with StringGrid2 do
  for i := 0 to RowCount-1 do
    cells[0,i]:=FloatToStr(UnknownValue[i]);
 
end;
 
// при запуске формы формируем размеры таблиц
procedure TForm1.FormShow(Sender: TObject);
begin
  SizeStringGrid;
end;
 
// при изменении количества переменных формируем размеры таблиц
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
   SizeStringGrid;
end;
 
// процедура изменения размеров таблиц в соответствии с выбранным количеством переменных
procedure SizeStringGrid;
var
  i: integer;
begin
  with Form1 do
  begin
    SizeEquation:=SpinEdit1.Value;
 
    with StringGrid1 do
    begin
      for i := 0 to RowCount-1 do
        Rows[i].Clear;
      RowCount:=SizeEquation;
      ColCount:=SizeEquation+1;
    end;
 
    with StringGrid2 do
    begin
      Cols[0].Clear;
      RowCount:=SizeEquation;
    end;
  end;
end;
 
end.
Но есть нюанс. Не любую систему в ней посчитаешь. А все потому, что хитропопые математики выдумали условие сходимости. Можно почитать, например, здесь. Так что если ввести "правильную" матрицу в таблицу, то все посчитает. А если матрица будет "неблагоприятной формы", тогда облом. :-(
Миниатюры
Решение СЛАУ методом итераций  
0
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
23.04.2012, 22:57  [ТС]
WoodHead, А можешь мой код до ума довести?
Просто в своем легче разобраться,т.к с 0 писал.
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
24.04.2012, 10:46
iluxa1810, нормально. Тебе на блюдечке с голубой каемочкой дали работающий код, где все переменные названы со смыслом, а не "ё", "к", "л", "м", "н", как у тебя. Везде есть комментарии к циклам, переменным, и можно проследить логику работы программы. А ты настаиваешь, чтобы твой код привели в нормальный вид. Ну ты и наглый. :-)

Ладно, даю первую наводку. Ошибка здесь:
Delphi
1
2
3
4
5
begin
      buf[i]:=Abs(buf[i]-a[i]);
      if buf[i]=d then
        c:=c+1;
    end;
Цикл будет выполняться бесконечное число раз, потому что ты почему-то разность результатов между итерациями ПРИРАВНЯЛ! к допустимой погрешности расчета. Должно быть так:
Delphi
1
if buf[i]<d then
Добавлено через 1 час 58 минут
В общем, вот работающий код твоей программы. Еще несколько косяков пришлось исправить, но теперь работает.
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Spin;
 
type
  TForm1 = class(TForm)
    strngrd1: TStringGrid;
    strngrd2: TStringGrid;
    btn1: TButton;
    se1: TSpinEdit;
    btn2: TButton;
    btn3: TButton;
    edt1: TEdit;
    btn4: TButton;
    procedure btn1Click(Sender: TObject);
    procedure se1Change(Sender: TObject);
 
 
    procedure btn2Click(Sender: TObject);
    procedure btn3Click(Sender: TObject);
    procedure btn4Click(Sender: TObject);
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  x:array[1..6,1..6] of Real;
  a:array[1..6] of Real;
  s,n,m:Integer;
  d:Real;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.btn1Click(Sender: TObject);
var
  i, j: integer;
begin
 
  d:=strtofloat(edt1.Text);
  for i:=0 to n-1 do
  for j:=0 to m-1 do
  begin
    x[i+1,j+1]:=StrToFloat(strngrd1.cells[j,i]);
    strngrd2.cells[j,i]:=floattostr(x[i+1,j+1]);
  end;
end;
 
procedure TForm1.se1Change(Sender: TObject);
begin
  n:=se1.Value;
  m:=n+1;
  strngrd1.rowcount:=n;
  strngrd2.rowcount:=n;
  strngrd1.colcount:=n+1;
  strngrd2.colcount:=n+1;
end;
 
procedure TForm1.btn2Click(Sender: TObject);
var
  buf:Real;
  i, j: integer;
begin
  for i:=1 to n do
  begin
    buf:=x[i,i]*(-1);
    for j:=1 to m do
    begin
      x[i,j]:=x[i,j]/buf;
      if i=j then x[i,j]:=0;
      if j=m then x[i,j]:=x[i,j]*(-1);
      strngrd2.cells[j-1,i-1]:=floattostr(x[i,j]);
    end;
 
  end;
end;
 
procedure TForm1.btn3Click(Sender: TObject);
var
  buf,dif:array[1..6] of Real;
  f:Real;
  c:integer;
  i, j: integer;
begin
 
  for i:=1 to n do
    a[i]:=0;
 
  c:=0;
  f:=0;
 
  while c<n  do
  begin
    c:=0;
 
    for i:=1 to n do
    begin
      buf[i]:=a[i];
 
      f:=0;
      For j:=1 to n do
        f:=x[i,j]*a[j]+f;
 
      a[i]:=f+x[i,m];
    end;
 
    for i:=1 to n do
    begin
      dif[i]:=Abs(buf[i]-a[i]);
      if dif[i]<d then
        c:=c+1;
    end;
  end;
end;
 
procedure TForm1.btn4Click(Sender: TObject);
var
  i: integer;
begin
  for i:=0 to n-1 do
    strngrd2.cells[i,0]:=floattostr(a[i+1]);
end;
 
end.
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
24.04.2012, 17:40  [ТС]
WoodHead, Благодарю .Завтра затестирую

if buf[i]<=d then лучше уж так наверное .
А где ты там еще ошибки нашел?Мне просто важно понять,где я ошибся .
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
25.04.2012, 00:03
Цитата Сообщение от iluxa1810 Посмотреть сообщение
[b]
А где ты там еще ошибки нашел?Мне просто важно понять,где я ошибся .
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
procedure TForm1.btn3Click(Sender: TObject);
var
  buf,dif:array[1..6] of Real;
  f:Real;
  c:integer;
  i, j: integer;
begin
 
  for i:=1 to n do
    a[i]:=0;
 
// Переменные c и f не инициализировал до цикла while
// В принципе, не критично, но все же Delphi выдавал предупреждение.
// к ошибкам в программе это не приводило,т.к. их обнулял сама Дельфи.
// на всякий случай я добавил их инициализацию
  c:=0;
  f:=0;
 
  while c<n  do
  begin
    c:=0;
 
    for i:=1 to n do
    begin
      // ВАЖНО, чтобы присваивание buf[i]:=a[i]; было на этом месте, иначе алгоритм работает        
      //неправильно. Если так не сделать, то у тебя в переменной buf перемешиваются значения
      // текущей и предыдущей итерации
      buf[i]:=a[i];
      
      // Одна из критических ошибок: ты перед циклом f не обнулял, 
      // а я обнулил
      f:=0;
      For j:=1 to n do
      // у тебя  buf[i]:=a[i]; находилось здесь, но оно здесь быть не должно
        f:=x[i,j]*a[j]+f;
 
      a[i]:=f+x[i,m];
    end;
 
    for i:=1 to n do
    begin
      // у тебя было почему-то buf[i]:=Abs(buf[i]-a[i]);
      // хотя смысл переменной buf сразу поменялся.
      // изначально по твоему замыслу buf - это результаты расчетов 
      //неизвестных по предыдущей итерации,
      // а потом - раз, и уже стала хранить разность результатов двух итераций. Это неправильно.
      // поэтому я ввел дополнительную переменную dif
      dif[i]:=Abs(buf[i]-a[i]);
      if dif[i]<d then
        c:=c+1;
    end;
  end;
end;
И еще обрати внимание, что все переменные для счетчиков (это я о i и j) я сделал локальными, а не глобальными, как у тебя.
В принципе, в данном случае было не критично, но Дельфи советовал их все-таки сделать локальными.
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
25.04.2012, 15:25  [ТС]
Все работает отлично,еще раз спасибо за помощь!
Delphi
1
2
3
4
5
6
7
8
9
{$I-}
d:=strtofloat(edt1.Text);
{$I+}
error:=IOResult;
If error<>0 then
begin
  ShowMessage('Âû çàáûëè óêàçàòü òî÷íîñòü');
  d:=0;
end;
Еще вот пытаюсь сделать обработку ошибки,что бы если точность не ввоили программа не крашилась... Но все равно ошибка вылетает .
Еще вопрос,как сделать кнопку сброса данных во всей программе?Допустим после подсчета,надо еще раз что-то подсчитать
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
25.04.2012, 15:26
Цитата Сообщение от iluxa1810 Посмотреть сообщение
Все равно почему-то 0 выводятся вместо ответов...
Ну что я могу сказать, кроме классического: "Ничего не знаю, у меня все работает"?

Цитата Сообщение от iluxa1810 Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
{$I-}
d:=strtofloat(edt1.Text);
{$I+}
error:=IOResult;
If error<>0 then
begin
  ShowMessage('Âû çàáûëè óêàçàòü òî÷íîñòü');
  d:=0;
end;
Еще вот пытаюсь сделать обработку ошибки,что бы если точность не ввоили программа не крашилась... Но все равно ошибка вылетает .
Я в ключах не силен. Может, лучше попробовать так?
Delphi
1
2
3
4
5
try
  StrToInt(Edit1.Text);
except
  ShowMessage('Че за фигню вводите?');
end;
Цитата Сообщение от iluxa1810 Посмотреть сообщение
А вот .Ответы вывелись(Забыл присвоить 0 к С=> Рандомное число присваивалось и цикл While сразу завершался...)
Только вот правильные они или нет?)(Вводил со своих фоток.)
-1,5 -0,168 0
Ну, программу надо тестировать на заранее решенных примерах.
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
25.04.2012, 15:32  [ТС]
WoodHead, А как очистить всю программу от веденных данных или перезапустить ее кнопкой?
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
25.04.2012, 15:41
Цитата Сообщение от iluxa1810 Посмотреть сообщение
WoodHead, А как очистить всю программу от веденных данных или перезапустить ее кнопкой?
В коде предусматривается обнуление переменных. Так что можно на кнопки тыкать слева направо, все-равно все будет работать. Ну, и понятие "вся программа" некорректное. Есть понятие "таблица", "переменная", "поле ввода". Мысль понятна?
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
25.04.2012, 15:50  [ТС]
WoodHead,
Да,пожалуй сделаю кнопку,которая присваивает стринггридам пустые значения .

Добавлено через 5 минут
Еще такой вопрос,к примеру если вводить такую матрицу:
123
456 ,то при нажатии на кнопку выполнить выдает ошибку с плавающий точкой .В чем может быть проблема?
0
105 / 104 / 29
Регистрация: 15.01.2011
Сообщений: 515
25.04.2012, 16:01
Цитата Сообщение от iluxa1810 Посмотреть сообщение
WoodHead,
Да,пожалуй сделаю кнопку,которая присваивает стринггридам пустые значения .
Не многовато ли кнопок? ;-)
Цитата Сообщение от iluxa1810 Посмотреть сообщение
Еще такой вопрос,к примеру если вводить такую матрицу:
123
456 ,то при нажатии на кнопку выполнить выдает ошибку с плавающий точкой .В чем может быть проблема?
Я понял. Это неправильные пчелы, поэтому они делают неправильный мед.(с) Винни-Пух

Я ранее давал ссылку почитать про признак сходимости, так вот, самое время с ней ознакомиться.
Если вкратце: не всякую матрицу СЛАУ можно посчитать методом простых итераций (или методом улучшенных итераций). Итерационный процесс может зациклиться. Или, если СЛАУ не имеет решения, то итерационный процесс расходится, что приведет к увеличению значений переменных. А как помним, их величина ограничена типом Real. Если число превысит допустимое для этого типа, то появится сообщение об ошибке.
1
13 / 13 / 11
Регистрация: 03.09.2011
Сообщений: 1,026
25.04.2012, 17:05  [ТС]
WoodHead, Ну ладно.Главное что хоть что-то считает правильно )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.04.2012, 17:05
Помогаю со студенческими работами здесь

Решение СЛАУ методом Гусса
не работает,помогите пожалуйста. unit Unit4; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils,...

Решение СЛАУ методом ЛУ разложения
Реализация алгоритма на Delphi. не в формах.Решение СЛАУ методом LU разложения... помогите пожалуйста , в пятницу нужно сдать...(

Решение СЛАУ методом Гаусса
Ребят, помогите пожалуйста написать программу. Я просто действительно не догоняю что тут нужно делать. Видимо программирование только для...

решение слау методом крамера
Здравствуйте, задали курсач &quot;решение слау методом крамера&quot; нужно написать в консольном для начала режиме программу для этого метода , есть...

Решение СЛАУ методом LU разложения.
Просмотрите, пожалуйста, и укажите на ошибки.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru