Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 30

Нужно объединить две программы

22.10.2018, 16:54. Показов 1707. Ответов 2

Студворк — интернет-сервис помощи студентам
у меня снова проблемы, не смогла разобраться. тут помогали с двумя программами: (задание ниже)
1)
Pascal
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
const n=4; eps=1e-12;
type
  TFloat = Real;
  TVector = array [0..n-1] of TFloat;
  TMatrix = array [0..n-1] of TVector;
 
{ обратная матрица, определитель, решение СЛАУ
   методом элементарных преобразований Гаусса-Жордана }
function mInvGJ(var a: TMatrix; var b: TVector; var det: TFloat): Boolean;
var
  i, j, k: Integer; t: TFloat;
  e: TMatrix; v: TVector;
begin
  mInvGJ:=False; det:=1;
  for i:=0 to n-1 do for j:=0 to n-1 do e[i][j]:=0;
  for i:=0 to n-1 do e[i][i]:=1;
  for k:=0 to n-1 do begin
    j:=k; for i:=k+1 to n-1 do if Abs(a[j][k])<Abs(a[i][k]) then j:=i;
    if j>k then begin
     v:=a[j]; a[j]:=a[k]; a[k]:=v;
     v:=e[j]; e[j]:=e[k]; e[k]:=v;
     t:=b[j]; b[j]:=b[k]; b[k]:=t;
     det:=-det;
    end;
    t:=a[k][k];
    if Abs(t)<eps then begin
      det:=0; Exit;
    end;
    det:=det*t;            b[k]  :=b[k]  /t;
    for j:=n-1 downto 0 do e[k][j]:=e[k][j]/t;
    for j:=n-1 downto k do a[k][j]:=a[k][j]/t;
    for i:=0 to n-1 do if i<>k then begin
      t:=-a[i][k];       b[i]  :=b[i]  +t*b[k];
      for j:=k to n-1 do a[i][j]:=a[i][j]+t*a[k][j];
      for j:=0 to n-1 do e[i][j]:=e[i][j]+t*e[k][j];
    end;
  end;
  a:=e; mInvGJ:=True;
end;
 
procedure GetErr(const a: TMatrix; const b, x: TVector; var r: TVector);
var i, j: Integer; t: TFloat;
begin
  for i:=0 to n-1 do begin
    t:=-b[i]; for j:=0 to n-1 do t:=t+x[j]*a[i][j]; r[i]:=t;
  end;
end;
 
procedure mMul(const a, b: TMatrix; var r: TMatrix);
var i, j, k: Integer; t: TFloat;
begin
  for i:=0 to n-1 do for j:=0 to n-1 do begin
    t:=0; for k:=0 to n-1 do t:=t+a[i][k]*b[k][j]; r[i][j]:=t;
  end;
end;
 
procedure vWrite(const p: String; v: TVector; W, D: Integer);
var j: Integer;
begin
  if p<>'' then WriteLn(p);
  if W<0
  then for j:=0 to n-1 do Write(' ',v[j])
  else if D<0
  then for j:=0 to n-1 do Write(' ',v[j]:W)
  else for j:=0 to n-1 do Write(' ',v[j]:W:D);
  WriteLn;
end;
 
procedure mWrite(const p: String; const a: TMatrix; W, D: Integer);
var i, j: Integer;
begin
  WriteLn(p); for i:=0 to n-1 do vWrite('',a[i],W,D);
end;
 
const
  a: TMatrix = (
    ( 3.25, 1.54, 2.91, 5.43),
    ( 7.13, 8.21, 4.47,-2.11),
    ( 4.52, 6.73, 1.37,-9.89),
    (-6.34,-8.17,-10.2, 3.93));
  b: TVector = (
    4.14, 5.65, 2.92, 3.15);
  WW=10; DD=4;
var
  ai, e: TMatrix;
  x, r: TVector;
  det: TFloat;
begin
  mWrite('A =',a,WW,2);
  ai:=a; x:=b;
  if mInvGJ(ai,x,det) then begin
    GetErr(a,b,x,r);
    mMul(a,ai,e);
    WriteLn('| A | = ',det);
    vWrite('x   =',x,WW,DD);
    vWrite('err =',r,12,4);
    mWrite('A^-1 =',ai,WW,DD);
    mWrite('A * A^-1 = E:',e,6,4);
  end else WriteLn('Error');
end.

Результат работы
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
A =
       3.25       1.54       2.91       5.43
       7.13       8.21       4.47      -2.11
       4.52       6.73       1.37      -9.89
      -6.34      -8.17     -10.20       3.93
| A | = -419.22633975
x   =
     2.4424    -0.7654    -1.1601     0.1394
err =
       0.0000       0.0000       0.0000       0.0000
A^-1 =
     1.0014    -0.7177     0.7305     0.0693
    -0.9566     0.9130    -0.7072     0.0322
     0.0732    -0.1819     0.0176    -0.1545
    -0.1831     0.2681    -0.2461     0.0322
A * A^-1 = E:
 1.0000 0.0000 0.0000 0.0000
 0.0000 1.0000 0.0000 0.0000
 0.0000 0.0000 1.0000 0.0000
 0.0000 0.0000 0.0000 1.0000
2)
Pascal
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
const n=4; eps=1e-37;
type
  TMatrix = array [0..n-1,0..n-1] of Real;
  TVector = array [0..n-1] of Real;
  TELine =  array [0..n] of Real;
  TEMatrix = array [0..n-1] of TELine;
 
function Gauss(var a: TEMatrix; var det: Real; var x: TVector): Boolean;
var
  i, j, k: Integer;
  d: Real;
  t: TELine;
begin
  Gauss:=False;
  det:=1;
  for k:=0 to n-1 do begin
    j:=k; for i:=k+1 to n-1 do if Abs(a[j,k])<Abs(a[i,k]) then j:=i;
    if k<>j then begin t:=a[k]; a[k]:=a[j]; a[j]:=t; det:=-det; end;
    for i:=k+1 to n-1 do begin
      d:=a[i,k]/a[k,k];
      for j:=k to n do a[i,j]:=a[i,j]-d*a[k,j];
    end;
  end;
  for k:=0 to n-1 do det:=det*a[k,k];
  if Abs(det)<eps then Exit;
  for k:=n-1 downto 0 do begin
    for j:=k+1 to n-1 do a[k,n]:=a[k,n]-a[k,j]*x[j];
    x[k]:=a[k,n]/a[k,k];
  end;
  Gauss:=True;
end;
 
procedure Nev(const a: TMatrix; const b, x: TVector; var r: TVector);
var i, j: Integer; t: Real;
begin
  for i:=0 to n-1 do begin
    t:=-b[i]; for j:=0 to n-1 do t:=t+x[j]*a[i,j]; r[i]:=t;
  end;
end;
 
const
  b: TVector = (4.14, 5.65, 2.92, 3.15);
  c: TMatrix = (
    ( 3.25, 1.54, 2.91, 5.43),
    ( 7.13, 8.21, 4.47,-2.11), 
    ( 4.52, 6.73, 1.37,-9.89), 
    (-6.34,-8.17,-10.2, 3.93));
var
  a: TEMatrix; x, r: TVector;
  i, j: Integer; det: Real;
begin
  for i:=0 to n-1 do begin { расширенная матрица }
    for j:=0 to n-1 do a[i,j]:=c[i,j]; a[i,n]:=b[i];
  end;
  if Gauss(a,det,x) then begin
    Nev(c,b,x,r);
    for i:=0 to n-1 do begin
      for j:=0 to n do Write(' ',a[i,j]:6:2);
      WriteLn(' | ',x[i]:6:2,' | ',r[i]);
    end;
    WriteLn('Определитель: ',det:6:2);
  end else WriteLn('Бесконечное число решений');
end.
результат
Code
1
2
3
4
5
   7.13   8.21   4.47  -2.11  17.41 |   2.44 | 5.55111512312578E-16
   0.00  -2.20   0.87   6.39   1.69 |  -0.77 | 1.66533453693773E-15
   0.00   0.00  -6.57  -0.47   7.62 |  -1.16 | 1.77635683940025E-15
   0.00   0.00   0.00  -4.06  -0.57 |   0.14 | -1.66533453693773E-15
Определитель: -419.23
вот в чем вопрос: задание-с помощью прямого и обратного хода (Гаусс) ПО СТОЛБЦУ найти решение слау,вектор невязки,определитель, обратную матрицу и проверку обратной матрицы.
мне нужно вывести сначала матрицу по столбцу как в результате второй программы, потом уже решение определитель и т.д. как в первой. Пыталась как то сделать это, не получается вторую неделю
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2018, 16:54
Ответы с готовыми решениями:

Шифрование/дешифрование, объединить две программы
нужно обьединеть две программы чтобы они работали вместе вот код:1 программа- program Kriptograf; function Shifr ( Kod, K : string ):...

Нужно прокоментировать две программы
Прокоментируйте пожалуйста если можете программы...Просто надо сделать по такому же принципу программы, а сам текст программ не полностью...

нужно составить две программы
1. Составить программу для вычисления высоты треугольника, проведенной из вершины B, по формуле: h = 2 (p (pa) (pb) (pc)) ^1 / 2) / b,...

2
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
23.10.2018, 09:58
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Начало там:
Решение СЛУ с выбором главного элемента по столбцу (Python -> Pascal)

Там же было предложено разделить полный проход Гаусса-Жордана на нижний треугольник, верхний треугольник, диагональ, если это зачем-то было нужно.
1
1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 30
23.10.2018, 16:32  [ТС]
это да, все понятно, но нужно тогда еще вывести матрицу по столбцу, т.е.первый элемент 7,.. должен же быть..как во второй программе, а в первом выводится данная матрица
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.10.2018, 16:32
Помогаю со студенческими работами здесь

Две программы на for/while
Не могу решить две задачи: 1)В деревне Интернетовка все дома расположены вдоль одной улицы по одну сторону от нее. По другую сторону...

Объединить две программы в одну
В комментарии я кину обе программы. Знаю, просьба выглядит глупо, но это реально сложно. В первой программе я даже написал в фигурных...

Объединить две программы в одну
Есть два кода программ, которые необходимо объединить в один. В принципе у меня получилось, но для работы программы после объединения...

Объединить две задачи в одну, либо дописать второе условие в задачу
.блок-схему Добрый день , некак не могу сдать задачу , у него 2 условия , есть решеные условия, но отдельно друг от друга , и нужно бы их...

Объединить две упорядоченные последовательности в одну,используя представление последовательности чисел в виде списка
помогите написать программу на паскале абс.Используя представление последовательности чисел в виде линейного списка,напишите программу...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru