1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Есть двумерный массив NxM и готовая задача., помогите отредактировать
дан двумерный массив N x M, вводимый с клавиатуры. расположить все элементы массива по убыванию.
var a,b:array[1..50,1..50] of real; m,n,i,j,p,q,r:integer; begin write('m=');readln(m); write('n=');readln(n); for m:=1 to m do for n:=1 to n do begin write; readln(a[m,n]); end; writeln; for m:=1 to m do begin for n:=1 to n do write(a[m,n]:5:0); writeln; end; for j:=1 to n do for i:=1 to m do
begin r:=1; for p:=1 to m do begin if not(p=i) then if a[p,j]>a[i,j] then r:=r+1;{} if a[p,j]=a[i,j] then if i>p then r:=r+1 end; b[r,j]:=a[i,j]; end; writeln; for p:=1 to m do begin for q:=1 to n do write(b[p,q]:5:0); writeln; end; readln end.
Не совсем понятно, как именно ты хочешь сортировать - по строкам или по столбцам, а может, по спирали.. В одномерном массиве сортировка однозначная, в даух- и более мерных необходимо уточнение. Твоя прога довольно неплохо сортирует по убыванию внутри каждого столбца. Если ты хочешь сквозную сортировку (по строкам или по столбцам - уточни), то надо переводить нумерацию из двумерной в одномерную (согласно с тем, по чему сортировка).
Не совсем по теме: впервые вижу использование одной и той же переменной для предела и параметра цикла.. По идее, оно вроде бы как должно работать (и работает!)), но все же я не рекомендую так делать. Строго говоря, значение параметра цикла после выхода из оного не определено. Так что ты рискуешь потерять граничное значение. Кроме того, последовательность присвоения значений индексу и границе тоже не строго определено, так что возможно, что цикл будет всегда выполняться ровно один раз. Короче, не вижу смысла экономить на этом.
И еще: уделяй внимание форматированию кода. Вот тебе, например, твой код (но с заменой ручного ввода на случайный и с заменой параметров цикла, хоть и не везде) отформатированный по правилам:
var a,b:array[1..50,1..50] of real; m,n,i,j,p,q,r:integer; begin write('m=');readln(m); write('n=');readln(n); for m:=1 to m do for n:=1 to n do begin {write; readln(a[m,n]);} a[m,n]:= Random*100-50 end; for i:=1 to m do begin for j:=1 to n do write(a[i,j]:6:1); writeln; end; for j:=1 to n do for i:=1 to m do begin r:=1; for p:=1 to m do begin if not(p=i) then if a[p,j]>a[i,j] then r:=r+1; {} if a[p,j]=a[i,j] then if i>p then r:=r+1 end; b[r,j]:=a[i,j]; end; writeln; for p:=1 to m do begin for q:=1 to n do write(b[p,q]:6:1); writeln; end; readln end.
Намного же лучше, правда? Да, и ставь теги, когда постишь код на форум, плз.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой