характеристикой столбца матрицы называется сумма его отрицательных элементов. Переставляя столбцы заданной матрицы, расположить их в соответствии с ростом характеристик.
делов том,что я пыталась решить эту задачу по образу и подобию упорядочения элементов в одномерном массиве.но цели этой задачи так и не достигла=(
по образу и подобию упорядочения элементов в одномерном массиве
Tribunal
29.12.2005 17:41
эээ....а поподробнее можно...?
volvo
29.12.2005 17:44
Что именно не понятно? Там же приведен пример использования...
Вот, например, приведи промер, КАК ты пыталась решить это по подобию одномерных массивов, я покажу как это перенести на двумерные...
Tribunal
29.12.2005 21:33
ну примерно так:
Код
program swap;
const row=4; col=4; r=10;
var a:array [1..col,1..row]; s:array [1..row]; i,j,k,t,min:integer;
begin
{ввод матрицы} randomize; for i:=1 to col do begin for j:=1 to row do begin a[i,j]:=random( r )+1; write(a[i,j]:4); end; writeln;
for j:=1 to row do begin s[j]:=0; for i:=1 to col do if a[i,j]<0 then s[j]:=s[j]+a[i,j]; end;
for i:=1 to col do for j:=1 to row-1 do begin min:=j; for k:=j+1 to row do if a[k]>a[min] then min:=k; t:=a[k]; a[j]:=a[min]; a[min]:=t;; end;
for i:=1 to col do begin for j:=1 to row do write(a[i,j]:4); writeln; end;
end.
volvo
29.12.2005 21:37
Ну, а я говорил про что-то в этом духе:
const
size_row = 10;
size_col = 10;
type
trow = array[1 .. size_row] of integer;
tmatrix = array[1 .. size_col] of trow;
function f(r: trow): integer;
var i, s: integer;
begin
s := 0;
for i := 1to size_row do
s := s + r[i];
f := s;
end;
procedure swap_cols(var mx: tmatrix;
const i, j: integer);
var T: trow;
begin
T := mx[i]; mx[i] := mx[j]; mx[j] := T
end;
procedure print(var mx: tmatrix);
var i, j: integer;
beginfor i := 1to size_row dobeginfor j := 1to size_col do
write(mx[j][i]:4);
writeln
end;
end;
var
mx: tmatrix;
i, j: integer;
begin{ инициализация матрицы }for i := 1to size_row dofor j := 1to size_col do
mx[i][j] := random(50)-25;
writeln('before:'); print(mx);
for i := 1to size_col dofor j := size_col downto i+1doif f(mx[j - 1]) > f(mx[j]) then
swap_cols(mx, j - 1, j);
writeln('after:'); print(mx);
end.
Tribunal
29.12.2005 21:47
а почему вот здесь:
Цитата
mx[i][j] := random(50)-25;
ошибка range check error?
volvo
29.12.2005 21:59
Не знаю... Если я выложил код, значит у меня он отработал... Никаких Range Check Error не было замечено... Да и нечему там давать такую ошибку, если только ты не меняла здесь:
trow = array[1 .. size_row] of integer;
integer на какой-нибудь беззнаковый тип, например, Byte или Word...
Tribunal
29.12.2005 22:02
я ничего не меняла.ошибка выводится.=(
volvo
29.12.2005 22:06
А присоедини-ка свой PAS-файл в аттаче... Я понимаю, что ты ничего не меняла, но там просто физически не может быть этой ошибки... (не надо копировать текст программы, мне нужен ИМЕННО PAS-файл!!!)
И заодно - напиши, какой компилятор у тебя...
Tribunal
29.12.2005 22:11
прости ламака...а где компилятор пишется?
volvo
29.12.2005 22:15
Меню Help -> About
Tribunal
29.12.2005 22:17
там написано только то,что паскаль версии 7.0
volvo
29.12.2005 22:18
Все, можешь не писАть... Все ясно... Делай так:
mx[i][j] := Integer(random(50))-25;
Tribunal
29.12.2005 22:20
а объясни,пожалуйста,философский смысл выражения mx[i][j]... я такое впервые вижу.что это означает?
volvo
29.12.2005 22:25
mx[i, j] тебе ближе? Используй это... Я по привычке из C++ так пишу (благо, Паскаль позволяет оба варианта записи)...
Tribunal
29.12.2005 22:25
спасибо=)
volvo
29.12.2005 22:27
Хотя здесь есть еще один момент: фактически матрица описана, как массив столбцов, поэтому крайне рекомендуется запись именно mx[i][j], где mx[i] - столбец №I , а [j] - уже обращение к j-му элементу этого столбца...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.