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

Возвращаемое значение функции 'diagonal' не определено

12.03.2018, 17:47. Показов 6761. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.

Возвращаемое значение функции 'diagonal' не определено - Что это значит?

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
program lr5;
 
type
  CMatr = array [1..10, 1..15] of real;
  DMatr = array [1..10, 1..15] of real;
  SMatr = array [1..10, 1..15] of real;
 
var
  n, m: byte;
  C: CMatr;
  D: DMatr;
  Sum: SMatr;
  f: text;
 
//Сложение матриц
procedure plus(Sum: SMatr; C: CMatr; D: DMatr; n,m: byte);
begin
  for var i: byte := 1 to n do 
  begin
    for j: byte := 1 to m do  
    begin
      Sum[i, j] := C[i, j] + D[i, j];
      write(Sum[i, j]:12:3);
    end;
    writeln;
  end;
  
end;
 
function diagonal(Sum: SMatr; C: CMatr; D: DMatr; n: byte): real;
  begin
  for var i: byte := 1 to n-1 do 
  begin
    for j: byte := i+1 to n do  
    begin
      Sum[i, j] := C[i, j] + D[i, j];
      if Sum[i,j]< Sum[1,2] then
  writeln('Минимальный элемент выше главной = ',Sum[i, j]);
  readln;
    end;
    writeln;
  end;
  end;
 
begin
  
  //Ввод матрицы с клавиатуры
  write('Введите количество строк (не более 10), n='); 
  read(n); 
  write('Введите количество столбцов (не более 15), m='); 
  read(m); 
  writeln('Введите элементы матрицы'); 
  for var i : byte := 1 to n do  
    for var j: byte := 1 to m do  
      read(C[i, j]); { ввод элементов по строкам } 
  writeln('Матрица с клавиатуры:'); 
  for var i: byte := 1 to n do 
  begin
    for var j: byte := 1 to m do  
      write(C[i, j]:12:3);  
    writeln;  
  end;
  
  //Чтение матрицы из файла - matrix.txt
  begin
    
    
    Assign(f, 'matrix.txt');
    Reset(f);
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        read(f, D[i, j]); 
    end;
    
    writeln('Матрица из файла:');
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        write(D[i, j]:12:3);  
      writeln; 
    end;
    
    close(f);
    
  end;
  
  writeln('Сумма матриц:');
  plus(Sum, C, D, n, m, f);
  
  diagonal(Sum, C, D, n);
  
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.03.2018, 17:47
Ответы с готовыми решениями:

Вывести сообщение , что значение функции не определено при x = -1.
Как сделать так ,чтобы программа выводила сообщение , что значение функции не определено при x = -1? program lab1; const min=-9; ...

Возвращаемое значение функции
Добрый день. Есть функция: TextString InfoBox::name(unsigned int i) const { if(i&lt;this-&gt;count()) { TextLabel...

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

16
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,434
12.03.2018, 17:52
До diagonal и не должно дойти.

Описание процедуры:
Pascal
1
procedure plus(Sum: SMatr; C: CMatr; D: DMatr; n,m: byte);
Вызов:
Pascal
1
 plus(Sum, C, D, n, m, f);
Никаких вопросов не возникло?
0
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
12.03.2018, 23:59  [ТС]
Ну я убрал 'f', но ничего не изменилось.
А вообще можете подробнее объяснить, а то я не понимаю)
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
13.03.2018, 13:57
Лучший ответ Сообщение было отмечено koks_ikkkk как решение

Решение

Цитата Сообщение от koks_ikkkk Посмотреть сообщение
Возвращаемое значение функции 'diagonal' не определено - Что это значит?
Функция должна возвращать значение, в вашем случае -- типа Real, однако внутри функции вы забыли это сделать, поскольку отсутствует diagonal:=нечто, либо, если позволяет используемый диалект языка, Result:=нечто.

Добавлено через 1 минуту
Зачем передавать Sum, если ее значение в вызывающей программе не меняется?

Добавлено через 47 секунд
Зачем три одинаковых типа CMatr, DMatr, SMatr?
1
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
13.03.2018, 21:25  [ТС]
Объясните 2-е дополнение ваше, подробнее пожалуйста.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
13.03.2018, 21:36
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure test(a: Integer; var b: Integer);
begin
  a:=5; b:=5;
end;
var
  p, q: Integer;
begin
  { здесь p=0, q=0 }
  test(p,q);
  { здесь p=0, q=5 }
  WriteLn(p,' ',q);
end.
Ваша Sum -- это полный аналог a -- передача в процедуру копии переменной (передача по значению), изменения внутри процедуры не могут изменить оригинал переданной переменной, в отличие от передачи по ссылке (параметр b).

Так понятнее?
1
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
13.03.2018, 22:01  [ТС]
Не много.

Я всё сделал, у меня всё работает и не выдаёт ошибок.
Что ещё подправить?

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
program lr5;
 
type
  Matr = array [1..10, 1..15] of real;
 
var
  n, m: byte;
  A, D, Amount: Matr;
  f: text;
 
//Сложение матриц
procedure plus(var A, D, Amount: Matr; var n,m: byte);
begin
  writeln('Сумма матриц:');
  for var i: byte := 1 to n do 
  begin
    for j: byte := 1 to m do  
    begin
      Amount[i, j] := A[i, j] + D[i, j];
      write(Amount[i, j]:12:3);
    end;
    writeln;
  end;
  
end;
 
function diagonal(var A, D, Amount: Matr; var n,m: byte): Matr;
 
  begin
  for var i: byte := 1 to n-1 do 
  begin
    for j: byte := i+1 to n do  
    begin
      Amount[i, j] := A[i, j] + D[i, j];
      if Amount[i, j] < Amount[1, 2] then
      begin
  writeln('Минимальный элемент выше главной = ',Amount[i, j]);
  end;
  readln;
    end;
    writeln;
  end;
  end;
 
begin
  
  //Ввод матрицы с клавиатуры
  write('Введите количество строк (не более 10), n='); 
  read(n); 
  write('Введите количество столбцов (не более 15), m='); 
  read(m); 
  writeln('Введите элементы матрицы'); 
  for var i : byte := 1 to n do  
    for var j: byte := 1 to m do  
      read(A[i, j]); { ввод элементов по строкам } 
  writeln('Матрица с клавиатуры:'); 
  for var i: byte := 1 to n do 
  begin
    for var j: byte := 1 to m do  
      write(A[i, j]:12:3);  
    writeln;  
  end;
  
  //Чтение матрицы из файла - matrix.txt
  begin
    
    
    Assign(f, 'matrix.txt');
    Reset(f);
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        read(f, D[i, j]); 
    end;
    
    writeln('Матрица из файла:');
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        write(D[i, j]:12:3);  
      writeln; 
    end;
    
    close(f);
    
  end;
  
  plus(A, D, Amount, n,m);
  
  diagonal(A, D, Amount, n,m);
  
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
13.03.2018, 23:58
Цитата Сообщение от koks_ikkkk Посмотреть сообщение
Я всё сделал, у меня всё работает и не выдаёт ошибок.
Это безусловно, не значит, что их нет.

1) функция diagonal не возвращает значения по имени (если точнее -- возвращает некий бред)
2) зачем функции diagonal 2 матрицы -- совершенно непонятно
3) var параметром стоит объявить только изменяемую матрицу, остальным хватит const
4) стоит подумать над перераспределением обязанностей между подпрограммами.
1
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
14.03.2018, 00:09  [ТС]
Исправил 2 и 3 пункт, правильно?
Пункт 1 - как мне нужно сделать?
Пункт 4 - вообще не понял)))

Извините, если что, но попрошу продолжить помогать)))

Спасибо.

Исправления гляньте
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
program lr5;
 
type
  Matr = array [1..10, 1..15] of real;
 
var
  n, m: byte;
  A, D, Amount: Matr;
  f: text;
 
//Сложение матриц
procedure plus(var A, D, Amount: Matr; n, m: byte);
begin
  
  writeln('Сумма матриц:');
  for var i: byte := 1 to n do 
  begin
    for j: byte := 1 to m do  
    begin
      Amount[i, j] := A[i, j] + D[i, j];
      write(Amount[i, j]:12:3);
    end;
    writeln;
  end;
  
end;
 
//Нахождение мин. элемента над главной диагональю
function diagonal(var Amount: Matr; n, m: byte): Matr;
 
begin
  
  var min := Amount[1, 2];
  for var i: byte := 1 to n - 1 do 
  begin
    for var j: byte := i + 1 to n do  
    begin
      if Amount[i, j] < min then
        min := Amount[i, j];
      writeln('Минимальный элемент выше главной = ', min);
    end;
  end;
  
end;
 
begin
  
  //Ввод матрицы с клавиатуры
  write('Введите количество строк (не более 10), n='); 
  read(n); 
  write('Введите количество столбцов (не более 15), m='); 
  read(m); 
  writeln('Введите элементы матрицы'); 
  for var i: byte := 1 to n do  
    for var j: byte := 1 to m do  
      read(A[i, j]); { ввод элементов по строкам } 
  writeln('Матрица с клавиатуры:'); 
  for var i: byte := 1 to n do 
  begin
    for var j: byte := 1 to m do  
      write(A[i, j]:12:3);  
    writeln;  
  end;
  
  //Чтение матрицы из файла - matrix.txt
  begin
    
    
    Assign(f, 'matrix.txt');
    Reset(f);
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        read(f, D[i, j]); 
    end;
    
    writeln('Матрица из файла:');
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        write(D[i, j]:12:3);  
      writeln; 
    end;
    
    close(f);
    
  end;
  
  plus(A, D, Amount, n, m);
  
  diagonal(Amount, n, m);
  
  
  
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
14.03.2018, 22:38
Лучший ответ Сообщение было отмечено koks_ikkkk как решение

Решение

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
const
  mMax=10; nMax=15; { размеры матрицы }
  WW=12; WD=3; { формат вывода }
type
  TMatrix = array [1..mMax,1..nMax] of Real;
 
procedure mSum(const a, b: TMatrix; var r: TMatrix; m, n: Integer);
begin
  for var i:=1 to m do for var j:=1 to n do r[i,j]:=a[i,j]+b[i,j];
end;
 
function mMinUR(const a: TMatrix; m, n: Integer): Real;
var t: Real;
begin
  t:=a[1,2];
  for var i:=1 to m-1 do for var j:=i+1 to n do if t>a[i,j] then t:=a[i,j];
  mMinUR:=t;
end;
 
procedure mRead(var a: TMatrix; m, n: Integer);
begin
  for var i:=1 to m do for var j:=1 to n do Read(a[i,j]);  
end;
 
procedure mWrite(const s: String; const a: TMatrix; m, n: Integer);
begin
  if s<>'' then WriteLn(s);
  for var i:=1 to m do begin
    for var j:=1 to n do Write(' ',a[i,j]:WW-1:WD); WriteLn;
  end;
end;
 
var
  a, b, s: TMatrix;
  mx: Real;
  m, n: Integer;
begin
  repeat
    Write('Количество строк [1..',mMax,'] и столбцов [1..',nMax,']: ');
    Read(m,n);
  until (m in [1..mMax]) and (n in [1..nMax]);
  Write('A (',m,'x',n,'): '); mRead(a,m,n);
 
  Assign(input,'matrix.txt'); Reset(input);
  mRead(b,m,n);
  Close(input);
  Assign(input,''); Reset(input);
 
  mSum(a,b,r,m,n);
  mWrite('A =',a,m,n);
  mWrite('B =',b,m,n);
  mWrite('A+B =',r,m,n);
  WriteLn('Max над главной диагональю: ',mMinUR(r,m,n):0:WD);
end.
Добавлено через 8 минут
Было б разумнее в matrix.txt хранить и размерность, например,
Code
1
2
3
2 3
1 2 3
4 5 6
Тогда можно было бы читать эту матрицу первой, с клавиатуры запрашивать только новую матрицу уже известного размера:
Pascal
37
38
39
40
41
42
43
44
45
46
47
48
begin
  Assign(input,'matrix.txt'); Reset(input);
  Read(m,n);
  if (m>mMax) or (n>nMax) then begin
    WriteLn('matrix.txt: Слишком большая матрица (',m,'x',n,'), max размер: (',mMax,'x',nMax,')');
    Halt;
  end;
  mRead(b,m,n);
  Close(input);
  Assign(input,''); Reset(input);
  Write('A (',m,'x',n,'): '); mRead(a,m,n);
  { ... }
Добавлено через 13 часов 42 минуты
По поводу вывода результата в файл:
Pascal
52
53
54
55
56
57
  WriteLn('Результаты сохранены в файл "result.txt"');
  Assign(output,'result.txt'); Rewrite(output);
  mWrite('A+B =',r,m,n);
  WriteLn('Max над главной диагональю: ',mMinUR(r,m,n):0:WD);
  Close(output);
end.
1
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
14.03.2018, 23:21  [ТС]
Не выводит он в файл...

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
101
102
103
program lr5;
 
type
  Matr = array [1..10, 1..15] of real;
 
var
  n, m: byte;
  A, D, Amount: Matr;
  f: text;
 
//Сложение матриц
procedure plus(var A, D, Amount: Matr; n, m: byte);
begin
  
  writeln('Сумма матриц:');
  for var i: byte := 1 to n do 
  begin
    for j: byte := 1 to m do  
    begin
      Amount[i, j] := A[i, j] + D[i, j];
      write(Amount[i, j]:12:3);
    end;
    writeln;
  end;
  
end;
 
//Нахождение мин. элемента над главной диагональю
function diagonal(var Amount: Matr; n, m: byte; f: text): real;
 
begin
  
  var min := Amount[1, 2];
  for var i: byte := 1 to n do 
  
  begin
  
    for var j: byte := i + 1 to m do  
    begin
      if min > Amount[i, j] then
       min := Amount[i,j];
    end;
   
  end;
  diagonal := min;
  
end;
 
begin
  
  //Ввод матрицы с клавиатуры
  write('Введите количество строк (не более 10), n='); 
  read(n); 
  write('Введите количество столбцов (не более 15), m='); 
  read(m); 
  writeln('Введите элементы матрицы'); 
  for var i: byte := 1 to n do  
    for var j: byte := 1 to m do  
      read(A[i, j]); { ввод элементов по строкам } 
  writeln('Матрица с клавиатуры:'); 
  for var i: byte := 1 to n do 
  begin
    for var j: byte := 1 to m do  
      write(A[i, j]:12:3);  
    writeln;  
  end;
  
  //Чтение матрицы из файла - matrix.txt
  begin
    
    
    Assign(f, 'matrix.txt');
    Reset(f);
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        read(f, D[i, j]); 
    end;
    
    writeln('Матрица из файла:');
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        write(D[i, j]:12:3);  
      writeln; 
    end;
    
    close(f);
    
  end;
  
  plus(A, D, Amount, n, m);
  diagonal(Amount, n, m, f);
  
    WriteLn('Результаты сохранены в файл "result.txt"');
  Assign(f,'result.txt'); Rewrite(f);
  plus(A, D, Amount, n, m);
  WriteLn('Max над главной диагональю: ',diagonal(Amount, n, m, f));
  Close(f);
  
end.
0
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
14.03.2018, 23:28  [ТС]
Всё выводит, но выглядит страшно...

Вложение посмотрите.
Миниатюры
Возвращаемое значение функции 'diagonal' не определено  
0
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
14.03.2018, 23:40  [ТС]
Как сделать, чтобы в файле выглядело также как в окне компилятора?
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
101
102
103
104
105
106
107
108
109
program lr5;
 
type
  Matr = array [1..10, 1..15] of real;
 
var
  n, m: byte;
  A, D, Amount: Matr;
  f: text;
 
//Сложение матриц
procedure plus(var A, D, Amount: Matr; n, m: byte);
begin
  
  writeln('Сумма матриц:');
  for var i: byte := 1 to n do 
  begin
    for j: byte := 1 to m do  
    begin
      Amount[i, j] := A[i, j] + D[i, j];
      write(Amount[i, j]:12:3);
    end;
    writeln;
  end;
  
end;
 
//Нахождение мин. элемента над главной диагональю
function diagonal(var Amount: Matr; n, m: byte; f: text): real;
 
begin
  
  var min := Amount[1, 2];
  for var i: byte := 1 to n do 
  
  begin
  
    for var j: byte := i + 1 to m do  
    begin
      if min > Amount[i, j] then
       min := Amount[i,j];
    end;
   
  end;
  diagonal := min;
  
end;
 
begin
  
  //Ввод матрицы с клавиатуры
  write('Введите количество строк (не более 10), n='); 
  read(n); 
  write('Введите количество столбцов (не более 15), m='); 
  read(m); 
  writeln('Введите элементы матрицы'); 
  for var i: byte := 1 to n do  
    for var j: byte := 1 to m do  
      read(A[i, j]); { ввод элементов по строкам } 
  writeln('Матрица с клавиатуры:'); 
  for var i: byte := 1 to n do 
  begin
    for var j: byte := 1 to m do  
      write(A[i, j]:12:3);  
    writeln;  
  end;
  
  //Чтение матрицы из файла - matrix.txt
  begin
    
    
    Assign(f, 'matrix.txt');
    Reset(f);
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        read(f, D[i, j]); 
    end;
    
    writeln('Матрица из файла:');
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        write(D[i, j]:12:3);  
      writeln; 
    end;
    
    close(f);
    
  end;
  
  plus(A, D, Amount, n, m);
  diagonal(Amount, n, m, f);
  
    WriteLn('Результаты сохранены в файл "result.txt"');
  Assign(f,'result.txt'); Rewrite(f);
  for var x: byte := 1 to n do
  begin
  for var y: byte := 1 to m do
  begin
  WriteLn(f,Amount[x,y]:12:3);
  end;
  end;
  WriteLn(f, 'Min над главной диагональю: ',diagonal(Amount, n, m, f));
  Close(f);
  
end.
Миниатюры
Возвращаемое значение функции 'diagonal' не определено   Возвращаемое значение функции 'diagonal' не определено  
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
14.03.2018, 23:43
koks_ikkkk,
Судя по выводу у вас там где-то вместо Write(a[i,j]) написано Write(a[i])...
0
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
14.03.2018, 23:48  [ТС]
Да не, вроде всё с двумя индексами.

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
101
102
103
104
105
106
107
108
109
program lr5;
 
type
  Matr = array [1..10, 1..15] of real;
 
var
  n, m: byte;
  A, D, Amount: Matr;
  f: text;
 
//Сложение матриц
procedure plus(var A, D, Amount: Matr; n, m: byte);
begin
  
  writeln('Сумма матриц:');
  for var i: byte := 1 to n do 
  begin
    for j: byte := 1 to m do  
    begin
      Amount[i, j] := A[i, j] + D[i, j];
      write(Amount[i, j]:12:3);
    end;
    writeln;
  end;
  
end;
 
//Нахождение мин. элемента над главной диагональю
function diagonal(var Amount: Matr; n, m: byte; f: text): real;
 
begin
  
  var min := Amount[1, 2];
  for var i: byte := 1 to n do 
  
  begin
  
    for var j: byte := i + 1 to m do  
    begin
      if min > Amount[i, j] then
       min := Amount[i,j];
    end;
   
  end;
  diagonal := min;
  
end;
 
begin
  
  //Ввод матрицы с клавиатуры
  write('Введите количество строк (не более 10), n='); 
  read(n); 
  write('Введите количество столбцов (не более 15), m='); 
  read(m); 
  writeln('Введите элементы матрицы'); 
  for var i: byte := 1 to n do  
    for var j: byte := 1 to m do  
      read(A[i, j]); { ввод элементов по строкам } 
  writeln('Матрица с клавиатуры:'); 
  for var i: byte := 1 to n do 
  begin
    for var j: byte := 1 to m do  
      write(A[i, j]:12:3);  
    writeln;  
  end;
  
  //Чтение матрицы из файла - matrix.txt
  begin
    
    
    Assign(f, 'matrix.txt');
    Reset(f);
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        read(f, D[i, j]); 
    end;
    
    writeln('Матрица из файла:');
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        write(D[i, j]:12:3);  
      writeln; 
    end;
    
    close(f);
    
  end;
  
  plus(A, D, Amount, n, m);
  diagonal(Amount, n, m, f);
  
    WriteLn('Результаты сохранены в файл "result.txt"');
  Assign(f,'result.txt'); Rewrite(f);
  for var x: byte := 1 to n do
  begin
  for var y: byte := 1 to m do
  begin
  WriteLn(f,Amount[x,y]:12:3);
  end;
  end;
  WriteLn(f, 'Min над главной диагональю: ',diagonal(Amount, n, m, f));
  Close(f);
  
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
14.03.2018, 23:52
Ищите, у меня так:
Code
1
2
3
4
5
6
7
8
9
10
A =
       0.000       2.000       4.000
       6.000       8.000      10.000
B =
       1.000       2.000       3.000
       4.000       5.000       6.000
A+B =
       1.000       4.000       7.000
      10.000      13.000      16.000
Max над главной диагональю: 7.000
0
0 / 0 / 1
Регистрация: 12.03.2018
Сообщений: 331
15.03.2018, 00:02  [ТС]
Так у меня свой код, я не стал ваш копировать.

Добавлено через 6 минут
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
101
102
103
104
105
106
107
108
109
program lr5;
 
type
  Matr = array [1..10, 1..15] of real;
 
var
  n, m: byte;
  A, D, Amount: Matr;
  f: text;
 
//Сложение матриц
procedure plus(var A, D, Amount: Matr; n, m: byte);
begin
  
  writeln('Сумма матриц:');
  for var i: byte := 1 to n do 
  begin
    for j: byte := 1 to m do  
    begin
      Amount[i, j] := A[i, j] + D[i, j];
      write(Amount[i, j]:12:3);
    end;
    writeln;
  end;
  
end;
 
//Нахождение мин. элемента над главной диагональю
function diagonal(var Amount: Matr; n, m: byte; f: text): real;
 
begin
  
  var min := Amount[1, 2];
  for var i: byte := 1 to n do 
  
  begin
  
    for var j: byte := i + 1 to m do  
    begin
      if min > Amount[i, j] then
       min := Amount[i,j];
    end;
   
  end;
  diagonal := min;
  
end;
 
begin
  
  //Ввод матрицы с клавиатуры
  write('Введите количество строк (не более 10), n='); 
  read(n); 
  write('Введите количество столбцов (не более 15), m='); 
  read(m); 
  writeln('Введите элементы матрицы'); 
  for var i: byte := 1 to n do  
    for var j: byte := 1 to m do  
      read(A[i, j]); { ввод элементов по строкам } 
  writeln('Матрица с клавиатуры:'); 
  for var i: byte := 1 to n do 
  begin
    for var j: byte := 1 to m do  
      write(A[i, j]:12:3);  
    writeln;  
  end;
  
  //Чтение матрицы из файла - matrix.txt
  begin
    
    
    Assign(f, 'matrix.txt');
    Reset(f);
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        read(f, D[i, j]); 
    end;
    
    writeln('Матрица из файла:');
    
    for var i: byte := 1 to n do 
    begin
      for var j: byte := 1 to m do  
        write(D[i, j]:12:3);  
      writeln; 
    end;
    
    close(f);
    
  end;
  
  plus(A, D, Amount, n, m);
  diagonal(Amount, n, m, f);
  
    WriteLn('Результаты сохранены в файл "result.txt"');
  Assign(f,'result.txt'); Rewrite(f);
  for var x: byte := 1 to n do
  begin
  for var y: byte := 1 to m do
  begin
  WriteLn(f,Amount[x,y]:12:3);
  end;
  end;
  WriteLn(f, 'Min над главной диагональю: ',diagonal(Amount, n, m, f));
  Close(f);
  
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2018, 00:02
Помогаю со студенческими работами здесь

Возвращаемое значение функции
Здарвствуйте. Моя задача состоит в написании следующей программы: вычислить среднее арифметическое значение элементов матрицы W(L,L),...

Возвращаемое значение функции
Нужно сделать так, чтобы функция вернула True, если число N есть в дереве поиска: class function Seach(tree: SeachingTree; v:...

Возвращаемое значение функции
array&amp; array::operator = (const array &amp;q) { if (this != &amp;q) { delete s; s=new int; for(len=0;len&lt;q.len;s=q.s,len++) ...

возвращаемое значение функции
у меня массив обьектов класса,и несколько функций которые добавляют ,удаляют ... и т.д. обьекты.эти функции возвращают этот массив,но когда...

Возвращаемое значение функции
void tokenize(string str_translate){ char char_translate; strcpy(char_translate, str_translate.c_str()); // string to char* ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru