Нужно написать процедуру, которая упорядочивает по возрастанию (обменом) 1 строку в массиве 10х10. В самой программе с помощью этой процедуры упорядочить все строки. По всякому пытался делать, но правильно работать никак не хочет. Помогите, пожалуйста, исправить ошибки.
Айра
23.05.2007 18:22
PROGRAM prog2; TYPE arr1=array[1..10,1..10] of integer; VAR i,j,k :integer; A,a1 :arr1; Fin, Fout :text; PROCEDURE poryadok(k: integer; var a1: arr1); var T,j,i:integer; begin for i:=2 to 10 do {значение k у тебя передается из программы} {так что здесь изменять его не следует, воспользуйся лучше переменной i} for j:=10 downto i do if a1[k,j-1] > a1[k,j] then {сортировка у меня выглядит чуть-чуть по-другому} begin T:=a1[k,j-1]; a1[k,j-1]:=a1[k,j]; a1[k,j]:=T; end; end;
BEGIN assign(Fout,'res2.txt'); rewrite(Fout); assign(Fin,'dat2.txt'); reset(Fin); for i:=1 to 10 do for j:=1 to 10 do begin read(Fin,A[i,j]); end; close(Fin); for k:=1 to 10 do begin poryadok(k, A); end; for i:=1 to 10 do begin for j:=1 to 10 do begin write(Fout,A[i,j]); end; writeln(Fout); end; close(Fout); END.
Вроде все работает правильно..
volvo
23.05.2007 18:38
Оля, смотри:
Цитата
{значение k у тебя передается из программы, так что здесь изменять его не следует, воспользуйся лучше переменной i}
Во-первых, даже если ты его и изменишь, ничего страшного не будет - изменения не передаются в вызывающую программу, а вообще если ты не хочешь чтобы пользователь что-то менял -
PROCEDURE poryadok(CONST k: integer; var a1: arr1); { <--- Пускай попробует теперь изменить }
Но и это не главное... Главное - то, что процедура может быть проще:
TYPE vector = array[1 .. 10] of integer; arr1 = array[1 .. 10] of vector; ... PROCEDURE poryadok(var a1: vector); var T, j, i: integer; begin for i:=2 to 10 do for j:=10 downto i do if a1[j-1] > a1[j] then begin {сортировка у меня выглядит чуть-чуть по-другому} T:=a1[j-1]; a1[j-1]:=a1[j]; a1[j]:=T; end; end;
{ и вызов: } ... for k:=1 to 10 do poryadok(A[k]); ...
Айра
23.05.2007 19:23
Цитата
Во-первых, даже если ты его и изменишь, ничего страшного не будет - изменения не передаются в вызывающую программу
А вот сама сортировка всех строк, пока я не заменила k на i, происходила неправильно, она была только в одной строке... Ведь k, как я поняла, содержит номер упорядочиваемой строки, а если мы его меняем в процедуре, то второй проход будет уже не в той же строке, а значит сортировка полностью не пройдет. Если я не права, то поправь
TYPE vector = array[1 .. 10] of integer; arr1 = array[1 .. 10] of vector;
arr1 - это массив состоящий из массивов? Тогда получается, что каждая строка и будет vector'ом, а дальше, в вызове, работаем по-строчно. Я правильно поняла?..
p.s. [оффтоп] я рада, что ты вернул рыжее чудо на аватар [/оффтоп]
volvo
23.05.2007 19:28
Цитата
... а дальше, в вызове, работаем по-строчно. Я правильно поняла?
Правильно... Что, в принципе и требовалось в задании:
Цитата
написать процедуру, которая упорядочивает по возрастанию (обменом) 1 строку в массиве 10х10
, а если надо упорядочить только одну строку - зачем передавать всю матрицу?
Orevin
24.05.2007 23:59
Спасибо, с вашей помощью разобрался
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.