Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126

Отсортировать матрицу в порядке убывания

14.04.2012, 18:31. Показов 2191. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Значит есть двухмерный массив marks или просто m[1..100,1..50];
Собственно будем считать что они заполняются случайным образом, но там нет отрицательных чисел.
Мне нужно отсортировать его в порядке убывания(если не ошибаюсь это от меньшего до большего).
Искал в интернете примеры, пробовал сам сделать, не получается( хотя бы идею подкиньте)

Добавлено через 3 минуты
если быть точнее, мне надо отсортировать только второй столбец для каждого заданого первого столбца. Приведу пример)
для i=1 j(1)=22; j(2)=40; j(3)=37... j(n)=100;
i=2 j(1)=78; ... и т.д.
должно получится для i=1 j(1)=22, следующее 37, потом 40 и т.д.)
вроде нормально объяснил)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2012, 18:31
Ответы с готовыми решениями:

Отсортировать данные в порядке убывания среднего балла
Задан массив записей, в котором определены поля Ф.И.О. студента и его средний балл. Отсортировать данные в порядке убывания...

Отсортировать матрицу в порядке убывания элементов второго столбца
при помощи генератора случайных чисел сформировать двумерный массив, размерностью М на N, состоящий из целых чисел из диапазона -10 +10 и...

Отсортировать последовательность в порядке убывания
Даны натуральные числа n, а1...аn, где n<=5000. Осортировать последовательность а1...аn в порядке убывания, найти элементы ak...

10
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
14.04.2012, 22:17
Цитата Сообщение от Takeshi80 Посмотреть сообщение
вроде нормально объяснил)
Нормальнее некуда, лучше бы просто точно написал условие без всяких комментариев.
0
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
14.04.2012, 22:24  [ТС]
Условия нет) я решаю задачу, мне просто нужно отсортировать массив по убыванию, все)
у меня есть разве что на английском задача, я английский хорошо знаю поэтому мне переводчик не нужен)
короче говоря все решает эта строчка: the largest difference between consecutive marks (when sorted in non-decreasing order).
Мне просто нужно понять как отсортировать массив, с остальным я пожалуй справлюсь)
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
14.04.2012, 22:28
Цитата Сообщение от Takeshi80 Посмотреть сообщение
Мне просто нужно понять как отсортировать массив
Да есть с десяток методов сортировки, все они описаны в интернете, вот простой способ обменом
Pascal
1
2
3
4
5
6
7
8
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i]>a[j] then
 begin
  x:=a[i];
  a[i]:=a[j];
  a[j]:=x;
 end;
1
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
14.04.2012, 22:32  [ТС]
и этот же код работает для двухмерного массива?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
14.04.2012, 22:38
Работает, только если нужно смотреть как нужно отсортировать матрицу, если например только каждую строку или каждый столбец, то самое то, а вот если все элементы матрицы от первого до последнего, то проще для написания метод пузырька.
Например так.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{сортировка матрицы по возрастанию пузырьком по строкам}
for k:=1 to n*m do  {повторяем сколько элементов в матрице}
for i:=1 to n do
for j:=1 to m do
   begin
    if j<>m then {если элемент в строке не последний}
      begin
       if a[i,j+1]<a[i,j]
       then Swap(a[i,j+1],a[i,j]){обмен элементов}
      end
    else
     if (a[i+1,1]<a[i,j])and(i<>n) {если строка не последняя}
     {меняем первый элемент в следущей строке с последним элементом в текущей строке}
     then Swap(a[i+1,1],a[i,j]);
   end;
процедура Swap это просто обмен двух элементов
Pascal
1
2
3
4
5
6
7
procedure Swap(var a,b:real); {процедура обмена двух элементов}
var tmp:real;
begin
tmp:=a;
a:=b;
b:=tmp;
end;
1
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
14.04.2012, 22:52  [ТС]
я пробовал вот так:
Pascal
1
2
3
4
5
6
for i:=1 to k do
for j:=1 to n-1 do
if marks[i,j]>marks[i,j+1] then begin
c:=marks[i,j];
marks[i,j+1]:=marks[i,j];
marks[i,j]:=c; end;
не пашет)

Добавлено через 7 минут
Вроде верно вставил...почему-то не работает, вот весь код

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
var k,i,n,j,c,z:integer; marks:array[1..100,1..50] of integer;
min,max,dif,difm:array[1..100] of integer;
 
procedure Swap(var a,b:real);
var tmp:real;
begin
tmp:=a; a:=b; b:=tmp;
end;
begin
readln(k);
for i:=1 to k do begin
read(n);  min[i]:=100;
for j:=1 to n do begin
read(marks[i,j]);
if marks[i,j]>max[i] then max[i]:=marks[i,j];
if marks[i,j]<min[i] then min[i]:=marks[i,j]; end;  end;
 
for i:=1 to k*n do
for z:=1 to k do
for j:=1 to n do
begin if j<>k then begin
if marks[z,j+1]<marks[z,j] then Swap(marks[z,j+1],marks[z,j]) end else
if (marks[z+1,1]<marks[z,j]) and (z<>n) then Swap(marks[i+1,1],marks[z,j]);
 
for i:=1 to k do
difm[i]:=1;
for j:=1 to n-1 do
dif[j]:=abs(marks[i,j]-marks[i,j+1]);
if difm[i]<dif[j] then difm[i]:=dif[j];
for i:=1 to k do begin writeln('Class ',i);
writeln('Max ',max[i],', Min ',min[i],', Largest gap ',difm[i]); end;
readln; readln;
end.
Добавлено через 1 минуту
а, разобрался, сейчас проверю верно ли

Добавлено через 4 минуты
уже голова болит от этого массива..
можно тогда попросить помощи еще в одном?
мне надо чтобы для каждого i-ого столбца определить максимальную разницу, по модулю, между соседними элементами строки j

Вот какое условие: The first line consists of the sentence: "Class X", where X indicates the class number starting with the value of one.
The second line reports the maximum class mark, minimum class mark and the largest difference between consecutive marks (when sorted in non-decreasing order) in the class using the formats shown in the class using the formats shown in the sample below.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2012, 09:09
Вот ты писал что знаешь английский, так какого черта ты не переводишь сам на русский. Или ты его только со словарем знаешь?
Судя по последнему сообщению тебе не нужно сортировать матрицу, а просто переставить все строки по убыванию или возрастанию значений в каком-то столбце. Вот пример сортировки по столбцу 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
uses crt;
const nmax=20;
var a:array[1..nmax,1..nmax] of real;
    n,m,i,j,k:byte;
    x:real;
begin
clrscr;
randomize;
repeat
write('Количество строк от 1 до ',nmax,' n=');
readln(n);
until n in [1..nmax];
repeat
write('Количество столбцов от 1 до ',nmax,'=');
readln(m);
until m in [1..nmax];
writeln('Исходная матрица:');
for i:=1 to n do
 begin
  for j:=1 to m do
   begin
    a[i,j]:=10*random;
    write(a[i,j]:5:2);
   end;
  writeln;
 end;
{перестановка строк по неубыванию элементов 2 столбца)}
for i:=1 to n-1 do
for k:=i+1 to n do
if a[i,2]>a[k,2] then
for j:=1 to m+1 do
 begin
  x:=a[i,j];
  a[i,j]:=a[k,j];
  a[k,j]:=x;
 end;
writeln;
writeln('Строки по неубыванию элементов 2 столбца:');
for i:=1 to n do
 begin
  for j:=1 to m do
  write(a[i,j]:5:2);
  writeln;
 end;
readln
end.
Добавлено через 1 час 32 минуты
И вообще вроде у тебя первый столбец строковый(Класс 10), а остальные числовые, поэтому нужно так.
Условие не очень понял, поэтому вводите данные какие нужно.

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
uses crt;
const nmax=20;
var a:array[1..nmax,1..3] of integer;
    k:array[1..nmax] of string;
    n,i,j,p,x:integer;
    s:string;
begin
clrscr;
repeat
write('Количество классов до ',nmax,' n=');
readln(n);
until n in [1..nmax];
for i:=1 to n do
 begin
  str(i,s);
  k[i]:='Класс '+s;
  {k[i]:='Класс '+IntToStr(i); по идее так, но у меня не работает}
 end;
writeln('Введите данные:');
for i:=1 to n do
 begin
  writeln(k[i]);
  write('макс. оценка=');
  readln(a[i,1]);
  write('мим. оценка=');
  readln(a[i,2]);
  a[i,3]:=a[i,1]-a[i,2];
 end;
{сортировка по неубыванию}
for i:=1 to n-1 do
for j:=i+1 to n do
if a[i,2]>a[j,2] then
 begin
  s:=k[i];
  k[i]:=k[j];
  k[j]:=s;
  for p:=1 to 3 do
   begin
    x:=a[i,p];
    a[i,p]:=a[j,p];
    a[j,p]:=x;
   end;
 end;
for i:=1 to n do
 begin
  write(k[i]);
  for j:=1 to 3 do
  write(a[i,j]:4);
  writeln;
 end;
readln
end.
1
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
15.04.2012, 17:23  [ТС]
вопрос по сортировке матрицы, оно будет сортировать только второй столбец?

а на счет условия, английский я знаю без словаря хорошо) сейчас вам кратко объясню своими словами)
Входные данные, это кол-во классов, в следующих n(кол-во класов) строках надо ввести k(кол-во учеников), и в той же строке ввести оценки этих учеников
Выходные данные, в первой строке Класс X. Во второй строке для этого класса вывести мин. оценку и макс. оценку, и наибольшую разницу между соседними элементами(оценками имеется ввиду) отсортированными в порядке убывания.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
15.04.2012, 17:30
Цитата Сообщение от Takeshi80 Посмотреть сообщение
вопрос по сортировке матрицы, оно будет сортировать только второй столбец?
Так хоть чуть вникайте в код, программу пишите, проверяйте.
С какого угару только второй столбец?
Короче привет Англии, нет больше общаться с Вами, денег море, диплом купите. Все идиоты с деньгами за границу дернули.
0
 Аватар для Takeshi80
17 / 15 / 10
Регистрация: 08.03.2012
Сообщений: 126
15.04.2012, 17:49  [ТС]
за сортировку спасибо) мне собственно только она была и нужна
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.04.2012, 17:49
Помогаю со студенческими работами здесь

В массиве A(n) отсортировать положительные числа, выделив их в отдельный массив, в порядке бодростания, а отрицательные числа в порядке убывания
В массиве A(n) отсортировать положительные числа, выделив их в отдельный массив, в порядке бодростания, а отрицательные числа в порядке...

Отсортировать массив в порядке убывания методом минимума
Требуется отсортировать массив в порядке убывания методом минимума. и использовать процедуры: procedure inmas(n:=integer;var a:mas)...

Как отсортировать массив в порядке возрастания, убывания.
Как отсортировать массив в порядке возрастания и убывания?

Отсортировать столбцы матрицы в порядке убывания и вывести результат на экран
Дан текстовый файл, в нем числа 3x3. Задача: отсортировать столбцы матрицы в порядке убывания и вывести результат на экран.

Выбрать все товары из галантерейного отдела и отсортировать в порядке убывания цен
Пожалуйста, помогите решить задачу. Работа с файлами. Даны сведения: название товара, отдел, количество, цена. Выбрать все товары...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Программный отбор элементов справочника Номенклатура по группе 1С
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника Сотрудники по перечислениям 1С
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru