0 / 0 / 1
Регистрация: 03.06.2013
Сообщений: 2
1

Программа для вычисления следа матриц (с промежуточными вычислениями)

03.06.2013, 15:35. Показов 2120. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех!

Пишу небольшую курсовую, никак не могу разобраться в ряде мелочей. Из меня не б-г весть какой программист, поэтому прошу сразу камнями не закидывать, наверняка в приведённом коде есть глупые и грубые ошибки (оттого-то он и не работает).

В частности, выдаётся ошибка вида "Can't evaluate constant expression" в каждой процедуре. Если с английского на русский я это могу перевести, то с русского на человеческий - уже нет. Какая constant, если оно var?

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

Итак, задание:
1. Сформировать произвольную квадратную матрицу A;
2. Вычесть из матрицы A единичную матрицу;
3. Сформировать диагональную матрицу C из элементов, которые определяются как суммы элементов столбцов полученной матрицы;
4. Найти след матрицы C.

Обязательное требование - максимальное использование подпрограмм (поэтому сделано так, как сделано... я бы их количество урезал, но раз такое требование, лучше перебдеть...), ввод данных из файла и вывод результатов в файл. До работы с файлами пока не дошёл: это, на мой взгляд, последнее, что надо дорабатывать в программе.

И вот как я это попытался реализовать с высоты своих скромных познаний:

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
program kursovaja;
 
uses crt;
 
var x,i,j:integer;
    s:real;
    M:array[1..x,1..x] of real;
    A:array[1..x,1..x] of integer;
 
(*Ввод размерности матриц*)
procedure EnterSize;
var x:integer;
begin
  repeat
  writeln('Введите размерность квадратной матрицы n=',x);
  readln(x);
  if x<1 then writeln('Ошибка ввода! Размерность квадратной матрицы может быть только целым числом, большим или равным 1. Повторите ввод');
  until x>=1;
end;
 
(*Ввод матрицы с клавиатуры*)
procedure EnterMatrix;
var x,i,j:integer;
    M:array[1..x,1..x] of real;
begin
writeln('Введите элементы квадратной матрицы');
for i:=1 to x do
for j:=1 to x do begin
                 writeln('M[',i,',',j,']=');
                 readln(M[i,j]);
                 end;
end;
 
(*Вывод матрицы на экран в "человекопонятном" виде*)
procedure ShowMatrix;
var x,i,j:integer;
    M:array[1..x,1..x] of real;
begin
for i:=1 to x do begin
                 for j:=1 to x do
                 write(M[i,j]:6:2);
                 writeln;
                 end;
end;
 
(*Вычитание из матрицы единичной матрицы*)
procedure SubtractMatrix;
var x,i:integer;
    M:array[1..x,1..x] of real;
    A:array[1..x,1..x] of integer;
begin
for i:=1 to x do
              A[i,i]:=1;
for i:=1 to x do begin
for j:=1 to x do
              M[i,i]:=M[i,i]-A[i,i];
end;
end;
 
(*Формирование диагональной матрицы из сумм элементов столбцов исх. матрицы*)
procedure FormMatrix;
var x,i,j:integer;
    M:array[1..x,1..x] of real;
begin
for i:=1 to x do
for j:=1 to x do begin
                 M[i,i]:=M[i,i]+M[i,j];
                 end;
end;
 
(*Нахождение следа полученной матрицы*)
procedure FindTrace;
var x,i:integer;
    M:array[1..x,1..x] of real;
begin
for i:=1 to x do begin
                 s:=0;
                 s:=s+M[i,i];
end;
writeln('След матрицы Tr(M)= ',s);
end;
 
 
(*Основной модуль программы*)
 
begin
 
clrscr;
 
EnterSize;
EnterMatrix;
ShowMatrix;
SubtractMatrix;
FormMatrix;
FindTrace;
 
readkey;
end.
Заранее весьма признателен за любую помощь. Работаю исключительно сам, пытаюсь дойти своим умом, но пока не вполне выходит.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.06.2013, 15:35
Ответы с готовыми решениями:

Функция для вычисления следа матрицы и произведения матриц
Дан ряд квадратных матриц A, {A}^{2}, ..., {A}^{N}. Причем N вводим сами. Надо вычислить след(сумма...

Промежуточными вычислениями и переменные
Доброго времени суток. Разбирая задачки, столкнулся я с непреодолимой преградой, гугл не помог, так...

Сделать так, чтобы вышла сумма с промежуточными вычислениями.
Помоги пожалуйста. никак не могу сделать так чтобы вышла сумма. Работаю с макткад14. спасибо...

Программа на VBA для вычисления матриц
Дана матрица: A11*X1+A12*X2+….+A1N*XN = B1 A21*X1+A22*X2+….+A2N*XN = B2 ...

1
0 / 0 / 1
Регистрация: 03.06.2013
Сообщений: 2
25.12.2013, 14:42  [ТС] 2
Несмотря на то, что за говнокод в первом сообщении мне безумно стыдно, проблему я решил (давненько уже) и решил выложить рабочую программу, которая у меня сохранилась.

Может, пригодится кому.

Вместо byte лучше использовать integer, это я так извращался, другим не рекомендую.

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
program kursov10;
 
uses crt;
 
const maxcount=255;
 
type matrix=array[1..maxcount,1..maxcount] of real;
 
var i,j,n:byte;
    A:matrix;
 
{Ввод размерности матрицы}
procedure MatrixSize (var x:byte);
begin
repeat
  writeln('Введите размерность матрицы N=');
  readln(x);
  if (x<1) then writeln('Ошибка! Размерность матрицы должна выражаться натуральным числом. Повторите ввод.');
until (x>=1);
end;
 
{Ввод матрицы с клавиатуры}
procedure EnterMatrix (x:byte; var M:matrix);
var i,j:byte;
begin
  writeln('Введите элементы квадратной матрицы:');
  for i:=1 to x do
  for j:=1 to x do begin
  writeln('M[',i,',',j,']=');
  readln(M[i,j]);
  end;
end;
 
{Вывод матрицы на экран}
procedure PrintMatrix (x:byte; var M:matrix);
var i,j:byte;
begin
  for i:=1 to x do begin
  for j:=1 to x do
  writeln('M[',i,',',j,']=',M[i,j]);
  end;
end;
 
{Вычитание единичной матрицы из исходной}
procedure SubtractMatrix (x:byte; var M:matrix);
var i,j:byte;
begin
  for i:=1 to x do
  for j:=1 to x do begin
                   if i=j then M[i,j]:=(M[i,j]-1);
                   end;
end;
 
{Формирование диагональной матрицы C по заданию}
procedure FormNewMatrix (x:byte; var M:matrix);
var i,j:byte;
    s:real;
begin
  for j:=1 to x do begin
                   s:=0;
  for i:=1 to x do begin
                   s:=s+M[i,j];
                   end;
  for i:=1 to x do begin
                   if j=i then M[i,j]:=S else M[i,j]:=0;
                   end;
                   end;
end;
 
{Нахождение следа матрицы}
procedure TraceMatrix (x:byte; var M:matrix);
var i,j:byte;
    tr:real;
begin
  tr:=0;
  for i:=1 to x do
  for j:=1 to x do begin
                   if i=j then Tr:=Tr+M[i,j];
                   end;
  writeln ('След матрицы Tr=',Tr);
end;
 
 
begin
clrscr;
 
MatrixSize(n);
EnterMatrix(n,A);
PrintMatrix(n,A);
SubtractMatrix(n,A);
writeln('После вычитания единичной матрицы исходная матрица А принимает следующий вид:');
PrintMatrix(n,A);
FormNewMatrix(n,A);
writeln('Так выглядит новая матрица С:');
PrintMatrix(n,A);
TraceMatrix(n,A);
 
readkey;
end.
0
25.12.2013, 14:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2013, 14:42
Помогаю со студенческими работами здесь

Программа для вычисления матриц с использованием класса
Пожалуйста, перепишите эту прогу, используя класс.:) #include &lt;iostream&gt; #include &lt;iomanip&gt; ...

Разработать подпрограмму для вычисления следа матрицы
Разработать подпрограмму для вычисления следа матрицы. Использовать разработанную подпрограмму для...

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru