Program k;
const u=100;
var I,sum,n,m:integer;
t:array[1..u,1..u] of integer;
procedure tab_IN (var l,k:integer); {Ввод матрицы R}
var i,j:integer;
begin
for i:=1 to l do
begin
for j:=1 to k do
begin
write('t[',i,',',j,']=');
read(t[i,j])
end;
writeln
end;
end;
procedure TAB_OUT(var L,K:integer); {Вывод матрицы R}
var i,j:integer;
begin
for i:=1 to L do
begin
for j:=1 to K do
write(T[i,j]:6);
writeln
end
end;
begin
writeln ('Введите размер матрицы R');
write ('N=');
read (N);
write ('M=');
read (M);
TAB_IN(N,M);
writeln ('Матрица ',N,'X', M);
TAB_OUT(N,M);
end.
Суммировние строк в матрице
Нужно сосчитать сумму в каждой строчке, а затем поменять местами 1-й столбец со столбцом в котором находится min-я сумма. И новую матрицу вывести на экран
Например: Если min –я сумма во 2-й строчке, то меняем 1 столбец со 2 столбцом.
программа:
Код:
Заранее спасибо.
[COLOR=blue]пользуйся тэгами [ code] [ /code ] пожалуйста[/COLOR]
Код:
for i := [COLOR=red]2[/COLOR] to N do begin
sum = 0;
for j := 1 to M do sum := sum + T[i,j];
end;
sum = 0;
for j := 1 to M do sum := sum + T[i,j];
end;
2 - сравниваешь сумму с минимальной суммой ([COLOR=red]изначально min_sum нужно задать сумму 1-ой строки, а затем построить цикл начиная со 2-ой , min_index := 1[/COLOR])
Код:
if sum < min_sum then begin
min_sum = sum;
min_index = i; {индекс строки}
end;
min_sum = sum;
min_index = i; {индекс строки}
end;
3 - снова 1 этап, до тех пор пока не пройдешь все строки (при помощи for-а естественно)
после окончания цикла меняешь местами столбцы: i и 1
только вот надо проверить что [COLOR=blue]i >= 2 [/COLOR]
[COLOR=black][/COLOR]
Код:
for i := 1 to N do
begin
sum = 0;
for j := 1 to M do sum := sum + T[i,j];
if i=1 then begin min_index=1; min_sum:=sum else
if min_sum>sum then begin min_sum:=sum; min_index:=i; end;
end;
begin
sum = 0;
for j := 1 to M do sum := sum + T[i,j];
if i=1 then begin min_index=1; min_sum:=sum else
if min_sum>sum then begin min_sum:=sum; min_index:=i; end;
end;
а вот насчет 3: мне кажется что здесь должно меняться местами не только со вторым столбцом, а с любым, т.е. с номером столбца чему равен min_index, это может быть и 3 и 4 и даже 1-ый столбец. Если я прав, то следом возникает вопрос к Anna82: а что если количество строк будет больше чем кол-во столбцов???
Цитата:
1 и 2 можно объединить
я и не думала разделять это на разные циклы,
просто дала возможность Анне самой это написать :)
Цитата:
а вот насчет 3: мне кажется что здесь должно меняться местами не только со вторым столбцом, а с любым, т.е. с номером столбца чему равен min_index, это может быть и 3 и 4 и даже 1-ый столбец.
ну это я не дочитала :), или точнее говоря невнимательно прочла
внесла поправки в мой предыдущий пост ( [COLOR=red]#2[/COLOR] )
Привожу пример:
1. Есть матрица
3 3 4
2 3 6
1 2 3
2. нужно сосчитать сумму в строках
3 3 4 = 10
2 3 6 =11
1 2 3 = 6
3. Найти минимальную сумму, в данном примере это 6 (это число находится в 3 -й строчке)
4. т.к min-е число находится в 3-й строчке, то нужно переставить местами 3-й столбец с 1-м столбцом и элементам присвоить "знак -"
-4 3 3
-6 3 2
-3 2 1
5. Снова считаем сумму в строчках, находим min-ю сумму и переставляем уже со 2-м столбцом, затем 3-м и т. д. пока столбцы не кончатся.
поэтому переежаем в раздел Студенты :)
Привожу пример:
1. Есть матрица
3 3 4
2 3 6
1 2 3
2. нужно сосчитать сумму в строках
3 3 4 = 10
2 3 6 =11
1 2 3 = 6
3. Найти минимальную сумму, в данном примере это 6 (это число находится в 3 -й строчке)
4. т.к min-е число находится в 3-й строчке, то нужно переставить местами 3-й столбец с 1-м столбцом и элементам присвоить "знак -"
-4 3 3
-6 3 2
-3 2 1
5. Снова считаем сумму в строчках, находим min-ю сумму и переставляем уже со 2-м столбцом, затем 3-м и т. д. пока столбцы не кончатся.[/QUOTE]
Такс! в чем проблема-то?
Все что надо коды уже дали, надо просто собрать воедино и оформить в виде процедуры (имхо, это будет проще, все равно несколько раз придется обращаться)
Итого: лень? или "не умею"?
Цитата:
Такс! в чем проблема-то?
да вот еще нет кода как столбцы поменять,
хотя я такой код на форуме уже писала,
как минимум на VB и С.
пару минут назад вот думала:
"может еще и на Pascal написать?", только вот Анна молчит
хотя я такой код на форуме уже писала,
как минимум на VB и С.
пару минут назад вот думала:
"может еще и на Pascal написать?", только вот Анна молчит[/quote]
А в "ИСходники" никто не заглядывал? Там вот такая штука завалялась:
http://sources.codenet.ru/download/814/MatrixAPI.html
Код:
[SIZE=2]procedure MREPCOLS(var A:TMatrix; Source, Dest:integer);
var i:integer;
m:Real;
begin
for i:=0 to GetRowCount(A)-1 do begin
m:=A[Dest,i];
A[Dest,i]:=A[Source,i];
A[Source,i]:=m;
end;
end;
var i:integer;
m:Real;
begin
for i:=0 to GetRowCount(A)-1 do begin
m:=A[Dest,i];
A[Dest,i]:=A[Source,i];
A[Source,i]:=m;
end;
end;
[/SIZE]
дать в ФАК,
я давно уже думала что надо сделать набор функций
по матрицам, спискам, тогда может станет меньше одинаковых вопросов
writeln ('Матрица с суммой строк',T[sum]);
Но что-то не получается :((
А так всё суммирует, но сумму выводит отдельно от исходной матрицы.
Код:
for i:=1 to n do
for j:=1 to n do
begin
write(a[i,j]:4); // выводим элементы матрицы
if j=n then writeln(' сумма элементов строки = ',T);
// если достигли конца строки, то выводим сумму ее элементов
end;
for j:=1 to n do
begin
write(a[i,j]:4); // выводим элементы матрицы
if j=n then writeln(' сумма элементов строки = ',T);
// если достигли конца строки, то выводим сумму ее элементов
end;
[/size]
Код:
for i:=1 to n do[COLOR=red] begin[/COLOR]
for j:=1 to n do write(a[i,j]:4);{выводим элементы матрицы}
{ достигли конца строки, выводим сумму ее элементов}
writeln(' сумма элементов строки = ',T);
[COLOR=red]end;[/COLOR]
for j:=1 to n do write(a[i,j]:4);{выводим элементы матрицы}
{ достигли конца строки, выводим сумму ее элементов}
writeln(' сумма элементов строки = ',T);
[COLOR=red]end;[/COLOR]