Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54

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

24.04.2010, 23:53. Показов 1975. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
По форуму лазил, находил кое-что похожее, но не помогло.
Задача: Упорядочите строки данной матрицы в порядке возрастания количества одинаковых элементов в каждой строке.
Из наработок сделал, чтобы программа хотя бы считала, сколько в каждой строке повторяющихся элементов, а как это связать с упорядочением совсем понятия не имею.
Вот наработки:
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
procedure count(var a:array[1..20,1..20] of integer;var n,m,i,j:integer);
var k,l,h,r,t,max,curmax,temp:integer;
begin
 max:=0;
 curmax:=0;
 for i:=1 to m do
  begin
   for k:=1 to n do
    begin
     for h:=k to n do
      begin
       if a[i,k]=a[i,h] then
         inc(curmax);
      end;
       if curmax>max then
        begin
         max:=curmax;
         curmax:=0;
        end
       else
        curmax:=0
    end;
   writeln(max);
   max:=0;
 end;
 writeln;
end;
Добавлено через 4 часа 44 минуты
сори за ап, но очень нужна помощь... прикрутил так же сортировку внутри нового массива:

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
begin
 max:=0;
 curmax:=0;
 for i:=1 to m do
  begin
   for k:=1 to n do
    begin
     for h:=k to n do
      begin
       if a[i,k]=a[i,h] then
         inc(curmax);
      end;
       if curmax>max then
        begin
         max:=curmax;
         curmax:=0;
        end
       else
        curmax:=0
    end;
   maxx[i]:=max;
   writeln(max);
   max:=0;
  end;
 
 for i:=1 to n-1 do
  begin
   for z:=i+1 to n do
    if maxx[z]>maxx[i] then
     begin
      t:=maxx[i];
      maxx[i]:=maxx[i+1];
      maxx[i+1]:=t;
     end;
  end;
теперь у нас есть новый отсортированный массив...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2010, 23:53
Ответы с готовыми решениями:

Упорядочить строки матрицы в порядке возрастания их последних элементов
Дана матрица А размера n m. Упорядочить строки матрицы в порядке возрастания их последних элементов. помогите :с

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

Упорядочить строки матрицы в порядке возрастания элементов главной диагонали
Упорядочить строки матрицы m * n в порядке возрастания элементов в главной диагонали. Матрица вводится и выводится в главной программе....

19
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
25.04.2010, 06:45
liker, Что Вы понимаете или что значит по условию количество одинаковых элементов в строке?
Сначала Вы пишете одинаковых, потом повторяющихся, а в программе вообще ищете число, которое повторяется максимальное количество раз. Что нужно то?
Например чему равно искомое значение для
2 2 3 3 3
2, 3 или 5?
0
33 / 33 / 15
Регистрация: 19.04.2010
Сообщений: 40
25.04.2010, 07:46
liker, как я понял Вы почти все сделали и осталось просто поменять местами строки в массиве.
Я предлагаю, вместо того, чтобы сортировать массив maxx, сразу сортировать строки.
Pascal
1
2
3
4
5
6
7
8
9
10
 for i:=1 to n-1 do
  begin
   for z:=i+1 to n do
    if maxx[i]>maxx[z] then
     begin
      a1:=a[z];
      a[z]:=a[i];
      a[i]:=a1;
     end;
  end;
Массив a1 объявляем вот так
Pascal
1
a1:array[1..20] of integer;
1
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54
26.04.2010, 10:48  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
liker, Что Вы понимаете или что значит по условию количество одинаковых элементов в строке?
Сначала Вы пишете одинаковых, потом повторяющихся, а в программе вообще ищете число, которое повторяется максимальное количество раз. Что нужно то?
Например чему равно искомое значение для
2 2 3 3 3
2, 3 или 5?
хороший вопрос... вообще условие задачи, как указано в теме топика, но из строки, которую написали вы я брал число 3, однако сейчас подумал и, может, надо было брать 5...

kasgo, спасибо, сейчас попробую)

Добавлено через 7 минут
Pascal
1
      a1:=a[z];
на вот этой строке выдает ошибку, что массив имеет другое кол-во размерностей..
0
33 / 33 / 15
Регистрация: 19.04.2010
Сообщений: 40
26.04.2010, 11:04
Проверьте объявление массивов(а лучше выложите сюда свой код).
Pascal
1
2
3
4
5
6
7
var a:array[1..20,1..20] of integer;
    a1:array[1..20] of integer;
begin
  a[1,1]:=5;
  a1:=a[1];
  writeln(a1[1]);
end.
В результате выполнения данной программы на экран будет выведено число 5.
1
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54
26.04.2010, 11:07  [ТС]
вы пытаетесь одномерному массивы присвоить значения двумерного, поэтому появляются ошибки, мне кажется.
и поправку внесу, может не точно описал задание, надо вывести не число, а получившуюся матрицу, т.е. если исходная будет такая:
1 1 1 2
4 3 3 2
6 6 6 6
1 4 5 6
то в итоге получится:
6 6 6 6
1 1 1 2
4 3 3 2
1 4 5 6
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
26.04.2010, 12:34
Pascal
1
a1:=a[1,1];
0
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54
26.04.2010, 23:37  [ТС]
Цитата Сообщение от Puporev Посмотреть сообщение
Pascal
1
a1:=a[1,1];
теперь ругается на эту строчку, что попытка присвоить переменной типа array[1..20] of integer выражение типа 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
program l10_13;
uses crt;
var a:array[1..20,1..20] of integer;
    n,i,j,m:integer;
 
procedure vvod(var a:array[1..20,1..20] of integer; var n,m,i,j:integer);
begin
 write('Введите количество строк матрицы: ');
 readln(m);
 write('Введите количество столбцов матрицы: ');
 readln(n);
 writeln('Введите саму матрицу: ');
 for i:=1 to m do
  begin
   for j:=1 to n do
    begin
     read(a[i,j]);
    end;
   end;
end;
 
 
procedure count3(var a:array[1..20,1..20] of integer;var n,m,i,j:integer);
var k,l,h,r,max,curmax,temp,z,g,t:integer;
    maxx:array[1..20] of integer;
    a1:array[1..20] of integer;
begin
 max:=0;
 curmax:=0;
 for i:=1 to m do
  begin
   for k:=1 to n do
    begin
     for h:=k to n do
      begin
       if a[i,k]=a[i,h] then
         inc(curmax);
      end;
       if curmax>max then
        begin
         max:=curmax;
         curmax:=0;
        end
       else
        curmax:=0
    end;
   maxx[i]:=max;
   writeln(max);
   max:=0;
  end;
 
{сортировка}
 for i:=1 to n-1 do
  begin
   for z:=i+1 to n do
    if maxx[z]>maxx[i] then
     begin
      a[1,1]:=5;
      a1:=a[1,1];
      writeln(a1[1]);
     end;
  end;
 
 
begin
clrscr;
vvod(a,n,m,i,j);
writeln;
count3(a,n,m,i,j);
readkey;
end.
и, кстати, почему мы в этой строке
Pascal
1
      a[1,1]:=5;
присваеваем пятерку?
0
 Аватар для pazlle
27 / 17 / 8
Регистрация: 02.11.2009
Сообщений: 176
26.04.2010, 23:41
Цитата Сообщение от liker Посмотреть сообщение
procedure count(var a:array[1..20,1..20] of integer;var n,m,i,j:integer);
А разве в процедуре можно писать тип целиком, я конкретно про массив.
По идее Tmas = array[1..n] of integer, а в процедуре ....(a:Tmas);
Разве не так?
0
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54
26.04.2010, 23:52  [ТС]
мм.. ну, если убрать вот эти строки
a[1,1]:=5;
a1:=a[1,1];
writeln(a1[1]);
то программа как бы работает =) сейчас попробую исправить, как вы говорите

Добавлено через 3 минуты
без изменений(
0
 Аватар для pazlle
27 / 17 / 8
Регистрация: 02.11.2009
Сообщений: 176
26.04.2010, 23:56
Покажите как вы сделали.
0
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54
27.04.2010, 00:02  [ТС]
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
program l10_13;
uses crt;
type matr=array[1..20,1..20] of integer;
var a:matr;
    n,i,j,m:integer;
 
procedure vvod(var a:matr; var n,m,i,j:integer);
begin
 write('Введите количество строк матрицы: ');
 readln(m);
 write('Введите количество столбцов матрицы: ');
 readln(n);
 writeln('Введите саму матрицу: ');
 for i:=1 to m do
  begin
   for j:=1 to n do
    begin
     read(a[i,j]);
    end;
   end;
end;
 
 
procedure count3(var a:matr;var n,m,i,j:integer);
var k,l,h,r,max,curmax,temp,z,g,t:integer;
    maxx:array[1..20] of integer;
    a1:array[1..20] of integer;
    p:boolean;
begin
 max:=0;
 curmax:=0;
 for i:=1 to m do
  begin
   for k:=1 to n do
    begin
     for h:=k to n do
      begin
       if a[i,k]=a[i,h] then
         inc(curmax);
      end;
       if curmax>max then
        begin
         max:=curmax;
         curmax:=0;
        end
       else
        curmax:=0
    end;
   maxx[i]:=max;
   writeln(max);
   max:=0;
  end;
 
{сортировка}
 for i:=1 to n-1 do
  begin
   for z:=i+1 to n do
    if maxx[z]>maxx[i] then
     begin
      a[1,1]:=5;
      a1:=a[1,1];
      writeln(a1[1]);
     end;
  end;
 
 
 
 
begin
clrscr;
vvod(a,n,m,i,j);
writeln;
count3(a,n,m,i,j);
readkey;
end.
0
 Аватар для pazlle
27 / 17 / 8
Регистрация: 02.11.2009
Сообщений: 176
27.04.2010, 00:09
У тебя матрица 20 на 20 зачем Вы вводите количество строк и столбцов? У Вас они фиксированные
0
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54
27.04.2010, 00:11  [ТС]
почему фиксированные? в процедуре vvod вводится матрица
0
 Аватар для pazlle
27 / 17 / 8
Регистрация: 02.11.2009
Сообщений: 176
27.04.2010, 00:23
Цитата Сообщение от liker Посмотреть сообщение
write('Введите количество строк матрицы: '); readln(m); write('Введите количество столбцов матрицы: ');
Зачем, у Вас 20 на 20.
0
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54
27.04.2010, 00:26  [ТС]
во-первых, в колледже просят, чтобы массивы ограничивались числом 20
а во-вторых, как зачем? чтобы пользователь ввел кол-во строк и кол-во столбцов (до 20)
а разве это имеет какое-то значение к решению задачи?
0
33 / 33 / 15
Регистрация: 19.04.2010
Сообщений: 40
27.04.2010, 06:55
liker, Данный код:
Цитата Сообщение от Kasgo Посмотреть сообщение
Pascal
1
2
3
4
5
6
7
var a:array[1..20,1..20] of integer;
    a1:array[1..20] of integer;
begin
  a[1,1]:=5;
  a1:=a[1];
  writeln(a1[1]);
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
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
program l10_13;
uses crt;
type matr=array[1..20,1..20] of integer;
var a:matr;
    n,i,j,m:integer;
 
procedure vvod;
begin
 write('Введите количество строк матрицы: ');
 readln(m);
 write('Введите количество столбцов матрицы: ');
 readln(n);
 writeln('Введите саму матрицу: ');
 for i:=1 to m do
  begin
   for j:=1 to n do
    begin
      write('a[',i,',',j,'=');
      read(a[i,j]);
    end;
   end;
end;
 
procedure count3;
var k,l,h,r,max,curmax,temp,z,g,t:integer;
    maxx:array[1..20] of integer;
    a1:array[1..20] of integer;
    p:boolean;
begin
 max:=0;
 curmax:=0;
 for i:=1 to m do
  begin
   for k:=1 to n do
    begin
     for h:=k to n do
      begin
       if a[i,k]=a[i,h] then
         inc(curmax);
      end;
       if curmax>max then
        begin
         max:=curmax;
         curmax:=0;
        end
       else
        curmax:=0
    end;
   maxx[i]:=max;
   //write(max:4);
   max:=0;
  end;
 
{сортировка}
 for i:=1 to m-1 do
  begin
   for z:=i+1 to m do
    if maxx[z]<maxx[i] then
     begin
      a1:=a[z];
      a[z]:=a[i];
      a[i]:=a1;
 
      max:=maxx[z];
      maxx[z]:=maxx[i];
      maxx[i]:=max;
     end;
  end;
end;
 
procedure vivod;
begin
  for i:=1 to m do
  begin
    for j:=1 to n do
      write(a[i,j]:4);
    writeln;
  end;
end;
 
begin
clrscr;
vvod;
clrscr;
vivod;
writeln;
count3;
writeln;
writeln;
vivod;
readkey;
end.
1
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54
27.04.2010, 11:30  [ТС]
спасибо конечно, что уделяете так немало времени моей программе, но она все равно ругается на
a1:=a[z];
"массив имеет другое количество размерностей"
0
33 / 33 / 15
Регистрация: 19.04.2010
Сообщений: 40
27.04.2010, 11:46
Сори, моя ошибка, щас запустил в TP7 не работает. А в FreePascal все отлично.
Ну тогда остается только поэлементно переписать строки.
Pascal
1
a1: integer;
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{сортировка}
 for i:=1 to m-1 do
  begin
   for z:=i+1 to m do
    if maxx[z]<maxx[i] then
     begin
     for j:=1 to n do
     begin
        a1:=a[z,j];
        a[z,j]:=a[i,j];
        a[i,j]:=a1;
    end;
      max:=maxx[z];
      maxx[z]:=maxx[i];
      maxx[i]:=max;
     end;
  end;
end;
1
 Аватар для liker
18 / 18 / 3
Регистрация: 24.04.2010
Сообщений: 54
27.04.2010, 13:56  [ТС]
ааа, огромное спасибо! всё работает, но так же появился ньюанс, только квадратные матрицы считает правильно)

Добавлено через 1 минуту
ой, извиняюсь, просто не правильно вводил "неквадратные", с ними тоже работает, топик можно закрывать
kasgo, вам спасибо)

Добавлено через 2 часа 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
program l10_13;
uses crt;
type matr=array[1..20,1..20] of integer;
var a:matr;
    n,i,j,m:integer;
 
procedure vvod;
begin
 write('Введите количество строк матрицы: ');
 readln(m);
 write('Введите количество столбцов матрицы: ');
 readln(n);
 writeln('Введите саму матрицу: ');
 for i:=1 to m do
  begin
   for j:=1 to n do
    begin
     read(a[i,j]);
    end;
   end;
end;
 
 
procedure count3;
var k,l,h,r,max,curmax,temp,z,g,t:integer;
    maxx:array[1..20] of integer;
    sort:array[1..20,1..20] of integer;
    a1:integer;
begin
 max:=0;
 curmax:=0;
 for i:=1 to m do
  begin
   for k:=1 to n do
    begin
     for h:=k to n do
      begin
       if a[i,k]=a[i,h] then
         inc(curmax);
      end;
       if curmax>max then
        begin
         max:=curmax;
         curmax:=0;
        end
       else
        curmax:=0
    end;
   maxx[i]:=max;
   if max=1 then
    begin
     max:=0;
    end;
   writeln('В ',i,'й строке - ', max, ' одинаковых элемента(ов)');
   max:=0;
  end;
 
{сортировка}
 for i:=1 to m-1 do
  begin
   for z:=i+1 to m do
    if maxx[z]>maxx[i] then
     begin
     for j:=1 to n do
      begin
        a1:=a[z,j];
        a[z,j]:=a[i,j];
        a[i,j]:=a1;
      end;
      max:=maxx[z];
      maxx[z]:=maxx[i];
      maxx[i]:=max;
     end;
end;
 
 
 
 
 writeln;
 writeln('Новый порядок строк исходной матрицы');
 writeln;
 textcolor(4);
 for i:=1 to m do
  begin
   begin
    for j:=1 to n do
       write(a[i,j],' ');
   end;
     writeln;
  end;
end;
 
 
 
 
begin
clrscr;
vvod;
writeln;
count3;
readkey;
end.
(проверено на pascal_abc, tp7)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2010, 13:56
Помогаю со студенческими работами здесь

Упорядочить столбцы матрицы А[N,M] в порядке возрастания элементов первой строки методом «пузырька»
без рандома,не могу сообразить Упорядочить столбцы матрицы А в порядке возрастания элементов первой строки методом «пузырька»

Упорядочите строки данной матрицы в порядке возрастания количества одинаковых элементов в каждой строке
Упорядочите строки данной матрицы в порядке возрастания количества одинаковых элементов в каждой строке. Воспользуйтесь сортировкой методом...

Упорядочите строки данной матрицы в порядке возрастания количества одинаковых элементов в каждой строке.
Здравствуйте. Помогите переделать программу. Условие: Упорядочите строки данной матрицы в порядке возрастания количества одинаковых...

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

Упорядочить строки матрицы в порядке возрастания первого столбца
Привет всем. Помогите пожалуйста пару решить нетруднух задач.Заранее спасибо. (если можно рабочую версию) 1.Дан двумерный массив. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru