20.10.2019, 10:31 [+3 UTC]
в нашей команде: 3 888 чел. | участники онлайн: 5 (рекорд: 21)

:: РЕГИСТРАЦИЯ

задать вопрос

все разделы

правила

новости

участники

доска почёта

форум

блоги

поиск

статистика

наш журнал

наши встречи

наша галерея

отзывы о нас

поддержка

руководство

Версия системы:
7.77 (31.05.2019)
JS-v.1.34 | CSS-v.3.35

Общие новости:
28.04.2019, 09:13

Форум:
11.10.2019, 14:47

Последний вопрос:
20.10.2019, 09:44
Всего: 150646

Последний ответ:
20.10.2019, 09:33
Всего: 259248

Последняя рассылка:
20.10.2019, 08:15

Писем в очереди:
0

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

РАЗДЕЛ • Pascal / Delphi / Lazarus

Создание программ на языках Pascal, Delphi и Lazarus.

[администратор рассылки: Зенченко Константин Николаевич (Старший модератор)]

Лучшие эксперты в этом разделе

zdwork
Статус: 6-й класс
Рейтинг: 868
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 234
puporev
Статус: Профессионал
Рейтинг: 80

Перейти к консультации №:
 

Консультация онлайн # 195739
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: mustang289 (Посетитель)
Отправлена: 27.05.2019, 23:51
Поступило ответов: 1

Здравствуйте! У меня возникли сложности с таким вопросом:
Решение системы линейных алгебраических уравнений
методом Гаусса
Матрица А коэффициентов системы-
1,53 1,61 1,43
2,35 2,31 2,07
3,83 3,73 3,45
Столбец свободных членов b-
-5,13
-3,69
-5,98
в Delphi

Состояние: Консультация закрыта

Здравствуйте, mustang289!

Код (Pascal) :: выделить код
const
  n=3;
type
  tMas=array[1..n,1..n+1]of real;
var
  a:array[1..n,1..n]of real;
  b:array[1..n]of real;
  t:tMas;
  i,j:integer;
procedure Gaus(var a:tMas;b,c:integer);
  var
    d,e:integer;
  begin
    if b<=c then
      begin
        e:=b;
        while e<=c do
          begin
            d:=c+1;
            while b<=d do
              begin
                a[e,d]:=a[e,d]/a[e,b];
                dec(d);
              end;
            inc(e);
          end;
        e:=b+1;
        while e<=c do
          begin
            for d:=b to c+1 do
              a[e,d]:=a[e,d]-a[b,d];
            inc(e);
          end;
        Gaus(a,b+1,c);
        a[b,b]:=a[b,4];
        e:=c;
        while b<e do
          begin
            a[b,b]:=a[b,b]-a[e,e]*a[b,e];
            dec(e);
          end;
      end;
  end;
begin
  for i:=1 to n do
    begin
      for j:=1 to n do
        begin
          write('a[',i,',',j,']:=');
          readln(a[i,j]);
        end;
      write('b[',i,']:=');
      readln(b[i]);
    end;
{  a[1,1]:=1.53;a[1,2]:=1.61;a[1,3]:=1.43;b[1]:=-5.13;
  a[2,1]:=2.35;a[2,2]:=2.31;a[2,3]:=2.07;b[2]:=-3.69;
  a[3,1]:=3.83;a[3,2]:=3.73;a[3,3]:=3.45;b[3]:=-5.98;}
  for i:=1 to n do
    begin
      for j:=1 to n do
        t[i,j]:=a[i,j];
      t[i,4]:=b[i];
    end;
  writeln('extenge matrix:');
  for i:=1 to n do
    begin
      for j:=1 to n+1 do
        write(t[i,j]:10:5);
      writeln;
    end;
  Gaus(t,1,n);
  writeln('roots:');
  for i:=1 to n do
    write(t[i,i]:10:5);
  writeln;
  writeln('check:');
  for i:=1 to n do
    begin
      t[i,4]:=0;
      for j:=1 to n do
        begin
          t[i,4]:=t[i,4]+a[i,j]*t[j,j];
          write(a[i,j]*t[j,j]:10:5);
        end;
      writeln(t[i,4]:10:5,' = ',b[i]:10:5);
    end;
  readln;
end.

Удачи!


Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 06.06.2019, 18:59

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 195739

Зенченко Константин Николаевич
Старший модератор

ID: 31795

# 1

= общий = | 31.05.2019, 23:00 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер
mustang289:

© Цитата: mustang289
в Delphi


Код написаный под PASCAL, глотают ВСЕ его потомки. Даже игрушка Pascal.ABC.
smile

Правда иногда нужно указывать, что это { $APPTYPE CONSOLE }

Вот с визуаоьной частью, сложнее, тут A-возможностей ввода размера матрицы, от элементпрных:
Код (Pascal) :: выделить код
   RadioButton1: TRadioButton;
    ListBox1: TListBox;
    ComboBox1: TComboBox;
    MainMenu1: TMainMenu;

В-возможностей ввода коэфицихнтов при переменных:
Код (Pascal) :: выделить код
StringGrid1: TStringGrid;


до крутого Edit1: TEdit;, где Вы пишите "a + 2b = z | a + 4c + 2d = y | . . . | 6b + e = r ", и нажимаете <Enter>, программа сама посчитает количество переменных, создаст матрицу нужного размера, раставит коэфициэнты в нужных местах, выделит свободные члены, и посчитает результат.

С выводом, тоже можно свободно дойти до Z
Итого количество визуальных возможностей ввода-вывода = A*B*. . . *Y*Z.

Опредилитесь со своим заданием. Delphi, на столько многогранен, что возможно очень большое количество решений, и фантазировать нашим экспертам нет смысла.
smile
Штатный прорицатель, не помню, толи пропил, толи разбил, толи продал, толи потерял , свой "магический шар"- короче нет его, и Ваши мысли нащи эксперты узнать не могут.
smile
Но как бы Вы не крутились и не фантазировали, подпрограмма GAUS, или в Вашем другом вопросе CHOLETSY, останутся не изменными Во всех вариантах решения.
smile

-----
Последнее редактирование 31.05.2019, 23:04 Зенченко Константин Николаевич (Старший модератор)

=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.15759 сек.

© 2001-2019, Портал RFPRO.RU, Россия
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.77 от 31.05.2019
Версия JS: 1.34 | Версия CSS: 3.35