Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Заблокирован
1

Отсортировать матрицы в порядке возрастания суммы их элементов

18.09.2014, 14:18. Показов 824. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задан массив матриц. Требуется расположить их в порядке
возрастания суммы элементов каждой матрицы. Начальное и
конечное расположение матриц вывести на экран в два ряда.
В первом ряду матрицы заданные рандомно
Во втором ряду отсортированные матрицы.
Решение.
Я тут долго ломал голову над тем как решить эту задачу.
Можно например, не мудрствуя лукаво, задать все матрицы,
вычислить суммы элементов всех матриц и отсортировать
эти числа (их поместить в линейный массив), запомнив их
индексы. Но я пошёл по пути наибольшего сопротивления и
задал массив матриц, хотя изначально не знал как с ним
обращаться, но задачу решил. Вероятно программа выглядит
так себе. А есть ли иные решения этой задачи. Например,
я думал и о таком экзотической варианте, как соединить все
матрицы в одну (это годится конечно для распечатки матриц)
А что? Я считаю что это оригинально, хотя непрактично.
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
uses Crt;
const
   n = 2;
   m = 5;
type
   matr = array[1..n, 1..n] of integer;
   mass = array[0..m] of matr;
var
   k: byte;
   a: mass;
 
procedure ini(var c:mass);
var i,j:integer;
begin
   for k:= 0 to m do
   for i:= 1 to n do
   for j:= 1 to n do
      c[k][i,j]:= Random(10);
end;
 
procedure print(c:mass;l:byte);
var i,j:integer;
begin
   for k:= 0 to m do
   for i:= 1 to n do
   for j:= 1 to n do begin
      gotoXY(2*j + 8*k, i+l);
      write(c[k][i,j])
   end
end;
 
function sum(c:mass; k:byte):integer;
var
   i,j,s: integer;
begin
   s:= 0;
   for i:= 1 to n do
   for j:= 1 to n do
      s:= s + c[k][i,j];
   sum:= s
end;
 
procedure zwo(var c:mass);
var
   i,j:integer;
   r:mass;
begin
   for i:= 0 to m-1 do
   for j:= i+1 to m do
      if sum(c,i) > sum(c,j)then
        begin
          r[i]:= c[i];
          c[i]:= c[j];
          c[j]:= r[i];
        end
end;
 
begin
   randomize;
   clrscr;
   ini(a);
   print(a,1);
   zwo(a);
   print(a,5);
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2014, 14:18
Ответы с готовыми решениями:

Отсортировать строки массива в порядке возрастания суммы элементов строк
отсортировать строки массива в порядке возрастания суммы элементов строк Добавлено через 1...

Отсортировать строки матрицы в порядке возрастания суммы их элементов
Имеется задача, перескажу своими словами: матрица двухмерная, ввод с клавиатуры или случ....

Отсортировать элементы строк матрицы в порядке возрастания, а строки - в порядке возрастания сумм элементов
Задать с клавиатуры количество целочисленных матриц. Данные получить с помощью датчика случайных...

Создать двумерный массив, а затем отсортировать его в порядке возрастания суммы элементов строк
Всем привет!!! Помогите пожалуйста с этой задачкой кто чем сможет, за ранее спасибо!!! В моем...

4
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
18.09.2014, 14:33 2
Pascal
1
mass = array[0..m] of matr;
А зачем от 0? Замени везде по коду где циклы 0 на 1.
И это
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure zwo(var c:mass);
var
   i,j:integer;
   r:matr;
begin
   for i:= 1 to m-1 do
   for j:= i+1 to m do
      if sum(c,i) > sum(c,j)then
        begin
          r:= c[i];
          c[i]:= c[j];
          c[j]:= r;
        end
end;
1
Заблокирован
18.09.2014, 14:54  [ТС] 3
Спасибо!
С нулем я конечно перестарался.
А вот за подсказку в коде, где действительно
переставляются только матрицы, а я ввёл
нечто более сложное Вам большое спасибо!!
В другой раз буду писать аккуратней, хотя это
у меня первая программа подобного рода и
накладок было не избежать.
Ещё раз Спасибо!
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
18.09.2014, 23:44 4
hoch,
зачем пересчитывать сумму матриц каждый раз внутри цикла? Можно посчитать один раз, потом менять местами синхронно с матрицами:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function sum(const c: matr): Integer;
var
   i, j, s: Integer;
begin
  s:=0;
  for i:=1 to n do for j:= 1 to n do
    s:=s+c[i,j];
  sum:=s;
end;
procedure zwo(var c: mass);
var
  i, j, t: Integer;
  r: matr;
  s: array [1..m] of Integer;
begin
  for i:=1 to m do s[i]:=sum(c[i]);
  for i:= 1 to m-1 do
    for j:= i+1 to m do
      if s[i]>s[j] then begin
        r:=c[i]; c[i]:=c[j]; c[j]:=r;
        t:=s[i]; s[i]:=s[j]; s[j]:=t;
      end;
end;
Добавлено через 4 минуты
Или без функции sum():
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure zwo(var c: mass);
var
  i, j, t: Integer;
  r: matr;
  s: array [1..m] of Integer;
begin
  FillChar(s,SizeOf(s),#0);
  for t:=1 to m do for i:=1 to n do for j:=1 to n do s[t]:=c[t,i,j];
  for i:=1 to m-1 do for j:=i+1 to m do
    if s[i]>s[j] then begin
      r:=c[i]; c[i]:=c[j]; c[j]:=r;
      t:=s[i]; s[i]:=s[j]; s[j]:=t;
    end;
end;
1
Заблокирован
19.09.2014, 07:59  [ТС] 5
Bormant
Спасибо! Я как то об этом не подумал.
У меня это первая программа подобного рода и я более
всего беспокоился, как бы где не ошибиться, то есть
уделял больше внимания синтаксическим конструкциям,
а не коду и об оптимизации думал в последнюю очередь.
Но все хорошо, что хорошо кончается.
Спасибо Вам ещё раз!
0
19.09.2014, 07:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2014, 07:59
Помогаю со студенческими работами здесь

Отсортировать строки матрицы в порядке возрастания сумм их элементов
Впрочем, пишу программу. Что там у меня, уже не важно. Сейчас пытаюсь написать функцию сортировки...

Отсортировать столбцы матрицы в порядке возрастания значения элементов столбца
Доброго времени суток всем, очень нужна ваша помощь... написать процедуру сортировки массива В...

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

Отсортировать четные строки матрицы Q(10х10) в порядке убывания, а нечетные – в порядке возрастания
Написать программу на си, задание: Отсортировать четные строки матрицы Q(10х10) в порядке убывания,...

Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в порядке убывания
Привет. Первые десять элементов массива М(30) отсортировать в порядке возрастания, а остальные в...

Отсортировать строки матрицы в порядке возрастания
Отсортировать строки матрицы М (8х5) в порядке возрастания. Вот код#include<stdio.h>...


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

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