Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
1 / 1 / 0
Регистрация: 24.05.2012
Сообщений: 24
1

Поменять столбец матрицы А с наибольшим значением со столбцом матрицы В с наименьшим значением

24.05.2012, 22:33. Показов 944. Ответов 7
Метки нет (Все метки)

Даны две целочисленные матрицы A и B размером M на N, все элементы которых различны. Поменять местами столбец матрицы А где расположен наибольший элемент матрицы А со столбцом матрицы В где расположен наименьший элемент матрицы B.

Я смог немного наваять, но не получилось сделать, чтоб элементы были различны. К тому же получилась одна матрица вместо двух, и похоже я поперепутывал ттолбцы и строки (

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
var a,b:array[1..50,1..50] of integer;
    m,n,i,j,imn,imx:byte;
    mn,mx,x:integer;
begin
randomize;
write('Количество строк m=');
readln(m);
write('Количество столбцов n=');
readln(n);
for i:=1 to m do
for j:=1 to n do
a[i,j]:=random(20);{заполняем матрицу элементами}
mn:=a[1,1];mx:=a[1,1];
imn:=1;imx:=1;
for i:=1 to m do
for j:=1 to n do
 begin
   if a[i,j]>mx then
   begin
    mx:=a[i,j];{находим максимальный}
    imx:=j;{столбец с ним}
   end;
 end;
 
 for i:=1 to m do
for j:=1 to n do
b[i,j]:=random(20);{заполняем матрицу элементами}
mn:=b[1,1];mx:=a[1,1];
imn:=1;imx:=1;
for i:=1 to m do
for j:=1 to n do
 begin
  if b[i,j]<mn then
   begin
    mn:=b[i,j];{находим минимальный}
    imn:=j;{столбец с ним}
   end;
 
 end;
 
 
writeln('Столбец с минимальным элементом=',imn,' мин=',mn);
writeln('Столбец с максимальным элементом=',imx,' макс=',mx);
 
writeln;
for j:=1 to m do
 begin
  for i:=1 to n do
  if j=imn then
   begin
   
    write(b[i,j]:4);
   end
  else if j=imx then
   begin
    
    write(a[i,j]:4);
   end
  else
   begin
    
    write(a[i,j]:4);
   end;
  writeln;
 end;
for i:=1 to n do{обмениваем элементы строки с мин с элементами строки с макс}
 begin
  x:=b[i,imn];
  b[i,imn]:=a[i,imx];
  a[i,imx]:=x;
 end;
 
writeln('Перестановка стролбцов:');
for i:=1 to m do
 begin
  for j:=1 to n do
  if i=imx then
   begin
   
    write(b[i,j]:4);
   end
  else if j=imn then
   begin
    
    write(b[i,j]:4);
   end
  else
   begin
    
    write(a[i,j]:4);
   end;
  writeln;
 end;
readln;
end.
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2012, 22:33
Ответы с готовыми решениями:

Поменять местами столбец с наибольшим значением со столбцом с наименьшим значением
в массиве В(3,3) поменять местами столбец , содержащий наиб. значение со столбцом, содержащим наим....

Поменять местами строки матрицы с наибольшим и с наименьшим значением
Есть задание: Задан двухмерный массив вещественных чисел размерности 3х3. Найти номер строки и...

Поменять местами строку с наибольшим значением со строкой с наименьшим значением
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;time.h&gt; using namespace std; void main() ...

В матрице поменять местами строки, содержащие элемент с наибольшим значением и с наименьшим значением
Здравствуйте Нужна помощь с задачей( код с#): В данной двумерной матрице поменять местами строку,...

7
32 / 32 / 25
Регистрация: 06.01.2012
Сообщений: 142
25.05.2012, 01:11 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
uses crt;
const m=3;
      n=4;
var a : array[1..m, 1..n] of integer;
    i,j,max,min,q : byte;
    nom1,nom2 : byte;
begin
  randomize;
  writeln('Исходная матрица');
  for i:=1 to m do begin
    for j:=1 to n do begin
      a[i,j]:=random(10)+1;
      write(a[i,j]:3);
    end;
    writeln;
  end;
  max:=0; min:=a[1,1];
  for i:=1 to m do begin
    for j:=1 to n do begin
      if a[i,j]>=max then begin
        max:=a[i,j];
        nom1:=j;
      end;
      if a[i,j]<=min then begin
       nom2:=j;
       min:=a[i,j];
      end;
    end;
  end;
  if nom1=nom2 then writeln('Максимальный и минимальный элемент находятся в 1-ом столбце')
  else begin
    for i:=1 to m do begin
      for j:=1 to n do begin
        if nom1=j then begin
          q:=a[i,j];
          a[i,j]:=a[i,nom2];
          a[i,nom2]:=q;
        end;
      end;
    end;
    writeln;
    writeln('Обработанная матрица');
    for i:=1 to m do begin
      for j:=1 to n do begin
        write(a[i,j]:3);
      end;
      writeln;
    end;
  end;
end.
Добавлено через 2 минуты
Извиняюсь, за своё невнимание, неправильно прочел задание, я сделал для 1й матрицы. Еще раз извиняюсь.

Добавлено через 13 минут
Ошибку исправил, работает именно для вашей задачи.
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
uses crt;
const m=3;
      n=4;
var a,b : array[1..m, 1..n] of integer;
    i,j,max,min,q : byte;
    nom1,nom2 : byte;
begin
  randomize;
  writeln('Исходная матрица №1');
  for i:=1 to m do begin
    for j:=1 to n do begin
      a[i,j]:=random(10)+1;
      write(a[i,j]:3);
    end;
    writeln;
  end;
  writeln('Исходная матрица №2');
  for i:=1 to m do begin
    for j:=1 to n do begin
      b[i,j]:=random(10)+1;
      write(b[i,j]:3);
    end;
    writeln;
  end;
  max:=0; min:=b[1,1];
  for i:=1 to m do begin
    for j:=1 to n do begin
      if a[i,j]>=max then begin
        max:=a[i,j];
        nom1:=j;
      end;
      if b[i,j]<=min then begin
       nom2:=j;
       min:=b[i,j];
      end;
    end;
  end;
    for i:=1 to m do begin
      for j:=1 to n do begin
        if nom1=j then begin
          q:=a[i,j];
          a[i,j]:=b[i,nom2];
          b[i,nom2]:=q;
        end;
      end;
    end;
    writeln;
    writeln('Матрица №1');
    for i:=1 to m do begin
      for j:=1 to n do begin
        write(a[i,j]:3);
      end;
      writeln;
    end;
  writeln('Матрица №2');
    for i:=1 to m do begin
      for j:=1 to n do begin
        write(b[i,j]:3);
      end;
      writeln;
    end;
end.
2
1 / 1 / 0
Регистрация: 24.05.2012
Сообщений: 24
25.05.2012, 10:54  [ТС] 3
Только в матрице встречаются повторы, а их быть не должно. Попробовал сделать рандом, исключающий повторения, по аналогии с одномерным массивом, но ничего не получилось(
0
32 / 32 / 25
Регистрация: 06.01.2012
Сообщений: 142
25.05.2012, 12:10 4
Если не хотите повторов, то заполняйте тогда матрицу вручную, и все будет, так как вам надо. А иначе через рандом. Но без рандома будет немного долговато вводить, если матрица у вас больше чем 3х3 например.
0
1 / 1 / 0
Регистрация: 24.05.2012
Сообщений: 24
25.05.2012, 15:06  [ТС] 5
Я видел пару кодов, которые делают рандом без повторов, но не смог в них разобраться. А в задании нужен именно рандом и именно без повторов. Отдельно они работают, а вот вставить их в программу не получается.
0
3450 / 2388 / 2135
Регистрация: 04.12.2011
Сообщений: 3,965
25.05.2012, 15:22 6
Цитата Сообщение от Син Посмотреть сообщение
рандом без повторов
можно создать упорядоченный массив, а потом рандомно перемешать его..

Добавлено через 9 минут
примерно так
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
var
  i1,i2,j1,j2,i,j,k,tmp: integer;
  a: array[1..3,1..3] of integer;
begin
k:=0;
for i:=1 to 3 do
begin
  for j:=1 to 3 do
  begin
    inc(k);
    a[i,j]:=k;
    write(a[i,j]:2);
  end;
  writeln;
end;
writeln;
 
for i:=1 to 100 do
begin
  i1:=random(3)+1;
  j1:=random(3)+1;
  i2:=random(3)+1;
  j2:=random(3)+1;
  tmp:=a[i1,j1];
  a[i1,j1]:=a[i2,j2];
  a[i2,j2]:=tmp;
end;
 
for i:=1 to 3 do
begin
  for j:=1 to 3 do
    write(a[i,j]:2);
  writeln;
end;
end.
1
1 / 1 / 0
Регистрация: 24.05.2012
Сообщений: 24
25.05.2012, 15:23  [ТС] 7
Цитата Сообщение от ermolay Посмотреть сообщение
можно создать упорядоченный массив, а потом рандомно перемешать его..
Тогда получится, что матрица будет состоять из одних и тех же чисел, но расположенных каждый раз по новому?
0
3450 / 2388 / 2135
Регистрация: 04.12.2011
Сообщений: 3,965
25.05.2012, 15:39 8
матрица, в данном случае 3х3, состоит из чисел от 1 до 9, и числа эти расположены случайным образом. Далее можно манипулировать матрицей как вам заблагорассудится..
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2012, 15:39

В матрице поменять местами строку, содержащую элемент с наибольшим значением со строкой, содержащей элемент с наименьшим значением
Вот условие: В матрице размером NxM поменять местами строку, содержащую элемент с наибольшим...

В матрице поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением
В данной действительной матрице размера 3*3 поменять местами строку, содержащую элемент с...

Поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением
В данной действительной матрице размера 6х9 поменять местами строку, содержащую элемент с...

Поменять местами строку, содержащую элемент с наибольшим значением, со строкой содержащей элемент с наименьшим значением
Доброго времени суток! Помогите решить задание на с# (тема двумерные массивы): В данной двумерной...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.