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

Отсортировать строки матрицы по возрастанию количества одинаковых элементов в каждой строке

15.11.2008, 15:27. Показов 4604. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток, товарищи. Помогите разобраться с сортировкой строк прямоугольной матрицы.

Необходимо: отсортировать строки матрицы по возрастанию количества одинаковых элементов в каждой строке.

P.S. - если не тяжело, то необходимо в полученной матрице найти номер первого из столбцов, не содержащего ни одного отрицательного элемента.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2008, 15:27
Ответы с готовыми решениями:

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

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

Отсортировать элементы каждой строки матрицы по возрастанию
Отсортировать элементы каждой строки матрицы по возрастанию. (Паскаль)

13
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.11.2008, 15:54
Интересно, если строка 1 1 1 2 2, то сколько в ней одинаковых?
0
0 / 0 / 0
Регистрация: 15.11.2008
Сообщений: 23
15.11.2008, 16:10  [ТС]
Если в строке элементы 1 1 1 2 2 - по логике вещей - 3 одинаковых единицы и 2 одинаковых двойки, следовательно общее количество одинаковых элементов - 5.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.11.2008, 19: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
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
uses crt;
type Tmatr=array[1..20,1..20]of integer;
function KolOdin(x,y:integer;a:Tmatr):integer;//функция подсчета одинаковых в строках
var i,j,k,t,l:integer;             //параметры х-номер строки, у-длина строки(размер матрицы, если квадратная)
begin
i:=1;t:=0;
while i<=y do
   begin
    k:=1;
    for j:=y downto i+1 do //смотрим строку с конца до числа которое проверяем+1
    if a[x,j]=a[x,i] then  //если находим одинаковое
      begin
        k:=k+1;  //считаем его
        for l:=j to y-1 do //сдвигом влево удаляем его
        a[x,l]:=a[x,l+1];
        y:=y-1; //уменьшаем длину строки
      end;
    if k>1 then t:=t+k; //если число больше раза, прибавляем его к общему количеству
    i:=i+1; //переходим к следующему числу
   end;
KolOdin:=t; //значение функции
end;
var a:Tmatr;  //раздел переменных основной программы
    n,i,j,l,x:integer;
begin
clrscr;
write('Vvedite razmernost matricy n= ');readln(n);
randomize;
Writeln('Matrica:');
for i:=1 to n do
   begin
     for j:=1 to n  do
       begin
         a[i,j]:=random(5);
         write(a[i,j]:4);
       end;
     writeln;
   end;
for i:=1 to n do
a[i,n+1]:=KolOdin(i,n,a);//в дополнительный столбец справа заносим значения количеств одинаковых чисел
for i:=1 to n-1 do
for l:=1 to n-1 do
if a[l,n+1]>a[l+1,n+1] then //переставляем строки по возрастанию в последнем столбце
    begin
      for j:=1 to n+1 do
        begin
          x:=a[l,j];
          a[l,j]:=a[l+1,j];
          a[l+1,j]:=x;
       end;
    end;
writeln('Rezultat:                 kol');//выводим результат с количествами(можно убрать)
for i:=1 to n do
    begin
      for j:=1 to n+1 do //если убрать, for j:=1 to n do 
      write(a[i,j]:4);
      writeln;
    end;
readln
end.
1
 Аватар для Arriba
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
15.11.2008, 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
program Project2;
 
var d:array[1..30,1..30] of integer;
    i,j,l,k,n,sum:integer;
    x,y:integer;
    m:boolean;
begin
     WriteLn('vvedi x(strok) and y(stolbcov)=');
     ReadLn(x,y);
 
    for n:=1 to x do
    for i:=1 to y do
      begin
         Write('d[',n,',',i,']=');
         Readln(d[n,i]);
      end;
 
for n:=1 to x do
begin
  l:=1;
  sum:=0;
   for i:=1 to y do
     begin
        if i<>y then
          for j:=i+1 to y do
             if d[n,i]=d[n,j] then
               begin
                 m:=false;
                   if i<>1 then
                    begin
                     for k:=1 to i-1 do
                       if d[n,k]=d[n,i] then
                        m:=true;
                    end;
                  if m<>true then
                   l:=l+1;
               end;
       if l<>1 then
       sum:=sum+l;
       l:=1;
     end;
d[n,y+1]:=sum;
end;
 
for i:=1 to x-1 do
for j:=1 to x-1 do
  begin
    if d[j,y+1]<d[j+1,y+1] then
      begin
           for k:=1 to y+1 do
             begin
             d[x+1,k]:=d[j,k];
             d[j,k]:=d[j+1,k];
             d[j+1,k]:=d[x+1,k];
             end;
      end;
  end;
{если поставить y+1 то моно посмотреть
значения одинаковых чисел в каждой строке}
    for n:=1 to x do
    for i:=1 to y do
      if i<>y then
        Write(d[n,i],' ')
      else
        WriteLn(d[n,i]);
ReadLn;
end.
если нуно то поясню...
1
0 / 0 / 0
Регистрация: 15.11.2008
Сообщений: 23
16.11.2008, 01:09  [ТС]
Всё отлично в последнем варианте программы, только необходимо ещё упорядочить в порядке возрастания строки (то бишь на первое место - с минимальным количеством одинаковых элементов, на второе - с большим и так далее).
0
 Аватар для Arriba
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
16.11.2008, 02:29
Просто в конце программы вот здесь:
if d[j,y+1]<d[j+1,y+1] then
поменяй знак вот так:
if d[j,y+1]>d[j+1,y+1] then
и всё, можешь пользоваться.
1
0 / 0 / 0
Регистрация: 15.11.2008
Сообщений: 23
16.11.2008, 19:07  [ТС]
Уря-ря! Заработало! Спасибо ОГРОМНОЕ!

P.S. - можно ли теперь как "бонус" в полученной матрице найти номер первого из столбцов, не содержащего ни одного отрицательного элемента?
0
 Аватар для Arriba
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
16.11.2008, 19:16
happyserge, тыб сказал спасибо Puporev, он и раньше написал, работает отлично(сам проверял) и у него код как мне кажется проще чем у меня...

А насчёт бонуса, нуно сразу задание указывать целиком, а то как получается, сделаешь первую часть, сделаешь вторую часть, а потом пользователь насоединяет кк нить, и приходится делать целиком ещё раз...
0
0 / 0 / 0
Регистрация: 15.11.2008
Сообщений: 23
16.11.2008, 19:51  [ТС]
Цитата Сообщение от Arriba Посмотреть сообщение
happyserge, тыб сказал спасибо Puporev, он и раньше написал, работает отлично(сам проверял) и у него код как мне кажется проще чем у меня...

А насчёт бонуса, нуно сразу задание указывать целиком, а то как получается, сделаешь первую часть, сделаешь вторую часть, а потом пользователь насоединяет кк нить, и приходится делать целиком ещё раз...
Так я сразу в условии сделал P.S, Арриба. Посмотри в первом сообщении этой темы, плиз.

Добавлено через 1 минуту 11 секунд
А на счёт программы Pupoev-а не знаю - я её переписал в паскаль, запустил и получил зацикленный ввод элементов (типа как в фильме "Матрица" - цифры бесконечно по экрану бегают).. Вот..
0
 Аватар для Arriba
257 / 173 / 27
Регистрация: 17.10.2008
Сообщений: 770
16.11.2008, 21:56
Понял, щас доделаем, извини за невнимательность....

Добавлено через 31 минуту 58 секунд
Вот полый код со всеми изменениями и рабочей программой:
Если всё правильно будет работать тему моно закрывать...
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 Project2;
 
var d:array[1..30,1..30] of integer;
    i,j,l,k,n,sum:integer;
    x,y,minus:integer;
    m:boolean;
begin
     WriteLn('vvedi x(strok) and y(stolbcov)=');
     ReadLn(x,y);
 
    for n:=1 to x do
    for i:=1 to y do
      begin
         Write('d[',n,',',i,']=');
         Readln(d[n,i]);
      end;
 
for n:=1 to x do
begin
  l:=1;
  sum:=0;
   for i:=1 to y do
     begin
        if i<>y then
          for j:=i+1 to y do
             if d[n,i]=d[n,j] then
               begin
                 m:=false;
                   if i<>1 then
                    begin
                     for k:=1 to i-1 do
                       if d[n,k]=d[n,i] then
                        m:=true;
                    end;
                  if m<>true then
                   l:=l+1;
               end;
       if l<>1 then
       sum:=sum+l;
       l:=1;
     end;
d[n,y+1]:=sum;
end;
 
for i:=1 to x-1 do
for j:=1 to x-1 do
  begin
    if d[j,y+1]>d[j+1,y+1] then
      begin
           for k:=1 to y+1 do
             begin
             d[x+1,k]:=d[j,k];
             d[j,k]:=d[j+1,k];
             d[j+1,k]:=d[x+1,k];
             end;
      end;
  end;
{если поставить y+1 то моно посмотреть
значения одинаковых чисел в каждой строке}
WriteLn;
    for n:=1 to x do
    for i:=1 to y do
      if i<>y then
        Write(d[n,i],' ')
      else
        WriteLn(d[n,i]);
WriteLn;
 
{тут находим положительный столбик}
    minus:=-1;
    i:=0;
     repeat
        i:=i+1;
         for n:=1 to x do
          begin
             if (d[n,i]<0) then
              minus:=i;
          end;
             if minus=-1 then
              begin
                 minus:=i;
                 i:=y;
              end
             else
              begin
                minus:=-1;
              end;
     until i=y;
   if minus<>-1 then
     WriteLn('stolbec=',minus)
   else
     WriteLn('netu');
ReadLn;
end.
0
0 / 0 / 0
Регистрация: 15.11.2008
Сообщений: 23
17.11.2008, 18:43  [ТС]
Спасибо, Аррива, всё работает на 5+!
0
0 / 0 / 0
Регистрация: 22.10.2009
Сообщений: 8
26.10.2009, 18:14
Привет Всем... а не могли бы вы ту же задачу только на С++ сделать?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
26.10.2009, 18:42
Dimonsss, Пости тему в С++ и вперед. Здесь уже на Паскале некогда писать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2009, 18:42
Помогаю со студенческими работами здесь

Количество пар одинаковых соседних элементов в каждой строке матрицы.
Задан двумерный массив (n × m). Найти количество пар одинаковых «Соседних» элементов в каждой строке Хелпаните кто може пж.

Найти суммы элементов каждой строки матрицы и поместить их в массив по возрастанию.
Найти сумму элементов каждой строки матрицы Х (10,8) и поместить их в массив по возрастанию. Пожалуйста добрые люди_спасайте) я

Определить и запомнить количества положительных и отрицательных элементов каждой строки матрицы
Определить и запомнить количества положительных и отрицательных элементов каждой строки матрицы N×M.. Заранее очень сильно...

Сформировать одномерный массив из количества ненулевых элементов каждой строки матрицы.
№ 1 С помощью генератора чисел сформировать матрицу А. Вывести её. Сформировать одномерный массив из количества ненулевых элементов...

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru