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

Дана матрица, заменить 1 столбец столбцом с минимальной суммой элементов

24.06.2014, 20:39. Показов 820. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Решил закодировать следующую задачу:
"дана матрица, заменить 1 столбец столбцом с минимальной суммой элементов, последний столбец заменить столбцом с максимальной суммой элементов".
Допустим матрицу я взял квадратную,6х6.
Решить задачу используя модули и текстовый вв\выв файлов.
Проблема в том,что при компиляции модулей,при использовании локальный формальных пар-ров в функциях выходит ошибка в строке:

Pascal
1
MIN:=g(SM)[1];
и
Pascal
1
MAX:=g(SM)[1];
код ошибки 122.
при дальнейшей компиляции в модуле с процедурами ошибка 26 в строках:
Pascal
1
2
B[i,nj1]:=A[i,MIN];
      B[i,nj2]:=A[i,MAX];
Так же не уверен в главной программе использующая эти модули.
Помоги разобраться.
Коды модулей и программы:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
UNIT E;
INTERFACE
TYPE matr=array [1..6,1..6] of real;
var A:matr;
    B:matr;
    MIN,MAX,SM:real;
    f1,f2:text;
IMPLEMENTATION
Begin
  ASSIGN(f1,'t.pas');
  RESET(f1);
  ASSIGN(f2,'c.pas');
  REWRITE(f2);
End.
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
UNIT FF;
INTERFACE
USES E;
  function MN(var A;n:integer):real;
  function MX(var A;n:integer):real;
IMPLEMENTATION
USES PP;
  function MN;
TYPE g=array [1..10922] of real;
VAR MIN,i:integer;
 
Begin
  MIN:=g(SM)[1];
  FOR j:=2 to n do
    begin
      IF MIN > g(SM)[j] then
        MIN:=g(SM)[j]
    end;
  MN:=MIN;
End;
function MX;
TYPE g=array [1..10922] of real;
VAR MAX,i:integer;
Begin
  MAX:=g(SM)[1];
  FOR j:=2 to n do
    begin
      IF MAX < g(SM)[j] then
        MAX:=g(SM)[j]
    end;
  MAX:=g(SM)[j];
END.
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
UNIT PP;
INTERFACE
USES E;
procedure SM(var A:matr;n,m:integer;var SM);
procedure NEW(var A:matr;n,nj1,nj2:integer;var B:matr);
IMPLEMENTATION
USES FF;
procedure SM;
TYPE mas=array [1..10922] of real;
Var i,j:integer;
Begin
  FOR j:=1 to n do
    begin
      mas(SM)[j]:=0;
      for i:=1 to m do
        mas(SM)[j]:=mas(SM)[j]+A[i,j]
    end;
ENd;
  procedure NEW;
var i:integer;
Begin
  FOR i:=1 to n do
    begin
      B[i,nj1]:=A[i,MIN];
      B[i,nj2]:=A[i,MAX];
    end;
end;
End.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PROGRAM MM;
USES E,FF,PP;
Begin
  for i:=1 to 6 do
    begin
      for j:=1 to 6 do
        read(f1,A[i,j]);
    end;
  NEW(var A:matr;n,nj1,nj2:integer;var B:matr);
  for i:=1 to 6 do
    begin
      for j:=1 to 6 do
        write(f2,B[i,j]);
    end;
  CLOSE(f1);
  CLOSE(f2);
END.
Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.06.2014, 20:39
Ответы с готовыми решениями:

Дана матрица, заменить 1 столбец столбцом с минимальной суммой элементов. Ошибки при компиляции
Добрый вечер. Решил закодировать следующую задачу: &quot;дана матрица, заменить 1 столбец столбцом с...

Двумерный массив: поменять местами столбец с минимальной суммой элементов столбца с первым столбцом массива
3. Дан двумерный массив размером n x m. Поменять местами столбец с минимальной суммой элементов...

Заменить все столбцы на столбец с минимальной суммой элементов
решите задачки на паскале: 1. Дана целочисленная прямоугольная таблица размером m×n. Заменить...

Дана Матрица Н(6,5). Найти столбец с минимальной суммой элементов
Дана Матрица Н(6,5). Найти столбец с минимальной суммой элементов Добавлено через 52 секунды не...

11
1647 / 1095 / 488
Регистрация: 17.07.2012
Сообщений: 5,356
25.06.2014, 01:04 2
Asignam, ИМХО, проще переписать. Тяжело разбирать чужой код, да еще и такой большой.
0
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 35
25.06.2014, 01:20  [ТС] 3
Я здесь использовал преобразование типов,в частности массив с регулируемым размером,если вы про это...
0
1647 / 1095 / 488
Регистрация: 17.07.2012
Сообщений: 5,356
25.06.2014, 01:22 4
Цитата Сообщение от Asignam Посмотреть сообщение
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PROGRAM MM;
USES E,FF,PP;
Begin
for i:=1 to 6 do
begin
for j:=1 to 6 do
read(f1,A[i,j]);
end;
NEW(var A:matr;n,nj1,nj2:integer;var B:matr);
for i:=1 to 6 do
begin
for j:=1 to 6 do
write(f2,B[i,j]);
end;
CLOSE(f1);
CLOSE(f2);
END.
Ну взять этот кусок.Что вот это?
Цитата Сообщение от Asignam Посмотреть сообщение
NEW(var A:matr;n,nj1,nj2:integer;var B:matr);
А это?
Цитата Сообщение от Asignam Посмотреть сообщение
MIN:=g(SM)[1];
Много непонятного...
0
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 35
25.06.2014, 01:36  [ТС] 5
NEW(var A:matr;n,nj1,nj2:integer;var B:matr);
вызов процедуры
входные фактические пар-ры var A:matr;n,nj1,nj2:integer;
где,А-исх матрица
n-кол-во эл-тов,nj1-номер стб,nj2-номер стб
прога расчитана на универсальное условие,то бишь я не привязывал 1 и последний(6) стб,при изменении условия,проще изменить границы вычисления.
var B:matr-выходной фактический пар-р,отвечает за вывод измененной матрицы А.
Далее,смотрим модуль ф-ций
MIN:=g(SM)[1];
минимальное значение-пер-ная
присваиваю первый эл-т регулируемого массива
тк g=array[1..10922] of real;
далее выглядит преобразование типов g(SM{одномерный массив из 1-ой процедуры}[1]{первый эл-т этого массива.}
0
1647 / 1095 / 488
Регистрация: 17.07.2012
Сообщений: 5,356
25.06.2014, 01:38 6
Цитата Сообщение от Asignam Посмотреть сообщение
вызов процедуры
Ну разве при вызове в параметрах пишут var?
0
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 35
25.06.2014, 01:46  [ТС] 7
нет не пишут,потому что пар-р значения.

Добавлено через 5 минут
А каков ваш вариант решение этой постановки задачи?
0
1647 / 1095 / 488
Регистрация: 17.07.2012
Сообщений: 5,356
25.06.2014, 01:49 8
Не знаю, сейчас лень решать. Может я не прав, но ИМХО слишком много кода. Во-первых почему не в одном модуле сделать все?Считать матрицу, сделать функции определения столбца с мин. и макс. суммой элементов и процедуры замены столбцов.
0
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 35
25.06.2014, 01:56  [ТС] 9
Метод нисходящей декомпозиции предполагает деление подзадач до базовый управляемых структур.
Будь моя воля,я сделал все в одном,но там,где я прогаю,другие правила(загоны).
0
1647 / 1095 / 488
Регистрация: 17.07.2012
Сообщений: 5,356
25.06.2014, 01:59 10
Asignam, хотите сказать заставили несколько модулей писать?
0
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 35
25.06.2014, 02:00  [ТС] 11
именно,в одном модуле все ф-ции,в другом-все процедуры,в третьем,обращение к файлам
0
1647 / 1095 / 488
Регистрация: 17.07.2012
Сообщений: 5,356
25.06.2014, 14:25 12
Ну вот смотрите. Мой код.
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
type matr=array[1..1000,1..1000] of Integer;
 
procedure ReadMatr(var a:matr;n,m:Integer);
var i,j:Integer;
begin
for i:=1 to n do 
 for j:=1 to m do
  Read(a[i,j]);
end;
 
procedure WriteMatr(a:matr;n,m:Integer);
var i,j:Integer;
begin
for i:=1 to n do 
 begin
  for j:=1 to m do Write(a[i,j]:4);
  Writeln;
 end;
end;
 
function sumst(a:matr;j,n:Integer):Integer;
var s,i:Integer;
begin
s:=0;
for i:=1 to n do s:=s+a[i,j];
sumst:=s;
end;
 
procedure minmax(a:matr;n,m:Integer;var maxj,minj:Integer);
var j,s,min,max:Integer;
begin
min:=sumst(a,1,n);
max:=sumst(a,1,n);
maxj:=1;
minj:=1;
for j:=2 to m do
 begin
  s:=sumst(a,j,n);
  if s<min then
   begin
    min:=s;
    minj:=j;
   end;
  if s>max then
   begin
    max:=s;
    maxj:=j;
   end;
 end;
end;
 
procedure change(var a:matr;j1,j2,n,m:Integer);
var i,t:Integer;
begin
for i:=1 to n do
 begin
  t:=a[i,j1];
  a[i,j1]:=a[i,j2];
  a[i,j2]:=t;
 end;
end;
 
 
var a:matr;
n,m,min,max:Integer;
begin
Assign(input,'in.txt');
Assign(output,'out.txt');
Reset(input);
Rewrite(output);
Readln(n,m);
ReadMatr(a,n,m);
minmax(a,n,m,max,min);
change(a,1,min,n,m);
change(a,m,max,n,m);
WriteMatr(a,n,m);
end.
0
25.06.2014, 14:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2014, 14:25
Помогаю со студенческими работами здесь

В целочисленной матрице поменять местами столбец с минимальной суммой со столбцом с максимальной суммой
Дана прямоугольная матрица nxm целых чисел (n,m&lt;10 – ввод с клавиатуры, значения элементов массива...

Заменить все столбцы на столбец с минимальной суммой элементов (Класс)
дана целочисленная прямоугольная таблица размером m*n. Заменить все столбцы на столбец с...

Заменить все столбцы таблицы на столбец с минимальной суммой элементов
Дана целочисленная прямоугольная таблица размером m×n. Заменить все столбцы на столбец с...

В матрице поменять местами столбец с минимальной суммой со столбцом с максимальной
Дана прямоугольная матрица n x m целых чисел. Поменять местами столбец с минимальной суммой со...

Дана прямоугольная матрица. Найти столбец с наибольшей суммой элементов
Дана прямоугольная матрица. Найти столбец с наибольшей суммой элементов. Помогите решить. Буду...

Дана прямоугольная матрица. Найти столбец с наибольшей суммой элементов
Дана прямоугольная матрица. Найти столбец с наибольшей суммой элементов.


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

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

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